.
. 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