Google
 

Trailing-Edge - PDP-10 Archives - bb-bt99e-bb - compil.c09
There is 1 other file named compil.c09 in the archive. Click here to see a list.
 REP 1/1	;09C1
		TITLE	COMPIL	22E(443)	CCL CONTROL CUSP
	SUBTTL	WEIHER/CLEMENTS/RCC/PMH/NGP/DMN/HPW/JNG/SMM/JMT/WCL 12-OCT-78
 WIT
		TITLE	COMPIL	22F(574)	CCL CONTROL CUSP
			SUBTTL	OWNER HISTORY
	;	WEIHER/CLEMENTS/RCC/PMH/NGP/DMN/HPW/JNG
	;		/SMM/JMT/WCL/BCM/GAT		9-AUG-84
 REP 30/1	;09C2
	VUPDATE==5			;DEC UPDATE LEVEL
	VEDIT==443			;EDIT LEVEL
 WIT
	VUPDATE==6			;DEC UPDATE LEVEL
	VEDIT==574			;EDIT LEVEL
 INS 59/1	;09C3
	IFNDEF SIMULA,<SIMULA==1>	;[452] ACCEPT SIMULA AS A COMPILER
	IFNDEF PASCAL,<PASCAL==1>	;[463] ACCEPT PASCAL AS A COMPILER
 REP 72/1	;09C4
	IFNDEF DCOBOL,<DCOBOL==0>	;[324] DEFAULT VALUE 0=COBOL-68, 1=COBOL-74
 WIT
	IFNDEF DCOBOL,<DCOBOL==1>	;[324] DEFAULT VALUE 0=COBOL-68, 1=COBOL-74
					;[451] MAKE COBOL-74 DEFAULT COBOL COMPILER
 REP 291/2	;09C5
	;443	NO SPR		BCM	4-FEB-81
	;	MAKE BLISS10 PROCESSOR AND SWITCH THE SAME (RUN BLIS10 FOR .BLI)
 WIT
	;443	NO SPR		BCM	19-FEB-81
	;	FIX PROCESSOR vs. SWITCH PROBLEM INTRODUCED BY EDIT 441
	;444	10-30513	BCM	24-Mar-81
	;	MAKE /SAVE AND /SSAVE WORK RIGHT
	;445	10-05955	BCM	28-Apr-81
	;	FIX /NOCOMP SWITCH FOR "DEBUG A.MAC/NOCOMP"
	;446	10-30567	BCM	16-Jun-81
	;	INCREASE BUFFER SIZE FOR NUMBER OF LINK SWITCHES
	;447	QAR 10-05958	BCM	8-Aug-81
	;	implement global processor switches
	;450	NO SPR		BCM	11-Aug-81
	;	Fix an assumption that processors can still parse parenthesis.
	;451	QAR 10-05959	BCM	12-Aug-81
	;	make COBOL-74 the default COBOL compiler
	;452	QAR 10-05957	BCM	25-Aug-81
	;	add code to support SIMULA compiler
	;453	SPR 10-31944	BCM	5-Jan-82
	;	Fix edit 444 to not overlay the extension as the output extension.
	;
	;454	SPR #32066	BCM	2-JAN-82
	;	Reinsert the code at IDENT which was removed incorrectly
	;	by a zealous edit 441.
	;455	SPR #30256	BCM	15-Mar-82
	;	We output an "S" as the first chacracter in the TMPCOR file
	;	that is passed to LINED or TECO.  Since we removed the LINED
	;	support we will gradually remove this from crock from COMPIL.
	;	Change the "S" to "<space>" since TECO skips it anyway.
	;456	SPR #31279	BCM	15-Mar-82
	;	Replace code removed by edit 430.  Makes PIP run faster
	;	on copies.
	;457	SPR #31693	BCM	16-Mar-82
	;	Allow compiler selection switches (/C74,/C68,/F10,/F40) to
	;	imply compiler type.  A long overdue correction.
	;460	SPR #32659	BCM	28-Sep-82
	;	Edit 454 incomplete.  Add LABEL to command table.
	;461	SPR #32416	BCM	22-Apr-82
	;	Increase the core argument to optimal size.
	;462	SPR #31449	BCM	29-Sep-82
	;	Always LOOKUP the REL file if the processor is unknown.  This
	;	avoids debugging with DDT, when the link block type is Fortran.
	;	Made new routine SETPTH which should always be called to set
	;	up path for DOLOOK.  Changed all LOOKUP's to call DOLOOK.
	;463	NO SPR		BCM	19-Apr-83
	;	Add the PASCAL compiler to compiler list and add new compiler
	;	attribute flag word.
	;
	;START OF VERSION 22(F)
	;
	;564	SPR 10-32178/32177	GAT	4-JAN-84
	;	Fix ADDRESS CHECKS/ILL MEM REFS which were not thoroughly
	;	eliminated by edits 176/241.
	;
	;565	10-32625	GAT	19-JAN-84
	;	GIVE APPROPRIATE ERROR MESSAGE IF SOURCE FILES ARE NOT FOUND OR  
	;	.REL FILES ARE SPECIFIED IN THE "+" CONSTRUCTION.
	;566	10-31613	GAT	14-FEB-84
	;	DELETE TMPCOR FILE IF WRITING .TMP FILE ONTO DISK.
	;567	SPR 10-32007	GAT	10-FEB-84
	;	CORRECT PARSING OF COMMAND FILES THAT START WITH A COMMENT LINE(S).
	;570	10-34129	GAT	22-MAR-84
	;	ALLOW "MINUS SIGN" IN PROCESSOR SWITCHES NEEDED FOR COBOL-74.
	;571	33631		GAT	21-MAR-84
	;	USE ALGDDT AS DEFAULT DEBUGGER INSTEAD OF DDT FOR ALGOL
	;572	10-32034	GAT	8-MAY-84
	;	GIVE ERROR IF TRYING TO DEFAULT SFD(S).
	;573	SPR 10-31549	GAT	14-MAY-84
	;	DON'T PASS EXPLICIT SOURCE DEVICE TO LINK IF A /LIB FILE NEEDS 
	;	TO BE RECOMPILED (INTO OUR DIRECTORY).
	;574	10-34735	GAT	9-AUG-84
	;	MAKE GFLOAT AND F66 SWITCHES KNOWN TO COMPIL.
 INS 27/3	;09C6
		SALL	;SUPPRESS ALL MACROS AND REPEATS

		MLON

 REP 33/3	;09C7
	LODSCT==^D80		;NUMBER OF LOADER SWITCHES PER FILE ALLOWED
 WIT
	LODSCT==^D200		;[446] # OF CHRS IN LINK SWITCHES PER FILE ALLOWED
 INS 1/4	;09C8
	;[463] FLAG WORD
	SCANCH==000001	;[463] USE SCAN CHAINING ARG CONVENTIONS

 INS 36/4	;09C9
	NOCMPL==2000		;[445] NOCOMPLE REGARDLESS OF DATES
 INS 41/4	;09C10
	F66SW==2000		;[574] F66 CODE
	GFLSW==4000		;[574] GFLOATING CODE
 REP 12/5	;09C11
	>

	DEFINE PROCESS<
	IFN DFORTRAN,<X FORTRAN,FOR,FORTRAN,,,FORDDT,=>
	IFE DFORTRAN,<X FORTRAN,FOR,F40,,,,=>
	X MACRO,MAC,MACRO,,,,=
	IFE DCOBOL,<X COBOL,CBL,COBOL,,,COBDDT,=>
	IFN DCOBOL,<X COBOL,CBL,CBL74,,,COBDDT,=>
	X ALGOL,ALG,ALGOL,,,,=
	IFN SNOBOL,<X SNOBOL,SNO,SNOBOL,,,,_>
	IFN MACY11,<X MACY11,P11,MACY11,,OBJ,,_>
	IFN BLISS,<X BLISS,BLI,BLIS10,,,,=>	;[443] MAKE PROCESSOR THE SAME AS SWITCH
 WIT
		H	COMPILER ATTRIBUTE FLAGS, USED FOR SCAN VS. BANG CHAINING
	>

	DEFINE PROCESS<
	IFN DFORTRAN,<X FORTRAN,FOR,FORTRAN,,,FORDDT,=,SCANCH>
	IFE DFORTRAN,<X FORTRAN,FOR,F40,,,,=>
	IFN PASCAL,<X PASCAL,PAS,PASCAL,,,PASDDT,=,SCANCH>;[462] PASCAL USES SCAN ARGS
	X MACRO,MAC,MACRO,,,,=
	IFN SIMULA,<X SIMULA,SIM,SIMULA,,,SIMDDT,=>	;[452] SW,EXT,PROC,,,DEBUG
	IFE DCOBOL,<X COBOL,CBL,COBOL,,,COBDDT,=>
	IFN DCOBOL,<X COBOL,CBL,CBL74,,,COBDDT,=>
	X ALGOL,ALG,ALGOL,,,ALGDDT,=
	IFN SNOBOL,<X SNOBOL,SNO,SNOBOL,,,,_>
	IFN MACY11,<X MACY11,P11,MACY11,,OBJ,,_>
	IFN BLISS,<X BLISS,BLI,BLIS10,,,,=>
 REP 10/6	;09C12
	DEFINE X (A,B,C,D,E,F,G)<
 WIT
	DEFINE X (A,B,C,D,E,F,G,H)<
 REP 22/6	;09C13
	DEFINE X (A,B,C,D,E,F,G)<
 WIT
	DEFINE X (A,B,C,D,E,F,G,H)<
 REP 27/6	;09C14
	IFE BLISS,<BLISW==0>		;MAKES TESTS EASIER AND NEATER
 WIT
	IFE SIMULA,<SIMSW==0>		;[452] FOR LATER TESTS
	IFE BLISS,<BLISW==0>		;MAKES TESTS EASIER AND NEATER
	UNKSW==0			;[462] AN UNKNOWN PROC TYPE
 INS 29/8	;09C15
	COMAND	LABEL,<JRST	IDENT>	;[460] REINSERT COMMAND
 REP 10/9	;09C16
	SWITCH NOCOMPILE,COMPLS
 WIT
	SWITCH NOCOMPILE,<NOCMPL,,0>		;;[445] MAKE A SEPERATE BIT FOR NOCOMP
 INS 18/9	;09C17
	SWITCH	F66,<F66SW,,0>			;[574]
	SWITCH	GFLOATING,<GFLSW,,0>		;[574]
 INS 40/13	;09C18
		TRNN	FL,IDF		;[572] MUST SEE IDENTIFIER HERE
		JRST	SFDER2		;[572] NO, GIVE SFD ERROR AND ABORT
 INS 1/17	;09C19
		XALL		;BACK TO NORMAL LISTING
 REP 33/20	;09C20
		MOVEI	C," "		;SUPPLY A FREE BLANK IF "@" SO COM@FOO WORKS
		SETZ	CS,		;STATUS OF A BLANK
		SETZM	INLFLG		;[305] CLEAR IN-LINE FLAG
 WIT
		SETZM	INLFLG		;[305] CLEAR IN-LINE FLAG
		PUSHJ	P,CHKTRM	;[567] EAT ANY TERMINATORS
		CAMN	CS,COMMA	;[567] IF COMMA, DON'T BACKUP POINTER
		JRST	NEXT2A		;[567]   PRESERVE OLD WORK AROUND
		MOVSI	T1,70000	;[567]
		ADDM	T1,@GETB3(IOPNT);[567] AND BACK UP BYTE POINTER
		AOS	@GETB1(IOPNT)	;[567] ALSO BACKUP COUNT
	NEXT2A:	SETZB	CS,SAVCHR	;[567] DON'T SAVE ANY CHARS
		MOVEI	C," "		;[567] SUPPLY A FREE BLANK SO COM@FOO WORKS
 INS 1/21	;09C21
		SALL
 INS 3/22	;09C22
	IFDEF SALL,<SALL>	;MAKE LISTING NEATER
 REP 54/22	;09C23
	SAVERR:	STRING	[ASCIZ .?CMLNFS No file on SAVE or SSAVE.] ;[256]
		JRST	ABORT		;[256]

 WIT
	RLFERR:	STRING	[ASCIZ	.?CMLRLF Problem with REL file and /REL was specified.]
		JRST	ABORT		;[462] DIE GRACEFULLY
	RLFER1:	STRING	[ASCIZ	.?CMLRLS Problem with REL file and no source specified.]
		JRST	ABORT		;[462] DIE GRACEFULLY
	SAVERR:	STRING	[ASCIZ .?CMLNFS No file on SAVE or SSAVE.] ;[256]
		JRST	ABORT		;[256]
	SAVER2:	STRING	[ASCIZ .?CMLASF Ambiguous /SAVE or /SSAVE usage on files.]
		JRST	ABORT		;[444] THIS IS ON USING THE SWITCH TWICE
	NOSRCS:	STRING	[ASCIZ .?CMLMSF Must have source files for "+" contruction.]
		JRST	ABORT		;[565]
 REP 19/23	;09C24
	ABORT:	CLRBFI			;CLEAR INPUT BUFFER SO GARBAGE IS NOT READ;"22A-160"
		RESET
	DOEND:	SETZB	0,.JBSA		;SO START FAILS
	;[432]  REMOVE ONE LINE
	;	SETNAM	0,		;SO RUN FAILS
		EXIT	1,
		EXIT			;IN CASE SOME IDIOT TYPES CONTINUE
 WIT
	ABORT:	CLRBFI			;CLEAR INPUT BUFFER SO GARBAGE IS NOT READ
		RESET
	DOEND:	SETZB	0,.JBSA		;SO START FAILS
		EXIT	1,
		JRST	.-1		;IN CASE SOME IDIOT TYPES CONTINUE
 INS 63/23	;09C25
	SFDER2:	STRING	[ASCIZ .?CMLISS Illegal SFD specification.]	;[572]
		CAIE	C,","
		CAIN	C,"]"
		MOVEM	CS,SAVCHR
		JRST	ERRCOM
 REP 32/25	;09C26
	IFN FORTRAN,<
		CAIN	T3,CHNFOR	;IS THIS FORTRAN?
		JRST	[SKIPN	T1,FORPRC	;YES, BUT SEE WHICH
			 MOVE	T1,PRCNAM(T3)	;EITHER F40 OR F-10
			 CAME	T1,['FORTRA']	;F-10 IS SPECIAL
			 JRST	NF10		;F40
			 MOVE	T2,['/RUN: ']	;AS IT USES SCAN
			 PUSHJ	P,OUTSIX
			 SKIPE	T2,PCDEV	;USE DEVICE IF GIVEN
			 PUSHJ	P,OUTDEV
			 MOVE	T2,PCNAM	;NAME WE WANT TO RUN
			 PUSHJ	P,OUTSIX
			 PUSHJ	P,OUCRLF
			 JRST	NONAM]
	NF10:
	>
		SKIPE	T2,PCDEV	;GET DEVICE IF GIVEN
 WIT
		SKIPN	T1,PRCFLG(T3)	;[463] ARE THERE ANY FLAGS FOR THIS PROC
		  JRST	NOTSCN		;[463] NONE, DO THE BANG PROCESSING BY DEFAULT
		TLNN	T1,SCANCH	;[463] DOES THIS PROCESS USE SCAN CHAINING?
		  JRST	NOTSCN		;[463] NOPE, USE OLD STYLE BANG STUFF
		MOVE	T2,['/RUN: ']	;AS IT USES SCAN
		PUSHJ	P,OUTSIX
		SKIPE	T2,PCDEV	;USE DEVICE IF GIVEN
		PUSHJ	P,OUTDEV
		MOVE	T2,PCNAM	;NAME WE WANT TO RUN
		PUSHJ	P,OUTSIX
		PUSHJ	P,OUCRLF
		JRST	NONAM

	NOTSCN:	SKIPE	T2,PCDEV	;GET DEVICE IF GIVEN
 REP 56/25	;09C27
		CAIN	T3,CHNLNK	;[441] IS THIS LINK-10?
		SKIPA	T1,PROCTB(T3)	;[441] YES, IT IS SPECIAL
		MOVE	T1,PRCNAM(T3)	;[441] NO, GET PROCESSOR NAME
 WIT
		CAIN	T3,CHNLNK	;[443] IS THIS LINK-10?
		SKIPA	T1,PROCTB(T3)	;[443] YES, ITS SPECIAL
		MOVE	T1,PRCNAM(T3)	;[443] NO, SO GET THE PROCESSOR NAME
 REP 13/26	;09C28
		SOJA	T2,LDN1		;NO, TRY AGAIN [441] use LDN1
 WIT
		SOJA	T2,LDN1		;[441] NO, JUMP BACK TO TRY AGAIN
 REP 5/27	;09C29
		AOBJN	T1,CKRM1	;TRY AGAIN [441] use CKRM1
 WIT
		AOBJN	T1,CKRM1	;[441] JUMP BACK AND TRY AGAIN
 REP 44/29	;09C30
	RPGRET:	SKIPA	P,RP1		;SET UP PDL [441] use RP1
 WIT
	RPGRET:	SKIPA	P,RP1		;[441] SET UP PDL
 REP 10/30	;09C31
		SOJG	T1,LSOJ1	;THREE DIGITS [441] use LSOJ1
 WIT
		SOJG	T1,LSOJ1	;[441] THREE DIGITS
 INS 32/30	;09C32
		HRRZ	T1,.JBFF	;[564] DISK BUFFERS WILL GET PUT HERE
		MOVEM	T1,DSKBUF	;[564] SAVE BUFFER ADDRESS
 INS 9/31	;09C33
		SETZM	SWGKB		;[447]
		SETZM	SWGKL		;[447]
		SETZM	SWGKS		;[447]
 INS 29/32	;09C34
		XALL
 INS 6/34	;09C35
		SALL
 INS 8/35	;09C36
		CAIN	C,"("		;[447]
		  JRST	PROCSX		;[447]
 REP 30/36	;09C37
		TRNA			;"," AND TERMF ARE OK [441] faster than JRST
 WIT
		TRNA			;[441] "," AND TERMF ARE OK SO SKIP
 REP 39/38	;09C38
		ANDI	T1,DEVSWS	;SEE IF FIRST DEVICE SWITCH
 WIT
	;**;[457] after SMATCH + 6L, insert
		TLNN	FL3,C74SW!C68SW!F10SW!F40SW	;[457] IMPLY COMPILER?
		JRST	SMATC1		;[457] NO, CONTINUE NORMALLY
		TLNE	FL3,C74SW!C68SW	;[457] IMPLY COBOL?
		TRZA	FL2,ALPROC-CBLSW ;[457] YES, TURN OFF ALL BUT COBOL
		TRZA	FL2,ALPROC-FORSW ;[457] NO, TURN OFF ALL BUT FORTRA
		TROA	FL2,CBLSW	;[457] YES, SET PROC TYPE
		TRO	FL2,FORSW	;[457] NO, MUST FOR FORTRA
		TRNE	FL,PERF		;[457] WAS IT PERMANENT?
		HRRZM	FL2,DFPROC	;[457] YES, STORE DEF PROC
	SMATC1:	ANDI	T1,DEVSWS	;SEE IF FIRST DEVICE SWITCH
 REP 2/39	;09C39
	DEFINE X (A,B,C,D,E,F,G)<
 WIT
	DEFINE X (A,B,C,D,E,F,G,H)<
 INS 5/45	;09C40
	;**; [444] at SSAVE plus 3
		SKIPE	SAVSW		;[444] IS THIS THING ALREADY SET?
		 JRST	SAVER2		;[444] YES, YOU CAN'T SAVE TWO DIF FILES
 REP 1/46	;09C41
	PROCSW:	TROE	FL,PROCS	;HAVE WE ALREADY SEEN SOME?
		GOTO	SYNERR		;YES, I DEFINE THIS AS ILLEGAL
 WIT
	;here on "(" as first char of ident, i.e. perm proc sw
	PROCSX:	PUSH	P,SWPT		;[447] save switch pointer
		MOVE	SWPT,[POINT 7,SWGLK]
		PUSHJ	P,PROCS0	;[447] get switches
		POP	P,SWPT		;[447] restore switch pointer
		MOVE	T1,SWBKB	;[447] transfer binary switch ptr.
		MOVEM	T1,SWGKB	;[447]
		SETZM	SWBKB		;[447]
		MOVE	T1,SWBKL	;[447] listing switch ptr.
		MOVEM	T1,SWGKL	;[447]
		SETZM	SWBKL		;[447]
		MOVE	T1,SWBKS(SVPT)	;[447] source switches
		MOVEM	T1,SWGKS	;[447]
		SETZM	SWBKS(SVPT)	;[447]
		JRST	ILP0
	;here on "(" after a file name
	PROCSW:	TROE	FL,PROCS	;HAVE WE ALREADY SEEN SOME?
		GOTO	SYNERR		;YES, I DEFINE THIS AS ILLEGAL
		PUSHJ	P,PROCS0	;[447] get switches
		JRST	ILP2A
	PROCS0:
 INS 23/46	;09C42
		CAIN	C,"-"		;[570] ALLOW "-"
		JRST	PROCS2		;[570]  FOR COBOL-74
 REP 58/46	;09C43
			 JRST ILP2A]
 WIT
			POPJ	P,]		;[447]
 REP 62/46	;09C44
		JRST	ILP2A		;NEXT
 WIT
		POPJ	P,		;[447] next
 REP 9/50	;09C45
		JRST	LSET1		;[240] NO, ASSUME DISK [441] use LSET1
 WIT
		JRST	LSET1		;[240] NO, ASSUME DISK
 REP 14/50	;09C46
					;[441] label LSET1
	DSKLUP:	SKIPN	T2,SVDEV(T1)	;[240] DEVICE GIVEN?
		JRST	LDSK1		;[240] NO, ASSUME A DISK [441] use LDSK1
 WIT
	DSKLUP:	SKIPN	T2,SVDEV(T1)	;[240] DEVICE GIVEN?
		JRST	LDSK1		;[240] NO, ASSUME A DISK
 REP 20/50	;09C47
	LDSK1:	AOBJN	T1,DSKLUP	;[240] LOOP FOR ALL DEVICES [441] label LDSK1
 WIT
	LDSK1:	AOBJN	T1,DSKLUP	;[240] LOOP FOR ALL DEVICES
 REP 28/50	;09C48
		SKIPE	SAVSW		;[234] IS THIS A SAVE FILE REQUEST?
		TLOA	FL2,RELSW	;[234] YES, PRETEND ITS A REL FOR NOW
		PUSHJ	P,GETPRO	;GO FIND DATE AND PROCESSOR
		TLNE	FL2,RELSW	;IF A REL FILE
		JRST	LDREL		;GO LOAD IT NOW
 WIT
		PUSHJ	P,GETPRO	;GO FIND DATE AND PROCESSOR
		SKIPE	SAVSW		;[444] IS THIS A SAVE FILE REQUEST
		PUSHJ	P,OUTSAV	;[444] YES, PUT OUT OUTPUT FILENAME NOW
		TLNE	FL2,RELSW	;IF A REL FILE
		JRST	LKREL		;[462] SETUP THE PROCESSOR TYPE FROM REL FILE
 REP 39/50	;09C49
	IFN SFDSW,<
		MOVE	T1,SVPPN(SVPT)		;GET PPN
		SKIPN	SVSFD(SVPT)		;ANY SFD'S SPECIFIED?
		JRST	REREL0		;NO
		MOVEM	T1,LSFDPP	;STORE PPN
		X==<Y==0>		;INITIAL CONDITION
	REPEAT SFDLEN,<
		MOVE	T1,SVSFD+X(SVPT)
		MOVEM	T1,LSFD+Y
		X==X+NFILE
		Y==Y+1
	>
		SKIPA	T1,[EXP LSFDAD]	;POINT TO SFD BLOCK IN LPPN>
	IFE SFDSW,<
		SKIPA	T1,SVPPN(SVPT)	;LOOK ON THIS AREA FOR REL
	>
	REREL:	SETZ	T1,
	REREL0:	MOVEM	T1,LPPN		;BUT ONLY FIRST TIME
		MOVEM	T1,SVRPP	;SO WE KNOW IF SECOND TIME
 WIT
		MOVE	T1,SVPT		;[462] USE THE CURRENT FILE POINTER
		PUSHJ	P,SETPTH	;[462] SETUP THE LOOKUP PATH
		TRNA			;[462] SKIP THE FIRST TIME
	REREL:	SETZ	T2,		;[462] CLEAR THE FLAG
		MOVEM	T2,LPPN		;[462] SAVE THE PATH POINTER OR 0
		MOVEM	T2,SVRPP	;[462] STORE RESULT SO WE KNOW IF SECOND TIME
 REP 67/50	;09C50
		SKIPE	EXTEND		;[240] ALL DEVICES DISKS?
		JRST	EREL		;[240] YES, DO EXTENDED LOOKUP
		LOOKUP	LOOK,LNAM	;IS IT THERE
		JRST	LBCOMP		;NO, WE MUST RECOMPILE
 WIT
		PUSHJ	P,DOLOOK	;[462] LOOKUP THE REL FILE
		JRST	LBCOMP		;[462] COULD NOT FIND IT, RECOMP

 DEL 15/51	;09C51
	EREL:	MOVEI	T2,.RBTIM	;[240] HERE IF DOING EXTENDED LOOKUP..
		MOVEM	T2,EBLK		;[240] SET UP EXTENDED LOOKUP BLOCK.
		MOVE	T2,LPPN		;[240]
		MOVEM	T2,EPPN		;[240]
		LOOKUP	LOOK,EBLK	;[240] DO EXTENDED LOOKUP
		JRST	LBCOMP		;[240] NOT THERE, TOO BAD
		PUSHJ	P,CHKAGE	;[317] COMPARE THE AGE OF THE FILE
		JRST	DOCOMP		;[240] YES.
		JRST	NOCOM1		;[240] NO, NOT UNLESS BAD REL FILE.

 INS 49/51	;09C52
	;
	;	This routine does not decide wether to COMPILE or not but
	;	simply sets the processor type from the REL file if it is
	;	as yet, unknown.
	;
	LKREL:	SKIPGE	DEBFL		;[462] IF NOT DEBUG, DON'T WASTE TIME ON REL
		TLNE	FL2,ALPROC-RELSW ;[462] SEE IF ANY PROCESSORS ALREADY SET
		JRST	LDREL		;[462] YES, GO LOAD REL FILE NOW!
		SKIPN	T1,LOKNAM	;[462] PICK UP A DEVICE IF THERE
		SKIPA	T1,['DSK   ']	;[462] ELSE USE DSK:
		TRNA			;[462] SKIP STORAGE IF ALREADY THERE
		MOVEM	T1,LOKNAM	;[462] STORE IT AWAY
		OPEN	LOOK,LOKINT	;[462] OPEN FOR INPUT
		JRST	DEVNA		;[462] NOT THERE
		MOVE	T1,SVPT		;[462] USE CURRENT FILE POINTER
		PUSHJ	P,SETPTH	;[462] SET UP THE LOOKUP BLOCK
		MOVE	T1,ONAM		;[462] SEE IF REL IS THERE
		MOVEM	T1,LNAM		;[462]
		SKIPN	T1,OEXT		;[462] OUTPUT EXTENSION ALREADY SPECIFIED?
		SKIPE	T1,SVEXT(SVPT)	;[462] NO, GET INPUT SPECIFIED
		SKIPN	T1		;[462] DO WE HAVE SOMETHING?
		MOVSI	T1,'REL'	;[462] NO USE REL
		MOVEM	T1,LEXT		;[462] STORE LOOKUP EXTENSION
		PUSHJ	P,DOLOOK	;[462] IS IT THERE?
		JRST	FIU		;[462] NO, GIVE ERROR SINCE /REL IS SET
		PUSHJ	P,INSREL	;[462] GET THE LINK BLOCK TYPE FROM REL FILE
		JRST	LKRER		;[462] PROBLEM, TRY TO ISOLATE THE ERROR
		PUSHJ	P,SETPRC	;[462] SET THE PROC TYPE FROM TABLE
		JRST	LDREL		;[462] CONTINUE LOADING
	;
	;	There are two cases for falling through here:
	;		1) user type /REL
	;		2) we only found a .REL file
	;
	LKRER:	HLRZ	T1,SVEXT(SVPT)	;[462] GET THE USERS SPECIFIED EXTENSION
		JUMPN	T1,RLFER1	;[462] PROB WITH REL FILE SPECIFIED
		JRST	RLFERR		;[462] ASSUME /REL WAS SPECIFIED
 REP 27/52	;09C53
	DOCOM1:	SKIPE	T2,SWBKB	;ARE THERE SWITCHES
 WIT
	DOCOM1:	TRNE	FL,PROCS	;[447] local switches ?
		SKIPA	T2,SWBKB	;[447] yes, get them
		MOVE	T2,SWGKB	;[447] get global switches
		SKIPE	T2		;[447] anything ?
 REP 36/52	;09C54
		JRST	DOCOMD		;NO, TAKE DEFAULT
 WIT
		JRST	DOCOMB		;[574] NO, TAKE DEFAULT
 INS 41/52	;09C55
	DOCOMB:	TLNN	FL3,F66SW	;[574] /F66 SEEN?
		JRST	DOCOMC		;[574] NO, TAKE DEFAULT
		MOVE	T2,['/F66  ']	;[574] OUTPUT SWITCH
		PUSHJ	P,OUTSIX	;[574]
	DOCOMC:	TLNN	FL3,GFLSW	;[574] /GFLOAT SEEN?
		JRST	DOCOMD		;[574] NO, TAKE DEFAULT
		MOVE	T2,['/GFLO ']	;[574] OUTPUT SWITCH
		PUSHJ	P,OUTSIX	;[574]
 REP 61/52	;09C56
		SKIPN	SWBKL		;[321] PROCESSOR LISTING SWITCHES SPECIFIED?
 WIT
	IFN PASCAL,<
		CAIE	T3,CHNPAS	;[463] IS IT PASCAL?
		JRST	DOCM2B		;[463] NO, SKIP THIS JUNK
		MOVE	T2,['/DEBUG']	;[463] GET READY FOR /DEBUG
		TLNN	FL3,DEBUGSW	;[463] AND /DEBUG?
		SKIPGE	DEBFL		;[463] OR DEBUG COMMAND?
		PUSHJ	P,OUTSIX	;[463] YES, SO TELL THE COMPILER
	DOCM2B:
		>
		TRNE	FL,PROCS	;[447] local switches ?
		SKIPA	T2,SWBKL	;[447] yes, get them
		MOVE	T2,SWGKL	;[447] get global switches
		SKIPN	T2		;[447] any switches ?
 REP 4/53	;09C57
		TLNN	FL2,CBLSW!BLISW	;DON'T WRITE /CREF IF COBOL OR BLISS (SPECIAL)
		PUSHJ	P,ENTCRF	;PUT IT IN THE ###CREF FILE
		POP	P,T3
	NOLST1:	SKIPE	T2,SWBKL	;SWITCHES?
 WIT
	;**; at DOCOM3 plus 16 lines change 1 line
		TLNN	FL2,CBLSW!BLISW!SIMSW		;[452] DON'T WRITE /CREF IF
							;[452] COBOL, BLISS OR SIMULA
		PUSHJ	P,ENTCRF	;PUT IT IN THE ###CREF FILE
		POP	P,T3
	NOLST1:	TRNE	FL,PROCS	;[447] local switches ?
		SKIPA	T2,SWBKL	;[447] yes, get them
		MOVE	T2,SWGKL	;[447] get global switches
		SKIPE	T2		;[447] anything ?
 REP 21/53	;09C58
		SKIPE	T2,SWBKS(SVPT)	;AND SWITCHES
 WIT
		TRNE	FL,PROCS	;[447] local switches ?
		SKIPA	T2,SWBKS(SVPT)	;[447] yes, get them
		MOVE	T2,SWGKS	;[447] get global switches
		SKIPE	T2		;[447] anything ?
 REP 27/54	;09C59
		MOVEM	T1,SVNAM
		MOVE	T3,PCNUM	;GET BACK PROCESSOR NUMBER
		MOVE	T1,INTEXT(T3)	;GET EXTENSION
		MOVEM	T1,SVEXT
		SETZM	SVPPN
		SETZM	SWBKS
		SETZM	SWBKB
		SETZM	SWBKL
 WIT
	;**; [444] at ENDCOB plus 9 lines
		MOVEM	T1,SVNAM(SVPT)	;PUT IT AS CURRENT FILENAME
		MOVE	T3,PCNUM	;GET BACK PROCESSOR NUMBER
		MOVE	T1,INTEXT(T3)	;GET EXTENSION
		MOVEM	T1,SVEXT(SVPT)	;AND PUT IT AS CURRENT EXTENSION
		SETZM	SVPPN(SVPT)
		SETZM	SWBKS(SVPT)
		SETZM	SWBKB(SVPT)
		SETZM	SWBKL(SVPT)
 REP 29/55	;09C60
		JUMPE	T1,LSFP1	;ZERO IS JUST , [441] use LSFP1
 WIT
		JUMPE	T1,LSFP1	;ZERO IS JUST
 REP 2/56	;09C61
		JRST	NOFIL		;IF MORE THAN ONE, THERE IS AN ERROR
 WIT
		JRST	NOSRCS		;[565] IF MORE THAN ONE, THERE IS AN ERROR
 REP 10/56	;09C62
		MOVEI	T3,CHNLNK	;SET FOR LINK [441]
 WIT
		MOVEI	T3,CHNLNK	;[441] SET FOR LINK
	;**; [444] at NOCOMP plus 7
 REP 15/56	;09C63
		SKIPE	SAVSW		;[256] IS THIS A SAVE FILE?
		PUSHJ	P,[SKIPE T2,SVDEV  ;[256] DEVICE THERE?
			PUSHJ P,OUTDEV	;[256] YES, OUTPUT IT
			PUSHJ P,OUTNM1	;[256] OUTPUT FILENAME
			MOVE T2,SAVSW	;[256] GET THE SWITCH AGAIN
			PUSHJ P,OUTSIX	;[234] OUTPUT IT
			MOVEI	T1," "	;[234] SEPARATE BY SPACE
			PJRST	TMPOUT]		;[234] RETURN
 WIT
	;**; [444] at NOCOMP plus 9
 REP 41/56	;09C64
			 jrst NDBA		;[220] then return [441] use NDBA
 WIT
			 jrst NDBA		;[220] then return
 REP 60/56	;09C65
		  JUMPE	T2,ND2P1	;[165] IGNORE IF 0 [441] JUMP to OUTSPC
 WIT
		  JUMPE	T2,ND2P1	;[165] IGNORE IF 0
 REP 95/56	;09C66
		TLNN	FL3,LIBSW
		TLNE	FL2,RELSW	;USING A REL FILE?
	LODR0:	SKIPE	T2,LOKNAM	;ON NON-DISK DEVICE?
	LODR3:	PUSHJ	P,OUTDEV	;YES. OUTPUT DEVICE
	LODR1:	SKIPE	SAVSW		;[256] ONLY OUTPUT NAME IF NOT /SAVE
		 JRST	ELOD		;[256] IT'S /SAVE OR /SSAVE
		MOVE	T2,ONAM		;NOW FILE NAME
		PUSHJ	P,OUTSIX
		TLNN	FL2,RELSW	;REL
		JRST	[SKIPE	T2,OEXT		;EXTENSION GIVEN?
 WIT
		TLNE	FL2,RELSW		;[573] DO WE HAVE A REL FILE?
	LODR0:	SKIPE	T2,LOKNAM		;ON NON-DISK DEVICE?
	LODR3:	PUSHJ	P,OUTDEV		;YES. OUTPUT DEVICE
	LODR1:	MOVE	T2,ONAM			;[444] IN WHICH CASE USE ONAM
		PUSHJ	P,OUTSIX
		TLNN	FL2,RELSW		;REL
		JRST	[SKIPE	T2,OEXT		;[444] OUTPUT EXTENSION GIVEN?
 REP 109/56	;09C67
		SKIPE	T2,SVEXT	;ALSO USE EXT IF GIVEN
		PUSHJ	P,OUTEXT
	LODR2:	TLNE	FL2,RELSW	;[322] DO WE HAVE THE REL FILE?
		SKIPN	T2,SVPPN(SVPT)	;[322] YES, THEN OUTPUT PPN IF SPECIFIED
		TRNA			;[322] EITHER RECOMPILING OR NO PPN GIVEN
					;[441] TRNA is faster than SKIPA
		PUSHJ	P,OUTPPN
		MOVSI	T2,'/S '	;USES SEARCH
		TLNN	FL3,LIBSW	;LIBRARY?
		JRST	ELOD		;NO
		PUSHJ	P,OUTSIX
		PUSHJ	P,OUTSPC	;NEEDS SPAC
		SETOM	NSWTCH		;[236] SIGNAL /L LAST
	ELOD:
	ELOD1:	MOVE	T2,[POINT 7,LODSB2]	;[174] OUTPUT SECOND SET OF SWITCHES
		PUSHJ	P,OUTSW
		SKIPN	T2,FORLIB	;FORSE/FOROTS SWITCH SET?
		JRST	ELOD2		;NO
 WIT
		SKIPE	T2,SVEXT(SVPT)		;ALSO USE EXT IF GIVEN
		PUSHJ	P,OUTEXT
	LODR2:	TLNE	FL2,RELSW		;[322] DO WE HAVE THE REL FILE?
		SKIPN	T2,SVPPN(SVPT)		;[322] YES, THEN OUTPUT PPN IF SPECIFIED
		TRNA				;[322] EITHER RECOMPILING OR NO PPN
		PUSHJ	P,OUTPPN
		MOVSI	T2,'/S '		;USES SEARCH
		TLNN	FL3,LIBSW		;LIBRARY?
		JRST	ELOD			;NO
		PUSHJ	P,OUTSIX
		PUSHJ	P,OUTSPC		;NEEDS SPAC
		SETOM	NSWTCH			;[236] SIGNAL /L LAST
	ELOD:	MOVE	T2,[POINT 7,LODSB2]	;[174] OUTPUT SECOND SET OF SWITCHES
		PUSHJ	P,OUTSW
		SKIPN	T2,FORLIB		;FORSE/FOROTS SWITCH SET?
		JRST	ELOD2			;NO
 REP 8/59	;09C68
	INSRL1:	MOVE	T1,SVJFF	;[241] GET FIRST FREE LOCATION
		ADDI	T1,406		;[241] ADD ROOM FOR 2 DSK BUFFERS
		PUSHJ	P,GETSPC	;[241] ALLOCATE CORE
		MOVEM	T1,.JBFF	;[241] SO MONITOR WILL PUT BUFFERS THERE
		MOVEM	T1,SVJFF	;[241] SO CORE WILL BE RETURNED IF DONE
		INBUF	LOOK,2		;[241]SETUP THE BUFFERS
		IN	LOOK,		;YES, MUST CHECK FOR DEBUGGER DATA
		JRST	INSRL3		;IN OK, PICKUP BUFFER ADDRESS
		JRST	INSRL2		;[176] ERROR - FORCE RECOMPILE
 WIT
	INSRL1:	SKIPGE	LOOKBF		;[564] DO WE HAVE BUFFERS?
		JRST	INSRIN		;[564] YES, CONTINUE
		MOVE	T1,DSKBUF	;[564] GET DISK BUFFER ADDRESS
		EXCH	T1,.JBFF	;[564] SET .JBFF TO DSKBUF ADDRESS
		INBUF	LOOK,2		;[241]SETUP THE BUFFERS
		EXCH	T1,.JBFF	;[564] RESTORE .JBFF TO ORIGINAL VALUE
	INSRIN:	IN	LOOK,		;YES, MUST CHECK FOR DEBUGGER DATA
		JRST	INSRL3		;IN OK, PICKUP BUFFER ADDRESS
		POPJ	P,		;[564] ERROR - FORCE RECOMPILE
 REP 24/59	;09C69
		JRST	[SETZ	T3,		;UNLESS NOT A REL FILE
			 JRST	CPOPJ1]		;IN WHICH CASE DON'T REASSEMBLE
 WIT
		JRST	INSERR		;[462] IF NOT A REL FILE, THEN DON'T REASSEMBLE
 REP 41/59	;09C70
		CLOSE	LOOK,		;[176] CLEAR FILE
		AOS	0(P)		;[176] SET SKIP RETURN
	INSRL2:	MOVE	T1,SVJFF	;[176] RESTORE .JBFF
		MOVEM	T1,.JBFF	;[176] TO PRE-INPUT VALUE
		SETZM	LOOKBF		;[176] AVOID MONITOR BUG
		POPJ	P,

	GETPRO:	MOVSI	T1,-NFILE	;NUMBER OF FILES
		TRNN	FL2,-1		;[303] LOCAL PROCEESOR SET ?
		SETOM	DEFPRO		;[303] SET FLAG SAYING DEFAULT PROC USED
		TRNN	FL2,-1		;LOCAL PROCESSOR SET?
		HRR	FL2,DFPROC	;NO, SET FROM GLOBAL
		TRNE	FL2,RELSW	;IF USER SAID /REL
		TRNE	FL3,COMPLS	;AND NOT /COMP
		JRST	GETPR1		;NOT TRUE
		TLO	FL2,RELSW	;DON'T WASTE TIME ON LOOKUPS
		PUSH	P,SVDEV(T1)	;AND COPY "SOURCE" DEVICE
		POP	P,LOKNAM	;TO OUTPUT DEVICE
		POPJ	P,		;JUST SET PROCESSOR=LOADER

	GETPR1:	SETOM	PTHBLK		;[246] SETUP TO FIND THIS JOB'S PATH
		MOVE	T3,[3,,PTHBLK]	;[246] POINT TO 3 WORD PATH BLOCK
		PATH.	T3,		;[246] FIND USER'S DEFAULT PATH
		  SETZM	PTHBLK+1	;[246] NO LIB: IF NO PATH
		MOVE	T3,PTHBLK+1	;[246] GET PATH FLAGS
		TRNN	T3,20		;[246] DOES USER HAVE A LIBRARY?
		  SETZM	PTHBLK+2	;[246] NO, ONLY 1 PASS NEEDED.
		SKIPE	T3,SVPPN(T1)	;[246] DID USER TYPE A PPN?
		SKIPN	PTHBLK+2	;[246] AND HAS HE A LIBRARY?
		  SKIPA			;[246] NO, FORGE AHEAD
		MOVEM	T3,PTHBLK+2	;[246] YES, PUT "MUST MATCH" PPN IN
	GETPR2:	MOVEI	T3,1		;[246] SET UP LOOK OF EXTENSION POINTER
	NFIL:	MOVE	T2,SVNAM(T1)	;SET UP NAME AND PPN
		MOVEM	T2,LNAM
		HLLZ	T2,SVEXT(T1)
	NXEXT:	MOVEM	T2,LEXT		;START WITH ORIGINAL EXT
		MOVEM	T2,OLDEXT	;SAVE FOR RAS SYSTEM
		MOVE	T2,SVPPN(T1)
	IFN SFDSW,<
		SKIPN	SVSFD(T1)	;ANY SFD'S?
		JRST	NXSFD		;NO
		MOVEM	T2,LSFDPP	;SAVE PPN
		X==<Y==0>		;INITIAL CONDITION
 WIT
		TRNA			;[462] SKIP THE ERROR JUMP ENTRY
	INSERR:	SETZ	T3,		;[462] CLEAR TYPE IF NOT REL FILE
		CLOSE	LOOK,		;[564] CLOSE FILE
		AOS	0(P)		;[176] SET SKIP RETURN
		POPJ	P,

	;[462]
	; This routine sets up for a DOLOOK call by setting up
	; LPPN and associated locations for lookups.
	;	T1/ contains file pointer
	; Returns:
	;	T2/ pointer to LSFDAD or SVPPN if SFDSW is 0
	; Always returns with POPJ, no skip return.
	;
	SETPTH:	MOVE	T2,SVPPN(T1)	;[462] GET USER SPECIFIED PPN
	IFN SFDSW,<
		SKIPN	SVSFD(T1)	;[462] ANY SFD'S?
		JRST	NXSFD		;[462] NO
		MOVEM	T2,LSFDPP	;[462] SAVE PPN
		X==<Y==0>		;[462] INITIAL CONDITION
 REP 43/60	;09C71
		MOVEI	T2,LSFDAD	;POINTER
	NXSFD:
	>				;END OF IFN SFDSW
		MOVEM	T2,LPPN
 WIT
		MOVEI	T2,LSFDAD	;[462] POINTER TO PATH
	NXSFD:
	>				;[462] END OF IFN SFDSW
		MOVEM	T2,LPPN		;[462] STORE THE POINTER OR PPN
		POPJ	P,		;[462] RETURN
	;
	;[462] This routine will set the processor type from the REL file.
	;	It will also recognize processor conflicts and take an error
	;	path if necessary.  The compiler codes in table CMPCOD are
	;	expanded from the macro CMPTBL.  These codes are taken from the
	;	LINK version 5 manual, page A-13.  Those compiler types that
	;	COMPIL does not know, have zero entries which cause no action.
	;	
	;	Assumes:
	;		T3/ contains compiler type, usually set by INSREL
	;	Returns: +1
	;		T3/ contains processor flags
	;
	SETPRC:	SKIPLE	T3		;[462] CHECK LOW RANGE
		CAMLE	T3,CMPLEN	;[462] CHECK HIGH RANGE
		POPJ	P,		;[462] DO NOTHING IF BAD
		SKIPN	T3,CMPCOD(T3)	;[462] GET THE PROC CODE
		  POPJ	P,		;[462] IF ZERO, DO NOTHING
		TLO	FL2,(T3)	;[462] SET THE FLAG FOR THIS PROC
		POPJ	P,		;[462] AND RETURN

	;
	;	The X macro takes two arguments:
	;	A = compiler type code
	;	B = processor flags to set in FL2
	;
		DEFINE CMPTBL,<
		    X	0,UNKSW			;;Code 0, unknown
		    X	1,FORSW			;;Code 1, F40
		    X	2,CBLSW			;;Code 2, COBOL-68
		    X	3,ALGSW			;;Code 3, ALGOL
		    X	6,BLISW			;;Code 6, BLISS
		    X	7,SAISW			;;Code 7, SAIL
		    X	10,FORSW		;;Code 10, FORTRAN-10
		    X	11,MACSW		;;Code 11, MACRO
		    X	12,FAISW		;;Code 12, FAIL
		    X	15,SIMSW		;;Code 15, SIMULA
		    X	16,CBLSW		;;Code 16, COBOL-74
		    X	24,PASSW		;;Code 24, PASCAL-36
	>
		SALL
	GETPRO:	MOVSI	T1,-NFILE	;NUMBER OF FILES
		TRNN	FL2,-1		;[303] LOCAL PROCEESOR SET ?
		SETOM	DEFPRO		;[303] SET FLAG SAYING DEFAULT PROC USED
		TRNN	FL2,-1		;LOCAL PROCESSOR SET?
		HRR	FL2,DFPROC	;NO, SET FROM GLOBAL
		TRNE	FL2,RELSW	;IF USER SAID /REL
		TRNE	FL3,COMPLS	;AND NOT /COMP
		JRST	GETPR1		;NOT TRUE

		TLO	FL2,RELSW	;DON'T WASTE TIME ON LOOKUPS
		PUSH	P,SVDEV(T1)	;AND COPY "SOURCE" DEVICE
		POP	P,LOKNAM	;TO OUTPUT DEVICE
		POPJ	P,		;JUST SET PROCESSOR=LOADER

	GETPR1:	SETOM	PTHBLK		;[246] SETUP TO FIND THIS JOB'S PATH
		MOVE	T3,[3,,PTHBLK]	;[246] POINT TO 3 WORD PATH BLOCK
		PATH.	T3,		;[246] FIND USER'S DEFAULT PATH
		  SETZM	PTHBLK+1	;[246] NO LIB: IF NO PATH
		MOVE	T3,PTHBLK+1	;[246] GET PATH FLAGS
		TRNN	T3,20		;[246] DOES USER HAVE A LIBRARY?
		  SETZM	PTHBLK+2	;[246] NO, ONLY 1 PASS NEEDED.
		SKIPE	T3,SVPPN(T1)	;[246] DID USER TYPE A PPN?
		SKIPN	PTHBLK+2	;[246] AND HAS HE A LIBRARY?
		  SKIPA			;[246] NO, FORGE AHEAD
		MOVEM	T3,PTHBLK+2	;[246] YES, PUT "MUST MATCH" PPN IN
	GETPR2:	MOVEI	T3,1		;[246] SET UP LOOK OF EXTENSION POINTER
	NFIL:	MOVE	T2,SVNAM(T1)	;SET UP NAME AND PPN
		MOVEM	T2,LNAM
		HLLZ	T2,SVEXT(T1)
	NXEXT:	MOVEM	T2,LEXT		;START WITH ORIGINAL EXT
		MOVEM	T2,OLDEXT	;SAVE FOR RAS SYSTEM
		PUSHJ	P,SETPTH	;[462] SET UP LOOKUP BLOCK
 REP 80/60	;09C72
		JUMPL	T3,LBLS1	;JUMP IF FOUND SOMETHING [441] use LBLS1
 WIT
		JUMPL	T3,LBLS1	;JUMP IF FOUND SOMETHING
 REP 36/61	;09C73
		  JRST	LNTY1		;[246] NO, FORGET IT [441] use LNTY1
 WIT
		  JRST	LNTY1		;[246] NO, FORGET IT
 REP 1/64	;09C74
	OUTSW:	MOVEM	T2,SVSWP	;SAVE THE POINTER
		ILDB	T1,T2		;PICK UP THE FIRST CHR
		JUMPE	T1,CPOPJ	;AND CHECK FOR NULL AS A PRECAUTION
		TRNE	FL,DOLOD	;[441] are we loading?
		JRST	OUTSW2		;[441] yes, go do LINK-10 output switches
		CAIN	T3,CHNFOR	;OR FORTRAN-10
	IFE DFORTRAN,<			;[200] F40 IS DEFAULT
		TLNN	FL,F10SW	;[200] F10 SWITCH SEEN
	>				;[200] END OF CONDITIONAL
	IFN DFORTRAN,<			;[200] F10 IS THE DEFAULT
		TLNE	FL,F40SW	;[200] F40 SWITCH SEEN
	>				;[200] END OF CONDITIONAL
		TRNA			;[441] a faster CAIA
		JRST	OUTSW2		;YES, ALSO USES SCAN
		MOVEI	T1,"("
		PUSHJ	P,TMPOUT	;SWITCHES ARE IN () TO PROCESSOR
	OUTSW1:	ILDB	T1,SVSWP
		JUMPE	T1,LPAR
		PUSHJ	P,TMPOUT
		JRST	OUTSW1		;A NULL WILL MARK THE END
	LPAR:	MOVEI	T1,")"
		JRST	TMPOUT

	;HERE FOR LINK-10 SWITCHES
	;OUTPUT AS /SWITCH:ARG
	;BLANK MARKS END OF SWITCH
	;NULL MARKS END OF SET OF SWITCHES

 WIT
	;
	;[450]	Routine to output a set of switches.  This routine defines a
	;	switch as a string of non-blank characters delimited by a
	;	blank.  A set of switches is a series of multiple switches
	;	delimited by a null.
	;

	OUTSW:	MOVEM	T2,SVSWP	;SAVE THE POINTER
 REP 32/64	;09C75
		JRST	.-3		;AND MULTIPLE BLANKS
		MOVEI	T1,"/"		;LINK-10 WANT A SLASH FIRST
		PUSHJ	P,TMPOUT
 WIT
		  JRST	OUTSW2		;AND MULTIPLE BLANKS
		MOVEI	T1,"/"		;A SLASH SAYS THIS IS A SWITCH
		PUSHJ	P,TMPOUT	;SO TELL WHOMEVER
 REP 38/64	;09C76
		CAIN	T1," "
		JRST	OUTSW4		;END OF THIS SWITCH IF BLANK
		JUMPE	T1,OUTSW5	;OR IF NULL
		PUSHJ	P,TMPOUT
		JRST	OUTSW3		;KEEP GOING

	OUTSW4:	PUSHJ	P,TMPOUT	;OUTPUT BLANK INCASE FILE NAME FOLLOWING
		MOVE	T2,SVSWP	;COPY BYTE POINTER
		ILDB	T1,T2		;SEE IF END
		JUMPN	T1,OUTSW2	;NO, MORE SWITCHES
		POPJ	P,		;END
 WIT
		JUMPE	T1,OUTSW5	;IS THIS NULL? (IF YES, DONE)
		PUSHJ	P,TMPOUT	;NON-NULL SO OUTPUT THIS CHAR
		CAIN	T1," "		;WAS THAT A BLANK?
		JRST	OUTSW2		;YES, END OF SWITCH SO GET A NEW ONE
		JRST	OUTSW3		;NO, LOOP UNTIL DONE
 REP 3/67	;09C77
		DEFINE X (A,B,C,D,E,F,G)<
	<SIXBIT /C/>>

	PRCNAM:	PROCESS
	DEFINE X (A,B,C,D,E,F,G)<
 WIT
		XALL

		DEFINE X (A,B,C,D,E,F,G,H)<
	<SIXBIT /C/>>

	PRCNAM:	PROCESS
	DEFINE X (A,B,C,D,E,F,G,H)<
 REP 16/67	;09C78
	DEFINE X (A,B,C,D,E,F,G)<
 WIT
	DEFINE X (A,B,C,D,E,F,G,H)<
 REP 23/67	;09C79
		DEFINE X (A,B,C,D,E,F,G)<
		SIXBIT /E/>
	INTEXT:	PROCESS

	IFN SPRC,<	DEFINE X (A,B,C,D,E,F,G)
 WIT
		DEFINE X (A,B,C,D,E,F,G,H)<
		SIXBIT /E/>
	INTEXT:	PROCESS

	IFN SPRC,<	DEFINE X (A,B,C,D,E,F,G,H)
 REP 33/67	;09C80
		DEFINE X (A,B,C,D,E,F,G)<
		SIXBIT /F/>
	DEBAID:	PROCESS

		DEFINE X (A,B,C,D,E,F,G)<
		"G">
	SEPTAB:	PROCESS
 WIT
		DEFINE X (A,B,C,D,E,F,G,H)<
		SIXBIT /F/>
	DEBAID:	PROCESS

		DEFINE X (A,B,C,D,E,F,G,H)<
		"G">
	SEPTAB:	PROCESS

	;[463] SETUP PROCESS FLAGS IF ANY
	DEFINE X (A,B,C,D,E,F,G,H)<
		IFNB "H",<	XWD	H,0>	;;put flags in left half(arbitrary)
		IFB "H",<	EXP	0 > ;;no process flags
		>
	PRCFLG:	PROCESS
 INS 45/67	;09C81
		SALL
 REP 3/69	;09C82
	DOCOPY:				;[430] REMOVE TWO LINES
 WIT
	DOCOPY:	MOVEI	T2,<<^D29+^D11>*1000>-1	;[461] USE 29P LOW WITH 11P HIGH
		MOVEM	T2,RUNCOR	;[461] STORE CORE ARGUMENT
 INS 1/70	;09C83
		SUBTTL	LABEL/TAPE ID

	IDENT:	TRO	FL,PIPF		;WHY NOT, IT IS PIP
		PUSHJ	P,SCANAM	;GET DEVICE
		MOVEI	T3,CHNPIP	;PIP TMP FILE
		SKIPN	T2,SVDEV	;DEVICE SPECIFIED?
		GOTO	XPDERR		;NO, ERROR
		PUSHJ	P,OUTDEV	;YES, USE IT
		SKIPN	T2,SVNAM	;FILENAME = TAPE ID
		JRST	[PUSHJ P,TAPEID	;NO, USING DELIMITERS
			 JRST	IDENT1]	;FINISH OFF ID WITH UP ARROW
		MOVEI	T1,"^"		;PIP EXPECTS ^ AS DELIMITER
		PUSHJ	P,TMPOUT
		PUSHJ	P,OUTSIX	;OUTPUT SIXBIT LABEL
		MOVEI	T1,"^"		;AND DELIMITER
		PUSHJ	P,TMPOUT
	IDENT1:	MOVEI	T1,"="
		PUSHJ	P,TMPOUT
		PUSHJ	P,OUCRLF	;FINISH LINE
		PUSHJ	P,SCAN		;SEE WHATS NEXT
		CAIN	C,","		;MORE
		JRST	IDENT		;YES
		JRST	OPIP2		;NO GIVE UP

 REP 7/74	;09C84
		PUSHJ	P,TMPOUT	;OUTPUT THE S
		SKIPE	T2,SVDEV	;AND A DEVICE SEEN [441] else skip
 WIT
		TRNE	FL,TECOF	;[455] DO WE WANT TECO?
		MOVEI	T1," "		;[455] YES, PASS A SPACE
		PUSHJ	P,TMPOUT	;OUTPUT THE S
		SKIPE	T2,SVDEV	;[441] AND A DEVICE SEEN ELSE SKIP
 REP 41/76	;09C85
		JRST	LTPS1		;SHIFT AND TRY AGAIN [441] use LTPS1
 WIT
		JRST	LTPS1		;SHIFT AND TRY AGAIN
 INS 36/81	;09C86
	;
	;	This routine will output ONAM with a /SAVE (/SSAVE)
	;	and check to see where in the flow it is.  If it is the
	;	first output out to the LNK tmpcor file, then it puts a
	;	comma after.  If there is already output there, it prefixes
	;	a comma.
	;
	OUTSAV:	PUSH	P,T3		;[444] PUSH THE CURRENT CHAN NO. DOWN
		MOVEI	T3,CHNLNK	;[444] SET CHAN NO. FOR LINK
		TRNE	FL,LODOUT	;[444] IS OUTPUT THERE?
		SKIPA	T1,[","]	;[444] YES, SO PREFIX WITH A COMMA
		TRNA			;[444] A PSUEDO SKIP TO KEEP FLOW
		PUSHJ	P,TMPOUT	;[444] OUTPUT THE COMMA AND CONTINUE
		SKIPE	T2,ODEV  	;[444] OUTPUT DEVICE THERE?
		PUSHJ	P,OUTDEV	;[444] YES, OUTPUT IT
		MOVE	T2,SVDEV(SVPT)	;[444] GET THE CURRENT DEV NAME
		MOVEM	T2,ODEV		;[444] AND MAKE IT THE OUTPUT DEV
		MOVE	T2,ONAM		;[444] GET OUTPUT FILENAME
		PUSHJ	P,OUTSIX	;[444] PUT IT OUT THERE
		MOVE	T2,SVNAM(SVPT)	;[444] GET CURRENT FILENAME
		MOVEM	T2,ONAM		;[444] STORE IT AS OUTPUT NAME
		SKIPE	T2,OEXT		;[444] GET OUTPUT EXTENSION
		PUSHJ	P,OUTEXT	;[444] PUT IT OUT IF THERE
		SETZM	OEXT		;[453] CLEAR OUTPUT FILE EXTENSION
		MOVE	T2,SAVSW	;[444] GET THE SWITCH AGAIN
		PUSHJ	P,OUTSIX	;[444] OUTPUT IT
		MOVEI	T1,","		;[444] THIS IS THE OUTPUT FILE
		TRNN	FL,LODOUT	;[444] IS THERE ALREADY OUTPUT THERE?
		PUSHJ	P,TMPOUT	;[444] NO, SO OUTPUT A COMMA, ELSE DON'T
		POP	P,T3		;[444] PUT THE ORIGINAL CHAN NO. BACK
		POPJ	P,		;[444] AND RETURN
 REP 49/83	;09C87
	TMPDS2:	HLRZ	T1,PROCTB(T3)	;GET PROCESSOR
 WIT
	TMPDS2:	HLLZ	T1,PROCTB(T3)	;[566] GET TMPCOR FILE
		MOVEM	T1,TMPFIL	;[566]   TO DELETE
		SETZM	TMPFIL+1	;[566] ZERO I/O WORD
		MOVE	T1,[2,,TMPFIL]	;[566] DELETE TMPCOR FILE
		TMPCOR	T1,		;[566]
		  JFCL			;[566] MUST NOT BE ONE
		HLRZ	T1,PROCTB(T3)	;GET PROCESSOR
 REP 1/85	;09C88
	SUBTTL	TABLE OF PROCESSOR NAMES
	DEFINE X (A,B,C,D,E,F,G)<
 WIT
		SUBTTL	TABLE OF PROCESSOR NAMES
	DEFINE X (A,B,C,D,E,F,G,H)<
 INS 1/86	;09C89
		SUBTTL	COMPILER TYPE TABLE
	;[462] EXPAND CMPTBL MACRO INTO COMPILER TYPES AND PROCESSOR FLAGS
	;	A = compiler type code
	;	B = processor flags to set in FL2
	;
		DEFINE	X(A,B),<
	IFLE A,< .CMPTD==1			;;crock it once
	> ;;ENDIFE
	IFG A,<	.CMPTD==A-.CMPTC		;;calc dif in entries
	> ;;ENDIFG
	IFLE .CMPTD,<
	PRINTX ?CMPTBL IS OUT OF ORDER
	.CMPTD==1
	>;;ENDIFLE			;;make a best guess at this point
	    REPEAT .CMPTD-1,<
		XWD	0,UNKSW		;;not used
		>;;END REPEAT
	    IFDEF B,<
		XWD	0,B		;;Code A
		> ;;ENDIFDEF
	    IFNDEF B,<
		XWD	0,UNKSW		;;Zero entry, not defined here
		> ;;ENDIFNDEF
	.CMPTC==A			;;set our counter
	>;;ENDDEF X
	CMPCOD:	CMPTBL
	CMPLEN:	.-CMPCOD-1			;[462] length of table
 REP 8/86	;09C90

 WIT
	WORDS <SWGKB,SWGKL,SWGKS>		;[447]
	U (SWGLK,SWBK+1)			;[447]
 INS 29/86	;09C91
	U (DSKBUF,1)		;[564] DISK BUFFER ADDRESS
 REP 20/87	;09C92
		XWD LOOKBF,LOOKBF
	DSKLK:	1
		SIXBIT /DSK/
		XWD LOOKBF,LOOKBF
 WIT
		XWD 0,LOOKBF	;[462] NO NEED FOR OUTPUT BUFFER
	DSKLK:	1
		SIXBIT /DSK/
		XWD 0,LOOKBF	;[462] DON'T USE UNNECESSARY OUTPUT BUFFER
 DEL 51/87	;09C93
	>
 SUM 54278