Annotation of gcc/vmsconfig.com, revision 1.1.1.5

1.1       root        1: $ !
                      2: $ !    Set up to compile GCC on VAX/VMS
                      3: $ !
                      4: $! Set the def dir to proper place for use in batch. Works for interactive too.
                      5: $flnm = f$enviroment("PROCEDURE")     ! get current procedure name
                      6: $set default 'f$parse(flnm,,,"DEVICE")''f$parse(flnm,,,"DIRECTORY")'
                      7: $ !
                      8: $set symbol/scope=(nolocal,noglobal)
1.1.1.5 ! root        9: $if f$trnlnm("IFILE$").nes."" then close/noLog ifile$
1.1       root       10: $ !
                     11: $ echo = "write sys$output"
                     12: $ !
                     13: $ if f$search("config.h") .nes. "" then delete config.h.*
1.1.1.2   root       14: $ copy [.config.vax]xm-vms.h []config.h
                     15: $ echo "Linked `config.h' to `[.config.vax]xm-vms.h'.
1.1       root       16: $ !
                     17: $ if f$search("tconfig.h") .nes. "" then delete tconfig.h.*
                     18: $ create []tconfig.h
                     19: $DECK
                     20: /* tconfig.h == config.h :: target and host configurations are the same */
                     21: #include "config.h"
                     22: $EOD
                     23: $ echo "Created `tconfig.h'.
                     24: $ !
                     25: $ if f$search("hconfig.h") .nes. "" then delete hconfig.h.*
                     26: $ create []hconfig.h
                     27: $DECK
1.1.1.2   root       28: /* hconfig.h == config.h :: host and target configurations are the same */
1.1       root       29: #include "config.h"
                     30: $EOD
                     31: $ echo "Created `hconfig.h'.
                     32: $ !
                     33: $ if f$search("tm.h") .nes. "" then delete tm.h.*
1.1.1.2   root       34: $!! copy [.config.vax]vms.h []tm.h
                     35: $ edit/tpu/nojournal/nosection/nodisplay/command=sys$input -
                     36:         [.config.vax]vms.h /output=[]tm.h
                     37: $DECK
                     38: !
                     39: !  Copy file, changing lines of the form
                     40: !      #include "vax/*"
                     41: !  into
1.1.1.4   root       42: !      #include "config-*"
1.1.1.2   root       43: !
                     44:    file := CREATE_BUFFER("file", GET_INFO(COMMAND_LINE, "file_name"));
                     45:    targ := LINE_BEGIN & '#include' & SPAN(ASCII(32)+ASCII(9)) & '"vax/';
                     46:    rang := CREATE_RANGE(BEGINNING_OF(file), END_OF(file));
                     47:    LOOP
                     48:       incl := SEARCH_QUIETLY(targ, FORWARD, EXACT, rang);
                     49:       EXITIF incl = 0;
                     50:       POSITION(BEGINNING_OF(incl));
                     51:       ERASE(incl);
1.1.1.4   root       52:       COPY_TEXT('#include "config-');
1.1.1.2   root       53:       rang := CREATE_RANGE(END_OF(incl), END_OF(file));
                     54:    ENDLOOP;
                     55:    WRITE_FILE(file, GET_INFO(COMMAND_LINE, "output_file"));
                     56:    QUIT
                     57: $EOD
                     58: $ echo "Generated `tm.h' from `[.config.vax]vms.h'.
1.1       root       59: $ !
1.1.1.4   root       60: $      !crude hack to allow compiling from [.cp] subdirectory
                     61: $ if f$search("config-vax.h") .nes. "" then delete config-vax.h;*
                     62: $ copy [.config.vax]vax.h []config-vax.h
                     63: $ echo "Linked `config-vax.h' to `[.config.vax]vax.h' for `tm.h'."
                     64: $ !
