home *** CD-ROM | disk | FTP | other *** search
/ ftp.update.uu.se / ftp.update.uu.se.2014.03.zip / ftp.update.uu.se / pub / pdp8 / os278-src.tar.Z / os278-src.tar / cclcd.ma < prev    next >
Text File  |  1992-09-18  |  17KB  |  1,031 lines

  1. /CCLCD   CCL'S COMMAND DECODER
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21. /
  22. /
  23. /
  24. /COPYRIGHT  (C)  1979 BY DIGITAL EQUIPMENT CORPORATION
  25. /
  26. /
  27. /
  28. /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
  29. /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
  30. /CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
  31. /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
  32. /
  33. /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
  34. /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
  35. /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
  36. /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
  37. /
  38. /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
  39. /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
  40. /DIGITAL.
  41. /
  42. /
  43. /
  44.  
  45.  
  46. /VERSION=V3A (D.H.)
  47. /4    CCL'S COMMAND DECODER
  48.     .EXTERNAL TABLES,FNAME1
  49.     .EXTERNAL SWTCHS
  50.     .ENTRY GETSPC
  51. /THE FOLLOWING DON'T HAVE TO BE ENTRY'S BECAUSE THEY ARE LINKED TO
  52. /FROM THE EXTENSION MODULE (CCLCDX) THAT KNOWS CCLCD IS IN MEMORY
  53.     .GLOBAL LV
  54.     .EXTERNAL EQLPRM,POUND,DNUMB
  55.     MULTI=1        /SET TO 0 TO GET RID OF MULTIPLE CHARACTER SWITCHES
  56.     PTR=36
  57.     .GLOBAL BADEV,CDER2,DVICE    /******
  58.     .GLOBAL ASADR,LNAME        /*****
  59.     .ENTRY CCER1
  60.     .RSECT CCLCD
  61.     .GLOBAL UNKN
  62.     .EXTERNAL FLAG,MOVE,PRMESG
  63.     .EXTERNAL PRNAME,PRWD
  64.     .EXTERNAL LBEGIN,DECODE
  65.     .EXTERNAL ARLOC
  66.     .EXTERNAL DEFILE
  67.     .ENTRY CD,ASSIGN,LOOKUP,ZEROCD,GLXR
  68.     .EXTERNAL OUTSW,OUTLIM
  69.     .ENTRY GCH,SETDEV,SETEXT
  70.     .ENTRY NMOVE
  71.     .EXTERNAL DONB
  72.     .EXTERNAL NAMPTR
  73.     FIELD 1
  74.     MOFILE=7600
  75.     MIFILE=7617
  76.     MPARAM=7643
  77.  
  78.     XR2=15
  79.     XR=16
  80.     T=20
  81.     TT=21
  82.     DEF=22
  83.     NAME1=23
  84.     NAME2=24
  85.     NAME3=25
  86.     NAME4=26
  87.     NAME5=27
  88.     NMBASE=37
  89.     DEV1=30
  90.     DEV2=31
  91.     DELIM=32
  92.     DEFALT=33    /POINTS TO DEFAULT EXTENSION LIST
  93.     LXR=34
  94.     CLXR=35
  95.     BEGLN=1000
  96.     HNDLR=4400
  97. CD,    0
  98.     JMS I (CDINIT
  99. BEGGRP,    TAD I (OUTSW
  100.     SNA CLA
  101.     TAD I (BEGDIF    /DIFF BETWEEN INPUT & OUTPUT AREAS
  102.     TAD (MOFILE-1
  103.     DCA CLXR
  104.     JMS I (GETSPC    /FAKE-OUT TO GETSPC CAN CAUSE EFFECTIVE BRANCH HERE
  105.     JMS I (ASSIGN
  106.     TAD I (OUTSW
  107.     SNA CLA
  108.     TAD I (LIMDIF    /DIFF BETWEEN END OF OUTPUT & INPUT AREAS
  109.     TAD I (OUTLIM    /END OF OUTPUT AREA
  110.     TAD CLXR
  111.     SMA CLA
  112.     JMP I (CDER1
  113.     TAD I (OUTSW
  114.     SNA CLA
  115. LKUPSW,    JMP IN$        /ZEROED IF IN "SPECIAL DECODE" MODE
  116.     TAD I (DVICE
  117.     JMS PCLXR
  118.     TAD NAME1
  119.     JMS PCLXR
  120.     TAD NAME2
  121.     JMS PCLXR
  122.     TAD NAME3
  123.     JMS PCLXR
  124.     TAD NAME4
  125.     JMP 2$
  126. IN$:    JMS I (LOOKUP
  127.     JMS PCLXR    /STORE LENGTH AND DEV NUMBER
  128.     TAD I (LNAME    /GET BLOCK
  129. 2$:    JMS PCLXR
  130.     JMS I (CCLSWT
  131.     TAD I (OUTSW
  132.     SNA CLA
  133.     TAD I (FLAG
  134.     CLL RTL
  135.     SPA CLA        /FEATURE ENABLED?
  136.     TAD LKUPSW
  137.     SNA CLA
  138.     JMP DLOOK    /IN SPECIAL MODE OR ON OUTPUT SIDE
  139.     TAD DELIM
  140.     TAD (-"+
  141.     SNA CLA
  142.     JMP NBS
  143.     TAD DONB
  144.     SZA CLA
  145.     JMP NBS
  146.     TAD (7600    /V1A NOW TAKES ARG IN AC
  147.     JMS I (NMOVE    /MOVE NAME TO OUTPUT FILE NAMES
  148.     JMP DLOOK
  149. NBS,    JMS I (ZERR
  150. DLOOK,    STA
  151.     DCA I (DVFLAG
  152.     TAD DELIM
  153.     SNA
  154.     JMP I CD
  155.     TAD (-"[
  156.     SNA
  157.     JMP I (OLENGT
  158.     TAD ("[-"+
  159.     SZA
  160.     TAD ("+-",
  161.     SNA
  162.     JMP I (FILLP    /**** JUMPING INTO ROUTINE (IS THIS A BUG?)
  163.     TAD (",-"<
  164.     SZA
  165.     TAD ("<-"_
  166.     SNA
  167.     JMP 5$        /BACK-ARROW (UNDERSCORE) MEANS SAME AS "<"
  168.     TAD ("_-"=
  169.     SZA CLA        /SKIP ON AN EQUAL SIGN (=)
  170.     JMP I (CDER2    /BAD CHAR
  171.     JMS I (GLXR
  172.     JMS I (DECODE
  173.     CLL
  174.     STA        /LINK=0 MEANS LETTER
  175.     TAD LXR        /NOW LINK=1 MEANS LETTER
  176.     DCA LXR
  177.     SZL
  178.     JMP 5$        /= MEANS "<"
  179.     JMS I (EQLPRM    /= MEANS = (NUMERIC PARAMETER)
  180. DL2:    JMS I (CCLSWT
  181.     JMP DLOOK
  182. 5$:    ISZ I (OUTSW    /FOUND BACK-ARROW (<)
  183.     JMP I (CDER2    /TWO BACK-ARROWS
  184.     TAD LXR        /GET PTR TO ARROW
  185.     DCA I (ARLOC    /SAVE IT ('EDIT' MIGHT NEED IT)
  186.     JMP BEGGRP
  187.  
  188. PCLXR,    0
  189.     ISZ CLXR
  190.     DCA I CLXR
  191.     JMP I PCLXR
  192.     PAGE
  193. ZERR,    0
  194.     DCA I (DONB    /ZERO 1ST OUTPUT FILE
  195.     TAD (7577
  196.     DCA XR2
  197.     DCA I XR2
  198.     DCA I XR2
  199.     DCA I XR2
  200.     DCA I XR2
  201.     DCA I XR2
  202.     JMP I ZERR
  203. ASSIGN,    0
  204.     TAD CLXR
  205.     AND I (DVFLAG
  206.     TAD I (OUTLIM
  207.     SMA SZA CLA    /CHECK FOR OUTPUT OR FIRST INPUT
  208.     JMP ASNORM    /IF DEVICE WAS SPECIFIC,
  209.             /OR IF WE ARE ON THE INPUT SIDE,
  210.             /PROCEED NORMALLY
  211.     TAD NAME1
  212.     SNA CLA
  213.     JMP ASGNST
  214.     TAD DFLTNM+1
  215.     DCA DEV2
  216.     TAD DFLTNM
  217.     DCA DEV1
  218. ASNORM,    TAD DEV1
  219.     DCA AS+1
  220.     TAD DEV2
  221.     DCA AS+2
  222.     TAD I (OUTSW
  223.     SNA CLA        /DON'T LOAD HANDLER
  224.             /IF WE ARE ON OUTPUT SIDE OF "_"
  225.     TAD NAME1
  226. SPKLG1,    SNA CLA        /OR THERE IS NO FILE NAME TO LOOK UP
  227.     TAD GETHND    /GETHND=11 NORMALLY,
  228.             /0 IF IN "SPECIAL DECODE" MODE
  229.     IAC
  230.     DCA AS
  231.     TAD (HNDLR+1    /ALLOW TWO PAGE HANDLERS
  232.     DCA ASADR
  233.     CIF 10
  234.     JMS I (200
  235. AS,    0
  236.     0
  237.     0
  238. ASADR,    HNDLR+1
  239.     JMP I (CDER0
  240.     TAD AS+2
  241. ASGNST,    DCA I (DVICE
  242.     JMP I ASSIGN
  243. DFLTNM,    DEVICE DSK
  244. GETHND,    11        /1+11=12 (1=FETCH, 12=INQUIRE)
  245. GETL,    0
  246.     JMS I (GCH
  247.     DCA DELIM
  248.     TAD DELIM
  249.     JMS I (DECODE
  250.     JMP I GETL    /NON-ALPHANUM IN CCL SWITCH
  251.     CLA
  252.     TAD DELIM
  253.     AND (77
  254.     ISZ GETL
  255.     JMP I GETL
  256. CCLSWT,    0
  257.     TAD DELIM
  258.     TAD (-"/
  259.     SNA
  260.     JMP I (SLASH
  261.     TAD ("/-"-
  262.     SZA CLA
  263.     JMP I CCLSWT
  264.     TAD I (OUTSW
  265.     SZA CLA
  266.     JMP I (CDER4    /CCL EXT ON OUTPUT FILE
  267.     TAD (SWTCHS
  268.     DCA DEF
  269.     JMS GETL
  270.     JMP I (CDER44    /NON-ALPHANUMERIC CCL SWITCH
  271.     JMS I (ROTL
  272.     DCA TN$
  273.     JMS GETL
  274.     JMP 1$        /ONE CHAR CCL SWITCH
  275.     TAD TN$
  276.     DCA TN$
  277.     JMS GETL
  278. 1$:    SKP CLA        /2 CHAR CCL SWITCH
  279.     JMP I (CDER44    /3 CHAR CCL-SWITCH
  280.     TAD TN$
  281.     JMS I (EXTLUK
  282.     CLA
  283.     ISZ DEF
  284.     CDF 0
  285.     TAD I DEF
  286.     DCA G$        /GET PTR TO ARGUMENT PAIR
  287.     TAD I G$    /GET SUBROUTINE
  288.     DCA H$
  289.     ISZ G$
  290.     TAD I G$    /GET ARGUMENT
  291.     CDF 10
  292.     JMS I H$    /CALL SUBR, ARG IN AC
  293.     JMP CCLSWT+1
  294. G$:    0
  295. H$:    0
  296. TN$:    0
  297.     PAGE
  298. /GETS A NAME FROM FIELD ZERO BUFFER VIA LXR
  299. /RETURNS WITH DELIMETER IN AC
  300. /GIVES ERROR MESSAGE IF NAME IS BAD
  301.  
  302. GNAME,    0
  303.     DCA NAME1
  304.     DCA NAME2
  305.     DCA NAME3
  306.     DCA NAME4
  307.     DCA NAME5
  308.     TAD (NAME1
  309.     DCA NMBASE
  310.     CLA CMA
  311.     DCA PERDSW
  312.     DCA NAMECT
  313.     JMS I (GCH
  314.     TAD (-"#
  315.     SNA
  316.     JMS I (NUMC    /BUG IF MAKE COMMAND USES A # (OVERLAYS LOOP)
  317.     TAD ("#
  318.     SKP
  319. GTNMLP,    JMS I (GCH
  320. P2,    DCA DELIM
  321.     TAD DELIM
  322.     TAD (-"%
  323.     SNA
  324.     JMP PER
  325.     TAD ("%-"?
  326.     SZA
  327.     TAD ("?-"*
  328.     SNA
  329. STARSW,    JMP I (CDER6    /"JMP STARNM"
  330.             /IF "SPECIAL DECODE" MODE
  331.     TAD ("*-".
  332.     SNA CLA
  333.     JMP PERIOD
  334.     TAD DELIM
  335.     JMS I (DECODE
  336.     JMP LV
  337. STARNM,    CLA        /THIS CODE HANDLES *'S AND ?'S CORRECTLY
  338.     TAD DELIM
  339.     AND (77
  340.     DCA DELIM
  341.     TAD NAMECT
  342.     TAD (-6
  343.     SMA CLA
  344.     JMP GTNMLP
  345.     TAD NAMECT
  346.     CLL RAR
  347.     TAD NMBASE
  348.     DCA TT
  349.     TAD DELIM
  350.     SNL
  351.     JMS I (ROTL
  352.     TAD I TT
  353.     DCA I TT
  354.     ISZ NAMECT
  355.     JMP GTNMLP
  356. PERIOD,    TAD NAME1
  357.     SZA CLA
  358.     ISZ PERDSW
  359.     JMP I (CDER7    /NULL NAME OR DOUBLE EXTENSION
  360.     ISZ NMBASE
  361.     ISZ NMBASE
  362.     STL CLA RTL    /2 (ALLOW 4 CHARACTER EXTENSION)
  363.     DCA NAMECT
  364.     JMP GTNMLP
  365. LV,    CLA
  366.     TAD DELIM
  367.     JMP I GNAME
  368.  
  369. PER,    TAD ("?
  370.     JMP P2
  371. PERDSW,    0
  372. NAMECT,    0
  373.     SOFSET=7747
  374.  
  375. CDER6,    CDF 0
  376.     TAD I (7777
  377.     CDF 10
  378.     RAL
  379.     SPA CLA
  380.     JMP CD6E    /ERROR IF BATCH IS RUNNING
  381.     TAD I (FLAG
  382.     RTL
  383.     SMA CLA
  384.     JMP CD6E    /ONLY IF -LS WORKS
  385.     TAD (-12
  386.     JMS I (MOVE
  387.     CDF 10
  388.     MUNGC
  389.     CDF 10
  390.     7600
  391.     TAD (-34
  392.     JMS I (MOVE
  393.     CDF 0
  394.     1000
  395.     CDF 10
  396.     7612
  397.     DCA I (7646    /SAFETY
  398.     CDF 0
  399.     TAD I (SOFSET
  400.     CDF 10
  401.     DCA BLK
  402.     JMS I (200
  403.     6        /CHAIN TO CCL.SV
  404. BLK,    0
  405.  
  406.  
  407. CD6E,    JMS I (PRMESG
  408.     BADSTR
  409.  
  410.     PAGE
  411. LOOKUP,    0
  412.     DCA LNAME
  413.     TAD NAME1
  414.     SNA CLA
  415.     JMP LKUPST
  416.     TAD I (PERDSW
  417.     TAD NAME4
  418.     SNA CLA
  419.     CLA IAC        /FORCE NAMERM NON-0 IF . AND NO EXT
  420.     TAD NAME4
  421.     DCA NAMERM    /REMEMBER TYPED EXTENSION
  422.     TAD DEFALT
  423.     DCA DEF
  424.     TAD I (SETEXT
  425.     SNA        /HAS AN EXTENSION BEEN SET?
  426.     TAD NAMERM    /NO
  427.     SNA        /DOES FILE HAVE EXTENSION?
  428.     JMP EXT2    /NO EXTENSION TYPED OR SET, DO SUCCESSIVE LOOK-UPS
  429.     JMS EXTLUK    /LOOK FOR EXTENSION
  430.     SNA CLA        /DID WE FIND IT?
  431.     JMP EXT3    /NO, FORCE NULL EXTENSION TO MATCH
  432. EXT2,    CDF 0
  433.     TAD I DEF
  434.     IAC
  435.     SNA CLA
  436.     JMP NEXTEXT    /IGNORE -1'S
  437.     TAD NAMERM
  438.     SZA CLA
  439.     JMP EXT3
  440.     TAD I DEF
  441.     DCA NAME4    /SET NEW EXTENSION
  442. EXT3,    CDF 10
  443.     TAD (NAME1
  444.     DCA LNAME
  445.     TAD I (AS+2
  446.     JMS I (200
  447.     2
  448. LNAME,    0        /NAME1
  449. LENGTH,    0
  450.     JMP LFAILD
  451.     TAD NAME4
  452.     DCA I (SETEXT
  453.     ISZ DEF        /POINT TO ASSOCIATED CUSP NAME
  454.     CDF 0
  455.     TAD I DEF
  456.     CDF 10
  457.     DCA I (DEFILE    /SAVE IT AWAY
  458.     TAD LENGTH
  459.     CLL
  460.     TAD (400
  461.     SNL
  462. CLACON,    7600        /CLA
  463.     CLL RTL
  464.     RTL
  465.     AND (7760
  466. LKUPST,    TAD DVICE
  467.     JMP I LOOKUP
  468. LFAILD,    TAD NAMERM
  469.     CDF 0
  470.     SNA CLA        /WAS THERE AN EXPLICIT EXTENSION?
  471.     TAD I DEF    /NO - WAS THERE A DEFAULT EXTENSION?
  472.     SNA CLA
  473.     JMP XYZ
  474. NEXTEXT,CDF 10
  475.     ISZ DEF        /NO EXPLICIT EXT AND YES DEFAULT EXT
  476.     ISZ DEF        /POINT TO NEXT POSSIBLE DEFAULT EXTENSION
  477.     JMP EXT2    /AND TRY FOR IT
  478.  
  479. NAMERM,    0
  480. DVICE,    0
  481.  
  482. EXTLUK,    0
  483.     CIA
  484.     DCA T
  485. 1$:    CDF 0
  486.     TAD I DEF
  487.     CDF 10
  488.     SNA        /AT NULL?
  489.     JMP I EXTLUK    /YES
  490.     TAD T        /NO
  491.     SNA CLA        /MATCH?
  492.     JMP 2$        /YES
  493.     ISZ DEF        /NO
  494.     ISZ DEF        /POINT TO NEXT ENTRY
  495.     JMP 1$        /TRY AGAIN
  496. 2$:    TAD T        /RETURN WITH IT IN AC
  497.     CIA
  498.     JMP I EXTLUK
  499. XYZ,    CDF 10
  500.     JMP I (CDER3    /NO DEFALT EXTENSION OR YES EXPLICIT EXTENSION
  501. BADSYN,    TEXT    /#ILLEGAL SYNTAX/
  502. TOOMAN,    TEXT    /#TOO MANY FILES/
  503. /AMBIGY,    TEXT    /#AMBIGUOUS SWITCH/
  504. CDER1,    JMS I (PRMESG
  505.     TOOMAN
  506. NFOU,    TAD NAME1
  507.     AND (77
  508.     SNA CLA
  509.     JMP I (ONE        /ONE-CHARACTER SWITCH
  510.     JMS I (PRNAME
  511.     JMS I (PRMESG
  512.     SWNF
  513.     PAGE
  514. /TAKES A LETTER OR A DIGIT IN AC
  515. /AND TURNS ON APPROPRIATE BIT IN OPTION TABLE
  516.  
  517. SLSHCH,    0
  518.     DCA DELIM
  519.     TAD (MPARAM-1
  520.     DCA T
  521.     TAD DELIM
  522.     JMS I (DECODE
  523.     JMP CDER8
  524.     SZL
  525.     TAD (32
  526.     CMA STL        /THE FOLLOWING TURNS
  527.             /ON THE CORRECT OPTION BIT
  528.     DCA TT
  529. L$:    SZL
  530.     ISZ T
  531.     RAR
  532.     SNL
  533.     ISZ TT
  534.     JMP L$
  535.     DCA TT
  536.     TAD TT
  537.     CMA
  538.     AND I T
  539.     TAD TT
  540.     DCA I T
  541.     JMP I SLSHCH
  542.  
  543. CDER8,    CLA
  544.     JMS I (PRMESG
  545.     BADOPT
  546. ZEROCD,    0
  547.     TAD (-42    /AC MAY BE NON-0
  548.     DCA T
  549.     TAD (MOFILE-1
  550.     DCA XR
  551.     DCA I XR    /ZERO THE COMMAND DECODER OUTPUT AREA
  552.     ISZ T
  553.     JMP .-2
  554.     JMP I ZEROCD
  555.  
  556. GCH,    0
  557.     JMS GLXR
  558.     TAD (-240
  559.     SNA
  560.     JMP GCH+1    /IGNORE SPACES
  561.     TAD (240-"(
  562.     SNA
  563.     JMP OPENP$
  564.     TAD ("(
  565.     JMP I GCH
  566.     JMP GCH+1
  567. OPENP$:    JMS GLXR
  568.     TAD (-")
  569.     SNA
  570.     JMP GCH+1
  571.     TAD (")
  572.     JMS SLSHCH
  573.     JMP OPENP$
  574.  
  575. GLXR,    0
  576.     CDF 0
  577.     ISZ LXR
  578.     TAD I LXR
  579.     CDF 10
  580.     JMP I GLXR
  581.  
  582.     IFZERO MULTI <
  583. SLASH,    JMS GLXR
  584.     JMS SLSHCH
  585.     JMS GLXR
  586.     DCA DELIM
  587.     JMP I (CCLSWT+1
  588.     >
  589.  
  590.     IFNZRO MULTI <
  591. SLASH,    CDF TABLES    /POINT TO SWITCH TABLE POINTER
  592.     TAD I PTR    /GET PTR TO SWITCH TABLE
  593.     CDF 10
  594.     JMS I (TRANSL
  595.     JMP I (CCLSWT+1
  596.     >
  597. OLENGT,    TAD I (OUTSW
  598.     AND NAME1    /[N] IS ONLY LEGAL
  599.             /ON THE OUTPUT SIDE OF THE "_"
  600.     SNA CLA        /AND ONLY AFTER A FILE NAME
  601.     JMP I (CDER2
  602.     TAD (-4
  603.     TAD CLXR
  604.     DCA NMBASE
  605.     JMS I (DNUMB
  606.     CLL RTL
  607.     RTL
  608.     AND (7760
  609.     TAD I NMBASE
  610.     DCA I NMBASE
  611.     CDF 0
  612.     TAD DELIM
  613.     TAD (-"]    /IS THERE A CLOSING BRACKET?
  614.     SNA        /IF NOT,
  615.             /"DLOOK" ROUTINE WILL DETECT IT
  616.     JMS GCH
  617.     DCA DELIM
  618.     JMP I (DL2
  619. SETDSK,    0
  620.     TAD DSKDEV
  621.     SZA
  622.     JMP I SETDSK
  623.     JMS I (200
  624.     12        /INQUIRE
  625.     5723        /PACKED ENCODING FOR 'DSK:'
  626. DSKDEV,    0        /SET TO DEVICE NUMBER
  627.     0
  628.     HLT        /NO 'DSK' !
  629.     TAD DSKDEV
  630.     JMP I SETDSK
  631.     .ENABLE ASCII
  632.     .DISABLE FILL
  633. MUNGC,    TEXT    /MUNG WILD,/
  634.     .ENABLE SIXBIT
  635.     .ENABLE FILL
  636.     PAGE
  637. CCER1,    TAD I (NAMPTR
  638.     DCA X$
  639.     TAD (-5
  640.     JMS I (MOVE
  641.     CDF 10
  642. X$:    0
  643.     CDF 10
  644.     NAME1
  645. CDER3,    TAD (4300
  646.     JMS I (PRWD    /#
  647.     JMS I (PRNAME
  648.     JMS I (PRMESG
  649.     NF
  650.  
  651. CCER2,    TAD I (DVNM1
  652.     DCA DEV1
  653.     TAD I (DVNM2
  654.     DCA DEV2
  655. CDER0,    TAD DEV1
  656.     SNA CLA
  657.     JMP I (CDER2    /B DOES NOT EXIST
  658.     TAD (4300    /#
  659.     JMS I (PRWD
  660.     TAD DEV1
  661.     JMS I (PRWD
  662.     TAD DEV2
  663.     JMS I (PRWD
  664.     JMS I (PRMESG
  665.     DNE
  666. NF,    TEXT    / NOT FOUND/
  667. DNE,    TEXT    / DOES NOT EXIST/
  668. BADSW,    TEXT    /#SWITCH NOT ALLOWED HERE/
  669. BADSW2,    TEXT    /#BAD CCL SWITCH/
  670. CONTRA,    TEXT    /#CONTRADICTORY SWITCHES/
  671. BKA,    0
  672.     TAD I (LBEGIN
  673.     DCA CLXR
  674. 1$:    CDF 0
  675.     ISZ CLXR
  676.     TAD I CLXR
  677.     CDF 10
  678.     SNA
  679.     JMP NOBKR$
  680.     TAD (-"<
  681.     SNA
  682.     JMP I BKA
  683.     TAD ("<-"_
  684.     SNA
  685.     JMP I BKA
  686.     TAD ("_-"=
  687.     SZA CLA
  688.     JMP 1$
  689.     ISZ CLXR    /= MEANS _ IF NOT FOLLOWED BY A DIGIT
  690.     CDF 0
  691.     TAD I CLXR
  692.     CDF 10
  693.     JMS I (DECODE
  694.     SKP CLA        /NOT A DIGIT
  695.     SNL CLA        /MAYBE A DIGIT
  696.     JMP I BKA    /= FOLLOWED BY A NON-DIGIT MEANS _
  697.     JMP 1$        /IT'S AN =NNNN
  698.  
  699. NOBKR$:    ISZ BKA
  700.     JMP I BKA
  701. BADEV,    TEXT    /#BAD DEVICE/
  702.     PAGE
  703. CDINIT,    0
  704.     ISZ PTR        /POINT TO SWITCH TABLE
  705.     JMS I (200
  706.     13        /RESET ALL HANDLERS
  707.     CDF 0
  708.     TAD I DEFALT
  709.     CDF 10
  710.     TAD (-5200
  711.     SZA CLA        /IS THIS A REQUEST FOR A
  712.             /"SPECIAL DECODE"?
  713.     JMP CDCONT    /NO
  714.     TAD ALTLIM
  715.     DCA I (OUTLIM    /YES, SET UP THE PROPER LOCATIONS
  716.     TAD ALTDF1
  717.     DCA LIMDIF    /TO GET 1 OUTPUT AND 5 INPUT FILES
  718.     TAD ALTDF2
  719.     DCA BEGDIF    /ALL OF WHICH ARE
  720.             /5-WORD <DEVICE,NAME> ENTRIES
  721.     DCA I PLKUPS
  722.     TAD STARJM
  723.     DCA I PSTARS    /AND ALLOW *
  724.             /AS A FILE OR EXTENSION NAME
  725.     TAD L7600    /STOPS FETCHES IN SPECIAL MODE
  726.     DCA I PSPKG1    /NO HANDLER FETCHES NECESSARY EITHER
  727.             /SINCE NO LOOKUPS
  728. CDCONT,    JMS I (BKA    /SCAN AHEAD FOR <
  729.     STA        /SKIP RETURN IF NOT FOUND
  730.     DCA I (OUTSW
  731.     JMS I (ZEROCD
  732.     TAD I (LBEGIN
  733.     DCA LXR
  734.     JMP I CDINIT
  735. /CONSTANTS NECESSARY TO SUPPORT "SPECIAL DECODE" MODE
  736. ALTLIM,    1-MOFILE-5
  737. ALTDF1,    MOFILE+5-MPARAM+5
  738. ALTDF2,    5
  739. PLKUPS,    LKUPSW
  740. PSTARS,    STARSW
  741. PSPKG1,    SPKLG1
  742.  
  743. BEGDIF,    MIFILE-MOFILE
  744. LIMDIF,    MIFILE-MPARAM+2
  745. /STARJM,    RELOC STARNM    /DUMP LITERALS AT LAST POSSIBLE MOMENT
  746. /    JMP STARNM
  747. /    RELOC
  748. STARJM,    5200+<STARNM&177>
  749. SETDEV,    0        /V1A ARG NOW IN AC
  750.     DCA 1$
  751.     CLL STA RAL    /-2
  752.     JMS I (MOVE
  753.     CDF 0
  754. 1$:    0        /PTS TO DEVICE NAME
  755.     CDF 10
  756.     DVNM1
  757.     JMS I (SETOUT
  758.     JMP I SETDEV
  759.  
  760. UNKN,    0
  761.     TAD SETEXT
  762.     SZA
  763.     TAD T        /NEG OF SWITCH REQUEST
  764.     SNA CLA        //V4: TO ALLOW FILNAM.GARB-EX TO WORK
  765.     JMP CCERA    /CAN'T HAVE 2ND DEFAULT EXTENSION
  766.     TAD T
  767.     CIA
  768.     DCA SETEXT    /SET DEFAULT EXTENSION
  769.     TAD DEFALT    /SEE IF IT'S IN COMMAND'S SEARCH LIST
  770.     DCA DEF
  771.     TAD SETEXT
  772.     JMS I (EXTLUK
  773.     SNA CLA        /DID WE FIND IT?
  774.     JMP CDER4    /NO
  775.     ISZ DEF        /YES
  776. /    TAD I (JMSUB    /ALLOW RECURSIVE CALL
  777. /    DCA HOLD
  778.     CDF 0
  779.     TAD I DEF
  780.     CDF 10
  781.     DCA I (DEFILE    /PATCH TO ALLOW -EX OPTION MAY 30,1979
  782. /    JMS I (JMSUB    /CALL ITS SUBR
  783. /    TAD HOLD
  784. /V1A RECURSIVE CALL NO LONGER THREATENS
  785. /    DCA I (JMSUB
  786.     JMP I UNKN
  787.  
  788. SETEXT,    0        /EXT WHICH HAS BEEN SET BY A CCL SWITCH
  789. CCERA,    JMS I (PRMESG
  790.     CONTRA
  791. CDER2,    JMS PRMESG
  792.     BADSYN
  793.  
  794. L7600,
  795. CCERB,
  796. CDER4,    7600        /CLA
  797.     JMS I (PRMESG
  798.     BADSW
  799. CDER44,    CLA
  800.     JMS I (PRMESG
  801.     BADSW2
  802. CDER7,    JMS I (PRMESG
  803.     BADX
  804. BADSTR,    TEXT    /#ILLEGAL * OR ?/
  805. SWNF,    TEXT    / OPTION UNKNOWN/
  806. BADOPT,    TEXT    /#BAD SWITCH OPTION/
  807.     PAGE
  808. BADX,    TEXT    /#BAD EXTENSION/
  809.  
  810. /THIS GETS A DEV:NAME.EXT SPECIFICATION (USING LXR)
  811. /PUTTING RESULT IN DEV1,DEV2, NAME1-4.
  812. /IT GIVES A FATAL ERROR MESSAGE IF BAD.
  813. GETSPC,    0
  814.     STA
  815.     DCA DVFLAG
  816.     DCA DEV1
  817. FILLP1,    DCA DEV2
  818. FILLP,    JMS I (GNAME
  819.     TAD (-":    /AC CONTAINED DELIM
  820.     SNA CLA
  821.     JMP 3$        /IT'S A DEVICE NAME
  822.     DCA NUMC
  823.     TAD (-4
  824.     JMS I (MOVE
  825.     CDF 10
  826.     NAME1
  827.     CDF 0
  828.     FNAME1        /SAVE AWAY FILE NAME
  829.     JMP I GETSPC
  830. 3$:    CLA IAC        /PARSE FILENAME AFTER DEV:
  831.     TAD I (PERDSW
  832.     TAD NUMC
  833.     SZA CLA
  834.     JMP CDERA    /. OR # IN DEVICE NAME
  835.     TAD NAME1
  836.     DCA DEV1
  837.     ISZ DVFLAG
  838.     JMP CDERA    /CATCHES A:B:
  839.     TAD NAME2
  840.     JMP FILLP1
  841.  
  842. DVFLAG,    0
  843. CDERA,    JMS I (PRMESG
  844.     BADEV
  845.  
  846. NUMC,    0        /USED AS FLAG INDICATING SAW #
  847.     JMS I (POUND
  848.     JMP I NUMC
  849. NMOVE,    0
  850.     DCA 2$        /V1A ARG IN AC
  851.     TAD I (FLAG
  852.     RTL
  853.     SMA CLA        /FEATURE ENABLED?
  854.     JMP I (CCERB    /NO
  855.     TAD I (OUTSW
  856.     SZA CLA
  857.     JMP I (CCERB    /ON OUTPUT SIDE
  858.     TAD I (MOFILE    /V3C
  859.     SNA CLA        /DON'T CHANGE OUT DEV IF SPECIFIED
  860.     TAD I (FLAG    /LOOK AT 'COPY EXT' BIT
  861.     AND (200
  862.     SNA CLA
  863.     JMP 1$        /IT WASN'T SET
  864.     TAD I (MIFILE    /GET FIRST INPUT DEVICE
  865.     AND (17        /ISOLATE DEVICE BITS
  866.     DCA I (MOFILE    /FORCE THIS TO BE FIRST OUTPUT DEVICE
  867. 1$:    TAD I 2$
  868.     SNA
  869.     JMS I (SETDSK    /CHANGE TO 'IAC' TO ALWAYS USE SYS:
  870.     DCA I 2$    /SET DEVICE TO SYS IF NONE
  871.     ISZ 2$
  872.     TAD I 2$    /WAS THERE A SPECIFICATION THERE?
  873.     SZA CLA
  874.     JMP I NMOVE    /YES, DO NOTHING
  875.     TAD I (FLAG
  876.     AND (200    /GET 'COPY EXTENSION' BIT
  877.     SMA SZA CLA    /'SMA' IS UNNECESSARY
  878.     STA        /COPY 4 WORDS IF BIT 4 WAS ON
  879.     TAD (-3        /OTHERWISE ONLY COPY 3 WORDS
  880.     JMS I (MOVE
  881.     CDF 0
  882.     FNAME1
  883.     CDF 10
  884. 2$:    0
  885.     JMP I NMOVE
  886. ROTL,    0
  887.     CLL RTL
  888.     RTL
  889.     RTL
  890.     JMP I ROTL
  891.  
  892. JMSUB,    0
  893.     SNA
  894.     JMP I JMSUB
  895.     DCA T$
  896.     JMS I T$
  897.     JMP I JMSUB
  898. T$:    0
  899. AMBIG,    TAD NAME1
  900.     AND (77
  901.     SNA CLA
  902.     JMP I (ONE
  903.     JMS I (PRNAME
  904.     JMS I (PRMESG
  905.     AMBIGY
  906. AMBIGY,    TEXT    / OPTION AMBIGUOUS/
  907.     PAGE
  908. SETOUT,    0
  909.     TAD I (FLAG
  910.     RTR
  911.     SZL CLA
  912.     TAD (5
  913.     TAD (7600
  914.     DCA OLOC
  915.     TAD I OLOC
  916.     SZA CLA
  917.     JMP I SETOUT    /HE'S SPECIFIED SOMETHING
  918.     JMS I (200
  919.     12        /INQUIRE
  920. DVNM1,    0
  921. DVNM2,    0
  922.     0
  923.     JMP I (CCER2    /NO SUCH DEVICE
  924.     TAD DVNM2
  925.     DCA I OLOC
  926.     TAD OLOC
  927.     AND (5
  928.     SNA CLA        /USING 2ND OUT DEV?
  929.     JMP I SETOUT    /NO
  930.     ISZ OLOC    /YES
  931.     TAD (-4
  932.     JMS I (MOVE
  933.     CDF 0
  934.     FNAME1
  935.     CDF 10
  936. OLOC,    7600        /INITIALLY 7600 OR 7605
  937.     JMP I SETOUT
  938. /    TAD (PTR TO SWITCH TABLE ENTRY (IN FIELD 0)
  939. /    JMS TRANSL
  940. /    IT PARSES SWITCH, SETS BIT
  941. /    PARSES :VALUE, SETS = OPTION
  942. /    LEAVES DELIMETER IN DELIM
  943.  
  944. TRANSL,    0
  945.     DCA SPTR    /POINT INTO A SWITCH TABLE
  946.     JMS I (GNAME    /GET A NAME
  947.     DCA DEL
  948. /    TAD NAME4
  949. /    SZA CLA
  950. /    HLT        /EXTENSION ON A SWITCH
  951.     JMS SRCH
  952.     JMP I (NFOU    /SWITCH NOT FOUND
  953.     STA
  954.     TAD SRPTR
  955.     DCA SSPTR    /SAVE PTR INTO LONG NAME
  956.     JMS SRCH    /SEARCH SOME MORE
  957.     SKP        /SHOULDN'T FIND ANYTHING
  958.     JMP I (AMBIG    /AMBIGUOUS SWITCH
  959.     CDF 0
  960. L$:    TAD I SSPTR    /SCAN PAST END OF LONG NAME
  961.     ISZ SSPTR
  962.     AND (77
  963. X240:    SZA CLA
  964.     JMP L$
  965.     TAD I SSPTR
  966.     CDF 10
  967. SL,    AND (377    /ISOLATE CORRESPONDING ONE-CHARACTER SWITCH
  968.     SZA
  969.     JMS I (SLSHCH    /SET APPROPRIATE BIT
  970.     TAD DEL
  971.     DCA DELIM
  972.     TAD DELIM
  973.     TAD (-":
  974.     SNA CLA
  975.     JMS I (EQLPRM
  976.     JMP I TRANSL
  977.  
  978. ONE,    TAD NAME1
  979.     CLL RTR
  980.     RTR
  981.     RTR
  982.     TAD X240
  983.     AND (77
  984.     TAD X240
  985.     JMP SL
  986.  
  987. SPTR,    0
  988. SSPTR,    0
  989. DEL,    0
  990. /RETURN 1 IF NAME NOT FOUND
  991. /RETURN 2 IF NAME FOUND
  992.  
  993. SRCH,    0
  994. 1$:    TAD (NAME1
  995.     DCA NPTR
  996.     CLL STA RTL    /-3
  997.     DCA NCNT
  998.     CDF 0
  999.     TAD I SPTR
  1000.     CDF 10
  1001.     ISZ SPTR
  1002.     SNA
  1003.     JMP I SRCH    /NOT FOUND
  1004.     DCA SRPTR
  1005. 2$:    TAD I NPTR
  1006.     SNA
  1007.     JMP 3$
  1008.     AND (77
  1009.     SZA CLA
  1010.     TAD (77        /MUST MATCH BOTH BYTES
  1011.     TAD (7700    /NEED ONLY MATCH LEFT BYTE
  1012.     CDF 0
  1013.     AND I SRPTR
  1014.     CDF 10
  1015.     CIA
  1016.     TAD I NPTR
  1017.     SZA CLA
  1018.     JMP 1$        /THIS SWITCH AIN'T IT
  1019.     ISZ SRPTR
  1020.     ISZ NPTR
  1021.     ISZ NCNT
  1022.     JMP 2$
  1023. 3$:    ISZ SRCH
  1024.     JMP I SRCH
  1025.  
  1026. SRPTR,    0        /POINTS INTO LONG NAME TABLE
  1027. NCNT,    0
  1028. NPTR,    0        /POINTS INTO NAME1-3
  1029.     PAGE
  1030.  
  1031.