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 / direct.pa < prev    next >
Text File  |  1992-09-18  |  20KB  |  1,217 lines

  1. /DIRECT.SV OS278
  2. /
  3. /
  4. /
  5. /
  6. /
  7. /
  8. /
  9. /
  10. /
  11. /COPYRIGHT  (C)  1974,1975,1977,1982 BY DIGITAL EQUIPMENT CORPORATION
  12. /
  13. /
  14. /
  15. /
  16. /
  17. /
  18. /
  19. /
  20. /
  21. /
  22. /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
  23. /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
  24. /CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
  25. /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
  26. /
  27. /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
  28. /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
  29. /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
  30. /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
  31. /
  32. /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
  33. /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
  34. /DIGITAL.
  35. /
  36. /
  37. /
  38. /
  39. /
  40. /
  41. /
  42. /
  43. /
  44. /
  45. /JANUARY 17, 1974            H.J.
  46. /
  47. /5-AUGUST-1975    MAINT. RELEASE CHANGES        S.R.
  48. /1.    UPDATED COPYRIGHT DATE
  49. /2.    CHANGED VERSION NUMBER TO V4
  50. /3.    INCORPORATED PATCH (SEQ #2) OF FEB 1975 DSN
  51. /    (FIXES BUG RE: DEFAULTING TO TTY: AND DSK:)
  52. /
  53. / 5-APR-77    MH    OS/78 FIXES    (V5A)
  54. / 18-MAY-77    MH    SPR 2286    (V6A)
  55. / 08-DEC-77    SR    HIGROUND SUPPORT    (V7A)
  56.  
  57. /CHANGES FOR OS78 V4 RELEASE:
  58.  
  59. /1.    UPDATED CTYPE TO RUN ON VT278. CAN NO LONGER CARRY TTY I/O FLAGS
  60. /AROUND IN AN UNANSWERED STATE. KEYBOARD IS KEPT ENABLED.
  61. /2.    VERSION IS NOW A0.
  62.  
  63. /CHANGES FOR OS278 VB0
  64.  
  65. /ADDED CLEAR SCREEN
  66. /16-NOV-82 VB1 FORMATED FILENAME.EX
  67. /18-NOV-82 VB2 FIXED /E/F AND /R/C COMBINATIONS
  68. /06-JAN-83 VB3 CHANGED DATE FORMAT TO UPPER AND LOWER CASE TEXT
  69. /
  70. /DIRECTORY LISTING PROGRAM
  71. /
  72. / START ADDRESS 14600;  JSW 6403
  73. /
  74.  
  75. /    FIELD 0
  76. /    DIRECTORY    2000-3377
  77.  
  78. /    FIELD 1
  79. /    0-1777 USR
  80. /    2000-4777 DIRECT
  81. /    5200-7577 OUTPUT BUFFER
  82.  
  83.  
  84.     PTR=20
  85.     CNT=21
  86.     INFPTR=22
  87.     OUHAND=23
  88.     INHAND=24
  89.     EPTR=26
  90.     INSCNT=27
  91.     TEMP=30
  92.     OKFLAG=31
  93.     IFCNT=32
  94.     OSWTCH=33
  95.     INFWDS=34
  96.     BDPTR=35
  97.     GPTR1=36
  98.  
  99.  
  100.     XR=10
  101.     XR1=11
  102.     XR2=12
  103.  
  104.  
  105.     AC2=CLA CLL CML RTL
  106.     AC4000=CLA CLL CML RAR
  107.     ACM2=CLA CLL CMA RAL
  108.     ACM3=CLA CLL CMA RTL
  109.  
  110.  
  111.     ALTOPT=7642
  112.     OPT1=7643
  113.     OPT2=7644
  114.     EQLS=7646    /EQUALS OPTION
  115.     DATE=7666
  116.     BIPCCL=7777    /CONTAINS DATE EXTENSION IN BITS 3 AND 4 (MH)
  117.     BUF=5200    /THE FILE OUTPUT BUFFER
  118.             /5 BLOCKS LONG, TO 7577
  119.  
  120.  
  121.     FIELD 1
  122.     *2000
  123.     SKP CLA        /NORMAL ENTRY
  124.     JMP MSTRT    /CHAIN ENTRY
  125. CDCALL,    JMS I (200    /SEE WHAT THE PERSON WANTS
  126.     5
  127. STAR,    5200        /IN SPECIAL MODE
  128.  
  129. MSTRT,    JMS I (CLRSCN
  130.     TAD I (OPT2    /GET OPTION /W
  131.     RTR
  132.     SNL CLA        /SKIP FOR VESION NUMBER
  133.     JMP EQUALT
  134.     JMS I (ERROR    /PRINT VERSION NUMBER
  135.     VERNO+40
  136.     TAD (215
  137.     JMS I (TYPE
  138.  
  139. /SET UP FOR MULTIPLE ENTRIES ON A LINE
  140.  
  141. EQUALT,    TAD I (EQLS    /EQUALS OPTION WORD
  142.     SPA        /MUST BE POSITIVE
  143.     CLA CLL CML RTR    /SET AC LARGE POSITIVE
  144.     TAD (-10    /CHECK LEGALITY OF OPTION
  145.     SMA SZA CLA    /SKIP IF GOOD
  146.     JMP BADEQ
  147.  
  148. /SUBSTITUTE .DI IF NULL EXTENSION
  149.  
  150.     TAD I (7604    /GET EXTENSION
  151.     SNA        /SKIP IF GIVEN
  152.     TAD (0411    /.DI
  153.     DCA I (7604    /PUT EXTENSION BACK
  154.  
  155. / GET THE DATE INCREMENT BITS
  156.  
  157.     CDF    0    /GET GET WORD FORM FIELD 0(MH)
  158.     TAD I    (BIPCCL    /THE BITS WITH DATE EXT. ARE 3 AND 4 (MH)
  159.     CDF    10    /BACK TO FIELD 1 (MH)
  160.     RTR        /SHIFT THOSE BITS SO THEY CREATE A 0,10,20, OR 30(MH)
  161.     RTR        /AFTER MASKING (MH)
  162.     AND    (0030    /MASK (MH)
  163.     DCA    DATINC    /SAVE THE DATE EXTENSION (MH)
  164.  
  165. / CHECK FOR ? IN OUTPUT SPECIFICATION
  166.     TAD (-10
  167.     DCA CNT        /CNT HAVING -10 PUTS US AT FIRST CHAR
  168. S1C,    TAD (7605
  169.     JMS I (GTSXBT    /GET A CHAR
  170.     TAD (-"?!7700    /CHECK FOR ?
  171.     SNA
  172.     JMP QINO
  173.     TAD ("?-"*
  174.     SNA CLA
  175.     JMP AINO
  176.     ISZ CNT
  177.     JMP S1C
  178.  
  179.  
  180. / CHECK FOR EMBEDDED * IN ANY SPECIFICATION
  181.     TAD (7605
  182. S4L,    DCA PTR
  183.     TAD (-10
  184.     DCA CNT
  185. ACK,    TAD PTR
  186.     JMS I (GTSXBT
  187.     TAD (-"*!7700
  188.     SZA CLA
  189.     JMP CNTUP
  190.     AC2
  191.     TAD CNT
  192.     SZA
  193.     TAD (6
  194.     SNA CLA
  195.     ISZ CNT
  196.     TAD PTR
  197.     JMS I (GTSXBT
  198.     SZA CLA
  199.     JMP AINO
  200. CNTUP,    ISZ CNT
  201.     JMP ACK
  202.     TAD I PTR
  203.     SNA CLA
  204.     JMP I (NULLCK
  205.     TAD (5
  206.     TAD PTR
  207.     JMP S4L
  208.  
  209. /THIS IS THE END OF OPERATION CODE
  210. /IT CLOSES THE FILE AND HANDLES RETURNS
  211.  
  212. ENDCHK,    ISZ I (ECHO
  213.     TAD (232
  214. OLOOP,    JMS I (OUTCHR
  215.     TAD I (OUWDCT    /GET -WORDS LEFT IN BUFFER
  216.     AND (177    /CHECK AGAINST NEW BUFFER #
  217.     SNA        /SPR 2286, CHECK CAREFULLY (MH)
  218.     TAD    RPOS    /TO SEE IF ANY TRAILING (MH)
  219.     CIA        /OR DANGLING CHARS (MH)
  220.     TAD    (RPOS-1    /ARE LEFT OVER (MH)
  221.     SZA!CLA        /(MH)
  222.     JMP OLOOP    /KEEP GOING TO DUMP ONE
  223.     TAD I (OUWDCT
  224.     TAD (1200    /DONT DUMP IF AT END
  225.     SZA CLA
  226.     JMS DUMP    /DUMP BUFFER
  227.     TAD I (7600
  228.     JMS I (200
  229.     4
  230.     7601
  231. CLEN,    0
  232.     JMP CLOERR
  233.     JMP    ABORT    /CODE MOVED TO ANOTHER PAGE (MH)
  234.  
  235.     PAGE
  236.  
  237. NULLCK,    TAD (7201
  238.     DCA AO2
  239.     TAD (7201
  240.     DCA AO1
  241.     TAD I (7600
  242.     SNA
  243.     JMP TTYHND
  244.     JMS I (200
  245.     1
  246. AO1,    7201
  247.     HLT
  248.     TAD AO1
  249.     JMP CMN
  250. TTYHND,    TAD (2424
  251.     DCA TTY1
  252.     TAD (3100
  253.     DCA TTY2
  254.     JMS I (200
  255.     1
  256. TTY1,    0
  257. TTY2,    0
  258. AO2,    7201
  259.     JMP I (IDBLVT
  260.     TAD TTY2
  261.     DCA I (7600
  262.     TAD AO2
  263. CMN,    DCA OUHAND
  264.     TAD (7601
  265.     DCA BLCK
  266.     TAD I (7600
  267.     JMS I (200
  268.     3
  269. BLCK,    7601
  270. LENGTH,    0
  271.     JMP I (NOROOM
  272.     TAD BLCK
  273.     DCA I (BLCKN
  274.     TAD (BUF
  275.     DCA I (OCPTR
  276.     TAD (RPOS-1    /SPR 2286 (MH)
  277.     DCA I (RPOS
  278.     TAD (-1200    /NUMBER OF WORDS IN BUFFER
  279.     DCA I (OUWDCT
  280.     DCA I (CLEN
  281.     TAD I (7605
  282.     SNA
  283.     JMP FINDSK    /V3C    IF NO DEVICE SPECIFIED, LOOKUP 'DSK'
  284. SETDEV,    DCA I (7605
  285.     TAD (7605
  286. DOMOIN,    DCA INFPTR
  287.     TAD (6601
  288.     DCA AI1
  289.     TAD I INFPTR
  290.     SNA
  291.     JMP I (ENDCHK
  292.     JMS I (200
  293.     1
  294. AI1,    6601
  295.     HLT
  296.     TAD AI1
  297.     DCA INHAND
  298.     TAD (OUTCHR
  299.     DCA OSWTCH
  300.     JMS I (CRLF
  301.     TAD I (DATE
  302.     DCA I    (DATNOW    /SAVE CURRENT DATE (MH)
  303.     TAD I    (DATE    /GET DATE BACK INTO AC (MH)
  304.     JMS I (PDATE
  305.     JMS I (CRLF
  306.     JMS I (CRLF
  307.     DCA I (ECOUNT
  308.     CMA
  309.     TAD I (EQLS
  310.     SMA        /SET UP NEGATIVE COUNT
  311.     CMA
  312.     DCA I (ALNCNT    /SAVE FOR LATER
  313.     TAD I (ALNCNT    /SAVE FOR LATER
  314.     DCA I (LNCNT    /SAVE FOR LATER
  315.     JMP I (PG1
  316.  
  317. AINO,    JMS I (ERROR
  318.     ILLA+40
  319.     JMP EOLIN
  320. QINO,    JMS I (ERROR
  321.     ILLQ+40
  322. EOLIN,    TAD (215    /COME HERE TO ABORT DIRECTORY
  323.     JMS I (TYPE    /AND PRINT CRLF
  324.     JMP I (ABORT    /ABORT OPERATION AND  GOTO ENDUP
  325.  
  326. FINDSK,    DCA XX        /V3C
  327.     JMS I (200    /CALL USR
  328.     12        /TO DO AN INQUIRE
  329.     5723        /TO LOCATE 'DSK'
  330. XX,    0
  331.     0
  332.     JMP I (IDBLVT    /NO 'DSK' IMPOSSIBLE (SO SAY NO 'TTY')
  333.     TAD XX        /RETURN DEVICE NUMBER OF DSK
  334.     JMP SETDEV
  335.     PAGE
  336.     DIRCTY=2000    /LOCATION OF INPUT DIRECTORY
  337.  
  338. PG1,    TAD I INFPTR
  339.     TAD (7757
  340.     DCA TEMP
  341.     TAD I TEMP
  342.     SMA CLA
  343.     JMP NFIN
  344.     CIF 0
  345.     JMS I INHAND
  346.     1400
  347.     DIRCTY
  348.     1
  349.     JMP INDERR
  350.     CDF 0        /CODE TO CHECK FOR
  351.     TAD I (DIRCTY    /LEGALITY OF DIRECTORY
  352.     CMA CLL
  353.     TAD I (DIRCTY+2
  354.     CDF 10
  355.     SNL
  356.     TAD (7700
  357.     SZL CLA
  358.     JMP BIDIR    /DIRECTORY IS BAD
  359.  
  360. / COUNT NUMBER OF INPUTS FROM SAME DEVICE
  361.     TAD INFPTR
  362.     SKP
  363. GETCNT,    TAD PTR
  364.     IAC
  365.     DCA PTR
  366.     TAD I PTR
  367.     SZA CLA
  368.     JMP NOSUB
  369.     TAD (5200
  370.     DCA I PTR
  371.     TAD (3
  372.     TAD PTR
  373.     DCA TEMP
  374.     TAD (5200
  375.     DCA I TEMP
  376. NOSUB,    TAD PTR
  377.     TAD (4
  378.     DCA PTR
  379.     ISZ CNT
  380.     TAD I (OPT2
  381.     AND (10
  382.     SZA CLA
  383.     JMP NOPTIM
  384.     TAD I PTR
  385.     CIA
  386.     TAD I INFPTR
  387.     SNA CLA
  388.     JMP GETCNT
  389. NOPTIM,    TAD CNT
  390.     CIA
  391.     DCA INSCNT
  392.     TAD PTR
  393.     DCA I (MOIN
  394.     TAD (DIRCTY
  395.     DCA BDPTR
  396.     JMP I (NBLOCK
  397.  
  398. BIDIR,    JMS I (ERROR
  399.     BADDIR+40
  400.     JMP I (EOLIN
  401. NFIN,    JMS I (ERROR
  402.     NFLEIN+40
  403.     JMP I (EOLIN
  404. INDERR,    JMS I (ERROR
  405.     BADIRD+40
  406.     JMP I (EOLIN
  407.  
  408. /THIS IS THE ERROR MESSAGE PRINTER
  409.  
  410. ERROR,    0
  411.     ISZ I (ECHO
  412.     CLA CLL
  413.     TAD (TYPE
  414.     DCA OSWTCH
  415.     TAD (-100
  416.     DCA CNT
  417. PLOOP,    TAD I ERROR
  418.     JMS I (GTSXBT
  419.     DCA DFLAG
  420.     TAD DFLAG
  421.     JMS I (CONVTP
  422.     ISZ CNT
  423.     TAD DFLAG
  424.     SZA CLA
  425.     JMP PLOOP
  426.     ISZ ERROR
  427.     JMP I ERROR
  428.  
  429. DFLAG,    0
  430. ABORT,    TAD I    (ALTOPT    /MOVED (MH)
  431.     SMA CLA
  432.     JMP I    (CDCALL
  433.     CIF CDF 0
  434.     JMP I    (7605
  435. BADEQ,    JMS I    (ERROR
  436.     BIGEQ+40
  437.     JMP I    (EOLIN
  438.  
  439.     PAGE
  440.  
  441. /THIS IS THE SUPERQUASIFACETED DIRECTORY PATTERN MATCHING ROUTINE
  442.  
  443. /THE INPUT DIRECTORY IS SEARCHED HERE, IF A MATCH
  444. /IS FOUND USING THE INPUT GROUPING
  445. /GOT1 GETS CONTROL WITH -BLOCKS IN THE AC
  446.  
  447. NBLOCK,    TAD BDPTR    /POINTER TO START OF DIR BLOCK
  448.     DCA XR
  449.     CDF 0
  450.     TAD I XR    /GET BLOCK NUMBER FIRST FILE
  451.     DCA BLOCK
  452.     TAD I XR    /NEXT SEGMENT NUMBER
  453.     DCA LFLAG    /IF IT 0 WE AT END
  454.     ISZ XR        /SKIP TENTATIVE FILE WORD
  455.     TAD I XR    /GET -NUMBER OF INFO WORDS
  456.     CIA        /MAKE POSITVE
  457.     DCA INFWDS
  458.     TAD XR        /POINT TO FIRST
  459.     IAC        /ENTRY
  460.     DCA EPTR
  461.  
  462. BLOOP,    TAD I EPTR    /GET FILENAME WORD
  463.     CDF 10
  464.     SNA CLA        /SKIP IF FILE HERE
  465.     JMP EMPTY    /NO... ITS REALLY AN EMPTY
  466.     TAD INSCNT    /SET NUMBER OF INPUT TO LOOK
  467.     DCA NCNT    /AT ALL AT ONCE
  468.     DCA MATFLG    /CLEAR MATCH FLAG
  469.     TAD INFPTR    /ADDRESS OF FIRST INPUT
  470.     SKP
  471. MN1,    TAD GPTR2    /ADDRESS OF CURRENT INPUT
  472.     TAD (5        /GTSXBT SUBR REQUIRES US TO
  473.     DCA GPTR2    /POINT TO END OF FIELD
  474.     TAD EPTR    /POINT DIRECTORY POINTER TO
  475.     TAD (4        /END OF ENTRY FOR SAME REASON
  476.     DCA GPTR1
  477.     TAD GPTR1    /SET EPNEXT TO POINT TO
  478.     TAD INFWDS    /MINUS NUMBER OF BLOCKS IN
  479.     DCA EPNEXT    /FILE WORD
  480.     TAD (-10    /NUMBER OF CHARS TO LOOK AT
  481. WILDNM,    DCA CNT
  482.  
  483. MLP,    TAD GPTR2    /OK - GET A CHARACTER FROM
  484.     JMS I (GTSXBT    /STRING
  485.     TAD (-"*!7700    /IS IT AN *
  486.     SNA        /SKIP IF NOT *
  487.     JMP WILDA    /YEP... ITS A WILD CARD
  488.     TAD ("*-"?    /IS IT A ?
  489.     SNA        /SKIP IF NOT
  490.     JMP WILD    /YES... FORCE MATCH ON THIS CHAR
  491.     TAD ("?&77    /RESTORE VALUE
  492.     CIA        /NEGATE
  493.     DCA CHAR    /AND SAVE
  494.     TAD GPTR1    /NOW GET CHAR FROM DIRECTORY
  495.     CDF 0
  496.     JMS I (GTSXBT
  497.     CDF 10
  498.     TAD CHAR    /DO CHARS MATCH
  499.     SZA CLA        /SKIP IF THEY DO
  500.     JMP NM1        /NO MATCH ON THIS INPUT
  501. WILD,    ISZ CNT        /BUMP COUNT OF CHARS & POINTER
  502.     JMP MLP        /COMPARE ALL 8
  503. MEXT,    ISZ MATFLG    /A MATCH!!!!!!!
  504. NM1,    CLA        /WILD CARD COMES HERE WITH ICHY AC
  505.     ISZ NCNT    /HAVE WE CHECKED GROUP OF INPUTS
  506.     JMP MN1        /NO CHECK WHOLE GROUP
  507.     TAD MATFLG    /HAVE THERE BEEN ANY MATCHES
  508.     SZA CLA        /SKIP IF NOT
  509.     TAD (4        /WILL INVERT /V SWITCH
  510.     TAD I (OPT2    /ADD SWITCH
  511.     AND (4        /ISOLATE IT
  512.     CDF 0
  513. /SKIPS IF INPUT DIRECTORY ENTRY IS NOT CANDIDATE
  514. /THAT IS - IF A MATCH WAS NOT FOUND BETWEEN ANY
  515. /OF THE INPUTS AND /V WAS NOT SPECIFIED   OR
  516. /A MATCH WAS FOUND AND /V WAS SPECIFIED
  517.  
  518. /THIS ALLOWS /V TO MEAN EVERYTHING BUT...
  519.  
  520.     SZA CLA
  521.     TAD I EPNEXT    /GET -NUMBER OF BLOCKS
  522.     CDF 10
  523.     SZA        /SKIPS IF TENTATIVE OR NOT CANDIDATE
  524.     JMP I (GOT1    /PROCESS FILE
  525. NENT,    TAD EPNEXT    /POINT EPTR TO BLOCK
  526.     DCA EPTR    /COUNT OF FILE
  527.     JMP NEMPTY
  528. EMPTY,    ISZ EPTR    /ON EMPTY MAKE EPTR POINT TO BLOCK COUNT
  529.     JMS I (HEMPTY    /HANDLE EMPTY SLOTS
  530. NEMPTY,    CDF 0
  531.     TAD I EPTR    /GET BLOCK COUNT
  532.     CIA        /MAKE POSITIVE
  533.     TAD BLOCK
  534.     DCA BLOCK    /KEEP SUM
  535.     ISZ EPTR    /POINT TO NEXT ENTRY
  536.     ISZ I BDPTR    /POINTS TO -NUMBER OF ENTRIES
  537.     JMP BLOOP    /NOT DONE WITH SEGMENT
  538.     CDF 10
  539.     TAD (400    /BUMP TO NEXT SEGMENT
  540.     TAD BDPTR
  541.     DCA BDPTR
  542.     TAD LFLAG    /DID WE PROCESS LAST SEGMENT
  543.     SZA CLA        /SKIP IF WE DID
  544.     JMP NBLOCK    /PROCESS NEW SEGNENT
  545.     JMP I (SAYNON
  546.  
  547. /HANDLE WILD CARDS
  548.  
  549. WILDA,    TAD CNT        /GET CURRENT CHAR POSITION
  550.     TAD (6        /ADD SIZE OF FILENAME
  551.     SPA        /SKIP IF IN EXTENSION FIELD
  552.     JMP WILDNM    /THIS BUMPS TO EXTENSION
  553.     JMP MEXT    /THIS MEANS IT HAS TO BE A MATCH
  554.  
  555.  
  556. CHAR,    0
  557. EPNEXT,    0
  558. GPTR2,    0
  559. LFLAG,    0
  560. NCNT,    0
  561. BLOCK,    0
  562. MATFLG,    0
  563.  
  564.  
  565.     PAGE
  566. GOT1,    DCA IFCNT    /-# OF BLOCKS IN AC
  567.     TAD I (OPT2
  568.     AND (100    /IS /R USED
  569.     SNA CLA
  570.     JMP NOR
  571.     TAD INFPTR    /FILL IN *.* FOR FILENAME
  572.     IAC
  573.     DCA TEMP
  574.     TAD (5200    /*
  575.     DCA I TEMP
  576.     ISZ TEMP
  577.     ISZ TEMP
  578.     ISZ TEMP    /POINT TO EXTENSION
  579.     TAD (5200    /.*
  580.     DCA I TEMP    /SUBSTITUTE IT
  581. NOR,    JMS I (DATCHK    /VERIFY /C AND /O SWITCHES
  582.     TAD (OUTCHR
  583.     DCA OSWTCH
  584.     TAD I (OPT2
  585.     SPA CLA
  586.     JMP I (NENT
  587.     JMS I (ADDINF    /SEE IF ADDITIONAL INFO WORDS
  588.     TAD GPTR1
  589.     CDF
  590.     JMS I (PNMSUB
  591.     TAD I (OPT1
  592.     RTL
  593.     SNL CLA
  594.     JMP SKPBLK
  595.     JMS I (CONVTP
  596.     TAD I (BLOCK
  597.     JMS BSPACE    /(MH) PATCH FOR /B/E
  598. SKPBLK,    TAD I (OPT1
  599.     AND (100
  600.     SZA CLA
  601.     JMP NODATE
  602.     TAD IFCNT
  603.     CIA
  604.     JMS I (PRNUM
  605.     TAD INFWDS
  606.     SNA CLA
  607.     JMP NODATE
  608.     CDF
  609.     TAD I GPTR1
  610.     CDF 10
  611.     JMS I (PDATE
  612. NODATE,    ISZ LNCNT    /IS LINE FILLED?
  613.     JMP MOROLN    /NO
  614.     JMS CRLF
  615.     TAD ALNCNT    /RESET COUNT
  616.     DCA LNCNT
  617.     JMP I (NENT
  618. MOROLN,    TAD (5        /OUTPUT 5 BLANKS
  619.     JMS I (BLANK
  620.     JMP I (NENT
  621.  
  622. /BLANKS ROUTINE
  623. BLANK,    0
  624.     CIA
  625.     DCA BLTMP
  626.     JMS I (CONVTP
  627.     ISZ BLTMP
  628.     JMP .-2
  629.     JMP I BLANK
  630. BLTMP,    0
  631.  
  632.  
  633. ALNCNT,    0
  634. LNCNT,    0
  635.  
  636. OUTCHR,    0
  637.     JMP I RPOS
  638. RPOS1,    DCA I OCPTR
  639.     JMS RPOS
  640. RPOS2,    DCA HOLD
  641.     JMS RPOS
  642. RPOS3,    RTL
  643.     RTL
  644.     DCA HOLD2
  645.     TAD HOLD2
  646.     AND (7400
  647.     TAD I OCPTR
  648.     DCA I OCPTR
  649.     ISZ OCPTR
  650.     TAD HOLD2
  651.     RTL
  652.     RTL
  653.     AND (7400
  654.     TAD HOLD
  655.     DCA I OCPTR
  656.     ISZ OCPTR
  657.     ISZ OUWDCT
  658.     SKP
  659.     JMS DUMP
  660.     JMS RPOS
  661.     JMP RPOS1
  662. RPOS,    RPOS1
  663.     JMP I OUTCHR
  664.  
  665. OUWDCT,    0
  666. OCPTR,    0
  667. HOLD,    0
  668. HOLD2,    0
  669. BSPACE,    0    /(MH) PATCH FOR /B/E
  670.     JMS I    (OPRNT
  671.     CLA!IAC
  672.     JMS I    (BLANK
  673.     JMP I    BSPACE
  674.  
  675.     PAGE
  676.  
  677. GTSXBT,    HLT
  678.     CLL RAL
  679.     TAD CNT
  680.     CML RAR
  681.     DCA TEMP
  682.     TAD I TEMP
  683.     SNL
  684.     JMS ROTR6
  685.     AND (77
  686.     JMP I GTSXBT
  687.  
  688.  
  689. ROTR6,    0
  690.     RTR
  691.     RTR
  692.     RTR
  693.     JMP I ROTR6
  694.  
  695. CONVTP,    HLT
  696.     SZA
  697.     TAD (240
  698.     AND (77
  699.     TAD (240
  700.     JMS I OSWTCH
  701.     JMP I CONVTP
  702.  
  703.     //TTY OUT. BEFORE EXECUTING, CHECK KEYBOARD FOR A ^O.
  704.     //LEAVE HERE WITH ^O AS "CHARACTER TO MATCH".
  705.     //IF ^O IS FOUND, COME BACK AT CALL+2, "SET" ^O FLAG BY
  706.     //ZAPPING IT (CHEESH!), THEN EXIT WITH CHARACTER NOT TYPED.
  707.     //IF ^O IS NOT FOUND, AND ^O FLAG IS "CLEAR", RE-ENTER
  708.     //CYTPE VIA CINTER, THIS TIME LOOKING FOR ^P (RETURN TO
  709.     //CHAIN OR CALLER) OR A ^C (ABORT TO MONITOR). IF NEITHER IS
  710.     //FOUND, YOU CAN FINALLY PRINT THE CHARACTER AT TTY. YEA.
  711. TYPE,    HLT
  712.     DCA HOLD1
  713.     TAD (217
  714.     JMS I (CTYPE
  715.     SKP
  716.     DCA ECHO
  717.     TAD ECHO
  718.     SNA CLA
  719.     JMP I TYPE
  720.     JMS I (CINTER
  721.     SKP
  722.     JMP I (ABORT
  723.     TAD HOLD1
  724.     JMS TTY
  725.     JMP I TYPE
  726.  
  727. HOLD1,    0
  728.  
  729. TTY,    0
  730.     SNA
  731.     TAD (240
  732.     TLS
  733.     TSF
  734.     JMP .-1
  735.     TAD (-215
  736.     SZA CLA
  737.     JMP I TTY
  738.     TAD (12
  739.     JMP TTY+1
  740.  
  741. ECHO,    1
  742.  
  743. OPRNT,    0
  744.     DCA GTSXBT
  745.     TAD (-4
  746.     DCA CNT
  747. OPLP,    TAD GTSXBT
  748.     RTL CLL
  749.     RAL
  750.     DCA GTSXBT
  751.     TAD GTSXBT
  752.     RAL
  753.     AND (7
  754.     TAD (260
  755.     JMS I (CONVTP
  756.     ISZ CNT
  757.     JMP OPLP
  758.     JMP I OPRNT
  759.  
  760.  
  761. /ROUTINE TO MAKE SURE USER SPECIFIED
  762. //C AND /O SWITCHES CAUSE CORRECT MATCH WITH DATE
  763.  
  764. DATCHK,    0
  765.     TAD I (OPT1    /CHECK /C
  766.     JMS MDATE
  767.     NOP        /RETURN HERE WITH AC=0 IF NO /C
  768.     SZA CLA        /RETURN HERE WITH AC=0 IF DATES MATCH
  769.     JMP I (NENT    /DATES DONT MATCH AND /C GIVEN
  770.     TAD I (OPT2    /CHECK /V
  771.     JMS MDATE
  772.     CMA CLA        /SET AC=-1 IF NO /V
  773.     SNA CLA        /RETURN HERE AC=0 IF DATES SAME
  774.     JMP I (NENT    /DATES SAME WITH /V-IGNORE FILE
  775.     JMP I DATCHK    /CONTINUE
  776.  
  777. MDATE,    0        //O AND /V ARE AC2
  778.     RTL        /IS IT OPTION ON?
  779.     SMA CLA        /SKIP IF IT IS
  780.     JMP I MDATE    /NO- RETURN WITH 0 AC
  781.     ISZ MDATE    /SKIP RETURN
  782.     CDF 0
  783.     TAD I GPTR1    /GET DATE WORD
  784.     CIA
  785.     CDF 10
  786.     TAD I (DATE    /COMPARE WITH MONITORS, 0 IF =
  787.     JMP I MDATE
  788.  
  789.     PAGE
  790.  
  791. PRNUM,    0
  792.     DCA NUM
  793.     TAD (PWRTEN
  794.     DCA PTR
  795. PRNTLP,    ISZ MPNTCNT
  796.     SKP
  797.     AC4000
  798.     DCA PNTFLG
  799.     DCA DIG
  800. DIVLPY,    TAD I PTR
  801.     SNA
  802.     JMP I PRNUM
  803.     CLL
  804.     TAD NUM
  805.     SNL
  806.     JMP PRTDIG
  807.     DCA NUM
  808.     ISZ DIG
  809.     JMP DIVLPY
  810. PRTDIG,    CLA
  811.     TAD DIG
  812.     TAD PNTFLG
  813.     SNA
  814. STPBLK,    JMP PRBLNK
  815.     TAD (260
  816.     JMS I (CONVTP
  817.     CLA CLL CML RAR
  818. NXTPWR,    ISZ PTR
  819.     JMP PRNTLP
  820. PRBLNK,    JMS I (CONVTP
  821.     JMP NXTPWR
  822.  
  823. NUM,    0
  824. PNTFLG,    0
  825. DIG,    0
  826. MPNTCNT,0
  827.  
  828. PWRTEN,    -1750;-144;-12;-1;0
  829.  
  830. PDATE,    0
  831.     SNA
  832.     JMP FDATE
  833.     DCA DATEY
  834.     TAD    DATNOW    /WAS A DATE ENTERED AT BOOT TIME?(MH)
  835.     SNA        /SKIP IF SO(MH)
  836.     JMP    FDATE    /NO -- DON'T PRINT DATE IF NOT ENTERED(MH)
  837.     AND    (7    /YES -- SAVE YR NEGATED(MH)
  838.     CMA!IAC        /(MH)
  839.     DCA    DATTMP    /SAVE THIS RESULT TEMP(MH)
  840.     ISZ I (STPBLK
  841.     JMS I (CONVTP
  842.     ACM3
  843.     DCA I (MPNTCNT
  844.     TAD DATEY
  845.     RTR
  846.     RAR
  847.     AND (37
  848.     JMS I (PRNUM
  849.     TAD ("-
  850.     JMS I (CONVTP
  851.     TAD DATEY
  852.     CLL RTL
  853.     RTL
  854.     RAL
  855.     AND (17
  856.     DCA PRNUM
  857.     TAD PRNUM
  858.     TAD PRNUM
  859.     TAD PRNUM
  860.     TAD (DATTAB-4
  861.     DCA XR
  862.     ACM3
  863.     DCA CNT
  864.     TAD I XR
  865.     JMS I OSWTCH
  866.     ISZ CNT
  867.     JMP .-3
  868.     TAD ("-
  869.     JMS I OSWTCH
  870.     TAD DATEY
  871.     AND (7
  872.     TAD    DATTMP    /ADD -ENTERED YR(MH)
  873.     CLL        /CLEAR LINK FOR FLAG USE(MH)
  874.     SZA!SMA!CLA    /SKIP AND CLEAR IF ENTERED YR BIGGER,SAME(MH)
  875.     CML        /SET LINK IF DIR YR BIGGER THAN ENETERED YR (MH)
  876.     TAD    DATEY    /GET DATE BACK(MH)
  877.     AND    (7    /GET THE YR(MH)
  878.     SZL        /SKIP IF ENTERED YR WAS BIG OR SAME(MH)
  879.     TAD    (-10    /SUBTRACT 10 OCTAL IF DIR YR WAS BIGGER(MH)
  880.     TAD    DATINC    /ADD DATE INCREMENT(MH)
  881.     TAD (106
  882.     JMS I (PRNUM
  883.     CLA CMA
  884.     TAD I (STPBLK
  885.     DCA I (STPBLK
  886.     JMP I PDATE
  887. FDATE,    TAD I (LNCNT    /SEE IF AT END OF LINE?
  888.     IAC        /AC=0 NOW IF YES
  889.     SNA CLA        /OUT PUT SPACES TO FILL DATE SLOT
  890.     JMP I PDATE    /NO NEED FOR SPACES IF AT END OF LINE
  891.     TAD (12        /10 SPACES IS WHATS NEEDED
  892.     JMS I (BLANK
  893.     JMP I PDATE    /LEAVE
  894.  
  895. DATEY,    0
  896. DATNOW,    0    /CURRENT DATE IF ONE WAS ENTERED(MH)
  897. DATINC,    0    /DATE ENXTENSION TO 1970 (0,10,20, OR 30) (MH)
  898. DATTMP,    0    /TEMP STORE (MH)
  899.  
  900.     PAGE
  901.  
  902.     //V4 KEEPS ORIGINAL INTENT: CALL +1 FOR NO JOY, CALL +2 FOR MATCH.
  903.     //UP TO CALLER TO DECIDE FOR BAILOUT TO MONITOR, CD, OR NOECHO.
  904. CTYPE,    0
  905.     KSF
  906.     JMP .+7        //NO FLAG--EXIT.
  907.     DCA T2
  908.     KRB
  909.     AND (177
  910.     TAD (200
  911.     CIA
  912.     TAD T2
  913.     SZA CLA
  914.     JMP I CTYPE
  915.     TAD ("^
  916.     JMS I (TTY
  917.     TAD T2
  918.     TAD (100
  919.     JMS I (TTY
  920.     TAD (215
  921.     JMS I (TTY
  922.     ISZ CTYPE
  923.     JMP I CTYPE
  924.  
  925. T2,    0
  926.  
  927. CINTER,    0
  928.     TAD (203
  929.     JMS CTYPE
  930.     JMP UPPCK
  931.     JMP SPURGE
  932. UPPCK,    TAD (220
  933.     JMS CTYPE
  934.     JMP I CINTER
  935.     SKP
  936. SPURGE,    CMA
  937.     DCA I (ALTOPT
  938.     ISZ CINTER
  939.     JMP I CINTER
  940.  
  941. HEMPTY,    0
  942.     CDF 0
  943.     TAD I EPTR
  944.     CDF 10
  945.     CIA
  946.     TAD ECOUNT
  947.     DCA ECOUNT
  948.     TAD I (OPT1
  949.     AND (200
  950.     SZA CLA
  951.     JMP LISTEM
  952.     TAD I (OPT2
  953.     SMA CLA
  954.     JMP I HEMPTY
  955. LISTEM,    TAD I (OPT1
  956.     AND (10        /IS /I GIVEN
  957.     SNA CLA        /IF YES PAD BY ADDIDTIONAL INFO WORDS
  958.     JMP EMSG
  959.     CLA CMA
  960.     TAD INFWDS    /NUMBER OF SPACES=5*(INFWDS-1)
  961.     DCA DFLAG
  962.     TAD DFLAG
  963.     RTL CLL
  964.     TAD DFLAG
  965.     SZA        /DONT OUTPUT 4096 BLANKS
  966.     JMS I (BLANK
  967. EMSG,    TAD (EMPTYM-1
  968.     DCA XR1
  969.     TAD (-11
  970.     DCA CNT
  971. EOLP,    TAD I XR1
  972.     JMS I (OUTCHR
  973.     ISZ CNT
  974.     JMP EOLP
  975.     TAD I (OPT1    /LOOK FOR /B
  976.     RTL
  977.     SNL CLA
  978.     JMP SKIPES
  979.     JMS I (CONVTP
  980.     TAD I (BLOCK
  981.     JMS I    (BSPACE    /(MH) PATCH FOR /B/E
  982. SKIPES,    TAD I (OPT1
  983.     AND (100    /CHECK FOR /F
  984.     SZA CLA
  985.     JMP AROUND
  986.     CDF 0
  987.     TAD I EPTR
  988.     CDF 10
  989.     CIA
  990.     JMS I (PRNUM
  991. AROUND,    ISZ I (LNCNT    /AT END OF LINE
  992.     JMP WORK    /NO. HAVE TO DO BLANK PADDING
  993.     JMS I (CRLF
  994.     TAD I (ALNCNT    /RESET COUNT
  995.     DCA I (LNCNT
  996.     JMP I HEMPTY
  997. WORK,    TAD (5        /FORCES 5 BLANKS
  998.     JMS I (BLANK
  999.     TAD I (OPT1
  1000.     AND (100    /CHECK FOR /F
  1001.     SZA CLA
  1002.     JMP I HEMPTY
  1003.     TAD (12        /FORCE 10 BLANKS TO COVER DATE
  1004.     JMS I (BLANK
  1005.     JMP I HEMPTY
  1006.  
  1007. ECOUNT,    0
  1008.  
  1009.     PAGE
  1010.  
  1011. PNMSUB,    0
  1012.     DCA NMEPLC
  1013.     RDF
  1014.     TAD (CDF
  1015.     DCA FLDFUD
  1016.     TAD (-10
  1017.     DCA CNT
  1018. PNLOOP,    TAD NMEPLC
  1019. FLDFUD,    HLT
  1020.     JMS I (GTSXBT
  1021.     CDF 10
  1022.     JMS I (CONVTP
  1023.     TAD (3
  1024.     TAD CNT
  1025.     SZA CLA
  1026.     JMP .+3
  1027.     TAD (".
  1028.     JMS I OSWTCH
  1029.     ISZ CNT
  1030.     JMP PNLOOP
  1031.     JMP I PNMSUB
  1032.  
  1033. NMEPLC,    0
  1034.  
  1035. WRTERR,    JMS I (ERROR
  1036.     OUERR+40
  1037.     JMP I (EOLIN
  1038. CLOERR,    JMS I (ERROR
  1039.     CLERR+40
  1040.     JMP I (EOLIN
  1041. NOROOM,    JMS I (ERROR
  1042.     SPRBLM+40
  1043.     JMP I (EOLIN
  1044. IDBLVT,    JMS I (ERROR
  1045.     NOTTY+40
  1046.     JMP I (EOLIN
  1047.  
  1048. SAYNON,    TAD (OUTCHR
  1049.     DCA OSWTCH
  1050.     JMS I (CRLF
  1051.     JMS I (CRLF
  1052.     TAD (-4        /FORCE PRINTING OF ONLY 1 DIGIT
  1053.     DCA I (MPNTCNT    /FOR 0 FREE BLOCKS
  1054.     TAD I (ECOUNT
  1055.     JMS I (PRNUM
  1056.     JMS I (CONVTP
  1057.     TAD (FRBLM-1
  1058.     DCA XR1
  1059.     TAD (-13
  1060.     DCA CNT
  1061. FRBLP,    TAD I XR1
  1062.     JMS I (OUTCHR
  1063.     ISZ CNT
  1064.     JMP FRBLP
  1065.     JMS I (CRLF
  1066.     TAD (14        /FORM FEED
  1067.     JMS I (OUTCHR
  1068.     TAD MOIN
  1069.     JMP I (DOMOIN
  1070.  
  1071. MOIN,    0
  1072.  
  1073. CRLF,    0
  1074.     TAD (215
  1075.     JMS OUTCHR
  1076.     TAD (212
  1077.     JMS OUTCHR
  1078.     JMP I CRLF
  1079.  
  1080. /ROUTINE TO DUMP ADDITIONAL INFO WORDS IF WANTED
  1081.  
  1082. ADDINF,    0
  1083.     TAD I (OPT1
  1084.     AND (10        /CHECK /I SWITCH
  1085.     SNA CLA
  1086.     JMP I ADDINF
  1087.     CLA CMA
  1088.     TAD INFWDS    /GET NUMBER
  1089.     SPA SNA        /MUST BE 2 OR MORE TO PRINT
  1090.     JMP CLARET    /RETURN
  1091.     CIA
  1092.     DCA CNTX
  1093.     TAD GPTR1
  1094.     IAC        /BUMP TO FIRST ONE
  1095.     DCA PGPTR1
  1096. ADDLP,    CDF 0
  1097.     TAD I PGPTR1    /GET WORD
  1098.     CDF 10
  1099.     JMS I (OPRNT    /PRINT IT IN OCTAL
  1100.     JMS I (CONVTP    /OUTPUT A BLANK
  1101.     ISZ PGPTR1    /BUMP
  1102.     ISZ CNTX    /COUNT NUMBER
  1103.     JMP ADDLP
  1104. CLARET,    CLA        /RETRN
  1105.     JMP I ADDINF
  1106.  
  1107. PGPTR1,    0
  1108. CNTX,    0
  1109.  
  1110.     PAGE
  1111.  
  1112. VERNO,    TEXT /DIRECT VERSION B3/
  1113. BADIRD,    TEXT /ERROR READING INPUT DIRECTORY/
  1114. SPRBLM,    TEXT /NO ROOM FOR OUTPUT FILE/
  1115. OUERR,    TEXT /ERROR WRITING FILE/
  1116. CLERR,    TEXT /ERROR CLOSING FILE/
  1117. NFLEIN,    TEXT /DEVICE DOES NOT HAVE DIRECTORY/
  1118. BIGEQ,    TEXT /EQUALS OPTION BAD/
  1119. ILLQ,    TEXT /ILLEGAL ?/
  1120. ILLA,    TEXT /ILLEGAL */
  1121. BADDIR,    TEXT /BAD INPUT DIRECTORY/
  1122. NOTTY,    TEXT /NO TTY HANDLER IN SYSTEM/
  1123. EMPTYM,    "[;240;"e;"m;"p;"t;"y;240;"]
  1124. FRBLM,    "F;"r;"e;"e;240;"b;"l;"o;"c;"k;"s
  1125.  
  1126.     "B;"A;"D    /PROTECTION AGAINST BAD DATE
  1127. DATTAB, "J;"a;"n
  1128.     "F;"e;"b
  1129.     "M;"a;"r
  1130.     "A;"p;"r
  1131.     "M;"a;"y
  1132.     "J;"u;"n
  1133.     "J;"u;"l
  1134.     "A;"u;"g
  1135.     "S;"e;"p
  1136.     "O;"c;"t
  1137.     "N;"o;"v
  1138.     "D;"e;"c
  1139.     "B;"A;"D    /PROTECTION AGAINST BAD DATE
  1140.     "B;"A;"D    /PROTECTION AGAINST BAD DATE
  1141.     "B;"A;"D    /PROTECTION AGAINST BAD DATE
  1142.  
  1143. DUMP,    0
  1144.     TAD I (LENGTH    /GET LENGTH AVAILABLE
  1145.     SNA        /IF ZERO ITS NON FILE STRUCTURE
  1146.     JMP NOMATR    /IF ZERO DOESNT MATTER
  1147.     STL
  1148.     TAD I (CLEN    /ADD CURRENT SIZE
  1149.     TAD (5        /ADD # OF BLOCKS
  1150.     SNL SZA CLA
  1151.     JMP I (NOROOM
  1152.     TAD I (CLEN    /UPDATE CLOSING LENGTH
  1153.     TAD (5        /BY NUMBER OF BLOCKS
  1154.     DCA I (CLEN    /SAVE FOR CLOSE
  1155. NOMATR,    TAD OUWDCT
  1156.     TAD (5210
  1157.     DCA CTLWD
  1158.     CIF 0
  1159.     JMS I OUHAND
  1160. CTLWD,    5210
  1161. BUFAD,    BUF
  1162. BLCKN,    0
  1163.     JMP WRTERR
  1164.     TAD (5
  1165.     TAD BLCKN    /UPDATE BLOCK # BY 5
  1166.     DCA BLCKN
  1167.     TAD (-1200
  1168.     DCA OUWDCT
  1169.     TAD BUFAD
  1170.     DCA OCPTR
  1171.     JMP I DUMP
  1172. /
  1173.  
  1174.     *4600
  1175.  
  1176.     JMS INIT
  1177.     JMS INIT
  1178.     JMP I (2000
  1179.     JMP I (2001
  1180. INIT,    0
  1181.     ISZ INIT
  1182.     CLA CLL
  1183.     TAD (2000
  1184.     CDF 0
  1185.     DCA I (7745
  1186.     TAD (6403
  1187.     DCA I (7746
  1188.     CDF 10
  1189.     JMP I INIT
  1190.  
  1191. CLRSCN,    0            /CLEAR SCREEN
  1192.     CLL CLA
  1193.     CDF 0
  1194.     TAD I (7771
  1195.     CDF 10
  1196.     AND    (4        /IS SYSTEM SET TO VT278
  1197.     SNA CLA
  1198.     JMP I    CLRSCN        /NO RETURN
  1199.     CDF 0            /IS BATCH RUNNING
  1200.     TAD I    (7777
  1201.     CDF 10
  1202.     AND    (2000
  1203.     SZA CLA
  1204.     JMP I    CLRSCN
  1205.     TAD    (CLRMSG
  1206.     DCA    CLRXXX
  1207. CLR1,    TAD I    CLRXXX
  1208.     SNA
  1209.     JMP I    CLRSCN
  1210.     JMS I    (TTY
  1211.     ISZ    CLRXXX
  1212.     JMP    CLR1
  1213.  
  1214. CLRMSG,    33;"[;"H;33;"[;"2;"J;0    /CLEAR SCREEN AND PLACE CURSOR AT HOME
  1215. CLRXXX,    0
  1216.  
  1217.