DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ M T ┃
Length: 40955 (0x9ffb) Types: TextFile Names: »MAKEFILE_COM«
└─⟦5f3412b64⟧ Bits:30000745 8mm tape, Rational 1000, ENVIRONMENT 12_6_5 TOOLS └─ ⟦91c658230⟧ »DATA« └─⟦5d656759a⟧ └─⟦this⟧
$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $!--Makefile.Com - Compile, Load, and Install the Rational RXI program. $! $! @Makefile <what> $! $! Customer Editing Instructions (for full Source recompilation only) : $! $! 1) Uncomment the appropriate defintition for TCP_IP below. Define it as $! either MULTINET or as WOLLONGONG depending upon which set of TCP/IP $! libraries you are using. $! $! 2) Check the definitions below for either: $! MultNet => Multinet_Olb, MultiNetINet, and MultiSys, or else $! Wollongong => Wollongong_Olb, WollNetINet, and WollSys. $! These are the directories containing the linkable object library $! and the various *.h include files for the TCP/IP software that you are $! using. $! $! 3) Check the definitions below of BINDIR/BINPROT, HELPLIB/HELPPROT, $! FONTDIR/FONTPROT, and XAPPLOADDIR/XAPPPROT. Make sure that they are $! appropriate for your system(s). $! $! Customer Editing Instructions (for simple binary installation only) : $! $! 1) Check the definitions below of BINDIR/BINPROT, HELPLIB/HELPPROT, $! FONTDIR/FONTPROT, and XAPPLOADDIR/XAPPPROT. Make sure that they are $! appropriate for your system(s). $! $! Available Makefile commands : $! $! Regeneration and Installation of RXI from sources : $! $! install - Installs just the rxi executables and data files. $! install.help - Installs just the rxi help information. $! install.fonts - Installs just the fonts that rxi needs $! install.all - Does install, install.help, and install.fonts. $! $! relink - Relinks the rxi executables with local workstation $! libraries (perhaps cause the use of shared $! libraries, a desirable situation.) $! clean - "Cleans" the directory so that you can rebuild $! rxi from sources. $! all - Creates all rxi executables (from sources if $! necessary, do this after a "make clean"). $! install.fonts.fallback- If the normal install.fonts process fails (some $! important system program is missing for instance) $! then this can be used to attempt to install the $! fonts using programs supplied by Rational. $! $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $!--EDIT STEP ONE : First, which TCP/IP code are we using? $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! $ on warning then exit 4 $! TCP_IP := MULTINET $ TCP_IP := WOLLONGONG $! $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $!--EDIT STEP TWO : Excelan MultiNet Release 2.0 or later. $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ if TCP_IP .eqs. "MULTINET" $ then $ define/process Multinet_Olb Sys$SysRoot:[Multinet.Library] $ $ define/process MultiInclude Sys$SysRoot:[Multinet.Include] $ define/process MultiNetINet Sys$SysRoot:[Multinet.Include.NetINet] $ define/process MultiSys Sys$SysRoot:[Multinet.Include.Sys] $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $!--EDIT STEP TWO : Wollongong WIN/TCP release 5.0.2 or later. $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ else $ if f$trnlnm("Twg$Tcp") .nes. "" .or. f$parse("Twg$Tcp:[Netdist]") .nes. "" - then goto Twg_Ok $ write sys$output "Logical name Twg$Tcp is not defined?" $ exit 4 $ Twg_Ok : $ define/process Wollongong_Olb Twg$Tcp:[Netdist.Lib] $ $ define/process WollInclude Twg$Tcp:[Netdist.Include] $ define/process WollNetINet Twg$Tcp:[Netdist.Include.NetINet] $ define/process WollSys Twg$Tcp:[Netdist.Include.Sys] $ $ define/process Sys WollSys: $ $ endif $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $!--EDIT STEP THREE : Generated items are installed into these directories. $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $!--All installed/created executables, help files, and fonts will be created $! with this username attached as the owner. $ $ OWNER := SYSTEM $ $!--Binary executables go here with this set of protections. Use the SYSEXE $! directory located within SYS$SYSTEM: $! SHOW LOGICAL SYS$SYSTEM $ $ BINDIR := SYS$COMMON:[SYSEXE] $ BINPROT := SYSTEM:RWED,OWNER:RWED,GROUP:RE,WORLD:RE $ $!--Help text goes in this file. Probably the system wide help file called $! SYS$HELP:HELPLIB.HLB $! SHOW LOGICAL SYS$HELP $! DIR SYS$HELP:HELP*.* $ $ HELPLIB := SYS$HELP:HELPLIB.HLB $ HELPPROT := SYSTEM:RWED,OWNER:RWED,GROUP:R,WORLD:R $ $!--RXI default resource files go here with this set of protections. Use the $! DECW$DEFAULTS.SYSTEM directory located in DECW$SYSTEM_DEFAULTS: $! SHOW LOGICAL DECW$SYSTEM_DEFAULTS: $ $ XAPPLOADDIR := SYS$COMMON:[DECW$DEFAULTS.SYSTEM] $ XAPPPROT := SYSTEM:RWED,OWNER:RWED,GROUP:R,WORLD:R $ $!--Fonts for RXI usable by the server go here with this set of protections. $! Use one of the User_* elements in the search path named DECW$FONT:. $! The one you use is determined by the type of screen you have. DECW$FONT $! should already be set up for your hardware so just use the one mentioned $! there. $! SHOW LOGICAL/TABLE=DECW$SERVER0_TABLE DECW$FONT $ $ FONTDIR := SYS$COMMON:[SYSFONT.DECW.USER_75DPI] $! FONTDIR := SYS$COMMON:[SYSFONT.DECW.USER_100DPI] $ FONTPROT := SYSTEM:RWED,OWNER:RWED,GROUP:R,WORLD:R $ $!--"Standard" installations sometimes need to create directories. They are $! created with owner=SYSTEM and these protections. $ $ DIRPROT := SYSTEM:RWED,OWNER:RWED,GROUP:RE,WORLD:RE $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $!***************************************************************************** $! **** DO NOT EDIT BELOW THIS LINE **** DO NOT EDIT BELOW THIS LINE **** $!***************************************************************************** $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $!--Fix a bug in the DECwindows FONT compiler. Make sure that SET DEFAULT $! is to a devce:[directory] and never ever to a concealed:[directory]. $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ DEF = f$environment("DEFAULT") ! Get Show Default $ DEF = f$parse( DEF, , , , "NO_CONCEAL" ) $ Next_Level : ! Remove all ".]["'s $ CMD = f$locate( ".][", DEF ) $ if CMD .ge. f$length(DEF) then goto Reset_Default $ DEF = f$extract( 0, CMD, DEF) + "." + - f$extract( CMD + 3, f$length(DEF), DEF ) $ goto Next_Level $ $ Reset_Default : $ CMD = "set default " + f$parse( DEF, , , "DEVICE" ) + - f$parse( DEF, , , "DIRECTORY" ) $ write sys$output CMD $ CMD $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $!--Logical names we need in order to function. $! RxiX11 - Where the RXI include files are located. "[], [.X11]" $! X11 - Where the VMS X11 include files may be found $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ CMD = f$environment("DEFAULT") $ if f$length(CMD) .gt. f$locate("]",CMD) $ then $ CMD = f$extract( 0, f$locate("]",CMD), CMD ) + ".X11]" $ else $ if f$length(CMD) .gt. f$locate(">",CMD) $ then $ CMD = f$extract( 0, f$locate(">",CMD), CMD ) + ".X11>" $ else $ write sys$error "?SHOW DEFAULT has neither a ] nor a > in it?" $ write sys$error " Default => ", f$environment("DEFAULT") $ exit 4 $ endif $ endif $ CMD = "define/process RxiX11 " + f$environment("DEFAULT") + ", " + CMD $ CMD $ define/process X11 RxiX11:, DecW$Include: $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $!--Make sure that we got our argument so we know what to do. $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ if P1 .nes. "" then goto Have_Argument $ type sys$input Makefile.Com requires an argument. @Makefile <what> <what> = all - do everything but install steps; compile and load <what> = install - do all plus install the program <what> = install.fonts - just install fonts <what> = install.help - just install the help <what> = install.all - do all plus install program, fonts, and help <what> = clean - destroy all created files <what> = relink - just relink the program; no recompilations <what> = a .c file - just recompile that one file $ Exit 1 $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! Define all of the local symbols that we will be needing $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ Have_Argument : $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! Compiler and Linker switches $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ CCFLAGS := /OPTIMIZE $! CCFLAGS := /NOOPTIMIZE /DEBUG /LIST /SHOW=(INCLUDE,EXPANSION) $ $ if TCP_IP .eqs. "MULTINET" $ then $ DEFINES = "/DEFINE=(" + - """" + TCP_IP + """" + - ")" $ else $ DEFINES = "/DEFINE=(" + - """" + TCP_IP + """" + - ")" $ endif $ $ LINKFLAGS := /NOTRACEBACK $! LINKFLAGS := /TRACEBACK /DEBUG /MAP /FULL $! LINKFLAGS := /TRACEBACK /MAP /FULL $ $ BACKUPFLAGS:= /NOTRACEBACK $ $ INCLUDES := /INCLUDE=( RxiX11:, SYS$LIBRARY: ) $ $ VAXCRTL := SYS$SHARE:VAXCRTL.EXE/SHAREABLE $ BACKUPCRTL := SYS$LIBRARY:VAXCRTL.OLB/LIBRARY $ $ if TCP_IP .eqs. "MULTINET" $ then $ LINKLIBS := MULTINET_OLB:LIB.OLB/LIBRARY, - SYS$COMMON:[SYSLIB]DECW$DWTLIBSHR.EXE/SHAREABLE, - SYS$COMMON:[SYSLIB]DECW$XLIBSHR.EXE/SHAREABLE $ LINKLIBS = LINKLIBS+", " + f$environment("DEFAULT") + "MULTI.OLB/LIBRARY" $ else $ LINKLIBS := WOLLONGONG_OLB:LIBNET.OLB/LIBRARY, - WOLLONGONG_OLB:LIBNETACC.OLB/LIBRARY, - WOLLONGONG_OLB:LIBNET.OLB/LIBRARY, - SYS$COMMON:[SYSLIB]DECW$DWTLIBSHR.EXE/SHAREABLE, - SYS$COMMON:[SYSLIB]DECW$XLIBSHR.EXE/SHAREABLE $ endif $ $ $ PGM := rxi.exe $ OBJS := - main.obj,input.obj,charproc.obj,VTPrsTbl.obj,cursor.obj, - tabs.obj,screen.obj,misc.obj,data.obj,scrollbar.obj, - button.obj,menu.obj,util.obj,- RMCommand.obj,RMForm.obj,- ratmenu.obj,RMShell.obj,RMLabel.obj,RMSub.obj,rxitelnet.obj, - [.X11]AsciiSink.obj,[.X11]AsciiText.obj,[.X11]Atoms.obj, - [.X11]CvtStdSel.obj,[.X11]DefErrMsg.obj,[.X11]Dialog.obj, - [.X11]DiskSrc.obj,[.X11]GrayPixmap.obj,[.X11]Label.obj, - [.X11]Lower.obj,[.X11]Scroll.obj,[.X11]Simple.obj, - [.X11]StringSrc.obj,[.X11]StrToJust.obj, - [.X11]StrToOrnt.obj,[.X11]StrToWidg.obj,[.X11]Text.obj, - [.X11]TextTr.obj $ $ PGM2 := rxi_detached.exe $ OBJS2 := rxi_detached.obj $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! Dispatch and do whatever we were requested to do. $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ DOT = f$locate( ".", P1 ) $ if DOT .eq. f$length( P1 ) - 1 then goto Dot_File $ if DOT .lt. f$length( P1 ) then goto Dot_Target $ gosub 'P1' $ write sys$output "@makefile ", P1," Done." $ exit 1 $ Dot_File : $ gosub 'f$extract( 0, DOT, P1 )' $ write sys$output P1," Done." $ exit 1 $ Dot_Target : $ P1 = f$extract( 0, DOT, P1 ) + "_" + f$extract( DOT+1, 100, P1 ) $ gosub 'P1' $ exit 1 $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! Common composite requests $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! Compile and link the PGM. $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ maint: $ all: $ write sys$output "@makefile ALL" $ gosub Compile_All $ PGMNAME = PGM $ DEPS = OBJS $ gosub Link_Pgm $ gosub Rxi_Detached $ return $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! Compile and link the RXI_DETACHED program. $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ rxi_detached : $ write sys$output "@makefile RXI_DETACHED" $ NAME := rxi_detached $ DEPS := "" $ SAVE_DEFINES = DEFINES $ DEFINES = "/DEFINE=(""BINDIR=""""" + BINDIR + """"""",""PGM=""""" + - PGM + """"""")" $ gosub Compile_C_File $ DEFINES = SAVE_DEFINES $ PGMNAME = PGM2 $ DEPS = OBJS2 $ gosub Link_Pgm $ return $ $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! Compile, link, and install the PGM. $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ install: $ write sys$output "@makefile INSTALL" $ gosub all $ gosub Install_Pgm $ return $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! Just relink PGM $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ relink: $ write sys$output "@makefile RELINK" $ gosub Compile_All $ if f$search( PGM ) .nes. "" then delete 'PGM';* $ PGMNAME = PGM $ DEPS = OBJS $ gosub Link_Pgm $ gosub rxi_detached $ return $ $ backup_relink : $ LINKFLAGS = BACKUPFLAGS $ VAXCRTL = BACKUPCRTL $ gosub relink $ return $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! Install the fonts $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ install_fonts: $ write sys$output "@makefile INSTALL.FONTS" $ OBJ = FONTDIR $ gosub Dir_Exists $ $!--First we must compile all of the fonts and move them into the font $! directory. $ $ Next_Font : $ NAME = f$search( "fixed-screen-*.bdf" ) $ if NAME .eqs. "" then goto Fonts_Compiled $ CMD = "font " + NAME + "/minbox" $ write/symbol sys$output CMD $ CMD $ NAME = f$parse(NAME, , , "NAME") + ".DECW$FONT" $ CMD = "copy " + NAME + " " + FONTDIR + NAME $ write/symbol sys$output CMD $ CMD $ CMD = "set file/protection=(" + FONTPROT + ")/owner=" + OWNER + " " + - FONTDIR + NAME $ write sys$output CMD $ CMD $ goto Next_Font $ Fonts_Compiled : $ if FONTDIR .eqs. f$environment("DEFAULT") then return $ CMD = "delete *.DECW$FONT;*" $ write/symbol sys$output CMD $ CMD $ type sys$input ******************************************************************************* * You will have to reboot any DECwindows machines that share this font * * directory before those machines will be able to successfully run the RXI * * program. You may also wish to purge the font directory. Note that purging * * old versions of fonts may cause running servers to be unable to find those * * fonts because the DECwindows server remembers not only file names but also * * version numbers. A reboot causes a server to use the latest versions. * ******************************************************************************* $ return $ $ $ backup_fonts: $ FONTDIR = f$environment("DEFAULT") $ OWNER = f$getjpi("","UIC") $ gosub install_fonts $ return $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! Install the help files $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ install_help: $ write sys$output "@makefile INSTALL.HELP" $ OBJ = f$parse(HELPLIB,,,"NODE","SYNTAX_ONLY") + - f$parse(HELPLIB,,,"DEVICE","SYNTAX_ONLY") + - f$parse(HELPLIB,,,"DIRECTORY","SYNTAX_ONLY") $ gosub Dir_Exists $ gosub Version_Info $ copy sys$input: rxi.tpu !---Get the version.info file in here. Add spaces to the start of ! each and every line; so they don't give the librarian fits. ver_buffer := create_buffer( "version", "version.info" ); position( beginning_of( ver_buffer ) ); lines := get_info( ver_buffer, "record_count" ); loop exitif lines = 0; copy_text( " " ); position( line_begin ); move_vertical( 1 ); lines := lines - 1; endloop; !---Now get the main help template file. main_buffer := create_buffer( "main", "rxi-man.tmpl" ); !---Locate the @VERSION@ edit point and insert version info. position( beginning_of( main_buffer ) ); theline := search( "@VERSION@", forward, exact ); position( beginning_of( theline ) ); erase( theline ); copy_text( ver_buffer ); !---Write out the result. write_file( main_buffer, "rxi-man.tmp" ); quit; $ CMD = "edit/tpu/nosection/nodisplay/command=rxi.tpu" $ write sys$output CMD $ CMD $ delete rxi.tpu;* $ CMD = "library/help/compress=(keysize:64)/output=temp.hlb " + HELPLIB $ write sys$output CMD $ CMD $ CMD = "copy temp.hlb " + HELPLIB $ write sys$output CMD $ CMD $ CMD = "set file/protection=(" + HELPPROT + ")/owner=" + OWNER + " " + - HELPLIB $ write sys$output CMD $ CMD $ delete temp.hlb;* $ CMD = "purge SYS$HELP:" $ write sys$output CMD $ CMD $ CMD = "library/help/replace " + HELPLIB + " rxi-man.tmp" $ write sys$output CMD $ CMD $ delete rxi-man.tmp;* $ return $ $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ RXI Maintenance $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ backup: $ write sys$output "@makefile BACKUP" $ gosub backup_relink $ gosub backup_fonts $ gosub cvt_backup_to_exe $ gosub cvt_exe_to_backup $ copy nl: rxi-backup.bck $ on warning then goto Vms_Can_Be_So_Silly $ delete rxi-backup.bck;*, version.info;*, RXI.Tmp;*, RXI.Tmp2;* $ Vms_Can_Be_So_Silly: $ on warning then exit 4 $ open/write bk Backup.Com $ CMD = f$parse( f$environment("DEFAULT"), , , "DIRECTORY" ) $ CMD = f$extract( 1, f$length(CMD)-2, CMD ) $ write bk "$ BACKUP_SAVE_SET = """ + CMD + """" $ write bk "$ RESTORE_SAVE_SET = f$parse( f$environment(""DEFAULT"")," + - " , , ""DIRECTORY"")" $ write bk "$ RESTORE_SAVE_SET = f$extract( 1," + - " f$length(RESTORE_SAVE_SET)-2, RESTORE_SAVE_SET )" $ write bk "$ CMD = ""backup/log rxi-backup.bck/save_set/select=["" + -" $ write bk " BACKUP_SAVE_SET + ""...] ["" + RESTORE_SAVE_SET + -" $ write bk " ""...]/new_version" $ write bk "$ write sys$output CMD" $ write bk "$ CMD" $ close bk $ purge [...]*.* $ CMD = f$parse( f$environment("DEFAULT"), , , "DIRECTORY" ) $ CMD = f$extract( 1, f$length(CMD)-2, CMD ) $ CMD = "backup/interchange [" + CMD + "...]/exclude=(rxi-backup.*) " + - "rxi-backup.bck/save_set" $ write sys$output CMD $ CMD $ CMD = "run cvt_backup_to_exe" $ write sys$output CMD $ CMD $ CMD = "delete cvt_backup_to_exe.exe;*, cvt_backup_to_exe.obj;*, " + - "cvt_exe_to_backup.obj;*" $ write sys$output CMD $ CMD $ return $ $ restore: $ write sys$output "@makefile RESTORE" $ CMD = "run cvt_exe_to_backup" $ write sys$output CMD $ CMD $ @Backup.Com $ CMD = "rename *.hh *.h" $ write sys$output CMD $ CMD $ wait 00:00:02 $ CMD = "copy *.obj *.obj" $ write sys$output CMD $ CMD $ CMD = "copy [.X11]*.obj [.X11]*.obj" $ write sys$output CMD $ CMD $ wait 00:00:02 $ CMD = "copy *.exe *.exe" $ write sys$output CMD $ CMD $ CMD = "delete rxi-backup.exe;*, rxi-backup.bck;*, backup.com;*, " + - "cvt_exe_to_backup.exe;*" $ write sys$output CMD $ CMD $ CMD = "purge [...]" $ write sys$output CMD $ CMD $ return $ $ deinstall: $ CMD = "delete " + XAPPLOADDIR + "RXI*.*;*" $ write sys$output CMD $ CMD $ CMD = "delete " + BINDIR + "RXI*.*;*" $ write sys$output CMD $ CMD $ CMD = "delete " + FONTDIR + "fixed-screen-*.decw$font;*" $ write sys$output CMD $ CMD $ CMD = "library/help/remove=(rxi) " + HELPLIB $ write sys$output CMD $ CMD $ return $ $ cvt_backup_to_exe: $ write sys$output "@makefile CVT_BACKUP_TO_EXE" $ copy nl: cvt_backup_to_exe.exe $ copy nl: cvt_backup_to_exe.obj $ delete cvt_backup_to_exe.exe;*, cvt_backup_to_exe.obj;* $ NAME := cvt_backup_to_exe $ DEPS := "" $ gosub Compile_C_File $ PGMNAME := cvt_backup_to_exe $ DEPS := cvt_backup_to_exe.obj $ gosub Link_Pgm $ return $ $ cvt_exe_to_backup: $ write sys$output "@makefile CVT_EXE_TO_BACKUP" $ copy nl: cvt_exe_to_backup.exe $ copy nl: cvt_exe_to_backup.obj $ delete cvt_exe_to_backup.exe;*, cvt_exe_to_backup.obj;* $ NAME := cvt_exe_to_backup $ DEPS := "" $ gosub Compile_C_File $ PGMNAME := cvt_exe_to_backup $ DEPS := cvt_exe_to_backup.obj $ gosub Link_Pgm $ return $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! Clean up the compilation directory $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ clean: $ write sys$output "@makefile CLEAN" $ set noon $ CMD = "delete " + PGM + ";*, *.bak;*, *.obj;*, *.log;*, *.map;*, " + - "*.tmp;*, *.decw$font;*, rxi-backup.*;*" $ write/symbol sys$output CMD $ CMD $ set default [.x11] $ CMD = "delete " + PGM + ";*, *.bak;*, *.obj;*, *.log;*, *.map;*, " + - "*.tmp;*, *.decw$font;*" $ write/symbol sys$output CMD $ CMD $ set default [-] $ return $ $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! Install the program $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ Install_Pgm : $ write sys$output "@makefile INSTALL_PGM" $ OBJ = BINDIR $ gosub Dir_Exists $ OBJ = XAPPLOADDIR $ gosub Dir_Exists $ CMD = "copy " + PGM + " " + BINDIR + PGM $ write sys$output CMD $ CMD $ CMD = "set file/protection=(" + BINPROT + ")/owner=" + OWNER + " " + - BINDIR + PGM $ write sys$output CMD $ CMD $ CMD = "copy " + PGM2 + " " + BINDIR + PGM2 $ write sys$output CMD $ CMD $ CMD = "set file/protection=(" + BINPROT + ")/owner=" + OWNER + " " + - BINDIR + PGM2 $ write sys$output CMD $ CMD $ gosub Rxi_Tmp $ CMD = "copy rxi.tmp " + XAPPLOADDIR + "RXI.DAT" $ write sys$output CMD $ CMD $ delete rxi.tmp;* $ CMD = "set file/protection=(" + XAPPPROT + ")/owner=" + OWNER + " " + - XAPPLOADDIR + "RXI.DAT" $ write sys$output CMD $ CMD $ gosub Rxi_Tmp2 $ CMD = "copy rxi.tmp2 " + XAPPLOADDIR + "RXI_Env_Menu." $ write sys$output CMD $ CMD $ CMD = "set file/protection=(" + XAPPPROT + ")/owner=" + OWNER + " " + - XAPPLOADDIR + "RXI_Env_Menu" $ write sys$output CMD $ CMD $ type sys$input ******************************************************************************* * Please enter the following foreign-command definition into the SYS$MANAGER: * * SYLOGIN.COM files for all machines that will be running RXI. This command * * provides a simple command interface to RXI that runs RXI detached. * $ CMD = "" $ CMD[0,79] := " " $ CMD[0,1] := "*" $ CMD[78,1] := "*" $ NAME = "RXI :== $ " + BINDIR + PGM2 $ CMD[10,f$length(NAME)] := 'NAME' $ write sys$output CMD $ type sys$input ******************************************************************************* $ return $ $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! Create Version.Info by reading rcg.h producing Version.Info from the $! RatRXIVersion array. $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ Version_Info : $ $!--See if we need to (re)create the file. $ $ OBJ := version.info $ DEPS := rcg.h, main.obj $ FLAG = 1 $ if f$search( "main.obj" ) .nes. "" then gosub Check_Deps $ if FLAG .eq. 0 then return $ $!--Create it. $ $ copy sys$input: rxi.tpu PROCEDURE remove_all(what) !---Find and delete all instances of the what pattern. on_error [TPU$_STRNOTFOUND] : return; endon_error; position( beginning_of( main_buffer ) ); loop theline := search( what, forward ); erase( theline ); endloop; ENDPROCEDURE; PROCEDURE remove_line(what) !---Find and delete all instances of the what pattern. on_error [TPU$_STRNOTFOUND] : return; endon_error; loop position( beginning_of( main_buffer ) ); theline := search( what, forward ); position( beginning_of( theline ) ); position( line_begin ); start := mark( none ); position( line_end ); erase( create_range( start, mark( none ), none ) ); endloop; ENDPROCEDURE; !---First we get a buffer and read the rcg.h file. main_buffer := create_buffer( "main", "rcg.h" ); !---Locate the RatRXIVersion[] array. position( beginning_of( main_buffer ) ); theline := search( "RatRXIVersion[]", forward, exact ); position( beginning_of( theline ) ); position( line_begin ); move_vertical( 1 ); start := mark( none ); position( beginning_of( main_buffer ) ); erase( create_range( mark( none ), start, none ) ); !---Locate the end of the array. theline := search( (SPAN("0 }") + ";") | "#ifdef ", forward ); position( beginning_of( theline ) ); position( line_begin ); start := mark( none ); position( end_of( main_buffer ) ); erase( create_range( start, mark( none ), none ) ); !---Remove all extraneous text. remove_all( SPAN(" ") + '"' ); remove_all( '"' + SPAN(" ,") ); !---Write out the result. write_file( main_buffer, "version.info" ); quit; $ CMD = "edit/tpu/nosection/nodisplay/command=rxi.tpu" $ write sys$output CMD $ CMD $ delete rxi.tpu;* $ return $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! Create Rxi.Tmp by editing RXI.XDefaults and replacing the definition of $! menu.envMenuFile:, recognition:, and vt100.geometry: with values from rcg.h. $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ Rxi_Tmp : $ gosub Version_Info $ copy sys$input: rxi.tpu !----Procedure to locate a resource in a file and replace the value. PROCEDURE replace_resource(rname,value) !---Locate the line we want to change. position( beginning_of( main_buffer ) ); theline := search_quietly( (rname @ thername) + SPAN(" <") + SCAN(">"), forward, exact ); if theline = 0 then return; endif; !---Erase the old value of the resource. position( end_of( thername ) ); move_horizontal( 1 ); start := mark( none ); position( line_end ); move_horizontal( -1 ); theline := create_range( start, mark( none ), none ); erase( theline ); !---Insert the new resource value. copy_text( value ); return; ENDPROCEDURE !----Procedure to locate a line in a file and extract the value. PROCEDURE locate_value(rname) !---Locate the line we want to change. position( beginning_of( main_buffer ) ); theline := search( rname, forward, exact ); !---Get a range the value of the line. position( end_of( theline ) ); move_horizontal( 1 ); start := mark( none ); position( line_end ); move_horizontal( -1 ); theline := create_range( start, mark( none ), none ); return theline; ENDPROCEDURE $ open/append rxitpu rxi.tpu $ write rxitpu "ENV := "" " + XAPPLOADDIR + "RXI_Env_Menu"";" $ close rxitpu $ append sys$input: rxi.tpu WHITE := SPAN( " " ); ! space and tab !---First we get a buffer and read the rcg.h file. main_buffer := create_buffer( "main", "rcg.h" ); !---Locate resource values. RCG := locate_value( line_begin + "#define" + WHITE + "defRV" + WHITE ); RCG := " " + substr( RCG, 2, length(RCG) - 2 ); GEO := locate_value( line_begin + "#define" + WHITE + "defGeometry" + WHITE ); GEO := " " + substr( GEO, 2, length(GEO) - 2 ); !---Erase the buffer and read in the version.info file. erase( main_buffer ); read_file( "version.info" ); lines := get_info( main_buffer, "record_count" ); position( beginning_of( main_buffer ) ); loop exitif lines = 0; copy_text( "# " ); position( line_begin ); move_vertical( 1 ); lines := lines - 1; endloop; split_line; !---Add in the RXI.Xdefaults file. position( end_of( main_buffer ) ); read_file( "RXI.Xdefaults" ); !---Replace the various resources. replace_resource( line_begin + "*recognition:", RCG ); replace_resource( line_begin + "*vt100.geometry:", GEO ); replace_resource( line_begin + "*menu.envMenuFile:", ENV ); !---Write out the result. write_file( main_buffer, "RXI.tmp" ); quit; $ CMD = "edit/tpu/nosection/nodisplay/command=rxi.tpu" $ write sys$output CMD $ CMD $ delete rxi.tpu;* $ return $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! Create Rxi.Tmp2 by editing RXI_Env_Menu and adding version.info to it. $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ Rxi_Tmp2 : $ gosub Version_Info $ copy sys$input: rxi.tpu !---First we get a buffer and read the version.info file. main_buffer := create_buffer( "main", "version.info" ); !---Turn those lines into comments. lines := get_info( main_buffer, "record_count" ); position( beginning_of( main_buffer ) ); loop exitif lines = 0; copy_text( "/* " ); position( line_end ); copy_text( " */" ); position( line_begin ); move_vertical( 1 ); lines := lines - 1; endloop; split_line; !---Add in the RXI_Env_Menu file. position( end_of( main_buffer ) ); read_file( "RXI_Env_Menu." ); !---Write out the result. write_file( main_buffer, "RXI.tmp2" ); quit; $ CMD = "edit/tpu/nosection/nodisplay/command=rxi.tpu" $ write sys$output CMD $ CMD $ delete rxi.tpu;* $ return $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! Compile and Link everything; install everything. $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ install_all: $ write sys$output "@makefile INSTALL.ALL" $ gosub All $ gosub Install_Pgm $ gosub install_fonts $ gosub install_help $ return $ $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! Compile all .c files and produce all .obj files $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ Compile_All : $ $!--Remove any blanks from the OBJS list. Loop over all elements of the list. $ $ OBJS = f$edit( OBJS, "COLLAPSE" ) $ OBJI = 0 $ CA_Obj_Loop: $ OBJ = f$element( OBJI, ",", OBJS ) $ if OBJ .eqs. "," then return $ $!--Get the name of the .obj file, eg. scrollbar, and call the code that $! knows how to compile that file. $ $ NAME = f$parse( OBJ, , , "NAME" ) $ gosub 'NAME' $ $!--Loop for the next OBJ file. $ $ OBJI = OBJI + 1 $ goto CA_Obj_Loop $ $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! PGMNAME = <program name, eg. rxi.exe> $! DEPS = <object files, eg. main.obj,scroll.obj,...> $! gosub Link_Pgm $! $! Link rxi together $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ Link_Pgm : $ $!--See if we need to link. $ $ OBJ = PGMNAME $ LNKS = f$edit( DEPS + "," + LINKLIBS + "," + VAXCRTL, "COLLAPSE" ) $ gosub Check_Deps $ if FLAG .eq. 0 then return $ $!--Put the .obj file list into a /OPTIONS file; the list is too long for the $! VMS command line. $ $ on control_y then goto Abort_Link $ NAME= f$parse( PGMNAME, , , "NAME" ) + ".tmp" $ open/write link$options 'NAME' $ LNKI = 0 $ LNK = f$element( LNKI, ",", LNKS ) $ Link_Loop: $ LNKI = LNKI + 1 $ LNK2 = f$element( LNKI, ",", LNKS ) $ if LNK2 .eqs. "," then goto Link_Close $ write link$options LNK, ",-" $ LNK = LNK2 $ goto Link_Loop $ Link_Close : $ write link$options LNK $ close link$options $ on control_y then exit 4 $ $!--Now link it together. Send the output to the LINK.LOG file. $ $ CMD = "link /executable=" + PGMNAME + " " + LINKFLAGS + - " " + NAME + "/OPTIONS" $ write/symbol sys$output CMD $ type 'NAME' $ on control_y then goto Abort_Link2 $ define sys$output link.log $ CMD $ LINK$SEVERITY = $SEVERITY $ deassign sys$output $ on control_y then exit 4 $ $!--If there were no error or warning then delete junque files. $ $ if LINK$SEVERITY .ne. 1 then goto Link_Failure $ delete 'NAME';*, link.log;* $ return $ $ $ Abort_Link : $ close/error=Abort_Link2 link$options $ Abort_Link2 : $ exit 4 $ $ Abort_Link2 : $ deassign sys$output $ Link_Failure : $ if f$search( PGMNAME ) .nes. "" then delete 'PGM';* $ exit 4 $ $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! Compilation of individual source files. $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ AsciiSink : $ NAME := [.X11]AsciiSink $ DEPS := rxios.h $ gosub Compile_C_File $ return $ $ AsciiText : $ NAME := [.X11]AsciiText $ DEPS := rxios.h $ gosub Compile_C_File $ return $ $ Atoms : $ NAME := [.X11]Atoms $ DEPS := rxios.h $ gosub Compile_C_File $ return $ $ button : $ NAME := button $ DEPS := ptyx.h, data.h, error.h, menu.h, ratmenu.h, rxitelnet.h, rxios.h $ gosub Compile_C_File $ return $ $ charproc : $ NAME := charproc $ DEPS := ptyx.h, VTparse.h, data.h, error.h, main.h, menu.h, ratmenu.h, - rcg.h, rxitelnet.h, rxios.h $ gosub Compile_C_File $ return $ $ RMCommand : $ NAME := RMCommand $ DEPS := RmCommandI.h, rxios.h, RMCommandP.h $ gosub Compile_C_File $ return $ cursor : $ NAME := cursor $ DEPS := ptyx.h, rxios.h $ gosub Compile_C_File $ return $ $ CvtStdSel : $ NAME := [.X11]CvtStdSel $ DEPS := rxios.h $ gosub Compile_C_File $ return $ $ data : $ NAME := data $ DEPS := ptyx.h, data.h, rxios.h $ gosub Compile_C_File $ return $ $ DefErrMsg : $ NAME := [.X11]DefErrMsg $ DEPS := rxios.h $ gosub Compile_C_File $ return $ $ Dialog : $ NAME := [.X11]Dialog $ DEPS := rxios.h $ gosub Compile_C_File $ return $ $ DiskSrc : $ NAME := [.X11]DiskSrc $ DEPS := rxios.h $ gosub Compile_C_File $ return $ $ RMForm : $ NAME := RMForm $ DEPS := ratmenu.h, RMLabelP.h, RMLabel.h, RMSubP.h, RMSub.h, rxios.h, - RMCommandP.h, RMCommand.h, RMFormP.h, RMForm.h $ gosub Compile_C_File $ return $ $ GrayPixmap : $ NAME := [.X11]GrayPixmap $ DEPS := rxios.h $ gosub Compile_C_File $ return $ $ input : $ NAME := input $ DEPS := ptyx.h, data.h, ratmenu.h, rxitelnet.h, rxios.h $ gosub Compile_C_File $ return $ $ Label : $ NAME := [.X11]Label $ DEPS := rxios.h $ gosub Compile_C_File $ return $ $ Lower : $ NAME := [.X11]Lower $ DEPS := rxios.h $ gosub Compile_C_File $ return $ $ main : $ NAME := main $ DEPS := ptyx.h, data.h, error.h, main.h, rcg.h, ratmenu.h, rxitelnet.h, - rxios.h $ gosub Compile_C_File $ return $ $ menu : $ NAME := menu $ DEPS := menu.h, ptyx.h, data.h, rxios.h $ gosub Compile_C_File $ return $ $ misc : $ NAME := misc $ DEPS := ptyx.h, data.h, error.h, gray.ic, wait.ic, waitmask.ic, - ratmenu.h, rxios.h $ gosub Compile_C_File $ return $ $ ratmenu : $ NAME := ratmenu $ DEPS := ratmenu.h, RMShellP.h, RMShell.h, RMLabelP.h, RMLabel.h, - RMSubP.h, RMSub.h, ptyx.h, data.h, menu.h, - rxios.h, RMForm.h, RMCommand.h $ gosub Compile_C_File $ return $ $ RMLabel : $ NAME := RMLabel $ DEPS := RMLabelP.h, RMLabel.h, rxios.h $ gosub Compile_C_File $ return $ $ RMShell : $ NAME := RMShell $ DEPS := ratmenu.h, RMShellP.h, RMShell.h, rxios.h $ gosub Compile_C_File $ return $ $ RMSub : $ NAME := RMSub $ DEPS := RMSubP.h, RMSub.h, rxios.h $ gosub Compile_C_File $ return $ $ rxitelnet : $ NAME := rxitelnet $ DEPS := rxios.h $ gosub Compile_C_File $ return $ $ screen : $ NAME := screen $ DEPS := ptyx.h, error.h, rxios.h $ gosub Compile_C_File $ return $ $ Scroll : $ NAME := [.X11]Scroll $ DEPS := rxios.h $ gosub Compile_C_File $ return $ $ Simple : $ NAME := [.X11]Simple $ DEPS := rxios.h $ gosub Compile_C_File $ return $ $ scrollbar : $ NAME := scrollbar $ DEPS := ptyx.h, data.h, error.h, rxios.h $ gosub Compile_C_File $ return $ $ StringSrc : $ NAME := [.X11]StringSrc $ DEPS := rxios.h $ gosub Compile_C_File $ return $ $ StrToJust : $ NAME := [.X11]StrToJust $ DEPS := rxios.h $ gosub Compile_C_File $ return $ $ StrToOrnt : $ NAME := [.X11]StrToOrnt $ DEPS := rxios.h $ gosub Compile_C_File $ return $ $ StrToWidg : $ NAME := [.X11]StrToWidg $ DEPS := rxios.h $ gosub Compile_C_File $ return $ $ tabs : $ NAME := tabs $ DEPS := ptyx.h, rxios.h $ gosub Compile_C_File $ return $ $ Text : $ NAME := [.X11]Text $ DEPS := rxios.h $ gosub Compile_C_File $ return $ $ TextTr : $ NAME := [.X11]TextTr $ DEPS := rxios.h $ gosub Compile_C_File $ return $ $ util : $ NAME := util $ DEPS := ptyx.h, data.h, error.h, rxios.h $ gosub Compile_C_File $ return $ $ VTPrsTbl : $ NAME := VTPrsTbl $ DEPS := VTparse.h, rxios.h $ gosub Compile_C_File $ return $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! Subroutines $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! $! $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! OBJ = name of a directory $! gosub Dir_Exists $! $! Called to make sure that a directory exists before we use it. $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ Dir_Exists: $ if f$parse(OBJ) .nes. "" then return $ CMD = "create/directory/protection=(" + DIRPROT + ")/owner=" + OWNER + - " " + OBJ $ write sys$output CMD $ CMD $ return $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! NAME = name of a .C object, eg. "main"; no .c extension $! DEPS = comma separated list of #include files, eg. "ptyx.h,data.h" $! gosub Compile_C_File $! $! Called to create/update/check-on the 'NAME'.obj file. If it does not exist $! or if any file in DEPS is newer than 'NAME'.obj then recompile the 'NAME'.c $! file. We use the CC command-symbol defined above. $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ Compile_C_File : $ $!--Does the .c file exist? Fatal error if not. $ $ SRC = NAME + ".c" $ if f$search( SRC ) .nes. "" then goto CCF_Src_Ok $ write sys$output "''NAME' is not a .c source file?" $ exit 4 $ CCF_Src_Ok : $ $!--Check the .obj file for existence and for dependencies. $ $ OBJ = NAME + ".obj" $ if DEPS .nes. "" then DEPS = SRC + "," + DEPS $ if DEPS .eqs. "" then DEPS = SRC $ gosub Check_Deps $ if FLAG .eq. 0 then return $ $!--One of the DEPS is newer than the OBJ or the OBJ does not exist, recompile $! the SRC file. $ $ CCF_Compile: $ CMD = "cc/OBJECT=" + OBJ + - DEFINES + " " + CCFLAGS + " " + INCLUDES + " " + SRC $ write/symbol sys$output CMD $ $!--The silly CC compiler isn't smart enough to remove a .OBJ file if it is $! ^C'ed while running. Get rid of the .OBJ file if we are interrupted. $ $ on control_y then goto CCF_Failure $ CMD $ if $SEVERITY .ne. 1 then goto CCF_Failure $ on control_y then exit 4 $ return $ $ CCF_Failure : $ if f$search( OBJ ) .nes. "" then delete 'OBJ';* $ exit 4 $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! OBJ := name of a file, eg. main.obj or rxi.exe $! DEPS := comma separated list of files, eg. "ptyx.h,gray.ic" $! gosub Check_Deps $! if FLAG .ne. 0 then <some file in DEPS is newer than the OBJ file> $! $! Called to see if any file contained in the DEPS list is newer than the OBJ $! file. Sets FLAG = 0 if OBJ is newer than DEPS and FLAG = 1 if OBJ is $! older than some file from DEPS. Also sets FLAG = 1 if OBJ does not exist. $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ Check_Deps : $ $!--Does the OBJ file exist? $ $ if f$search( OBJ ) .nes. "" then goto CD_Obj_Ok $ FLAG = 1 $ return $ CD_Obj_Ok : $ $!--Get the last change date for the OBJ file to compare with the DEPS dates. $! Loop over all DEPS entries and check their dates. $ $ ODATE = f$cvtime( f$file_attributes( OBJ, "RDT" ) ) $ DEPI = 0 $ CD_Dep_Loop: $ DEP = f$element( DEPI, ",", DEPS ) $ if DEP .nes. "," then goto CD_Next_Dep $ FLAG = 0 $ return $ CD_Next_Dep : $ DEPI = DEPI + 1 $ $!--If the DEP guy does not exist then complain. $ $ if f$search( DEP ) .nes. "" then goto CD_Dep_Ok $ write sys$output "''DEP', dependent file for ''OBJ' does not exist." $ exit 4 $ CD_Dep_Ok : $ $!--If the DEP is older than the OBJ then check the next DEP. $ $ if f$cvtime( f$file_attributes( DEP, "RDT" ) ) .lts. ODATE then - goto CD_Dep_Loop $ $!--One of the DEPS is newer than the OBJ, set FLAG and return. $ $ FLAG = 1 $ return