Trailing-Edge
-
PDP-10 Archives
-
BB-L014E-BM
-
autopatch/algots.c05
There are 15 other files named algots.c05 in the archive. Click here to see a list.
REP 3/1 ;05C1
;COPYRIGHT (C) 1975,1981,1982 BY
WIT
;COPYRIGHT (C) 1975,1982,1983 BY
REP 20/2 ;05C2
IFN FTGETCHK,<PRINTX HEAP INTEGRITY CHECKER LOADED>>
WIT
IFN FTGETCHK,<PRINTX Heap integrity checker loaded>>
REP 34/11 ;05C3
POPJ SP,0
WIT
POPJ SP,
DEL 5/21 ;05C4
EDIT(100); Chain DL for debugger
REP 26/26 ;05C5
POPJ SP,0
WIT
POPJ SP,
REP 32/26 ;05C6
POPJ SP,0
WIT
POPJ SP,
REP 17/27 ;05C7
POPJ SP,0
WIT
POPJ SP,
REP 23/27 ;05C8
POPJ SP,0
WIT
POPJ SP,
REP 17/28 ;05C9
POPJ SP,0
WIT
POPJ SP,
REP 23/28 ;05C10
POPJ SP,0
WIT
POPJ SP,
REP 17/29 ;05C11
POPJ SP,0
WIT
POPJ SP,
REP 23/29 ;05C12
POPJ SP,0
WIT
POPJ SP,
REP 44/29 ;05C13
POPJ SP,0
WIT
POPJ SP,
REP 5/30 ;05C14
POPJ SP,0
WIT
POPJ SP,
REP 26/30 ;05C15
POPJ SP,0
WIT
POPJ SP,
REP 33/30 ;05C16
POPJ SP,0
WIT
POPJ SP,
REP 27/31 ;05C17
POPJ SP,0
WIT
POPJ SP,
REP 31/31 ;05C18
POPJ SP,0
WIT
POPJ SP,
REP 31/35 ;05C19
POPJ SP,0
WIT
POPJ SP,
REP 16/38 ;05C20
POPJ SP,0
WIT
POPJ SP,
REP 22/38 ;05C21
POPJ SP,0
WIT
POPJ SP,
REP 40/38 ;05C22
POPJ SP,0
WIT
POPJ SP,
REP 8/39 ;05C23
POPJ SP,0
WIT
POPJ SP,
REP 18/39 ;05C24
POPJ SP,0
WIT
POPJ SP,
REP 25/39 ;05C25
POPJ SP,0
WIT
POPJ SP,
REP 37/39 ;05C26
POPJ SP,0
WIT
POPJ SP,
REP 48/39 ;05C27
POPJ SP,0
WIT
POPJ SP,
REP 9/40 ;05C28
POPJ SP,0
WIT
POPJ SP,
REP 16/40 ;05C29
POPJ SP,0
WIT
POPJ SP,
REP 26/40 ;05C30
POPJ SP,0
WIT
POPJ SP,
REP 37/40 ;05C31
POPJ SP,0
WIT
POPJ SP,
REP 49/40 ;05C32
POPJ SP,0
WIT
POPJ SP,
REP 58/40 ;05C33
POPJ SP,0
WIT
POPJ SP,
REP 11/41 ;05C34
POPJ SP,0
WIT
POPJ SP,
REP 18/41 ;05C35
POPJ SP,0
WIT
POPJ SP,
REP 22/43 ;05C36
POPJ SP,0
WIT
POPJ SP,
REP 23/44 ;05C37
POPJ SP,0
WIT
POPJ SP,
REP 43/44 ;05C38
POPJ SP,0
WIT
POPJ SP,
REP 19/46 ;05C39
POPJ SP,0
WIT
POPJ SP,
REP 42/54 ;05C40
POPJ SP,0 ; [E053] AND RETURN
WIT
POPJ SP, ; [E053] AND RETURN
REP 16/56 ;05C41
POPJ SP,0
WIT
POPJ SP,
REP 9/57 ;05C42
POPJ SP,0
WIT
POPJ SP,
REP 20/57 ;05C43
POPJ SP,0
WIT
POPJ SP,
REP 31/57 ;05C44
POPJ SP,0
WIT
POPJ SP,
REP 10/58 ;05C45
POPJ SP,0
WIT
POPJ SP,
REP 21/58 ;05C46
POPJ SP,0
WIT
POPJ SP,
REP 32/58 ;05C47
POPJ SP,0
WIT
POPJ SP,
REP 10/59 ;05C48
POPJ SP,0
WIT
POPJ SP,
REP 20/59 ;05C49
POPJ SP,0
WIT
POPJ SP,
REP 17/62 ;05C50
POPJ SP,0
WIT
POPJ SP,
REP 12/63 ;05C51
POPJ SP,0
WIT
POPJ SP,
REP 21/63 ;05C52
POPJ SP,0
WIT
POPJ SP,
REP 30/63 ;05C53
POPJ SP,0
WIT
POPJ SP,
REP 39/63 ;05C54
POPJ SP,0
WIT
POPJ SP,
REP 48/63 ;05C55
POPJ SP,0
WIT
POPJ SP,
REP 8/64 ;05C56
POPJ SP,0
WIT
POPJ SP,
REP 17/64 ;05C57
POPJ SP,0
WIT
POPJ SP,
REP 40/64 ;05C58
POPJ SP,0 ; NO
WIT
POPJ SP, ; NO
REP 44/64 ;05C59
POPJ SP,0 ; IF REQUIRED
WIT
POPJ SP, ; IF REQUIRED
REP 23/65 ;05C60
POPJ SP,0
WIT
POPJ SP,
REP 27/65 ;05C61
POPJ SP,0
WIT
POPJ SP,
REP 10/66 ;05C62
POPJ SP,0
WIT
POPJ SP,
REP 15/66 ;05C63
POPJ SP,0
WIT
POPJ SP,
REP 26/66 ;05C64
POPJ SP,0
WIT
POPJ SP,
REP 31/66 ;05C65
POPJ SP,0
WIT
POPJ SP,
REP 15/72 ;05C66
MOVEI A0,0 ; SET A0 FOR GETOWN
BLKE1: POP SP,A1 ; UNSTACK
JUMPL A1,BLKE2 ; BLOCK POINTER?
TLZE A1,(<Z 17,0>) ; [E057] IS THIS A STRING ARRAY ?
PUSHJ SP,DELSCN ; [E057] YES - DELETE SUB-STRINGS
MOVEI A1,@A1 ; GETSTRING ITSELF, IF STRING VARIABLE.
JUMPE A1,BLKE1 ; IF NO STRING ASSIGNED, DON'T DELETE.
PUSHJ SP,GETOWN ; NO - DELETE ITEM
JRST BLKE1
WIT
MOVE A2,[-20,,%IODR+20] ; [316] AOBJN PTR. TO SCAN LOGICAL I/O TABLE
ADDI A2,(DB) ; [316] RELOCATE
SETZM A01TMP(DB) ; [316] CLEAR "LOGICAL CHANNELS IN USE" FLAG
BLKELP: SKIPN A3,(A2) ; [316] IS THIS LOGICAL CHANNEL IN USE?
JRST BLKE1A ; [316] NO, SKIP TO NEXT ENTRY
HRRZ A3,1(A3) ; [316] YES, LOAD CURRENT ADDR. OF I/O STRING
MOVEM A3,%DDTCB-%IODR-20(A2) ; [316] PUT ADDR. INTO TABLE FOR LATER
SETOM A01TMP(DB) ; [316] SET FLAG TO SAY WE FOUND A CHANNEL
TRNA ; [316] AND SKIP THE NEXT SETZM
BLKE1A: SETZM %DDTCB-%IODR-20(A2) ; [316] UNASSIGNED CHANNEL, CLEAR ENTRY
AOBJN A2,BLKELP ; [316] LOOP UNTIL DONE SCANNING I/O TABLE
MOVEI A0,0 ; [316] SET A0 FOR GETOWN
BLKE1B: POP SP,A1 ; [316] UNSTACK
JUMPL A1,BLKE2 ; [316] JUMP IF THIS ISN'T A BLOCK POINTER
TLZE A1,(<Z 17,0>) ; [316] [E057] ELSE, IS THIS A STRING ARRAY?
PUSHJ SP,DELSCN ; [316] [E057] YES, DELETE SUB-STRINGS
MOVEI A1,@A1 ; [316] NO, STATICISE
JUMPE A1,BLKE1B ; [316] LOOP IF NO STRING ASSIGNED
SKIPN A01TMP(DB) ; [316] ELSE, ANY LOGICAL I/O CHANNELS IN USE?
JRST BLKE1C ; [316] NO, JUMP AHEAD
MOVE A2,[-20,,%DDTCB]; [316] YES, LOAD PTR. TO SCAN I/O TABLE
ADDI A2,(DB) ; [316] RELOCATE
BLKEL1: SKIPN (A2) ; [316] GET NEXT I/O ENTRY - UNUSED CHANNEL?
JRST BLKE1D ; [316] YES, SKIP TO NEXT ENTRY
CAMLE A1,(A2) ; [316] NO, RETURNED SPACE ABOVE I/O SPACE?
JRST BLKE1D ; [316] YES, STRING IS OK
HLRZ A3,-1(A1) ; [316] NO, GET STRING'S HEAP SPACE LENGTH
ADDI A3,-1(A1) ; [316] CALCULATE STRING END ADDR.
CAMG A3,(A2) ; [316] IS I/O CHANNEL OPEN TO THIS STRING?
JRST BLKE1D ; [316] NO, STRING AND CHANNEL ARE BOTH OK
SETZM %IODR+20-%DDTCB(A2) ; [323] AND SHUTDOWN THE CHANNEL
SETZM %IOSTS+20-%DDTCB(A2) ; [323] ALSO CLEAR EXTRA STATUS BITS
BLKE1D: AOBJN A2,BLKEL1 ; [316] LOOP UNTIL DONE WITH I/O TABLE
BLKE1C: PUSHJ SP,GETOWN ; [316] DELETE STRING SPACE
JRST BLKE1B ; [316] LOOP UNTIL ALL STRINGS RELEASED
REP 3/88 ;05C67
POPJ SP,0 ; AND EXIT
WIT
POPJ SP, ; AND EXIT
REP 26/90 ;05C68
GETKNL: ; KERNEL OF GETOWN - A2 = TABLE POINTER (-LENGTH,,ADDR)
Edit(062); Use current top of heap if possible
PUSH SP,A2 ; [E062] SAVE TABLE POINTER
WIT
; EDIT(062); Use current top of heap if possible
; KERNEL OF GETOWN - A2 = TABLE POINTER (-LENGTH,,ADDR)
GETKNL: PUSH SP,A2 ; [E062] SAVE TABLE POINTER
REP 33/90 ;05C69
GET1: ; ORDINARY GET-N-WORDS ENTRY
ADDI A0,1 ; ALLOW FOR LINK-WORD
WIT
; ORDINARY GET-N-WORDS ENTRY
GET1: ADDI A0,1 ; ALLOW FOR LINK-WORD
REP 50/90 ;05C70
CAIN A5,0 ; [246] IS THIS HEAP ENTRY ALREADY IN USE?
JRST [ ; [246]
POP SP,A5 ; [246] YES, IT'S NO GOOD - RESTORE A5
JRST GET15 ; [246] KEEP SCANNING HEAP TABLE
] ; [246]
POP SP,A5 ; [246] NO, RESTORE A5
MOVEI A3,(A1) ; [246] THIS ENTRY IS GOOD - REMEMBER IT
HRLI A3,(A2)
WIT
JUMPE A5,[POP SP,A5 ; [316] [246] JUMP IF ENTRY IN USE
JRST GET15] ; [316] [246] KEEP SCANNING HEAP TABLE
POP SP,A5 ; [316] [246] ELSE RESTORE A5
MOVEI A3,(A1) ; [246] THIS ENTRY IS GOOD - REMEMBER IT
HRLI A3,(A2)
REP 9/91 ;05C71
TDZA A1,A1 ; [E062] NOT FOUND - LENGTH = 0
WIT
TDZA A1,A1 ; [E062] NOT FOUND - LENGTH = 0
REP 20/91 ;05C72
GET17: MOVS A2,A3 ; A2 IS LENGTH,,TABLE POINTER
WIT
GET17: MOVS A2,A3 ; GET LENGTH,,TABLE POINTER
REP 1/92 ;05C73
GET2: ; A0 = 0 - RETURN SPACE ADDRESSED BY A1
TLZ DB,TMPFL1!TMPFL2; CLEAR TEMPORARY FLAG BITS
HLRZ A0,-1(A1) ; A0 IS LENGTH OF RETURNED PIECE
ADDI A0,-1(A1) ; NOW TOP ADDRESS + 1
MOVEI A1,-1(A1) ; GET ADDRESS OF BOTTOM OF PIECE
WIT
GET2: ; A0 = 0 - RETURN SPACE ADDRESSED BY A1
TLZ DB,TMPFL1!TMPFL2; CLEAR TEMPORARY FLAG BITS
MOVEI A1,-1(A1) ; [326] GET BOTTOM ADDR. OF RETURNED SPACE
IFN FTGETCHK,< ; [326] MAKE SURE SPACE ISN'T RETURNED TWICE
GET2A: SKIPN A3,(A2) ; [326] GET TABLE ENTRY ADDR.
JRST GET2B ; [326] NULL ENTRY, IGNORE
CAIGE A1,(A3) ; [326] IS RETURNED SPACE BELOW THIS ENTRY?
JRST GET2B ; [326] YES, OK SO FAR
HLRZ A0,A3 ; [326] NO, CHECK IF COMPLETELY ABOVE ENTRY
ADDI A0,-1(A3) ; [326] GET END ADDR. OF HEAP ENTRY
CAMG A1,A0 ; [326] IS RETURNED SPACE ABOVE THIS ENTRY?
PUSHJ SP,GETERR ; [326] NO, SPACE IS BEING RETURNED TWICE
GET2B: AOBJN A2,GET2A ; [326] LOOP UNTIL DONE WITH HEAP TABLE
SKIPE A2,(A2) ; [326] ANY MORE HEAL TABLES TO USE?
JRST GET2A ; [326] YES, KEEP WORKING
MOVE A2,%SYS2(DB) ; [326] NO, RESTORE HEAP TABLE PTR.
> ; [326] END IFN FTGETCHK
HLRZ A0,(A1) ; [326] A0 IS LENGTH OF RETURNED PIECE
ADDI A0,(A1) ; [326] NOW TOP ADDRESS + 1
REP 23/93 ;05C74
;[251] IS NOT, THEN SOME PARTS OF EACH TABLE ENTRY OVERLAP AND THE TABLE IS BAD.
WIT
;[251] IS NOT, THEN SOME PART OF EACH TABLE ENTRY OVERLAP AND THE TABLE IS BAD.
REP 31/93 ;05C75
GET001: SKIPN A4,(A2) ;[251] GET REFERENCE ENTRY'S LOW ADDRESS LIMIT
JRST GET003 ;[251] NULL ENTRY, SKIP IT
TLZ A4,-1 ;[251] CLEAR LENGTH OUT OF LEFT HALF
SKIPN A5,(A3) ;[251] GET NEXT HEAP COMPARISON ENTRY
WIT
SKIPN A4,(A2) ;[326] [251] GET REF. ENTRY'S LOW ADDR. LIMIT
JRST GET003 ;[251] NULL ENTRY, SKIP IT
HLRZ A5,(A4) ;[326] GET LENGTH OF HEAP AREA FROM MEMORY
MOVSS A4 ;[326] GET LENGTH FROM HEAP TABLE
SKIPN A5 ;[326] LENGTH=0?
PUSHJ SP,GETERR ;[326] YES, BAD HEAP
CAIE A5,(A4) ;[326] NO, LENGTHS THE SAME?
PUSHJ SP,GETERR ;[326] NO, HEAP PROBLEMS
HLRZS A4 ;[326] YES, GET ADDR. BACK
HRRZ A5,(A4) ;[326] GET TABLE ADDR. W/O LENGTH
CAIE A5,(A2) ;[326] HEAP & TABLE PTRS. POINT TO EACH OTHER?
PUSHJ SP,GETERR ;[326] NO, HEAP PROBLEMS
GET001: HRRZ A4,(A2) ;[326] YES, GET REF. ENTRY ADDR. BACK
SKIPN A5,(A3) ;[251] GET NEXT HEAP COMPARE ENTRY
REP 44/93 ;05C76
SUB A5,A4 ;[251] DO AREAS OVERLAP AT ALL?
JUMPL A5,GETERR ;[251] YES HEAP TABLE IS BAD
WIT
SUB A5,A4 ;[316] [251] CALCULATE IF THEY OVERLAP
SKIPGE A5 ;[316] [251] DO THEY OVERLAP?
PUSHJ 17,GETERR ;[316] YES, FATAL ERROR
REP 1/94 ;05C77
GETOWN: MOVE A2,%SYS2(DB) ; GET POINTER TO PUBLIC HEAP-TABLE
PUSHJ SP,GETKNL ; DO THE JOB
IFN FTGETCHK,<
; ***** OPTIONAL HEAP INTEGRITY CHECKER *****
WIT
GETOWN: MOVE A2,%SYS2(DB) ; GET POINTER TO PUBLIC HEAP-TABLE
PUSHJ SP,GETKNL ; DO THE JOB
IFN FTGETCHK,<
REP 11/94 ;05C78
HRRZ A2,%SYS2(DB)
HLRE A3,%SYS2(DB) ; - (LENGTH OF LIST -1)
WIT
HLRE A3,A2 ; [326] - (LENGTH OF LIST -1)
MOVEI A2,(A2) ; [326] CLEAR LENGTH OUT
REP 21/94 ;05C79
JUMPE A0,GETERR ; [263] ERROR IF ENTRY IS ZERO
ADD A2,A0 ; MOVE TO NEXT CHUNK
WIT
SKIPN A0 ; [316] [263] IS ENTRY ZERO?
PUSHJ 17,GETERR ; [316] YES, FATAL ERROR
ADD A2,A0 ; [316] NO, MOVE TO NEXT CHUNK
REP 26/94 ;05C80
JRST GETERR ; NO
WIT
PUSHJ 17,GETERR ; [316] NO
REP 36/94 ;05C81
JRST GETERR ; [263] NO, ERROR
WIT
PUSHJ 17,GETERR ; [316] [263] NO, ERROR
REP 41/94 ;05C82
JRST GETERR ; NOPE
JRST GETX3 ; YES - OK
GETX9: > ; END OF FTGETCHK
WIT
PUSHJ 17,GETERR ; [316] NOPE
JRST GETX3 ; YES - OK
GETX9:
> ; END OF FTGETCHK
REP 50/94 ;05C83
?ALGCEH CONSISTENCY ERROR IN HEAP HANDLER/] ;[251]
WIT
?ALGCEH CONSISTENCY ERROR IN HEAP HANDLER
/] ;[316][251] P.C. OF FAILING CODE IS ON STACK
REP 26/96 ;05C84
POPJ SP,0 ; YES - EXIT
WIT
POPJ SP, ; YES - EXIT
REP 34/96 ;05C85
POPJ SP,0
WIT
POPJ SP,
REP 44/96 ;05C86
POPJ SP,0 ; NO - EXIT
WIT
POPJ SP, ; NO - EXIT
REP 41/98 ;05C87
POPJ SP,0
WIT
POPJ SP,
REP 51/98 ;05C88
POPJ SP,0 ; YES - TAKE ERROR RETURN
WIT
POPJ SP, ; YES - TAKE ERROR RETURN
REP 5/99 ;05C89
POPJ SP,0 ; AND TAKE ERROR RETURN - A13 = CHAN #
WIT
POPJ SP, ; AND TAKE ERROR RETURN - A13 = CHAN #
REP 16/99 ;05C90
POPJ SP,0
WIT
POPJ SP,
REP 30/101 ;05C91
POPJ SP,0
WIT
POPJ SP,
REP 40/101 ;05C92
POPJ SP,0 ; YES - TAKE ERROR RETURN
WIT
POPJ SP, ; YES - TAKE ERROR RETURN
REP 6/102 ;05C93
POPJ SP,0 ; AND GIVE ERROR RETURN - A13 = CHAN #
WIT
POPJ SP, ; AND GIVE ERROR RETURN - A13 = CHAN #
REP 13/102 ;05C94
TLNE A11,TTYDEV!TTYTTC;[E112] not going to terminal, ignore.
EDIT(174); do not duplicate last byte is redirected dump mode
JRST OUBT11 ;[174] NOT ALGDDT CASE (USE EXISTING CODE)
JUMPL A10,OUBT3 ;[174] ALGDDT CASE AND BREAK OUTPUT (IGNORE)
JRST OUBT12 ;[174] ALGDDT CASE AND OUTBYTE
OUBT11: JUMPL A10,OUBT4 ;[174] BREAK OUTPUT?
OUBT12: TLNE A11,TTYTTC ; [255] NO, IF TTY DON'T SEND NULL BYTES
JUMPE A13,OUBT3 ; [255] JUMP IF NULL
IDPB A13,BYTPTR(A11) ;[174] NO - PLANT BYTE
WIT
TLNE A11,TTYDEV!TTYTTC ; [E112] not going to terminal, ignore.
EDIT(174); do not duplicate last byte is redirected dump mode
JRST OUBT11 ; [174] NOT ALGDDT CASE (USE EXISTING CODE)
JUMPL A10,OUBT3 ; [174] ALGDDT CASE AND BREAK OUTPUT (IGNORE)
JRST OUBT12 ; [174] ALGDDT CASE AND OUTBYTE
OUBT11: JUMPL A10,OUBT4 ; [174] BREAK OUTPUT?
OUBT12: TLNE A11,TTYTTC ; [255] NO, IF TTY DON'T SEND NULL BYTES
JUMPE A13,OUBT3 ; [255] JUMP IF NULL
IDPB A13,BYTPTR(A11) ; [174] NO - PLANT BYTE
REP 26/102 ;05C95
POPJ SP,0
WIT
POPJ SP,
REP 6/104 ;05C96
INCHAR:
TLNE DB,INDDT ; IF DDT
JRST DDTIN% ; LET HIM DO IT.
PUSHJ SP,INBYTE ; GET NEXT BYTE
IOERR 6,(A13) ; END OF FILE - A13 = CHAN #
JRST CNC.AX
;
EDIT(145) ; Make EOF a terminator.
;
INCHR0: TLNE DB,INDDT ; [E145] If in DDT
JRST DDTIN% ; [E145] ..then let him do it.
PUSHJ SP,INBYTE ; [E145] Get next byte.
EDIT (206); IF TRAPPING FOR EOF, USE TRAP
SKIPA ;[206] EOF, CHECK TO SEE IF WE ARE TRAPPING IT
JRST CNC.AX ; [E145]
PUSH SP,A13 ;[206] SAVE THE CHANNEL NUMBER
MOVEI A13,^D38 ;[206] CHECK TO SEE IF WE ARE TRAPPING EOF
ADDI A13,(DB) ;[206] RELOCATE THE TRAP NUMBER IN THE D.B.
HRRZ A13,%TRAPS(A13) ;[206] GET ADDRESS OF TRAP BLOCK, OR ZERO
SKIPN A13 ;[206] SKIP IF A TRAP IS SET HERE
JRST INCHR1 ;[206] NONE SET, GIVE A LF
POP SP,A13 ;[206] TRAP SET, RESTORE CHANNEL NUMBER
IOERR 6,(A13) ;[206] AND GIVE THE ERROR
JRST CNC.AX ;[206] AND RETURN
INCHR1: POP SP,A13 ;[206] NO TRAP SET, RETURN LF LIKE EDIT 145
MOVEI A13,LF ;[206] AFTER POPPING THE STACK
JRST CNC.AX ;[206] RETURN WITH FREE LF
WIT
INCHAR: TLNE DB,INDDT ; IF DDT
JRST DDTIN% ; LET HIM DO IT.
PUSHJ SP,INBYTE ; GET NEXT BYTE
IOERR 6,(A13) ; END OF FILE - A13 = CHAN #
JRST CNC.AX
; EDIT(145) ; Make EOF a terminator.
INCHR0: TLNE DB,INDDT ; [323] [E145] IF IN ALGDDT
JRST DDTIN% ; [323] [E145] THEN LET IT DO INPUT ITSELF
PUSHJ SP,INBYTE ; [323] [E145] ELSE READ NEXT BYTE
TRNA ; [323] EOF, SKIP AND TEST STATUS
JRST CNC.AX ; [323] NORMAL RETURN
HLRZ A10,%CHAN(DB) ; [323] GET CHANNEL NUMBER
ADDI A10,%IOSTS(DB) ; [323] RELOCATE IT
SKIPGE A11,(A10) ; [323] HAVE WE ALREADY GIVEN AN EOF <LF>?
IOERR 6,(A13) ; [323] YES, GIVE TRAP/FATAL ERROR THIS TIME
TLO A11,(LFEOF) ; [323] NO, SAY THAT THIS IS FIRST EOF FOUND
MOVEM A11,(A10) ; [323] REMEMBER FOR NEXT TIME THROUGH
MOVEI A13,LF ; [323] LOAD A <LF>
JRST CNC.AX ; [323]] RETURN WITH FREE <LF>
REP 43/104 ;05C97
POPJ SP,0
JRST IGNICH ; IGNORE CR, LF, VT AND FF
WIT
POPJ SP,
JRST IGNICH ; IGNORE CR, LF, VT AND FF
REP 19/111 ;05C98
POPJ SP,0 ; NO
WIT
POPJ SP, ; NO
REP 23/111 ;05C99
POPJ SP,0
WIT
POPJ SP,
REP 33/114 ;05C100
JOV [TLO A2,INTOVL ; OVERFLOWED - SET FLAG
MOVE A0,[^D24359738368] ; AND LOAD 2^35 - 10^10
JRST PRIN7]
WIT
JOV [TLO A2,INTOVL ; [327] OVERFLOWED - SET FLAG
MOVE A0,[^D24359738368] ; [327] AND LOAD 2^35 - 10^10
JRST PRIN7] ; [327]
REP 5/115 ;05C101
POPJ SP,0 ; EXIT FROM ROUTINE
WIT
POPJ SP, ; EXIT FROM ROUTINE
REP 15/115 ;05C102
POPJ SP,0
WIT
POPJ SP,
REP 20/115 ;05C103
JOV [
MOVSI A0,244400 ; OVERFLOW - FORM 2.0^35
JRST PRIN18]
PRIN15: CAML A0,[^D100000000] ; 9 OR MORE DIGITS?
WIT
JOV [MOVSI A0,244400 ; [327] OVERFLOW - FORM 2.0^35
JRST PRIN18] ; [327]
PRIN15: CAML A0,[^D100000000] ; 9 OR MORE DIGITS?
REP 3/116 ;05C104
FADRI A0,000000 ; ENSURE STANDARDIZED
JFOV [
MOVEI A0,0 ; BAD NUMBER - ZERO IT
JRST PRIN22]
WIT
FADRI A0,0 ; [327] INSURE STANDARDIZED
JFOV [MOVEI A0,0 ; [327] BAD NUMBER - ZERO IT
JRST PRIN22] ; [327] AND CONTINUE
REP 18/116 ;05C105
CAMGE A0,[
XWD 002663,437347] ; VERY SMALL NUMBER?
WIT
CAMGE A0,[2663,,437347] ; [327] VERY SMALL NUMBER?
REP 3/117 ;05C106
LDB A7,[
POINT 9,A0,8] ; EXTRACT EXPONENT
TLZ A0,377000 ; AND CLEAR IT OUT
ASH A0,-170(A7) ; AND CONVERT TO FRACTIONAL FORM
JOV [
MOVE A0,[
XWD 031463,146315]
AOJA A13,PRIN36] ; CORRECT IF OVERFLOWED
WIT
LDB A7,[POINT 9,A0,8] ; [327] EXTRACT EXPONENT
TLZ A0,377000 ; AND CLEAR IT OUT
ASH A0,-170(A7) ; [327] CONVERT TO FRACTIONAL FORM
JOV [MOVE A0,[31463,,146315] ;[327]
AOJA A13,PRIN36] ; [327] CORRECT IF OVERFLOWED
REP 19/122 ;05C107
POPJ SP,0 ; EXIT
WIT
POPJ SP, ; EXIT
REP 31/123 ;05C108
POPJ SP,0 ; NO
MOVE A13,A1
JSP AX,OUCHAR ; YES - OUTPUT SECOND WORD
POPJ SP,0
WIT
POPJ SP, ; NO
MOVE A13,A1
JSP AX,OUCHAR ; YES - OUTPUT SECOND WORD
POPJ SP,
REP 13/125 ;05C109
POPJ SP,0
WIT
POPJ SP,
REP 31/125 ;05C110
POPJ SP,0
WIT
POPJ SP,
REP 49/129 ;05C111
TLOA A1,INEOF ; [E131] FLAG (INEOF OR
TLO A1,OUTEOF ; [E131] OUTEOF) IF NO BYTES
INOU17: MOVEM A1,%IODR(A2) ; SET UP IO DIRECTORY ENTRY
MOVEI A1,0 ; SAY OK
POPJ SP,0
WIT
JRST [TLO A1,INEOF ; [323] SET INPUT EOF
SETZM %IOSTS(A2) ; [323] FIRST TIME WE FOUND EOF
JRST INOU17] ; [323]
TLO A1,OUTEOF ; [323] SET OUTPUT EOF
INOU17: MOVEM A1,%IODR(A2) ; SET UP IO DIRECTORY ENTRY
MOVEI A1,0 ; SAY OK
POPJ SP,
INS 22/132 ;05C112
SETZM %IOSTS(A1) ; [323] CLEAR EXTRA EOF FLAG
REP 10/134 ;05C113
MOVEM A4,.JBFF ; AND SET UP JOBFF
WIT
MOVEM A4,.JBFF ; AND SET UP JBFF
REP 31/134 ;05C114
MOVEM A0,(A4) ; STORE DEVICE NAME
SETOM .JBFF ; FIX JOBFF
MOVEI A1,0 ; SAY OK
POPJ SP,0 ; AND EXIT
WIT
SETZM %IOSTS(A1) ; [323] CLEAR EXTRA EOF FLAG
MOVEM A0,(A4) ; STORE DEVICE NAME
SETOM .JBFF ; FIX JBFF
MOVEI A1,0 ; SAY OK
POPJ SP, ; AND EXIT
REP 18/135 ;05C115
POPJ SP,0 ; NO - ERROR RETURN
WIT
POPJ SP, ; NO - ERROR RETURN
INS 29/135 ;05C116
SETZM %IOSTS(A4) ; [323] AND EXTRA EOF FLAG
REP 10/136 ;05C117
POPJ SP,0 ; YES - EXIT
WIT
POPJ SP, ; YES - EXIT
REP 22/136 ;05C118
POPJ SP,0 ; EXIT
REL5: SETZM %IODR(A4) ; OVRLAY'S CHAN - JUST CLEAR DIR. ENTRY
WIT
POPJ SP, ; EXIT
REL5: SETZM %IODR(A4) ; OVRLAY'S CHAN - JUST CLEAR DIR. ENTRY
SETZM %IOSTS(A4) ; [323] CLEAR EXTRA EOF FLAG
REP 17/137 ;05C119
POPJ SP,0 ; NO - EXIT
WIT
POPJ SP, ; NO - EXIT
REP 42/137 ;05C120
POPJ SP,0
WIT
SETZM %IOSTS(A10) ; [323] CLEAR EXTRA EOF FLAG
POPJ SP,
REP 22/138 ;05C121
POPJ SP,0 ; NO - EXIT
WIT
POPJ SP, ; NO - EXIT
REP 28/138 ;05C122
POPJ SP,0 ; EXIT
WIT
SETZM %IOSTS(A4) ; [323] CLEAR EXTRA EOF FLAG
POPJ SP, ; EXIT
REP 7/139 ;05C123
POPJ SP,0 ; END OF FILE ON INPUT
PUSHJ SP,OUBYTE ; OUTPUT BYTE
POPJ SP,0 ; END OF FILE ON OUTPUT
WIT
POPJ SP, ; END OF FILE ON INPUT
PUSHJ SP,OUBYTE ; OUTPUT BYTE
POPJ SP, ; END OF FILE ON OUTPUT
REP 28/140 ;05C124
POPJ SP,0
WIT
POPJ SP,
INS 34/144 ;05C125
SETZM %IOSTS(A1) ; [323] CLEAR EXTRA EOF FLAG
INS 170/146 ;05C126
TLNE A6,-1 ; [330] REAL POINTERS HAVE ZERO LEFT HALVES
AOJA A7,PRFPR1 ; [330] THIS ISN'T A REAL POINTER, LOOP
REP 1/148 ;05C127
ERRMON:
TLNE DB,INDDT ; IN DEBUGGER ?
WIT
ERRMON: TLNE DB,INDDT ; IN DEBUGGER ?
INS 6/148 ;05C128
MOVE A0,.JBTPC ; [311] GET PC OF ERROR
MOVEM A0,PDLTMP(DB) ; [311] SAVE IN CASE OF PDL TRAP NOW
DEL 11/148 ;05C129
PUSHJ SP,BRKBYT ; [274]
JFCL ; [274] IGNORE ERROR RETURN FROM BRKBYT
REP 36/154 ;05C130
M4: XWD ERR2PT+ERRDEV+40+<M400A-M400>_6,M400
WIT
M4: XWD ERR2PT+ERRDEV+40+<M400A-M400>_6,M400 ;[316] IOERR
REP 49/154 ;05C131
IFN FTOVRL,<
XWD 55,M415>
WIT
IFN FTOVRL,<55,,M415> ; [324]
IFE FTOVRL,<0> ; [324]
XWD 56,M416 ; [324]
REP 59/154 ;05C132
M6:
WIT
XWD 70,M510 ; [336]
M6:
REP 8/164 ;05C133
IFN FTOVRL,<
M415: ASCIZ /Attempt to use overlay handler's />
M500: ASCIZ /Undefine operation (SQRT argument negative)/
WIT
IFN FTOVRL,< ; [324]
M415: ASCIZ /Attempt to use overlay handler's/> ; [324] END IFN FTOVRL
IFE FTOVRL,<0> ; [324] KEEP TABLE ORDER IF FTOVRL IS OFF
M416: ASCIZ /Invalid file specification/ ; [324]
M500: ASCIZ /Undefined operation (SQRT argument negative)/ ;[325]
REP 9/165 ;05C134
M507: ASCIZ /Run-time error detected by FORTRAN subprogram/
WIT
M507: ASCIZ /Run-time error detected by FORTRAN subprogram/
M510: ASCIZ /Illegal INFO parameter value/ ; [336]
REP 17/166 ;05C135
JOV .+1 ; [E1013] Clear arithmetic
JFOV .+1 ; [E1013] .. and floating overflow flags.
MOVE A1,.JBTPC ; AND GET PC DUMP
TLZN A1,PCFPU ; FLOATING POINT UNDERFLOW?
JRST APR6 ; NO
TLZ A1,PCOVL ; YES - CLEAR OVERFLOW FLAGS
MOVEM A1,.JBTPC
WIT
JFOVO .+1 ; [331] CLEAR BOTH OVERFLOW FLAGS
MOVE A1,.JBTPC ; AND GET PC DUMP
TLZ A1,(1B0!1B3!1B11!1B12) ; [311] TURN OFF MATH ERROR BITS
EXCH A1,.JBTPC ; [311] SAVE MODIFIED .JBTPC AND GET OLD ONE
TLZN A1,PCFPU ; FLOATING POINT UNDERFLOW?
JRST APR6 ; NO
REP 12/169 ;05C136
JRSTF @.JBTPC ; AND RE-ENTER PROGRAM
WIT
SKIPN PDLTMP(DB) ; [311] APR TRAP WHILE HANDLING ANOTHER ERROR?
JRSTF @.JBTPC ; [311] NO, CONTINUE PROGRAM NORMALLY
HRRZ A1,PDLTMP(DB) ; [311] YES, GET SAVED 0,,.JBTPC BACK
EXCH A1,.JBTPC ; [311] RESTORE IT AND GET OUR RETURN ADDR.
HRRZM A1,APRTMP(DB) ; [311] PUT IT IN A TEMP. LOCATION
MOVE A1,%SYS17(DB) ; [311] RESTORE A1
JRSTF @APRTMP(DB) ; [311] AND CONTINUE WHAT WE WERE DOING
DEL 45/175 ;05C137
SUM 155844