ASMB,Q,C NAM RXREF,4,90 24999-16051 REV.2024 800528 ************************ * MODULE CROSS-REFERENCING PROGRAM - VERSION IV * * WRITTEN BY: KATHY HAHN * * HISTORY--- * * MODIFIED BY: TERRY DONAHUE * DATE MODIFIED: * * MODIFIED BY: LYLE WEIMAN * DATE MODIFIED: 14 SEPT '76 * REASON: TO PRINT FILE NAME,CR #RECORD SIZE(DATE), FULL NAM RECORD * * MODIFIED BY: LYLE WEIMAN * DATE MODIFIED: 23 FEB. '77 * REASON: TO PRINT ACTUAL CARTRIDGE REF. # OF FILE, CHANGE ALL * EXEC I/O CALLS TO REIO CALLS, AND ALLOW "BATCH" USE. * * MODIFIED BY: LYLE WEIMAN * DATE MODIFIED: 20 DEC '77 * REASON: INCORPORATE EMA RECORDS FOR RTE-IV * * MODIFIED BY: LYLE WEIMAN * DATE MODIFIED: MAR 30 '78 * REASON: CHANGE NAME TO 'RXREF' SO AS TO AVOID DUPLICATE MODULE * NAME (MICROCODE ASSEMBLER'S CROSS-REF IS 'MXREF' * * MODIFIED BY: LYLE WEIMAN * DATE MODIFIED: 11 APR '78 * REASON: ALLOW 'BATCH' USAGE * * MODIFIED BY: HARVEY CLAWSON * DATE MODIFIED: 1 AUG '79 * REASON: CONVERT FOR COMPATIBILITY WITH RTE-L (REMOVE 'LG' CAPABILITY * AND ALLOW 'LOD' AND 'GEN' RECORDS BEFORE 'NAM' RECORD) * ALSO: ALLOW USE OF LARGE BACKGROUND PARTITION (MAKE TYPE 4; USE * 'LIMEM' TO DETERMINE FREE MEMORY SIZE) * ALSO: ALLOW COMMAND INPUT FROM A FILE * ALSO: ALLOW LIST OUTPUT TO A FILE * ALSO: DEFAULT THE LIST FILE TO THE USER TERMINAL * ALSO: LOCK LIST DEVICE FOR DURATION OF PROGRAM * ALSO: IMPROVE ERROR REPORTING ON FILE ERRORS * ALSO: ALLOW ASCII FILE SUBPARAMETERS (USE 'NAMR' SUBROUTINE). * ALSO: ALLOW SPECIFICATION OF RELOCATABLE FILE NAMES * IN THE RUN STRING * ALSO: ALLOW SEVERAL NEW TERMINATION COMMANDS (END, /E, EX, /A) * ALSO: PRINT THE NUMERIC TYPE OF EACH MODULE * ALSO: PRINT A WARNING MESSAGE IF THE MODULES ARE NOT IN LOGICAL * LOAD ORDER. * * MODIFIED BY: HARVEY CLAWSON * DATE MODIFIED: 10 OCT '79 * REASON: FIX THE ALGORITHM FOR DETERMINING WHETHER ALL MODULES ARE * IN LOGICAL LOAD ORDER. PRINT AN ASTERISK BESIDE THE * MODULE NAME OF EACH BACKWARD REFERENCE. * ALSO: DELETE TRAILING SPACES FROM OUTPUT RECORDS TO REDUCE THE * AMOUNT OF DISC SPACE REQUIRED FOR LISTING TO A FILE. * ALSO: ABORT THE CROSS REFERENCE IF THE BREAK FLAG IS SET BY * THE OPERATOR 'BR' COMMAND. * ALSO: PRINT THE MODULE NUMBER WITHIN THE FILE (IMMEDIATELY * BELOW THE MODULE NAME). * ALSO: ALLOW MORE THAN 256 MODULES TO BE CROSS REFERENCED * (LIMITED ONLY BY THE SIZE OF FREE MEMORY). * * MODIFIED BY: HARVEY CLAWSON * DATE MODIFIED: 27 MAY '80 * REASON: PRINT THE TIME AND DATE WITH EACH LISTING * ALSO: CHANGE THE START-UP SEQUENCE TO PROMPT FOR * PARAMETERS NOT SPECIFIED IN THE RUN STRING * ALSO: MAKE 'EX' EQUIVALENT TO '/E', NOT '/A'. * HED RXREF OPERATING CHARACTERISTICS * * CALLING SEQUENCE: * RU,RXREF,COMMAND NAMR,LIST NAMR,RELOC1,...,RELOCN,/E * * WHERE: * 'COMMAND NAMR' IS A FILE CONTAINING A LIST OF RELOCATABLE * FILE NAMES (DEFAULTS TO USER TERMINAL, PROMPTS * WITH '-') * * 'LIST NAMR' IS A LIST DEVICE OR FILE (DEFAULTS TO USER TERMINAL). * IF THE FILE CANNOT BE FOUND, IT IS CREATED. * * 'RELOCX' IS THE FILE NAMR OF A RELOCATABLE BINARY FILE OR * OTHER VALID INPUT AS FOLLOWS: * * * FILE IS OPENED AND SCANNED. NAM,ENT,EXT * & END RECORDS ARE READ AND SORTED FOR * LATER CROSS-REFERENCE PRINTOUT. * * SAME AS ABOVE, EXCEPT THE SPECIFIED LOGICAL * UNIT IS READ INSTEAD OF A DISC FILE. * * -END, END, /E, EX, OR END OF FILE * SIGNIFIES LAST FILE HAS BEEN INPUT. * CAUSES PROGRAM TO BEGIN ALPHABETICAL SORTING AND * PRINTOUT OF: * MODULES, WHERE-USED * ENTRY POINTS, DEFINING MODULE & REFERENCING * MODULES * UNDEFINED EXTERNALS, WHERE-USED * * /A ABORT. DO NOT COMPLETE CROSS REFERENCE. * * MULTIPLE FILE NAMES MAY BE INPUT IN ONE RECORD. SKP * * ERROR MESSAGES (DISPLAYED ON USER TERMINAL): * * FMP ERROR -NNN ON FILEX (SUBRX) -- * WHERE: * -NNN IS THE FMP ERROR NUMBER * FILEX IS THE NAME OF THE FILE OR DEVICE LU * SUBRX IS THE NAME OF THE FMP ROUTINE (I.E. OPENF, CLOSE) * * WAITING FOR FILEX -- THE NAMED FILE OR DEVICE IS OPEN OR LOCKED * TO ANOTHER PROGRAM. ENTER 'BR,RXREF' TO STOP RETRIES. * * CHECKSUM -- BAD CHECKSUM, OR FILE IS NOT RELOCATABLE BINARY. * * NOT ENOUGH SPACE TO COMPUTE LEVEL NUMBER -- BE SURE YOU * LOAD THIS PROGRAM TO USE AS LARGE A PARTITION AS POSSIBLE. * * SYMBOL TABLE-MODULE TABLE OVERFLOW -- BE SURE YOU * LOAD THIS PROGRAM TO USE AS LARGE A PARTITION AS POSSIBLE. * * NNN WARNINGS -- THE SPECIFIED NUMBER OF WARNING MESSAGES HAVE * BEEN PRINTED ON THE LIST FILE. * * * WARNING MESSAGES (DISPLAYED ON LIST FILE): * * ****DUP MODULE NAME: -- MODULE OF SAME NAME HAS BEEN SEEN BEFORE. * * ****DUP ENT: ,SKIP IT -- ENTRY POINT OF SAME NAME HAS BEEN * SEEN BEFORE. * * ****DUP EXT: ,SKIP IT -- EXTERNAL REFERENCE REPEATED WITHIN * MODULE. * * ****BACKWARD REFERENCE -- TO ALLOW EFFICIENT SEARCHING OF LIBRARIES, * EACH MODULE SHOULD PRECEDE THOSE MODULES IT REFERENCES. THE MODULES * MARKED WITH '*' FOLLOW THE REFERENCED MODULE. * TO GUARANTEE EFFICIENT SEARCHING OF LIBRARIES, ALL * BACKWARD REFERENCES MAY BE RESOLVED BY ORDERING THE MODULES IN * ASCENDING NUMERICAL LEVEL NUMBER. * * ****CIRCULAR REFERENCE -- SOME MODULE REFERS TO A SECOND MODULE WHICH * IN TURN REFERS BACK TO THE FIRST MODULE. BOTH MODULES ARE LISTED * AS HAVING A LEVEL NUMBER OF 1000. * SKP * * NOTE: "LEVEL" IS AN INDICATION OF SUBROUTINE NESTING. * IF RXREF SEES A MODULE WHICH IS NOT CALLED FROM ANY OTHER * MODULE, THEN IT ASSIGNS THAT MODULE LEVEL 1. THE MODULES * THIS MODULE CALLS ARE ASSIGNED LEVEL 2, AND SO ON. * LEVELS ARE ASSIGNED BY THE MAXIMUM DEPTH FROM WHICH THEY ARE * CALLED. FOR EXAMPLE, IF A UTILITY SUBROUTINE IS CALLED FROM * VARIOUS LEVELS, ITS LEVEL WOULD THEN BE ONE LARGER THAN THE LARGEST * LEVEL NUMBER OF ANY SUBROUTINE WHICH CALLS IT. * OCCASIONALLY, IT IS NECESSARY FOR SOFTWARE TO REFER TO * LEVELS "ABOVE" IT. THAT IS, A MODULE AT LEVEL N REFERS * TO ANOTHER MODULE WITH A LOWER LEVEL NUMBER. IN THIS * CASE, RXREF SIMPLY GIVES UP AND ASSIGNS LEVEL NUMBER 1000. * IF INSUFFICIENT MEMORY IS AVAILABLE TO COMPUTE THE NUMBERS, * ZEROES ARE PRINTED. * * SKP * TABLE FORMATS: * SYMBOL TABLE -- GROWS DOWNWARD FROM LWAM * WORD 7 - ADDRESS OF DEFINING MODULE ENTRY * WORD 6 - ADDRESS OF FIRST ENTRY IN USER-MODULE LIST * WORD 5 - ADDRESS OF NEXT ALPHA. SYMBOL TABLE ENTRY * WORD 4 - ADDRESS OF NEXT ALPHA. ENTRY IN MODULE-ENT LIST * WORD 3 - CHARACTER 5 OF NAME; FLAGS * WORD 2 - CHARACTERS 3 AND 4 OF NAME * WORD 1 - CHARACTERS 1 AND 2 OF NAME * * USER-MODULE LIST -- GROWS DOWNWARD WITH THE SYMBOL TABLE * WORD 2 - ADDRESS OF NEXT ENTRY IN USER-MODULE LIST * WORD 1 - ADDRESS OF MODULE ENTRY REFERENCING THIS SYMBOL * * MODULE-TABLE -- GROWS UPWARD FROM FWAM; LENGTH VARIES AS * THE NUMBER OF EXT'S IN A MODULE VARY * WORD N - ADDRESS OF S.T. ENTRY FOR EXT #N * : * : * WORD 8 - ADDRESS OF S.T. ENTRY FOR EXT #1 * WORD 7 - NUMBER OF EXT'S FOR THIS MODULE * WORD 6 - LEVEL NUMBER * WORD 5 - ADDRESS OF FIRST S.T. ENTRY IN MODULE-ENT LIST * WORD 4 - ADDRESS OF NEXT ALPHA. MODULE TABLE ENTRY * WORD 3 - CHARACTER 5 OF NAME; FLAGS * WORD 2 - CHARACTERS 3 AND 4 OF NAME * WORD 1 - CHARACTERS 1 AND 2 OF NAME * ******** * HED RELOC. MODULE CROSS-REFERENCE GENERATOR EXT KCVT DECIMAL TO ASCII CONVERSION EXT IFBRK RETURNS -1 IF BREAK FLAG SET EXT CREAT CREATE A FILE EXT READF READ A FILE EXT WRITF WRITE A FILE EXT GETST GETS OPERATOR PARAMETERS EXT LOGLU RETURNS LU OF OPERATOR CONSOLE EXT OPENF LU OR FILE "OPEN" ROUTINE EXT NAMR FMGR NAMR PARSE ROUTINE EXT CLOSE FILE CLOSER EXT CNUMD INTEGER-TO-DECIMAL ASCII CONVERTER EXT FSTAT CARTRIDGE INFO. GETTER EXT FTIME SYSTEM TIME FORMATTER EXT LOCF FILE INFO EXT LIMEM GET FIRST WORD AND SIZE OF FREE MEMORY EXT EXEC OPERATING SYSTEM EXECUTIVE EXT REIO BUFFERED I/O EXT .MVW MOVE WORDS * A EQU 0 B EQU 1 SUP * SKP * RXREF EQU * * INITIALIZATION ROUTINE * * NOTE: THIS CODE IS OVERLAID AFTER EXECUTION BY * THE CARTRIDGE DIRECTORY INFORMATION BLOCK. * * JSB GETST GET THE RUN STRING DEF *+4 DEF CMDBF BUFFER DEF M80 LENGTH DEF CMD1 TLOG * JSB LIMEM GET FREE MEMORY DEF *+4 DEF ZERO GET MEMORY DEF FWAM FIRST WORD OF FREE MEMORY DEF HADDR # OF WORDS LDA FWAM STA LADDR ADA M1 ADA HADDR COMPUTE LAST WORD STA HADDR * JSB LOGLU GET LU OF OPERATOR CONSOLE DEF *+2 (FOR ERROR MESSAGES) DEF LUTTY STA LUTTY STORE LU OF OPERATOR CONSOLE IOR B400 SET THE ECHO BIT FOR TERMINAL INPUT STA LUIN * CLA STA MCNT NUMBER OF MODULES STA AMDT ADD OF MODULE TABLE STA ASYMT ADD OF SYMBOL TABLE STA MADDR ADD OF CURRENT MODULE ENTRY STA ADDR ADD OF CURRENT ST ENTRY STA TBPSZ TOTAL BASE PAGE SIZE STA TMNSZ TOTAL MAIN SIZE STA TCMSZ TOTAL COMMON SIZE STA WARN WARNING COUNT * CLA,INA STA X INDEX FOR PARSE ROUTINE * LDB CMD1 SZB,RSS JMP GETIT NO STRING SPECIFIED, ASK FOR FILES * * COM? JSB NAMR PARSE COMMAND FILE NAME DEF *+5 DEF CNAME RESULT DEF CMDBF DEF CMD1 DEF X INDEX * LDA CNAME SZA,RSS JMP TTY INTERACTIVE COMMAND INPUT CPA LUTTY JMP TTY INTERACTIVE COMMAND INPUT * JSB OPENW OPEN THE COMMAND FILE DEF DCBC COMMAND DCB DEF IERR DEF CNAME NAME DEF ZERO OPTION DEF CSECR DEF CCART JSB FMPER PRINT ANY ERRORS DEF CNAME DEF OPEN CLB NON-INTERACTIVE SSA TTY CCB USE TERMINAL STB TTYFL * * JSB NAMR PARSE LIST FILE NAME DEF *+5 DEF LNAME RESULT DEF CMDBF DEF CMD1 DEF X * CCB LDA CMD1 ANY FILE NAMES PAST THE LIST DEVICE? INA CPA X CLB NO, NO RELOCS IN RUN STRING STB QUIT? LDA LNAME SZA,RSS LDA LUTTY DEFAULT TO USER TERMINAL STA LNAME * JSB OPENW OPEN THE LIST FILE DEF DCBL DEF IERR DEF LNAME NAME DEF ZERO OPTION DEF LSECR DEF LCART CPA M6 JMP CRETL CREATE THE LIST FILE JSB FMPER PRINT ANY ERRORS DEF LNAME DEF OPEN LERR? SSA JMP ABORT GIVE UP * * JSB LIST EJECT PAGE DEF EJECT SSA JMP ABORT GIVE UP * JSB LIST '24998-XXXXX XXXX SOFTWARE KIT' DEF HEAD0 * JSB FTIME FORMAT THE TIME AND DATE MESSAGE DEF *+2 DEF DATE+2 * JSB LIST ' 4:11 PM WED., 10 OCT., 1979' DEF DATLN * JSB LIST 'MODULE MODULE SIZE (OCTAL) DEF HEAD1 JSB LIST 'NAME MODULE IDENT. BPAG MAIN COMM' DEF HEAD2 JSB LIST '----------------------------' DEF HEAD3 JMP NXTCM * * * CRETL LDA LSIZE CREATE THE LIST FILE SZA,RSS LDA D24 DEFAULT TO 24 BLOCK FILE STA LSIZE LDA LTYPE SZA,RSS LDA D4 DEFAULT TO TYPE 4 STA LTYPE JSB CREAT CREATE THE LIST FILE DEF RTN11 DEF DCBL DEF IERR DEF LNAME DEF LSIZE DEF LTYPE DEF LSECR DEF LCART RTN11 JSB FMPER PRINT ANY ERROR DEF LNAME DEF CRET JMP LERR? * * * GETIT JSB REIO '*RELOCATABLE MODULE CROSS REFERENCE*' DEF *+5 DEF D2 DEF LUTTY DEF TITLE DEF TITLN * JSB REIO 'PLEASE ENTER FILE NAMES AS FOLLOWS:' DEF *+5 DEF D2 DEF LUTTY DEF PLEAS DEF PLNG * * JSB REIO 'COMMAND, LIST, RELOC1,...,RELOCN,/E' DEF *+5 DEF D2 DEF LUTTY DEF RUNST DEF RUNLN * JSB REIO READ THE RUN STRING DEF *+5 DEF D1 DEF LUIN DEF CMDBF DEF M80 STB CMD1 JMP COM? PARSE COMMAND FILE NAME * * * THE FOLLOWING FOUR MESSAGES ARE OVERLAID BY THE * RELOCATABLE BINARY INPUT. THE TOTAL LENGTH MUST * BE AT LEAST 60 WORDS. * RBBUF EQU * DATLN DEC 17 DATE ASC 17, * TITLN DEC 18 TITLE ASC 18,*RELOCATABLE MODULE CROSS REFERENCE* * PLNG DEC 18 PLEAS ASC 18,PLEASE ENTER FILE NAMES AS FOLLOWS: * RUNLN DEC 19 RUNST ASC 19,COMMAND, LIST, RELOC1,..., RELOCN, /E * * * * NOTE: SIZE OF CARTRIDGE DIRECTORY INFORMATION * BLOCK MUST BE AT LEAST 175 WORDS OCTAL, GIVEN * BELOW BY SZCM: * SZCM EQU *-RXREF * M80 DEC -80 M6 DEC -6 M11 DEC -11 ZERO DEC 0 D24 DEC 24 X NOP QUIT? NOP WARN NOP FWAM NOP POINTS TO BASE OF MODULE TABLE HED RXREF COMMAND PROCESSOR * NXTCM JSB NAMR PARSE THE INPUT DEF *+5 DFILE DEF FNAME RESULT OF PARSE DEF CMDBF INPUT BUFFER DEF CMD1 INPUT BUFFER LENGTH DEF X INDEX * LDA FNAME SZA,RSS JMP CMDIN INPUT COMMAND * LDA DFILE LDB DEND JSB COMP CHECK FOR 'END' SZA,RSS JMP FINIS FINISH XREF * LDA DFILE LDB D.END JSB COMP CHECK FOR '-END' SZA,RSS JMP FINIS FINISH XREF * LDA DFILE LDB D/E JSB COMP CHECK FOR '/E' SZA,RSS JMP FINIS FINISH XREF * LDA DFILE LDB DEX JSB COMP CHECK FOR 'EX' SZA,RSS JMP FINIS EXIT * * LDA DFILE LDB D/A JSB COMP CHECK FOR '/A' SZA,RSS JMP ABORT EXIT * * * JSB CLOSE DEF *+2 DEF #DCB CPA M11 CLA IF NOT OPEN, IGNORE ERROR JSB FMPER PRINT ANY OTHER ERRORS DEF FNAME DEF CLOS * * JSB OPENW ATTEMPT TO OPEN FILE OR LU DEF #DCB DEF IERR DEF FNAME NAME DEF B311 OPTION DEF FSECR DEF FCART JSB FMPER PRINT ANY ERRORS DEF FNAME DEF OPEN SSA JMP NXTCM TRY NEXT FILE * * GET FILE INFORMATION * JSB LOCF DEF *+10 DEF #DCB DEF IERR DEF IERR DON'T CARE ABOUT THESE PARAMS DEF IERR DEF IERR DEF FSIZE FILE SIZE(IN SECTORS) DEF FLU LU OF FILE DEF FTYPE FILE TYPE DEF FREC RECORD SIZE(SOMETIMES HAS DATE FILE MADE) JSB FMPER PRINT ANY ERROR DEF FNAME DEF LOC * * EXTRACT THE CARTRIDGE REFERENCE NUMBER FROM THE * CARTRIDGE DIRECTORY. * JSB FSTAT DEF *+2 @CRTN DEF RXREF * LDA @CRTN LLL EQU * SEARCH LOOP LDB A,I GET LU OF CARTRIDGE SZB,RSS END OF LIST? JMP LL2 NOT FND,DON'T KNOW HOW THIS COULD HAPPEN.... CPB FLU SAME AS FILE? JMP LLF YES, FOUND ADA D4 MOVE ON TO NEXT ENTRY. JMP LLL * LLF EQU * HERE WHEN CARTRIDGE FOUND ADA D2 MOVE POINTER TO CARTRIDGE REF. NO. LDA A,I GET DIRECTORY TRACK NUMBER STA FCART LL2 EQU * JSB NAME MOVE FILE NAME DEF FNAME DEF FN1 * JSB CNUMD CONVERT CARTRIDGE TO DECIMAL DEF *+3 DEF FCART DEF FN2 * JSB CNUMD CONVERT FILE TYPE TO DECIMAL DEF *+3 DEF FTYPE FILE TYPE DEF FN3 * LDA FSIZE GET FILE SIZE(IN SECTORS) ARS CONVERT TO BLOCKS STA FSIZE STORE FOR CONVERSION JSB CNUMD CONVERT TO DECIMAL DEF *+3 DEF FSIZE DEF FN4 * JSB CNUMD CONVERT FILE SIZE TO DECIMAL DEF *+3 (RECORD SIZE IS SOMETIMES USED TO INDICATE DEF FREC DATE FILE CREATED) DEF FN5 * JSB CNUMD CONVERT FILE'S LU TO DEF *+3 DECIMAL DEF FLU DEF FN6 * * JSB LIST 'FILE NAME: FILEXX::CR:TY:SZ' DEF FNBUF * CLA STA MODS CLEAR MODULE COUNT * READB JSB RBIN READ BINARY RECORD * ADA RTBL INDEX INTO JUMP TABLE LDA A,I JMP A,I JUMP TO RECORD PROCESSOR * * FNBUF ABS FBUFL-FNBUF-1 ASC 6, FILE NAME: FN1 BSS 3 FILE NAME BUFFER ASC 1,:: FN2 EQU * CARTRIDGE REFERENCE NUMBER FIELD. BSS 3 ASC 1,: FN3 EQU * BSS 3 FILE TYPE FIELD. ASC 1,: FN4 EQU * BSS 3 FILE SIZE FIELD ASC 1,: FN5 EQU * BSS 3 RECORD SIZE (DATE) FIELD. ASC 5, IS ON LU FN6 EQU * FILE LU FIELD. BSS 3 FBUFL EQU * * * * * * IERR NOP PRMT ASC 1,-_ ASK FOR INPUT * * * LNAME BSS 4 10-WORD PARSE BUFFER LSECR NOP * LCART NOP * LTYPE NOP * LSIZE NOP * LREC NOP * NOP * * * CNAME BSS 4 10-WORD PARSE BUFFER CSECR NOP * CCART NOP * CTYPE NOP * CSIZE NOP * CREC NOP * NOP * * * FNAME BSS 4 10-WORD PARSE BUFFER FSECR NOP * FCART NOP * FTYPE NOP * FSIZE NOP * FREC NOP * FLU NOP * * * * FINIS JSB BLINE BLANK THE LINE LDA TTLHD LDB MPTBF PRINT TOTAL HEADING JSB MVNAM LDB TBPSZ LDA OBF13 JSB CONV CONVERT TOTAL BPAGE SIZE TO ASCII LDB TMNSZ JSB CONV CONVERT TOTAL MAIN SIZE LDB TCMSZ JSB CONV CONVERT TOTAL COMMON SIZE JSB BFOUT JSB LVLNM COMPUTE MODULES' LEVEL NUMBERS JSB MREF DO MODULE CROSS REFERENCE JSB XREF DO ST CROSS REFERENCE * LDA WARN SZA,RSS JMP RXEND NO WARNINGS * LDB D8 CPA D1 LDB D7 STB WRN LENGTH OF WARNING MESSAGE * JSB CNUMD CONVERT WARNING COUNT TO DECIMAL DEF *+3 DEF WARN DEF WRN+1 * JSB ERROR 'NNN WARNINGS' DEF WRN * RXEND JSB LIST 'END OF CROSS REF' DEF NDMSG JSB LIST PAGE EJECT DEF EJECT * HALT JSB CLOSE CLOSE THE BINARY INPUT FILE DEF *+2 DEF #DCB CPA M11 CLA JSB FMPER PRINT ANY OTHER ERRORS DEF FNAME DEF CLOS * JSB CLOSE CLOSE THE COMMAND INPUT FILE DEF *+2 DEF DCBC CPA M11 CLA JSB FMPER PRINT ANY OTHER ERRORS DEF FNAME DEF CLOS * JSB CLOSE CLOSE THE LIST FILE DEF *+2 DEF DCBL CPA M11 CLA JSB FMPER PRINT ANY OTHER ERRORS DEF FNAME DEF CLOS * JSB EXEC DONE WITH PROGRAM DEF *+2 DEF D6 * * ABORT JSB ERROR 'RXREF ABORTED' DEF ABMSG JMP HALT * ABMSG DEC 7 ASC 7,RXREF ABORTED * * WRN DEC 8 ASC 8,XXXXXX WARNINGS * * TTLHD DEF *+1 ASC 3,TOTAL D.END DEF *+1 ASC 3,-END DEND DEF *+1 ASC 3,END D/E DEF *+1 ASC 3,/E D/A DEF *+1 ASC 3,/A DEX DEF *+1 ASC 1,EX BLANK ASC 2, * CLOS ASC 3,CLOSE OPEN ASC 3,OPENF CRET ASC 3,CREAT LOC ASC 3,LOCF WRIT ASC 3,WRITF READ ASC 3,READF * B311 OCT 311 D8 DEC 8 * NDMSG DEC 9 ASC 9, END OF CROSS REF * SKP * CMDIN EQU * ISZ QUIT? CLA,INA,RSS JMP FINIS RELOCS WERE SPECIFIED IN RUN STRING, QUIT STA X RESET INDEX FOR 'NAMR' LDA TTYFL GET TTY FLAG. SSA,RSS INTERACTIVE DEVICE? JMP CMDFL NOT A TTY, DON'T SEND PROMPT. JSB REIO ISSUE PROMPT TO TERMINAL. DEF *+5 DEF D2 DEF LUTTY DEF PRMT DEF M2 * JSB REIO READ TERMINAL INPUT DEF *+5 DEF D1 DEF LUIN DEF CMDBF DEF M80 SZB,RSS JMP FINIS END OF INPUT JMP RDEX SAVE TRANSMISSION LOG * CMDFL JSB READF READ A RECORD FROM FILE DEF *+6 DEF DCBC DEF IERR DEF CMDBF BUFFER DEF D40 DEF CMD1 JSB FMPER PRINT ANY ERRORS DEF CNAME DEF READ SSA JMP FINIS ERROR, FINISH PROCESSING LDB CMD1 SSB JMP FINIS END OF FILE BLS CONVERT LENGTH TO CHARACTERS RDEX STB CMD1 JMP NXTCM PARSE NEXT COMMAND * SKP * FMPER NOP SSA,RSS JMP FMPOK NO ERROR, RETURN STA FMP ERROR ACCUMULATOR CMA,INA COMPLEMENT ERROR NUMBER STA FMP3 JSB CNUMD CONVERT TO DECIMAL DEF *+3 DEF FMP3 DEF FMP1 * LDA MINUS STA FMP1 ADD MINUS SIGN LDA FMPER,I STA FMPNM JSB NAME MOVE THE FILE NAME TO THE MESSAGE FMPNM NOP DEF FMP2 * ISZ FMPER LDA FMPER,I LDB DFMP3 JSB MVNAM MOVE THE SUBROUTINE NAME * JSB ERROR 'FMP ERROR -NNNN ON FILEX (SUBR)' DEF MSGP LDA FMP FETCH ERROR CODE RSS FMPOK ISZ FMPER ISZ FMPER JMP FMPER,I * * * FMP NOP * MSGP DEC 18 ASC 5,FMP ERROR FMP1 ASC 5,XXXXXX ON FMP2 ASC 4,XXXXXX ( FMP3 ASC 4,XXXXXX) * DFMP3 DEF FMP3 MINUS ASC 1, - * SKP * * NAME:OPENW * SUBROUTINE TO OPEN A FILE OR LU WITH WAIT. * IF THE FILE IS OPEN OR THE LU IS LOCKED TO * ANOTHER PROGRAM, RXREF PRINTS * THE MESSAGE 'WAITING FOR XXXXXX', AND THEN * RETRIES THE OPEN REQUEST FOREVER AT 6 SECOND * INTERVALS. RETRIES MAY BE STOPPED BY AN OPERATOR BREAK. * * * CALLING SEQUENCE: * JSB OPENW * DEF DCB * DEF ERROR * DEF NAME * DEF OPTION * DEF SECR * DEF CR * >ERROR CODE IN A * * OPENW NOP OPEN WITH WAIT CLA STA ERCOD LDA OPENW LDB DOPEN JSB .MVW MOVE THE PARAMETERS TO THE CALL DEF D6 NOP LDA OPENW ADA D6 ADJUST THE RETURN ADDRESS STA OPENW * * OPNLP JSB OPENF OPEN THE FILE OR LU DEF *+7 OPEND NOP DCB OPENE NOP ERROR CODE OPENN NOP NAME NOP OPTION NOP SECR NOP CARTRIDGE SSA,RSS JMP OPENW,I SUCCESS! * * CPA M8 RSS FILE OPEN CPA M36 RSS LU LOCKED JMP OPENW,I FAILURE * * * CPA ERCOD JMP WAITO MESSAGE ALREADY PRINTED * STA ERCOD LDA OPENN STA *+2 JSB NAME MOVE FILE NAME TO MESSAGE NOP DEF WBUF+9 * JSB ERROR PRINT 'WAITING FOR XXXXXX' DEF WTBF * * WAITO JSB IFBRK CHECK THE BREAK FLAG DEF *+1 SZA JMP QUIT * JSB EXEC TIME SUSPEND DEF RTN23 DEF TIME CODE 12 DEF ZERO NAME DEF D2 CODE 2=SECONDS DEF ZERO MULTIPLE DEF M6 6 SECONDS * RTN23 JMP QUIT ABORT RETURN FROM EXEC 12 JMP OPNLP TRY AGAIN * QUIT LDA OPENE,I NO MORE RETRIES, BREAK FLAG SET JMP OPENW,I FAILURE * * WTBF DEC 12 WBUF ASC 12,RXREF WAITING FOR XXXXXX M8 DEC -8 M36 DEC -36 TIME DEF 12,I ERCOD NOP DOPEN DEF OPEND * SKP * ERROR NOP PRINT ERROR MESSAGE ON TERMINAL LDA ERROR,I STA ERLNG INA STA ERBUF JSB REIO WRITE THE ERROR MESSAGE DEF *+5 DEF D2 DEF LUTTY TERMINAL LU ERBUF NOP ERLNG NOP ISZ ERROR JMP ERROR,I * SKP * * CALLING SEQUENCE: * JSB LIST * DEF STRNG * . * . * . *STRNG DEC N MUST BE POSITIVE WORD LENGTH * ASC N,XXXXXXXXXXXXXXXX * * * LIST NOP OUTPUT LISTING JSB IFBRK TEST THE BREAK FLAG DEF *+1 SZA JMP ABORT BREAK FLAG SET, QUIT * LDA LIST,I LDB A,I WORD LENGTH INA STA LSBUF BUFFER ADDRESS ADB A LSTLP ADB M1 BACK UP ONE WORD LDA B,I CPA BLANK REMOVE ALL TRAILING BLANKS JMP LSTLP * INB LDA LSBUF CMA,INA ADB A SZB SSB CLB,INB IF START OF BUFFER WAS PASSED, OUTPUT ONE WORD STB LSLNG JSB WRITF WRITE THE LISTING DEF RTN5 DEF DCBL DEF IERR LSBUF NOP DEF LSLNG RTN5 JSB FMPER PRINT ANY ERRORS DEF LNAME DEF WRIT ISZ LIST JMP LIST,I * LSLNG NOP SKP * * NAME:NAME * SUBROUTINE TO MOVE A FILE NAME TO A BUFFER. * IF THE PARAMETER IS NUMERIC, THE MESSAGE * 'LU XX' IS MOVED. * * CALLING SEQUENCE: * JSB NAME * DEF NAMBF (MUST BE IN 'NAMR' PARSED FORMAT) * DEF BUFFER (3-WORD DESTINATION BUFFER) * * NAME NOP MOVE A FILE NAME DLD NAME,I STB NTMP1 ISZ NAME ISZ NAME JSB .MVW MOVE THE FILE NAME DEF D3 NOP LDA A,I RAR,SLA JMP NAME,I ASCII FILE NAME, DONE * LDA NTMP1,I NUMERIC (LU) AND B77 STA NTMP2 JSB KCVT CONVERT LU TO DECIMAL DEF *+2 DEF NTMP2 LDB NTMP1 ADB D2 STA B,I DLD LU MOVE ASCII PREFIX DST NTMP1,I JMP NAME,I DONE * NTMP1 NOP NTMP2 NOP LU ASC 2,LU * SKP * RBIN NOP RDF JSB READF READ BINARY INPUT DEF *+6 DEF #DCB DEF IERR RBBFA DEF RBBUF BUFFER DEF D60 DEF RBCNT COUNT JSB FMPER PRINT ANY ERRORS DEF FNAME DEF READ IOR RBCNT SSA JMP NXTCM ERROR OR END-OF-FILE, ASK FOR NEXT FILE ***** * * COMPUTE AND CHECK CHECKSUM * LDA RBCNT GET NEG. #DATA WORDS. CMA,INA,SZA,RSS JMP RDF ZERO LENGTH, TRY AGAIN ADA D3 SET UP COUNTER SSA,RSS (PROTECTION AGAINST JMP CKSER LT 4 WORD RECORD.) STA RBTM1 SET COUNTER LDA RBBUF+1 START CKSM WITH I. D. WORD LDB DRB3 * RBLP ADA B,I ADD INB REMAINING ISZ RBTM1 WORDS IN JMP RBLP RECORD - SUM IN A CPA RBBUF+2 COMPARE WITH RECORD CHECKSUM JMP RBOK EQUAL, RECORD GOOD * CKSER JSB ERROR 'CHECKSUM' DEF ERR1 JMP NXTCM TRY NEXT FILE * ERR1 DEC 4 ASC 4,CHECKSUM * * RBOK LDA RBBUF+1 ALF,RAR ROTATE RIC FIELD TO AND B7 LOW A AND ISOLATE CODE. STA RIC SAVE RECORD TYPE JMP RBIN,I * RBTM1 NOP DRB3 DEF RBBUF+3 D60 DEC 60 * * RECORD TYPE DRIVER * RTBL DEF *+1 DEF READB DEF NAM DEF ENXTR DEF READB DEF ENXTR DEF ENDR DEF ENXTR EMA RECORD DEF READB SKP MCNT NOP MODS NOP MODULE NUMBER WITHIN FILE RBCNT NOP RIC NOP TBPSZ NOP TCMSZ NOP TMNSZ NOP * * TEMP NOP OBF1 DEF OBUF+1 OBF5 DEF OBUF+5 OBF7 DEF OBUF+7 MPTBF DEF OBUF+9 OBF13 DEF OBUF+13 EMTBF DEF OBUF+22 ENDLN DEF OBUF+36 LSTPS DEF OBUF+37 RBF3 DEF RBBUF+3 RBF17 DEF RBBUF+17 DER4 DEF ERR4+12 DER5 DEF ERR5+8 DER6 DEF ERR6+8 * * * * * LER4 LDA RBF3 LDB DER4 JSB MVNAM MOVE THE NAME TO THE MESSAGE JSB LIST 'DUP MODULE NAME:' DEF ERR4 ISZ WARN INCREMENT WARNING COUNT DUMMY JSB RBIN CPA D5 JMP READB JMP DUMMY * * * * ERR4 DEC 14 ASC 14, ****DUP MODULE NAME: * * SKP * * SET UP MODULE TABLE ENTRY FROM A NAM RECORD * NAM LDA HADDR CHECK FOR ST-MT OVERFLOW LDB LADDR ADB D7 JSB OVFCH JSB LIST PRINT BLANK LINE DEF SPACE ISZ MODS BUMP MODULE COUNT * JSB BLINE LDB AMDT SZB,RSS EMPTY MODULE LIST? JMP NBEG YES LDA RBF3 NO JSB COMP SZA,RSS JMP LER4 ERROR-DUPL. MODULE NAMES SSA JMP NSRCH NBEG LDA LADDR THIS MODULE GOES AT THE ALPHA. STA B BEGINNING OF THE LIST STA MADDR B, MADDR = ADD OF NEW ENTRY ADA D3 STA LADDR LDA AMDT SUCCESSOR IS PREVIOUS 1ST ENTRY STA LADDR,I STB AMDT JMP MV1 * * SEARCH MODULE TABLE WHERE B IS ADD OF LAST * MODULE ENTRY SEARCHED * NSRCH ADB D3 STB PREVE LDA B,I STA B ADD OF NEXT ENTRY IN B SZB,RSS JMP EOL END OF LIST LDA RBF3 JSB COMP SZA,RSS JMP LER4 DUPL. MODULE NAMES SSA JMP NSRCH * EOL LDA LADDR STA MADDR SET ALPHA. MODULE SUCCESSOR OF STA PREVE,I PREV ENTRY TO PT TO THIS ENTRY ADA D3 STA LADDR STB LADDR,I SET ALPHA. MODULE SUCCESSOR MV1 EQU * LDB MADDR STORE MODULE NAME. LDA RBF3 JSB MVNAM IN TABLE ENTRY ISZ MCNT INCREMENT # MODULES INB CLA INITIALIZE STA B,I POINTERS INB TO 0: STA B,I INB STA B,I LDA D4 ADA LADDR STA LADDR UPDATE LADDR JSB BLINE BLANK OUT BUFFER LDB OBF1 MOVE NAME LDA MADDR OUTPUT JSB MVNAM BUFFER * LDA OBUF+3 IOR B54 INSERT COMMA AFTER NAME STA OBUF+3 * JSB KCVT CONVERT TYPE TO DECIMAL DEF *+2 DEF RBBUF+9 STA OBUF+4 * LDB RBCNT GET RECORD LENGTH CMB,INB MAKE NEGATIVE ADB D17 TEST FOR EXTENDED-NAM SSB,RSS EXTENDED NAM FIELD PRESENT? JMP MV2 NO,CONTINUE CMB,INB STB TEMP1 LDA RBF17 SOURCE ADDRESS LDB OBF7 LOAD DESTINATION ADDRESS JSB .MVW MOVE WORDS DEF TEMP1 NOP MV2 EQU * JSB BFOUT PRINT OUT THE LINE * JSB CNUMD CONVERT MODULE COUNT TO ASCII DEF *+3 DEF MODS DEF OBUF+1 * LDA EMTBF STA CTR SET FOR ENT OUTPUT CCA FOR THE NAM RECORD (THIS STA EFLG INFO IS USED IN ENXTR) LDA OBF13 LDB RBBUF+7 ADB TBPSZ STB TBPSZ LDB RBBUF+7 CONVERT BP LENGTH TO ASCII JSB CONV CONVERT BP LENGTH TO ASCII LDB RBBUF+6 RBL,CLE,ERB ADB TMNSZ STB TMNSZ LDB RBBUF+6 RBL,CLE,ERB CLEAR AIC CODE IN BIT # 15 JSB CONV CONVERT MAIN PROG LENGTH LDB RBBUF+8 ADB TCMSZ STB TCMSZ LDB RBBUF+8 JSB CONV CONVERT COMMON LENGTH JMP READB * OBUFA DEF OBUF * SPACE DEC 1 ASC 1, * CTR NOP B54 OCT 54 * SPC 2 * CHECK FOR SYMBOL TABLE - MODULE TABLE OVERFLOW * OVFCH NOP CMB,INB ADB A HADDR - LADDR SSB,RSS JMP OVFCH,I +: NO OVERFLOW LDB EMTBF CPB CTR ANYTHING LEFT IN BUFFER? RSS JSB BFOUT YES, DUMP IT JSB ERROR 'SYMBOL TABLE-MODULE TABLE OVERFLOW' DEF OVMSG JMP FINIS * OVMSG DEC 19 ASC 19, SYMBOL TABLE-MODULE TABLE OVERFLOW SPC 2 * MOVE SYMBOL NAME TO TABLE ENTRY, OR OUTPUT BUFFER * * ON ENTRY: (A) = SOURCE ADDRESS * (B) = DESTINATION ADDRESS * * 5 CHARS WILL BE MOVED (6TH IS BLANKED) * MVNAM NOP STA TEMP3 LDA A,I STORE: STA B,I CHARACTERS 1 & 2 INB ISZ TEMP3 LDA TEMP3,I STA B,I CHARACTERS 3 & 4 INB ISZ TEMP3 LDA TEMP3,I AND BYTE IOR B40 STA B,I CHARACTER 5 INB JMP MVNAM,I SPC 1 * BLANK OUT PRINT BUFFER,OBUF * BLINE NOP LDA BLANK STA OBUF LDA OBUFA LDB A INB JSB .MVW FILL BUFFER DEF D39 NOP JMP BLINE,I * D39 DEC 39 SPC 2 * * CONVERSION ROUTINE * CONVERT 15-BIT BINARY NUMBER TO 6 CHARACTER * (LEADING BLANK) ASCII FORM OF OCTAL * * ON ENTRY: (B) = BINARY NUMBER TO CONVERT * (A) = ADDRESS TO STORE ASCII * CONV NOP STA TEMP1 SAVE STORAGE ADDRESS RBL POSTION FIRST DIGIT TO BITS 15-13 LDA M3 STA TEMP2 CONVERT COUNTER = -3 LDA B40 MAKE FIRST CHARACTER A SPACE CONV1 ALF,ALF ROTATE CHAR TO UPPER POSITION STA TEMP3 AND SAVE BLF,RBR POSITION NEXT DIGIT TO BITS 2-0 LDA B AND D7 ISOLATE DIGIT IOR B60 MAKE AN ASCII CHAR (60-67) IOR TEMP3 PACK IN UPPER CHARACTER STA TEMP1,I AND STORE IN STORAGE AREA ISZ TEMP1 INCREMENT STORAGE AREA ADDRESS BLF,RBR ROTATE NEXT DIGIT TO LOW BYTE LDA B ISOLATE CHAR AND D7 IN LOW A IOR B60 MAKE AN ASCII CHAR ISZ TEMP2 INCREMENT CONVERT COUNTER JMP CONV1 NOT FINISHED LDA TEMP1 FINISHED.SET (A) =NEST STORAGE JMP CONV,I AREA WORD ADDRESS, AND EXIT * TEMP3 NOP * SPC 2 * * * COMP - DETERMINES ALPHABETIC ORDER OF 2 SYMBOLS * A= ADD OF CURRENT RECORD * B = ADD OF A TABLE ENTRY * RESULTS IN A, WHERE: * (A) LT 0 WHEN (A,I) GT (B,I) * (A) EQ 0 WHEN (A,I) EQ (B,I) * (A) GT 0 WHEN (A,I) LT (B,I) * COMP NOP STA TEMP1 STB TEMP2 LDA M2 STA CNT CMP1 LDA TEMP1,I CMA,INA ADA TEMP2,I SZA JMP COMP,I CHARS 1 & 2 DON'T MATCH ISZ TEMP1 CHARACTERS ISZ TEMP2 MATCH SO FAR ISZ CNT JMP CMP1 LDA TEMP1,I AND BYTE TEST CHAR 5 : CMA,INA STA CNT TEMPORARY SAVE LDA TEMP2,I AND BYTE ADA CNT JMP COMP,I * TEMP1 NOP TEMP2 NOP CNT NOP BYTE OCT 177400 SKP * * FIND OR ADD A SYMBOL TABLE ENTRY FOR AN EXT OR * ENT RECORD * ENXTR EQU * LDA RIC ADA M4 SSA CLA,INA 1 FOR ENT, 2 FOR EMA STA RIC 0 FOR EXT LDB EMTBF CPB CTR EMPTY BUFFER? JMP ENXX YES LDA RIC CPA EFLG NEW RECORD TYPE(FROM LAST RECORD) JMP ENXT1 NO JSB BFOUT YES, DUMP CONTENTS LDB EMTBF RESET BUFFER POINTER STB CTR ENXX EQU * LDA RIC STA EFLG CPA D2 EMA RECORD? JMP EMAX YES, PROCESS SLIGHTLY DIFFERENTLY. SZA JMP ENXT0 LDA EXTH RSS ENXT0 LDA ENTH LDB CTR JSB MVNAM STB CTR ENXT1 LDA RBBUF+1 GET AND ISOLATE RECORD AND B77 ITEM COUNT CMA,INA SET NEGATIVE COUNTER STA RBBUF+1 FOR PROCESSING LDA RBF3 STA EBUFA ENXT2 LDB CTR MOVE NAME TO CPB EMTBF OUTPUT BUFFER RSS JMP ENXT3 LDA RIC SZA JMP ENXT4 LDA EXTH RSS ENXT4 LDA ENTH JSB MVNAM LDA EBUFA ENXT3 JSB MVNAM CPB LSTPS RSS JMP ENXT5 ENTX1 EQU * JSB BFOUT LDB EMTBF ENXT5 STB CTR LDB ASYMT SZB,RSS JMP EBEG EMPTY ST LDA EBUFA COMPARE ENT-NAME AND JSB COMP ST NAME (FIRST ENTRY) SZA,RSS JMP ESTM HAVE FOUND THE MATCHING ST ENTRY SSA,RSS JMP EBEG NEW ENTRY GOES AT BEGINNING OF ST ESRCH ADB D4 SEARCH SYMBOL TABLE STB PREVE SAVE ADD OF PREV ENTRY'S WORD #5 LDA B,I STA B GET NEXT ST ENTRY ADD SZB,RSS JMP ESRC1 END OF ST LDA EBUFA COMPARE SYMBOLS JSB COMP SZA,RSS JMP ESTM HAVE A ST MATCH SSA JMP ESRCH CONTINUE SEARCH ESRC1 JSB GETNT ADD AN ENTRY TO THIS POSITION IN STA PREVE,I THE ST. SET PTR TO IT JMP ESRC2 EBEG JSB GETNT GET SPACE ALLOCATED FOR NEW ENTRY STA ASYMT AT BEGINNING OF ST ESRC2 LDB EFLG ENT OR EXT? SZB,RSS JMP SETMU SET UP MOD-USE LIST ENTRY ADA D6 ENT STA B JMP ELST ENT-JUMP TO MOD-ENT LIST SEARCH * * HAVE A MATCHING SYMBOL TABLE ENTRY * ESTM STB ADDR HAVE A ST MATCH LDA EFLG EXT OR ENT? SZA,RSS JMP EXTPR GOTO EXT RECORD PROCESSOR ADB D6 ENT - DEFINED YET? LDA B,I SZA JMP LER5 YES-DUPL. ENT RECORDS JMP ELST NO-SEARCH THRU MOD-ENT LIST * SKP * * EMA RECORD PROCESSOR * EMAX EQU * LDA EMAH MOVE "EMA=" TO OUTPUT BUFFER LDB CTR JSB MVNAM STB CTR LDA RBBFA GET POINTER TO SYMBOL ADA D3 STA EBUFA LDB CTR JSB MVNAM MOVE EMA SYMBOL NAME TO OUTPUT BUFFER STB CTR LDA RBBUF+1 GET EMA SIZE AND B1777 MASK EMA SIZE STA B LDA CTR JSB CONV CONVERT TO OCTAL STA B MOVE DESTINATION ADDRESS TO (B) LDA BLANK STA B,I STORE TWO BLANKS INB LDA MSGH GET DESTINATION ADDRESS JSB MVNAM MOVE "MSEG=" LDA B LDB RBBUF+6 GET MSEG SIZE JSB CONV CONVERT STA CTR SAVE CCA SET UP SO ENT/EXT PROCESSORS WORK ON STA RBBUF+1 ON ONE SYMBOL ONLY. JMP ENTX1 B1777 OCT 1777 EMAH DEF *+1 ASC 3, EMA= MSGH DEF *+1 ASC 3,MSEG= * * EXT PROCESSING * EXTPR EQU * ADB D5 GET ADDRESS LDB B,I OF MODULE-USE LIST SZB,RSS JMP SETMU EMPTY MODULE-USE LIST LDA B,I M-U NOT EMPTY CPA MADDR SEARCH THRU MOD-USE LIST JMP LER6 MOD ALREADY THERE-DUPL EXT'S IN I SETM0 INB STB PREVE LDB B,I GET ADD. OF NEXT MOD-USE ENTRY SZB,RSS JMP SETM1 NO MORE LDA B,I CPA MADDR MATCH MOD JMP LER6 DUPL, EXT'S JMP SETM0 * SETM1 LDA HADDR ADA M2 LDB LADDR INB JSB OVFCH CHECK FOR ST-MT OVERFLOW LDB HADDR ADD ENTRY AT THIS POSITION IN LIS ADB M1 STB PREVE,I JMP ADDEX SETMU LDA HADDR ADA M2 LDB LADDR INB JSB OVFCH CHECK FOR ST-MT OVERFLOW LDA ADDR EMPTY M-U LIST ADA D5 LDB HADDR ADB M1 STB A,I SET MOD-USE POINTER ADDEX LDA MADDR STA B,I STORE ADD. OF USER MODULE ADA D6 ISZ A,I INCREMENT # OF EXT'S IN MODULE CLA SET NEXT M-U ENTRY PTR. TO 0 STA HADDR,I (SINCE WE ALWAYS ADD THEM AT THE END) ADB M1 END) STB HADDR LDA ADDR GET SPACE FOR EXT ADD STA LADDR,I IN MODULE ENTRY ISZ LADDR UPDATE JMP NXTEN GET NEXT ENTRY IN RECORD * * SEARCH MODULE'S ENT-LIST * ELST LDA MADDR ENT PROCESSING STA B,I SET MODULE-DEFN ADDRESS ADA D4 LDB A,I GET ENT-LIST PTR. SZB,RSS JMP LBEG EMPTY ENT-LIST LDA EBUFA SEARCH THRU JSB COMP ENT-LIST SZA,RSS JMP LER5 DUPLICATE ENT RECORDS -ERROR SSA JMP LSRCH CONTINUE SEARCH LBEG LDA ADDR PLACE ENTRY AT BEG. OF LIST ADA D3 STB A,I PTR. TO SUCCESSOR IN ENT-LIST LDA ADDR LDB MADDR ADB D4 PTR. TO FIRST ENTRY IN STA B,I MODULE'S ENT-LIST JMP NXTEN GET NEXT RECORD ENTRY LSRCH ADB D3 SAVE ADD. CONTAINING ADD. OF STB PREVE NEXT ENT-LIST ENTRY LDA B,I GET NEXT MOD-ENT ENTRY STA B SZB,RSS JMP NXTEA END OF MOD-ENT LIST LDA EBUFA JSB COMP COMPARE SYMBOL NAMES SZA,RSS JMP LER5 ERROR-DUPL ENT'S SSA JMP LSRCH SEARCH NEXT ENTRY * NXTEA LDA ADDR PREV. MOD-ENT LIST ENTRY STA PREVE,I POINTS TO THIS ENTRY ADA D3 STB A,I SET NEXT MOD-ENT ENTRY PTR. NXTEN LDA EBUFA GET OLD RECORD ENTRY ADDRESS ADA D3 ADD 3 FOR NEXT EXT ENTRY ADA EFLG ADD 1 MORE FOR ENT STA EBUFA SET ADD OF NEXT ENTRY ISZ RBBUF+1 INCREMENT ENTRY COUNT JMP ENXT2 MORE TO PROCESS JMP READB FINISHED-GET NEXT RECORD * * PREVE NOP EFLG NOP EBUFA NOP * ENTH DEF *+1 ASC 3, ENT= EXTH DEF *+1 ASC 3, EXT= * * * * DUPLICATE SYMBOL * LER5 EQU * LDA EFLG IS THIS AN CPA D2 EMA RECORD? JMP EXTPR YES, ALLOW DUPLICATES. LDA EBUFA LDB DER5 JSB MVNAM MOVE NAME TO MESSAGE * JSB LIST 'DUP ENT: SKIP IT' DEF ERR5 ISZ WARN INCREMENT WARNING COUNT JMP NXTEN * LER6 LDA EBUFA LDB DER6 JSB MVNAM MOVE NAME TO MESSAGE * JSB LIST 'DUP EXT: SKIP IT' DEF ERR6 ISZ WARN INCREMENT WARNING COUNT JMP NXTEN * ERR5 DEC 14 ASC 14, ****DUP ENT: ,SKIP IT * ERR6 DEC 14 ASC 14, ****DUP EXT: ,SKIP IT SPC 2 * * GET A SYMBOL TABLE ENTRY * GETNT NOP GET SPACE ALLOCATED FOR A NEW SYM STB TEMP LDA HADDR BOL TABLE ENTRY ADA M7 LDB LADDR JSB OVFCH CHECK FOR ST-MT OVERFLOW STA HADDR POINTS TO NEXT FREE SPACE INA STA ADDR PTS. TO BEGINNING OF NEW ENTRY ADA D4 LDB TEMP STB A,I PT. TO NEXT S.T. ENTRY LDB ADDR MOVE NAME TO LDA EBUFA JSB MVNAM ENTRY CLA INITIALIZE: STA B,I MOD-ENT LIST PTR., ADB D2 STA B,I MOD-USE LIST PTR., INB STA B,I AND MOD-DEFN. PTR. TO 0 LDA ADDR JMP GETNT,I * SPC 2 * * END RECORD PROCESSOR * ENDR EQU * LDB EMTBF CPB CTR ANY ENT'S OR EXT'S LEFT IN BUFFER? JMP ENDR0 NO JSB BFOUT YES, PRINT THEM LDB EMTBF STB CTR ENDR0 LDA RBBUF+1 IS A TRANSFER ADDRESS GIVEN? SLA JMP ENDR1 YES LDA EFLG NO-IS THERE A MODULE NAME SSA,RSS LEFT IN OBUF? JMP READB NO JMP ENDR2 YES, PRINT IT * ENDR1 LDA ENDH YES - JSB MVNAM PRINT IT STB A LDB RBBUF+3 RBL,CLE,ERB JSB CONV ENDR2 JSB BFOUT JMP READB * ENDH DEF *+1 ASC 3, END= SPC 2 * BFOUT NOP JSB LIST LIST THE OUTPUT BUFFER DEF OUT JSB BLINE JMP BFOUT,I SKP * * COMPUTE MODULE LEVEL NUMBER * LVLNM NOP LDA HADDR LDB LADDR REP 3 ADB MCNT CMB,INB CHECK TO SEE WHETHER ADB A THERE IS ENOUGH SSB,RSS SPACE AVAILABLE JMP INT0 YES, GO PROCESS LEVELS NOROM JSB ERROR 'NOT ENOUGH SPACE...LEVEL NUMBER' DEF NOTRM JMP LVLNM,I * INT0 LDA LADDR STA VECTR SAVE ADD OF LEVEL VECTOR ISZ LADDR LDB MCNT CMB,INB,SZB,RSS JMP RXEND SKIP REMAINDER OF CROSS REFERENCE LISTING STB TEMP LDB D1000 DEFAULT VALUE FOR HIGHEST LEVEL # INT1 STB LADDR,I AND INITIALIZE ENTIRE VECTOR TO IT ISZ LADDR ISZ TEMP JMP INT1 * LDA AMDT PLACE MODULE ID # (ALPHA ORDER) CLB,INB INT2 STA MADDR INTO MODULE ENTRY WORD 6 ADA D5 STB A,I ADA M2 GET NEXT MODULE ENTRY LDA A,I SZA,RSS JMP INT3 END OF MODULE TABLE INB JMP INT2 * INT3 CLA,INA STA CNT LDA AMDT INT4 CLB STB UFLG W-U FLAG (=0 UNTIL ONE FOUND) STA MADDR ADA D4 LDA A,I GET FIRST ENT ENTRY SZA,RSS JMP INT6 NO ENT'S INT5 STA ADDR ADA D5 LDB A,I GET FIRST W-U ENTRY SZB NONE ISZ UFLG INCREMENT WHEN ONE FOUND ADA M2 GET MODULE'S NEXT ENT LDA A,I SZA JMP INT5 LDA UFLG NO MORE ENTS ANY W-U'S FOUND? SZA JMP INT7 YES INT6 CLA,INA SET MODULE LEVEL = 1 LDB VECTR SINCE NO W-U'S ADB CNT STA B,I INT7 LDA MADDR ADA D3 LDA A,I GET NEXT MODULE ENTRY SZA,RSS JMP INT8 NO MORE ISZ CNT INCREMENT MODULE # (AND OFFSET JMP INT4 IN VECTOR) * INT8 CLA,INA STA LEVEL INITIALIZE LEVEL # STA CNT LDA LADDR STA PRLST LDA AMDT INT9 STA MADDR ADA D6 LDB A,I SZB,RSS JMP INT14 NO EXT'S - GO TO NEXT MODULE CMB STB TEMP1 SAVE NEG # EXTS STA TEMP2 SAVE ADD OF EXT LIST INT10 ISZ TEMP1 RSS JMP INT11 NO MORE EXT'S ISZ TEMP2 LDA TEMP2,I GET ADD OF EXT-ST ENTRY ADA D6 LDA A,I GET ITS DEFN MODULE ADD SZA,RSS JMP INT10 AN UNDEFF GO TO NEXT EXT ADA D2 HAS AN ENTRY ALREADY BEEN LDB A,I MADE IN THE PARLIST FOR SLB THESE 2 MODULES (BIT #1 ON)? JMP INT10 YES, GO TO NEXT EXT ISZ A,I NO SET FLAG IN WORD #3 OF MODULE'S ADA D3 ENTRY LDA A,I PUT MODULE'S # STA LADDR,I IN PARLIST ENTRY LDB LADDR INB CPB HADDR JMP NOROM OVERFLOW LDA CNT STA B,I SECOND WORD INB CPB HADDR JMP NOROM OVERFLOW STB LADDR JMP INT10 * INT11 LDA MADDR CLEAR FLAGS OF THOSE ADA D6 MODULES REFERENCED LDB A,I BY THIS MODULE CMB,INB STB TEMP1 SAVE NEG # EXT'S STA TEMP2 INT12 ISZ TEMP2 LDA TEMP2,I ADA D6 LDB A,I GET DEFN MODULE ADD SZB,RSS JMP INT13 UNDEFINED ADB D2 LDA B,I AND BYTE CLEAR FLAG IN LOW HALF STA B,I OF MODULE ENTRY WORD #3 INT13 ISZ TEMP1 JMP INT12 * INT14 ISZ CNT LDA MADDR ADA D3 LDA A,I SZA JMP INT9 * LDA PRLST CPA LADDR JMP EXIT HAD ONLY ONE MODULE SLCT1 LDA PRLST CLB STB UFLG SLCT2 STA PARNT SAVE ADD OF PARLIST ENTRY INA LDA A,I GET HIGH MODULE # ADA VECTR AND GET IT ITS ENTRY IN VECTR LDB A,I GET HIGH'S LEVEL # CPB LEVEL RSS JMP SLCT3 LDA PARNT,I GET LOW MODULE # ADA VECTR LDB LEVEL INB STB A,I SEj LEVEL # OF LOW TO LEVEL+1 ISZ UFLG SLCT3 LDA PARNT GET NEXT PARLIST ENTRY ADA D2 CPA LADDR RSS JMP SLCT2 LDA UFLG SZA,RSS JMP EXIT LDA LEVEL CPA D1000 JMP EXIT * INA STA LVL1 SET TO LEVEL+1 CLA,INA STA CNT CHK2 LDA VECTR ADA CNT CPA PRLST JMP CHK6 LDB A,I CPB LVL1 JMP CHK3 ISZ CNT JMP CHK2 * CHK3 STA TEMP1 LDA PRLST CHK4 STA PARNT LDA A,I CPA CNT = CURRENT MODULE INDEX? RSS JMP CHK5 NO, GO TO NEXT PAR LIST ENTR, LDA PARNT INA LDA A,I GET HIGH'S LEVEL # ADA VECTR LDA A,I LDB LVL1 CMB,INB ADB A SSB JMP CHK5 NO GET NEXT PARLIST ENTRY LDA D1000 STA TEMP1,I * CHK5 LDA PARNT ADA D2 CPA LADDR RSS JMP CHK4 ISZ CNT JMP CHK2 * CHK6 ISZ LEVEL JMP SLCT1 * EXIT LDA AMDT ISZ VECTR EX1 ADA D5 LDB VECTR,I STB A,I ISZ VECTR LDB VECTR CPB PRLST JMP LVLNM,I ADA M2 LDA A,I JMP EX1 * VECTR NOP PARNT NOP PRLST NOP LEVEL NOP LVL1 NOP NOTRM DEC 21 ASC 21, NOT ENOUGH SPACE TO COMPUTE LEVEL NUMBER * SKP * * MODULE CROSS REFERENCE * MREF NOP CLA STA CFLAG STA BFLAG JSB LIST EJECT PAGE DEF EJECT JSB LIST 'MODULE LEVEL MODULES WHERE USED' DEF HEAD5 JSB LIST '------------------------------------' DEF HEAD3 JSB BLINE BLANK OUT PRINT BUFFER LDA AMDT SZA,RSS JMP MREF,I NO MODULES IN LIST MXRF1 STA MADDR GET MODULE ENTRY & SAVE ADD LDB OBF1 MOVE MODULE JSB MVNAM OUTPUT BUFER STB @ADR LDA MADDR CONVERT LEVEL # TO ASCII ADA D5 LDA A,I STA CTR CPA D1000 STA CFLAG SET THE CIRCULAR REFERENCE FLAG * JSB CNUMD CONVERT LEVEL NUMBER TO DECIMAL DEF *+3 DEF CTR @ADR NOP ADDRESS OF 3-WORD ASCII STORAGE * LDB OBF8 STB CTR CLA STA UFLG LDA MADDR GET ADD OF FIRST ST ENTRY IN ADA D4 MODULES ENT LIST LDB A,I SZB JMP MXRF2 JSB BFOUT EMPTY ENT-LIST, PRINT MODULE NAME, & JMP NXTMD GET NEXT ONE MXRF2 STB ADDR ADB D5 GET ADD OF FIRST ENTRY IN LDA B,I SYMBOL'S W-U LIST SZA,RSS JMP NXTST EMPTY LIST,GO TO NEXT ST ENTRY SRCHW STA WUENT ISZ UFLG LDB A,I GET MODULE ENTRY ADD ADB D2 LDA B,I HAS MODULE NAME BEEN PRINTED? SLA YET? JMP NXTWU YES ISZ B,I SET SO WON'T BE PRINTED AGAIN * LDA WUENT,I CMA,INA ADA MADDR CHECK FOR BACKWARD REFERENCE SSA,RSS JMP OK NO STA BFLAG SET THE BACKWARD REFERENCE FLAG LDA MARK STA CTR,I MARK THE OFFENDING MODULE * OK LDA WUENT,I FOR CURRENT MODULE LDB CTR INB JSB MVNAM STB CTR CPB ENDLN FULL BUFFER? RSS JMP NXTWU JSB BFOUT YES, DUMP IT LDB OBF8 STB CTR NXTWU LDA WUENT INA LDA A,I GET NEXT W-U ENTRY SZA JMP SRCHW CONTINUE NXTST LDA ADDR GET NEXT ST MOD-ENT LIST ENTRY ADA D3 LDB A,I SZB JMP MXRF2 CONTINUE LDA UFLG SZA,RSS JMP NXT0 LDA CTR NO MORE MOD-ENT LIST ENTRIES CPA OBF8 EMPTY OUTPUT BUFFER? RSS NXT0 JSB BFOUT NO, DUMP CONTENTS LDB AMDT NXT ADB D2 LDA B,I CLEAR OUT AND BYTE PRINT FLAGS STA B,I IN MODULE INB ENTRIES LDB B,I SZB JMP NXT NXTMD LDA MADDR GET NEXT MODULE TABLE ENTRY ADA D3 LDA A,I SZA JMP MXRF1 * * * CHECK FOR BACKWARD REFERENCES OR CIRCULAR REFERENCES. * PRINT A WARNING IF ANY WERE FOUND. * LDA CFLAG SZA,RSS JMP BREF? NO CIRCULAR REFERENCES * JSB LIST 'CIRCULAR REFERENCE' DEF CREF ISZ WARN * BREF? LDA BFLAG SZA,RSS JMP MREF,I NO BACKWARD REFERENCES * JSB LIST 'BACKWARD REFERENCE' DEF BREF ISZ WARN JMP MREF,I * * BREF DEC 12 ASC 12, ****BACKWARD REFERENCE * CREF DEC 12 ASC 12, ****CIRCULAR REFERENCE * WUENT NOP UFLG NOP CFLAG NOP BFLAG NOP MARK ASC 1, * OBF8 DEF OBUF+8 * SKP * * BINARY TO ASCII (DECIMAL) CONVERSION * * * D1000 DEC 1000 D1 DEC 1 * SKP * * ENTRY CROSS REFERENCE * XREF NOP JSB LIST EJECT PAGE DEF EJECT CLA STA EFLG DO ENTRY XREF FIRST JSB LIST 'ENTRY DEFN-MOD MODULES WHERE USED' DEF HEAD6 JMP XRF1 * UNRSD STA UFLG INA STA EFLG JSB LIST EJECT PAGE DEF EJECT JSB LIST 'UNRESOLVED EXT MODULES WHERE USED' DEF HEAD7 XRF1 JSB LIST '-------------------------------------' DEF HEAD3 JSB BLINE LDB ASYMT SZB,RSS JMP XREF,I NO ENTRIES IN LIST XRF2 STB ADDR GOT ST ENTRY AND SAVE ADD ADB D6 LDA B,I IS SYMBOL DEFINED? LDB EFLG SZA,RSS JMP UNDCH NO SZB JMP NXTE LDB OBF5 YES-MOVE NAME TO OUTPUT BUFFER JSB MVNAM INB STB CTR XRF3 LDB OBF1 AND MOVE SYMBOL NAME TO OBUF LDA ADDR JSB MVNAM LDA ADDR GET FIRST ENTRY ADA D5 IN SYMBOL'S W-U LIST LDB A,I SZB,RSS JMP NXTE1 EMPTY W-U LIST SCHWU STB MADDR SAVE ENTRY ADDRESS LDA B,I GET ADD OF W-U MODULE LDB CTR MOVE NAME TO JSB MVNAM OBUF CPB ENDLN FULL BUFFER? RSS JMP NXTE0 JSB BFOUT LDB MPTBF NXTE0 STB CTR LDA MADDR INA LDB A,I GET NEXT W-U ENTRY SZB JMP SCHWU AND CONTINUE LDA CTR NO MORE CPA MPTBF EMPTY BUFFER? RSS NXTE1 JSB BFOUT NO NXTE LDA ADDR GET NEXT ST ENTRY ADA D4 LDB A,I SZB JMP XRF2 AND CONTINUE LDA EFLG NO MORE? SZA,RSS ALL DONE? JMP UNRSD NO,DO UNDEFS XREF ISZ UFLG WERE THERE ANY UNRES'D EXTS? RSS JMP XREF,I YES JSB BLINE LDB OBF1 LDA NOENT JSB MVNAM JSB BFOUT PRINT A 0 JMP XREF,I RETURN * UNDCH SZB,RSS ARE WE PROCESSING UNDEFS? JMP NXTE NO LDB MPTBF YES,SET CTR TO APPROPRIATE STB CTR POSITION IN OBUF CCA STA UFLG JMP XRF3 * * NOENT DEF *+1 ASC 3, 0 SPC 2 * EJECT DEC 1 ASC 1,1 PAGE EJECT IF LINE PRINTER SPC 2 SKP * * HEADINGS * OUT DEC 40 MUST PRECEDE OBUF -- OBUF MUST BE 50 WORDS OBUF EQU * LAST 10 WORDS MAY CONTAIN NAM RECORD * COMMENTS WHICH ARE NOT PRINTED. HEAD0 DEC 26 ASC 26, 24999-16051 2024 SOFTWARE SERVICE KIT SYSTEM HEAD1 DEC 26 ASC 26, MODULE MODULE SIZE (OCTAL) * HEAD2 DEC 23 ASC 23, NAME MODULE IDENT. BPAG MAIN COMM * HEAD3 DEC 28 ASC 28, -------------------------------------------------------- * HEAD5 DEC 18 ASC 18, MODULE LEVEL MODULES WHERE USED * HEAD6 DEC 18 ASC 18, ENTRY DEFN-MOD MODULES WHERE USED * HEAD7 DEC 18 ASC 18, UNRESOLVED EXT MODULES WHERE USED * * CONSTANTS * B40 OCT 40 B377 OCT 377 B60 OCT 60 B77 OCT 77 B400 OCT 400 D2 DEC 2 D3 DEC 3 D4 DEC 4 D5 DEC 5 D6 DEC 6 B7 EQU * D7 DEC 7 D17 DEC 17 D40 DEC 40 M1 DEC -1 M2 DEC -2 M3 DEC -3 M4 DEC -4 M7 DEC -7 AMDT NOP ADDRESS OF MODULE TABLE ASYMT NOP ADDRESS OF SYMBOL TABLE CMD1 NOP LENGTH OF CURRENT COMMAND MADDR NOP ADD OF CURRENT MOD TABLE ENTRY ADDR NOP ADD OF CURRENT SYM TABLE ENTRY HADDR NOP LWAM LADDR NOP MODULE TABLE STARTS HERE - FWAM TTYFL DEC -1 TTY FLAG:-1 IF INTERACTIVE INPUT, 0 OTHERWISE. LUTTY NOP LU OF OPERATOR CONSOLE LUIN NOP LU OF OPERATOR CONSOLE + ECHO BIT * SKP * DCBC BSS 144 COMMAND DCB DCBL BSS 144 LIST DCB #DCB BSS 144 BINARY INPUT DCB CMDBF BSS 40 COMMAND INPUT BUFFER END RXREF