;T3.MAC.32, 5-Jan-77 14:02:15, Edit by ENDERIN SUBTTL Terminate compilation SEARCH SIMMAC SALL CTITLE T3 COMMENT ; AUTHORS: ELISABETH ALUND OLOF BJORNER Lars Enderin (DEC-20 modifications) [225] VERSION: 4 [1,6,12,22,104,162,204,225,246,260] PURPOSES: 1. To delete temporary files 2. To close output files [162] 3. To type error messages on the TTY 4. To handle aborts from all three passes 5. To fetch next command line and switch to Pass 1 when appropriate. CONTENTS: SUBROUTINES: ; INTERN T3A ;FOR DELETION OF nnnATR.TMP EDIT(225) TOPS10,<;[225] INTERN T3CHAR ;FOR FETCHING NEXT BYTE FROM COMMAND > INTERN T3MOVE ;FOR MOVING COMMAND LINES FROM COMMAND BUFFER INTERN T3NAME ;FOR PACKING NEXT FILE SPECIFICATION PART IN SIXBIT INTERN T3E ;FOR CREATING STATISTICAL INFORMATION OF ERRORS INTERN T3I ;FOR DELETION OF IC2 and closing REL file INTERN T3L ;CORRESPONDING FOR LST-FILE INTERN T3T ;ROUTINE FOR ABORTS IN PASS 1 AND 2 INTERN T3T3 ;ROUTINE FOR ABORT IN PASS 3 INTERN T3R ;Close REL file without superseding an old REL file INTERN T3REE ;HANDLE ^C REENTER INTERN T3X ;DELETE XRF.TMP INTERN T3 ;Main routine EDIT(104) SEARCH SIMMC3 ;[104] TWOSEG RELOC 400000 MACINIT P3INIT ;[104] SYN YPOLST,YPOLS3 ; EXTERNAL SUBROUTINES EXTERN E3BD ;CONVERT FROM BIN TO ASCII EXTERN E3DM ;SORT ZDM EXTERN E3EM ;CREATE ERROR MESSAGE EXTERN O3ERR ;READ ERROR TABLES INTO CORE EXTERN O3WS ;WRITE LS3 EXTERN .JBERR ;ERROR COUNT EDIT(6) EXTERN YBHREL ;[6] Buffer header for REL file EXTERN YSWITCH ;WORD CONTAINING SWITCHES EXTERN YSWCHA ;SIWTCHES CHANGED FROM DEFAULT EXTERN YSWDEF ;DEFAULT VALUES OF SWITCHES EXTERN YE3ERR ;;BUFFER FOR ERROR MESSAGE EXTERN Y1LOWE EXTERN Y3OPEN ;SWITCHES CONTAINING STATUS OF FILES EXTERN Y3ENTRY ;[6] Entry point name for global class/proc EXTERN YEXTS ;RENAME ARGUMENT REL AND LST FILE EXTERN YESEM EXTERN YWARCT ;NUMBER OF WARNINGS EXTERN YERRCT ;NUMBER OF ERRORS EXTERN Y3BUF ;BUFFER FOR INTERMEDIATE DATA EXTERN Y3SWAP ;SWITCH AREA IN LOW SEGMENT EXTERN YDMEND ;INDEX TO FIRST FREE ELEMENT IN ZDM EXTERN YI1CB ;COMMAND LINE BUFFER EXTERN YI1CBE ;END OF COMMAND LINE BUFFER EXTERN YCBBH ;COMMAND BUFFER HEADER EXTERN YCBUF ;COMMAND BUFFER X3BYTE==X10 XT3P==X11 XT3IND==X12 SUBTTL T3, LOCAL MACROS Comment* DELETE macro ------------ PURPOSE: DEBUG VERSION: CLOSE FILE PRODUCT VERSION: DELETE FILE * DEFINE DELETE(FILE)< EXTERN YEL'FILE IF SKIPN YEL'FILE GOTO FALSE THEN IFG QDEBUG,< CLOSE QCH'FILE, STATZ QCH'FILE,740K GOTO [IOER FILE ERRT QT,Q.TER+5 BRANCH T3T3] > IFE QDEBUG,< SETZM YEL'FILE RENAME QCH'FILE,YEL'FILE GOTO [IOER FILE ERRT QT,Q.TER+6 BRANCH T3T3] > SETOFF YOP'FILE RELEASE QCH'FILE, FI > DEFINE IOER(FILE)< L X1,[ASCIZ/FILE/]> ;CLOSE FILE EDIT(162) DEFINE KLOSE(FILE,OPT)< CLOSE QCH'FILE,OPT;;[162] Close option bits STATZ QCH'FILE,740K GOTO [IOER FILE ERRT QT,Q.TER+5 BRANCH T3T3] SETOFF YOP'FILE RELEASE QCH'FILE, > ;DELETE ALL TMP FILES IF IN DEBUG MODE, OTHERWISE CLOSE FILES DEFINE IRPDELETE(FILE)< IRP FILE,< IFE QDEBUG,< EXTERN YEL'FILE IF IFOFF YPO'FILE GOTO FALSE THEN LOOKUP QCH'FILE,YEL'FILE NOP ;NO MORE ERRORS SETOFF YPO'FILE FI IF IFOFF YOP'FILE GOTO FALSE THEN SETZM YEL'FILE RENAME QCH'FILE,YEL'FILE NOP SETOFF YOP'FILE RELEASE QCH'FILE, FI > IFG QDEBUG,< IF IFON YPO'FILE GOTO FALSE IFOFF YOP'FILE GOTO FALSE THEN CLOSE QCH'FILE, RELEASE QCH'FILE, FI SETOFF YPO'FILE SETOFF YOP'FILE > > > ;[162] NEWNAM macro not needed any more SUBTTL LOCAL DATA AREAS ;NOTE THAT THE ORDER IS SIGNIFICANT T3DEFA: ASCII / DEFAULT SWITCHES USED / T3CHA: ASCII / SWITCHES CHANGED FROM DEFAULT: / T3NO: ASCII /NO / T3SWA: ASCII /CHECK OF ARRAY INDEX / T3SWD: ASCII /SYMBOL TABLE GENERATED FOR DEBUG / T3SWE: ASCII ?EXTERNAL CLASS/PROCEDURE ? T3SWI: ASCII /LINENUMBER TABLE GENERATED / T3SWQ: ASCII /CHECK OF QUALIFICATION / T3SWR: ASCII /RUNSWITCHES PRESENT / T3SWW: ASCII /WARNINGS GENERATED / T3SWS: ASCII /Non-standard search list / ;[12] EDIT(12) T3SEND: T3SW: ;TABLE CONTAINING ADDRESS AND LENGTH OF TEXT FOR EACH SWITCH XWD 5*,T3SWA XWD 5*,T3SWD XWD 5*,T3SWE XWD 5*,T3SWI XWD 5*,T3SWQ XWD 5*,T3SWR XWD 5*,T3SWW XWD 5*,T3SWS ;[12] T3SWCH: ;TABLE CONTAINING SWITCHES ASCII / A / ASCII / D / ASCII / E / ASCII / I / ASCII / Q / ASCII / R / ASCII / W / ASCII / S / ;[12] SUBTTL T3A EDIT(10) COMMENT;[10] NEW ROUTINE PURPOSE: DELETE nnnATR.TMP ENTRY: T3A NORMAL EXIT: RETURN ERROR EXIT: BRANCH T3T3 CALL FORMAT: EXEC T3A ; T3A: DELETE ATR RETURN SUBTTL T3CHAR GET NEXT BYTE EDIT(225) TOPS10,<;[225] COMMENT ; PURPOSE: TO FETCH NEXT BYTE FROM A BUFFER AND RETURN IMMEDIATELY IF IT IS NOT A DIGIT OR A LETTER LOWER CASE LETTERS ARE CONVERTED TO UPPER CASE. TAB IS CONVERTED TO SPACE. ENTRY: T3CHAR INPUT ARGUMENT: BYTE POINTER IN XT3P OUTPUT ARGUMENT: BYTE IN X3BYTE SKIP RETURN IF X3BYTE CONTAINS A LETTER OR A DIGIT NORMAL EXIT: RETURN ERROR EXIT: - CALL FORMAT: EXEC T3CHAR USED ROUTINES: - USED REGISTER: X3BYTE ERROR MESSAGE: - ; T3CHAR: PROC ILDB X3BYTE,XT3P ;GET BYTE CAIE X3BYTE,"%" CAIN X3BYTE,"$" GOTO L9 ;ACCEPT DOLLAR AND PERCENT CAIN X3BYTE,QHT ;IF TAB THEN LI X3BYTE," " ;CONVERT IT TO SPACE CAIGE X3BYTE,"0" RETURN ;NOT DIGIT OR LETTER! CAIG X3BYTE,"9" GOTO L9 ;IF DIGIT CAIGE X3BYTE,"A" RETURN CAIG X3BYTE,"Z" GOTO L9 ;IF UPPER CASE LETTER CAIL X3BYTE,"a" CAILE X3BYTE,"z" RETURN SUBI X3BYTE,40 ;CONVERT TO UPPER CASE IF LOWER CASE L9():! AOS (XPDP) ;SKIP RETURN IF LETTER OR DIGIT RETURN EPROC >;[225] SUBTTL T3MOVE EDIT(225) TOPS20,;[225] TOPS10,<;[225] COMMENT ; PURPOSE: TO MOVE NEXT COMMAND LINE FROM COMMAND BUFFER (YCBUF) TO COMMAND LINE BUFFER (YI1CB). THIS SUBROUTINE IS CALLED IN COMPIL MODE ONLY. INPUT ARGUMENTS: BYTE POINTER AND BYTE COUNTER SET IN COMMAND BUFFER HEADER, YCBBH. OUTPUT ARGUMENTS: NEXT COMMAND LINE IN YI1CB. YSWCM TRUE IF MORE COMMAND LINES IN BUFFER. NORMAL EXIT: RETURN, OR, IF END OF COMMAND FILE EXIT TO MONITOR ERROR EXIT: GOTO T3AB IF READ ERROR OR TOO LONG COMMAND LINE CALL FORMAT: EXEC T3MOVE USED REGISTERS: X0 BYTE TO BE MOVED X1 BYTE POINTER TO YI1CB X2 SCRATCH USED ROUTINES: T3GC, T3PC AND T3RCOM. THESE THREE SUBROUTINES ARE DEFINED LOCALLY WITHIN T3MOVE. T3PC IS ALSO USED BY T3CM. ERROR MESSAGES ?Read error on command file ?Command line exceeds 135 characters ; T3MOVE: EXEC T3GC CAIE X0,QCR CAIN X0,QLF GOTO T3MOVE ;IGNORE LEADING CR AND LF IF ANY IF ;NULL HERE JUMPN X0,FALSE THEN ;END OF COMMAND FILE IF TMPCOR! IFOFF YSWCOM EXIT ;DIRECTLY IF CORE FILE GOTO T3MOVE FI L X1,[POINT 7,YI1CB] EXEC T3PC RETURN ;IF BUFFER OVERFLOW LOOP ;AND MOVE BYTES UNTIL LINE FEED EXEC T3GC JUMPE X0,TRUE ;IGNORE NULLS! EXEC T3PC RETURN ;IF BUFFER OVERFLOW AS CAIE X0,QLF GOTO TRUE SA AOS (XPDP) RETURN T3GC: SOSG YCBBH+2 ;DECREASE BYTE COUNTER EXEC T3RCOM ;READ NEXT BUFFER IF CURRENT IS EMPTY ILDB X0,YCBBH+1 ;GET NEXT BYTE RETURN > EDIT(225) TOPS20,;[225] TOPS10,<;[225] T3PC: HRRZ X2,X1 SUBI X2,YI1CBE IF ;END OF COMMAND LINE BUFFER JUMPL X2,FALSE THEN ;ERROR OUTSTR [ASCIZ/ ?Command line exceeds 135 characters/] IFOFF YI1CCL CLRBFI ;CLEAR BUFFER IN RUN MODE SETOFF YI1CCL ;SWITCH TO RUN MODE RETURN FI IDPB X0,X1 ;STORE BYTE IN COMMAND LINE BUFFER AOS (XPDP) RETURN T3RCOM: IN QCHCOM,YCBUF+1 RETURN ;IF READ OK IF ;END OF FILE STATZ QCHCOM,740000 GOTO FALSE THEN ;DELETE COMMAND FILE LI X1,0 RENAME QCHCOM,X1 NOP EXIT FI OUTSTR [ASCIZ/ ?Read error on command file/] EXIT >;[225] SUBTTL T3NAME EDIT(225) TOPS20,;[225] TOPS10,<;[225] COMMENT ; PURPOSE: TO PACK NEXT SYMBOLIC NAME IN SIXBIT IN X0. DELIMITER IS ANY NON-DIGIT AND NON-LETTER BYTE. NAMES LONGER THAN 6 BYTES ARE TRUNCATED WITHOUT WARNING. LEADING SPACES ARE IGNORED. ENTRY: T3NAME INPUT ARGUMENT: BYTE POINTER IN XT3P OUTPUT ARGUMENT: DELIMITER IN X3BYTE NAME IN X0 NORMAL EXIT: RETURN ERROR EXIT: - CALL FORMAT: EXEC T3NAME USED ROUTINES: T3CHAR USED REGISTERS: X0 RETURN ARGUMENT X3BYTE DELIMITER AFTER NAME XT3IND POINTER TO X0 ERROR MESSAGE: - ; T3NAME: SETZ MOVSI XT3IND,(POINT 6) ;Pointer to X0 WHILE ; LETTER OR DIGIT EXEC T3CHAR GOTO FALSE DO SUBI X3BYTE,40 ;CONVERT TO SIXBIT TRNN 77 ;SKIP IF 6 BYTES ALREADY IDPB X3BYTE,XT3IND ;STORE IN X0 OD CAIN X3BYTE," " JUMPE X0,T3NAME ;SKIP LEADING SPACES RETURN >;[225] SUBTTL T3E COMMENT ; PURPOSE: Output to TTY and LS3 if relevant: - Information on non-default switch settings - Report if a new ATR file was generated - Error statistics - Report if no new REL file was created Update job error count (.JBERR) ENTRY: T3E INPUT ARGUMENT: YSWITCH SWITCHES YSWCHA COMPILER SWITCHES CHANGED FROM DEFAULT YSWDEF DEFAULT VALUE OF COMPILER SWITCHES NORMAL EXIT RETURN ERROR EXIT: - OUTPUT ARGUMENTS: INFORMATION ON TTY AND IN SOURCE LIST .JBERR USED SUBROUTINES: O3WS,E3BD CALL FORMAT: EXEC T3E ; T3E: CLEARO ;OUTPUT INFORMATION ON SWITCHES USED IF ;List is generated IFOFFA YE3LST GOTO FALSE THEN IF ;No switches changed SKIPE X4,YSWCHA GOTO FALSE THEN ;DEFAULT SWITCHES LI X1,T3DEFA EXEC O3WS,<[XWD 5*]> ELSE ;SOME SWITCH(ES) CHANGED FROM DEFAULT VALUE LI X1,T3CHA EXEC O3WS,<[XWD 5*]> LI X3,0 EDIT(12) MOVSI X2,-QNSWCH ;[12] LOOP ;CHECK EACH SWITCH FOR CHANGE LSHC X3,1 IF JUMPE X3,FALSE THEN ;THIS SWITCH CHANGED ;GET CURRENT SWITCH L X6,T3SWCH(X2) LI X0,5 TRZ X3,1 ;GET DEFAULT STATUS L X1,YSWDEF LSH X1,(X2) IF ;Switch is on TLNN X1,1B18 GOTO FALSE THEN ;DEFAULT IS ON CHANGED TO OFF OUTPUT NO IOR X6,[ASCIZ / -/] L X7,T3NO ADDI X0,3 FI STD X6,Y3BUF LI X1,Y3BUF EXEC O3WS, HRRZ X1,T3SW(X2) HLRZ X0,T3SW(X2) EXEC O3WS, FI AS JUMPE X4,FALSE AOBJN X2,TRUE SA FI edit(22) IF ;A new ATR file was created IFONA NEWATR ;[22] IFOFFA OLDATR GOTO FALSE THEN ;Put a message in the listing LI X1,T3ATR LI X0,5* ;[22] IFONA NEWUNR ;[22] LI X0,5* ;[22] EXEC O3WS, ;[22] FI FI IF ;[22] New ATR generated IFONA NEWATR ;[22] IFOFFA OLDATR GOTO FALSE THEN ;Type message on TTY OUTSTR T3ATR IFONA NEWUNR OUTSTR T3ATRE FI ;[22] IF SKIPN YWARCT SKIPE YDMEND GOTO FALSE ;RETURN AT ONCE IF NO ERRORS IFON YSWTRM GOTO FALSE THEN ;NO ERRORS IF IFOFFA YE3LST GOTO FALSE THEN ;LIST WANTED LI X1,T3NE EXEC O3WS,<[XWD 5*]> FI IFOFF YI1CCL ;NO OUTPUT IF COMMAND FILE OUTSTR T3NE ELSE ;OUTPUT STAT. INF OF ERRORS IF IFOFFA YE3LST GOTO FALSE THEN IF IFOFFA NOREL GOTO FALSE THEN ;NO NEW REL FILE LI X1,T3REL EXEC O3WS,<[XWD 5*]> FI LI X1,T3EI EXEC O3WS,<[^D20]> FI IFONA NOREL OUTSTR T3REL OUTSTR T3EI IF SKIPN X6,YWARCT GOTO FALSE THEN ;OUTPUT NUMBER OF WARNINGS L X0,YWARCT HRLI X2,T3MW EXEC T3E1 FI IF SKIPN YERRCT GOTO FALSE THEN ;OUTPUT NUMBER OF ERRORS L X0,YERRCT AOS .JBERR HRLI X2,T3ME EXEC T3E1 ADD X6,YERRCT FI IF IFOFF YSWTRM GOTO FALSE THEN ;TERMINATION ERROR HAS OCCURRED OUTSTR T3MT IF IFOFFA YE3LST GOTO FALSE THEN ;OUTPUT MESSAGE ON LIST FILE LI X1,T3MT EXEC O3WS,<[^D21]> FI AOS .JBERR FI ;OUTPUT MESSAGE ONLY 50 ERRORS OUTPUT IF RELEVANT IF CAIG X6,^D50 GOTO FALSE THEN OUTSTR T3MERR IF IFOFFA YE3LST GOTO FALSE THEN LI X1,T3MERR EXEC O3WS,<[XWD 5*]> ;[1] ;OUTPUT T3MERR ON LIST FI FI FI ;INDICATE STATISTICAL INFORMATION OUTPUT SETONA Y3STAT RETURN T3E1: EXEC E3BD ;CREATE LINE CONTAINING NO OF ERRORS ST X1,Y3BUF HRRI X2,Y3BUF+1 BLT X2,Y3BUF+4 IF IFOFFA YE3LST GOTO FALSE THEN LI X1,Y3BUF EXEC O3WS,<[^D23]> ;OUTPUT TO LST FI OUTSTR Y3BUF RETURN ;SIGNIFICANT ORDER BETWEEN TABLES T3NE: ASCIZ / NO ERRORS DETECTED / T3EI: ASCIZ / ERRORS DETECTED: / T3ME: ASCIZ / TYPE E MESSAGES / T3MW: ASCIZ / TYPE W MESSAGES / T3MT: ASCIZ /?TERMINATION ERROR / T3REL: ASCIZ / NO NEW REL FILE GENERATED / T3RELE: T3MERR: ASCIZ / SOME ERROR OR WARNING MESSAGES SUPPRESSED / T3ATR: ASCIZ / NEW ATR FILE GENERATED / ;[22] T3ATRE: ASCIZ /RECOMPILE DEPENDENT PROGRAMS / T3ATRF: ;[22] edit(22) SUBTTL T3I edit(162) COMMENT ;[162] PURPOSE: To close REL file, delete IC2 ENTRY: T3I, alternatively T3ID [204] Input: - Output: - NORMAL EXIT: RETURN ERROR EXIT: BRANCH T3T3 CALL FORMAT: EXEC T3I USED ROUTINES: - ; T3I: PROC SETOFA NOREL ;Show REL file was created CLOSE QCHREL, ;[162] Just close now STATZ QCHREL,740K edit(225) GOTO L8 ;[225] On error edit(6) DEFINE E ;[6] Enter block TOPS10,<;[225] ;The following pertains to edit no [6] L X1,E+3 ;[6] [162] PPN L X3,Y3ENTRY ;[6] IF ;[6] Entry name still to be changed JUMPE X3,FALSE THEN ;Must look up file again and change 1st block SETSTS QCHREL,14+1B30 ;Synchronous binary mode LOOKUP QCHREL,E GOTO L9 ;[225] Lookup error ;Prepare for ENTER ST X1,E+3 ;Restore ppn ENTER QCHREL,E GOTO L9 ;On error USETI QCHREL,1 L X2,YBHREL ;Current buffer IN QCHREL,(X2) SKIPA GOTO L9 ;On error ST X3,4(X2) ;Change name of entry point USETO QCHREL,1 ;Find first block for output OUT QCHREL,(X2) ;Replace first block SKIPA ;If ok GOTO L9 ;On error FI >;[225] RELEASE QCHREL, edit(225) TOPS20,<;[225] SKIPN Y3ENTRY GOTO T3ID JF==-3 ;JFN OFFSET (SEE LOWSEG) E1==Y3LKU##+8 LD E STD E1 LD E+2 STD E1+2 LI X1,E1 HRLI X1,(GJ%OLD) EXEC O1JFN## GOTO L9 HRRZ X1,JF+E1 ;JFN L X2,[^D36B5+OF%RD+OF%WR+OF%HER+OF%NWT+OF%PLN] OPENF GOTO L9 L X2,Y3ENTRY LI X3,2 ;Offset of entry name in REL file ROUT ERJMP L9 LI X1,(X1) ;JFN, no special options for CLOSF CLOSF GOTO L9 >;[225] End of DEC-20 variant PURGE E ;[6,225] SETOFF YOPREL edit(204) T3ID: ;[204] Entry for deleting IC2 only DELETE IC2 RETURN L8():! IOER REL ;[225] Close error on REL file ERRT QT,Q.TER+5 BRANCH T3T3 L9():! IOER REL ;[225] Output error on REL file ERRT QT,Q.TER+6 BRANCH T3T3 EPROC SUBTTL T3L COMMENT ; PURPOSE: TO DELETE LS1, CLOSE LST FILE AND RELEASE THE SOURCE CODE FILE, IF LIST FILE IS GENERATED ENTRY: T3L INPUT ARGUMENT: - OUTPUT ARGUMENT: - NORMAL EXIT: RETURN ERROR EXIT: BRANCH T3T3 CALL FORMAT: EXEC T3L USED ROUTINES: - ERROR MESSAGE: YT3E2 ; T3L: DELETE LS1 ;RETURN IF NO LIST FILE IS GENERATED IFOFF YOPLS3 RETURN edit(162) KLOSE SRC,0 ;[162] ;[162] Close and release LST channel edit(6) RELEASE QCHLS3, ;[6] SETOFF YOPLS3 ;[6] RETURN ;[6] SUBTTL T3R ;PURPOSE: Close REL file without creating new REL file ; Delete IC2 also [204] ;ENTRY: T3R ;INPUT ARGUMENTS: - ;OUTPUT ARGUMENTS: - ;NORMAL EXIT: RETURN ;ERROR EXIT: - ;CALL FORMAT: EXEC T3R T3R: edit(204) EXEC T3ID ;[204] Delete IC2 edit(162) KLOSE (REL,40) ;[162] Inhibit supersede of old file RETURN SUBTTL TERMINATION ROUTINES COMMENT ; PURPOSE: TO CLOSE ALL OPENED FILES AND TERMINATE COMPILATION UPDATE .JBERR TAKE CARE OF ^C REENTER ENTRY: T3T WHEN TERMINATION ERROR IN PASS 1 OR 2 T3T3 TERMINATION ERROR IN PASS 3 T3REE ^C REENTER INPUT ARGUMENT: SWITCH-ARRAY IN Y3OPEN DENOTING OPENED FILES YDMEND=0 IF ^C REENTER OUTPUT ARGUMENT: - NORMAL EXIT: TO MONITOR WITH EXIT ERROR EXIT: - CALL FORMAT: BRANCH T3T RESP BRANCH T3T3 USED ROUTINES: I3E,O3ERR,O3TR,O3WT,E3EM,T3E,E3DM ; T3T3: SETZM YESEM T3T: AOS .JBERR L X1,Y3OPEN ;EXIT IF MORE THAN ONE TERMINATION ERROR IFONA Y3TERM GOTO [OUTSTR [ASCIZ/ SIM561 T ?Unrecoverable errors /] BRANCH T3] T3REE: edit(162) IRPDELETE ;[162] Do not include REL, LST IF IFOFF YOPSRC GOTO FALSE THEN CLOSE QCHSRC, SETOFF YOPSRC RELEASE QCHSRC, FI IF IFOFF YOPEXT GOTO FALSE THEN CLOSE QCHEXT, SETOFF YOPEXT RELEASE QCHEXT, FI SETONA Y3TERM IF SKIPN YDMEND GOTO FALSE THEN ;OUTPUT ERRORS ON TTY IF IFONA Y3ERR GOTO FALSE THEN ;NO ERROR TABLES IN CORE EXEC O3ERR ;READ TABLES FOR ERROR HANDLING INTO CORE EXEC E3DM LI XDM2,1 ;INDEX TO ZDM FI WHILE ;ERRORS IN ZDM CAML XDM2,YDMEND GOTO FALSE DO ;OUTUT ONE ERROR EXEC E3EM OUTSTR YE3ERR ADDI XDM2,3 OD IF IFONA Y3STAT GOTO FALSE THEN SETOFA YE3LST EXEC T3E ELSE OUTSTR T3MT FI ELSE ;ERROR ALREADY WRITTEN IN PASS 1 OUTSTR T3MT FI BRANCH T3 T3X: ;DELETE XRF.TMP DELETE XRF RETURN SUBTTL T3 MAIN ROUTINE COMMENT / PURPOSES: TO READ NEXT COMMAND FROM TTY OR IF IN COMPIL MODE TO SEARCH NEXT COMMAND LINE FOR NEXT CUSP DEFINITION (DELIMITER "!") AND IN THAT CASE RUN NEXT CUSP. ALGORITHM: BEGIN IF RUN MODE THEN READ NEXT COMMAND FROM TTY ELSE BEGIN IF NOT MORE COMMANDS THEN BEGIN DELETE COMMAND FILE; EXIT END; T3NAME; IF NOT "!" THEN T3NAME; IF "!" THEN RUN NEXT CUSP; END; SWAP TO PASS 1; END ENTRY: T3 INPUT ARGUMENTS: - OUTPUT ARGUMENTS: - NORMAL EXIT: TO MONITOR (EXIT UUO) ON END OF COMMAND FILE, BRANCH TO PASS 1 OTHERWISE. ERROR EXIT: TO MONITOR (EXIT UUO) IF GETSEG FAILED USED ROUTINES: T3NAME,T3PC. USED REGISTERS: X0,X1,X2,X3,X4,X5,X6,X10,X11,X12 ERROR MESSAGES: - / OPDEF PUTCHAR [XEC T3PC] edit(246) TOPS20,;[246] TOPS10, ;[246] T3: PROC HLLZS .JBREN## ;DO NOT ALLOW REENTER WHEN READING FILE SPECIFICATIONS IF ;RUN MODE IFON YI1CCL GOTO FALSE THEN ;READ IN NEXT COMMAND FROM TTY L1():! SETOFF YI1CCL ;[246] TTYCOMMAND ;[246] GOTO L1 ;IF NOT SATISFACTORY ELSE ;SEE IF NEXT LINE CONTAINS RUN REQUEST EXEC T3MOVE ;MOVE NEXT COMMAND LINE GOTO L1 ;from TTY on ERROR FI ;[246] TOPS10,<;[246] Let Pass 1 handle the command line L XT3P,[POINT 7,YI1CB] EXEC T3NAME SETZB X2,X3 SETZB X4,X5 SETZB X6,X7 ;SET UP RUN UUO ARGUMENTS IF ;DELIMITER IS "!" CAIE X3BYTE,"!" GOTO FALSE L2():! THEN ST X0,X3 ;CUSP NAME IN X3 IF ;COMMAND FILE IFOFF YSWCOM GOTO FALSE THEN ;TIME TO DELETE IT! LI X1,0 RENAME QCHCOM,X1 NOP FI COMMENT * LINK 10 WILL STOP THE ATTEMPT TO EXECUTE A JOB CONTAINING ANY ERRORS. THE FOLLOWING CODE MAKES IT POSSIBLE TO PREVENT LOADING AND EXECUTION WITHOUT ANY CALL OF NEW CUSPS IF ;ERROR(S) IN PREV. COMPILATION(S) SKIPN .JBERR GOTO FALSE THEN ;SKIP CALL OF NEXT CUSP OUTSTR [ASCIZ/ ?LOADING AND EXECUTION DELETED/] EXIT FI * SKIPN X0,X2 MOVSI X2,'SYS' ;DEFAULT DEVICE L X1,[XWD 1,X2] ;NEXT CUSP +1, ARG IN X2 RUN X1, HALT FI ST X0,X2 ;SAVE POSSIBLE DEVICE EXEC T3NAME CAIN X3BYTE,"!" GOTO L2 >;[246] ;NOW SWAP TO PASS 1 edit(225) TOPS10,<;[225] L X3,[XWD 1,Y1LOWE] IFG QTRACE, edit(260) SWAPPA (SIMULA,S1,-1,QP1PPN) > TOPS20,;[225,260] EPROC SUBTTL T3TTYC [225] Read command from TTY edit(225) Comment; Purpose: Input command from user TTY. Input: None Output: Command line in YI1CB Normal exit: Skip return Alternate exit: EXIT to monitor level if last command was finished by ^Z Error exit: Non-skip return Used ac's: X0,X1,X2 Calls: PUTCHAR (T3PC) ; T3TTYC: PROC CLEARO ;CLEAR CONTROL-O edit(220) IFON YSWCZ ;[220] EXIT ;[220] OUTSTR [ASCIZ/ */] L X1,[POINT 7,YI1CB] LOOP ;UNTIL CR, ^Z OR ALTMODE INCHWL X0 CAIN X0,033 ;IF ALTMODE LI X0,QCR ;THEN SUBSTITUTE CR edit(220) IF ;[220] ^Z CAIE X0,"Z"-"A"+1 GOTO FALSE THEN ;SET ^Z FLAG, RETURN SETON YSWCZ LI X0,QCR FI IF ;NOT LINE FEED CAIN X0,QLF ;IGNORE LINE FEED GOTO FALSE THEN ;STORE BYTE IN COMMAND LINE BUFFER PUTCHAR GOTO L9 ;IF OVERFLOW FI AS CAIE X0,QCR GOTO TRUE SA LI X0,QLF PUTCHAR GOTO L9 ;IF OVERFLOW L8():! AOS(XPDP) L9():! RETURN EPROC LIT END