http://invisible-island.net/make-tools/
Copyright © 2023 by Thomas E. Dickey
My original build-script for flist (from 1984-1985) was cruder than this, but I reworked it in 1993 to make it easier to modify, using local subroutines. Oddly enough, these scripts link with the VAX-C curses library, which was not used by flist. Both the local subroutines and the curses library came about because I adapted a similar script which I wrote at that time for vile.
$! VAX/VMS DCL build script for FLIST and BROWSE
$!
$! Tested with:
$! VMS system version 5.4-2
$! VAX-C version 3.2
$
$ VERIFY = F$VERIFY(0)
$ set := set
$ set symbol/scope=(nolocal,noglobal)
$ mylib := [-.lib]flist.olb
$
$ if "''p1'" .eqs. "" .or. "''p1'" .eqs. "ALL"
$ then
$ call mkdir bin
$ call mkdir lib
$
$ call cc_lib ACPCOPY
$ call cc_lib ACPLOOK
$ call cc_lib ALARM
$ call cc_lib ARGVDCL
$ call cc_lib CANOPEN
$ call cc_lib CHPROT
$ call cc_lib CHRCMD
$ call cc_lib CMDSTK
$ call cc_lib CMPBLK
$ call cc_lib CMPPROT
$ call cc_lib CPYBLK
$ call cc_lib CRT
$ call cc_lib DCLAREA
$ call cc_lib DCLARG
$ call cc_lib DCLCHK
$ call cc_lib DCLINX
$ call cc_lib DCLOPT
$ call cc_lib DCLWILD
$ call cc_lib DDS
$ call cc_lib DEBRIEF
$ call cc_lib DIRARG
$ call cc_lib DIRCHK
$ call cc_lib DIRCMD
$ call cc_lib DIRDATA
$ call cc_lib DIRENT
$ call cc_lib DIRFIND
$ call cc_lib DIRHIGH
$ call cc_lib DIROPEN
$ call cc_lib DIRPATH
$ call cc_lib DIRPROT
$ call cc_lib DIRREAD
$ call cc_lib DIRSEEK
$ call cc_lib DOMORE
$ call cc_lib DSPC
$ call cc_lib EDTCMD
$ call cc_lib FGETR
$ call cc_lib FLCOLS
$ call cc_lib FLCOPY
$ call cc_lib FLDLET
$ call cc_lib FLDUMP
$ call cc_lib FLEDIT
$ call cc_lib FLESCP
$ call cc_lib FLFIND
$ call cc_lib FLMORE
$ call cc_lib FLNOID
$ call cc_lib FLPAGE
$ call cc_lib FLPROT
$ call cc_lib FLREAD
$ call cc_lib FLRNAM
$ call cc_lib FLSCAN
$ call cc_lib FLSHOW
$ call cc_lib FLSHOW
$ call cc_lib FLSORT
$ call cc_lib FREELIST
$ call cc_lib GETPAD
$ call cc_lib GETPASS
$ call cc_lib GETPROT
$ call cc_lib GETRAW
$ call cc_lib HELP
$ call cc_lib HIGHVER
$ call cc_lib INSPECT
$ call cc_lib ISOWNER
$ call cc_lib NAMEHEAP
$ call cc_lib PATHDOWN
$ call cc_lib PATHUP
$ call cc_lib PUTRAW
$ call cc_lib RABRFA
$ call cc_lib RMSCC
$ call cc_lib RMSINIT
$ call cc_lib RMSIO
$ call cc_lib RMSLOOK
$ call cc_lib SCANINT
$ call cc_lib SCANVER
$ call cc_lib SETCTRL
$ call cc_lib SETPROT
$ call cc_lib SHOQUOTA
$ call cc_lib SNAPSHOT
$ call cc_lib STR7
$ call cc_lib STRABBR
$ call cc_lib STRFORM2
$ call cc_lib STRLCPY
$ call cc_lib STRNULL
$ call cc_lib STRSCALE
$ call cc_lib STRSKPS
$ call cc_lib STRTRIM
$ call cc_lib STRUCPY
$ call cc_lib STRVCMP
$ call cc_lib STRVCPY
$ call cc_lib STRWCMP
$ call cc_lib SYASCTIM
$ call cc_lib SYBINTIM
$ call cc_lib SYDELETE
$ call cc_lib SYFOM
$ call cc_lib SYGETMSG
$ call cc_lib SYGETSYM
$ call cc_lib SYHOUR
$ call cc_lib SYRENAME
$ call cc_lib SYRIGHTS
$ call cc_lib SYTRNLOG
$ call cc_lib TABEXP
$ call cc_lib TERMSIZE
$ call cc_lib TRACE
$ call cc_lib TTRACE
$ call cc_lib VERSION
$ call cc_lib WHOAMI
$ call cc_lib XABPROUI
$
$ call compile FL
$ call compile BROWSE
$
$ call build FLIST FL
$ call build BROWSE BROWSE
$
$ if f$search("CRM.*") .nes. ""
$ then
$ call cc_lib CRS
$ call cc_lib PIPEFUNC
$ call compile CRM
$ call build SORTX CRM
$ endif
$
$ if f$search("[-.bin]helplib.hlb") .eqs. ""
$ then
$ write sys$output "** making help-library"
$ library/create/help [-.bin]helplib
$ library/replac/help [-.bin]helplib []flist,browse
$ endif
$ write sys$output "** made ALL"
$ endif
$
$ if "''p1'" .eqs. "CLEAN"
$ then
$ if f$search("*.lis") .nes. "" then delete *.lis;*
$ if f$search("*.map") .nes. "" then delete *.map;*
$ if f$search("*.obj") .nes. "" then delete *.obj;*
$ write sys$output "** made CLEAN"
$ endif
$
$ if "''p1'" .eqs. "CLOBBER"
$ then
$ @ 'f$environment("procedure") CLEAN
$ if f$search("[-.lib]*.*") .nes. "" then delete [-.lib]*.*;*
$ if f$search("[-.bin]*.*") .nes. "" then delete [-.bin]*.*;*
$ write sys$output "** made CLOBBER"
$ endif
$
$ VERIFY = F$VERIFY(VERIFY)
$ exit
$
$
$ cc_lib: subroutine
$ if f$search("''p1'.obj") .eqs. ""
$ then
$ call compile 'p1
$ call mklib 'mylib
$ library/replace 'mylib 'p1.obj
$ endif
$ endsubroutine
$
$
$ compile: subroutine
$ if f$search("''p1'.obj") .eqs. ""
$ then
$ write sys$output "** compiling ''p1'"
$ cc /NoListing /Include=([]) 'p1
$ endif
$ endsubroutine
$
$
$ build: subroutine
$ target = "[-.bin]''p1'.exe"
$ if f$search("''target'") .eqs. ""
$ then
$ write sys$output "** linking ''p1'"
$ link/map='p1/exec='target 'p2,normal/opt,'mylib/lib,SYS$LIBRARY:VAXCRTL/Lib,SYS$LIBRARY:VAXCCURSE/Lib
$ endif
$ endsubroutine
$
$
$ mklib: subroutine
$ if f$search("''p1'") .eqs. "" then library/create'p2 'p1
$ endsubroutine
$
$
$ mkdir: subroutine
$ if f$search("[-]''p1'.dir") .eqs. "" then create/directory [-.'p1]
$ endsubroutine