/TSS/8 BASIC EDITOR/EXECUTIVE (BASED) VERSION 24 / /REVISION: 25-MAY-71 IDC/GWB/PJK / /COPYRIGHT 1969, 1970, 1971 DIGITAL EQUIPMENT CORP. / MAYNARD, MASSACHUSETTS / /ORIGINALLY WRITTEN BY: / INFORMATION DEVELOPMENT COMPANY / DEDHAM, MASS / /THE TSS/8 BASIC EDITOR IS THE INPUT PROGRAM TO /THE TSS/8 BASIC COMPILER / /THE TSS/8 BASIC EDITOR, UNDER OPERATOR CONTROL, INPUTS BASIC /SOURCE STATEMENTS TO A TEXT FILE, MANIPULATES THE FILE, AND CALLS /THE BASIC COMPILER TO PROCESS THIS FILE OF SOURCE STATEMENTS / /THE BASIC EDITOR ACCEPTS BASIC SOURCE LANGUAGE STATEMENTS AND /EDITOR DIRECTIVES / /A BASIC SOURCE LANGUAGE STATEMENT IS A STRING OF NO MORE THAN /83 CHARACTERS OF THE FORM NTTT... , WHERE N IS A DECIMAL /NUMBER IN THE RANGE 0, ALL DONE TAD K6 CLL TAD BIT8 /TEST FOR OCTAL DIGIT SNL JMP ERR11 /NO--INVALID FILE NAME DCA TEMP1 TAD PROTX SPA /FIRST TIME? CLA /YES RTL CLL RAL TAD TEMP1 /NOW BUILT EXTENSION TAD KM37 /IS IT LEGAL SMA SZA JMP ERR11 /EXTENSION IS OUTSIDE LEGAL RANGE TAD K37 DCA PROTX /SAVE PROTECTION JMP SAV5B SAV5C, INPCH /SCAN OFF REST OF LINE JMP SAV30 /OK--NAME BUILT JMP SAV5C /IGNORE SPACES JMP ERR11 JMP ERR11 JMP ERR11 JMP ERR11 /ALL ELSE IS WRONG /DUPLICATE FILE NAME--CANNOT USE SAVE. SAV25, SEND; DFNM /DUPLICATE FILE NAME EDSTRT /NO FILE WITH THIS NAME--CREATE ONE SAV20, CLA CMA DCA RSSWT /SET SAVE REPLACE SWITCH TAD (FL2NM CRF /CREATE FILE SNA CLA /WAS CREATE OK? JMP SAV30 /RETURN TO OPEN / /FILE NAME ERROR / ERR11, SEND; BFNM /BAD FILE NAME EDITOR / SAVCPY, COPY RSSWT, 0 /SET TO -1 FOR REPLACE KCMP, 0 /COMPILE FLAG--SET TO -1 ON COMPILE COMMAND /REDUCE FILES TO JUST ONE SEGMENT SCRED, 0 TAD AFINF FINF /DON'T NECESSARILY BELIEVE PAGE ZERO CLA CMA TAD FINFBL+6 SPA SNA JMP SCRED1 /FILE IS ALREADY ONE SEGMENT LONG DCA FINFBL+1 TAD AFINF RED SCRED1, CLA TAD FINFBL /NOW CHANGE VALUE IN DCB LOADCB CLA IAC DCA I P0VEC+3 /FILE IS JUST ONE SEGMENT LONG JMP I SCRED PAGE /THIS IS THE SECOND PAGE OF THE EDIT VERB. /ENTRY TO THE FIRST PAGE IS AT "EDIT". EDIT2, DCA EDST JMS EDTYP /OUTPUT LINE # TAD TXBPTR /SAVE POINTER TO JUST AFTER LINE NUMBER DCA TXBLIM EDALT, TAD TXBLIM /RESET TO FRONT OF LINE DCA TXBPTR EDSCN, TAD K53 JMS TYTYP KRB /GET SCAN CHAR AND K177 /MASK OFF POSSIBLE PARITY DCA PROTX /SAVE SCAN CHARACTER TAD K55 JMS TYTYP EDSCN0, TAD TXBPTR /SAVE POSITION OF POINTER DCA EDST TAD TEMP4 /LOAD AC IN CASE RH WORD ISZ TEMP5 /SKIP IF LH CHAR NEXT JMP EDSCN1 /NO--RH CHARACTER CLA CLL CMA RAL /SET TO -2 DCA TEMP5 GETWD PUTWD /STASH CHAR IN OUTPUT BUFFER GETNXI /GET IT FOR REAL THIS TIME SNA /TEST FOR EOL JMP EDEND /YES--ALL DONE DCA TEMP4 /SAVE WORD TAD TEMP4 RTR; RTR; RTR /GET LH CHARACTER EDSCN1, AND K77 TAD KM37 SPA SNA TAD K100 TAD K37 /CONVERT TO REGULAR ASCII CIA TAD PROTX /COMPARE WITH STORED CHARACTER SNA JMP EDFND /HOORAY..I FOUND SOMETHING CIA TAD PROTX /RESTORE CHARACTER JMS EDPUT /STASH CHAR IN BUFFER JMP EDSCN0+2 /CONTINUE LOOP /COMES HERE WHEN A CHARACTER IS FOUND EDFND, TAD PROTX /GET LAST CHARACTER JMS EDPUT /STASH CHAR IN BUFFER JMS EDTYP /TYPE LINE UP TO HERE EDFND1, KRB /GET CHARACTER TO INSERT JMS I (RLCHAR) /SCAN CHAR JMP EDFND1 /BLANK TAPE JMP EDLF /LF-PASS OFF JMP EDCR /CR-END LINE JMP EDSCN0 /FORM FEED GO ON JMP EDSCN /BELL START OVER JMP EDALT /ALTMODE--DELETE LINE TO RIGHT JMP EDFR /RUBOUT LAST CHAR JMP EDFND1 /ILLEGAL CHAR, TRY AGAIN JMS EDPUT /STASH CHAR IN BUFFER JMP EDFND1 /AND CONTINUE EDFR, TAD TXBPTR CIA TAD TXBLIM /TEST FOR GONE TOO FAR SPA CLA CLA CMA /GO AHEAD WITH RESET TAD TXBPTR DCA TXBPTR JMP EDFND1 /RUBOUT DONE /PASS OFF REST OF LINE EDCR, JMS EDSOFF /PASS OFF REST OF LINE JMP EDEND+1 EDLF, DCA PROTX /CLEAR SEARCH CHARACTER TAD (TXBUF+124 /AVOID TYPING REST OF LINE JMP EDSCN0+1 /ALL DONE--FINISH OUT TXBUFF AND RETURN /TO EDITOR TO LET LINE SCAN DO THE REST OF THE WORK. EDEND, JMS EDTYP /TYPE OUT REMAINDER OF LINE TAD TXBPTR DCA TXBLIM TAD RLTATB DCA TXBPTR /RESET POINTER TAD K617 /RESTORE NORMAL BREAK KSB TAD LOW DCA LAST /PUSH LAST TO NEXT VALUE CLA CMA /SET "BACK TO READY" SWITCH JMP I (EDT25X) /EXIT BACK TO EDITOR /THIS SUBROUTINE TYPES OUT CHARACTERS SCANNED OVER EDTYP, 0 TAD TXBPTR CIA TAD EDST SMA JMP EDTX /NOTHING TO TYPE OUT DCA EDST-1 /# OF CHARACTERS TO TYPE JMS I PSTSX 0 /COUNT EDST, 0 /POINTER EDTX, CLA JMP I EDTYP /EXIT /SAVE CHARACTER AND DECTECT BUFFER FULL EDPUT, 0 DCA I TXBPTR /STASH CHAR TAD TXBPTR TAD (-TXBUF-124 SPA CLA /IS THE BUFFER FULL? JMP I EDPUT /ALL IS WELL JMS EDSOFF /RESET DISK FILE POINTERS SEND; RLTL /TYPE LINE TOO LONG TAD K617 /RESET TO NORMAL BREAK KSB EDITOR /EXIT BACK TO EDITOR EDSOFF, 0 /SUBROUTINE PASSES OFF REMAINDER OF LINE GETWD PUTWD GETNXI SZA CLA JMP EDSOFF+1 JMP I EDSOFF /CONVERT DIGIT TO ASCII AND TYPE TYTYP, 0 TAD K260 TLS CLA JMP I TYTYP PAGE /CATALOG(CAT) / /FUNCTION:TO CATALOG A USER FILE / /ENTRY:NO SPECIAL CONDITIONS / /EXIT:NO SPECIAL CONDITIONS / CAT, WRTEOF /WRITE TO EOF SEND; CATHDR /NAME SIZE TAD CATAFN WHO /GET USER ID IN FILE 2 NAME BLOCK IAC DCA I CATV1 /SET CONTROL BLOCK 2 USER NO TO 1 OPEN2 /OPEN USER UFD AS FILE 2 CHKFOP /CHECK OP DCA I CATV1 /RESET FILE 2 USER NUMBER TAD KM3400 /SET UP RFILE CONTROL BLOCK DCA CATWC /UFD IS AT MOST 7 SEGMENTS LONG TAD CATBF /POINT TO BUFFER 1 DCA CATCA TAD CATCB /READ THE UFD RFILE TAD CATERR /IGNORE EOF ERROR CLL RTR SZA CLA TAD CATERR /RESTORE ERROR WORD CHKFOP TAD I CATBAS /GET BASE WORD OF UFD ENTRY CHAIN DCA CATTMP TAD KM200 /AT MOST 128 UFD ENTRIES DCA CATCNT CAT10, CRLF /SEND A CR,LF ISZ CATCNT /PROTECT US FROM BAD DIRECTORIES JMP CAT20 EDSTRT CAT20, TAD CATTMP /GET POINTER TO NEXT ENTRY SNA /END OF LIST? EDSTRT /YES, ALL DONE TAD CATBUF /NO, RELOCATE POINTER DCA CATPTR TAD CATPTR /GET PTR TO WORD AFTER FILE NAME (LINK TO NEXT ENTRY) TAD K3 DCA CATPT2 TAD I CATPT2 /SAVE THAT WORD DCA CATTMP TAD K4040 /STORE END INDICATOR FOR PRINT ROUTINE DCA I CATPT2 TAD K40 DCA SIXBIT /INDICATE TSS8 SIXBIT CODE TO BE PRINTED SEND /PRINT FILE NAME CATPTR, 0 DCA SIXBIT /CLEAR SIXBIT INDICATOR TAD CATTMP /RESTORE WORD AFTER FILE NAME INCASE OF BAD DIRECTORY DCA I CATPT2 ISZ CATPT2 /POINT AT WORD CONTAINING EXTENSION AND PROTECTION TAD I CATPT2 /SAVE THAT WORD DCA PRTS TAD PRTS /GET EXTENSION BITS AND USE THEM TO INDEX AND K7600 / INTO TABLE OF EXTENSIONS CLL RTR RTR RTR DCA TEMP1 TAD TEMP1 /MAKE ALL UNDEFINED EXTENSIONS PRINT AS NULL TAD KM24 SMA CLA DCA TEMP1 TAD TEMP1 TAD KEXTS DCA CATEXT TAD TEMP1 /WAS EXTENSION NULL? SZA CLA TAD KDOT /NO, PRINT PERIOD TAD KBLK /YES, PRINT BLANK JMS I (TYTYP) SEND /PRINT EXTENSION CATEXT, 0 ISZ CATPT2 /POINT AT LENGTH WORD TAD I CATPT2 /GET LENGTH JMS I (CBA) /CONVERT TO ASCII JMS I PSTSX /TYPE FILE SIZE -4 TXBUF-1 TAD K240 TLS TLS /2 SPACES TAD PRTS /GET FILE PROTECTION RTR; RAR AND K3 /FIRST DIGIT SNA TAD KM20 /PRINT ZERO SUPPRESSED JMS I (TYTYP) TAD PRTS AND K7 /GET DIGIT 2 JMS I (TYTYP) JMP CAT10 PRTS=X4 /SAVED PROTECTION WORD KEXTS, EXTENS K4040, 4040 KM200, -200 K7600=KM200 KM3400, -3400 CATBUF, FBUF1 CATBF, FBUF1-1 CATBAS, FBUF1+3 CATPT2, 0 CATCNT, 0 KBLK=KM20 KDOT, ".-" CATCB, .+1 0 /HIGH-ORDER FILE ADDRESS 2 /INTERNAL FILE NO CATWC, -3400 /WORD COUNT CATCA, FBUF1-1 /CURRENT ADDRESS 0 /LOW-ORDER FILE ADDRESS CATERR, 0 /ERROR WORD CATTMP=CATERR CATAFN, FL2NM /ADDRESS OF FILE 2 NAME BLOCK CATV1, FL2CB+1 /ADDRESS OF FILE 2 USER NUMBER /EXIT ROUTINE(BYE) / /FUNCTION: TO DELETE TEMP FILES 0 AND 1 AND EXIT TO TS-8 / /ENTRY: NO SPECIAL CONDITIONS / /EXIT: TO TS-8 MONITOR / BYE, DCA LRST DCA FINFBL /SET FINF BLOCK FILE NO TO ZERO CRLF /OUTPUT A CR,LF JMS I PBYES /DELETE FILE 0 JMS I PBYES /DELETE FILE 1 TAD K7400 CLOS HLT /NO;EXIT TO TS-8 JMP .-1 PBYES, BYES PAGE /INPUT BINARY NUMBER(IBN) / /FUNCTION:TO INPUT AN ASCII DECIMAL STRING AND / CONVERT IT TO ITS BINARY EQUIVALENT / /ENTRY:NO SPECIAL CONDITIONS / /EXIT:BINARY EQUIVALENT IN A-REG / /ERROR EXIT: IF INPUT NUMBER NOT IN RANGE 1-2046 / IBN, 0 CLA TAD ICHCH /PICK UP FIRST DIGIT AND K17 /CONVERT TO BINARY IBN5, DCA IBNBI /INITIALIZE COUNTER IBNBI INPCH /INPUT CHARACTER JMP IBN10 /EOM JMP IBN10 /BLANK JMP IBN10 /COMMA JMP IBN10 /SPECIAL CHARACTER JMP IBN10 /ALPHABETIC AND K17 DCA TEMP1 /SAVE IN TEMP1 TAD IBNBI TAD KM315 SMA CLA /CAN IBNBI BE MULTIPLIED BY 10? JMP IBN30 /ERROR-OVERFLOW TAD IBNBI RTL CLL TAD IBNBI RAL /10*IBNBI TO A-REG TAD TEMP1 /ADD IN NEW DIGIT JMP IBN5 /RETURN FOR NEXT DIGIT IBN10, CLA IAC /END OF SCAN TAD IBNBI /BINARY EQUIVALENT TO A-REG SPA CLA /WAS IN PUT NUMBER 3777 JMP IBN30 /YES,ERROR TAD IBNBI /GET LINE NUMBER SZA /ZERO IS ALSO AN ILLEGAL NUMBER JMP I IBN /NORMAL EXIT IBN30, SEND; LNEM /ILLEGAL LINE NUMBER EDITOR /EXIT TO EDITOR / IBNBI, 0 /BINARY COUNTER KM315, -315 /SCAN LIST AND DELETE(SLD) / /FUNCTION:TO SCAN THE PARAMETER LIST FOLLOWING THE LIST AND / DELETE DIRECTIVES / /ENTRY:NO SPECIAL CONDITIONS / /EXIT:LOW SET TO LOWER PARAMETER(-1 DEFAULT) / HIGH SET TO HIGHER PARAMETER(-1 DEFAULT) / SLD, 0 STA DCA LOW /SET LOW TO -1 STA DCA HIGH /SET HIGH TO -1 TAD ICHCH SNA /IS TERMINATOR EOM? JMP I SLD /YES SLD5, INPCH /NO.INPUT CHARACTER JMP I SLD /EOM JMP SLD5 /BLANK JMP SLD10 /COMMA ERR12 /ERROR-SPECIAL CHAR ERR12 /ERROR-ALPHABETIC INPBIN /NUMERIC.INPUT BINARY NUMBER DCA LOW /STORE IN LOW TAD LOW DCA HIGH /STORE IN HIGH TAD ICHCH SNA /IS TERMINATOR EOM? JMP I SLD /YES SMA /NO.IS IT BLANK OR COMMA? ERR12 /ERROR-ILLEGAL TERMINATOR SLD10, INPCH /INPUT CHARACTER JMP I SLD /EOM JMP SLD10 /BLANK ERR12 /ERROR-COMMA ERR12 /ERROR-SPECIAL CHAR ERR12 /ERROR-ALPHABETIC INPBIN /NUMERIC.INPUT BINARY NUMBER DCA TEMP1 /SAVE IN TEMP1 TAD LOW CIA TAD TEMP1 SPA CLA /IS PARAMETER 2 .LT. LOW? JMP SLD20 /YES TAD TEMP1 /NO DCA HIGH /STORE PARAMETER 2 IN HIGH JMP I SLD SLD20, TAD TEMP1 DCA LOW /STORE PARAMETER 2 IN LOW JMP I SLD /EXIT /UNSAVE(UNS) / /FUNCTION:TO PROCESS THE EDITOR DIRECTIVE 'UNSAVE' / /ENTRY:NO SPECIAL CONDITIONS / /EXIT:NO SPECIAL CONDITIONS / UNS=. / /INPUT UNSAVE FILE NAME TO FILE 2 NAME BLOCK / UNS5, INPCH /INPUT CHARACTER JMP I (ERR11) /EOM-ERROR AT THIS POINT JMP UNS5 /BLANK JMP I (ERR11) /COMMA-ERROR JMP I (ERR11) /SPEC CHAR-ERROR NOP /ALPHABETIC STA /NUMERIC TAD UNSAFN INPFNM /INPUT FILE NAME TO FILE 2 NAME BLOCK JMP I (ERR11) /NO / /OPEN FILE AS NO 2 AND REDUCE SIZE TO ZERO OPEN2 JMP UNS7 /OPEN FAILED; CLEAR AC AND GIVE MSG CLL CLA CML RTL /GET #2 DCA FINFBL /SET FINF BLOCK FILE NO TO 2 JMS BYES /USE SUBROUTINE TO DELETE FILE UNS7, SZA CLA JMP UNS31 /CANT DELETE FILE STA /INDICATE FILE 2 CLOSED DCA DEVSTS TAD ICHCH SNA CLA EDITOR /TERMINATOR WAS EOM JMP UNS5 /GET NEXT FILE NAME UNS31, SEND; UNSM /CAN'T DELETE: JMS TYNAM /TYPE FILE NAME EDITOR /RETURN TO EDITOR /TYPE SIX CHARACTER FILE NAME TYNAM, 0 TAD K40 /SET OUTPUT RTN TO DO TSS8 SIXBIT DCA SIXBIT SEND /PRINT FILE NAME UNSAFN, FL2NM /ADDR OF FILE 2 NAME BLOCK DCA SIXBIT /CLEAR SIXBIT FLAG JMP I TYNAM / /NEW: SET INITLD TO 3 AND RECALL EDITOR / NEW, CLA IAC / /OLD: SET INITLD TO 2 AND RECALL EDITOR / OLD, TAD K2 DCA INITLD /SET TO 2 CRLF /OUTPUT A CR,LF JMP I SYSPRG /RECALL EDITOR / /BYES IS A BYE SERVICE SUBROUTINE / BYES, 0 CLA CMA CLL RAR /GET 3777 DCA FINFBL+1 /STORE IN REDUCE CONTROL BLOCK TAD AFINF RED /DELETE FILE ISZ FINFBL /INCREMENT FILE NUMBER JMP I BYES /AND EXIT PAGE / /SCRATCH DIRECTIVE /CLEAR INPUT BUFFER--LOAD NULL FILE / SCR, REWIND STA CLL RAR DCA I WOFBFA DCA I (FBUF2+1) DCA FINFBL /REDUCE TEMP FILES TO ONE SEGMENT JMS I PSCRED ISZ FINFBL JMS I PSCRED /BOTH FILES ARE NOW ONE SEGMENT LONG CLA IAC /CHANGE SEGMENT SIZE IN PAGE ZERO DCA FISIZE CLA IAC DCA SRSIZE IO12 WRFILE JMP I .+1 EDT5 PSCRED, SCRED /WORD FROM INPUT FILE(WIF) / /FUNCTION:TO GET A WORD FROM THE INPUT FILE / /ENTRY:THERE ARE TWO ENTRIES:WIF AND WIF0 / WIF INCREMENTS THE BUFFER POINTER SO NEXT CALL GETS NEXT WORD / WIF0 DOES NOT INCREMENT POINTER.NEXT CALL GETS SAME WORD / /EXIT:WORD IN A-REG / WIF0, 0 /NO-INCREMENT ENTRY CLA TAD WIF0 DCA WIF /LOAD EXIT ADDRESS STA /-1 TO A-REG JMP WIF5 WIF, 0 /INCREMENT ENTRY CLA /CLEAR A-REG WIF5, DCA WIFSW /STORE A-REG IN SWITCH ISZ BF1PTR /INCREMENT BUFFER POINTER TAD WIFBFA TAD BFSIZE CIA TAD BF1PTR SPA CLA /IS POINTER PAST BUFFER LWA? JMP WIF10 /NO IO11 RDFILE TAD WIFBFA DCA BF1PTR /INITIALIZE BUFFER POINTER BF1PTR WIF10, TAD I BF1PTR /GET WORD FROM INPUT FILE DCA TEMP1 /SAVE IN TEMP1 TAD BF1PTR TAD WIFSW DCA BF1PTR /ADD SWITCH TO POINTER TAD TEMP1 /RESTORE A-REG JMP I WIF /EXIT / WIFBFA, FBUF1 /INPUT BUFFER FWA WIFSW=TEMP3 /WORD TO OUTPUT FILE(WOF) / /FUNCTION:TO STORE A WORD IN THE OUTPUT FILE / /ENTRY:WORD IN A-REG / /EXIT:NO SPECIAL CONDITIONS / WOF, 0 ISZ BF2PTR /INCREMENT BUFFER POINTER ISZ WDCNT /INCREMENT WORD COUNT JMP WOF20 /END OF SEGMENT ? DCA WOFT1 /YES, SAVE INPUT WORD TAD SEGMNT DCA WDCNT /RELOAD WORD COUNT LOADCB /LOAD FILE 0 DCB TRANSFER VECTOR TAD I P0VEC+3 /GET FILE 0 TOTAL SEGMENT COUNT CIA /TAKE NEGATIVE TAD I P0VEC+4 /ADD FILE 0 ACTIVE SEGMENT COUNT SPA CLA /ANY SPACE LEFT IN FILE 0 ? JMP WOF5 /YES TAD WOFCB /NO EXT /EXTEND FILE 0 2 SEGMENTS SPA SNA JMP .+3 CLA TAD K7400 CHKFOP /CHECK OP TAD K2 TAD I P0VEC+3 /UPDATE FILE 0 TOTAL SEGMENT COUNT DCA I P0VEC+3 TAD I P0VEC+3 /RESTORE A-REG DCA FISIZE /UPDATE FISIZE WOF5, ISZ I P0VEC+4 /INCREMENT ACTIVE FILE COUNT TAD WOFBFA TAD BFSIZE /GET BUFFER LWA+1 CIA TAD BF2PTR SPA CLA /IS POINTER PAST BUFFER LWA ? JMP WOF15 /NO IO02 WRFILE /WRITE BUFFER TO OUTPUT FILE TAD WOFBFA DCA BF2PTR /INITIALIZE BUFFER POINTER BF2PTR WOF15, TAD WOFT1 /GET INPUT WORD WOF20, DCA I BF2PTR /STORE IN OUTPUT BUFFER JMP I WOF /EXIT / WOFBFA, FBUF2 /OUTPUT BUFFER FWA WOFCB, COPY /ADDRESS OF EXTEND CONTROL BLOCK WOFT1, 0 /TEMP STORE /WRITE TO END OF FILE(WEF) / /FUNCTION: TO COPY THE REMAINDER OF FILE 1 ONTO FILE 0 WITH AN EOF / /ENTRY: NO SPECIAL CONDITIONS / /EXIT: NO SPECIAL CONDITIONS / WEF, 0 CLA TAD COMP SPA CLA JMP I WEF /THIS IS NULL FOR EXECUTE ONLY FILES STA CLL RAR JMS I WEFCIO /COPY FILE 1 TO EOF STA CLL RAR PUTWD PUTWD /WRITE EOF IN BUFFER IO02 WRFILE /WRITE LAST BUFFER DCA LRST /CLEAR FLAG JMP I WEF / WEFCIO, CIO /COPY INPUT TO OUTPUT /MOVE(MOV) / /FUNCTION:TO MOVE A BLOCK OF DATA IN CORE / /ENTRY:A-REG:NUMBER OF WORDS TO BE MOVED / /EXIT:NO SPECIAL CONDITIONS / /CALLING SEQ:JMS MOV / FROM ADDRESS / TO ADDRESS / MOV, 0 DCA TEMP1 /-COUNT TO TEMP1 TAD I MOV /DECR 1 ;'FROM' ADDRESS DCA X1 /STORE IN INDEX 1 ISZ MOV /INCREMENT CALLING SEQ POINTER TAD I MOV /DECR 1; 'TO' ADDRESS DCA X2 /STORE IN INDEX 2 ISZ MOV /INCREMENT CALLING SEQ POINTER MOV5, TAD I X1 /FETCH WORD DCA I X2 /STORE WORD ISZ TEMP1 /CHECK FINISH JMP MOV5 /LOOP BACK JMP I MOV /EXIT /OUTPUT CARRIAGE RETURN AND LINE FEED (OCR) / /FUNCTION:TO OUTPUT A CR,LF / /ENTRY:NO SPECIAL CONDITIONS / /EXIT:NO SPECIAL CONDITIONS / OCR, 0 JMS I PSTSX -2 CRLFM-1 JMP I OCR PAGE /LOAD FILE DCB(LDC) / /FUNCTION: TO LOAD A TRANSFER VECTOR INTO PAGE 0 TO ACCESS A FILE DCB / /ENTRY: INTERNAL FILE NO IN A-REG / /EXIT: TRANSFER VECTOR IN PAGE 0 STARTING AT P0VEC / LDC, 0 DCA LDCT1 /SAVE A-REG IN LDCT1 TAD LDCVA DCA X1 /INITIALIZE VECTOR POINTER X1 TAD KM5 DCA LDCT2 /INITIALIZE LOOP COUNTER TAD LDCT1 CLL RTL /CLEAR LINK TAD LDCT1 /5*ENTRY TO A-REG TAD LDCDA DCA LDCT1 /INITIAL DCB ADDRESS TO LDCT1 LDC5, TAD LDCT1 /GET NEXT DCB ADDRESS DCA I X1 /STORE IN TRANSFER VECTOR ISZ LDCT1 /INCREMENT DCB ADDRESS ISZ LDCT2 /INCREMENT LOOP COUNTER JMP LDC5 JMP I LDC / LDCDA, FL0DCB /FWA OF DCB BLOCK LDCT1=TEMP1 LDCT2=TEMP2 LDCVA, P0VEC-1 /READ-WRITE FILE(RWF) / /FUNCTION: TO CONTROL FILE IO / /ENTRY: U(A) HOLDS FILE NUMBER / L(A) HOLDS BUFFER NO - 1 / /EXIT: LINK SET ON EOF / RFL, 0 /READ ENTRY DCA TEMP1 /SAVE A-REG IN TEMP1 CLA IAC DCA LRST /SET FLAG STA CLL RAL /LOAD READ OP JMP RWF5 / WFL, 0 /WRITE ENTRY DCA TEMP1 /SAVE A-REG IN TEMP1 TAD WFL DCA RFL /LOAD EXIT ADDRESS RWF5, TAD RWFWI /LOAD WRITE OP DCA RWF25 /STORE OP IN PROGRAM TAD TEMP1 AND K7 /GET BUFFER NO - 1 TAD RWFLI /ADD LOAD OP DCA .+1 /STORE IN PROGRAM TAD RWFBFA /GET BUFFER FWA-1 DCA RWFCB+4 /STORE IN IOCB WORD 4 TAD TEMP1 RTR RTR RTR AND K7 /GET INTERNAL FILE NUMBER DCA RWFCB+2 /STORE IN IOCB WORD 2 TAD RWFCB+2 /RESTORE A-REG LOADCB /LOAD DCB TRANSFER VECTOR TAD I P0VEC+1 /GET HIGH ORDER FILE ADDRESS DCA RWFCB+1 /STORE IN IOCB WORD 1 TAD I P0VEC /GET LOW ORDER FILE ADDRESS DCA RWFCB+5 /STORE IN IOCB WORD 5 TAD I P0VEC+2 /GET CURRENT SEGMENT COUNT CIA /TAKE NEGATIVE TAD I P0VEC+4 /ADD ACTIVE SEGMENT COUNT SZA /END OF FILE ? JMP RWF10 /NO STL /YES. SET LINK AND DCA LRST /CLEAR FLAG JMP I RFL /EXIT / RWF10, CIA DCA RWFT1 /-SEGMENTS RESIDUE TO RWFT1 TAD RWFT1 /RESTORE A-REG TAD SEGSPB /ADD NO OF SEGMENTS PER BUFFER SMA CLA /IS THERE MORE THAN 1 BUFFER LEFT IN FILE ? JMP RWF15 /NO TAD SEGSPB /YES. GET NO SEGMENTS PER BUFFER CIA /TAKE NEGATIVE DCA RWFT1 /STORE IN RWFT1 RWF15, TAD RWFT1 CIA /GET IO SEGMENT COUNT TAD I P0VEC+2 /INCREMENT DCB CURRENT SEGMENT COUNT DCA I P0VEC+2 TAD SEGMNT /GET -(NO. OF WORDS PER SEGMENT) DCA RWFT2 /STORE IN RWFT2 RWF20, TAD RWFT2 /LOOP TO GET IO WORD COUNT ISZ RWFT1 JMP RWF20 DCA RWFCB+3 /STORE -WORD COUNT IN IOCB WORD 3 TAD RWFCB+3 /RESTORE A-REG CIA /GET IO WORD COUNT CLL /CLEAR LINK TAD I P0VEC /INCREMENT DCB LOW ORDER ADDRESS DCA I P0VEC SZL /OVERFLOW ? ISZ I P0VEC+1 /YES.INCREMENT HIGH ORDER ADDRESS TAD RWFCB RWF25, RFILE /INPUT-OUTPUT OPERATION STA CLL RTL /GET ALL BUT BIT 10 OF ERROR WORD AND RWFCB+6 CHKFOP /CHECK FILE OP CLL /CLEAR LINK JMP I RFL /AND EXIT / RWFBFA, FBUF1-1 /FILE BUFFER 1 FWA-1 FBUF2-1 /FILE BUFFER 2 FWA-1 RWFCB, .+1 /IO CONTROL BLOCK 0 /HIGH ORDER FILE ADDRESS 0 /INTERNAL FILE NUMBER 0 /-WORD COUNT 0 /CORE BUFFER FWA-1 0 /LOW ORDER FILE ADDRESS 0 /ERROR WORD RWFLI, TAD RWFBFA /LOAD BUFFER ADDRESS INSTRUCTION RWFT1=TEMP1 RWFT2=TEMP2 RWFWI, WFILE /WRITE FILE IOT /HIGH CORE DATA BLOCKS / FL2CB, 2 /FILE 2 CONTROL BLOCK 0 FL2NM, 0 /FILE 2 NAME BLOCK 0 0 4040 /EOL INDICATOR FOR TYNAM ROUTINE / /FILE COPY BLOCK / 2 COPY, 0 2 1 0 1 / /INTERNAL FILE DEVICE CONTROL BLOCKS(DCB'S) / FL0DCB, 0 /FILE 0: CURRENT LOW ORDER FILE ADDRESS 0 /FILE 0: CURRENT HIGH ORDER FILE ADDRESS 0 /FILE 0: CURRENT SEGMENT COUNT 0 /FILE 0: TOTAL SEGMENT COUNT 0 /FILE 0: ACTIVE SEGMENT COUNT / FL1DCB, 0 /FILE 1: CURRENT LOW ORDER FILE ADDRESS 0 /FILE 1: CURRENT HIGH ORDER FILE ADDRESS 0 /FILE 1: CURRENT SEGMENT COUNT 0 /FILE 1: TOTAL SEGMENT COUNT 0 /FILE 1: ACTIVE SEGMENT COUNT / FL2DCB, 0 /FILE 2: CURRENT LOW ORDER FILE ADDRESS 0 /FILE 2: CURRENT HIGH ORDER FILE ADDRESS 0 /FILE 2: CURRENT SEGMENT COUNT 0 /FILE 2: TOTAL SEGMENT COUNT 0 /FILE 2: ACTIVE SEGMENT COUNT / /EDITOR DIRECTIVE TABLES / EDTTB1=. -"B; -"Y; -"E; BYE /BYE DIRECTIVE -"C; -"A; -"T; CAT /CATALOG DIRECTIVE -"N; -"E; -"W; NEW /NEW PROGRAM DIRECTIVE -"O; -"L; -"D; OLD /OLD PROGRAM DIRECTIVE -"R; -"U; -"N; RUN /RUN DIRECTIVE -"U; -"N; -"S; UNS /UNSAVE FILE DIRECTIVE EXFOK, -"D; -"E; -"L; DEL /DELETE DIRECTIVE -"L; -"I; -"S; LSTX /LIST DIRECTIVE -"L; -"L; -"I; LLST /LLIST DIRECTIVE -"S; -"A; -"V; SAV /SAVE FILE DIRECTIVE -"T; -"A; -"P; TAPIT /TAPE MODE ENTRY -"K; -"E; -"Y; KEYIT /KEY MODE ENTRY -"R; -"E; -"P; REP /REPLACE FILE DIRECTIVE -"S; -"C; -"R; SCR /SCRATCH FILE DIRECTIVE -"C; -"O; -"M; COM /COMPILE DIRECTIVE -"E; -"D; -"I; EDIT /CHARACTER EDIT FUNCTION 0 /ZERO MARKS END OF DIRECTIVE TABLE / / DALTM, "$; " ; "D;"E;"L;"E;"T;"E;"D 215 /TEXT BUFFER CR 212 /TEXT BUFFER LF TXBUF=. *.+124 /TEXT BUFFER 0 /OVERFLOW WORD FOR TEXT BUFFER FBUF1=3777 /FILE BUFFER 1 FBUF2=5777 /FILE BUFFER 2 /FBUF2 CANNOT EXTEND TO 7777 BECAUSE OF ISZ TROUBLES. / /CATALOG ROUTINE NEEDS ENOUGH BUFFER AT FBUF1 TO HOLD AT / LEAST 7 DISK SEGMENTS. CATALOG DOES NOT USE FBUF2 SO THIS / REQUIREMENT MAY BE MET BY KEEPING FBUF1 AND FBUF2 NEXT TO EACH / OTHER. /VARIOUS ERROR MESSAGES BFNM, TEXT /_BAD FILE NAME/ UNSM, TEXT /_CAN'T DELETE: / DFNM, TEXT /_DUPLICATE FILE NAME/ LNEM, TEXT /_ILLEGAL LINE NUMBER/ RLTL, TEXT /_LINE TOO LONG/ EFM, TEXT /_EXECUTE ONLY/ CATHDR, TEXT /__NAME SIZE PROT/ EDEM2, TEXT /_CAN'T FIND LINE/ EXTENS, TEXT / / TEXT /ASC/ TEXT /SAV/ TEXT /BIN/ TEXT /BAS/ TEXT /BAC/ TEXT /FCL/ TEXT /TMP/ TEXT / / TEXT /DAT/ /THIS CANNOT EXTEND PAST FBUF1 ! ! ! ! ! ! IFNZRO FBUF1-.&4000 /THE FOLLOWING IS ONE-TIME INITIALIZATION CODE /WHICH IS LOCATED IN THE INPUT BUFFER. *3777 DATSTR=. CPF /COPY FILE EDT /EDITOR RESTART EDT20A /EDITOR RESTART ENTRY EDT60 /EDITOR ERROR ENTRY FINFBL /FINF BLOCK IBN /INPUT BINARY NUMBER ICH /INPUT CHARACTER IFN /INPUT FILE NAME LDC /LOAD DCB CONTROL BLOCK MOV /MOV PFL /POSITION FILE RFL /READ FILE RLT /READ A LINE OF TEXT RWD /REWIND WEF /WRITE TO END OF FILE WFL /WRITE FILE WIF0 /WORD FROM INPUT-NO INCREMENT WIF /WORD FROM INPUT FILE WOF /WORD TO OUTPUT FILE TEXTO /MESSAGE OUTPUT ROUTINE STSX OP2 OCR PRGNM 1000 200 100 10 2 7400 COPY+3 TXBUF-1 3 -3 -4 -5 7 -53 12 17 32 37 -37 -20 77 177 1100 1300 -12 5 6 -24 40 -143 617 55 53 137 101 201 240 -240 -272 260 3737 3776 7700 -3777 4002 INE -2 DATEND=. FL0CB, 0 /FILE 0 CONTROL BLOCK 0 FL0NM, 4241 /FILE 0 NAME BLOCK 6320 0 FL1CB, 1 /FILE 1 CONTROL BLOCK 0 FL1NM, 4241 /FILE 1 NAME BLOCK 6321 0 INEW, TEXT /_NEW / IPNM, TEXT /PROGRAM NAME--/ CFUM, TEXT / FOR USER / CFNM, TEXT /_CAN'T FIND "/ CLBRM, TEXT / IN SYSTEM LIBRARY/ XURM, TEXT /_IMPROPER ACCOUNT #_/ *4200 /INITIAL ENTRY(INE) / /FUNCTION:TO INITIALIZE THE BASIC SYSTEM / /ENTRY:FROM SYSTEM INTERPRETER / /EXIT:TO EDITOR / INE, DUP TAD AINE SRA /RESET RESTART TO (PROGRAM START) CLA CLL CMA RAL TAD INITLD /FIRST TIME LOAD SMA CLA JMP INE1 /NO ACT RAR CLL SZA /TEST FOR ACCOUNT #1 RAR SZA CLA /TEST FOR ACCOUNT #2 JMP INE0 SEND; XURM /NOT GOOD TO RUN BASIC UNDER ACCOUNTS 1 OR 2 JMP I .+1 SABORT /ABORT RUN INE0, SEND; INEMB1 /NEW OR OLD-- STA /CLEAR ALL DEVICE STATUS BITS DCA DEVSTS TAD BIT2 /CLOSE ANYTHING OPEN ON FILE 2 INE1, TAD K6000 /CLOSE ANYTHING OPEN ON FILES 0 AND 1 CLOS JMS I INEV8 /CONSTRUCT TEMP FILE NAMES JMS I (INES2 /COMPUTE VARIOUS CONSTANTS DCA TAPE /PUT CONSOLE IN NORMAL MODE / /CREATE, OPEN, AND INITIALIZE FILES 0 AND 1 / JMS I INEV1 /CREATE AND OPEN FILE "BAS0'NN'" AS FILE 0 IAC DCA FISIZE /SET FISIZE TO 1 IAC JMS I INEV1 /CREATE AND OPEN FILE "BAS1'NN'" AS FILE 1 IAC DCA SRSIZE /SET SRSIZE TO 1 / /INITIALIZE DEVICES, OUTPUT 'NEW OR OLD' , AND PROCESS RESPONSE / TAD INEKBM KSB /SET KEYBOARD MASK CLA CLL CMA RAL TAD INITLD SMA /NEW OR OLD ? JMP INE7 /YES JMP .+4 INE5, CLA SEND; INEMB1 /NEW OR OLD-- RDTEXT /READ A LINE OF TEXT TAD I TXBPTR AND K177 TAD KMAO CIA INE7, DCA FITYPE /STORE NEW-OLD FLAG TAD FITYPE DCA INITLD /SET INITLD TO FITYPE TAD FITYPE SNA /IS FILE TYPE 'OLD'? JMP INE10 /YES TAD KM1 /NO SNA CLA /IS FILE TYPE 'NEW'? JMP INE10N /YES SEND; EDWHAT /TYPE WHAT JMP INE5 /RETURN TO RESTART KM1, -1 K6000, 6000 / /OUTPUT 'NEW' OR 'OLD' ' PROGRAM NAME ' AND ACCEPT RESPONSE / INE10N, SEND; INEW JMP .+3 INE10, SEND; IOLD SEND; IPNM /TYPE "PROGRAM NAME" RDTEXT /READ A LINE OF TEXT INE20, INPCH /INPUT CHARACTER JMP INE25 /ERROR-EOM JMP INE20 /BLANK JMP INE25 /ERROR-COMMA JMP INE25 /ERROR - SPECIAL CHAR NOP /ALPHABETIC CLA /NUMERIC TAD INEFNM INPFNM /INPUT FILE NAME TO FINAME CLA STL RAR /RETURNS HERE IF BAD FILE NAME; SET FLAG CLL RAL /LINK=1 IFF BAD FILE NAME TAD FITYPE /IS THIS AN "OLD" SNA CLA JMP I (INE40) /YES SNL /NO, IS FILE NAME OK JMP INE75 /YES / /PROGRAM NAME IS IN ERROR - OUTPUT ERROR MESSAGE / INE25, SEND; BFNM /BAD FILE NAME JMP INE5 /AND RESTART INE50S, TAD X1 /IS THIS AN ERROR CALL TAD KEDT SZA CLA JMP I PERROR /YES / /RESTART ENTRY / INE50, CLA CMA DCA I INEV7 /SET EXIT (ABORT) SWITCH DCA SIXBIT /CLEAR SIXBIT FLAG FOR PRINT ROUTINE CLA CLL CMA RAL TAD INITLD SMA CLA //CALLED BY OLD OR NEW? JMP INE /YES;RE-INITIALIZE JMS I INEV6 /INITIALIZE EDITOR TAD COMP SPA CLA /DONT COPY IF EXECUTE ONLY FILE JMP INE75A TAD COPY01 COPYFL /COPY FILE 0 TO FILE 1 / /OUTPUT 'READY' AND EXIT TO EDITOR / INE75, DCA COMP /RESET COMPILE FLAG INE75A, DCA I INEV7 /CLEAR EXIT SWITCH TAD K3737 /CLEAR CHAIN PROG NAME AREA DCA I PPRGNM TAD (CRC /SET ^C RESTART ADDRESS SRA /SET RESTART ADDRESS CLA STL RTR SBC /CLEAR INPUT BUFFER JMP I .+1 EDT5 INEFNM=K17 /ADDRESS OF CURRENT FILE NAME - 1 IFNZRO FINAME-1-17 INEKBM, 0617 /KEYBOARD BREAK MASK KEDT, -EDTX1 INEV1, INES1 /TEMP FILE INITIALIZATION ROUTINE INEV6, INES4 /REINITIALIZE SYSTEM INEV7, XSW /EXIT SWITCH INEV8, INES5 /CONSTRUCT TEMP FILE NAMES KMAO, -117 PERROR, ERROR PAGE /TEMP FILE INITIALIZATION ROUTINE(INES1) / /FUNCTION: CREATE AND OPEN FILES 'BAS0N' AND 'BAS1N' / AS FILES 0 AND 1 (N = CONSOLE NUMBER) / /ENTRY: INTERNAL FILE NO IN A-REG / /EXIT: DCB INITIALIZED / IF FILE 1 A SEGMENT WITH EOF IS WRITTEN / INES1, 0 DCA FINFBL /SET FILE NUMBER IN FINF BLOCK TAD FINFBL /RESTORE A-REG SZA CLA TAD K5 /CHANGE TO FILE 1 TAD INES1N /ADD BIAS DCA TEMP1 /STORE FILE NAME POINTER IN TEMP1 TAD TEMP1 CRF /CREATE FILE CHKFOP /CHECK OP CLA CLL CMA RAL TAD TEMP1 OPEN /OPEN FILE CHKFOP /CHECK OP TAD FINFBL RTL CLL RTL RAL /GET FILE # IN BITS 5-6 TAD PROTMP PROT /SET PROTECTION CLA IAC DCA FINFBL+6/SET SEGMENT COUNT TO 1 JMS INES3 /LOAD DCB PARAMETERS TAD FINFBL SNA CLA /IS THIS FILE 1 ? JMP I INES1 /NO, EXIT REWIND STA CLL RAR /YES DCA I INES1W DCA I INES1X /WRITE EOF IN BUFFER 2 IO12 WRFILE /WRITE A SEGMENT ON FILE 1 JMP I INES1 / INES1N, FL0NM INES1W, FBUF2 INES1X, FBUF2+1 PROTMP, 1617 /PROTECTION BITS FOR TEMP FILES /COMPUTE BUFFER CONSTANTS (INES2) / /FUNCTION: SETS SEGSPB TO 4 / SETS BFSIZE TO 2000 (8) INES2, 0 CLA TAD INESX4 DCA SEGSPB TAD INESXZ DCA BFSIZE JMP I INES2 INESX4, 4 /THERE ARE FOUR 400(8) WORD SEGMENTS PER BUFFER INESXZ, FBUF2-FBUF1 /BUFFER MUST BE 2000(8) WORDS LONG /LOAD DCB PARAMETERS(INES3) / /FUNCTION: TO LOAD FILE PARAMETERS INTO A DCB / /ENTRY: FILE NUMBER IN FINFBL / FILE SEGMENT COUNT IN FINFBL+6 / /EXIT: DCB TOTAL AND ACTIVE SEGMENT COUNT SET TO FINFBL+6 / INES3, 0 TAD FINFBL LOADCB /LOAD DCB TRANSFER VECTOR TAD FINFBL+6/GET SEGMENT COUNT DCA I P0VEC+3 /STORE IN TOTAL SEGMENT COUNT TAD FINFBL+6/RESTORE A-REG DCA I P0VEC+4 /STORE IN DCB ACTIVE SEGMENT COUNT JMP I INES3 /TYPE PROJECT-PROGRAMMER NUMBER AS Z9,Z9. /NUMBER IS IN AC ON ENTRY TYPPN, RTL RTL DCA TEMP1 TAD TEMP1 AND K7 SZA JMS I PTYTYP TAD TEMP1 RTL RAL DCA TEMP1 TAD TEMP1 AND K7 JMS I PTYTYP TAD KM4 JMS I PTYTYP /INSERT A COMMA TAD TEMP1 RTL CML RAL DCA TEMP1 TAD TEMP1 AND K7 SZA JMS I PTYTYP TAD TEMP1 RTL RAL AND K7 JMS I PTYTYP JMP I (INE5) /RETURN TO INIT PTYTYP, TYTYP /CONSTRUCT TEMP FILE NAMES(INES5) / /FUNCTION: TO CONSTRUCT UNIQUE TEMP FILE NAMES FOR EACH CONSOLE / /ENTRY: NO SPECIAL CONDITIONS / /EXIT: NO SPECIAL CONDITIONS / INES5, 0 USE /GET JOB NUMBER CON /GET USER CONSOLE NUMBER DCA TEMP1 /SAVE IN TEMP 1 TAD TEMP1 /RESTORE A-REG RTL RAL AND KHIBYT /GET FIRST # IN BITS 0-5 TAD TEMP1 AND K707 TAD K2020 /CONVERT TO SIXBIT CODE DCA I INES5V /STORE IN FILE 0 NAME BLOCK TAD I INES5V /RESTORE A-REG DCA I INES5W /STORE IN FILE 1 NAME BLOCK JMP I INES5 / K707, 707 K2020, 2020 INES5V, FL0NM+2 /WORD 3 - FILE 0 NAME BLOCK INES5W, FL1NM+2 /WORD 3 - FILE 1 NAME BLOCK IOLD, TEXT /_OLD / INEMB1, TEXT /_NEW OR OLD--/ BFFM, TEXT /_BAD FILE FORMAT/ PAGE / /FILE TYPE IS OLD, OPEN AS FILE 2 AND COPY TO FILE 1 / INE40, DCA I FL2CBX DCA TEMP5 /CLEAR PROJECT NUMBER CLA CMA TAD TXBPTR DCA TXBPTR /SET TO REREAD TERMINATOR INE40A, INPCH JMP INE41 /EOM JMP INE40A /BLANK JMP I PINE25 /COMMA, ERROR JMP INE40B /SPEC CHAR, CHECK JMP I PINE25 /ALPHABETIC CHAR, ERROR JMS INECOV /CONVERT OCTAL TO BINARY DCA I FL2CBX CLA CLL CMA RTL DCA TEMP6 /4 CHAR COUNTER INE40C, INPCH JMP INE41 /EOM JMP INE40D /BLANK ENDS LINE JMP INE40F /COMMA DIVIDES PROJECT PROGRAMMER PAIR JMP I PINE25 /SPEC CHAR-ERROR JMP I PINE25 /ALPHABETIC CHAR - ERROR JMS INECOV /CONVERT OCTAL TO BINARY DCA TEMP1 TAD I FL2CBX /GET VALUE RTL CLL RAL TAD TEMP1 DCA I FL2CBX /NEW VALUE ISZ TEMP6 JMP INE40C /CONTINUE TO FETCH INE40D, INPCH /VERIFY EOM JMP INE41 /EOM JMP INE40D /BLANK JMP I PINE25 /COMMA- ERROR JMP I PINE25 /SPEC CHAR-ERROR JMP I PINE25 /ALPHABETIC CHAR-ERROR JMP I PINE25 /NUMERIC CHAR-ERROR INE40B, TAD (-252 /IS THIS AN ASTERISK "*" SZA CLA JMP I PINE25 /NO-ERROR CLA STL RTL DCA I FL2CBX JMP INE40D /VERIFY END OF LINE INECOV, 0 TAD (-270 CLL TAD K10 /IS IT 260-267? SNL JMP I PINE25 /NO ERROR JMP I INECOV /OK INE41, CLA TAD TEMP5 TAD I FL2CBX DCA I FL2CBX STA CLL RTL MOVE FINAME-1 FL2CBX, FL2NM-1 OPEN2 /OPEN AS FILE 2 JMP INE45 /OPEN FAILED DCA I FL2CBX /CLEAR OWNER CLA STL RTL DCA FINFBL /FILE 2 TAD AFINF FINF /GET FILE 2 INFO JMS I (INES3) /LOAD FILE 2 DCB REWIND IO22 RDFILE DCA COMP /CLEAR FLAG TAD I KFBUF2 SMA SZA CLA JMP INE45Y /NORMAL FILE TYPE TAD K3 TAD I KFBUF2 SNA CLA JMP INE45Z /EXECUTE ONLY FILE SEND; BFFM /BAD FILE FORMAT JMP I PINE5 /TRY AGAIN INE45Z, STA /SET EXECUTE ONLY FLAG DCA COMP STA CLL RAL INE45Y, TAD (COPY+1) COPYFL JMP I (INE75A) KFBUF2, FBUF2 /FIRST WORD IN BUFFER 2 INE45, SEND; CFNM /CANT FIND " JMS I (TYNAM) TAD INQU TLS CLA TAD I FL2CBX SNA JMP I PINE5 TAD KM2 SNA CLA JMP INE41X SEND; CFUM /FOR USER TAD I FL2CBX JMP I (TYPPN) INE41X, SEND; CLBRM /IN SYSTEM LIBRARY JMP I PINE5 INE40F, CLA TAD I FL2CBX RTL CLL RTL RTL AND KHIBYT DCA TEMP5 DCA I FL2CBX JMP INE40C PINE5, INE5 PINE25, INE25 INQU, "" PAGE /REINITIALIZE EDITOR(INES4) / /FUNCTION: TO INITIALIZE EDITOR AFTER A RESTART / /ENTRY: NO SPECIAL CONDITIONS / /EXIT: PAGE 0 CONSTANTS LOADED AND DCB'S INITIALIZED / INES4, 0 TAD INES4V JMS I INES4M /LOAD PAGE ZERO DATSTR-1 PG0DAT-1 TAD I PUFIL0 /WAS FILE 0 USED BY FILE I/O SZA CLA JMP INES40 /YES TAD I PPRGNM /NO, WAS FILE 0 USED BY CHAIN TAD KM3737 SNA CLA JMP INES41 /NO INES40, JMS I PINES5 /YES, REOPEN BAS0NN TAD PFL0CB OPEN CHKFOP DCA I PUFIL0 /CLEAR FILE 0 NAME BLOCK INES41, JMS I INES4A /COMPUTE SEGSPB AND BFSIZE DCA FINFBL /SET FILE NUMBER TO 0 TAD FISIZE /GET FILE 0 SEGMENT COUNT DCA FINFBL+6 /STORE IN FINF BLOCK JMS I INES4B /LOAD FILE 0 DCB IAC DCA FINFBL /SET FILE NUMBER TO 1 TAD SRSIZE /GET FILE 1 SEGMENT COUNT DCA FINFBL+6 /STORE IN FINF BLOCK JMS I INES4B /LOAD FILE 1 DCB JMP I INES4 /EXIT PUFIL0, UFIL0+2 KM3737, -3737 PFL0CB, FL0CB PINES5, INES5 INES4A, INES2 /COMPUTE SEGSPB AND BFSIZE INES4B, INES3 /LOAD FILE DCB INES4V, DATSTR-DATEND /SIZE OF PAGE 0 DATA BLOCK INES4M, MOV /ADDRESS OF MOVER END=. / /PDP8 BASIC ERROR PROGRAM / /THIS PROGRAM IS CALLED BY ANY OTHER ROUTINE. /IT IS PASSED AN ERROR CODE WHICH IS CONVERTED /TO AN ERROR MESSAGE. /ONCE HAVING OUTPUT THE ERROR MESSAGE THE PROGRAM /CALLS THE EDITOR. ALL ERRORS CAUSING THE ERROR /PROGRAM TO BE CALLED ARE FATAL. / / /ERROR: ERROR IS PRESENTED A NUMBER IN LOCATION 10 WHICH / SIGNIFIES THE ERROR TYPE. THE ERROR MESSAGE IS OUTPUT / AND THEN THE EDITOR IS CALLED TO RESTART PROCESSING / OF THE SOURCE FILE. LINE=34 /LINE NUMBER ERROR, TAD ERKSAS /RESET SAS IN CASE IN LPT MODE DCA I PSASOP TAD COMP /CHECK FOR FILE 2 OPEN SPA SNA CLA JMP ERROR2 DCA COMP /RESET FLAG TAD ERED RED /DELETE OUTPUT FILE ON ERROR ERROR2, DCA SIXBIT TAD LINE /STORE LINE DCA XLINE /AND ERROR CODE TAD 10 DCA ERCODE /IN A SAFE PLACE JMS I KINES4 /INIT EDITOR CRLF TAD ERCODE TAD KMLIM /TEST FOR LEGAL CODE SPA CLA JMP ERR2X TAD K3 /FORCE AN ILLEGAL ERROR DCA ERCODE ERR2X, TAD ERCODE TAD KMSGT DCA ERCODE /SAVE POINTER TAD I ERCODE SMA TAD K4000 /ADD IN BIT0 DCA .+2 /SAVE MESSAGE ADDRESS SEND 0 TAD I ERCODE /TEST FOR LINE # WANTED SMA CLA JMP ERR3 /WE DON'T NEED A LINE # SEND; MSG1 /IN LINE CLA IAC DCA TAPE /DUMMY TAPE MODE TAD XLINE JMS I KCBA TAD TXBPTR CIA TAD ERPTR /COMPUTE NUMBER OF DIGITS DCA .+2 JMS I PSTSX 0 ERPTR, TXBUF-1 DCA TAPE /CLEAR TAPE MODE ERR3, CRLF TAD I PPRGNM /DID CHAIN OCCUR TAD KM3737 SNA CLA JMP ERR4X /NO SEND; PRGMSG /PRINT CURRENT PROGRAM NAME SEND; PRGNM CRLF ERR4X, TAD I KABSW /CHECK FOR ABORT SWITCH SZA CLA JMP I KABORT JMP I .+1 INE50 /ENTER EDITOR MAINLINE PSASOP, SASOP ERKSAS, SAS KCBA, CBA KMSGT, MSGTBL KMLIM, -LIM XLINE, 0 ERCODE, 0 K4000, 4000 KINES4, INES4 KABSW, ABSW KABORT, SABORT ERED, .+1 /REDUCE FILE PARAMETERS 2 3777 MSGTBL, ERR0-4000 /SYSTEM I-O ERROR ERR1-4000 /PROGRAM TOO LARGE ERR2-4000 /NO END STATEMENT IN PROGRAM ERR15-4000 /SYSTEM ERROR (DO NOT CHANGE!!) ERR4 /ILLEGAL INSTRUCTION ERR5 /ILLEGAL FORMAT ERR6 /ILLEGAL CONSTANT ERR7 /PROGRAM NOT FOUND ERR8 /ILLEGAL CHARACTER ERR9 /BAD SLEEP ARGUMENT ERR10 /ILLEGAL VARIABLE ERR11L /ILLEGAL LINE NUMBER ERR12L /ARRAY USED WITHOUT DIM STATEMENT ERR13 /ILLEGAL FORMULA ERR14 /DIMENSION TOO LARGE ERR14A /IMPROPER DIM STATEMENT ERR16 /CHANGE ERROR ERR17 /TIMEOUT ERROR ERR18 /CAN'T CREATE FILE ERR19 /CAN'T DELETE FILE ERR20 /STACK OVERFLOW ERR21 /OUT OF DATA ERR22 /BAD FILE NAME ERR23 /UNDEFINED LINE NUMBER ERR24 /ILLEGAL OPERATION ERR25 /SUBSCRIPT ERROR ERR26 /MISUSED CHR$ ERR27 /GOSUB--RETURN ERROR ERR28 /ILLEGAL FOR NESTING ERR29-4000 /DEF STATEMENT MISSING ERR30 /NEXT WITHOUT FOR ERR31-4000 /FOR WITHOUT NEXT ERR32-4000 /DISK FULL ERR33 /MISUSED TAB FUNCTION ERR34 /UNOPEN DISK ERR35 /DEVICE BUSY ERR36 /INVALID RECORD NO. ERR37 /ON INDEX OUT OF RANGE ERR38 /INVALID DEVICE NO. ERR39 /GET EOF ERR40 /GET/PUT ERROR ERR41 /CHAIN TO BAD FILE LIM=.-MSGTBL PRGMSG, TEXT 'PROGRAM IS ' MSG1, TEXT ' LINE ' ERR0, TEXT 'SYSTEM I-O ERROR_' ERR1, TEXT 'PROGRAM TOO LARGE_' ERR2, TEXT 'NO END STATEMENT_' ERR4, TEXT 'ILLEGAL INSTRUCTION IN' ERR5, TEXT 'ILLEGAL FORMAT IN' ERR6, TEXT 'ILLEGAL CONSTANT IN' ERR7, TEXT 'PROGRAM NOT FOUND AT' ERR8, TEXT 'ILLEGAL CHARACTER IN' ERR9, TEXT 'BAD SLEEP ARGUMENT IN' ERR10, TEXT 'ILLEGAL VARIABLE IN' ERR11L, TEXT 'ILLEGAL LINE NUMBER IN' ERR12L, TEXT 'ARRAY OR RECORD USED BEFORE DEFINITION IN' ERR13, TEXT 'ILLEGAL SYNTAX IN' ERR14, TEXT 'DIMENSION TOO LARGE IN' ERR14A, TEXT 'IMPROPER DIM OR RECORD STATEMENT IN' ERR18, TEXT /CAN'T CREATE FILE IN/ ERR19, TEXT /CAN'T DELETE FILE IN/ ERR20, TEXT 'STACK OVERFLOW IN' ERR21, TEXT 'OUT OF DATA IN' ERR22, TEXT 'BAD FILE NAME IN' ERR23, TEXT 'UNDEFINED LINE NUMBER, ' ERR24, TEXT 'ILLEGAL OPERATION IN' ERR15=ERR24 ERR25, TEXT 'SUBSCRIPT ERROR IN' ERR27, TEXT 'GOSUB--RETURN ERROR IN' ERR28, TEXT 'ILLEGAL FOR NESTING IN' ERR29, TEXT 'DEF STATEMENT MISSING_' ERR30, TEXT 'NEXT WITHOUT FOR IN' ERR31, TEXT 'FOR WITHOUT NEXT_' ERR32, TEXT 'DISK FULL_' ERR33, TEXT 'MISUSED TAB IN' ERR26, TEXT 'MISUSE OF CHR$ IN' ERR16, TEXT 'BAD VALUE IN CHANGE STATEMENT AT' ERR17, TEXT 'TIME LIMIT EXCEEDED AT' ERR34, TEXT 'UNOPEN DISK UNIT IN' ERR35, TEXT 'DEVICE BUSY IN' ERR36, TEXT 'INVALID RECORD NO. IN' ERR37, TEXT 'ON INDEX OUT OF RANGE IN' ERR38, TEXT 'INVALID DEVICE NO. IN' ERR39, TEXT 'GET BEYOND END OF FILE IN' ERR40, TEXT 'GET/PUT ERROR IN' ERR41, TEXT 'CHAIN TO BAD FILE AT' TOPOFCORE=. $