1.1.1.5 ! root       65: $ call make_lang_incl "options.h"
        !            66: $ !
        !            67: $ call make_lang_incl "specs.h"
        !            68: $ !
        !            69: $ if f$search("vax.md") .nes. "" then delete vax.md;*
        !            70: $ copy [.config.vax]vax.md []vax.md
        !            71: $ echo "Copied `vax.md' from `[.config.vax]vax.md'."
1.1       root       72: $ !
                     73: $ if f$search("aux-output.c") .nes. "" then delete aux-output.c.*
1.1.1.2   root       74: $ copy [.config.vax]vax.c []aux-output.c
                     75: $ echo "Linked `aux-output.c' to `[.config.vax]vax.c'.
1.1       root       76: $ !
                     77: $!
                     78: $!
                     79: $! Create the file version.opt, which helps identify the executable.
                     80: $!
                     81: $search version.c version_string,"="/match=and/output=t.tmp
                     82: $open ifile$ t.tmp
                     83: $read ifile$ line
                     84: $close ifile$
                     85: $delete t.tmp;
                     86: $ijk=f$locate("""",line)+1
                     87: $line=f$extract(ijk,f$length(line)-ijk,line)
                     88: $ijk=f$locate("""",line)
                     89: $line=f$extract(0,ijk,line)
                     90: $ijk=f$locate("\n",line)
                     91: $line=f$extract(0,ijk,line)
                     92: $!
                     93: $i=0
                     94: $loop:
                     95: $elm=f$element(i," ",line)
                     96: $if elm.eqs."" then goto no_ident
                     97: $if (elm.les."9").and.(elm.ges."0") then goto write_ident
                     98: $i=i+1
                     99: $goto loop
                    100: $!
                    101: $no_ident:
                    102: $elm="?.??"
                    103: $!
                    104: $!
                    105: $write_ident:
                    106: $open ifile$ version.opt/write
                    107: $write ifile$ "ident="+""""+elm+""""
                    108: $close ifile$
                    109: $purge version.opt
                    110: $!
                    111: $!
                    112: $! create linker options files that lists all of the components for all
                    113: $! possible compilers.  We do this by editing the file Makefile.in, and 
                    114: $! generating the relevant files from it.
                    115: $!
                    116: $!
                    117: $! Make a copy of the makefile if the sources are on a disk that is NFS 
                    118: $!    mounted on a unix machine.
                    119: $if f$search("Makefile.in").eqs."" .and. f$search("$M$akefile.in").nes."" -
                    120:        then copy $M$akefile.in Makefile.in
1.1.1.4   root      121: $! This should be automated across all front-end subdirectories.
                    122: $!    For now, it's hardcoded.
                    123: $if f$search("[.cp]Makefile.in").eqs."" .and. f$search("[.cp]$M$akefile.in").nes."" -
                    124:        then copy [.cp]$M$akefile.in [.cp]Makefile.in
1.1       root      125: $!
                    126: $!
                    127: $echo "Now processing Makefile.in to generate linker option files."
1.1.1.5 ! root      128: $edit/TPU/noJournal/noSection/noDisplay/Command=sys$input: Makefile.in
        !           129: !!
        !           130: VARIABLE makefile_buf, opt_file_buf, complist_buf, extra_compilers; ! Globals.
1.1       root      131: 
1.1.1.5 ! root      132: !!
        !           133: PROCEDURE process_makefile( )
        !           134:   !
        !           135:   ! Interpret Makefile.in and subsidiary Make-lang.in templates.
        !           136:   !
        !           137:   LOCAL range1, cmark, makefilename;
        !           138: 
        !           139:   makefilename   := GET_INFO (COMMAND_LINE, 'FILE_NAME'); ! "Makefile.in"
        !           140:   makefile_buf   := CREATE_BUFFER ("makefile", makefilename);
        !           141:   opt_file_buf   := CREATE_BUFFER ("opt_file");
        !           142:   complist_buf   := CREATE_BUFFER ("complist");
        !           143:   extra_compilers := CREATE_ARRAY;
        !           144:   !
        !           145:   SET (NO_WRITE, makefile_buf, ON);    ! Used as workspace; don't save it.
        !           146:   SET (OUTPUT_FILE, complist_buf, "compilers.list");
        !           147:   !
        !           148:   ! Make some textual substitutions.
        !           149:   !
        !           150:   configure_makefile ();
        !           151:   !
        !           152:   ! Collect a list of supported compilers (``COMPILERS=xxx'' macro).
        !           153:   !
        !           154:   identify_compilers ();
        !           155:   !
        !           156:   ! Plus other known compilers described by Make-lang.in makefile fragments.
        !           157:   ! Add new entries as needed; args are (target name, subdirectory name).
        !           158:   !
        !           159:   additional_compiler ("cc1plus", "cp");
        !           160:   !
        !           161:   WRITE_FILE (complist_buf);           ! Now save "compilers.list".
        !           162:   !
        !           163:   ! Add to this list, as required.  The file "Makefile.in" is searched for
        !           164:   ! a tag that looks like "LINE_BEGIN + 'tag + (optional space) + "="".
        !           165:   ! The contents are assumed to be a list of object files, and from this
        !           166:   ! list a VMS linker options file is generated.
        !           167:   !
        !           168:   generate_option_file ("OBJS",      "=", "independent.opt");
        !           169:   generate_option_file ("LIB2FUNCS", "=", "libgcc2.list");
        !           170:   generate_option_file ("BC_ALL",    "=", "bc_all.list");
        !           171:   generate_option_file ("BI_OBJ",    "=", "bi_all.opt");
        !           172:   !
        !           173:   ! Now change OBJS in the Makefile, so each language specific options file
        !           174:   ! does not pick up all of the language independent files.
        !           175:   !
        !           176:   POSITION (BEGINNING_OF (makefile_buf));
        !           177:   COPY_TEXT ("OBJS="); ! New copy with empty value, seen before real OBJS.
        !           178:   SPLIT_LINE;
        !           179:   !
        !           180:   ! Lastly, process each compiler-specific object dependency list.
        !           181:   !
        !           182:   POSITION (BEGINNING_OF (complist_buf));
        !           183:   LOOP
        !           184:     cmark := MARK (NONE);
        !           185:     EXITIF (cmark = END_OF (complist_buf));
        !           186:     ! The current line contains the name of a compiler target, such as "cc1".
        !           187:     MESSAGE (CURRENT_LINE);    ! Give some interactive feedback.
        !           188:     generate_option_file (CURRENT_LINE, ":", CURRENT_LINE + "-objs.opt");
        !           189:     POSITION (cmark);
        !           190:     MOVE_VERTICAL (1);         ! Go to the next line.
        !           191:   ENDLOOP;
        !           192: ENDPROCEDURE; !process_makefile
        !           193: !!
        !           194: 
        !           195: PROCEDURE process_objc_lib( )
        !           196:   !
        !           197:   ! Interpret objc/Makefile, after finishing the top makefile.
        !           198:   !
        !           199:   ON_ERROR
        !           200:     [TPU$_OPENIN]:
        !           201:       MESSAGE ("Cannot load objc/Makefile for ""ObjClib""; skipping it.");
        !           202:       RETURN;
        !           203:   ENDON_ERROR;
        !           204: 
        !           205:   ERASE (makefile_buf);                        !discard top Makefile
        !           206:   POSITION (END_OF (makefile_buf));
        !           207:   READ_FILE ("[.objc]Makefile");       !load objc one
        !           208:   MESSAGE ("objclib");
        !           209:   pat_replace (ASCII(9), " ");         !change any <tab> to <space>
        !           210:   generate_option_file ("OBJC_O", "=", "objc-objs.opt");
        !           211:   POSITION (BEGINNING_OF (makefile_buf));
        !           212:   ! Join any continuation lines; we want the header list to be one line.
        !           213:   pat_replace ("\" & LINE_END, );
        !           214:   generate_option_file ("OBJC_H", "=", "objc-hdrs.list");
        !           215: ENDPROCEDURE; !process_objc_lib
        !           216: !!
        !           217: 
        !           218: PROCEDURE configure_makefile( )
        !           219:   !
        !           220:   ! Plug in some values normally handled by `configure'.  Rather than
        !           221:   ! replacing the dummy entries, insert the real entries before them.
        !           222:   !
        !           223:   POSITION (BEGINNING_OF (makefile_buf));
        !           224:   COPY_TEXT ("target=vax-vms");                        SPLIT_LINE;
        !           225:   COPY_TEXT ("out_file=aux-output.c");         SPLIT_LINE;     ! vax/vax.c
        !           226:   COPY_TEXT ("out_object_file=aux-output.o");  SPLIT_LINE;     ! aux-output.obj
        !           227:   COPY_TEXT ("md_file=vax.md");                        SPLIT_LINE;     ! vax/vax.md
        !           228:   COPY_TEXT ("tm_file=tm.h");                  SPLIT_LINE;     ! vax/tm-vms.h
        !           229: ENDPROCEDURE; !configure_makefile
        !           230: !!
        !           231: 
        !           232: PROCEDURE identify_compilers( )
        !           233:   !
        !           234:   ! Retrieve the list of supported compilers from Makefile.in, and put them
        !           235:   ! into file "compilers.list", one per line, for subsequent access from DCL.
        !           236:   !
        !           237:   LOCAL range1;
        !           238: 
        !           239:   ! Strip most comments from the makefile, to speed up subsequent processing.
        !           240:   POSITION (BEGINNING_OF (makefile_buf));
        !           241:   pat_replace (LINE_BEGIN & "#" & REMAIN & LINE_END, );
        !           242: !#  ! Convert directory references to VMS syntax (actually, just strip it).
        !           243: !#  pat_replace (" $(srcdir)/", " ");
        !           244:   ! Look up the ``COMPILERS=cc1 xyzzy'' Makefile macro and put
        !           245:   ! its ``cc1 xyzzy'' value into the compilers buffer.
        !           246:   POSITION (BEGINNING_OF (complist_buf));
        !           247: !#--at some point we may want to add this--
        !           248: !#  recursive_fetch_tag ("CCCP", "=");   ! Include the preprocessor.
        !           249: !#  POSITION (END_OF (complist_buf));
        !           250:   recursive_fetch_tag ("COMPILERS", "=");
        !           251:   ! Convert all spaces into newlines, then remove any blank lines.
        !           252:   pat_replace (SPAN(" "), LINE_END);
        !           253:   pat_replace (LINE_BEGIN & LINE_END, );
        !           254: ENDPROCEDURE; !identify_compilers
        !           255: !!
        !           256: 
        !           257: PROCEDURE additional_compiler( cname, subdir )
        !           258:   !
        !           259:   ! Load Make-lang.in for compiler CNAME from SUBDIR and append it to the
        !           260:   ! end of Makefile.in's buffer.  Add CNAME to the "compilers.list" buffer.
        !           261:   !
        !           262:   ON_ERROR
        !           263:     ! Don't abort if user removes the supporting subdirectory for a
        !           264:     ! language she's not interested in.
        !           265:     [TPU$_OPENIN]:
        !           266:       MESSAGE ("Cannot load " + subdir + "/Make-lang.in for "
        !           267:               + '"' + cname + '"' + "; skipping it.");
        !           268:       RETURN;
        !           269:   ENDON_ERROR;
        !           270: 
        !           271:   POSITION (END_OF (makefile_buf));
        !           272:   SPLIT_LINE;  ! Separate with a blank line.
        !           273:   READ_FILE ("[." + subdir + "]Make-lang.in"); ! Load Makefile fragment.
        !           274:   ! Make sure that $(xxx_OTH_SRCS) expands to empty string by renaming $(it)
        !           275:   pat_replace ("_OTH_SRCS)", "_OTH_SRCS_dummy_)");
        !           276:   ! Convert subdirectory references into VMS syntax.
        !           277:   pat_replace ("$(srcdir)/" + subdir + "/", "[." + subdir + "]");
        !           278:   ! Add this name to compilers.list.
        !           279:   POSITION (END_OF (complist_buf));
        !           280:   COPY_TEXT (cname);
        !           281:   ! Make array entry indexed by compiler's file name; its value is arbitrary.
        !           282:   extra_compilers{cname} := subdir;
        !           283: ENDPROCEDURE; !additional_compiler
        !           284: !!
        !           285: 
        !           286: PROCEDURE generate_option_file( tag_name, punct, outfile_name )
        !           287:   !
        !           288:   ! Produce a file listing the names of particular object files, for use
        !           289:   ! as input to the linker and also for use in finding source names by
        !           290:   ! make-cc1.com.  Generally, any name suffix will be suppressed.
        !           291:   !
        !           292:   LOCAL range1, range2;
        !           293: 
        !           294:   POSITION (BEGINNING_OF (opt_file_buf));
        !           295:   recursive_fetch_tag (tag_name, punct);
        !           296:   ! First fix up for subdirectory/Make-lang.in.
        !           297:   IF (pat_replace ("stamp-objlist" & (SPAN(" ")|LINE_END), " ") > 0) THEN
        !           298:     recursive_fetch_tag ("stamp-objlist", ":");
        !           299:   ENDIF;
        !           300:   ! Now fix up a few things in the output buffer.
        !           301:   pat_replace (("bytecode"|"Makefile") & (SPAN(" ")|LINE_END), " ");
        !           302: !#  FILL (CURRENT_BUFFER, " ", 1, 80, 0);      ! Condense things a bit.
        !           303:   pat_replace ("." & ("o"|"c"|"y") & ((SPAN(" ")&LINE_END)|LINE_END), LINE_END);
        !           304:   pat_replace ("." & ("o"|"c"|"y") & SPAN(" "), ",");
        !           305:   pat_replace (".h" & (SPAN(" ")|LINE_END), ".h,");
        !           306:   ! Remove trailing commas, if present.
        !           307:   pat_replace ("," & ((SPAN(" ")&LINE_END)|LINE_END), LINE_END);
        !           308:   ! Get rid of spaces and blank lines.
        !           309:   pat_replace (SPAN(" "), LINE_END);
        !           310:   pat_replace (LINE_BEGIN & LINE_END, );
        !           311:   ! Second fix up for subdirectory/Make-lang.in;
        !           312:   ! avoid "sticky defaults" when linker processes the resulting options file.
        !           313:   IF (extra_compilers{outfile_name - "-objs.opt"} <> TPU$K_UNSPECIFIED) THEN
        !           314:     POSITION (BEGINNING_OF (opt_file_buf));
        !           315:     range1 := CREATE_RANGE (MARK (NONE), END_OF (CURRENT_BUFFER), NONE);
        !           316:     LOOP
        !           317:       range2 := SEARCH_QUIETLY (LINE_BEGIN | ",", FORWARD, EXACT, range1);
        !           318:       EXITIF (range2 = 0);
        !           319:       POSITION (BEGINNING_OF (range2));
        !           320:       IF (CURRENT_CHARACTER = ",") THEN  MOVE_HORIZONTAL (1); ENDIF;
        !           321:       ! If it's not already "[.subdir]name", explicitly make it "[]name".
        !           322:       IF (CURRENT_CHARACTER <> "[") THEN  COPY_TEXT ("[]"); ENDIF;
        !           323:       MOVE_HORIZONTAL (1);
        !           324:       MODIFY_RANGE (range1, MARK (NONE), END_OF (range1));
        !           325:     ENDLOOP;
        !           326:   ENDIF;
        !           327:   ! Now write the output file.
        !           328:   SET (OUTPUT_FILE, opt_file_buf, outfile_name);
        !           329:   WRITE_FILE (opt_file_buf);
        !           330:   ERASE (opt_file_buf);                ! Clear buffer out for next opt_file pass.
        !           331: ENDPROCEDURE; !generate_option_file
        !           332: !!
        !           333: 
        !           334: PROCEDURE recursive_fetch_tag( tag_n, punct )
        !           335:   !
        !           336:   ! Look up TAG_N, copy it to OPT_FILE_BUF, and then translate any $(...)
        !           337:   ! definitions that appear.  The translation is put at the current point.
        !           338:   !
        !           339:   LOCAL mark1, mark2, range1, tag_range, tag_string;
        !           340: 
        !           341:   fetch_tag (tag_n, punct);
        !           342:   ! Substitute any makefile symbols $(...).
        !           343:   POSITION (BEGINNING_OF (CURRENT_BUFFER));
        !           344:   LOOP
        !           345:     range1 := SEARCH_QUIETLY ("$(" &
1.1       root      346:       SPAN("abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ#~0123456789")
1.1.1.5 ! root      347:                                   & ")", FORWARD, EXACT);
        !           348:     EXITIF (range1 = 0);
        !           349:     POSITION (BEGINNING_OF (range1));
        !           350:     MOVE_HORIZONTAL (2);       ! Past opening "$(".
        !           351:     mark1 := MARK (NONE);
        !           352:     POSITION (END_OF (range1));
        !           353:     MOVE_HORIZONTAL (-1);      ! In front of closing ")".
        !           354:     mark2 := MARK (NONE);
        !           355:     tag_range := CREATE_RANGE (mark1, mark2, NONE);
        !           356:     POSITION (END_OF (range1));
        !           357:     tag_string := STR (tag_range);
        !           358:     ERASE (range1);
        !           359:     fetch_tag (tag_string, "=");
        !           360:     POSITION (BEGINNING_OF (CURRENT_BUFFER));
        !           361:   ENDLOOP;
        !           362: ENDPROCEDURE; !recursive_fetch_tag
        !           363: !!
1.1       root      364: 
1.1.1.5 ! root      365: PROCEDURE fetch_tag( tag_n, punct )
        !           366:   !
        !           367:   ! Looks up the translation of a tag, and inserts it at the current location
        !           368:   ! in the buffer.
        !           369:   !
        !           370:   LOCAL mark0, mark1, mark2, range2;
1.1.1.4   root      371: 
1.1.1.5 ! root      372:   mark0 := MARK (NONE);     ! Remember where we started; restore before return.
        !           373:   POSITION (BEGINNING_OF (makefile_buf));
        !           374:   ! The tag definition always starts in the first column, and might have
        !           375:   ! optional space(es) before "=" or ":" punctuation.
        !           376:   range2 := SEARCH_QUIETLY (LINE_BEGIN & tag_n & ((SPAN(" ") & punct) | punct),
        !           377:                            FORWARD, EXACT);
        !           378:   IF (range2 = 0) THEN
        !           379:     POSITION (mark0);
        !           380:     RETURN;
        !           381:   ENDIF;
        !           382:   POSITION (END_OF (range2));
        !           383:   MOVE_HORIZONTAL (1);         ! Move beyond "TAG=".
        !           384:   mark1 := MARK (NONE);
        !           385:   POSITION (BEGINNING_OF (range2));
        !           386:   LOOP
        !           387:     MOVE_VERTICAL (1);
        !           388:     MOVE_HORIZONTAL (-2);
        !           389:     EXITIF (CURRENT_CHARACTER <> "\");
        !           390:     ERASE_CHARACTER (1);
        !           391:     MOVE_HORIZONTAL (1);
        !           392:   ENDLOOP;
        !           393:   MOVE_HORIZONTAL (1);
        !           394:   mark2 := MARK (NONE);
        !           395:   range2 := CREATE_RANGE (mark1, mark2, NONE);
        !           396:   POSITION (mark0);
        !           397:   IF (LENGTH (range2) <> 0) THEN
        !           398:     COPY_TEXT (range2);
        !           399:   ENDIF;
        !           400: ENDPROCEDURE; !fetch_tag
        !           401: !!
        !           402: 
        !           403: PROCEDURE pat_replace( oldstring, newstring )
        !           404:   !
        !           405:   ! Replace all occurrences of a pattern.
        !           406:   !
        !           407:   LOCAL range1, range2, kill_it, count;
        !           408: 
        !           409:   count := 0;
        !           410:   kill_it := (GET_INFO (newstring, 'TYPE') = UNSPECIFIED);     ! Omitted arg.
        !           411:   range1 := CREATE_RANGE (BEGINNING_OF (CURRENT_BUFFER),
        !           412:                          END_OF (CURRENT_BUFFER), NONE);
        !           413:   LOOP
        !           414:     range2 := SEARCH_QUIETLY (oldstring, FORWARD, EXACT, range1);
        !           415:     EXITIF (range2 = 0);
        !           416:     count := count + 1;
        !           417:     POSITION (BEGINNING_OF (range2));
        !           418:     ERASE (range2);
        !           419:     IF (newstring = LINE_END) THEN
        !           420:       SPLIT_LINE;
        !           421:     ELSE IF (NOT kill_it) THEN
        !           422:       COPY_TEXT (newstring);
        !           423:     ENDIF; ENDIF;
        !           424:     MODIFY_RANGE (range1, MARK (NONE), END_OF (range1));
        !           425:   ENDLOOP;
        !           426:   RETURN count;
        !           427: ENDPROCEDURE; !pat_replace
        !           428: !!
1.1.1.4   root      429: 
                    430: !
1.1.1.5 ! root      431: ! This is the main routine.
1.1       root      432: !
1.1.1.5 ! root      433: process_makefile ();
        !           434: process_objc_lib ();   !this uses a different makefile
        !           435: QUIT;  ! All done; don't write any modified buffers.
        !           436: !!
1.1       root      437: $ echo ""
                    438: $!
                    439: $! Remove excessive versions of the option files...
                    440: $!
1.1.1.5 ! root      441: $ purge *.opt,*.list
1.1       root      442: $!
                    443: $!
                    444: $!
                    445: $ if f$search("config.status") .nes. "" then delete config.status.*
1.1.1.5 ! root      446: $ create config.status
        !           447: Links are now set up for use with a vax running VMS.
1.1       root      448: $ type config.status
                    449: $ echo ""
1.1.1.5 ! root      450: $!
        !           451: $ exit
        !           452: $
        !           453: $!
        !           454: $! Construct a header file based on subdirectory contents
        !           455: $!
        !           456: $make_lang_incl: subroutine
        !           457: $  if f$search(p1).nes."" then delete 'p1';*
        !           458: $  create 'p1' !empty file with ordinary text-file attributes
        !           459: $  open/Append ifile$ 'p1'
        !           460: $  write ifile$ "/* ''p1' */"
        !           461: $  hfile = f$search("[]''p1'")
        !           462: $  topdir = f$parse(hfile,,,"DIRECTORY") - "]"
        !           463: $lang_incl_loop:
        !           464: $  hfile = f$search("[.*]lang-''p1'")
        !           465: $  if hfile.eqs."" then goto lang_incl_done
        !           466: $  dir = f$parse(hfile,,,"DIRECTORY") - "]"
        !           467: $! convert absolute path to relative one, yielding "[.subdir]"
        !           468: $  dir = "[" + f$edit(dir - topdir,"LOWERCASE") + "]"
        !           469: $  write ifile$ "#include ""''dir'lang-''p1'"""
        !           470: $  goto lang_incl_loop
        !           471: $lang_incl_done:
        !           472: $  close ifile$
        !           473: $  echo "Created `''p1''."
        !           474: $ endsubroutine !make_lang_incl

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.