. . STATUS EDITING SUBROUTINES . . . (C) Copyright 1972-1978 John Walker . . This software is in the public domain . AXR$ DEFUNCT$ FANG PURE CODE . . EDIT I/O STATUS . . LA,U A0,<PACKET> . LMJ X11,IOSEDT . <RETURN> . IOSEDT* SX X11,R4 SAVE RETURN POINT SA A0,R3 SAVE PACKET ADDRESS R$DIT . ENTER EDIT MODE LA A0,R3 RELOAD PACKET ADDRESS LA A0,IOSTATUS,A0 LOAD ACTUAL STATUS LA,H2 A0,IOST,A0 LOAD POINTER TO ASSOCIATED MESSAGE JNZ A0,HAVMSG EDIT MESSAGE IF ONE EXISTS E$MSG IOSEM EDIT FIRST PART OF MESSAGE LA A0,R3 LOAD PACKET ADDRESS E$OCTV IOSTATUS,A0 EDIT STATUS E$MSGR . COPY SOME MORE MESSAGE FILLIN LMJ X6,FDTEDT EDIT FILE NAME FILLIX E$MSGR . COPY SOME MORE MESSAGE FILLIY LX X5,CDIMG,X8 GET IMAGE ADDRESS LMJ X6,ESNV EDIT STATEMENT NUMBER R$PRTX 1 PRINT THE MESSAGE LX X11,R4 RELOAD RETURN POINT LA A0,R3 RESTORE PACKET ADDRESS J 0,X11 RETURN . HAVMSG E$MSG . EDIT THE DESCRIPTION E$MSG OFFILE START EDITING CANNED PORTION J FILLIN FILL IN FILE NAME AND STATEMENT NUMBER . . BSP ERROR MESSAGE EDITOR . . ENTER WITH A0, A1 EQUAL TO VALUES RETURNED BY BSP . WHEN BSP TAKES THE ERROR EXIT. . . la,u a2,<BSP FCT address> . LMJ X11,BSPERP . <RETURN> . bsperp* sa a2,a1 save the FCT address DS A0,R2 SAVE INPUT ERROR CODES DL A2,,A1 LOAD FILE NAME FROM FTI PACKET LA,H2 A0,FDCHAIN GET HEAD OF FDT LIST BSRNF DTE A2,FDIN,A0 IS THIS THE FDT FOR THIS FILE ? J BSRNT NO. KEEP ON LOOKING SA A0,IOFDT,A1 CLOBBER FTI (NO GOOD ANYWAY) TP R2 WAS THE BSP ERROR AN I/O ERROR ? J BSPIOR YES. EDIT I/O STATUS INSTEAD SX X11,R4 SAVE THE RETURN POINT R$DIT . NO. SET UP EDITOR LA A0,R2 LOAD THE STATUS RETURNED LA,H1 A0,IOST,A0 LOAD THE BSP ERROR MESSAGE JNZ A0,HAVMSG EDIT MESSAGE IF WE HAVE ONE E$MSG UNKBSM OTHERWISE, COPY NUMERIC MESSAGE E$OCTV R2 EDIT IN THE STATUS... E$MSGR . COPY THE REST... J FILLIN ...FILL IN REST OF MESSAGE . BSRNT LA A0,FDLINK,A0 LINK TO NEXT FDT ON DEBUG TNZ A0 END OF FDT CHAIN ? IERR . YES. COULDN'T FIND FILE NAME IN A2, A3 OFF DEBUG J BSRNF CHECK THE NEW FDT . BSPIOR SA A0,IOFDT,A1 CLOBBER FTI (DONE WITH IT ANYWAY) SR R2,IOSTATUS,A1 PUT STATUS IN PACKET LA,U A0,,A1 LOAD THE PACKET ADDRESS J IOSEDT EDIT AS I/O ERROR . . EDIT FDT NAME . FDTEDT LA A0,R3 LOAD ADDRESS OF I/O PACKET LX X5,IOFDT,A0 LOAD ADDRESS OF FDT EFILE* . FDTED1 DL A0,FDIN,X5 LOAD INTERNAL NAME DTE A0,FDFN,X5 PLAYING GAMES ? J EDFUL NO. EDIT FULL NAME E$FD2 FDIN,X5 EDIT JUST INTERNAL NAME J 0,X6 RETURN EDFUL E$FD2 FDQUAL,X5 EDIT QUALIFIER E$CHAR '*' EDIT A STAR E$FD2 FDFN,X5 EDIT FILE NAME TNZ FDFC,X5 ANY F-CYCLE ? J 0,X6 NO. RETURN E$CHAR '(' EDIT LEFT PARENTHESIS LA,U A0,'+' LOAD UP A PLUS SIGN TN FDFC,X5 NEGATIVE RELATIVE F-CYCLE ? E$CHAR . NO. EDIT A PLUS SIGN E$DECV FDFC,X5 EDIT THE NUMBER E$CHAR ')' EDIT RIGHT PARENTHESIS J 0,X6 RETURN . . APPEND 'FILE X*Y(Z) IN STATEMENT A.B' TO MESSAGE & PRINT . . LA,U A0,<FDT> . LMJ X11,FIST . <RETURN> . FIST* SA A0,R3 SAVE FDT ADDRESS SX X11,R4 SAVE RETURN POINT LX,U X5,,A0 COPY FDT ADDRESS TO X5 E$MSG OFFILE START EDITING THE MESSAGE LMJ X6,FDTED1 EDIT THE FDT FROM X5 POINTER J FILLIX PROCESS REST AS IOSEDT . . APPEND STATEMENT NUMBER TO MESSAGE AND PRINT . IST* SA A0,R3 SAVE A0 SX X11,R4 SAVE RETURN POINT E$MSG INSTN COPY THE 'IN STATEMENT ' J FILLIY ENTER EDITOR . . EDIT STATEMENT NUMBER 4.7(2,4,3) . . LX,U X5,<IMAGE BUFFER> . LMJ X6,ESN . <RETURN> . ESN* JDEM DESM DEMAND MODE ? E$DECF 6,IMLN,X5 NO. ALLOW 6 CHARACTERS FOR NUMBER ESN0 E$CHAR '.' EDIT A DECIMAL POINT TNZ IMRN,X5 IS THERE A SUBSTATEMENT NUMBER ? J ESN1 NO. DON'T EDIT ONE E$DECV IMRN,X5 EDIT THE SUBSTATEMENT NUMBER ESN1 TNZ IMNS,X5 ANY SUBSCRIPTS TO EDIT ? J ESN2 NO. SKIP THIS CODE E$CHAR '(' EDIT LEFT PARENTHESIS LA,U A5 CLEAR SUBSCRIPT NUMBER ESN3 LA A0,A5 LOAD SUBSCRIPT NUMBER AA,U A0,X5 POINT TO BUFFER E$DECV IMSS,A0,H2 LOAD SUBSCRIPT INDEX AA,U A5,1 BUMP SUBSCRIPT BEING EDITED TNE A5,IMNS,X5 EDIT ALL OF THEM YET ? J ESN4 YES. EDIT FINAL PARENTHESIS E$CHAR ',' EDIT SEPARATOR J ESN3 CONTINUE EDITING ESN4 E$CHAR ')' EDIT CLOSING PARENTHESIS ESN2 J 0,X6 RETURN . DESM E$DECF 3,IMLN,X5 EDIT DEMAND NUMBER TNZ IMRN,X5 ANY SUBSTATEMENT ? J ESN1 NO. SKIP DECIMAL EDITING J ESN0 YES. EDIT IT . . LEFT JUSTIFIED STATEMENT NUMBER EDIT ENTRY . ESNV* E$DECV IMLN,X5 EDIT LINE NUMBER J ESN0 EDIT REST OF IT . . EDIT COMMAND EXECUTION STATUS . CMDST* P CMDLOCK SET THE COMMAND LOCK R$DIT . SET UP THE EDITOR LA,U A14,120 LOAD BATCH LINE LENGTH TZ DEMAND DEMAND MODE ? LA,U A14,60 YES. LOAD DEMAND LINE LENGTH LA,U A13 CLEAR ANY STATEMENTS FOUND LA A3,INPROCQ+QFL LOAD POINTER TO FIRST PACKET TNE,U A3,INPROCQ ANY IN PROGRESS COMMANDS ? J NOINP NO. LOOK FOR QUEUED STATEMENTS LA A12,A3 SAVE COMMAND POINTER E$FD4 ('IN PROGRESS:') EDIT HEADER E$SKIP 1 SKIP A SPACE LA,U A13,1 SET STATEMENTS FOUND ENSND LA A3,A12 GET PACKET ADDRESS LX X5,CDIMG,A3 LOAD IMAGE BUFFER ADDRESS LMJ X6,ESNV EDIT STATEMENT NUMBER E$SKIP -1 BACK UP A CHARACTER U$CHAR . GET LAST CHARACTER TNE,U A0,'.' WAS IT A PERIOD ? LMJ X6,OBLITER8 YES. MAKE IT GO AWAY LA A3,A12 RESTORE COMMAND POINTER LA A3,QFL,A3 LINK TO NEXT IN PROGRESS COMMAND SA A3,A12 SAVE COMMAND POINTER TNE,U A3,INPROCQ LAST COMMAND ? J INPEND YES. PRINT ACCUMULATED STUFF E$CHAR ',' EDIT A COMMA E$SKIP 1 SKIP A SPACE E$COLN . GET COLUMN POSITION TLE A0,A14 OFF END OF PAGE ? J ENSND NO. KEEP ON EDITING R$PRT 1 YES. PRINT THIS LINE E$SKIP 13 TAB TO STARTING COLUMN J ENSND START EDITING ON NEW LINE INPEND R$PRT 1 THEN PRINT LAST LINE NOINP LA A3,CMDQUE+QFL GET FIRST WAITING COMMAND TNE,U A3,CMDQUE ANY WAITING ? J NOQC NO. WIND UP LA A12,A3 SAVE COMMAND ADDRESS E$FD4 ('WAITING: ') LA,U A13,1 SET SOMETHING FOUND ENQC LA A3,A12 LOAD COMMAND BUFFER ADDRESS LX X5,CDIMG,A3 LOAD IMAGE BUFFER ADDRESS LMJ X6,ESNV EDIT STATEMENT NUMBER E$SKIP -1 BACK UP ONE CHARACTER U$CHAR . LOAD THE LAST CHARACTER EDITED TNE,U A0,'.' WAS IT A PERIOD ? LMJ X6,OBLITER8 YES. REMOVE IT LA A3,A12 RESTORE PACKET POINTER LA A3,QFL,A3 LINK TO NEXT COMMAND SA A3,A12 SAVE IN NON-VOLATILE REGISTER TNE,U A3,CMDQUE END OF WAITING QUEUE ? J WCEND YES. FINISH UP E$CHAR ',' EDIT A COMMA E$SKIP 1 SKIP A SPACE E$COLN . GET COLUMN NUMBER TLE A0,A14 END OF LINE ? J ENQC NO. EDIT NEXT NUMBER R$PRT 1 PRINT THE LINE E$SKIP 9 TAB TO START COLUMN J ENQC KEEP ON EDITING . WCEND R$PRTX 1 PRINT AND TERMINATE WCEN1 V CMDLOCK UNLOCK COMMAND QUEUES J ICOUT FINISH COMMAND . NOQC JZ A13,NOATL ANY COMMANDS FOUND ? R$DITX . YES. TERMINATE EDITOR J WCEN1 TERMINATE AND RETURN . NOATL E$MSG NOMEM EDIT NO COMMANDS ACTIVE MESSAGE J WCEND RETURN . OBLITER8 E$SKIP -1 BACK UP TO PERIOD E$CHAR ' ' BLANK IT OUT E$SKIP -1 BACK UP TO THE SPACE J 0,X6 RETURN . PURE DATA NOMEM 'NO COMMANDS IN PROGRESS OR WAITING.!' CHAR '%',072 IOSEM 'I/O STATUS ! ENCOUNTERED ON FILE ! IN STATEMENT !' IOS(0) 'END OF FILE NOT FOUND WHEN EXPECTED IN !' IOS(1) 'END OF FILE ENCOUNTERED IN READ OR SEARCH OF !' IOS(2) 'PHYSICAL END OF TAPE ENCOUNTERED ON !' IOS(3) 'NO FIND ON SEARCH OF !' IOS(4) 'ABNORMAL FRAME COUNT IN !' IOS(5) 'ATTEMPT TO READ AN UNASSIGNED AREA OF !' IOS(7) 'ABSR$/ABSW$ HARDWARE TIMEOUT ON !' IOS(010) 'TIMEOUT TRYING TO REFERENCE LOCKED AREA OF !' IOS(011) '%G% RESPONSE TO ERROR IN !' IOS(012) 'LOSS OF POSITION ON !' IOS(013) 'DEVICE DECLARED DOWN WHICH CONTAINS !' IOS(020) 'READING/WRITING INHIBITED FOR OPERATION ON !' IOS(021) 'UNASSIGNED !' IOS(022) 'ATTEMPT TO READ OR WRITE BEYOND END OF !' IOS(023) 'I/O PACKET OUT OF RANGE: !' IOS(024) 'FUNCTION CANNOT BE PERFORMED ON !' IOS(025) 'BUFFER OUT OF RANGE FOR !' IOS(026) 'INTERRUPT ROUTINE START OUT OF RANGE FOR !' IOS(027) 'I/O ALREADY ACTIVE ON PACKET USED FOR !' IOS(030) 'BAD INTERRUPT ID FOR !' . BSX(2) 'THIS FILE MAY NOT BE USED AS A PROGRAM FILE: !' BSX(012) 'FILE TABLE INDEX NOT IN CORE FOR !' BSX(022) 'REQUIRED TABLE NOT IN CORE FOR !' BSX(024) 'BSP BUFFER TOO SMALL FOR !' BSX(042) 'ALL PROGRAM FILE TABLES NOT REWRITTEN TO !' BSX(044) 'TABLE OF CONTENTS OVERFLOWED IN !' . OFFILE 'FILE ! IN STATEMENT !' UNKBSM 'BSP ERROR STATUS ! ON FILE ! IN STATEMENT !' INSTN 'IN STATEMENT !' IOST . I DO 045 , * BSX(I-1),IOS(I-1) STATUS MESSAGE TABLE END