--- /dev/null
+/8 COMMAND DECODER FOR OS/8 MONITOR
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/COPYRIGHT (C) 1974, 1975, 1977 BY DIGITAL EQUIPMENT CORPORATION
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
+/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
+/CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
+/FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
+/
+/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
+/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
+/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
+/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
+/
+/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
+/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
+/DIGITAL.
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+\f/APRIL 1977 RL/EF/HJ/SR
+
+/ABSTRACT--
+/COMMAND DECODER (CD) ACCEPTS TTY INPUT AND INTERPRETS
+/THAT INPUT AS A LIST OF OPTIONS AND FILE SPECIFICATIONS
+/FOR OS/8 CUSPS. TABLES ARE SETUP INDICATING THE SPECIFIED
+/FILES AND OPTIONS.
+/THIS VERSION OF CD IS CAPABLE OF RUNNING OS/8 BATCH.
+/MODIFICATIONS TO INITIALIZATION CODE HAVE BEEN MADE TO
+/ALLOW THIS.
+
+
+ DCB=7760
+ SHNDLR=7607
+ USERFG=40 /LOCATION IN MAIN OS/8 ASSEMBLY - VOLATILE
+ T1=41 /DITTO
+ MCDREC=51 /ALSO PRETTY VOLATILE
+ MOFILE=7600
+ MIFILE=7617
+ MPARAM=7643
+ FIELD 0 /JUSTINCASE
+
+ CDVERSION=6501 /5A
+ ODTVERSION=6401 /4A
+\f/V3 CHANGES TO CD:
+
+/1. FIXED LOTS OF BUGS
+/ A:B:C IS ILLEGAL
+/ 15-BIT = OPTION DOESN'T DESTROY ALTMODE BIT
+/2. ADDED ? SUPPORT IN SPECIAL MODE
+/3. ALLOWED SPECIAL MODE UNDER BATCH
+/4. REMOVED DCC CODE
+/5. ^U, RO TO BOL, AND LF ALL REPRINT *
+/6. VERSION # AT LOC ZERO
+/7. DON'T LOAD HANDLERS FOR OUTPUT DEVICE
+/8. CHANGED _ TO < STANDARD
+
+/V3 CHANGES TO ODT
+
+/1. REMOVED DCC CODE
+/2. FIXED CORE SIZE ROUTINE
+/3. ALLOWED SOFTWARE CORE SIZE
+/4. MODIFIED 'GO' COMMAND SO THAT IT DOESN'T RESTORE TRAP
+/ LOCATION TO UNMODIFIED VALUE
+/5. FIXED BUG RE: JMS'S OUT OF FIELD WITH MAGIC LOCATION SET
+/6. TURN OFF INTERRUPTS ON BREAKPOINT
+
+/CHANGES AFTER FIELD TEST RELEASE:
+
+/1. FIXED BUG RE FILE LENGTHS GT 2047 BLOCKS
+
+/MAINTENANCE RELEASE:
+
+/ NO CHANGES
+
+/V3D CHANGES:
+
+/CHANGED FORMAT OF VERSION NUMBERS
+\f *200
+CD, JMP I NUMBER /EXECUTED IN SYSGEN
+NUM, JMP I T
+ANALYZ, TAD [BEGLN-1
+ DCA XR
+ TAD I XR
+ SNA
+ JMP NOBKAR
+ TAD [-"<
+ SZA CLA
+ JMP .-5
+ CLA CMA
+NOBKAR, DCA OUTSW
+ TAD [BEGLN-1
+ DCA LXR
+BEGGRP, TAD OUTSW
+ SNA CLA
+ TAD BEGDIF /DIFF BETWEEN INPUT & OUTPUT AREAS
+ TAD [MOFILE-1
+ DCA CLXR
+ STA
+ DCA DVFLAG
+ DCA DEV1
+FILLP1, DCA DEV2
+FILLP, JMS I [GNAME
+ TAD ["A-": /AC CONTAINED DELIM - "A
+ SNA CLA
+ JMP DEVNAM
+ JMS I [ASSIGN
+ TAD OUTSW
+ SNA CLA
+ TAD LIMDIF /DIFF BETWWEN END OF OUTPUT & INPUT AREAS
+ TAD OUTLIM /END OF OUTPUT AREA
+ TAD CLXR
+ SMA CLA
+ JMP CDER1
+ TAD OUTSW
+ SNA CLA
+LKUPSW, JMP INFILE /ZEROED IF IN "SPECIAL DECODE" MODE
+ CDF 10
+ TAD DVICE
+ DCA I CLXR
+ TAD NAME1
+ DCA I CLXR
+ TAD NAME2
+ DCA I CLXR
+ TAD NAME3
+ DCA I CLXR
+ TAD NAME4
+CDSKP, SKP
+INFILE, JMS I [LOOKUP
+ DCA I CLXR
+DLOOK, CDF 0
+ STA
+ DCA DVFLAG
+ TAD DELIM
+ SNA
+ JMP CDOVER
+ TAD [-"[
+ SNA
+ JMP I [OLENGT
+ TAD ["[-",
+ SNA
+ JMP FILLP
+ TAD [",-"<
+ SNA
+ JMP BKAROW
+ TAD ["<-"=
+ SZA CLA
+ JMP I [CDER2
+EQUAL, DCA NUMFUJ
+ JMS NUMBER
+ DCA I [MPARAM+3
+ CLA CLL CML RAR
+ AND I [MPARAM-1 /PRESERVE ALTMODE
+ TAD HIORD
+ DCA I [MPARAM-1
+ JMP DLOOK
+\fBKAROW, ISZ OUTSW
+ JMP I [CDER2
+ JMP BEGGRP
+DEVNAM, TAD NAME1
+ DCA DEV1
+ ISZ DVFLAG
+ JMP I [CDER2 /CATCHES A:B:
+ TAD NAME2
+ JMP FILLP1
+CDOVER, TSF
+ JMP .-1 /LET PRINTER QUIET DOWN
+ TCF /AND CLEAR FLAG
+ CDF CIF 10
+ TAD TMONIT
+ DCA I [200 /RESTORE "MONITO"
+ TAD TUSRFG
+ DCA I [USERFG /RESTORE "USER FLAG"
+ TAD TFPUTX /LOAD "USER CALLING FIELD" INTO AC
+ JMP I CD /RETURN - MONITOR RESTORES CORE IF NECESSARY
+NUMBER, 4000 /USED BY SYSGEN
+ TAD CDSKP
+ DCA NUMADD /SET NUMADD TO EITHER "SKP" OR "TAD NUM"
+ DCA HIORD
+NUMLP, DCA NUM
+ JMS NUMTST /INTO PAGE 0 FOR RANGE TEST
+ SNL
+ JMP EONUM
+ DCA T
+ CLA CLL CMA RTL
+ DCA DELIM
+ TAD NUM
+ROTLP, CLL RAL
+ DCA NUMX
+ TAD HIORD
+ RAL
+ SPA
+ JMP I [CDER2
+ DCA HIORD
+ TAD NUMX
+ ISZ DELIM
+ JMP ROTLP
+NUMADD, TAD NUM /SKP IF OCTAL
+ TAD NUM
+ TAD T
+ JMP NUMLP
+EONUM, TAD ["0
+ DCA DELIM
+ TAD NUM
+ CDF 10
+ JMP I NUMBER
+\fCDER1, JMS I [PRMESG
+ TEXT /TOO MANY FILES/
+\f IFZERO .&400 <*400>
+ASSIGN, 0
+ TAD CLXR
+ AND DVFLAG
+ TAD OUTLIM
+ SMA SZA CLA /CHECK FOR OUTPUT OR FIRST INPUT
+ JMP ASNORM /IF DEVICE WAS SPECIFIC, OR IF WE ARE ON THE INPUT SIDE,
+ /PROCEED NORMALLY
+ TAD NAME1
+ SNA CLA
+ JMP ASGNST
+ TAD DFLTNM+1
+ DCA DEV2
+ TAD DFLTNM
+ DCA DEV1
+ASNORM, TAD DEV1
+ DCA AS+1
+ TAD DEV2
+ DCA AS+2
+ TAD OUTSW
+ SNA CLA /DON'T LOAD HANDLER IF WE ARE ON OUTPUT SIDE OF "_"
+ TAD NAME1
+SPKLG1, SNA CLA /OR IF THERE IS NO FILE NAME TO LOOK UP
+ TAD GETHND /GETHND=11 NORMALLY, 0 IF IN "SPECIAL DECODE" MODE
+ IAC
+ DCA AS
+ TAD [1401 /ALLOW TWO PAGE HANDLERS
+ DCA ASADR
+ CIF 10
+ JMS I [200
+AS, 0
+ 0
+ 0
+ASADR, 1401
+ JMP I [CDER0
+ TAD AS+2
+ASGNST, DCA DVICE
+ JMP I ASSIGN
+GNAME, 0
+ DCA NAME1
+ DCA NAME2
+ DCA NAME3
+ DCA NAME4
+ TAD [NAME1
+ DCA NMBASE
+ CLA CMA
+ DCA PERDSW
+ DCA NAMECT
+GTNMLP, JMS I [GCH
+ DCA DELIM
+ TAD DELIM
+ TAD [-"?
+ SZA
+ TAD ["?-"*
+ SNA
+STARSW, JMP I [CDER2 /"JMP STARNM" IF "SPECIAL DECODE" MODE
+ TAD ["*-".
+ SNA CLA
+ JMP PERIOD
+ JMS I [DECODE
+ JMP I GNAME
+\fSTARNM, CLA /THIS CODE HANDLES *'S AND ?'S CORRECTLY
+ TAD DELIM
+ AND [77
+ DCA DELIM
+ TAD NAMECT
+ TAD [-6
+ SMA CLA
+ JMP GTNMLP
+ TAD NAMECT
+ CLL RAR
+ TAD NMBASE
+ DCA TT
+ TAD DELIM
+ SZL
+ JMP .+4
+ RTL
+ RTL
+ RTL
+ TAD I TT
+ DCA I TT
+ ISZ NAMECT
+ JMP GTNMLP
+PERIOD, TAD NAME1
+ SZA CLA
+ ISZ PERDSW
+ JMP I [CDER2
+ ISZ NMBASE
+ TAD [4
+ JMP GTNMLP-1
+LOOKUP, 0
+ DCA LNAME
+ TAD NAME1
+ SNA CLA
+ JMP LKUPST
+ JMP EXT1
+LKUPLP, DCA LNAME
+ TAD AS+2
+ CIF 10
+ JMS I [200
+ 2
+LNAME, 0 /NAME1
+LENGTH, 0
+ JMP LFAILD
+ TAD LENGTH
+ CLL
+ TAD [400
+ SNL
+ CLA
+ CLL RTL
+ RTL
+ AND [7760
+LKUPST, CDF 10
+ TAD DVICE
+ DCA I CLXR
+ TAD LNAME
+ JMP I LOOKUP
+\fLFAILD, TAD NAMECT
+ SNA CLA /WAS THERE AN EXPLICIT EXTENSION?
+ TAD DEFALT /NO - WAS THERE A DEFAULT EXTENSION?
+ SNA CLA
+ JMP I [CDER3 /YES OR NO - FILE NOT FOUND
+ ISZ NAMECT /NO AND YES - SET FLAG TO FAIL NEXT TIME
+ JMP EXT2 /ZERO OUT THE EXTENSION AND TRY AGAIN
+CDER3, JMS I [PRNAME
+ JMS I [PRMESG
+ TEXT / NOT FOUND/
+\f IFZERO .+200&1000 <*600>
+ 0 /V3 [FREE LOC]
+SLSHCH, 0
+/V3 SNA
+/V3 JMP I [CDER2
+ DCA DELIM
+ TAD [MPARAM-1
+ DCA T
+ JMS I [DECODE
+ JMP I [CDER2
+ SZL
+ TAD [32
+ CMA STL /THE FOLLOWING TURNS ON THE CORRECT OPTION BIT
+ DCA TT
+SLSHLP, SZL
+ ISZ T
+ RAR
+ SNL
+ ISZ TT
+ JMP SLSHLP
+ DCA TT
+ CDF 10
+ TAD TT
+ CMA
+ AND I T
+ TAD TT
+ DCA I T
+ CDF 0
+ JMP I SLSHCH
+DECODE, 0
+ TAD DELIM
+ TAD [-"9-1
+ CLL
+ TAD ["9+1-"0
+ SZL
+ JMP DCDYES
+ TAD ["0-"Z-1
+ CLL CML
+ TAD ["Z-"A+1
+ SNL
+DCDYES, ISZ DECODE
+ JMP I DECODE
+CDER0, TAD DEV1
+ JMS I [PRWD
+ TAD DEV2
+ JMS I [PRWD
+ JMS I [PRMESG
+ TEXT / DOES NOT EXIST/
+\f
+RESTRT, JMS I [CRLF
+ CDF 10
+ TAD [MOFILE-1
+ DCA XR
+ TAD [-47
+ DCA T
+ DCA I XR /ZERO OUT THE COMMAND DECODER OUTPUT AREA
+ ISZ T
+ JMP .-2
+ CDF 0
+ JMP I [GLINE
+GCH, 0
+ TAD I LXR
+ TAD [-240
+ SNA
+ JMP GCH+1
+ TAD [240-"/
+ SNA
+ JMP SLASH
+ TAD ["/-"(
+ SNA
+ JMP OPENP
+ TAD ["(
+ JMP I GCH
+SLASH, TAD I LXR
+ JMS I [SLSHCH
+ JMP GCH+1
+OPENP, TAD I LXR
+ TAD [-")
+ SNA
+ JMP GCH+1
+ TAD [")
+ JMS I [SLSHCH
+ JMP OPENP
+OLENGT, TAD OUTSW
+ AND NAME1 /[N] IS ONLY LEGAL ON THE OUTPUT SIDE OF THE "_"
+ SNA CLA /AND ONLY AFTER A FILE NAME
+ JMP I [CDER2
+ TAD [-4
+ TAD CLXR
+ DCA NMBASE
+ CLA CLL CML RTL
+ DCA NUMFUJ /SET "NUMBER" TO ACCEPT DIGITS 8 AND 9
+ TAD OLFUDJ /LOAD FUDGE SO THAT "NUMBER" WILL BE DECIMAL
+ JMS I [NUMBER
+ CLL RTL
+ RTL
+ AND [7760
+ TAD I NMBASE
+ DCA I NMBASE
+ CDF 0
+ TAD DELIM
+ TAD [-"] /IS THERE A CLOSING BRACKET?
+ SNA /IF NOT, "DLOOK" ROUTINE WILL DETECT IT
+ JMS I [GCH
+ DCA DELIM
+ JMP I [DLOOK
+OLFUDJ, NUM&177+1570
+
+CDER2, CLA
+ JMS I [PRMESG
+ TEXT /ILLEGAL SYNTAX/
+\f IFZERO .&1000 <*1000>
+ /TELETYPE INPUT ROUTINE FOR COMMAND DECODER
+GLINE, TAD (252 /SETS 1177=252 FOR * IN MESSAGE
+ JMS I PRINT
+ DCA RBFLAG
+ TAD [BEGLN-1
+ DCA LXR
+CHLOOP, 6031 /KSF
+ JMP CHLOOP
+ TAD [200
+ 6034 /KRS
+ DCA NAME1
+ 6032 /KCC
+ TAD [SPADR-1
+ DCA XR
+DSPCHL, TAD I XR
+ SZA
+ TAD NAME1
+ SNA CLA
+ JMP I XR
+ JMP DSPCHL
+SPADR, -225;JMP CTRLU
+ -215;JMP CARRET
+ -377;JMP RUBOUT
+ -375;JMP ALTMOD /V3D MODIFIED BY SET
+ -376;JMP ALTMOD /V3D MODIFIED BY SET
+ -233;JMP ALTMOD
+ -200;JMP CHLOOP
+ -217;JMP CHLOOP /^O
+ -"_;JMP LESSTN
+ -212;JMP LFEED
+ -203;JMP CTRLC /MUST BE LAST - SEE CLRLIN CODE
+ 0
+ JMS PRNT
+CINSRT, TAD NAME1
+ DCA I LXR
+ TAD LXR
+ TAD [-EOBUFR+2
+ SPA CLA
+ JMP CHLOOP
+ JMS CRLF
+ JMP I [CDER2
+\fCARRET, JMS CRLF
+CLFINI, DCA I LXR
+ JMP I [ANALYZ
+LESSTN, JMS PRNT
+ TAD ["<
+ JMP CINSRT+1
+CTRLC,
+CTRLU, TAD [336
+ JMS I PRINT
+ TAD NAME1
+ TAD [100
+CLRLIN, JMS I PRINT
+ JMS CRLF
+ TAD I XR
+ SZA CLA
+ JMP GLINE
+ CDF 10
+ CLA CMA
+ DCA I [7700
+ TSF
+ JMP .-1
+ JMP I [7605 /7605=CDF CIF 10
+CRLF, 0
+ TAD [215
+ DCA NAME1
+ JMS PRNT
+ TAD [212
+ JMS I PRINT
+ JMP I CRLF
+ALTMOD, TAD [244
+ DCA NAME1
+ CLA CLL CML RAR
+ CDF 10
+ DCA I [MPARAM-1
+ CDF 0
+ JMS PRNT
+ JMP CLFINI
+\f/*** LOCATIONS ON THIS PAGE ARE MODIFIED BY SET
+/SEE SET FOR DETAILS. DO NOT CHANGE.
+
+RUBOUT, TAD LXR
+ TAD [1-BEGLN
+ SNA CLA
+ JMP RBSPCL
+ TAD [334
+ ISZ RBFLAG
+ JMS I PRINT
+ CLA CMA
+ DCA RBFLAG
+ TAD LXR
+ DCA T
+ TAD I T
+ JMS I PRINT
+LBCKUP, CLA CMA
+ TAD LXR
+ JMP CHLOOP-1
+RBSPCL, ISZ RBFLAG
+ JMP CLRLIN+1
+ TAD [334
+ JMP CLRLIN
+PRNT, 0
+ ISZ RBFLAG
+ JMP .+3
+ TAD [334
+ JMS I PRINT
+ DCA RBFLAG
+ TAD NAME1
+ JMS I PRINT
+ JMP I PRNT
+LFEED, JMS CRLF
+ DCA I LXR
+ TAD [BEGLN-2
+ DCA XR
+ TAD I XR
+ SNA
+ JMP LBCKUP
+ JMS I PRINT
+ JMP .-4
+
+ IFNZRO RUBOUT-1131 <_ERROR_>
+\f *1200 /INITIALIZATION - STORED OVER BY LINE BUFFER
+ BEGLN=. /LINE BUFFER
+CDINIT, DCA TFPUTX
+ CDF 10
+ CLA IAC
+ TAD I [200
+ DCA TMONIT /SAVE AWAY MONITOR CALL ADDRESS SINCE WE CALL
+ TAD I [USERFG /THE MONITOR RECURSIVELY, LIKEWISE SAVE
+ DCA TUSRFG /THE "USER FLAG" AND THE FIELD WE WERE CALLED FROM
+ TAD I [T1 /FETCH THE USERS ARGUMENT
+ DCA DEFALT /STORE IN THE DEFAULT EXTENSION WORD
+ DCA I [7 /ZERO "DIRECTORY SEGMENT IN CORE" KEY
+ CDF 0
+ CIF 10
+ JMS I [200
+ 13 /RESET ALL HANDLERS
+ 0 /BUT NOT OUTPUT FILES
+ TAD DEFALT
+ TAD M5200
+ SZA CLA /IS THIS A REQUEST FOR A "SPECIAL DECODE"?
+ JMP CDCONT /NO
+ TAD ALTLIM
+ DCA OUTLIM /YES - SET UP ALL THE PROPER LOCATIONS
+ TAD ALTDF1
+ DCA LIMDIF /TO YIELD 1 OUTPUT FILE AND 5 INPUT FILES
+ TAD ALTDF2
+ DCA BEGDIF /ALL OF WHICH ARE 5-WORD <DEVICE,NAME> ENTRIES
+ DCA I PLKUPS
+ TAD STARJM
+ DCA I PSTARS /AND ALLOW * AS A FILE OR EXTENSION NAME
+ DCA DEFALT /NO DEFAULT EXTENSION IN "SPECIAL" MODE
+ TAD CCLA /STOPS FETCHES IN SPECIAL MODE
+ DCA I PSPKG1 /NO HANDLER FETCHES NECESSARY EITHER SINCE NO LOOKUPS
+CDCONT, TAD I PRWD /SEE IF BATCH FLAG IS UP
+ RAL
+ SPA CLA /IF YES, GO TO PAGE0 CODE
+ JMP TT /TT ETC. IS ONCE-ONLY CODE
+ JMP I CDRST
+\fCDRST, RESTRT+1
+ /CONSTANTS NECESSARY TO SUPPORT "SPECIAL DECODE" MODE
+M5200, -5200
+ALTLIM, 1-MOFILE-5
+ALTDF1, MOFILE+5-MPARAM+5
+ALTDF2, 5
+PLKUPS, LKUPSW
+STARJM, STARNM&177+5200 /"JMP STARNM"
+PSTARS, STARSW
+CCLA, CLA
+PSPKG1, SPKLG1
+\f *1314
+ EOBUFR=.
+PRMESG, 0
+ TAD I PRMESG
+ JMS PRWD
+ TAD I PRMESG
+ ISZ PRMESG
+ AND [77
+ SZA CLA
+ JMP PRMESG+1
+ JMP I [RESTRT
+PRWD, 7777
+ DCA T
+ TAD T
+ RTR
+ RTR
+ RTR
+ JMS PCHAR
+ TAD T
+ JMS PCHAR
+ JMP I PRWD
+PCHAR, 0
+ AND [77
+ SNA
+ JMP I PCHAR /IGNORE NULLS
+ TAD [240
+ AND [77
+ TAD [240
+ JMS TYPE
+ JMP I PCHAR
+PRNAME, 0
+ TAD NAME1
+/ SNA /WOULD LIKE TO FIND ROOM FOR THESE 2 LOCS
+/ JMP I [CDER2
+ JMS PRWD
+ TAD NAME2
+ JMS PRWD
+ TAD NAME3
+ JMS PRWD
+ TAD NAME4
+ SNA CLA
+ JMP I PRNAME
+ TAD [256
+ JMS PCHAR
+ TAD NAME4
+ JMS PRWD
+ JMP I PRNAME
+TYPE, 0
+ JMP .+3
+ TSF
+ JMP .-1
+ TLS
+ CLA
+ TAD [7000
+ DCA TYPE+1
+TYPRET, JMP I TYPE
+ IFNZRO TYPRET-1377 <BATCHX,ZQWE>
+\f *4001 /PROG TO WRITE CD AND ODT ONTO NEW SYSTEM DEVICE
+ /4000=JMS SYSSWP TO SWAP PGS 6600 AND 7600
+ TAD I (7777 /SET TO PROPER RECORD FOR FIELD 1 STUFF
+ DCA F1STUF
+ JMS I SYSHND
+ 4600
+ 0
+ MCDREC
+ JMP CERR
+ JMS I SYSHND
+ 5011
+ 0
+ ODTREC
+ JMP CERR
+ JMS I SYSHND
+ 0110 /READ IN UPPER PG 7600
+ 7600
+F1STUF, 0
+ JMP CERR
+ JMP I .+1
+ 7605 /START HER UP
+CERR, TAD .+3
+ DCA 4001
+ JMP 4000 /RESWAP AND HALT
+ HLT
+SYSHND, 7607
+ PAGE
+\f *0
+ CDVERSION
+ HLT /POWER FAIL RESTART PROTECTION
+NUMTST, 7777
+ JMS I [GCH
+ CMA
+ TAD NUMFUJ
+ TAD ["8 /TEST INPUT CHARACTER FOR RANGE
+ CLL CMA /0-7 IF NUMFUJ=0
+ TAD [10 /0-9 IF NUMFUJ=2
+ TAD NUMFUJ
+ JMP I NUMTST
+ *15
+LXR, 0
+XR, 0
+CLXR, 0
+T, CDINIT
+TT, CDF 0 /***GETS SET TO CDF BATCH
+HIORD, TAD I DVICE /CHECK TO SEE IF BOS IS REALLY THERE
+NUMX, TAD OUTSW /IF NOT, SIGNAL ERROR
+RBFLAG, SNA CLA
+NAME1, JMP NAMECT /IT'S O.K.....PROBABLY!
+NAME2, CDF 0 /BAD. SIGNAL ERROR TO MONITOR
+NAME3, ISZ I NUMTST
+NAME4, JMP I [7605 /AND RESTART BATCH MONITOR
+NAMECT, CIF CDF 0 /*****GETS ALTERED******
+NMBASE, JMP I .+1 /START UP IN CD AREA OF BATCH
+DEV1, RESTRT+1 /***GETS ADDRESS OF CD AREA
+DEV2, 0
+PERDSW, 0
+NUMFUJ, 0
+DVFLAG, 0
+DELIM, 0
+OUTSW, 0
+DEFALT, 0
+DVICE, 0
+DFLTNM, 0423;1300 /DSK
+BEGDIF, MIFILE-MOFILE
+LIMDIF, MIFILE-MPARAM+2
+OUTLIM, 1-MIFILE
+GETHND, 11
+TMONIT, 0
+TUSRFG, 0
+TFPUTX, 0
+EXT1, TAD NAME4
+ DCA NAMECT /REMEMBER TYPED EXTENSION
+ TAD NAMECT
+ SNA
+ TAD DEFALT /SUBSTITUTE DEFAULT IF ZERO
+EXT2, DCA NAME4
+ TAD [NAME1
+ JMP I .+1
+ LKUPLP
+PRINT, TYPE
+\f FIELD 1
+ EJECT INVISIBLE ODT
+ /INVISIBLE ODT FOR OS/8 MONITOR
+ /LOADS INTO FIELD 1 NOW, BUT LOADS & EXECUTES IN FIELD 0
+ /DEFINITIONS OF MONITOR SYMBOLS - VOLATILE!
+ ODTREC=60
+ UDNAME=7741
+ MREAD=7757
+ MGET=7667
+ KMREC=7
+ MTEMP=27
+ MARG1=7740
+ JSBITS=7746
+ *200
+READ, JMS I [OCRLF
+READ5, DCA WORD
+ DCA WORD+1
+ TAD [-6
+ DCA TOTE
+REA, KSF
+ JMP .-1
+ JMS I [CTCTST
+ JMP CTRC
+ TAD [203
+ DCA TEMP
+ KCC
+ TAD TEMP
+ JMS I [TYPN
+ TAD [TABL1-1
+ DCA 10
+CHFLP, TAD I 10
+ SPA
+ JMP SEX
+ CIA
+ TAD TEMP
+ SZA CLA
+ JMP CHFLP
+ TAD 10
+ TAD [TABL2-TABL1
+ DCA TEMP
+ TAD I TEMP
+ DCA TEMP
+ CLL
+ JMP FLDTST /SEE IF FIELD SETTING IS LEGAL
+CTRC, JMS I [DUMP
+ JMP I [7605
+\fTABL1=.
+ 240
+ 212
+ 215
+ 257
+ 302
+ 307
+ 273
+ 303
+ 327
+ 336
+ 315
+ 301
+ 314
+ 304
+ 337
+ 306
+ 377
+ 253
+ 255
+ -270 /USED - SEE "SEX"
+\fEXAM, JMS TOTTST
+ JMP EX2
+ TAD WORD
+ DCA CAD
+ TAD WORD+1
+ DCA CAD+1
+EX2, JMS I [LOAD
+ CAD
+ JMS I [PNUM
+ DCA SHUT
+ JMP READ5
+SEX, TAD TEMP
+ CLL
+ TAD [10
+ SNL
+ JMP NO
+ DCA TEMP
+ CLA CLL CMA RTL
+ DCA CRL
+SROT, TAD WORD+1
+ CLL RAL
+ DCA WORD+1
+ RTL
+ RAL
+ TAD WORD
+ RAL
+ DCA WORD
+ ISZ CRL
+ JMP SROT
+ TAD WORD+1
+ TAD TEMP
+ DCA WORD+1
+ ISZ TOTE
+ JMP REA
+NO, CLA
+ TAD [277
+ JMS I [TYPN
+ JMP READ
+\fCRL, 0
+ JMS TOTTST
+ JMP I CRL
+ TAD WORD+1
+ ISZ SHUT
+ JMS I [STORE
+ CAD
+ CLA
+ JMP I CRL
+CRL1, JMS CRL
+ JMP READ
+CRL2, TAD [215
+ JMS I [TYPN
+ JMS CRL
+ JMS I [TYPN
+ ISZ CAD+1
+ NOP
+UPAR3, JMS I [TYPD
+ CAD
+ TAD [257
+ JMS I [TYPN
+ JMP EX2
+OPIN, JMS CRL
+ JMS I [LOAD
+ CAD
+ DCA CAD+1
+ TAD INDFLD
+ DCA CAD
+UPAR2, JMS I [OCRLF
+ JMP UPAR3
+SEMI, JMS CRL
+ ISZ CAD+1
+ NOP
+ JMP READ5
+\f *400
+/NOTE THAT LOCATIONS BURP,BURP+1 GET ALTERED AFTER BRKTST
+/IS EXECUTED. THEY BECOME: CDF 10; TAD I [MARG1
+BURP, JMP I .+1 /GO REDETERMINE CORE SIZE
+ BRKTST /TO MAKE ILLEGAL FIELD GIVE ?
+ DCA SAC
+ IOF
+ TAD I [MTRAD
+ DCA TRAD
+ TAD I [MTRAD1
+ DCA TRAD+1
+ TAD I [MKEEP
+ DCA KEEP
+ TAD I [MPUNN
+ DCA PUNN
+ CLA IAC
+ AND I [7700
+ DCA LINK
+ TAD I [7700
+ CDF 0
+ AND [70
+ DCA DATFLD
+ TAD DATFLD
+ DCA INDFLD
+ TAD [KMREC
+ CDF 10
+ DCA I [MGET+4
+ CLA CLL CMA RAL
+ AND I [MGET+2
+ DCA I [MGET+2 /REMOVE LOW-ORDER BIT FROM CONTROL WORD
+ CDF 0
+ TAD KEEP
+ JMS I [STORE
+ TRAD
+ TAD TRAD+1
+ IAC
+ DCA GAME+1
+ TAD TRAD
+ DCA GAME
+ TAD KEEP
+ DCA INST
+ JMS I [IOTTST
+ SKP
+ JMP JMPLIP
+ TAD TRAD
+ DCA CAD
+ TAD TRAD+1
+ DCA CAD+1
+ JMS I [EFFADR
+ TAD CAD
+ DCA FROG
+ TAD CAD+1
+ DCA FROG+1
+JMPLIP, JMS I [CTCTST
+ JMP I [7605
+ CLA
+ JMP I [LIP
+\fCTCTST, 0
+ TAD [200
+ KSF
+ STA
+ KRS
+ TAD [-203
+ SZA
+ ISZ CTCTST
+ JMP I CTCTST
+
+OCRLF, 0
+ TAD [215
+ JMS I [TYPN
+ TAD [212
+ JMS I [TYPN
+ CLA CMA
+ DCA SHUT
+ JMP I OCRLF
+TRAP, JMS TOTTST
+ TAD [SHNDLR
+ TAD WORD+1
+ DCA TRAD+1
+ TAD WORD
+ DCA TRAD
+ TAD [7000
+ DCA I [SHNDLR
+ TAD [4
+ DCA WORD+1
+ TAD [UDNAME-MPUNN-1
+ DCA TEMP
+ TAD [BRKCOD-1
+ DCA 10
+ TAD [UDNAME-1
+ DCA 11
+ TAD I 10
+ CDF 10
+ DCA I 11
+ CDF 0
+ ISZ TEMP
+ JMP .-5
+ TAD I [JSBITS
+ RTR
+ SZL CLA
+ TAD [5
+ CDF 10
+ TAD I [J7600
+ DCA I [J7600 /CHANGE JMP 7600 TO JMP 7605 IF ODT AREA NOT USED
+ CDF 0
+ TAD I [JSBITS
+ DCA JSTEMP /SAVE JSBITS BEFORE SETTING BRKPT
+ TAD [CIF 10
+ JMS I [STORE
+ WORD
+ ISZ WORD+1
+ TAD [JMP I 6
+ JMS I [STORE
+ WORD
+ ISZ WORD+1
+ TAD [UDNAME
+ JMS I [STORE
+ WORD
+ TAD JSTEMP
+ DCA I [JSBITS /RESTORE JSBITS
+ JMP I [READ
+SUBT, CML
+ADD, TAD WORD+1 /MODIFY CURRENT LOCATION POINTER
+ SNA
+ IAC /1 IS DEFAULT VALUE
+ SZL /+ OR -?
+ CIA /-
+ TAD CAD+1
+ DCA CAD+1
+ JMP I [UPAR2 /AND DISPLAY LOC AND CONTENTS
+\f *600 /MONITOR ENTERS ODT HERE
+LIP, HLT /ERROR. AT INIT, THE CODE AT 600
+ JMP I .+1 /IS CHANGED TO: ISZ PUNN;
+TTYTST, INIT /JMP XCONT; TSF
+ JMP TTYOFF
+LIPTYP, JMS I [TYPD
+ TRAD
+ TAD P250
+ JMS I [TYPN
+ TAD LINK
+ TAD [260
+ JMS I [TYPN
+ TAD [273
+ JMS I [TYPN
+ TAD SAC
+ JMS I [PNUM
+ JMP I [READ
+JUMP, JMS TOTTST /TEST FOR 'G' WITH NO ADDRESS
+ JMP I PNO
+ TAD WORD
+ DCA GAME
+ TAD WORD+1
+ DCA GAME+1
+ TAD WORD
+ DCA DATFLD
+ TAD [7000
+ DCA INST
+ DCA SAC
+ DCA LINK
+ JMP CONTX
+CONTIN, TAD WORD+1
+ CIA
+ SNA
+CONTX, CMA
+ DCA PUNN
+ DCA I [7607 /IN CASE THERE WAS NO BREAKPOINT
+ JMS I [LOAD /V3
+ TRAD /V3
+ DCA KEEP /V3
+ JMS I [OCRLF
+XCONT, TAD [JMP 4
+ JMS I [STORE
+ TRAD
+ CDF 10
+ TAD TRAD
+ DCA I [MTRAD
+ TAD TRAD+1
+ DCA I [MTRAD1
+ TAD KEEP
+ DCA I [MKEEP
+ TAD PUNN
+ DCA I [MPUNN
+ CDF 0
+ JMS I [SIM /SIMULATE THE BRKPOINTED INST HERE
+ TAD LINK
+ DCA I [MLINK
+ TAD SAC
+ DCA I [MAC
+ TAD GAME
+ TAD [CIF 0
+ DCA I [MSTCDF
+ TAD DATFLD
+ AND [70
+ TAD [CDF 0
+ DCA I [MCDF
+ TAD GAME+1
+ DCA I [MSTADR
+ JMS I [DUMP
+ TAD I [JSBITS
+ RTR
+ SZL CLA
+ JMP I [MSWITC
+ JMP I [MREAD
+\fUPAR1, JMS I [CRL
+ JMS I [EFFADR
+ JMP I [UPAR2
+EFFADR, 0
+ JMS I [LOAD
+ CAD
+ AND [177
+ DCA TEMP
+ JMS I [LOAD
+ CAD
+ AND [200
+P250, SNA CLA
+ JMP .+3
+ TAD CAD+1
+ AND [7600
+ TAD TEMP
+ DCA TEMP
+ JMS I [LOAD
+ CAD
+ AND [400
+ SNA CLA
+ JMP NOIND
+ TAD TEMP
+ DCA CAD+1
+ JMS I [LOAD
+ CAD
+ DCA TEMP
+ TAD CAD+1
+ AND P7770
+ TAD P7770
+ SZA CLA
+ JMP NOAUTO
+ ISZ TEMP
+P7770, 7770 /SPA SNA SZL CLA - NEVER SKIPS - USED TO PROTECT ISZ
+ TAD TEMP
+ JMS I [STORE
+ CAD
+NOAUTO, TAD INDFLD
+ AND [70
+ DCA CAD
+NOIND, TAD TEMP
+ DCA CAD+1
+ JMP I EFFADR
+TTYOFF, AND I 0 /WASTE SOME TIME
+ JMS I [IOTTST
+ AND I 0
+ ISZ NOUGHT
+ JMP TTYTST
+ JMP LIPTYP /IF THE TTY FLAG ISN'T UP NOW, IT'LL NEVER GO UP
+NOUGHT, 0
+\fTABL2=.
+ REA /IGNORE BLANKS
+ CRL2
+ CRL1
+ EXAM
+ TRAP
+ JUMP
+ SEMI
+ CONTIN
+ WSER
+ UPAR1
+ MASKX
+ ACX
+ LINKX
+ DATF
+ OPIN
+ INDF
+ RBOUT
+ ADD
+ SUBT
+\f IFZERO 1000&. <*1000>
+PNUM, 0
+ DCA PUNN
+ TAD [-4
+ DCA TEMP
+PN2, TAD PUNN
+ RTL
+ RAL
+ DCA PUNN
+ TAD PUNN
+ RAL
+ AND [7
+ TAD [260
+ JMS I [TYPN
+ ISZ TEMP
+ JMP PN2
+ TAD [240
+ JMS I [TYPN
+ JMP I PNUM
+TYPD, 0
+ TAD I TYPD
+ DCA TEMP
+ TAD I TEMP
+ CLL RTR
+ RAR
+ TAD [260
+ JMS I [TYPN
+ ISZ TEMP
+ TAD I TEMP
+ JMS I [PNUM
+ ISZ TYPD
+ JMP I TYPD
+TYPN, 0
+ TLS
+ TSF
+ JMP .-1
+ CLA
+ JMS I [CTCTST
+ JMP I [CTRC
+ TAD [-14 /^O?
+ SZA CLA
+ JMP I TYPN /NO
+ KCC /YES
+ JMP I [READ
+\fWSER, JMS I [OCRLF
+ TAD LIMLO
+ DCA CKT+1
+ TAD INDFLD
+ AND [70
+ DCA CKT
+WSER1, JMS I [LOAD
+ CKT
+ AND MASK
+ CIA
+ TAD WORD+1
+ SZA CLA
+ JMP WSER2
+ JMS I [TYPD
+ CKT
+ TAD [257
+ JMS I [TYPN
+ JMS I [LOAD
+ CKT
+ JMS I [PNUM
+ JMS I [OCRLF
+WSER2, TAD CKT+1
+ ISZ CKT+1
+ NOP
+ CIA
+ TAD LIMHI
+ SZA CLA
+ JMP WSER1
+ JMP I [READ
+
+ACX, TAD [SAC-LINK
+LINKX, TAD [LINK-MASK
+MASKX, TAD [MASK-DATFLD
+DATF, TAD [DATFLD-INDFLD
+INDF, TAD [INDFLD
+ DCA WORD+1
+ CLA CMA
+ DCA WORD
+ DCA TOTE
+ TAD [257
+ JMS I [TYPN
+ JMP I [EXAM
+\fBRKCOD=.
+ NOPUNC
+ *UDNAME
+ ENPUNC
+
+ DCA MARG1
+ RAL
+ RDF
+ DCA 7700
+ TAD PODT
+ DCA MGET+4
+ ISZ MGET+2 /DON'T REVERSE TAPE MOTION TO PICK UP ODT
+ CDF CIF 0
+J7600, JMP 7600
+PODT, ODTREC
+P7603, 7603
+MTRAD, 0
+MTRAD1, 0
+MKEEP, 0
+MPUNN, 0
+
+ NOPUNC
+ *BRKCOD+MPUNN-UDNAME+1
+ ENPUNC
+
+DUMP, 0
+ TAD STOFLG
+ SNA CLA
+ JMP I DUMP
+ JMS I [SHNDLR
+ 4200
+ 1400
+GREC, 0
+ HLT
+ DCA STOFLG
+ JMP I DUMP
+
+RBOUT, TAD [277
+ JMS I [TYPN
+ TAD [240
+ JMS I [TYPN
+ JMP I [READ5
+\f IFNZRO .-1200&4000 <*1200>
+SIM, 0
+ JMS IOTTST
+ JMS I [LOAD
+ FROG
+ DCA TEMP
+ TAD TEMP
+ DCA 0
+ JMS IOTTST
+ TAD [777
+ CMA
+ AND INST
+ RAL
+ CML
+ SNL SMA
+ JMP JMSJMP
+ CML RAR
+ DCA SOPR
+ TAD DATFLD
+ AND [70
+ TAD [CDF 0
+ DCA .+1
+ HLT
+ TAD LINK
+ CLL RAR
+ TAD SAC
+SOPR, HLT
+ SKP
+ ISZ GAME+1
+ DCA SAC
+ RAL
+ DCA LINK
+ RDF
+ DCA DATFLD
+ CDF CIF 0
+EOSIM, TAD 0
+ CIA
+ TAD TEMP
+EOTST, SNA CLA
+ JMP .+3
+ TAD 0
+ JMS I [STORE
+ FROG
+ JMP I SIM
+
+IOTTST, 0
+ CLA CLL CML RTR
+ TAD INST
+ SZL CLA
+ ISZ IOTTST
+ JMP I IOTTST
+\fJMSJMP, RTL
+ SZL CLA
+ JMP JMPX
+ TAD TRAD
+ DCA FROG
+ TAD GAME+1
+ DCA 0
+ CLA IAC CLL
+JMPX, TAD FROG+1
+ DCA GAME+1
+ CML RAL /PUT -LINK IN AC (0 IF JMP, 1 IF JMS)
+ JMP EOTST
+
+LOAD, 0
+ TAD I LOAD
+ JMS I [GETADR
+ NOP
+ TAD I ADR
+ CDF 0
+ ISZ LOAD
+ JMP I LOAD
+
+STORE, 0
+ DCA LOAD
+ TAD I STORE
+ JMS I [GETADR
+ ISZ STOFLG /INDICATE THAT WE'RE CHANGING THIS RECORD
+ TAD LOAD
+ DCA I ADR
+ CDF 0
+ ISZ STORE
+ JMP I STORE
+\fGETADR, 0
+ DCA ADR
+ TAD I ADR
+ DCA FADR
+ ISZ ADR
+ TAD I ADR
+ DCA ADR
+ TAD FADR
+ SNA
+ JMP CKADR
+ SPA
+ CLA
+ TAD [CDF 0
+ DCA .+1
+FADR, 0
+ ISZ GETADR
+ JMP I GETADR
+CKADR, TAD ADR
+ RAL
+ SZL SPA CLA
+ JMP FADR+1
+ CLA CLL CMA RTL
+ AND I [JSBITS
+ DCA I [JSBITS /MODIFY THE JSW TO INDICATE ODT AREA VIOLATION
+ TAD ADR
+ CLL RTL
+ RTL
+ RAL
+ AND [7
+ TAD [MTEMP+4
+ DCA GIREC
+ TAD I [GREC
+ CIA
+ TAD GIREC
+ SNA CLA
+ JMP NOREAD
+ JMS I [DUMP
+ JMS I [SHNDLR
+ 0200
+G1400, 1400
+GIREC, 0
+ HLT
+ TAD GIREC
+ DCA I [GREC
+NOREAD, TAD ADR
+ AND [377
+ TAD G1400
+ DCA ADR
+ JMP I GETADR
+\f *1400
+ /INITIALIZATION CODE TO SET UP THE "MREAD" AREA IN FIELD 0
+ /WITH THE ODT CODE TO START UP A PROGRAM
+
+INIT, TAD [MREAD-MSTADR-2
+ DCA TEMP
+ TAD [RSTCOD-1
+ DCA 10
+ TAD [MREAD-2
+ DCA 11
+ TAD I 10
+ DCA I 11
+ ISZ TEMP
+ JMP .-3
+ JMS CORE /DETERMINE CORE FIELD SIZE
+ TSF
+ JMP .-1
+ JMP I [READ
+
+BRKTST, JMS CORE /GET CORE SIZE NOW THAT WE WERE
+ TAD KLIP
+ DCA I PLIP /SETUP LOCATIONS AT 600
+ TAD KLIP+1
+ DCA I PLIP+1
+ TAD KLIP+2
+ DCA I PLIP+2
+ TAD KCDF10 /JUST BREAKPOINTED IN. THEN RESTORE
+ DCA I BURPO /LOCS AT BURP SO WE NEVER COME BACK
+ TAD KCDF10+1 /HERE AGAIN UNTIL WE'RE SWAPPED
+ DCA I BURP2
+ JMP I BURPO
+KCDF10, CDF 10
+ TAD I [MARG1 /SIMULATE LOCS AT BURP
+BURPO, BURP
+BURP2, BURP+1
+\fRSTCOD=.
+ NOPUNC
+ *MREAD-1
+ ENPUNC
+
+ SHNDLR
+ JMS I .-1
+ 1000
+ 0
+ MTEMP+4
+ HLT
+MSWITC, TAD MLINK
+ CLL RAR
+ TAD MAC
+MCDF, CDF 0
+ JMP MSTCDF
+MAC, 0
+MLINK, 0
+MSTCDF, CIF 0
+ JMP I .+1
+MSTADR, 0
+
+ NOPUNC
+ *RSTCOD+MSTADR-MREAD+2
+ ENPUNC
+\fCORE, 0
+ CDF 0
+ TAD I M1
+ AND COR70
+ SZA
+ JMP USERC
+COR0, CDF 0
+ TAD CORSIZ
+ RTL
+ RAL
+ AND COR70
+ TAD COREX
+ DCA .+1
+COR1, CDF
+ TAD I CORLOC
+COR2, NOP
+ DCA COR1
+ TAD COR2
+ DCA I CORLOC
+COR70, 70
+ TAD I CORLOC
+CORX, 7400
+ TAD CORX
+ TAD CORV
+ SZA CLA
+ JMP COREX
+ TAD COR1
+ DCA I CORLOC
+ ISZ CORSIZ
+ JMP COR0
+
+COREX, CDF 0
+ TAD CORSIZ
+ CLL RAL
+ RTL
+USERCR, CIA
+ DCA ZERO /STORE AWAY NEG OF FIRST NON-EXISTENT FIELD
+ /AT ODT'S LOCATION 0
+ JMP I CORE
+
+CORLOC, CORX
+CORV, 1400
+M1, -1
+\fCORSIZ, 1
+USERC, TAD L10
+ JMP USERCR
+L10, 10
+
+KLIP, ISZ PUNN /THESE INSTRUCTIONS GO INTO 600
+ XCONT&177+5200 /JMP XCONT
+ TSF
+PLIP, LIP
+ LIP+1
+ LIP+2
+\f *0
+ZERO, ODTVERSION
+ HLT /IN CASE BKPT WITH INTER ON
+STOFLG, 0
+PUNN, 0
+ *4 /PAGE 0 LITERALS AND CELLS
+ CIF 10 /PROTOTYPE BREAKPOINT
+ JMP I 6 /USED BY PROGRAMS WITH JSBITS(10)=1
+ UDNAME /WHEN ODT IS RELOADED ON A BREAKPOINT
+
+ *12
+TOTE, 0
+KEEP, 0
+INST, 0
+SHUT, -1
+TRAD, 0;SHNDLR
+WORD, 0;0
+LINK, 0
+SAC, 0
+CAD, 0;0
+CKT, 0;0
+GAME, 0;0
+FROG, 0;0
+TEMP, 0
+JSTEMP, 0
+DATFLD, 0
+INDFLD, 0
+MASK, 7777
+LIMLO, 0
+LIMHI, 7577
+ADR, 0
+FLDTST, TAD ZERO /LOC. 0 HAS FIRST IMAGINARY CORE FIELD
+ TAD WORD /IF USER TRIES TO ADDRESS NON-
+ SNL CLA /EXISTENT CORE, A ? RETURNS
+ JMP I TEMP /HE'S OK.
+ JMP I PNO
+PNO, NO
+TOTTST, 0
+ TAD TOTE
+ TAD [6
+ SZA CLA
+ ISZ TOTTST
+ JMP I TOTTST
+ $
+\f