Trailing-Edge
-
PDP-10 Archives
-
scratch
-
10,7/unscsp/aid/kmon.mac
There are 5 other files named kmon.mac in the archive. Click here to see a list.
TITLE KMON %20A 12-MAR-79
SUBTTL DEC MONITOR FOR "AID" A KOTOK N PAPPAS D NIXON
;COPYRIGHT (C) 1973,1978,1979 BY
;DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
;
;
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
;ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE
;INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER
;COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
;OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY
;TRANSFERRED.
;
;THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
;AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
;CORPORATION.
;
;DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
;SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
VCUSTOM==0
VAID==20 ;VERSION NUMBER
VUPDATE==1 ;MINOR VERSION NUMBER
VEDIT==32 ;EDIT NUMBER
;IFN SEG2SW,<KMON USES TWO SEGMENT FEATURE>
IFDEF TWOSEG,<IFNDEF SEG2SW,<SEG2SW==1>>
IFNDEF SEG2SW,<SEG2SW==0>
IFN SEG2SW,<PURESW==1>
;IFN PURESW,<IMPURE AREA IS INITIALISED FROM HISEG>
IFNDEF PURESW,<PURESW==1>
LOC <.JBVER=137>
<VCUSTOM>B2+<VAID>B11+<VUPDATE>B17+VEDIT
LOC 124
EXP REE
RELOC 0
;ENTRIES TO/FROM MONITOR FOR TRANSFER OF CONTROL
INTERN MONENT ;NORMAL MONITOR ENTRY
INTERN KILL ;MONITOR ENTRY ON FATAL ERROR
EXTERN INTBEG ;ENTRY TO INTERPRETER ON INITIALIZATION
;AC DEFINITIONS
A=0
B=1
C=2
D=3
E=4
F=5
PP=17 ;USED FOR PUSH POP
MLON
IFN PURESW,<
IFN SEG2SW,< TWOSEGMENTS
RELOC 400000>
IFE SEG2SW,< HISEG>>
SUBTTL REVISION HISTORY
;START OF VERSION 20A
;32 ADD DATE75 HACK
SUBTTL DEC MONITOR FOR "AID"
;COLD START ROUTINE
INTERN START
EXTERN .JBFF,.JBREL,.JBOPC
START: CALLI 0 ;RESET ALL IO
MOVE B,[XWD LBEG,LBEG+1] ;START OF DATA
SETZM LBEG ;ZERO FIRST WORD
BLT B,LEND-1 ;AND REST
MOVE B,[XWD PH1C,S79.01]
BLT B,P75.08
MOVE B,[XWD OPENB,INITB]
BLT B,INITB+2
MOVE B,[XWD PH2C,S86]
BLT B,SR1+1
MOVE B,[XWD PH3C,P92]
BLT B,S80+1
MOVE B,[JRST S5460A]
MOVEM B,S54.60+1
MOVE B,[XWD 41000,SK11]
MOVEM B,SK11
SETZ B,
CALLI B,27 ;MAKE RUN TIME ONLY FOR AID
MOVEM B,STTIME ;TIME WHEN STARTED
MOVE PP,[XWD -20,PLIST]
MOVEM PP,PLIST ;SET UP PUSH-DOWN LIST
INIT 1 ;INITIALIZE CONSOLE
SIXBIT /TTY/
XWD OB,IB
HALT START
MOVEI A,BUF1 ;TTY OUT SETUP
MOVEM A,.JBFF
OUTBUF 1
OUTPUT ;DUMMY OUTPUT
MOVEI E,GRTNG ;TYPE GREETING (IN DDT MODE)
CALLI E,3
JRST INTBEG ;GO TO INTERPRETER
GRTNG: ASCIZ /
AID 20A(32) AT YOUR SERVICE ...
/
;DUMMY ERROR EXIT FROM INTERPRETER
KILL: HALT START
;HERE FOR REENTER
REE: TTCALL 12,0
SETOM RIF
JRSTF @.JBOPC
;NORMAL MONITOR ENTRY FROM INTERPRETER
;B CONTAINS REQUEST TYPE
;A AND C MAY BE CLOBBERED, EVIDENTLY. ALSO G.
MONENT: MOVE PP,PLIST ;RESTORE MONITOR PUSH-DOWN LIST
CAIL B,L.ETSW ;CHECK FOR WITHIN LIMIT
HALT START
PUSHJ PP,@ENTSW(B) ;DISPATCH TO ROUTINE
MONEXIT:CALLI B,23 ;NEED SPACE
IDIVI B,^D1000
IDIVI B,^D60
IDIVI B,^D60
MOVEM B+1,MIN
MOVEM B,HR
SETZ B,
CALLI B,27
SUB B,STTIME ;SUBTRACT STARTING TIME
IDIVI B,^D10
MOVEM B,SECOND
MONEX1: JRST @INTENT ;RETURN TO MONITOR
ENTSW: JRST SU ;SWITCH TO USER
JRST GBUF ;GET A BUFFER
JRST MONEXIT ;RETURN A BUFFER
JRST TU ;TRANSMIT BUFFER TO STATION
JRST TLSU ;TL AND SU
JRST MONEXIT ;BREAK POINT
JRST MONEXIT ;REQUEST DISK
JRST DCONT ;CONTINUE DISK ACTION
JRST DCOMP ;DISK ACTION COMPLETE
JRST MORCOR ;GET ANOTHER BLK OF CORE
JRST MORCI ;IMPERATIVE MORE CORE
JRST SENDFF ;MAKE UP AND SEND FORMFEED
HALT MONEXIT ;GET USER OFF
JRST RCOR ;RETURN BLOCKS OF CORE
HALT MONEXIT ;PAUSE FOR E SECONDS
L.ETSW==.-ENTSW+1 ;LENGTH OF THE SWITCH
;ROUTINES TO EXPAND/CONTRACT CORE
RCOR: MOVNI A,2000 ;DECREASE CORE BY 1K
JRST MORCI1
MORCOR:
MORCI: MOVEI A,2000 ;IMPERATIVE MORE CORE,DONT CHECK
MORCI1: ADD A,.JBREL
SETOI B, ;SUCCESS FLAG
CALLI A,11 ;TRY TO GET IT
SETZI B, ;FAILED. SET FLAG
JRST MONEX1
;UTILITY ROUTINES FOR TTY IO
SETUP: MOVE A,[POINT 7,BUF1+2,34]
MOVEM A,BUF1+1 ;POINTER TO BEGINNING OF BUFFER
MOVEI C,15 ;CR IN NEXT-TO-LAST BYTE
DPB C,[POINT 7,BUF1+3+^D18-1,27]
POPJ PP,
GETCH: ILDB C,BUF1+1 ;GET CHARACTER
MOVE A,BUF1+1
ILDB D,A ;AND LOOK AHEAD ONE CHARACTER
POPJ PP,
;TRANSMIT BUFFER AND SWITCH TO USER
TLSU: PUSHJ PP,TU ;TRANSMIT BUFFER,FALL INTO SU
;SWITCH TO USER (I.E., READ A LINE OF INPUT)
SU: MOVE A,[XWD 21,BUF1+1] ;TYPE "*"
MOVEM A,BUF1+1
SETZM BUF1+3 ;CLEAR FIRST WRD OF BFR
MOVEI C,"*"
IDPB C,OB+1
OUTPUT
PUSHJ PP,GBUF ;GET A FREE BUFFER
HRRZM E,.JBFF
INBUF 1 ;SET UP AS INPUT BFR
INPUT ;READ LINE FROM TTY
MOVNI C,1 ;SET FOR CURRENT JOB
GETLCH C ;GET LINE CHARACTERISTICS
SETZ B, ;SET FOR NO CONVERSION
TLNN C,(1B13) ;TEST FOR LOWER CASE INPUT FLAG ON
MOVEI B,40 ;NO, CONVERT LOWER CASE TO UPPER
CLOSE 1 ;CLOSE INPUT SIDE
MOVSI C,(ASCII/
/)
MOVEM C,BUF1+3+^D16 ;INSERT CARRIAGE RETURN AFTER BUFFER
SETZM (E) ;CLEAR LINK WORD (NEEDED??)
PUSHJ PP,SETUP ;SET UP FOR SCAN
PUSHJ PP,GETCH ;CHECK FOR LEADING "*"
CAIN C,32
JRST SU
CAIN C,"*"
JRST SUXRET ;DONT CONVERT IT
JRST SULP6
SULP: SKIPE EFG
JRST SULP1
PUSHJ PP,GETCH ;GET CHAR & LOOK AHEAD
SULP6: CAIN D,15
JRST SULP3
SULP4: CAIN C,"*"
JRST XEXP
CAIE C,"%"
CAIN C,"#"
TRC C,6 ;EXCHANGE CHARACTERS
CAIL C,"A"
CAILE C,"Z"
JRST .+2
ADDI C,(B) ;CONVERT TO LOWER CASE
CAIN C,"^" ;LET UP ARROW BE EXPONENTIATION (RPG)
MOVEI C,"*" ;...
CAIN C,"_" ;LET LEFT ARROW BE UNDERSCORE
MOVEI C,"^" ;...
CAIN D,"="
JRST XGELE
SUXRET: DPB C,1(E)
CAIE C,15 ;CARRIAGE RETURN?
JRST SULP ;NO, GO FOR MORE
MOVSI A,400000
MOVEM A,2(E) ;TTY FLAG (FOR JOSS USE)
JRST MONEXIT ;BACK TO JOSS
XEXP: SKIPE FORMFG
JRST .+3
CAIN D,15 ;TRAILING *?
JRST CLEAR ;CLEAR OUT LINE
CAIN D,"*"
JRST XX
XEXP2: MOVEI C,"&"
JRST SUXRET
CLEAR: PUSHJ PP,GBUF ;ZERO INPUT BUFFER
PUSHJ PP,SETUP ;SET UP BUFFER PNTR.
MOVEI C,1 ;ONLY ONE WORD
MOVEM C,BUF1+2 ;SET IT TO BE SO
MOVSI C,64240 ;CR-LF
MOVEM C,BUF1+3 ;FAKE NOTHING SEEN
MOVEI C,CR
MOVEI D,LF
JRST SULP ;SCAN AS IF BLANK LINE
XGELE: CAIN C,74
HRROI C,"\"
CAIN C,76
HRROI C,"@"
JUMPGE C,SUXRET
XXSPAC: MOVEI D," "
DPB D,A
JRST SUXRET
XX: SKIPE FORMFG
JRST XEXP2
JRST XXSPAC
SULP3: CAIE C,")" ;PARENTHETICAL DO?
JRST SULP7 ;NO
LDB D,[POINT 7,BUF1+3,6] ;GET FIRST CHAR.
CAIE D,"(" ;CHECK AGAIN
JRST SULP7 ;IT ISN'T
MOVE D,BUF1+1 ;SAVE BYTE POINTER
MOVEM D,SAVPTR ;FOR LATER
SULP7: MOVEI D,15 ;JUST IN CASE
CAIE C,"*"
SKIPE FORMFG
JRST SULP4
CAIE C,":"
CAIN C,"."
JRST SULP4
SETOM EFG1
SETOM EFG
MOVEI D,"."
JRST SULP4
SULP1: SKIPN EFG1
JRST SULP5
MOVEI C,"."
MOVEI D,15
SETZM EFG1
IBP 1(E)
JRST SULP4
SULP5: SETZM EFG
SKIPN SAVPTR ;PARENTHETICAL DO
JRST SULP8 ;NO
LDB C,BUF1+1 ;GET "."
LDB D,SAVPTR ;GET ")"
DPB C,SAVPTR ;SWAP THEM
DPB D,BUF1+1 ;ABOUT
SETZM SAVPTR ;BUT ONLY ONCE
SULP8: PUSHJ PP,GETCH
MOVEI C,15
MOVEI D,12
JRST SULP4
;TRANSMIT BUFFER TO USER
TU: PUSHJ PP,SETUP
MOVEI F,1
TULOOP: PUSHJ PP,GETCH ;GET CHAR & LOOK AHEAD
JUMPE C,TUSRT3 ;DONE ON NULL FROM JOSS
CAIE C,"#"
CAIN C,"%"
TRC C,6 ;EXCHANGE CHARACTERS
CAIN D," " ;FOLLOWING SPACE?
JRST TUSPC ;YES
CAIN C,"^" ;UNDERSCORE?
MOVEI C,"_" ;YUP, REPLACE BY LEFT ARROW
CAIN C,"*"
MOVEI C,"^" ;EXPON & NO ROOM FOR "**"
TUSRET: CAIN C,"&"
MOVEI C,"*"
DPB C,1(E)
CAIE C,15
TUSRT2: AOJA F,TULOOP
MOVEI C,12
IDPB C,1(E)
TUSRT3: MOVE A,1(E) ;FUDGE OUTPUT BUFFER
MOVEM A,OB+1
MOVE A,[XWD 21,BUF1+1]
MOVEM A,1(E)
OUTPUT
POPJ PP,
TUSPC: CAIN C," " ;TWO SPACES?
JRST CHKTAB
CAIN C,"\"
HRROI C,74
CAIN C,"@"
HRROI C,76
CAIN C,"*"
JRST TUSRET-1
JUMPGE C,TUSRET
MOVEI D,"="
JUMPL C,.+2
MOVEI D,"*"
DPB C,1(E)
IDPB D,1(E)
AOJA F,TUSRT2
CHKTAB: TRNN F,7 ;ONE-SPACE TAB?
JRST TUSRT2 ;YES, IGNORE IT
AOJA F,.+1
CHKTB1: TRNN F,7 ;END OF TAB?
JRST TAB ;YES, GO INSERT TAB
ILDB C,0
CAIN C," " ;SPACE NEXT?
AOJA F,CHKTB1 ;YES, KEEP LOOKING
MOVEM A,BUF1+1 ;NO TAB
ILDB D,A
AOJA F,TULOOP+1
TAB: MOVEI C,11 ;INSERT TAB A& NULLS
DPB C,BUF1+1
MOVEI C,0
IDPB C,BUF1+1
CAME A,BUF1+1
JRST .-2
AOJA F,TULOOP
;GET A FREE BUFFER AND CLEAR TO 0'S
GBUF: MOVEI E,BUF1 ;BUFFER ADDRESS
MOVSI A,(E) ;CLEAR IT
HRRI A,1(E)
SETZM (E)
BLT A,3+^D18-1(E)
POPJ PP,
SENDFF: PUSHJ PP,SETPAG
JRST MONEXIT
SETPAG: PUSHJ PP,GBUF ;GET A CLEAN BUFFER.
PUSHJ PP,SETUP ;INIT POINTER.
MOVEI C,FF ;SET UP FORMFEED
PUSHJ PP,TUSRT3-1 ;AND TYPE IT OUT.
MOVEI B,1 ;RESET LINE COUNTER(ITMLST ONLY)
MOVEM B,LINE
POPJ PP, ;RETURN TO INTERPRETER
FF==14
;SIMULATION OF JOSS DISK ROUTINES
DCONT: HRRZ B,ACTION ;GET REQUEST
CAILE B,5 ;LEGAL?
HALT START ;NO
EXCH B,ACTION ;GET & RESET FIRST-TIME FLAG
JRST .+1(B)
HALT START
JRST DDREAD
JRST DDWRI
JRST DDDEL
JRST ITMLST
JRST DDOPEN
DDREAD: TLNN B,1 ;FIRST TIME?
JRST DDRCNT ;NO
PUSHJ PP,DDLOOK ;DO LOOKUP
JRST DDLFAL ;NOT THERE
INBUF 1,1
DDRCNT: INPUT 1, ;READ A BLOCK
MOVEI A,3 ;NOT DONE FLAG
STATZ 1,20000 ;CHECK END OF FILE BIT
JRST .+3 ;ON
SKIPLE DB+2 ;CHECK BUFFER COUNT FOR END OF FILE
JRST DDCHK ;NO
MOVEI A,4 ;YES. SAY SO
MOVSI B,(136B7) ;AND MAKE BFR LOOK EMPTY
MOVEM B,BFR+1
DDCHK: STATZ 1,740000 ;ERRORS?
MOVEI A,^D12 ;YES. SAY SO.
DDEXIT: MOVEM A,RESULT ;TELL JOSS WHAT HAPPENED
JRST MONEXIT
DDWRI: TLNN B,1 ;FIRST TIME TO WRITE?
JRST DDWCNT
PUSHJ PP,DDLOOK ;ALREADY THERE?
JRST DDWRI2 ;NO, SO OK
MOVEI A,^D15 ;YES, DONT ALLOW WRITE
MOVE B,DDLK2 ;GET DEVICE NAME
CALLI B,4 ;DEVCHR
TLNE B,4 ;IS IT A DIRECTORY DEVICE
JRST DDEXIT
DDWRI2: MOVEI A,1 ;SUCCESS FLAG
HLLZS DIREN+1
SETZM DIREN+2 ;MAKE SURE OF DATE.
ENTER 1,DIREN
MOVEI A,^D11 ;TELL JOSS ABOUT ENTER FAIL
OUTBUF 1,1 ;SETUP OUTPUT BUFFER
OUTPUT 1, ;DUMMY OUTPUT
JRST DDEXIT
DDWCNT: MOVEI 1,177 ;SET TO WRITE 177 WORDS
ADDM 1,DB+1
OUTPUT 1,
DDCHK2: MOVEI A,1 ;SUCCESS FLAG
SKIPE FLAG
MOVEI A,2
JRST DDCHK
DDLFAL: MOVEI A,^D8 ;LOOKUP FAIL
JRST DDEXIT
DDOPEN: MOVEI A,^D14 ;OPEN ALWAYS SUCCEEDS
JRST DDEXIT
DDDEL: PUSHJ PP,DDLOOK ;LOOKUP BEFORE DELETING
JRST DDLFAL ;AIN'T NONE
SETZM DIREN ;SET UP FOR RENAME/DELETE
MOVEI A,5
RENAME 1,DIREN
MOVEI A,^D12 ;COULDNT DO IT
JRST DDEXIT
DCOMP: RELEAS 1, ;DISC ACTION COMPLETE
JRST MONEXIT ;CLOSE FILE AND RETURN
;CONVERT FILE NAME AND DO LOOKUP
DDLOOK: SKIPN C,KEY ;CONVERT FILE KEY TO SIXBIT DEVICE NAME
MOVE C,[ASCII /DSK/]
MOVEI A,6
DDLK1: LSH C,1
TLNE C,770000
TLC C,400000
LSHC C-1,6
SOJG A,DDLK1
MOVEM C-1,DDLK2
MOVEI A,BFR-2 ;SET UP FOR INBUF,OUTBUF
MOVEM A,.JBFF
MOVE A,FILE
PUSHJ PP,CONVRT
TLO A+2,616100
MOVEM A+2,DIREN
MOVE A,PROG
PUSHJ PP,CONVRT
TRC A+2,720000
HRLZM A+2,DIREN+1
OPEN 1,INITB
HALT .-1
LOOKUP 1,DIREN
POPJ PP,
AOS (PP)
POPJ PP,
;CONVERT DECIMAL NUMBER NNNN IN A TO SIXBIT FORM IN A+2
CONVRT: MOVSI C,440000
IDIVI A,12
ROTC A+1,-6
JUMPGE B,CONVRT+1
TDO A+2,[EXP 202020202020]
POPJ PP,
; PRINT ITEM-LIST
ITMLST: PUSHJ PP,GBUF ;GET A CLEAN BUFFER
PUSHJ PP,SETUP ;INIT POINTER
MOVE A,HDPTR ;PRINT HEADING
PUSHJ PP,HDLOP ;PRINT 1ST LINE OF HEADING
PUSHJ PP,GBUF
PUSHJ PP,SETUP
MOVE A,HDPTR2
PUSHJ PP,HDLOP ;AND 2ND LINE OF HEADING
SETZM PROG
HRREI A,^D-26 ;WILL LOOK FOR 25 ITEMS
MOVEM A,TESTIT
KLOP: AOS PROG
AOSL TESTIT
JRST DDCHK2 ;DONE WITH ITEMS
PUSHJ PP,DDLOOK ;DO A LOOKUP
JRST KLOP ;DOESN'T EXIST, TRY NEXT ONE.
PUSHJ PP,LNPNT ;EXISTS, TELL ABOUT IT.
AOS B,LINE ;BUMP LINE COUNT.
CAILE B,PSIZE
PUSHJ PP,SETPAG ;SEND A FORMFEED.
JRST KLOP ;SEE WHAT'S NEXT.
HDLOP: ILDB A+1,A ;PICK UP TEXT A POINTS AT
IDPB A+1,1(E) ;AND PUT IT IN BUFFER.
JUMPN A+1,HDLOP
JRST TUSRT3 ;PRINTS AND DOES POPJ.
PSIZE==^D54 ;LINES PER PAGE.
LNPNT: PUSHJ PP,GBUF ;GET A CLEAN BUFFER
PUSHJ PP,SETUP ;INIT POINTER
MOVE A,PROG ;GET ITEM NUMBER
PUSHJ PP,NUMPNT ;CONVERT AND DEPOSIT IT.
MOVNI A,SPACNM ;WILL PUT IN THIS MANY SPACES
SPLOP: MOVEI A+1,40
IDPB A+1,1(E)
AOJL A,SPLOP
LDB A,[POINT 12,DIREN+2,35] ;GET LOW 12 BITS OF DATE
LDB A+1,[POINT 3,DIREN+1,20] ;GET HIGH 3 BITS OF DATE
DPB A+1,[POINT 3,A,23] ;MERGE THE TWO PARTS
IDIVI A,^D31
MOVE C,A
MOVE A,A+1
ADDI A,1
PUSHJ PP,NUMPNT ;PRINT DAY
MOVE A,C
IDIVI A,^D12
MOVE C,MONPTR
ADD C,A+1 ;GET TABLE ENTRY FOR THE MONTH
HRREI D,^D-5
PNTMON: ILDB B,C
IDPB B,1(E) ;PRINT "-MONTH-"
AOJL D,PNTMON
ADDI A,^D64
PUSHJ PP,NUMPNT ;PRINT YEAR
MOVEI A,CR
IDPB A,1(E)
MOVEI A,LF
IDPB A,1(E) ;END RECORD
JRST TUSRT3 ;OUTPUT AND RETURN
;WILL POPJ BACK TO THE LOOKUP LOOP!
CR==15
LF==12
SPACNM==12
MONPTR:POINT 7,MONLST-1,34
MONLST: ASCII /-JAN-/
ASCII /-FEB-/
ASCII /-MAR-/
ASCII /-APR-/
ASCII /-MAY-/
ASCII /-JUN-/
ASCII /-JUL-/
ASCII /-AUG-/
ASCII /-SEP-/
ASCII /-OCT-/
ASCII /-NOV-/
ASCII /-DEC-/
HDPTR: POINT 7,.,34
ASCIZ / ITEM-LIST
/
HDPTR2: POINT 7,.,34
ASCIZ /ITEM DATE
/
; THIS ROUTINE CONVERTS A NUMBER TO A TWO DIGIT DECIMAL AND INSERTS
; THE CHARACTERS IN THE TTY OUTPUT BUFFER. NUMBER IS IN A.
NUMPNT: IDIVI A,12
ADDI A+1,60
PUSH PP,A+1 ;SAVE LOW DIGIT
JUMPN A,NOTZER
MOVEI A,40 ; THERE IS NO FIRST DIGIT
JRST DONNUM
NOTZER: IDIVI A,12
MOVEI A,60(A+1)
DONNUM: IDPB A,1(E) ;FIRST CHARACTER
POP PP,A
IDPB A,1(E) ;SECOND DIGIT
POPJ PP,
;DUMP THE LITTERALS IN THE HIGH SEGMENT
LIT
SUBTTL IMPURE AREA OF AID
RA=1
ASF=3
ASGN=2
INTERNAL P75.08
INTERNAL S79.01,P84.97,P90.04,P90.05,P91.03,P91.06
INTERNAL S83.99,S83.98,S83.97,S54.97,AS
INTERNAL S83.96,S83.95,S84.99,S84.98,S84.97
PH1C:
DEC 8; MAX:SET AND RESET BY S79
DEC 200000000; A LE 2.10*(-2)
MOVEI ASF,0
MOVEI ASF,0; RESTORE ASF
HRLZI ASGN,0; RESTORE SIGN
HRLZI ASGN,0; RESTORE SIGN AND SF
ASHC RA,0; SCALE AT 35
HRLZI ASGN,0; RESTORE ASGN
OPENB: EXP 10
Z
XWD DB,DB
PH2C: Z
JRST S86A
Z
JRST P75A
Z
JRST P78A
Z
JRST P82A
Z
JRST P77A
Z
JRST P81A
Z
JRST P80A
Z
JRST S87A
Z
JRST S75A
Z
JRST S82A
Z
JRST P76A
Z
JRST S5450A
Z
JRST P8530A
Z
JRST S5455A
Z
JRST S79A
Z
JRST SR1A
PH3C: Z
JRST P92A
Z
JRST P93A
Z;
JRST S61X;
Z;
JRST S62X;
Z;
JRST ERRX;
Z
JRST S78A
Z
JRST S83A
Z
JRST S84A
Z
JRST S81A
Z
JRST S76A
Z
JRST S77A
Z
JRST P91A
Z
JRST P79A
Z
JRST P83A
Z
JRST P84A
Z
JRST P85A
Z
JRST P90A
Z
JRST P94A
Z
JRST S80A
IFN PURESW,<
IFN SEG2SW,<RELOC>
IFE SEG2SW,< LOC 140 >>
LBEG: ;FIRST DATA WORD TO BE ZEROED
SXX: BLOCK 1
S83.99: BLOCK 1
S83.98: BLOCK 1
S83.97: BLOCK 1
S83.96: BLOCK 1
S83.95: BLOCK 1
S84.99: BLOCK 1
S84.98: BLOCK 1
S84.97: BLOCK 1
INTERN BFR, BUF1, BFRP,SAVPTR,SXX,LBEG
INTERN TEMP, TESTIT,FORMFG,EFG,EFG1
INTERN INITB, DDLK2, T7.9, COMEBA, CT14, USERS
INTERN HR, MIN, SECOND
INTERN IB, OB, DB, PLIST
INTERN ACTION, FILE, FLAG, KEY, NAME, PROG
INTERN RESULT, RPN, TYPE
S79.01:
S54.97: BLOCK 1; MAX:SET AND RESET BY S79
P84.97: BLOCK 1 ; A LE 2.10*(-2)
P90.04:
BLOCK 1
P91.06: BLOCK 1
P91.03: BLOCK 1
P90.05: BLOCK 1
AS: BLOCK 1
P75.08: BLOCK 1
;FLAG AND COUNT CELLS FOR INTERPRETER TO USE
INTERN T7.9,COMEBACK,CT14,HR,MIN,SECOND,USERS
T7.9: BLOCK 1 ;COUNT OF ARITH OPERATIONS
COMEBA: BLOCK 1 ;COMEBACK FLAG
;WHEN SET, INTERP CALLS MONITOR
CT14: BLOCK 1 ;COUNT OF STATEMENTS INTERPRETED
USERS: BLOCK 1 ;NO OF USERS ON (?)
HR: BLOCK 1 ;TIME OF DAY, HOUR PART
MIN: BLOCK 1 ;TIME OF DAY, MINUTE PART
SECOND: BLOCK 1 ;TIME OF DAY, SECOND PART
INTERN ACTION,BFR,BFRP,FILE,FLAG,KEY,NAME,PROG,RESULT,RPN,TYPE
INTERN STTIME
ACTION: BLOCK 1
FILE: BLOCK 1
FLAG: BLOCK 1
KEY: BLOCK 1
NAME: BLOCK 1
PROG: BLOCK 1
RESULT: BLOCK 1
RPN: BLOCK 1
TYPE: BLOCK 1
IB: BLOCK 3 ;TTY BUFFER HEADERS
OB: BLOCK 3
DB: BLOCK 3 ;DISK BUFFER HEADER
PLIST: BLOCK 1
BLOCK 20
SAVPTR: BLOCK 1 ;FOR PARENTHETICAL DO'S
EFG1: BLOCK 1
STTIME: BLOCK 1
EFG: BLOCK 1
FORMFG: BLOCK 1
TESTIT: BLOCK 1
INITB: BLOCK 1
DDLK2: BLOCK 2
DIREN: BLOCK 4
BLOCK 2 ;THESE TWO BLOCKS ARE NECESSARY
;WITHOUT THEN THE DIRECTORY HEADER WILL BE FOULED
;UP AND THE ERROR RETURN ON A LOOKUP WILL BE TAKEN
BFR: BLOCK ^D15
BUF1: BLOCK 3+^D18 ;JOSS TTY BUFFER
BLOCK 177+BFR-.
BFRP: BLOCK 1 ;END OF DRM BUFFER
BLOCK 1 ;DUMMY 200'TH DATA WORD
TEMP: BLOCK 1
EXTERN S86A,P75A,P78A,P82A,P77A,P81A,P80A,S87A,S5460A
EXTERN S75A,S82A,P76A,S5450A,P8530A,S5455A,S79A,SR1A
INTERN S86,P75,P78,P82,P77,P81,P80
INTERN S87,S75,S82,P76,S54.50,P85.30,S54.55,S79,SR1
S86: BLOCK 2
P75: BLOCK 2
P78: BLOCK 2
P82: BLOCK 2
P77: BLOCK 2
P81: BLOCK 2
P80: BLOCK 2
S87: BLOCK 2
S75: BLOCK 2
S82: BLOCK 2
P76: BLOCK 2
S54.50: BLOCK 2
P85.30: BLOCK 2
S54.55: BLOCK 2
S79: BLOCK 2
SR1: BLOCK 2
INTERN P79.90,P79.91,P79.92,P79.89,P79.85,P79.86
INTERN P79.87,P79.88,P80.97,P80.98,P80.99,P81.80
INTERN P81.81,P81.82,P81.99,P82.80,P82.81,P82.82
INTERN P82.90,P82.91,P82.92,P82.84,P83.94,P83.95
INTERN P83.96,P83.97,P83.98,P83.99,P85.99,P85.98
INTERN S75.93,S54.60,S54.98,S54.99,S80.98,S80.99
INTERN S81.98,S85,S85.80,S85.81,S85.90,S85.95
INTERN S85B,S85C,S85A,S85Y,S85M
P79.90: BLOCK 1
P79.91: BLOCK 1
P79.92: BLOCK 1
P79.89: BLOCK 1 ;TEMP STORE
P79.85: BLOCK 1 ;RG
P79.86: BLOCK 1 ;RH
P79.87: BLOCK 1 ;RI
P79.88: BLOCK 1 ;RJ
P80.97: BLOCK 1
P80.98: BLOCK 1
P80.99: BLOCK 1
P81.80: BLOCK 1
P81.81: BLOCK 1
P81.82: BLOCK 1
P81.99: BLOCK 1 ;STORE FOR SIGN OF ARG
P82.80: BLOCK 1
P82.81: BLOCK 1
P82.82: BLOCK 1
P82.90: BLOCK 1
P82.91: BLOCK 1
P82.92: BLOCK 1
P82.84: BLOCK 1 ; TEMP STORE FOR X(B-1)
P83.94: BLOCK 1
P83.95: BLOCK 1
P83.96: BLOCK 1
P83.97: BLOCK 1
P83.98: BLOCK 1
P83.99: BLOCK 1
P85.99: BLOCK 1 ;***TEMP STORE
P85.98: BLOCK 1 ;***ADJUSTED QUADRANT
S75.93: BLOCK 1 ;TEMP STORE FOR SF
S54.60: BLOCK 1
BLOCK 1 ; JRST S5460A
S54.98: BLOCK 1 ;SAVE "PWR" REGISTER
S54.99: BLOCK 1 ;BYTE POINTER TEMPORARY STORE
S80.98: BLOCK 1 ;TEMP STORE FOR N1
S80.99: BLOCK 1 ;TEMP. STORE FOR PTR
S81.98: BLOCK 1
S85: BLOCK 1
S85.80: BLOCK 1 ;CONVERT MONTH,DAY,YR,TENS AND UNITS OF # RECS.
S85.81: BLOCK 1 ;PUT OUT SLASH
S85.90: BLOCK 1 ;DEPOSIT 3 SPACES
S85.95: BLOCK 1 ;PUT OUT NAME OR RPN
S85B: BLOCK 1 ;PTR TO OUTPUT BFR
S85C: BLOCK 1 ;LOCN OF USER DICT
S85A: BLOCK 1 ;ITEM #
S85Y: BLOCK 1 ;YEAR
S85M: BLOCK 1 ;MONTH
INTERN SK1,SK2,SK3,SK4,SK5,SK6
INTERN SK7,SK8,SK9,SK10,SK11,PK1
INTERN PK2,PK3,PK4,PK5,PK6,PK7
INTERN PK8,PK9,PK10,PK11,PK12,PK13
INTERN PK14,PK15,PK16,PK17,PK18,PK19
INTERN PK20,PK21,PK22,PK23,PK24,PK25
INTERN PK26,PK27,PK28,PK29,PK30,PK31
INTERN PK32,PK33,PK34,PK35,PK36,PK37
INTERN PK38,PK39,PK40,T48,T49,T49X,JWSPDL
INTERN SPARE,VEND
SUBTTL; STRING KRAPPIES
SK1: BLOCK 1; S54 POINTER TO LAST 'IF'
SK2: BLOCK 1; S54 POINTER TO LAST QUOTE-MARK
SK3: BLOCK 1; S54 INDEX OF BYTE BEFORE LAST 'IF'
SK4: BLOCK 1; S54 OUTPUT-POINTER HIDEOUT
SK5: BLOCK 1; S54 OUTPUT-BYTE-COUNT HIDEOUT
SK6: BLOCK 1; S52 ZERO IF NULL LINE
SK7: BLOCK 1; S52 POINTER TO LAST NON-BLANK BYTE
SK8: BLOCK 1;
SK9: BLOCK 1;
SK10: BLOCK 1;
SK11: BLOCK 1 ; XWD 41000,SK11;
BLOCK 4;
SUBTTL; PROCESSOR KRAPPIES
PK1: BLOCK 1; P51 B1-REG. HIDEOUT
PK2: BLOCK 1; P51 B-REG. HIDEOUT
PK3: BLOCK 1; P51 B2-REG. HIDEOUT
PK4: BLOCK 1; P51 DIGITS TO LEFT OF DOT(SANS LEADING ZEROES)
PK5: BLOCK 1; P51 DIGITS TO RIGHT OF DOT
PK6: BLOCK 1; P51 NR. OF DIGITS
PK7: BLOCK 1; P55 BYTE-PTR. HIDEOUT
PK8: BLOCK 1; P56,P57 ADDRESS OF TREE TRUNK
PK9: BLOCK 1;
PK10: BLOCK 1; P60,P64 HEIGHT OF TREE
PK11: BLOCK 1; P60 DESCRIPTOR HIDEOUT
PK12: BLOCK 1; P41,P44 DITTO
PK13: BLOCK 1; P41 BYTE-POINTER HIDEOUT
PK14: BLOCK 1; P40 DESCRIPTOR HIDEOUT
PK15: BLOCK 1; P39 S/MAGNITUDE OF ROV INCREMENT
PK16: BLOCK 1; P39 EXPONENT OF INC
PK17: BLOCK 1; P39 SIGN OF INC.
PK18: BLOCK 1; SP17/18 COMPARATOR FOR MAX/MIN
PK19: BLOCK 1; V1 TYPE OF RHS
PK20: BLOCK 1; V1 S/MAG. OF RHS
PK21: BLOCK 1; V1 EXP. OF RHS
PK22: BLOCK 1; P73 PART INDEX
PK23: BLOCK 1; P73 PART INDEX
PK24: BLOCK 1;
PK25: BLOCK 1; V2,X51 CELL REQUIREMENTS
PK26: BLOCK 1;
PK27: BLOCK 1; V2 USED VARIOUSLY
PK28: BLOCK 1;
PK29: BLOCK 1; P71 PTR. TO FOR-CLAUSE
PK30: BLOCK 1; P71
PK31: BLOCK 1; P71
PK32: BLOCK 1; P71
PK33: BLOCK 1; P71
PK34: BLOCK 1; P71
PK35: BLOCK 1; X52 1 TO ADVANCE STEP
PK36: BLOCK 1; P38 OBJECT-OF-DISCOURSE DESCRIPTOR
PK37: BLOCK 1;
PK38: BLOCK 1;
PK39: BLOCK 1; V3
PK40: BLOCK 1; V3
SUBTTL T48,T49,T49X -- SCRATCH TABLES
; T48 IS USED VARIOUSLY FOR FORMULAS, ARRAYS, ...
T48: BLOCK 13;
; T49 IS USED MAINLY FOR ARRAYS - CONTAINS HEADERS
T49: BLOCK 13;
; T49X LIKE T49 BUT CONTAINS PREDECESSORS
T49X: BLOCK 13;
BLOCK 10; T48 MAY REQUIRE 40 SLOTS AT TIMES!
SUBTTL JWSPDL -- PDP-6 PUSHDOWN STACK
INTERNAL T61
T61: BLOCK 1
JWSPDL: BLOCK 24;
SPARE:
INTERNAL S62,S61,ERR,S78,S83,S84,S81,S76,S77
INTERNAL S80,P91,P79,P83,P84,P85,P90,P94
EXTERNAL P93A,P92A
INTERNAL P92,P93
EXTERNAL S62X,S61X,ERRX,S78A,S83A,S84A,S81A,S76A,S77A
EXTERNAL S80A,P91A,P79A,P83A,P84A,P85A,P90A,P94A
SUBTTL ENTRIES FOR JSR ROUTINES
P92: BLOCK 2
P93: BLOCK 2
S61: BLOCK 2;
S62: BLOCK 2;
ERR: BLOCK 2;
S78: BLOCK 2
S83: BLOCK 2
S84: BLOCK 2
S81: BLOCK 2
S76: BLOCK 2
S77: BLOCK 2
P91: BLOCK 2
P79: BLOCK 2
P83: BLOCK 2
P84: BLOCK 2
P85: BLOCK 2
P90: BLOCK 2
P94: BLOCK 2
S80: BLOCK 2
BLOCK 20
SUBTTL; USER'S BLOCK
DEFINE U(P)<INTERN P
P: BLOCK 1>
U(INTENT);
USER0=INTENT ;***FIRST LOC OF USER AREA
U(SEQ);
U(INITIALS);
U(JOBNO);
U(PAGNO);
U(ONTIME);
U(COMTIM);
U(SPARE1);
U(SPARE2);
U(SPARE3);
U(SPARE4);
U(SPARE5);
U(RISIG)
U(UBUF);
U(ME);
U(RETURN);
U(WIDTH)
U(SIZE)
U(SPACE);
U(LINE);
U(USIZE);
U(UTIME);
U(UUSERS);
U(UMIN);
U(UMIN1);
U(USEC);
U(UCR);
U(UA1);
U(UA);
U(UA2);
U(UB1);
U(UB);
U(UB2);
U(UACL);
U(UDS);
U(UPS);
U(UCP);
U(UCC);
U(U0)
U(U1);
U(U2);
U(U3);
U(U4);
U(U5);
U(U6);
U(U7);
U(U8);
U(FPDL);
U(LEVEL)
U(US0);
BLOCK 21;
U(US1);
BLOCK 26;
U(US2);
BLOCK 26;
U(US3);
BLOCK 5;
U(US4);
BLOCK 10;
U(US5);
U(US6);
U(US7);
U(UP0);
U(UP1);
U(UP2);
U(UP3);
U(UP4);
U(UP5);
U(UP6);
U(UP7);
U(UP8);
U(UP9);
U(UP10);
U(UP11);
U(UP12);
BLOCK 12;
U(UX1);
U(UX2);
U(UX3);
U(UX4);
U(TRUE);
BLOCK 1
U(FALSE);
BLOCK 1
U(PARTS);
BLOCK 1
U(FORMS);
BLOCK 1
U(MODE);
U(BASE)
U(JPDL);
U(JD);
U(U24);
U(U25);
U(CPI);
U(CSI);
U(CSA);
U(UDF1);
U(UDF2);
U(UBFR);
U(UFILE);
U(UKEY);
U(UNAME);
U(UITEM);
U(V);
BLOCK ^D103;
VEND: BLOCK INTENT+^D1023-.;
SYN RISIG,RIF;
INTERN LEND,PH1C,PH2C,PH3C,OPENB
LEND: END START