A large commit.
[pdp8.git] / sw / os8 / v3d / sources / devext / dectapes / dectape1 / cclcd.ma
diff --git a/sw/os8/v3d/sources/devext/dectapes/dectape1/cclcd.ma b/sw/os8/v3d/sources/devext/dectapes/dectape1/cclcd.ma
new file mode 100644 (file)
index 0000000..7d015f3
--- /dev/null
@@ -0,0 +1,1009 @@
+/
+/
+/
+/COPYRIGHT  (C)  1979 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
+/VERSION=V3A (D.H.)
+\f/4    CCL'S COMMAND DECODER
+       .EXTERNAL TABLES,FNAME1
+       .EXTERNAL SWTCHS
+       .ENTRY GETSPC
+/THE FOLLOWING DON'T HAVE TO BE ENTRY'S BECAUSE THEY ARE LINKED TO
+/FROM THE EXTENSION MODULE (CCLCDX) THAT KNOWS CCLCD IS IN MEMORY
+       .GLOBAL LV
+       .EXTERNAL EQLPRM,POUND,DNUMB
+       MULTI=1         /SET TO 0 TO GET RID OF MULTIPLE CHARACTER SWITCHES
+       PTR=36
+       .GLOBAL BADEV,CDER2,DVICE       /******
+       .GLOBAL ASADR,LNAME             /*****
+       .ENTRY CCER1
+       .RSECT CCLCD
+       .GLOBAL UNKN
+       .EXTERNAL FLAG,MOVE,PRMESG
+       .EXTERNAL PRNAME,PRWD
+       .EXTERNAL LBEGIN,DECODE
+       .EXTERNAL ARLOC
+       .EXTERNAL DEFILE
+       .ENTRY CD,ASSIGN,LOOKUP,ZEROCD,GLXR
+       .EXTERNAL OUTSW,OUTLIM
+       .ENTRY GCH,SETDEV,SETEXT
+       .ENTRY NMOVE
+       .EXTERNAL DONB
+       .EXTERNAL NAMPTR
+       FIELD 1
+       MOFILE=7600
+       MIFILE=7617
+       MPARAM=7643
+
+       XR2=15
+       XR=16
+       T=20
+       TT=21
+       DEF=22
+       NAME1=23
+       NAME2=24
+       NAME3=25
+       NAME4=26
+       NAME5=27
+       NMBASE=37
+       DEV1=30
+       DEV2=31
+       DELIM=32
+       DEFALT=33       /POINTS TO DEFAULT EXTENSION LIST
+       LXR=34
+       CLXR=35
+       BEGLN=1000
+       HNDLR=4400
+\fCD,   0
+       JMS I (CDINIT
+BEGGRP,        TAD I (OUTSW
+       SNA CLA
+       TAD I (BEGDIF   /DIFF BETWEEN INPUT & OUTPUT AREAS
+       TAD (MOFILE-1
+       DCA CLXR
+       JMS I (GETSPC   /FAKE-OUT TO GETSPC CAN CAUSE EFFECTIVE BRANCH HERE
+       JMS I (ASSIGN
+       TAD I (OUTSW
+       SNA CLA
+       TAD I (LIMDIF   /DIFF BETWEEN END OF OUTPUT & INPUT AREAS
+       TAD I (OUTLIM   /END OF OUTPUT AREA
+       TAD CLXR
+       SMA CLA
+       JMP I (CDER1
+       TAD I (OUTSW
+       SNA CLA
+LKUPSW,        JMP IN$         /ZEROED IF IN "SPECIAL DECODE" MODE
+       TAD I (DVICE
+       JMS PCLXR
+       TAD NAME1
+       JMS PCLXR
+       TAD NAME2
+       JMS PCLXR
+       TAD NAME3
+       JMS PCLXR
+       TAD NAME4
+       JMP 2$
+IN$:   JMS I (LOOKUP
+       JMS PCLXR       /STORE LENGTH AND DEV NUMBER
+       TAD I (LNAME    /GET BLOCK
+2$:    JMS PCLXR
+       JMS I (CCLSWT
+       TAD I (OUTSW
+       SNA CLA
+       TAD I (FLAG
+       CLL RTL
+       SPA CLA         /FEATURE ENABLED?
+       TAD LKUPSW
+       SNA CLA
+       JMP DLOOK       /IN SPECIAL MODE OR ON OUTPUT SIDE
+       TAD DELIM
+       TAD (-"+
+       SNA CLA
+       JMP NBS
+       TAD DONB
+       SZA CLA
+       JMP NBS
+       TAD (7600       /V1A NOW TAKES ARG IN AC
+       JMS I (NMOVE    /MOVE NAME TO OUTPUT FILE NAMES
+       JMP DLOOK
+\fNBS,  JMS I (ZERR
+DLOOK, STA
+       DCA I (DVFLAG
+       TAD DELIM
+       SNA
+       JMP I CD
+       TAD (-"[
+       SNA
+       JMP I (OLENGT
+       TAD ("[-"+
+       SZA
+       TAD ("+-",
+       SNA
+       JMP I (FILLP    /**** JUMPING INTO ROUTINE (IS THIS A BUG?)
+       TAD (",-"<
+       SZA
+       TAD ("<-"_
+       SNA
+       JMP 5$          /BACK-ARROW (UNDERSCORE) MEANS SAME AS "<"
+       TAD ("_-"=
+       SZA CLA         /SKIP ON AN EQUAL SIGN (=)
+       JMP I (CDER2    /BAD CHAR
+       JMS I (GLXR
+       JMS I (DECODE
+       CLL
+       STA             /LINK=0 MEANS LETTER
+       TAD LXR         /NOW LINK=1 MEANS LETTER
+       DCA LXR
+       SZL
+       JMP 5$          /= MEANS "<"
+       JMS I (EQLPRM   /= MEANS = (NUMERIC PARAMETER)
+DL2:   JMS I (CCLSWT
+       JMP DLOOK
+5$:    ISZ I (OUTSW    /FOUND BACK-ARROW (<)
+       JMP I (CDER2    /TWO BACK-ARROWS
+       TAD LXR         /GET PTR TO ARROW
+       DCA I (ARLOC    /SAVE IT ('EDIT' MIGHT NEED IT)
+       JMP BEGGRP
+
+PCLXR, 0
+       ISZ CLXR
+       DCA I CLXR
+       JMP I PCLXR
+\f      PAGE
+\fZERR, 0
+       DCA I (DONB     /ZERO 1ST OUTPUT FILE
+       TAD (7577
+       DCA XR2
+       DCA I XR2
+       DCA I XR2
+       DCA I XR2
+       DCA I XR2
+       DCA I XR2
+       JMP I ZERR
+\fASSIGN,       0
+       TAD CLXR
+       AND I (DVFLAG
+       TAD I (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 I (OUTSW
+       SNA CLA         /DON'T LOAD HANDLER
+                       /IF WE ARE ON OUTPUT SIDE OF "_"
+       TAD NAME1
+SPKLG1,        SNA CLA         /OR THERE IS NO FILE NAME TO LOOK UP
+       TAD GETHND      /GETHND=11 NORMALLY,
+                       /0 IF IN "SPECIAL DECODE" MODE
+       IAC
+       DCA AS
+       TAD (HNDLR+1    /ALLOW TWO PAGE HANDLERS
+       DCA ASADR
+       CIF 10
+       JMS I (200
+AS,    0
+       0
+       0
+ASADR, HNDLR+1
+       JMP I (CDER0
+       TAD AS+2
+ASGNST,        DCA I (DVICE
+       JMP I ASSIGN
+\fDFLTNM,       DEVICE DSK
+GETHND,        11              /1+11=12 (1=FETCH, 12=INQUIRE)
+\fGETL, 0
+       JMS I (GCH
+       DCA DELIM
+       TAD DELIM
+       JMS I (DECODE
+       JMP I GETL      /NON-ALPHANUM IN CCL SWITCH
+       CLA
+       TAD DELIM
+       AND (77
+       ISZ GETL
+       JMP I GETL
+\fCCLSWT,       0
+       TAD DELIM
+       TAD (-"/
+       SNA
+       JMP I (SLASH
+       TAD ("/-"-
+       SZA CLA
+       JMP I CCLSWT
+       TAD I (OUTSW
+       SZA CLA
+       JMP I (CDER4    /CCL EXT ON OUTPUT FILE
+       TAD (SWTCHS
+       DCA DEF
+       JMS GETL
+       JMP I (CDER44   /NON-ALPHANUMERIC CCL SWITCH
+       JMS I (ROTL
+       DCA TN$
+       JMS GETL
+       JMP 1$          /ONE CHAR CCL SWITCH
+       TAD TN$
+       DCA TN$
+       JMS GETL
+1$:    SKP CLA         /2 CHAR CCL SWITCH
+       JMP I (CDER44   /3 CHAR CCL-SWITCH
+       TAD TN$
+       JMS I (EXTLUK
+       CLA
+       ISZ DEF
+       CDF 0
+       TAD I DEF
+       DCA G$          /GET PTR TO ARGUMENT PAIR
+       TAD I G$        /GET SUBROUTINE
+       DCA H$
+       ISZ G$
+       TAD I G$        /GET ARGUMENT
+       CDF 10
+       JMS I H$        /CALL SUBR, ARG IN AC
+       JMP CCLSWT+1
+G$:    0
+H$:    0
+TN$:   0
+       PAGE
+\f/GETS A NAME FROM FIELD ZERO BUFFER VIA LXR
+/RETURNS WITH DELIMETER IN AC
+/GIVES ERROR MESSAGE IF NAME IS BAD
+
+GNAME, 0
+       DCA NAME1
+       DCA NAME2
+       DCA NAME3
+       DCA NAME4
+       DCA NAME5
+       TAD (NAME1
+       DCA NMBASE
+       CLA CMA
+       DCA PERDSW
+       DCA NAMECT
+       JMS I (GCH
+       TAD (-"#
+       SNA
+       JMS I (NUMC     /BUG IF MAKE COMMAND USES A # (OVERLAYS LOOP)
+       TAD ("#
+       SKP
+GTNMLP,        JMS I (GCH
+P2,    DCA DELIM
+       TAD DELIM
+       TAD (-"%
+       SNA
+       JMP PER
+       TAD ("%-"?
+       SZA
+       TAD ("?-"*
+       SNA
+STARSW,        JMP I (CDER6    /"JMP STARNM"
+                       /IF "SPECIAL DECODE" MODE
+       TAD ("*-".
+       SNA CLA
+       JMP PERIOD
+       TAD DELIM
+       JMS I (DECODE
+       JMP LV
+STARNM,        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
+       SNL
+       JMS I (ROTL
+       TAD I TT
+       DCA I TT
+       ISZ NAMECT
+       JMP GTNMLP
+PERIOD,        TAD NAME1
+       SZA CLA
+       ISZ PERDSW
+       JMP I (CDER7    /NULL NAME OR DOUBLE EXTENSION
+       ISZ NMBASE
+       ISZ NMBASE
+       STL CLA RTL     /2 (ALLOW 4 CHARACTER EXTENSION)
+       DCA NAMECT
+       JMP GTNMLP
+LV,    CLA
+       TAD DELIM
+       JMP I GNAME
+
+PER,   TAD ("?
+       JMP P2
+\fPERDSW,       0
+NAMECT,        0
+\f      SOFSET=7747
+
+CDER6, CDF 0
+       TAD I (7777
+       CDF 10
+       RAL
+       SPA CLA
+       JMP CD6E        /ERROR IF BATCH IS RUNNING
+       TAD I (FLAG
+       RTL
+       SMA CLA
+       JMP CD6E        /ONLY IF -LS WORKS
+       TAD (-12
+       JMS I (MOVE
+       CDF 10
+       MUNGC
+       CDF 10
+       7600
+       TAD (-34
+       JMS I (MOVE
+       CDF 0
+       1000
+       CDF 10
+       7612
+       DCA I (7646     /SAFETY
+       CDF 0
+       TAD I (SOFSET
+       CDF 10
+       DCA BLK
+       JMS I (200
+       6               /CHAIN TO CCL.SV
+BLK,   0
+
+
+CD6E,  JMS I (PRMESG
+       BADSTR
+
+       PAGE
+\fLOOKUP,       0
+       DCA LNAME
+       TAD NAME1
+       SNA CLA
+       JMP LKUPST
+       TAD I (PERDSW
+       TAD NAME4
+       SNA CLA
+       CLA IAC         /FORCE NAMERM NON-0 IF . AND NO EXT
+       TAD NAME4
+       DCA NAMERM      /REMEMBER TYPED EXTENSION
+       TAD DEFALT
+       DCA DEF
+       TAD I (SETEXT
+       SNA             /HAS AN EXTENSION BEEN SET?
+       TAD NAMERM      /NO
+       SNA             /DOES FILE HAVE EXTENSION?
+       JMP EXT2        /NO EXTENSION TYPED OR SET, DO SUCCESSIVE LOOK-UPS
+       JMS EXTLUK      /LOOK FOR EXTENSION
+       SNA CLA         /DID WE FIND IT?
+       JMP EXT3        /NO, FORCE NULL EXTENSION TO MATCH
+EXT2,  CDF 0
+       TAD I DEF
+       IAC
+       SNA CLA
+       JMP NEXTEXT     /IGNORE -1'S
+       TAD NAMERM
+       SZA CLA
+       JMP EXT3
+       TAD I DEF
+       DCA NAME4       /SET NEW EXTENSION
+EXT3,  CDF 10
+       TAD (NAME1
+       DCA LNAME
+       TAD I (AS+2
+       JMS I (200
+       2
+LNAME, 0               /NAME1
+LENGTH,        0
+       JMP LFAILD
+       TAD NAME4
+       DCA I (SETEXT
+       ISZ DEF         /POINT TO ASSOCIATED CUSP NAME
+       CDF 0
+       TAD I DEF
+       CDF 10
+       DCA I (DEFILE   /SAVE IT AWAY
+       TAD LENGTH
+       CLL
+       TAD (400
+       SNL
+CLACON,        7600            /CLA
+       CLL RTL
+       RTL
+       AND (7760
+LKUPST,        TAD DVICE
+       JMP I LOOKUP
+\fLFAILD,       TAD NAMERM
+       CDF 0
+       SNA CLA         /WAS THERE AN EXPLICIT EXTENSION?
+       TAD I DEF       /NO - WAS THERE A DEFAULT EXTENSION?
+       SNA CLA
+       JMP XYZ
+NEXTEXT,CDF 10
+       ISZ DEF         /NO EXPLICIT EXT AND YES DEFAULT EXT
+       ISZ DEF         /POINT TO NEXT POSSIBLE DEFAULT EXTENSION
+       JMP EXT2        /AND TRY FOR IT
+
+NAMERM,        0
+DVICE, 0
+
+EXTLUK,        0
+       CIA
+       DCA T
+1$:    CDF 0
+       TAD I DEF
+       CDF 10
+       SNA             /AT NULL?
+       JMP I EXTLUK    /YES
+       TAD T           /NO
+       SNA CLA         /MATCH?
+       JMP 2$          /YES
+       ISZ DEF         /NO
+       ISZ DEF         /POINT TO NEXT ENTRY
+       JMP 1$          /TRY AGAIN
+2$:    TAD T           /RETURN WITH IT IN AC
+       CIA
+       JMP I EXTLUK
+XYZ,   CDF 10
+       JMP I (CDER3    /NO DEFALT EXTENSION OR YES EXPLICIT EXTENSION
+\fBADSYN,       TEXT    /#ILLEGAL SYNTAX/
+TOOMAN,        TEXT    /#TOO MANY FILES/
+/AMBIGY,       TEXT    /#AMBIGUOUS SWITCH/
+CDER1, JMS I (PRMESG
+       TOOMAN
+\fNFOU, TAD NAME1
+       AND (77
+       SNA CLA
+       JMP I (ONE              /ONE-CHARACTER SWITCH
+       JMS I (PRNAME
+       JMS I (PRMESG
+       SWNF
+       PAGE
+\f/TAKES A LETTER OR A DIGIT IN AC
+/AND TURNS ON APPROPRIATE BIT IN OPTION TABLE
+
+SLSHCH,        0
+       DCA DELIM
+       TAD (MPARAM-1
+       DCA T
+       TAD DELIM
+       JMS I (DECODE
+       JMP CDER8
+       SZL
+       TAD (32
+       CMA STL         /THE FOLLOWING TURNS
+                       /ON THE CORRECT OPTION BIT
+       DCA TT
+L$:    SZL
+       ISZ T
+       RAR
+       SNL
+       ISZ TT
+       JMP L$
+       DCA TT
+       TAD TT
+       CMA
+       AND I T
+       TAD TT
+       DCA I T
+       JMP I SLSHCH
+
+CDER8, CLA
+       JMS I (PRMESG
+       BADOPT
+\fZEROCD,       0
+       TAD (-42        /AC MAY BE NON-0
+       DCA T
+       TAD (MOFILE-1
+       DCA XR
+       DCA I XR        /ZERO THE COMMAND DECODER OUTPUT AREA
+       ISZ T
+       JMP .-2
+       JMP I ZEROCD
+
+GCH,   0
+       JMS GLXR
+       TAD (-240
+       SNA
+       JMP GCH+1       /IGNORE SPACES
+       TAD (240-"(
+       SNA
+       JMP OPENP$
+       TAD ("(
+       JMP I GCH
+       JMP GCH+1
+OPENP$:        JMS GLXR
+       TAD (-")
+       SNA
+       JMP GCH+1
+       TAD (")
+       JMS SLSHCH
+       JMP OPENP$
+
+GLXR,  0
+       CDF 0
+       ISZ LXR
+       TAD I LXR
+       CDF 10
+       JMP I GLXR
+
+       IFZERO MULTI <
+SLASH, JMS GLXR
+       JMS SLSHCH
+       JMS GLXR
+       DCA DELIM
+       JMP I (CCLSWT+1
+       >
+
+       IFNZRO MULTI <
+SLASH, CDF TABLES      /POINT TO SWITCH TABLE POINTER
+       TAD I PTR       /GET PTR TO SWITCH TABLE
+       CDF 10
+       JMS I (TRANSL
+       JMP I (CCLSWT+1
+       >
+\fOLENGT,       TAD I (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
+       JMS I (DNUMB
+       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 GCH
+       DCA DELIM
+       JMP I (DL2
+\fSETDSK,       0
+       TAD DSKDEV
+       SZA
+       JMP I SETDSK
+       JMS I (200
+       12              /INQUIRE
+       5723            /PACKED ENCODING FOR 'DSK:'
+DSKDEV,        0               /SET TO DEVICE NUMBER
+       0
+       HLT             /NO 'DSK' !
+       TAD DSKDEV
+       JMP I SETDSK
+\f      .ENABLE ASCII
+       .DISABLE FILL
+MUNGC, TEXT    /MUNG WILD,/
+       .ENABLE SIXBIT
+       .ENABLE FILL
+       PAGE
+\fCCER1,        TAD I (NAMPTR
+       DCA X$
+       TAD (-5
+       JMS I (MOVE
+       CDF 10
+X$:    0
+       CDF 10
+       NAME1
+CDER3, TAD (4300
+       JMS I (PRWD     /#
+       JMS I (PRNAME
+       JMS I (PRMESG
+       NF
+
+CCER2, TAD I (DVNM1
+       DCA DEV1
+       TAD I (DVNM2
+       DCA DEV2
+CDER0, TAD DEV1
+       SNA CLA
+       JMP I (CDER2    /B DOES NOT EXIST
+       TAD (4300       /#
+       JMS I (PRWD
+       TAD DEV1
+       JMS I (PRWD
+       TAD DEV2
+       JMS I (PRWD
+       JMS I (PRMESG
+       DNE
+\fNF,   TEXT    / NOT FOUND/
+DNE,   TEXT    / DOES NOT EXIST/
+BADSW, TEXT    /#SWITCH NOT ALLOWED HERE/
+BADSW2,        TEXT    /#BAD CCL SWITCH/
+CONTRA,        TEXT    /#CONTRADICTORY SWITCHES/
+\fBKA,  0
+       TAD I (LBEGIN
+       DCA CLXR
+1$:    CDF 0
+       ISZ CLXR
+       TAD I CLXR
+       CDF 10
+       SNA
+       JMP NOBKR$
+       TAD (-"<
+       SNA
+       JMP I BKA
+       TAD ("<-"_
+       SNA
+       JMP I BKA
+       TAD ("_-"=
+       SZA CLA
+       JMP 1$
+       ISZ CLXR        /= MEANS _ IF NOT FOLLOWED BY A DIGIT
+       CDF 0
+       TAD I CLXR
+       CDF 10
+       JMS I (DECODE
+       SKP CLA         /NOT A DIGIT
+       SNL CLA         /MAYBE A DIGIT
+       JMP I BKA       /= FOLLOWED BY A NON-DIGIT MEANS _
+       JMP 1$          /IT'S AN =NNNN
+
+NOBKR$:        ISZ BKA
+       JMP I BKA
+BADEV, TEXT    /#BAD DEVICE/
+       PAGE
+\fCDINIT,       0
+       ISZ PTR         /POINT TO SWITCH TABLE
+       JMS I (200
+       13              /RESET ALL HANDLERS
+       CDF 0
+       TAD I DEFALT
+       CDF 10
+       TAD (-5200
+       SZA CLA         /IS THIS A REQUEST FOR A
+                       /"SPECIAL DECODE"?
+       JMP CDCONT      /NO
+       TAD ALTLIM
+       DCA I (OUTLIM   /YES, SET UP THE PROPER LOCATIONS
+       TAD ALTDF1
+       DCA LIMDIF      /TO GET 1 OUTPUT 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
+       TAD L7600       /STOPS FETCHES IN SPECIAL MODE
+       DCA I PSPKG1    /NO HANDLER FETCHES NECESSARY EITHER
+                       /SINCE NO LOOKUPS
+CDCONT,        JMS I (BKA      /SCAN AHEAD FOR <
+       STA             /SKIP RETURN IF NOT FOUND
+       DCA I (OUTSW
+       JMS I (ZEROCD
+       TAD I (LBEGIN
+       DCA LXR
+       JMP I CDINIT
+/CONSTANTS NECESSARY TO SUPPORT "SPECIAL DECODE" MODE
+ALTLIM,        1-MOFILE-5
+ALTDF1,        MOFILE+5-MPARAM+5
+ALTDF2,        5
+PLKUPS,        LKUPSW
+PSTARS,        STARSW
+PSPKG1,        SPKLG1
+
+BEGDIF,        MIFILE-MOFILE
+LIMDIF,        MIFILE-MPARAM+2
+\f/STARJM,      RELOC STARNM    /DUMP LITERALS AT LAST POSSIBLE MOMENT
+/      JMP STARNM
+/      RELOC
+STARJM,        5200+<STARNM&177>
+\fSETDEV,       0               /V1A ARG NOW IN AC
+       DCA 1$
+       CLL STA RAL     /-2
+       JMS I (MOVE
+       CDF 0
+1$:    0               /PTS TO DEVICE NAME
+       CDF 10
+       DVNM1
+       JMS I (SETOUT
+       JMP I SETDEV
+
+UNKN,  0
+       TAD SETEXT
+       SZA
+       TAD T           /NEG OF SWITCH REQUEST
+       SZA CLA
+       JMP CCERA       /CAN'T HAVE 2ND DEFAULT EXTENSION
+       TAD T
+       CIA
+       DCA SETEXT      /SET DEFAULT EXTENSION
+       TAD DEFALT      /SEE IF IT'S IN COMMAND'S SEARCH LIST
+       DCA DEF
+       TAD SETEXT
+       JMS I (EXTLUK
+       SNA CLA         /DID WE FIND IT?
+       JMP CDER4       /NO
+       ISZ DEF         /YES
+/      TAD I (JMSUB    /ALLOW RECURSIVE CALL
+/      DCA HOLD
+       CDF 0
+       TAD I DEF
+       CDF 10
+       JMS I (JMSUB    /CALL ITS SUBR
+/      TAD HOLD
+/V1A RECURSIVE CALL NO LONGER THREATENS
+/      DCA I (JMSUB
+       JMP I UNKN
+
+SETEXT,        0               /EXT WHICH HAS BEEN SET BY A CCL SWITCH
+\fCCERA,        JMS I (PRMESG
+       CONTRA
+CDER2, JMS PRMESG
+       BADSYN
+
+L7600,
+CCERB,
+CDER4, 7600            /CLA
+       JMS I (PRMESG
+       BADSW
+CDER44,        CLA
+       JMS I (PRMESG
+       BADSW2
+CDER7, JMS I (PRMESG
+       BADX
+\fBADSTR,       TEXT    /#ILLEGAL * OR ?/
+SWNF,  TEXT    / OPTION UNKNOWN/
+BADOPT,        TEXT    /#BAD SWITCH OPTION/
+       PAGE
+\fBADX, TEXT    /#BAD EXTENSION/
+
+/THIS GETS A DEV:NAME.EXT SPECIFICATION (USING LXR)
+/PUTTING RESULT IN DEV1,DEV2, NAME1-4.
+/IT GIVES A FATAL ERROR MESSAGE IF BAD.
+GETSPC,        0
+       STA
+       DCA DVFLAG
+       DCA DEV1
+FILLP1,        DCA DEV2
+FILLP, JMS I (GNAME
+       TAD (-":        /AC CONTAINED DELIM
+       SNA CLA
+       JMP 3$          /IT'S A DEVICE NAME
+       DCA NUMC
+       TAD (-4
+       JMS I (MOVE
+       CDF 10
+       NAME1
+       CDF 0
+       FNAME1          /SAVE AWAY FILE NAME
+       JMP I GETSPC
+3$:    CLA IAC         /PARSE FILENAME AFTER DEV:
+       TAD I (PERDSW
+       TAD NUMC
+       SZA CLA
+       JMP CDERA       /. OR # IN DEVICE NAME
+       TAD NAME1
+       DCA DEV1
+       ISZ DVFLAG
+       JMP CDERA       /CATCHES A:B:
+       TAD NAME2
+       JMP FILLP1
+
+DVFLAG,        0
+CDERA, JMS I (PRMESG
+       BADEV
+
+NUMC,  0               /USED AS FLAG INDICATING SAW #
+       JMS I (POUND
+       JMP I NUMC
+\fNMOVE,        0
+       DCA 2$          /V1A ARG IN AC
+       TAD I (FLAG
+       RTL
+       SMA CLA         /FEATURE ENABLED?
+       JMP I (CCERB    /NO
+       TAD I (OUTSW
+       SZA CLA
+       JMP I (CCERB    /ON OUTPUT SIDE
+       TAD I (MOFILE   /V3C
+       SNA CLA         /DON'T CHANGE OUT DEV IF SPECIFIED
+       TAD I (FLAG     /LOOK AT 'COPY EXT' BIT
+       AND (200
+       SNA CLA
+       JMP 1$          /IT WASN'T SET
+       TAD I (MIFILE   /GET FIRST INPUT DEVICE
+       AND (17         /ISOLATE DEVICE BITS
+       DCA I (MOFILE   /FORCE THIS TO BE FIRST OUTPUT DEVICE
+1$:    TAD I 2$
+       SNA
+       JMS I (SETDSK   /CHANGE TO 'IAC' TO ALWAYS USE SYS:
+       DCA I 2$        /SET DEVICE TO SYS IF NONE
+       ISZ 2$
+       TAD I 2$        /WAS THERE A SPECIFICATION THERE?
+       SZA CLA
+       JMP I NMOVE     /YES, DO NOTHING
+       TAD I (FLAG
+       AND (200        /GET 'COPY EXTENSION' BIT
+       SMA SZA CLA     /'SMA' IS UNNECESSARY
+       STA             /COPY 4 WORDS IF BIT 4 WAS ON
+       TAD (-3         /OTHERWISE ONLY COPY 3 WORDS
+       JMS I (MOVE
+       CDF 0
+       FNAME1
+       CDF 10
+2$:    0
+       JMP I NMOVE
+\fROTL, 0
+       CLL RTL
+       RTL
+       RTL
+       JMP I ROTL
+
+JMSUB, 0
+       SNA
+       JMP I JMSUB
+       DCA T$
+       JMS I T$
+       JMP I JMSUB
+T$:    0
+\fAMBIG,        TAD NAME1
+       AND (77
+       SNA CLA
+       JMP I (ONE
+       JMS I (PRNAME
+       JMS I (PRMESG
+       AMBIGY
+AMBIGY,        TEXT    / OPTION AMBIGUOUS/
+       PAGE
+\fSETOUT,       0
+       TAD I (FLAG
+       RTR
+       SZL CLA
+       TAD (5
+       TAD (7600
+       DCA OLOC
+       TAD I OLOC
+       SZA CLA
+       JMP I SETOUT    /HE'S SPECIFIED SOMETHING
+       JMS I (200
+       12              /INQUIRE
+DVNM1, 0
+DVNM2, 0
+       0
+       JMP I (CCER2    /NO SUCH DEVICE
+       TAD DVNM2
+       DCA I OLOC
+       TAD OLOC
+       AND (5
+       SNA CLA         /USING 2ND OUT DEV?
+       JMP I SETOUT    /NO
+       ISZ OLOC        /YES
+       TAD (-4
+       JMS I (MOVE
+       CDF 0
+       FNAME1
+       CDF 10
+OLOC,  7600            /INITIALLY 7600 OR 7605
+       JMP I SETOUT
+\f/     TAD (PTR TO SWITCH TABLE ENTRY (IN FIELD 0)
+/      JMS TRANSL
+/      IT PARSES SWITCH, SETS BIT
+/      PARSES :VALUE, SETS = OPTION
+/      LEAVES DELIMETER IN DELIM
+
+TRANSL,        0
+       DCA SPTR        /POINT INTO A SWITCH TABLE
+       JMS I (GNAME    /GET A NAME
+       DCA DEL
+/      TAD NAME4
+/      SZA CLA
+/      HLT             /EXTENSION ON A SWITCH
+       JMS SRCH
+       JMP I (NFOU     /SWITCH NOT FOUND
+       STA
+       TAD SRPTR
+       DCA SSPTR       /SAVE PTR INTO LONG NAME
+       JMS SRCH        /SEARCH SOME MORE
+       SKP             /SHOULDN'T FIND ANYTHING
+       JMP I (AMBIG    /AMBIGUOUS SWITCH
+       CDF 0
+L$:    TAD I SSPTR     /SCAN PAST END OF LONG NAME
+       ISZ SSPTR
+       AND (77
+X240:  SZA CLA
+       JMP L$
+       TAD I SSPTR
+       CDF 10
+SL,    AND (377        /ISOLATE CORRESPONDING ONE-CHARACTER SWITCH
+       SZA
+       JMS I (SLSHCH   /SET APPROPRIATE BIT
+       TAD DEL
+       DCA DELIM
+       TAD DELIM
+       TAD (-":
+       SNA CLA
+       JMS I (EQLPRM
+       JMP I TRANSL
+
+ONE,   TAD NAME1
+       CLL RTR
+       RTR
+       RTR
+       TAD X240
+       AND (77
+       TAD X240
+       JMP SL
+
+SPTR,  0
+SSPTR, 0
+DEL,   0
+\f/RETURN 1 IF NAME NOT FOUND
+/RETURN 2 IF NAME FOUND
+
+SRCH,  0
+1$:    TAD (NAME1
+       DCA NPTR
+       CLL STA RTL     /-3
+       DCA NCNT
+       CDF 0
+       TAD I SPTR
+       CDF 10
+       ISZ SPTR
+       SNA
+       JMP I SRCH      /NOT FOUND
+       DCA SRPTR
+2$:    TAD I NPTR
+       SNA
+       JMP 3$
+       AND (77
+       SZA CLA
+       TAD (77         /MUST MATCH BOTH BYTES
+       TAD (7700       /NEED ONLY MATCH LEFT BYTE
+       CDF 0
+       AND I SRPTR
+       CDF 10
+       CIA
+       TAD I NPTR
+       SZA CLA
+       JMP 1$          /THIS SWITCH AIN'T IT
+       ISZ SRPTR
+       ISZ NPTR
+       ISZ NCNT
+       JMP 2$
+3$:    ISZ SRCH
+       JMP I SRCH
+
+SRPTR, 0               /POINTS INTO LONG NAME TABLE
+NCNT,  0
+NPTR,  0               /POINTS INTO NAME1-3
+       PAGE
+\f