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 / set.pa < prev    next >
Text File  |  1992-09-18  |  79KB  |  4,105 lines

  1. /SET.PA OS278
  2.  
  3. /FROM:
  4. //11 OS8 SET (PAL8/MACREL VERSION)
  5.  
  6. /
  7. /S.R.
  8. /
  9. /
  10. /    S E T
  11. /
  12. /
  13. /
  14. /
  15. /
  16. /
  17. /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
  18. /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
  19. /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
  20. /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
  21. /
  22. /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
  23. /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
  24. /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
  25. /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
  26. /
  27. /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
  28. /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
  29. /DIGITAL.
  30. /
  31. /
  32. /    COPYRIGHT (C) 1977,1978,1981,1982 BY DIGITAL EQUIPMENT CORPORATION.
  33. /
  34. /
  35. /
  36. /
  37. //SAVE STRING FOR V4:
  38.  
  39.  
  40. /0-777,1400-7577,12000-16377,30000-33577=2100
  41.  
  42. /START IS AT 200
  43.  
  44. /    EDIT HISTORY:
  45.  
  46. /    19-MAR-77    REMOVED FROM CAMP V4
  47. /    19-MAR-77    FIXED BUG WITH SET MTA FILES
  48. /    19-MAR-77    FIXED BUG WITH SET CDR
  49. /    19-MAR-77    FIXED BUG WITH = OPTION
  50. /    19-MAR-77    CONVERTED TO MACREL CODE
  51. /    01-APR-77    TTY PAUSE
  52. /    01-APR-77    TTY HEIGHT
  53. /    01-APR-77    TTY SCOPE
  54. /    17-APR-77    REWROTE TTY PAGE
  55. /    17-APR-77    DEV: DVCODE
  56. /    17-APR-77    FINISHED TTY SCOPE
  57. /    27-APR-77    TTY COL
  58. /    27-APR-77    SYS OPTIONS (INIT, OS8, OS78)
  59. /    03-MAY-77    LA8A, LA78
  60. /    03-MAY-77    INIT OS78 FIXES TERMINATE
  61. /    03-MAY-77    BASIC FIXES
  62. /    29-JUN-77    TTY ARROW    (NOT FOR PS/8)
  63. /    29-JUN-77    TTY ESC        (NOT FOR PS/8)
  64. /    29-JUN-77    DEV BLK LOC    (NOT FOR PS/8)
  65. /    08-DEC-77    ADDED SYMBIONT SUPPORT
  66. /    23-MAY-78    FIXED SCOPE BUG AND 2-PAGE SYS HANDLER BUG
  67. /    08-JUN-78    FIXED WIDTH=N BUG
  68. /    01-FEB-79    COMMENTED THE PROGRAM
  69. /    09-JAN-81    ADDED SYS VT278 OPTION
  70. /    13-JAN-81    ADDED CODE TO ALLOW SET SYS DEVICE OPTION
  71. /    15-APR-81    CHANGED "SET TTY XXX" TO SUPPORT NEW VERSION ONLY
  72. /VB0 OS278 CHANGES
  73. /    05-AUG-82    FIXED SET SYS DEVICE TO INCLUDE 1 ADDITIONAL
  74. /            DIRECTORY SEGMENT
  75. /    05-AUG-82    ADDED TEXT FOR RX50 HANDLERS
  76. /VB1
  77. /    15-OCT-82    CHANGED VERSION CHECK FOR CCL
  78. /    16-NOV-82    CHANGED ODT PATCH TABLE TO REFLECT CHANGES
  79. /    19-NOV-82    CHANGED SET SYS VT278 TO OS278
  80. /            CHANGED BATCH DEFAULTS TO ZERO, DON'T BOOT
  81. /    29-NOV-82    REMOVED CODE FOR RX28,RX78 CHECK
  82. /            REMOVED TEXT FOR RX28 AND VXA0
  83. /            ALLOW SET LPT WIDTH TO WORK ON LPTS HANDLER
  84. /            REMOVED BRACE AND BRACKET CHECKS FOR ALTMODE
  85. /    27-DEC-82    ADDED TEXT FOR COMM HANDLER
  86. /    04-JAN-83    CHANGED KBMTBL,CDTBL TO REFLECT CHANGES TO
  87. /            SYSTEM FOR LC CHAR SUPPORT
  88. /            CHANGED SET SYS DEVICE QUESTIONS FOR UC OR LC
  89. /VB2    13-JAN-84    Version change to match CCL.SV
  90. /    16-JAN-84    Removed call to FIXCCL termin has been removed
  91. /            from CCL.
  92. /VB3    19-JAN-84    Change version to match CCL
  93.  
  94.  
  95.  
  96. //FOR OS78 V4 RELEASE:
  97.  
  98.     VOS278=4        //RECOGNIZES SET SYS OS278
  99.     VERSION="B&77^100+63    //VERSION IS "B3"
  100.  
  101. /    MUST SKIP LOCS 1000-1777
  102.  
  103. /FIELD 0 BUFFERS:
  104.  
  105.     LINBUF=1000
  106.  
  107.     AUXBUF=6600
  108.  
  109.     HNDLBF=7200
  110.  
  111. /0000-0777    /SET
  112. /1000-1377    /OS/8 LINE BUFFER
  113. /1400-1777    /PS/8 LINE BUFFER **SHARED BY "SET SYS OS8; OS78; OS278" **
  114. /2000-6577    /SET
  115. /6600-7177    /AUXILIARY I/O BUFFER **SHARED BY "SET HANDLER"**
  116. /7000-7177    /I/O BUFFER FOR TECO CCB **SHARED BY SOME "ERROR MESSAGES"
  117. /7200-7577    /OS/8 HANDLER
  118. /7600-7777    /OS/8
  119.  
  120. //MONITOR CROSS REFERENCES:
  121.  
  122.     MONIT= 7600
  123.  
  124.     MONIT5=7605
  125.  
  126.     SHNDLR=7607
  127.  
  128.     SCPBIT=7726        /BIT 4
  129.  
  130.     IFDEF EDF <MACREL=1>
  131.     IFNDEF EDF <MACREL=0>
  132.  
  133.     IFNZRO MACREL    < .ASECT AAA
  134.     >
  135.     IFZERO MACREL < *0 >
  136.  
  137.     0
  138.     CIF 30
  139.     JMP .-1
  140.     IFNZRO MACREL <    .XSECT XSET
  141.     >
  142.     IFZERO MACREL < *10 >
  143.  
  144. XR1,    0
  145. XR2,    0
  146. XR3,    0
  147.  
  148.     IFNZRO MACREL <    .ZSECT ZSET
  149.     >
  150.     IFZERO MACREL < *20 >
  151. TEMP,    0
  152. T,    0
  153. T2,    0
  154. LINPTR,    0
  155. T3,    0
  156. FLAG,    0
  157. SPKNT,    0
  158. DEVTYP,    0            /DEVICE TYPE (BITS 6-11)
  159. ENTRY,    0            /HANDLER ENTRY POINT
  160. NUM,    0
  161. TYP,    0            /0 MEANS 'F', 1 MEANS 'R'
  162. T4,    0
  163. DEVNUM,    0
  164. DCW,    0            /DEVICE CONTROL WORD
  165. DCWPTR,    0
  166. USR,    200            /POINTS TO USR ENTRY POINT
  167. ESCBIT,    0            /1 MEANS USER TYPED ALTMODE
  168. CNT,    0
  169. CTOFLG,    0            /-1 MEANS SAW ^O
  170. PTR,    0
  171. DHIT,    0            /DEVICE HANDLER INFO TABLE - 1
  172. DHI,    0            /DEVICE HANDLER INFO
  173. DBLK,    0            /DEVICE HANDLER BLOCK
  174. VNOPTR,    0            /PTS TO VERSION # IN HANDLER
  175. VNO,    0            /CURRENT HANDLER VERSION NUMBER
  176. SAVPTR,    0
  177. NO,    0            /1 MEANS 'NO'
  178. FLG,    1            /1 MEANS SAW NO DIGITS
  179. RR,    0
  180. NUCODE,    0
  181. SCOP,    0            /NON-0 IF TTY IS SCOPE
  182. NUM2,    0
  183. SYSSWT,    0            /1=OS8 SYS; 2=OS78 SYS; 3=OS278 SYS
  184. TBLPTR,    0            /POINTER TO TABLE OF CHANGES FOR SET SYS OS78
  185.  
  186.  
  187.  
  188.  
  189.     IFNZRO MACREL <    .ASECT ASET
  190.     >
  191.     *200
  192.  
  193. START,    SKP
  194.     JMP CHN
  195.     TAD ["#
  196.     JMS I [TYPE
  197.     JMS BIT
  198.     JMS I [READ        /READ A LINE INTO OS/8 LINE BUFFER
  199. CHN,    TAD [LINBUF        /CHAIN ENTRY ADDRESS
  200.     DCA LINPTR        /INITIALIZE POINTER TO LINE BUFFER
  201.     JMS BIT
  202.     STA
  203.     JMS I [SPACE        /IGNORE LEADING SPACES
  204. SEHAN,    JMS GETTWO        /GET TWO CHARS
  205.     DCA TEMP
  206.     JMS I [SCAN        /SCAN PAST EXTRA LETTERS OR DIGITS
  207.     TAD TEMP
  208.     JMS I [BRANCH        /GO TO APPROPRIATE ROUTINE
  209.     -2305;SET        /SE
  210.     -2605;SVERSION        /VE
  211.     -1005;HELPMS        /HE
  212.     -1405;DRIVER        /___ ____LER XXXX XXXX
  213.                 /DRIVER ACCESSED FOR SET HANDLER INPUT
  214.                 /WITH POINTER AT ...LER
  215.     0
  216.     SNA CLA
  217.     JMP I (BADINP        /INSUFFICIENT INPUT
  218.     JMP I [SYNTAX        /NONE OF THESE
  219.  
  220. BIT,    0
  221.     CDF 10
  222.     TAD I (SCPBIT
  223.     CDF 0
  224.     AND [200
  225.     DCA SCOP        /NOTE WHETHER TTY IS SCOPE    V3D
  226.     TAD I (7612
  227.     TAD (-3
  228.     SNA CLA
  229.     JMS I (FIX2P        /FIXUP 2-PAGE SYSTEM HANDLER
  230.     DCA .-1            /ONCE
  231.     JMP I BIT
  232. /    GETTWO
  233.  
  234. /GET TWO LETTERS OR DIGITS FROM INPUT LINE, PACK IN SIXBIT
  235. /ADVANCE PAST THEM. SUBSTITUTE NULL IF NOT FOUND.
  236.  
  237. GETTWO,    0
  238.     JMS GETSIX
  239.     CLL RTL
  240.     RTL
  241.     RTL
  242.     DCA T2
  243.     JMS GETSIX
  244.     TAD T2            /COMBINE
  245.     JMP I GETTWO
  246.  
  247. GETSIX,    0        //GET A SIXBIT LETTER OR DIGIT (OR NULL)
  248.     JMS ALPHA        /IS IT ALPHANUMERIC?
  249.     JMP NOTALPH        /NO
  250.     AND [77            /YES
  251.     JMP I GETSIX        /TRUNCATE TO SIXBIT
  252. NOTALPH,CLA
  253.     JMS BACKC
  254.     JMP I GETSIX        /RETURN NULL
  255.  
  256. GETC,    0        //GET A CHARACTER, ADVANCE POINTER
  257.     TAD I LINPTR
  258.     AND [177        /ALWAYS RETURN 8-BIT
  259.     SZA
  260.     TAD [200        /WITH HIGH ORDER BIT ON
  261.     ISZ LINPTR        /ADVANCE SCAN
  262.     JMP I GETC        /RETURN
  263.  
  264. BACKC,    0        //MOVE SCAN POINTER BACK ONE
  265.     STA
  266.     TAD LINPTR
  267.     DCA LINPTR
  268.     JMP I BACKC        /RETURN
  269. /RETURN 1    NOT OF TYPE DESIRED
  270. /RETURN 2    DESIRED TYPE
  271. /IN BOTH CASES, CHAR IS LEFT IN AC
  272.  
  273. ALPHA,    0        //LOOK FOR ALPHANUMERIC
  274.     JMS I [GETC
  275.     JMS LETTER        /IS IT A LETTER?
  276.     JMP TRYDIG        /NO, TRY DIGIT
  277.     JMP GOTAL        /YES
  278. TRYDIG,    JMS DIGIT        /IS IT A DIGIT?
  279.     JMP I ALPHA        /NO, AINT LETTER OR DIGIT
  280. GOTAL,    ISZ ALPHA        /YES, EITHER LETTER OR DIGIT
  281.     JMP I ALPHA        /RETURN WITH IT IN AC
  282.  
  283. LETTER,    0        //LOOK FOR LETTER
  284.     TAD (-"A
  285.     CLL
  286.     TAD ("A-"Z-1
  287.     SNL
  288.     ISZ LETTER
  289.     TAD ("Z+1        /RESTORE CHAR
  290.     JMP I LETTER
  291.  
  292. DIGIT,    0        //LOOK FOR DIGIT
  293.     TAD (-"0
  294.     CLL
  295.     TAD ("0-"9-1        /(DECIMAL)
  296.     SNL
  297.     ISZ DIGIT
  298.     TAD ("9+1        /RESTORE DIGIT TO CHARACTER FORM
  299.     JMP I DIGIT        /AND RETURN WITH IT IN AC
  300. HELPMS,    JMS I [PRINT
  301.     TEXT    "USE CCL 'HELP' COMMAND"
  302.     JMP I [GOAWAY
  303.  
  304.     PAGE
  305. SYNTAX,    CLA
  306.     JMS PRINT
  307.     TEXT    "? BAD SYNTAX"
  308. GOAWAY,    TAD ESCBIT
  309.     SZA CLA
  310.     JMP I [MONIT5        /LINE ENDED WITH ESCAPE
  311.     TAD I [READ        /WAS 'READ' EVER CALLED?
  312.     SZA CLA
  313.     JMP I [START        /YES, GET A NEW LINE
  314.     JMP I [MONIT5        /NO, WE MUST'VE BEEN CHAINED TO, RECALL KBM
  315.  
  316. PRINT,    0        //ROUTINE TO PRINT TEXT STRING
  317.     TAD I PRINT        /CHARACTER STORED SIX BIT
  318.     RTR            /ISOLATE FIRST CHARACTER IN WORD
  319.     RTR
  320.     RTR
  321.     JMS PRIN
  322.     TAD I PRINT        /ISOLATE SECOND CHARACTER
  323.     JMS PRIN
  324.     ISZ PRINT        /ZERO SIGNALS END OF TEXT STRING
  325.     JMP PRINT+1
  326. LV,    JMS I [CRLF
  327.     ISZ PRINT        /POINT TOWARD PROPER RETURN
  328. PRCDF,    CIF 0            /CHANGED BY FIELD ONE CALL
  329.     JMP I PRINT
  330.  
  331. PRIN,    0
  332.     AND [77            /ISOLATE SIX BIT CHARACTER
  333.     SNA
  334.     JMP LV            /IF ZERO, END OF STRING
  335.     TAD [240        /PROCESS CHARACTER
  336.     AND [77            /IS IT A # OR LETTER?
  337.     TAD [240
  338.     DCA T3            /EITHER WAY EVERYTHING COMES OUT ALRIGHT
  339.     TAD [200
  340.     KRS            /TEST FOR CTRL/C
  341.     TAD (-203
  342.     SNA
  343.     JMP CTRLC        /THERE IT IS!
  344.     TAD (203-217        /TEST FOR CTRL/O
  345.     SNA CLA
  346.     JMS CTRLO
  347.     KCC            //V4: FOR THE 278. (WON'T GET HERE FROM CCL)
  348.     TAD T3            /TYPE CHARACTER
  349.     JMS I [TYPE
  350.     JMP I PRIN
  351. CTRLC,    TAD ["^
  352.     JMS I [TYPE
  353.     TAD ("C
  354.     JMS I [TYPE        /ECHO "^C"
  355.     JMS I [DELAYY
  356.     JMP I [MONIT        /THEN GO AWAY
  357. CTRLO,    0
  358.     KCC            /CLEAR OUT ^O
  359.     TAD ["^
  360.     JMS I [TYPE
  361.     TAD ("O
  362.     JMS I [TYPE
  363.     JMS I [CRLF
  364.     STA
  365.     DCA CTOFLG        /STOP ECHOING
  366.     JMP I CTRLO
  367.  
  368. NUMBIG,    JMS PRINT
  369.     TEXT    "? NUMBER TOO BIG"
  370.     JMP I [GOAWAY
  371. NONEX,    JMS PRINT
  372.     TEXT    "? CAN'T - DEVICE DOESN'T EXIST"
  373.     JMP I [GOAWAY
  374.  
  375. SYSERR,    JMS PRINT
  376.     TEXT    "? I/O ERROR ON SYS:"
  377.     JMP I [GOAWAY
  378. FIX2P,    0
  379.     TAD (66
  380.     DCA I TB
  381.     ISZ .-1
  382.     ISZ KTR
  383.     JMP .-4
  384.     JMP I FIX2P
  385. TB,    TP1;TP2;TP3;TP4
  386. KTR,    -4
  387.             //ROUTINE TO JUMP TO SET HANDLER CODE
  388.             //IN FIELD ONE
  389. DRIVER,    0
  390.     CIF CDF 10
  391.     JMP I (HSET
  392.  
  393.     PAGE
  394.  
  395. SYSINI,    0        //SET SYS INIT COMMAND COMES HERE
  396.     JMS I [GETC        /SEE IF WE HAVE A COMMAND?
  397.     SNA CLA
  398.     JMP DEFINI        /ASSUME @INIT
  399.     TAD NO            /TEST FOR NO INIT
  400.     SZA CLA
  401.     JMP I [SYNTAX        /SET SYS NO INIT CMD
  402.     JMS I [BACKC        /RESET POINTER
  403.     TAD LINPTR
  404.     DCA SAVLP
  405.     TAD (-6            /ALLOW A MAXIMUM OF 5 CHARS
  406.     DCA SAVKN
  407. SAVLUP,    JMS I [GETC
  408.     SNA CLA
  409.     JMP DEFDO        /GOT THE COMMAND GO SET
  410.     ISZ SAVKN
  411.     JMP SAVLUP
  412.     JMS I [PRINT
  413.     TEXT    "? INIT COMMAND TOO BIG"
  414.     JMP I [GOAWAY
  415.  
  416. SAVKN,    0
  417. SAVLP,    0
  418.  
  419. INIT=    1107        //IN OS8V4.PA; ENTRY FOR SET SYS INIT
  420. KMNTRY=    0400        //           ENTRY FOR SET SYS NO INIT
  421.  
  422. DEFINI,    TAD (INIMSG        /DEFAULT INIT COMMAND
  423.     DCA SAVLP
  424. DEFDO,    JMS I [SHNDLR        /READ IN BOOTSTRAP PROGRAM FROM BLOCK ZERO
  425.     200
  426.     AUXBUF
  427. TP1,    0
  428.     JMP I [SYSERR
  429.     TAD NO            /WAS INIT SET OR DELETED?
  430.     SZA CLA
  431.     TAD (KMNTRY-INIT    /NO INIT; STORE "KMNTRY" AS MONITOR LOC. TO JUMP TO
  432.     TAD (INIT        /IF INIT IS SET STORE "INIT" AS MONITOR LOC. TO JUMP TO
  433.     DCA I (AUXBUF+77    /IN LOCATION 77 OF BOOTSTRAP
  434.     JMS I [SHNDLR        /WRITE BOOTSTRAP
  435.     4200
  436.     AUXBUF
  437. TP2,    0
  438.     JMP I [SYSERR
  439.     TAD NO            /WAS THERE A COMMAND?
  440.     SZA CLA
  441.     JMP I SYSINI        /IF NOT, RETURN ...
  442.     JMS I [SHNDLR        /YES, IT'S NECESSARY TO STORE IT IN THE MONITOR
  443.     200
  444.     AUXBUF
  445.     11            /READ IN BLOCK 11 (KMON 1000-1377) ON THE DEVICE
  446.     JMP I [SYSERR
  447.     STA
  448.     TAD SAVLP        /SET UP POINTER TO THE COMMAND
  449.     DCA XR2
  450.     TAD (AUXBUF-1        /SET UP POINTER TO THE BUFFER(=LOC 1000 OF MONITOR)
  451.     DCA XR3
  452.     TAD (-5            /MAXIMUM OF 5 CHARS IN COMMAND
  453.     DCA SAVKN
  454. MOVL,    TAD I XR2        /STORE COMMAND
  455.     DCA I XR3
  456.     ISZ SAVKN
  457.     JMP MOVL
  458.     JMS I [SHNDLR        /WRITE BACK TO THE DISK AREA
  459.     4200
  460.     AUXBUF
  461.     11
  462.     JMP I [SYSERR
  463.     JMP I SYSINI
  464.  
  465. INIMSG,    "@;"I;"N;"I;"T;0
  466.  
  467. /TABLE FOR SET SYS     OS8    OS78        OS278
  468.  
  469. ODT1,    MOD5;        LXM;    LXM;        CLA
  470.     0
  471. ODT2,    MOD6;        LXM;    LXM;        CLA
  472.     0
  473. ODT3,    MOD7;        RXM;    RXM;        NOP
  474.     MOD8;        LXM;    LXM;        CLA
  475.     MOD9;        4573;    4573;        CLL RTL
  476.     MOD10;        NOP;    NOP;        RAL
  477.     0
  478.  
  479.  
  480.             //CALLED TO ACCESS SPACE ROUTINE
  481.             //FROM FIELD 1
  482.  
  483. SPACE1,    0
  484.     JMS I (SPACE
  485.     CIF CDF 10
  486.     JMP I SPACE1
  487.  
  488.             //CALLED TO ACCESS GETDEV ROUTINE
  489.             //FROM FIELD 1
  490. DEVGET,    0
  491.     JMS I [GETDEV        /CALL GETDEV
  492.     CIF CDF 10        /SET UP DATA AND INSTRUCTION FIELDS
  493.     JMP I DEVGET        /RETURN
  494.  
  495.     *1000
  496.  
  497. /LOCATIONS 1000-1377
  498. /RESERVED FOR OS8 LINE BUFFER
  499.  
  500.  
  501.     *1400
  502.  
  503. /******THIS AREA IS USED UNDER PS/8 FOR LINE BUFFER******
  504. /IF USING A PS8 SYSTEM THE "SET SYS OS8, OS78 OR OS278" CANNOT BE USED
  505.  
  506. /DEFINITIONS FOR SYSTEM MODIFICATIONS
  507.  
  508. MONIT0=    0
  509. KMON11=    11
  510. KMON12=    12
  511. ODT60=    60
  512. ODT61=    61
  513. ODT63=    63
  514. SAVE64=    64
  515.  
  516.  
  517. MOD0=    AUXBUF+371        /IN KEYBOARD MONITOR: OS8-OS78-OS278 I.D. BIT
  518.  
  519. MOD1=    AUXBUF+67        /         OS8-OS78-OS278 I.D. BIT
  520.  
  521. MOD2=    AUXBUF+64        /         KT8A INSTRUCTION LXM-->NOP
  522.  
  523. MOD3=    AUXBUF+264        /         KT8A INSTRUCTION LXM-->CLA
  524.  
  525. MOD4=    AUXBUF+301        /         KT8A INSTRUCTION LXM-->CLA
  526.  
  527. MOD5=    AUXBUF+240
  528.  
  529. MOD6=    AUXBUF+265        /     KT8A INSTRUCTION LXM-->CLA
  530.  
  531. MOD7=    AUXBUF+51        /     KT8A INSTRUCTION RXM-->NOP
  532.  
  533. MOD8=    AUXBUF+54        /     KT8A INSTRUCTION LXM-->CLA
  534.  
  535. MOD9=    AUXBUF+67        /    JMS I [XLODE-->CLL RTL
  536.  
  537. MOD10=    AUXBUF+70        /    NOP-->RAL
  538.  
  539. LXM=    6200
  540. RXM=    6230
  541.  
  542. /THE FOLLOWING SYSXXX ROUTINE WERE ADDED OR MODIFIED FOR V4 VERSION
  543.  
  544. SYSOS8,    0
  545.     TAD NO        
  546.     SZA CLA
  547.     JMP ERRNO        /CAN'T USE 'NO' MODIFIER
  548.     IAC
  549.     DCA NO            /FOR OS8 NO=1
  550.     IAC
  551.     JMS SYSMOD
  552.     JMS I [PRINT
  553.     TEXT        "OS8 SYS"
  554.     JMP I SYSOS8
  555.  
  556. SYS78,    0
  557.     TAD NO
  558.     SZA CLA
  559.     JMP ERRNO
  560.     DCA NO            /FOR OS78 NO=0
  561.     CLL CLA IAC RAL        /AC=2
  562.     JMS SYSMOD
  563.     JMS I [PRINT
  564.     TEXT        "OS78 SYS"
  565.     JMP I SYS78
  566.  
  567. SYS278,    0
  568.     TAD NO
  569.     SZA CLA
  570.     JMP ERRNO
  571.     CLA CLL CML RAR        /SET AC 4000
  572.     DCA NO            /FOR OS278 NO=4000
  573.     CLA STL IAC RAL        /AC=3
  574.     JMS SYSMOD
  575.     JMS I [PRINT
  576.     TEXT        "OS278 SYS"
  577.     JMP I SYS278
  578.  
  579. ERRNO,    JMS I [PRINT
  580.     TEXT        "? CAN'T USE 'NO' MODIFIER"
  581.     JMP I [GOAWAY
  582.  
  583.  
  584.  
  585. SYSMOD,    0
  586.     DCA SYSSWT        /SAVE SYSTEM SWITCH; 0=OS8; 1=OS78; 2=OS278
  587.     TAD [7771
  588.         JMS I [SET200        /SET SYS I.D. BIT IN CORE
  589.     JMS I [MODBLK        /DO THE PATCHING
  590.     MONIT0            /BLOCK TO BE MODIFIED
  591.     MONIT1            /POINTER TO TABLE
  592.     JMS I [MODBLK
  593.     KMON11
  594.     KM1
  595.     JMS I [MODBLK
  596.     KMON12
  597.     KM2
  598.     JMS I [MODBLK
  599.     SAVE64
  600.     SAV1
  601.     JMS I [MODBLK
  602.     ODT60
  603.     ODT1
  604.     JMS I [MODBLK
  605.     ODT61
  606.     ODT2
  607.     JMS I [MODBLK
  608.     ODT63
  609.     ODT3
  610.     STA
  611.     TAD SYSSWT        /GET CURRENT SYS BEING SET
  612.     SNA CLA
  613.     IAC
  614.     DCA NO            /RESET 'NO' TO PROPER MEANING
  615. /    JMS I SYMOD1        /TIME TO AFFECT CCL
  616.     JMP I SYSMOD
  617.  
  618. /SYMOD1,    FIXCCL
  619.  
  620.  
  621. /TABLE FOR SET SYS     OS8    OS78        OS278
  622.  
  623. MONIT1,    MOD0;        HLT;    HLT+200;    HLT+4
  624.     0
  625. KM1,    MOD1;        HLT;    HLT+200;    HLT+4
  626.     0
  627. KM2,    MOD2;        LXM;    LXM;        NOP
  628.     MOD3;        LXM;    LXM;        CLA
  629.     0
  630. SAV1,    MOD4;        LXM;    LXM;        CLA
  631.     0
  632.  
  633. PAGE
  634.  
  635. /THIS ROUTINE WILL READ A BLOCK, PATCH SPECIFIC LOCATIONS AND WRITE THE BLOCK
  636. /PRIOR TO ENTER THIS ROUTINE "SYSSWT" MUST BE SET FOR THE PROPER SYSTEM
  637.  
  638. /    JMS I [MODBLK
  639. /    BLOCK#
  640. /    POINTER TO TABLE
  641.  
  642.  
  643. MODBLK,    0
  644.     TAD I MODBLK        /BLOCK #
  645.     ISZ MODBLK
  646.     DCA MDBLKR        /TO BE READ
  647.     TAD MDBLKR
  648.     DCA MDBLKW        /TO BE WRITTEN
  649. BLKRD,    JMS I [SHNDLR        /READ THE BLOCK
  650.     0200
  651.     AUXBUF
  652. MDBLKR,    0
  653.     JMP I [SYSERR
  654.     TAD I MODBLK        /POINTER TO TABLE OF CHANGES
  655.     ISZ MODBLK
  656.     DCA MODTBL        /SAVE IT
  657. MDBLK0,    TAD I MODTBL        /GET LOCATION TO BE PATCHED
  658.     SNA
  659.     JMP BLKWRT        /ALL DONE FOR THIS BLOCK
  660.     DCA MODLOC        /SAVE LOCATION TO BE PATCHED
  661.     TAD MODTBL
  662.     TAD SYSSWT        /1=OS8; 2=OS78; 3=OS278
  663.     DCA TBLPTR        /SET POINTER TO THE PROPER LOCATION OF THE NEW CONTENT
  664.     TAD MODTBL
  665.     TAD [4            /ADJUST POINTER TO NEXT ENTRY
  666.     DCA MODTBL
  667.     TAD I TBLPTR        /GET NEW CONTENT
  668.     DCA I MODLOC        /PATCH IT
  669.     JMP MDBLK0        /MORE?
  670. BLKWRT,    JMS I [SHNDLR        /WRITE THE BLOCK BACK
  671.     4200
  672.     AUXBUF
  673. MDBLKW,    0
  674.     JMP I [SYSERR
  675.     JMP I MODBLK    
  676. MODTBL,    0
  677. MODLOC,    0
  678.  
  679.  
  680.  
  681.  
  682. TTESC,    0        //ROUTINE TO PROCESS TTY ESC ATTRIBUTE V3D
  683.     JMS I (OLDTST        /TEST FOR KL8E
  684.     TAD NO
  685.     SZA CLA
  686.     TAD (1377-NOP
  687.     TAD (NOP
  688.     DCA I (HNDLBF+XMIT8
  689.     JMP I TTESC
  690. XMIT8=    214        //LOCATION IN VA0 SERIAL HANDLERS
  691.  
  692. GENBLK,    0        //HANDLES INPUT RELATING TO ANY DEVICE
  693.     JMS I (GENCMN        /GO GET THE COMMAND
  694.     TAD NUM2
  695.     DCA BLOK        /GET BLOCK NUMBER
  696.     TAD (LOC
  697.     JMS I [KEYSRCH        /SEARCH FOR "LOC" KEY WORD
  698.     JMP I [SYNTAX
  699.     JMS I (GENCMN        /GET LOCATION
  700.     TAD [-400        /LOC NUMBER MUST BE LESS THAN 400
  701.     CLL
  702.     TAD NUM2
  703.     SZL CLA
  704.     JMP I [NUMBIG        /IF NOT, NUMBER TOO BIG
  705.     TAD NUM2
  706.     TAD PAUXBUF        /BUFFER START
  707.     DCA NUM2        /NOW POINTS TO LOC IN MEMORY
  708.     JMS I ENTRY        /READ BLOCK FROM SUPPLIED DEVICE
  709.     200
  710. PAUXBUF,AUXBUF
  711. BLOK,    0
  712.     JMP I [SYSERR
  713.     TAD TEMP        /CONTAINS COMMAND LINE DELIMITER
  714.     SNA CLA
  715.     JMS I (ODT        /NO DELIMITER CALL ODT
  716.     JMS I [ONUM        /NO DELIMITER IMPLIES MORE LINE INPUT
  717.     DCA NUM            /STORE NUMBER
  718.     CLA IAC
  719.     DCA DEVNUM        /FAKE OUT - PREVENTS RE-WRITING USED HANDLER
  720.     TAD FLG
  721.     SZA CLA            /IF FLG IS SET, NO DIGITS INPUT
  722.     JMP I GENBLK        /SO, RETURN 
  723.     JMS I [GETC
  724.     SZA CLA            /SHOULDN'T BE ANY OTHER CHARS AFTER THAT
  725.     JMP I [SYNTAX
  726.     TAD NUM            /VALUE INPUT
  727.     DCA I NUM2        /SET NEW VALUE
  728.     TAD BLOK
  729.     DCA BLOK2        /SET UP BLOCK FOR WRITE
  730.     JMS I ENTRY        /WRITE TWO PAGES
  731.     4200
  732.     AUXBUF
  733. TEMP2,
  734. BLOK2,    0
  735.     JMP I [SYSERR
  736.     JMP I GENBLK
  737. BADINP,    JMS I [PRINT
  738.     TEXT     "? BAD INPUT"
  739.     JMP I [GOAWAY
  740.  
  741.     PAGE
  742.     *2000
  743.  
  744. /ORIGIN PAST OS/8 LINE BUFFER AT 1000.
  745. /SKIP PAST PS/8 LINE BUFFER (AT 1400) JUST IN CASE
  746. /PS/8 USERS WISH TO PATCH THIS PROGRAM
  747.  
  748. /SCAN PAST EXTRA LETTERS OR DIGITS
  749.  
  750. SCAN,    0
  751.     JMS I [ALPHA        /ISOLATE NEXT CHARACTER
  752.      JMP NOPE        /RETURNS HERE IF LETTER OR DIGIT
  753.     CLA            /OTHERWISE MOVE PAST IT 
  754.     JMP SCAN+1
  755. NOPE,    CLA            /MOVE POINTER BACK TO LAST NON-DIGIT, NON LETTER
  756.     JMS I [BACKC
  757.     JMP I SCAN
  758.  
  759. /SCAN PAST SPACES; GIVE ERROR IF NO SPACES FOUND UNLESS AC=-1
  760.  
  761. SPACE,    0
  762.     DCA FLAG        /SET AC=-1 TO PREVENT ERROR ON NO SPACES FOUND
  763.     DCA SPKNT        /INITIALIZE SPACE COUNTER
  764.     SKP            /JUMP INTO LOOP
  765. GOTSP,    ISZ SPKNT
  766.     JMS I [GETC        /GET NEXT CHAR
  767.     TAD [-240
  768.     SNA CLA            /IS IT A SPACE?
  769.     JMP GOTSP        /YES, COUNT IT
  770.     JMS I [BACKC        /NO, PUT IT BACK
  771.     ISZ FLAG        /CHECK FLAG
  772.     SKP            /USER DIDN'T SPECIFY FLAG
  773.     JMP I SPACE        /-0 MEANT DON'T CHECK IF FOUND SPACE
  774.     TAD SPKNT        /HOW MANY SPACES DID WE FIND?
  775.     SZA CLA
  776.     JMP I SPACE        /SOME.  OK
  777.     JMP I [SYNTAX        /NONE.  TSK. TSK.
  778.  
  779. BRANCH,    0        //ROUTINE TO IDENTIFY INFO IN AC
  780.     DCA T            /ENTER WITH STRING OF POSSIBLE INFO
  781. BR2,    TAD I BRANCH
  782.     ISZ BRANCH
  783.     SNA            /ZERO IS THE DELIMITER OF INFO
  784.     JMP NOTFND        /NOT FOUND
  785.     TAD T
  786.     SNA CLA            /STRING IS NEGATIVE OF INFO
  787.     JMP FOUND        /SO IF AC IS NON-ZERO WE'VE FOUND IT
  788.     ISZ BRANCH        /OTHERWISE LOOP
  789.     JMP BR2
  790.  
  791. FOUND,    TAD I BRANCH
  792.     DCA T
  793.     JMP I T            /FOUND ITEM IN COL 1, JUMP TO ADDRESS IN COL 2
  794.  
  795. NOTFND,    TAD T
  796.     JMP I BRANCH        /IF NOT FOUND IN COL 1, RETURN WITH AC INTACT
  797.  
  798. BADKBM,    CDF 0
  799.     JMS I [PRINT
  800.     TEXT    "? OLD VERSION OF KBM"
  801.     JMP I [GOAWAY
  802.     LLS=    6666
  803.     DBTD=    6574
  804.     LSF=    6661
  805.     DBST=    6570
  806.  
  807. LP78,    0
  808.     TAD (CMA-NOP
  809.     JMS LP8A
  810.     JMP I LP78
  811.  
  812. LP8A,    0
  813.     TAD (NOP        /AC MAY BE NON-0
  814.     DCA LPKOD
  815.     JMS I (LPTST1
  816.     TAD VNO
  817.     TAD (-2
  818.     SNA CLA
  819.     JMP I (OLDERR
  820.     JMS I [SRCH
  821.     0;200;7700
  822.     JMP I (OLDERR
  823.     TAD (3
  824.     DCA TEMP
  825.     TAD I TEMP
  826.     AND [7000
  827.     TAD [-7000
  828.     SZA CLA            /NOP OR CMA
  829.     JMP I (OLDERR
  830.     TAD LPKOD
  831.     DCA I TEMP
  832.     ISZ TEMP
  833.     TAD I TEMP
  834.     AND [7000
  835.     TAD (-6000
  836.     SZA CLA
  837.     JMP I (OLDERR
  838.     TAD LPKOD
  839.     AND [70
  840.     SZA CLA
  841.     TAD (DBTD-LLS
  842.     TAD (LLS
  843.     DCA I TEMP
  844.     ISZ TEMP
  845.     TAD LPKOD
  846.     DCA I TEMP
  847.     JMS I [SRCH
  848.     100;100;6203
  849.     JMP I (OLDERR
  850.     TAD (2
  851.     DCA TEMP
  852.     TAD LPKOD
  853.     AND [70
  854.     SZA CLA
  855.     TAD (DBST-LSF
  856.     TAD (LSF
  857.     DCA I TEMP
  858.     JMP I LP8A
  859.  
  860. LPKOD,    0
  861.  
  862.             //ROUTINE TO EXECUTE THE SYSTEM DEVICE CHANGER
  863.             //SET SYS DEVICE
  864.             //THIS CODE RUNS IN FIELD THREE
  865.  
  866. SYSNEW,    0
  867.     CIF CDF 30
  868.     JMP I (CHGSYS        /FIELD THREE ROUTINE
  869.  
  870.     PAGE
  871. /READ A LINE INTO OS/8 LINE BUFFER
  872.  
  873. READ,    0
  874.     DCA CTOFLG        /ALLOW ECHOING
  875. RD1,    TAD [LINBUF
  876.     DCA LINPTR
  877.     DCA ESCBIT
  878. GT,    JMS I [GET
  879. LOOK,    JMS I [BRANCH
  880.     -377;RUBOUT
  881.     -217;GT            /^O
  882.     -203;CTRLC        /^C
  883.     -212;LF            /LINE FEED
  884.     -215;CR            /CARRIAGE RETURN
  885. /    -375;ESCAPE        /ALTMODE
  886. /    -376;ESCAPE        /ALTMODE (2ND FLAVOR)
  887.     -233;ESCAPE        /ESCAPE
  888.     -225;CTRLU        /^U
  889.     -200;GT            /IGNORE NULLS
  890.     -223;GT            /IGNORE ^S
  891.     0
  892.     DCA TEMP        /NONE OF THESE
  893.     TAD LINPTR
  894.     TAD (-LINBUF-377
  895.     SNA CLA            /AT END OF LINE BUFFER?
  896.     JMP GT            /YES, DON'T ACCEPT CHAR
  897.     TAD TEMP        /NO, RETRIEVE CHAR
  898.     JMS I [TYPE        /ECHO IT
  899.     TAD TEMP        /INSERT IN BUFFER
  900.     DCA I LINPTR
  901.     ISZ LINPTR        /BUMP POINTER
  902.     JMP GT            /NEXT
  903.  
  904. CTRLU,    TAD ["^
  905.     JMS I [TYPE
  906.     TAD ("U
  907.     JMS I [TYPE        /ECHO "^U" <CR><LF>
  908.     JMS I [CRLF
  909. RDA,    TAD ("#
  910.     JMS I [TYPE
  911.     JMP RD1
  912.     BS=10
  913.  
  914. RUBOUT,    TAD LINPTR
  915.     TAD [-LINBUF
  916.     SNA
  917.     JMP BOL            /AT BEGIN OF LINE
  918.     TAD [LINBUF-1
  919.     DCA LINPTR        /MOVE POINTER BACK ONE
  920.     TAD SCOP
  921.     SZA CLA
  922. RUB3X,    TAD (BS-"\
  923.     TAD ["\
  924.     JMS I [TYPE        /ECHO "\"
  925. RUB3,    TAD SCOP
  926.     SNA CLA
  927.     JMP .+3
  928.     TAD [40
  929.     SKP
  930.     TAD I LINPTR
  931.     JMS I [TYPE        /ECHO RUBBED-OUT CHARACTER
  932.     TAD SCOP
  933.     SNA CLA
  934.     JMP GT2
  935.     TAD [BS
  936.     JMS I [TYPE
  937. GT2,    JMS I [GET
  938.     JMS I [BRANCH
  939.     -377;RUB2
  940.     -216;GT2        /IGNORE ^O
  941.     -203;CTRLC        /^C
  942.     0
  943.     DCA TEMP        /A NEW CHAR
  944.     TAD SCOP
  945.     SZA CLA
  946.     JMP .+3
  947.     TAD ["\
  948.     JMS I [TYPE        /ENCLOSE RUBBED-OUT CHARS IN \'S
  949.     TAD TEMP
  950.     JMP LOOK
  951.  
  952. RUB2,    TAD LINPTR
  953.     TAD [-LINBUF
  954.     SNA
  955.     JMP BOL2
  956.     TAD [LINBUF-1
  957.     DCA LINPTR
  958.     TAD SCOP
  959.     SNA CLA
  960.     JMP RUB3
  961.     JMP RUB3X
  962. BOL2,    TAD SCOP
  963.     SZA CLA
  964.     JMP BOL
  965.     TAD ["\
  966.     JMS I [TYPE
  967. BOL,    JMS I [CRLF
  968.     JMP RDA
  969.  
  970. ESCAPE,    TAD ["$            /ECHO ESCAPE AS DOLLAR SIGN
  971.     JMS I [TYPE
  972.     ISZ ESCBIT        /NOTE ESCAPE
  973. CR,    DCA I LINPTR        /INSERT 0 AT END
  974.     JMS I [CRLF
  975.     JMP I READ        /RETURN, WE GOT LINE
  976. LF,    DCA I LINPTR        /TEMPORARILY INSERT A 0 SENTINEL
  977.     TAD [LINBUF-1
  978.     DCA XR1
  979.     JMS I [CRLF
  980.     TAD ["#
  981.     JMS I [TYPE
  982. LFLP,    TAD I XR1
  983.     SNA
  984.     JMP I [GT        /FINISHED, GET SOME MORE CHARS
  985.     JMS I [TYPE        /ECHO CURRENT CHARS
  986.     JMP LFLP
  987.  
  988.     PAGE
  989. /GET A DECIMAL NUMBER, RETURN IT IN AC
  990.  
  991. NUMBER,    0
  992.     DCA NUM
  993.     CLA IAC
  994.     DCA FLG
  995.     JMS I [BACKC
  996. NM1,    JMS I [GETC
  997.     JMS I [DIGIT
  998.     JMP EON
  999.     TAD (-"0        /CONVERT TO DIGIT
  1000.     DCA T4
  1001.     DCA FLG            /NOTE PASSAGE OF A DIGIT
  1002.     TAD NUM
  1003.     AND [7000
  1004.     SZA CLA
  1005.     JMP I [NUMBIG
  1006.     TAD NUM
  1007.     CLL RTL
  1008.     TAD NUM
  1009.     CLL RAL
  1010.     TAD T4
  1011.     SZL
  1012.     JMP I [NUMBIG
  1013.     DCA NUM
  1014.     JMP NM1
  1015.  
  1016. EON,    CLA
  1017.     JMS I [BACKC
  1018.     TAD FLG
  1019.     SZA
  1020.     DCA NUM            /IF NO DIGITS, RETURN A 1
  1021.     TAD NUM
  1022.     JMP I NUMBER
  1023. /    GETDEV
  1024.  
  1025. /PARSES OFF A DEVICE NAME (1-4 CHARS)
  1026. /DETERMINES IF IT EXISTS
  1027. /LOADS HANDLER INTO 7200-7577 IF NOT ALREADY IN CORE
  1028. /SETS ENTRY POINT ADDRESS AT 'ENTRY'
  1029. /SETS DEVICE NUMBER AT 'DEVNUM'
  1030. /SETS DEVICE CONTROL WORD AT 'DCW'
  1031. /SETS 'DEVTYP'
  1032.  
  1033. GETDEV,    0
  1034.     JMS I [GETTWO
  1035.     DCA WD1
  1036.     JMS I [GETTWO
  1037.     DCA WD2
  1038.     TAD WD1
  1039.     TAD WD2
  1040.     DCA WD1            /COMBINE TWO WORDS INTO 1 (IN WD1)
  1041.     TAD WD2
  1042.     SNA CLA
  1043.     JMP INQ
  1044.     TAD WD1            /OS/8 KLUDGE FOR UNIQUENESS
  1045.     CLL RAL
  1046.     STL RAR            /FORCE BIT 0 ON IF 2ND WORD WAS NON-ZERO
  1047.     DCA WD1
  1048. INQ,    DCA WD2
  1049.     JMS I (HANTES        /GO TEST FOR SET HANDLER COMMAND
  1050.     CIF 10
  1051.     JMS I USR
  1052.     12            /INQUIRE
  1053. WD1,    0            /DEVICE NAME
  1054. WD2,    0            /GETS DEVICE NUMBER
  1055. WD3,    0            /GETS ENTRY POINT
  1056.     JMP I [NONEX        /DEVICE DOESN'T EXIST
  1057.     TAD WD3
  1058.     SZA            /IS HANDLER ALREADY IN CORE?
  1059.     JMP INCORE        /YES
  1060.     TAD WD1
  1061.     DCA DW1
  1062.     TAD (HNDLBF+1        /ALLOW TWO PAGE HANDLER IN 7200
  1063.     DCA DW3
  1064.     DCA DW2
  1065.     CIF 10
  1066.     JMS I USR
  1067.     1            /FETCH
  1068. DW1,    0            /DEVICE NAME
  1069. DW2,    0            /GETS DEVICE NUMBER
  1070. DW3,    0            /GETS ENTRY POINT
  1071.     JMP I [NONEX        /DOESN'T EXIST
  1072.     TAD DW2
  1073.     DCA DEVNUM
  1074.     TAD DW3
  1075.     DCA ENTRY
  1076.     JMP GETYP
  1077. INCORE,    DCA ENTRY
  1078.     TAD WD2
  1079.     DCA DEVNUM
  1080. GETYP,    TAD DEVNUM
  1081.     TAD (7757
  1082.     DCA DCWPTR        /POINT INTO DEVICE CONTROL WORD TABLE
  1083.     CDF 10
  1084.     TAD I DCWPTR        /GET DCW
  1085.     DCA DCW
  1086.     TAD DCW
  1087.     RTR
  1088.     RAR
  1089.     AND [77
  1090.     DCA DEVTYP
  1091.     STA
  1092.     TAD I (37        /GET ADDRESS OF DHIT
  1093.     DCA DHIT
  1094.     TAD DHIT
  1095.     TAD DEVNUM
  1096.     DCA DHI
  1097.     TAD I DHI
  1098.     CDF 0
  1099.     DCA DHI
  1100.     TAD DHI
  1101.     RTL
  1102.     RTL
  1103.     RTL
  1104.     AND (17
  1105.     SZA
  1106.     TAD (15
  1107.     DCA DBLK
  1108.     JMP I GETDEV
  1109.  
  1110. DELAYY,    0
  1111.     TAD (-10
  1112.     DCA OUTER
  1113.     ISZ ZER
  1114.     JMP .-1
  1115.     ISZ OUTER
  1116.     JMP .-3
  1117.     JMP I DELAYY
  1118. ZER,    0
  1119. OUTER,    -10
  1120.  
  1121.     PAGE
  1122. OLDTST,    0        /V3D
  1123.     JMS I (ASRTST
  1124.     TAD VNO
  1125.     JMS I [BRANCH
  1126.     -1;OLDERR
  1127.     -2;OLDERR
  1128.     -3;OLDERR
  1129.     -4;OLDERR
  1130.     -5;OLDERR
  1131.     -6;OLDERR        /OS78 V3.0-SET 6A
  1132.     -260;TSTOK        /TTY VER FOR OS278 IS B0
  1133.     0
  1134.     JMP I [NEWERR
  1135. TSTOK,    JMP I OLDTST
  1136. TTPAUS,    0
  1137.     JMS OLDTST
  1138.     DCA NUM
  1139.     JMS I [GETC
  1140.     SNA CLA
  1141.     JMP NOPA        /NO PAUSE VALUE
  1142.     TAD NO
  1143.     SZA CLA
  1144.     JMP I [SYNTAX        /SET TTY NO PAUSE N
  1145.     JMS I [NUMBER
  1146.     SNA
  1147.     JMP BADPAUS
  1148.     DCA NUM
  1149.     TAD NUM            /SCALE CORRECTLY
  1150.     CLL RAL
  1151.     TAD NUM
  1152.     CLL RTL
  1153.     DCA NUM
  1154.     TAD FLG
  1155.     SZA CLA
  1156.     JMP BADPAUS        /NO DIGITS
  1157.     TAD NUM
  1158.     AND [6000
  1159.     SZA CLA
  1160.     JMP BADPAUS
  1161.     TAD NUM
  1162.     CIA
  1163.     DCA I (HNDLBF+ROUTER
  1164. NOPA,    JMS I (BASLUK
  1165.     JMP I TTPAUS
  1166.     TAD NUM
  1167.     CIA
  1168.     DCA I (AUXBUF+1
  1169.     JMS I (BASWRI
  1170.     JMP I TTPAUS
  1171.  
  1172. ROUTER=    236            //LOCATION IN VA0 SERIAL HANDLERS
  1173. BADPAUS,JMS I [PRINT
  1174.     TEXT    "? BAD VALUE FOR PAUSE DURATION"
  1175.     JMP I [GOAWAY
  1176. ONUM,    0
  1177.     DCA NUM
  1178.     CLA IAC
  1179.     DCA FLG
  1180. ONM1,    JMS I [GETC
  1181.     TAD (-"0-10        /CONVERT TO DIGIT
  1182.     CLL
  1183.     TAD [10
  1184.     SNL
  1185.     JMP OEON
  1186.     DCA T4
  1187.     DCA FLG
  1188.     TAD NUM
  1189.     AND [7000
  1190.     SZA CLA
  1191.     JMP I [NUMBIG
  1192.     TAD NUM
  1193.     CLL RTL
  1194.     RAL
  1195.     TAD T4
  1196.     DCA NUM
  1197.     JMP ONM1
  1198. OEON,    CLA
  1199.     JMS I [BACKC
  1200.     TAD NUM
  1201.     JMP I ONUM
  1202.  
  1203.     PAGE
  1204. TTCOL,    0
  1205.     TAD NO
  1206.     SZA CLA
  1207.     JMP I [SYNTAX        /SET TTY NO COL
  1208.     JMS I [GETC
  1209.     SNA CLA
  1210.     JMP BADCOL        /NO COL SPECIFIED
  1211.     JMS I [NUMBER
  1212.     SNA
  1213.     JMP BADCOL
  1214.     DCA NUM
  1215.     TAD FLG
  1216.     SZA CLA
  1217.     JMP I [SYNTAX
  1218.     TAD NUM
  1219.     AND [7770
  1220.     SZA CLA
  1221.     JMP BADCOL
  1222.     TAD (CCLNAM        /READ IN CCL.SV
  1223.     JMS I [LOOKUP
  1224.     JMP CCLNF        /CCL NOT FOUND
  1225.     TAD (2            /WANT 2ND BLOCK IN CCL
  1226.     DCA ARG2        /CCL LOCATIONS 12400-12777
  1227.     JMS I (SHNDLR
  1228.     200            /READ IN 2 PAGES
  1229.     AUXBUF
  1230. ARG2,    0
  1231.     JMP I [SYSERR
  1232.     TAD ARG2
  1233.     DCA ARG3
  1234.     TAD I (AUXBUF        /GET PTR TO DIRECT COL WORD
  1235.     SPA
  1236.     JMP OLDCCL
  1237.     TAD (AUXBUF-2400    /RELOCATE
  1238.     DCA ARG2
  1239.     TAD NUM
  1240.     DCA I ARG2
  1241.     JMS I (SHNDLR
  1242.     4200
  1243.     AUXBUF
  1244. ARG3,    0
  1245.     JMP I [SYSERR
  1246.     JMP I TTCOL
  1247. BADCOL,    JMS I [PRINT
  1248.     TEXT    "? BAD COLUMN COUNT"
  1249.     JMP I [GOAWAY
  1250.  
  1251. OLDCCL,    CLA
  1252.     JMS I [PRINT
  1253.     TEXT    "? WRONG VERSION OF CCL"
  1254.     JMP I [GOAWAY
  1255. TYPE,    0
  1256.     DCA TYPEM
  1257.     JMS I [DELAYY
  1258.     DCA .-1            /DELAY FIRST TIME THRU TO LET THINGS QUIET DOWN
  1259.     TAD CTOFLG
  1260.     SZA CLA
  1261.     JMP I TYPE        /NO ECHOING
  1262.     TAD TYPEM
  1263.     TLS
  1264.     TSF
  1265.     JMP .-1
  1266.     CLA
  1267.     JMP I TYPE
  1268.  
  1269. TYPEM,    0
  1270.  
  1271. CCLNAM,    FILENAME CCL.SV
  1272.  
  1273. CCLNF,    JMS I [PRINT
  1274.     TEXT    "? CCL.SV NOT FOUND"
  1275.     JMP I [GOAWAY
  1276.     CCLBLK=67
  1277.  
  1278. /NO! NO! NO! NO! NO!  ... NO MORE FOR OS278
  1279.     //PATCH THE CCL COMMAND TABLE TO ALLOW "BACKSPACE" IF OS/8;
  1280.     //OR "TERMINATE" IF OS/78 OR OS/278. IF "NO" IS ZERO, MEANS
  1281.     //78 OR 278.
  1282.  
  1283. /FIXCCL,    0
  1284. /    JMS I [SHNDLR    //READ IN CCL COMMAND TABLE
  1285. /    200
  1286. /    AUXBUF
  1287. /    CCLBLK
  1288. /    JMP I [SYSERR
  1289. /    TAD I (AUXBUF
  1290. /    TAD (-VERSION    //V4 IS VERSION "A0"
  1291. /    SZA CLA
  1292. /    JMP I (OLDCCL    //WRONG VERSION
  1293. /    TAD (CCLTBL
  1294. /    JMS I (FIXUP    //WITH POINTER TO PATCHES TO USE.
  1295. /    JMS I [SHNDLR
  1296. /    4200
  1297. /    AUXBUF
  1298. /    CCLBLK        //WHEN DONE, WRITE IT BACK OUT.
  1299. /    JMP I [SYSERR
  1300. /    JMP I FIXCCL
  1301.  
  1302.     PAGE
  1303. ESC,    "E;"S;"C;4000+"A;4000+"P;4000+"E;0
  1304.  
  1305. TTHGHT,    0
  1306.     JMS I (OLDTST
  1307.     JMS I [GETC
  1308.     SNA CLA
  1309.     JMP I (BADHIT        /NO HEIGHT
  1310.     TAD NO
  1311.     SZA CLA
  1312.     JMP I [SYNTAX        /SET TTY NO HEIGHT
  1313.     JMS I [NUMBER
  1314.     SNA
  1315.     JMP I (BADHIT
  1316.     DCA NUM
  1317.     TAD FLG
  1318.     SZA CLA
  1319.     JMP I (BADHIT        /NO DIGITS
  1320.     TAD NUM
  1321.     CIA
  1322.     DCA I (HNDLBF+DEPTH
  1323.     TAD I (HNDLBF+DEPTH
  1324.     DCA I (HNDLBF+RDEPTH
  1325.     JMS I (BASLUK
  1326.     JMP I TTHGHT
  1327.     TAD NUM
  1328.     CIA
  1329.     DCA I (AUXBUF
  1330.     JMS I (BASWRI
  1331.     JMP I TTHGHT
  1332.  
  1333. DEPTH=    241            //LOCATION IN VA0 SERIAL HANDLERS
  1334. RDEPTH=    242
  1335.  
  1336. /    LOC        YES    NO
  1337. KBMTBL,    AUXBUF+315;    0210;    1073
  1338.     AUXBUF+316;    1315;    2020
  1339.     AUXBUF+320;    1326;    7240
  1340.     AUXBUF+321;    4423;    3020
  1341.     AUXBUF+324;    1315;    1440
  1342.     0
  1343.  
  1344. CDTBL,    AUXBUF+135;    0210;    1102
  1345.     AUXBUF+136;    1335;    2024
  1346.     AUXBUF+140;    1346;    7240
  1347.     AUXBUF+141;    4466;    3024
  1348.     AUXBUF+144;    1335;    1420
  1349.     0
  1350.  
  1351. CCLTBL,    AUXBUF+4;    0024;    0002
  1352.     AUXBUF+5;    0522;    0143
  1353.     AUXBUF+6;    5551;    5363
  1354.     AUXBUF+7;    5600;    6000
  1355.     0
  1356.  
  1357. SCPTBL,    HNDLBF+123;    1233;    1326
  1358.     HNDLBF+125;    1336;    5331
  1359.     HNDLBF+126;    4636;    0377
  1360. 0
  1361.  
  1362. AROW,    "A;"R;"R;"O;"W;0
  1363.  
  1364.     PAGE
  1365. /    SCOPE BIT ON DISK:
  1366. /    BLOCK 0        REL 126    BIT 4
  1367.  
  1368. /    SCOPE BIT IN MEMORY:
  1369. /    LOC 17726    BIT 4
  1370.  
  1371. TTSCOP,    0
  1372.     JMS I (OLDTST
  1373.     TAD (SCPTBL
  1374.     JMS FIXUP
  1375.     JMS I (SHNDLR
  1376.     200
  1377.     AUXBUF            /READ 2 PAGES INTO AUXILIARY BUFFER
  1378.     11
  1379.     JMP I [SYSERR
  1380.     TAD (KBMTBL
  1381.     JMS FIXUP
  1382.     JMS I (SHNDLR
  1383.     4200
  1384.     AUXBUF
  1385.     11
  1386.     JMP I [SYSERR
  1387.     JMS I (SHNDLR
  1388.     200
  1389.     AUXBUF            /READ BLOCK 53 (CD)
  1390.     53
  1391.     JMP I [SYSERR
  1392.     TAD (CDTBL
  1393.     JMS FIXUP
  1394.     JMS I (SHNDLR
  1395.     4200
  1396.     AUXBUF
  1397.     53
  1398.     JMP I [SYSERR
  1399.     TAD NO            /SET SCOPE BIT
  1400.     SNA CLA
  1401.     IAC
  1402.     DCA SCOP
  1403.     CDF 10
  1404.     TAD (SCPBIT
  1405.     JMS SET200
  1406.     CDF 0
  1407.     JMS I (SHNDLR
  1408.     200
  1409.     AUXBUF
  1410. TP3,    0    //GETS BLOCK 66 FROM FIX2P IF 2-PAGE SYSTEM HANDLER.
  1411.     JMP I [SYSERR
  1412.     TAD (AUXBUF+126
  1413.     JMS SET200
  1414.     JMS I (SHNDLR
  1415.     4200
  1416.     AUXBUF
  1417. TP4,    0
  1418.     JMP I [SYSERR
  1419.     JMP I TTSCOP
  1420.  
  1421.  
  1422. SET200,    0        //DF IS SPECIALLY SET
  1423.     DCA HLTPTR
  1424.     TAD I HLTPTR
  1425.     AND (7573    //V4 I.D. BIT FOR OS8=7402; OS78=7602; OS278=7406
  1426.     DCA TEMP
  1427.     TAD TEMP
  1428.     TAD (-HLT
  1429.     SZA CLA
  1430.     JMP I (BADKBM
  1431.     TAD NO        /SEE IF 278
  1432.     SMA CLA
  1433.     JMP SETOS8    /NO, OS8 OR OS78
  1434.     TAD [4        /WAS 278, SET THE PROPER BIT
  1435.     JMP SET278
  1436. SETOS8,    TAD NO
  1437.     SPA SNA CLA
  1438.     TAD [200
  1439. SET278,    TAD TEMP
  1440.     DCA I HLTPTR
  1441.     JMP I SET200
  1442. HLTPTR,    0
  1443.  
  1444.  
  1445.     //ROUTINE TO PATCH LOCATIONS. BLOCK OF MODULE TO BE PATCHED HAS
  1446.     //BEEN READ INTO AUXBUF. ENTER WITH POINTER TO TABLE TO USE.
  1447.     //TABLE IS ARRANGED: RELATIVE LOCATION; "YES" VALUE; "NO" VALUE.
  1448.  
  1449. FIXUP,    0
  1450.     DCA FIXPTR
  1451. FIXLUP,    TAD I FIXPTR
  1452.     SNA
  1453.     JMP I FIXUP
  1454.     DCA FIXLOC
  1455.     ISZ FIXPTR
  1456.     TAD NO        //"NO"=1; "YES"=0.
  1457.     SZA CLA
  1458.     ISZ FIXPTR
  1459.     TAD I FIXPTR
  1460.     DCA I FIXLOC
  1461.     TAD NO
  1462.     SNA CLA
  1463.     ISZ FIXPTR
  1464.     ISZ FIXPTR
  1465.     JMP FIXLUP
  1466.  
  1467. FIXPTR,    0
  1468. FIXLOC,    0
  1469.  
  1470. PAGE
  1471. BASNAM,    FILENAME BASIC.SV
  1472.  
  1473. BASLUK,    0
  1474.     TAD (BASNAM
  1475.     JMS I (LOOKUP
  1476.     JMP I BASLUK
  1477.     ISZ BASLUK
  1478.     TAD (7
  1479.     DCA BASBLK
  1480.     JMS I [SHNDLR
  1481.     200
  1482.     AUXBUF
  1483. BASBLK,    0
  1484.     JMP I [SYSERR
  1485.     TAD BASBLK
  1486.     DCA BASB2
  1487.     TAD I (AUXBUF+2
  1488.     SNA CLA
  1489.     JMP I BASLUK
  1490.     JMP I (OLDBAS
  1491.  
  1492. BASWRI,    0
  1493.     JMS I [SHNDLR
  1494.     4200
  1495.     AUXBUF
  1496. BASB2,    0
  1497.     JMP I [SYSERR
  1498.     JMP I BASWRI
  1499.  
  1500. GETIOT,    0
  1501.     ISZ RR
  1502.     TAD RR
  1503.     TAD (-7600
  1504.     SNA CLA
  1505.     JMP I GETIOT
  1506.     TAD I RR
  1507.     AND [7000
  1508.     TAD [-6000
  1509.     SZA CLA
  1510.     JMP GETIOT+1
  1511.     TAD I RR
  1512.     RTR
  1513.     RAR
  1514.     AND [77
  1515.     TAD (-20
  1516.     CLL RAR
  1517.     SNA
  1518.     JMP GETIOT+1
  1519.     RAL
  1520.     TAD (20
  1521.     ISZ GETIOT
  1522.     JMP I GETIOT
  1523. NOTIMPL,CLA CLL
  1524.     JMS I [PRINT
  1525.     TEXT    "? COMMAND NOT IMPLEMENTED"
  1526.     JMP I [GOAWAY
  1527.  
  1528. SET,    JMS I [SPACE
  1529.     DCA VNO            /V3C
  1530.     JMS I [GETDEV
  1531.     JMS I [GETC
  1532.     JMS I [BRANCH
  1533.     -":;COLN
  1534.     -" ;COLN
  1535.     -"-;HYPH
  1536.     0
  1537.     JMP I [SYNTAX        /NO : OR BLANK AFTER NAME
  1538.  
  1539. BADHIT,    JMS I [PRINT
  1540.     TEXT    "? BAD HEIGHT SPECIFIED"
  1541.     JMP I [GOAWAY
  1542.  
  1543.     PAGE
  1544. COLN,    STA
  1545.     JMS I [SPACE        /IGNORE OPTIONAL SPACES
  1546.     JMS I [GETC
  1547.     SNA
  1548.     JMP I [SYNTAX
  1549.     TAD (-"-
  1550.     SNA CLA
  1551.     JMP HYPH
  1552.     JMS I [BACKC
  1553.     STA
  1554.     TAD DEVNUM
  1555.     SNA CLA
  1556.     JMP SYSDV
  1557. COLN2,    DCA NAM1
  1558.     DCA NAM2
  1559.     TAD (MAIN-1        /LOOK FOR DEVICE TYPE IN MAIN TABLE
  1560. MNLUP,    DCA XR1
  1561.     TAD I XR1
  1562.     SMA SZA
  1563.     JMP NOTYP        /NOT FOUND
  1564.     TAD DEVTYP
  1565.     SNA CLA
  1566.     JMP FNDTYP
  1567.     TAD XR1
  1568.     TAD (3            /POINT TO NEXT ENTRY
  1569.     JMP MNLUP
  1570.  
  1571. FNDTYP,    TAD I XR1        /GET GENERIC NAME
  1572.     DCA NAM1
  1573.     TAD I XR1
  1574.     DCA NAM2
  1575.     DCA AUXFLG
  1576.     TAD I XR1        /GET PTR TO DEVICE TABLE
  1577. INTO,    DCA PTR
  1578.     DCA NO
  1579.     TAD LINPTR
  1580.     DCA SAVPTR        /SAVE SCAN POINTER
  1581.     JMS I [GETTWO
  1582.     TAD (-1617
  1583.     SNA CLA            /ARE NEXT TWO CHARS 'NO'?
  1584.     JMS SAWNO        /YES
  1585.     TAD SAVPTR        /NO
  1586.     DCA LINPTR        /RESTORE PTR
  1587. SCNLUP,    TAD I PTR
  1588.     SNA            /GET NEXT KEYWORD POINTER
  1589.     JMP NOKEY
  1590.     ISZ PTR            /POINT TO PTR TO ROUTINE
  1591.     JMS I [KEYSRCH
  1592.     JMP NOF            /NOT FOUND
  1593.     TAD I PTR        /FOUND
  1594.     DCA PTR            /GET PTR TO ROUTINE
  1595.     STA
  1596.     TAD DEVNUM
  1597.     SZA CLA
  1598.     JMS I (HREAD        /READ HANDLER
  1599.     JMS I PTR        /CALL ROUTINE
  1600.     STA
  1601.     TAD DEVNUM
  1602.     SZA CLA
  1603.     JMS I (HWRITE        /REWRITE HANDLER
  1604.     JMP I (DONE
  1605.  
  1606. SYSDV,    ISZ AUXFLG
  1607.     TAD (SYSAUX
  1608.     JMP INTO        /V3D ALLOW SET SYS:
  1609. HYPH,    JMS I [ALPHA
  1610.     JMP I [BADV
  1611.     DCA VNO
  1612.     TAD VNO
  1613.     SNA
  1614.     JMP I [BADV
  1615.     AND [17
  1616.     DCA VNO
  1617.     JMS I [SPACE        /IGNORE SPACE
  1618.     JMP COLN2
  1619. NOKEY,    TAD AUXFLG
  1620.     SNA CLA
  1621.     JMP NOO
  1622.     JMS I [PRINT
  1623.     TEXT    "? UNKNOWN ATTRIBUTE FOR DEVICE  "
  1624.     *.-1
  1625. NAM1,    0
  1626. NAM2,    0
  1627.     0
  1628.     JMP I [GOAWAY
  1629.  
  1630. SAWNO,    0
  1631.     ISZ NO
  1632.     STA
  1633.     JMS I [SPACE
  1634.     TAD LINPTR
  1635.     DCA SAVPTR
  1636.     JMP I SAWNO
  1637.  
  1638. NOTYP,    CLA
  1639.     ISZ AUXFLG
  1640.     TAD (AUX        /SEARCH AUXILIARY TABLE
  1641.     JMP INTO
  1642. NOF,    ISZ PTR
  1643.     TAD SAVPTR
  1644.     DCA LINPTR
  1645.     JMP SCNLUP
  1646.  
  1647. AUXFLG,    0
  1648.  
  1649. NOO,    ISZ AUXFLG
  1650.     TAD (AUX
  1651.     DCA PTR
  1652.     JMP SCNLUP
  1653.  
  1654.     PAGE
  1655. HREAD,    0
  1656.     TAD DBLK
  1657.     SNA
  1658.     JMP RESERR
  1659.     DCA BLOCK
  1660.     JMS I [SHNDLR
  1661.     200            /READ 2 PAGES
  1662. L7200,    HNDLBF            /INTO 7200-7577
  1663. BLOCK,    0            /FROM THIS BLOCK ON SYSTEM DEVICE
  1664.     JMP I [SYSERR
  1665.     TAD DHI
  1666.     AND [177        /GET RELATIVE ENTRY PT
  1667.     TAD L7200
  1668.     DCA ENTRY
  1669.     TAD VNO
  1670.     SZA CLA            /V3C
  1671.     JMP I HREAD        /VNO ALREADY SET BY - COMMAND
  1672.     TAD ENTRY
  1673. VLOOP,    DCA VNOPTR
  1674.     TAD I VNOPTR
  1675.     IFZERO VOS278    <
  1676.     CLL
  1677.     TAD [-33
  1678.     SZL CLA
  1679.     JMP BACKV
  1680.     TAD I VNOPTR
  1681.     SNA
  1682.     JMP OLDERR
  1683.     >        //V4: JUST COLLECT THE VERSION NUMBER--PROCESS IT LATER.
  1684.     DCA VNO
  1685.     JMP I HREAD
  1686. BACKV,    STA
  1687.     TAD VNOPTR
  1688.     JMP VLOOP
  1689.  
  1690. RESERR,    JMS I [PRINT
  1691.     TEXT    "? CAN'T - DEVICE IS RESIDENT"
  1692.     JMP I [GOAWAY
  1693. OLDERR,    CLA
  1694.     JMS I [PRINT
  1695.     TEXT    "? CAN'T - OBSOLETE HANDLER"
  1696.     JMP I [GOAWAY
  1697.  
  1698. NOTV4,    CLA CLL
  1699.     JMS I [PRINT
  1700.     TEXT "? COMMAND NOT ALLOWED IN OS278"
  1701.     JMP I [GOAWAY
  1702.  
  1703. HWRITE,    0
  1704.     TAD BLOCK
  1705.     DCA BLKTWO
  1706.     JMS I [SHNDLR
  1707.     4200
  1708.     HNDLBF
  1709. BLKTWO,    0
  1710.     JMP I [SYSERR
  1711.     JMP I HWRITE
  1712. NEWERR,    CLA
  1713.     JMS I [PRINT
  1714.     TEXT    "? CAN'T - UNKNOWN VERSION OF THIS HANDLER"
  1715.     JMP I [GOAWAY
  1716. MAIN,    -0;    DEVICE TTY;    TTYTBL
  1717.     -3;    DEVICE CDR;    CDRTBL
  1718.     -4;    DEVICE LPT;    LPTTBL
  1719.     -20;    DEVICE MTA;    MTATBL
  1720.     -36;    DEVICE SERL;    SERTBL
  1721.     1
  1722.  
  1723. /TABLE ENDS WITH A POSITIVE NON-ZERO NUMBER
  1724.  
  1725. LPTTBL,    WIDTH;    LPWDTH
  1726.     LC;    LPLC
  1727.     LV8E;    LPLV
  1728.     LA8A;    LP8A
  1729.     LA78;    LP78
  1730.     BAUD;    STBAUD
  1731.     0
  1732.  
  1733. MTATBL,    PARITY;    MTAPAR
  1734.     DENSITY;MTADEN
  1735.     FILES;    MTAFIL
  1736.     0
  1737.  
  1738. AUX,    LOC;    GENLOC
  1739.     FILES;    GENFIL
  1740.     READO;    GENREA
  1741.     VERS;    GENVER
  1742.     DVCO;    GENDVC        /V3D
  1743.     BLK;    GENBLK        /V3D
  1744.     0
  1745.  
  1746. SYSAUX,    INITSY;    SYSINI        /   - SET SYS [NO] INIT
  1747.     OS8;    SYSOS8        /   - SET SYS OS8
  1748.     OS78;    SYS78        /   - SET SYS OS78
  1749.     OS278;    SYS278        /VB0- SET SYS OS278
  1750.     DEVIC;    SYSNEW        /V4 - SET SYS DEVICE
  1751.     0
  1752.  
  1753. WIDTH,    "W;"I;"D;"T;"H;0
  1754. LC,    "L;"C;0
  1755. LV8E,    "L;"V;4000+"8;4000+"E;0
  1756. CODE,    "C;"O;"D;"E;0
  1757. ALT,    "A;"L;"T;4000+"M;4000+"O;4000+"D;4000+"E;0
  1758. ECHO,    "E;"C;"H;"O;0
  1759. PAYGE,    "P;"A;"G;"E;0
  1760. TAB,    "T;"A;"B;0
  1761. LOC,    "L;"O;"C;4000+"A;4000+"T;4000+"I;4000+"O;4000+"N;0
  1762. FILES,    "F;"I;"L;"E;4000+"S;0
  1763. READO,    "R;"E;"A;"D;4000+"O;4000+"N;4000+"L;4000+"Y;0
  1764. VERS,    "V;"E;"R;4000+"S;4000+"I;4000+"O;4000+"N;0
  1765. PARITY,    "P;"A;"R;4000+"I;4000+"T;4000+"Y;0
  1766. DENSITY,"D;"E;"N;4000+"S;4000+"I;4000+"T;4000+"Y;0
  1767. FILL,    "F;"I;"L;"L;0
  1768. FLAGG,    "F;"L;"A;"G;0
  1769. CTRL,    "C;"T;"R;"L;0
  1770. EVEN,    "E;4000+"V;4000+"E;4000+"N;0
  1771. ODD,    "O;4000+"D;4000+"D;0
  1772. DELAY,    "D;"E;"L;"A;"Y;0
  1773. PAUS,    "P;"A;"U;"S;"E;0
  1774. HGHT,    "H;"E;"I;"G;"H;"T;0
  1775. SCOPP,    "S;"C;"O;"P;"E;0
  1776.  
  1777. DVCO,    "D;"V;"C;4000+"O;4000+"D;4000+"E;0
  1778. COL,    "C;"O;"L;4000+"U;4000+"M;4000+"N;0
  1779. LA8A,    "L;"A;"8;"A;0
  1780. LA78,    "L;"A;"7;"8;0
  1781. INITSY,    "I;"N;"I;"T;0
  1782. OS8,    "O;"S;"8;0
  1783. OS78,    "O;"S;"7;"8;0
  1784. OS278,    "O;"S;"2;"7;"8;0    //VB0
  1785. BAUD,    "B;"A;"U;"D;0
  1786. DEVIC,    "D;"E;"V;4000+"I;4000+"C;4000+"E;0
  1787. HELP,    "H;"E;"L;"P;0
  1788.  
  1789.     PAGE
  1790. LPWDTH,    0
  1791.     JMS I (GETWID
  1792. TSTCAL,    JMS LPTST1
  1793.     TAD NUM
  1794.     CMA
  1795.     DCA I (HNDLBF
  1796.     JMP I LPWDTH
  1797.  
  1798. LPTST1,    0
  1799.     TAD I (7201        /CHECK FOR ANNALEX PRINTER
  1800.     SPA CLA
  1801.     JMP I (L645
  1802.     TAD (TSTCAL        /WAS CALL FOR LPT WIDTH
  1803.     CMA
  1804.     TAD LPTST1
  1805.     SNA CLA
  1806.     JMP TESTOK        /YES, SKIP LPTS CHECK
  1807.     TAD I (7203        /NO
  1808.     TAD (-2423        /CHECK FOR SERIAL LPT
  1809.     SNA CLA
  1810.     JMP I (SERLPT 
  1811. TESTOK,    TAD VNO
  1812.     JMS I [BRANCH
  1813.     -1;OLDERR
  1814.     -2;LPTOK
  1815.     -3;LPTOK
  1816.     -261;LPTOK        /VERSION OF LPTS HANDLER
  1817.     ZBLOCK 2
  1818.     0
  1819.     JMP I [NEWERR
  1820. LPTOK,    JMP I LPTST1
  1821.  
  1822. ASRTST,    0
  1823.     TAD DHI
  1824.     SPA CLA
  1825.     JMP I ASRTST
  1826.     JMS I [PRINT
  1827.     TEXT    "? CAN'T - NOT KL8E HANDLER"
  1828.     JMP I [GOAWAY
  1829. GENVER,    0
  1830.     TAD NO
  1831.     SZA CLA
  1832.     JMP I [SYNTAX
  1833.     JMS I [ALPHA
  1834.     JMP BADV
  1835.     DCA NUM
  1836.     TAD NUM
  1837.     AND (40
  1838.     SZA CLA
  1839.     JMP BADV
  1840.     TAD NUM
  1841.     AND (37
  1842.     DCA I VNOPTR
  1843.     JMP I GENVER
  1844.  
  1845. GENREA,    0
  1846.     CDF 10
  1847.     TAD I DCWPTR
  1848.     CLL RTL
  1849.     CLL RAL
  1850.     TAD NO
  1851.     RAR
  1852.     CML RAR
  1853.     RAR
  1854.     DCA I DCWPTR
  1855.     CDF 0
  1856.     JMP I GENREA
  1857.  
  1858. GENFIL,    0
  1859.     CDF 10
  1860.     TAD I DCWPTR
  1861.     CLL RAL
  1862.     CLL RAL            /ZERO LINK
  1863.     TAD NO
  1864.     RAR
  1865.     CML RAR
  1866.     DCA I DCWPTR
  1867.     CDF 0
  1868.     JMP I GENFIL
  1869. BADV,    CLA
  1870.     JMS I [PRINT
  1871.     TEXT    "? BAD VERSION LETTER"
  1872.     JMP I [GOAWAY
  1873.  
  1874. CRLF,    0
  1875.     TAD [215
  1876.     JMS I (TYPE
  1877.     TAD [212
  1878.     JMS I (TYPE
  1879.     JMP I CRLF
  1880.  
  1881.     PAGE
  1882. LPLV,    0
  1883.     JMS I (LPTST1
  1884.     TAD NO
  1885.     CLL RTL
  1886.     RTL
  1887.     TAD (4
  1888.     DCA I (7201
  1889.     JMP I LPLV
  1890.  
  1891. LPLC,    0
  1892.     JMS I (LPTST1
  1893.     TAD NO
  1894.     CLL RTL
  1895.     RTL
  1896.     RAL
  1897.     CIA
  1898.     DCA I (7202
  1899.     JMP I LPLC
  1900.  
  1901. TTECHO,    0
  1902.     JMS I [TTST1
  1903.     TAD NO
  1904.     SZA CLA
  1905.     TAD (NOECHO-ECHOST
  1906.     TAD (ECHOST
  1907.     DCA I (HNDLBF+STECHO
  1908.     JMP I TTECHO
  1909.  
  1910. STECHO=    0066            //LOCATION IN VA0 SERIAL HANDLERS
  1911. NOECHO=    CLA
  1912. ECHOST=    4636
  1913.  
  1914. TTPAGE,    0
  1915.     JMS I (OLDTST
  1916.     TAD NO
  1917.     SNA CLA
  1918.     JMP TTPGE1        //PAUSE
  1919.     TAD I (HNDLBF+STPAGE    //NO PAUSE
  1920.     DCA I (HNDLBF+STPAGE+1
  1921.     JMP I TTPAGE
  1922. TTPGE1,    TAD (SPAGY
  1923.     DCA I (HNDLBF+STPAGE+1
  1924.     JMP I TTPAGE
  1925.  
  1926. STPAGE=    0224            //LOCATION IN VA0 SERIAL HANDLERS
  1927. SPAGY=    2254
  1928.  
  1929.  
  1930. BADWID,    JMS I [PRINT
  1931.     TEXT    "? ILLEGAL WIDTH"
  1932.     JMP I [GOAWAY
  1933.  
  1934. BLK,    "B;"L;"O;"C;"K;0
  1935. DONE,    JMS I [CRLF
  1936.     JMS I [PRINT
  1937.     TEXT    "DONE"
  1938.     JMP I [GOAWAY
  1939.  
  1940. L645,    JMS I [PRINT
  1941.     TEXT    "? CAN'T AFFECT ANNALEX LPT"
  1942.     JMP I [GOAWAY
  1943.  
  1944. SERLPT,    JMS I [PRINT
  1945.     TEXT    "? CAN'T AFFECT SERIAL LPT"
  1946.     JMP I [GOAWAY
  1947.  
  1948.  
  1949.     PAGE
  1950.  
  1951. REASEM,    JMS I [PRINT
  1952.     TEXT    "? CAN'T - MUST REASSEMBLE KL8E SOURCE"
  1953.     JMP I [GOAWAY
  1954. /ENTER WITH PTR TO POSSIBLE KEYWORD IN AC
  1955.  
  1956. KEYSRCH,0
  1957.     DCA KPTR
  1958. KL,    TAD I KPTR
  1959.     ISZ KPTR
  1960.     SNA
  1961.     JMP GOTKEY
  1962.     CIA
  1963.     DCA TEMP
  1964.     JMS I [ALPHA        /IS IT ALPHANUMERIC?
  1965.     JMP EOK            /NO
  1966.     TAD TEMP        /COMPARE
  1967.     CLL RAL            /LOW ORDER 11 BITS
  1968.     SNA CLA
  1969.     JMP KL            /MATCHED, KEEP LOOKING
  1970.     JMP I KEYSRCH        /DIDN'T MATCH
  1971. EOK,    JMS I [BACKC
  1972.     TAD TEMP
  1973.     CIA            /INPUT STREAM RAN OUT OR HIT SPACE
  1974.     SPA CLA
  1975.     JMP GOTKEY        /SPACE OR EOL MATCH FLAGGED CHARACTER
  1976.     JMP I KEYSRCH
  1977.  
  1978. KPTR,    0
  1979.  
  1980. GOTKEY,    JMS I [SCAN
  1981.     STA            /SKIP EXTRA STUFF
  1982.     JMS I [SPACE
  1983.     ISZ KEYSRCH        /TAKE GOOD RETURN 2
  1984.     JMP I KEYSRCH
  1985.  
  1986. /SET BAUD RATE FOR THE SERIAL PRINTER PORT OF THE OS278
  1987.  
  1988.     /INPUT=BAUD RATE    INPUT=BAUD RATE
  1989.     /  0  =     50          8  =  1800
  1990.     /  1  =     75          9  =  2000
  1991.     /  2  =    110         10  =  2400
  1992.     /  3  =    134.5     11  =  3600
  1993.     /  4  =    150         12  =  4800
  1994.     /  5  =    300         13  =  7200
  1995.     /  6  =    600         14  =  9600
  1996.     /  7  =   1200         15  = 19200
  1997.  
  1998. STBAUD,    0
  1999.     JMS I [GETWID        /USING GETWID ROUTINE, SAVES SOME DOUBLE CODING
  2000.     TAD NUM
  2001.     AND [7760        /CAN'T BE GREATER THAN 17 OCTAL
  2002.     SZA CLA
  2003.     JMP I [NUMBIG
  2004.     TAD I (7203        /MAKE SURE IT'S A SERIAL HANDLER
  2005.     TAD (-2423
  2006.     SZA CLA
  2007.     JMP I [NOTSER        /SORRY, WRONG ONE
  2008.     TAD NUM
  2009.     DCA I (7204
  2010.     JMP I STBAUD
  2011.  
  2012.  
  2013. TTYTBL,    CODE;NOTV4        //NOT AVAILABLE IN VERSION 4
  2014.     ALT;NOTV4
  2015.     LC;NOTV4
  2016.     TAB;NOTV4
  2017.     FILL;NOTV4
  2018.     FLAGG;NOTV4
  2019.     CTRL;NOTV4
  2020.     DELAY;NOTV4
  2021.     AROW;NOTV4
  2022.     SCOPP;TTSCOP        //FOR TTY ONLY
  2023.     COL;TTCOL    
  2024. SERTBL,    WIDTH;TTWIDTH        //SERIAL HANDLERS AND TTY COMMON LIST
  2025.     ECHO;TTECHO
  2026.     PAYGE;TTPAGE
  2027.     PAUS;TTPAUS
  2028.     HGHT;TTHGHT
  2029.     ESC;TTESC
  2030.     0
  2031.  
  2032.     PAGE
  2033. TTWIDTH,0
  2034.     JMS GETWID
  2035.     JMS TTST1
  2036.     TAD NUM
  2037.     AND [7
  2038.     SZA CLA
  2039.     JMP I [BADWID
  2040.     TAD NUM
  2041.     TAD [-200
  2042.     SNA CLA
  2043.     JMP I [BADWID
  2044.     TAD NUM
  2045.     CIA
  2046.     DCA I (HNDLBF+SWIDTH
  2047.     TAD I (HNDLBF+SWIDTH
  2048.     DCA I (HNDLBF+RWIDTH
  2049.     JMP I TTWIDTH
  2050.  
  2051. SWIDTH=    0237            //LOCATION IN VA0 SERIAL HANDLERS
  2052. RWIDTH=    0240
  2053.  
  2054. GETWID,    0
  2055.     TAD NO
  2056.     SZA CLA
  2057.     JMP I [SYNTAX
  2058.     JMS OPTEQ
  2059.     JMS I [NUMBER
  2060.     SNA
  2061.     JMP I (BADWID
  2062.     DCA NUM
  2063.     TAD FLG
  2064.     SZA CLA
  2065.     JMP I [SYNTAX        /NO DIGITS
  2066.     TAD NUM
  2067.     AND [7400
  2068.     SZA CLA
  2069.     JMP I [NUMBIG
  2070.     JMP I GETWID
  2071.  
  2072. TTST1,    0
  2073.     JMS I (ASRTST
  2074.     TAD VNO
  2075.     JMS I [BRANCH
  2076.     -1;OLDERR
  2077.     -2;OLDERR
  2078.     -3;OLDERR
  2079.     -4;OLDERR        /V3C
  2080.     -5;OLDERR        /V3D
  2081.     -6;OLDERR        /OS78 V3.0-SET 6A
  2082.     -260;TTOK        /TTY VER FOR OS278 IS B0
  2083.     0
  2084.     JMP I [NEWERR
  2085. TTOK,    JMP I TTST1
  2086. OPTEQ,    0
  2087.     JMS I [GETC
  2088.     TAD (-"=
  2089.     SZA CLA
  2090.     JMP I OPTEQ
  2091.     STA            /V3D
  2092.     JMS I [SPACE
  2093.     JMS I [GETC        /ADVANCE OVER =
  2094.     CLA
  2095.     JMP I OPTEQ
  2096.  
  2097.     PAGE
  2098. OPRIN,    0
  2099.     DCA N3
  2100.     TAD (-4
  2101.     DCA OKNT
  2102. OPLP,    TAD N3
  2103.     RTL
  2104.     RTL
  2105.     AND [7
  2106.     TAD [60
  2107.     JMS I [TYPE
  2108.     TAD N3
  2109.     RTL
  2110.     RAL
  2111.     DCA N3
  2112.     ISZ OKNT
  2113.     JMP OPLP
  2114.     JMP I OPRIN
  2115.  
  2116. OKNT,    0
  2117. N3,    0
  2118. GTEM,    0
  2119. SRCH,    0
  2120.     TAD I SRCH
  2121.     ISZ SRCH
  2122.     TAD (HNDLBF-1
  2123.     DCA XR1            /SET UP POINTER TO LOCATION TO START SEARCHING
  2124.     TAD I SRCH
  2125.     ISZ SRCH
  2126.     CIA
  2127.     DCA CNT            /SET UP COUNTER
  2128.     TAD I SRCH
  2129.     CIA
  2130.     DCA TEMP        /VALUE TO SEARCH FOR
  2131.     ISZ SRCH
  2132. SRLUP,    TAD I XR1
  2133.     TAD TEMP
  2134.     SNA CLA
  2135.     JMP SRFND
  2136.     ISZ CNT
  2137.     JMP SRLUP
  2138.     JMP I SRCH
  2139. SRFND,    ISZ SRCH
  2140.     TAD XR1
  2141.     JMP I SRCH
  2142. GENCMN,    0
  2143.     TAD NO
  2144.     SZA CLA
  2145.     JMP I [SYNTAX
  2146.     JMS I [ONUM
  2147.     DCA NUM2
  2148.     TAD FLG
  2149.     SZA CLA
  2150.     JMP I [SYNTAX
  2151.     JMS I [GETC
  2152.     DCA TEMP
  2153.     TAD TEMP
  2154.     SNA
  2155.     JMP I GENCMN
  2156.     TAD (-"=
  2157.     SZA
  2158.     TAD ("=-",
  2159.     SZA CLA
  2160.     JMP I [SYNTAX
  2161.     JMP I GENCMN
  2162. GENLOC,    0
  2163.     JMS GENCMN
  2164.     TAD DHI
  2165.     SPA CLA
  2166.     TAD [-200
  2167.     TAD [-200
  2168.     CLL
  2169.     TAD NUM2
  2170.     SZL CLA
  2171.     JMP I [NUMBIG
  2172.     TAD NUM2
  2173.     TAD (HNDLBF        /BASE OF HANDLER
  2174.     DCA NUM2
  2175.     TAD TEMP
  2176.     SNA CLA
  2177.     JMS ODT
  2178. GETNEW,    JMS I [ONUM
  2179.     DCA NUM
  2180.     TAD FLG
  2181.     SZA CLA
  2182.     JMP I GENLOC
  2183.     JMS I [GETC
  2184.     SZA CLA
  2185.     JMP I [SYNTAX
  2186.     TAD NUM
  2187.     DCA I NUM2
  2188.     JMP I GENLOC
  2189. ODT,    0
  2190.     TAD I NUM2
  2191.     JMS OPRIN
  2192.     TAD ("/
  2193.     JMS I [TYPE
  2194.     TAD I [READ
  2195.     DCA GTEM        /SAVE CHAIN STATUS
  2196.     JMS I [READ
  2197.     TAD [LINBUF
  2198.     DCA LINPTR
  2199.     TAD GTEM
  2200.     DCA I [READ
  2201.     JMP I ODT
  2202.  
  2203. OLDBAS,    JMS I [PRINT
  2204.     TEXT    "? OLD BASIC"
  2205.     JMP I [GOAWAY
  2206. SVERSION,JMS I (PRINT
  2207.     TEXT    "VERSION ??"    //OS78 V4
  2208.     *.-2
  2209.     VERSION
  2210.     *.+1
  2211.     JMP I [GOAWAY
  2212.  
  2213.     PAGE
  2214. MTAPAR,    0
  2215.     TAD NO
  2216.     SZA CLA
  2217.     JMP I [SYNTAX
  2218.     JMS MTST1
  2219.     TAD LINPTR
  2220.     DCA SAVPTR
  2221.     TAD (EVEN
  2222.     JMS I [KEYSRCH
  2223.     SKP
  2224.     JMP SETE
  2225.     TAD SAVPTR
  2226.     DCA LINPTR
  2227.     TAD (ODD
  2228.     JMS I [KEYSRCH
  2229.     JMP I [SYNTAX
  2230.     TAD (400
  2231. SETE,    TAD (2
  2232.     DCA I (HNDLBF
  2233.     JMP I MTAPAR
  2234.  
  2235. MTST1,    0
  2236.     TAD VNO
  2237.     JMS I [BRANCH
  2238.     -1;OLDERR
  2239.     -2;OLDERR
  2240.     -3;OLDERR
  2241.     -4;MTOK
  2242.     -5;MTOK
  2243.     -6;MTOK
  2244.     ZBLOCK 4
  2245.     0
  2246.     JMP I [NEWERR
  2247. MTOK,    JMP I MTST1
  2248.  
  2249. MTADEN,    0
  2250.     JMS MTST1
  2251.     TAD NO
  2252.     SZA CLA
  2253.     JMP I [SYNTAX
  2254.     JMP I [NOTIMP
  2255.     JMP I MTADEN
  2256. MTAFIL,    0
  2257.     JMS MTST1
  2258.     TAD NO
  2259.     CIA            /V3D
  2260.     IAC            /V3D
  2261.     DCA I (7201
  2262.     JMP I MTAFIL
  2263.  
  2264. BADCOD,    JMS I [PRINT
  2265.     TEXT    "? UNKNOWN CARD CODE"
  2266.     JMP I [GOAWAY
  2267.  
  2268. /SUPPOSED TO WORK ON ALL VERSIONS
  2269.  
  2270. CDCODE,    0
  2271.     TAD NO
  2272.     SZA CLA
  2273.     JMP I [SYNTAX
  2274.     JMS I (OPTEQ
  2275.     JMS I [NUMBER
  2276.     TAD (-32        /026
  2277.     SNA
  2278.     JMP C026
  2279.     TAD (32-35        /029
  2280.     SZA CLA
  2281.     JMP BADCOD
  2282.     JMS CHANGE
  2283.     LIST1;LIST2
  2284.     JMP I CDCODE
  2285. C026,    JMS CHANGE
  2286.     LIST1;LIST3
  2287.     JMP I CDCODE
  2288.  
  2289. GET,    0
  2290.     KSF
  2291.     JMP .-1
  2292.     KRB
  2293.     AND [177
  2294.     TAD [200        /FORCE TO 8-BIT
  2295.     JMP I GET
  2296.  
  2297. CHANGE,    0
  2298.     TAD I CHANGE
  2299.     DCA P1
  2300.     ISZ CHANGE
  2301.     TAD I CHANGE
  2302.     DCA P2
  2303.     ISZ CHANGE
  2304. CHLUP,    TAD I P1
  2305.     SNA
  2306.     JMP I CHANGE
  2307.     TAD (HNDLBF        /BASE OF HANDLER
  2308.     DCA P3
  2309.     TAD I P2
  2310.     DCA I P3
  2311.     ISZ P1
  2312.     ISZ P2
  2313.     JMP CHLUP
  2314.  
  2315. P1,    0
  2316. P2,    0
  2317. P3,    0
  2318.  
  2319.  
  2320.     PAGE
  2321. /FIXED FOR V3D:
  2322. LIST1,    104;105;106
  2323.     114;115;116
  2324.     124;125;126;127
  2325.     134;135;136
  2326.     0
  2327.  
  2328. LIST2,    3203;4007;3502
  2329.     7514;0577;3637
  2330.     0104;1211;3374;0641
  2331.     7316;3410;1376
  2332.  
  2333. LIST3,    7735;4076;0774
  2334.     3314;1002;0305
  2335.     3204;1273;3606;1341
  2336.     3716;1175;3401
  2337. TECNAM,    FILENAME TECO.SV
  2338.  
  2339. TECO,    0
  2340.     DCA SA
  2341.     TAD (TECNAM
  2342.     JMS LOOKUP
  2343.     JMP I TECO        /NOT THERE
  2344.     DCA BLKN
  2345.     JMS I (SHNDLR
  2346.     100            /READ 1 PAGE FROM TECO
  2347.     7000            /BUFFER
  2348. BLKN,    0
  2349.     JMP I [SYSERR
  2350.     TAD BLKN
  2351.     DCA BLKN2
  2352.     TAD SA
  2353.     DCA I (7002        /REL LOC 2 IS S.A.
  2354.     JMS I (SHNDLR
  2355.     4100
  2356.     7000
  2357. BLKN2,    0
  2358.     JMP I [SYSERR
  2359.     JMP I TECO
  2360.  
  2361. SA,    0
  2362. LOOKUP,    0
  2363.     DCA ARG1        /PTR TO FILENAME IN AC
  2364.     CLA IAC            /LOOKUP ON SYS
  2365.     CIF 10
  2366.     JMS I USR
  2367.     2
  2368. ARG1,    0            /STARTING BLOCK
  2369.     0
  2370.     JMP I LOOKUP        /NOT FOUND
  2371.     TAD ARG1
  2372.     ISZ LOOKUP
  2373.     JMP I LOOKUP        /RETURN 2 WITH BLOCK # IN AC
  2374. GENDVC,    0
  2375.     TAD NO
  2376.     SZA CLA
  2377.     JMP I [SYNTAX
  2378.     JMS I [ONUM
  2379.     SNA
  2380.     JMP I [SYNTAX
  2381.     DCA NUCODE
  2382.     TAD NUCODE
  2383.     AND [7700
  2384.     SZA CLA
  2385.     JMP I (NUMBIG
  2386.     TAD NUCODE
  2387.     TAD (-30
  2388.     SPA CLA
  2389.     JMP I [NUMBIG
  2390.     TAD NUCODE
  2391.     CLL RTL
  2392.     RAL
  2393.     DCA NUCODE
  2394.     TAD (HNDLBF
  2395.     DCA RR
  2396. DVLUP,    JMS I (GETIOT
  2397.     JMP I GENDVC
  2398.     TAD (-30
  2399.     SPA CLA
  2400.     JMP DVLUP
  2401.     TAD I RR
  2402.     AND (7007
  2403.     TAD NUCODE
  2404.     DCA I RR
  2405.     JMP DVLUP
  2406. CDRTBL,    CODE;CDCODE
  2407.     ZBLOCK 4
  2408.     0
  2409.  
  2410.     PAGE
  2411.  
  2412. /    6600 IS THE BEGINNING OF THE AUXBUF
  2413. /    FOR THE SET COMMAND. HOWEVER, WE CAN USE THAT SPACE TO 
  2414. /    PERFORM FUNCTIONS PRIOR TO REFERENCING THE BUFFER.
  2415. /    THE FOLLOWING ROUTINES, LOCATED IN WHAT IS NORMALLY
  2416. /    BUFFER SPACE, ARE UTILIZED BEFORE THE BUFFER SPACE IS NEEDED.
  2417.  
  2418.     *6600
  2419.  
  2420.  
  2421. HANTES,    0            /TEST FOR SET HANDLER INPUT
  2422.     TAD I LINPTR
  2423.     TAD (-240        /TEST FOR REGULAR SET COMMAND
  2424.     SNA             /SPACE INDICATES NORMAL COMMAND
  2425.     JMP I HANTES
  2426.     TAD (240-272        /COLON INDICATES THE SAME
  2427.     SNA CLA 
  2428.     JMP I HANTES
  2429.     JMP I (SEHAN        /OTHERWISE BRANCH TO SET HANDLER
  2430. /    
  2431.  
  2432.  
  2433. /    THE FOLLOWING CODE IS USED BY THE SET HANDLER XXXX<XXXX
  2434. /    CALL FORMAT. IT IS SAFE IN THE AUXBUF AREA FOR THE SIMPLE 
  2435. /    REASON THAT SET HANDLER NEVER USES AUXBUF.
  2436.  
  2437. GETTOO,    0            /CALLED IN ORDER TO ACCESS GETTWO
  2438.     JMS CHKP        /CHECK FOR A PERIOD
  2439.     JMS I (GETTWO
  2440.     CIF CDF 10
  2441.     JMP I GETTOO
  2442.  
  2443. CHKP,    0
  2444.     JMS I (ALPHA        /TEST FOR LETTER OR DIGIT
  2445.     JMP TSTP        /IF NOT, LETTER OR DIGIT...
  2446.     CLA
  2447.     JMS I (BACKC        /IF LETTER OR DIGIT, RESTORE POINTER
  2448.     JMP I CHKP        /RETURN
  2449. TSTP,    TAD (-256        /IS IT A PERIOD?
  2450.     SZA CLA
  2451.     JMP SPIN        /IF NOT, PUT IN SPACE
  2452.     TAD (3            /IF SO, BUMP POINTER 3 LOCATIONS
  2453.     TAD LINPTR        /IN ORDER TO PASS BY EXTENSION
  2454.     DCA LINPTR
  2455. SPIN,    JMS I (BACKC        /MOVE POINTER BACK
  2456.     TAD (240
  2457.     DCA I LINPTR        /REMOVE POSSIBLE <
  2458.     JMP I CHKP
  2459.  
  2460.  
  2461.     PAGE
  2462.  
  2463.     /7000-7177 IS NORMALLY THE BUFFER FOR THE TECO CCB
  2464.     /WE CAN USE IT FOR SET HANDLER WITH NO ILL EFFECTS
  2465.  
  2466.  
  2467.     *7000
  2468.  
  2469. F0ERR,    JMS I [CRLF
  2470.     JMS I [PRINT
  2471.     TEXT    "I/O READ ERROR"
  2472.     JMP I [GOAWAY
  2473.  
  2474. F0ERR1,    JMS I [CRLF
  2475.     JMS I [PRINT
  2476.     TEXT    " I/O WRITE ERROR"
  2477.     JMP I [GOAWAY
  2478.  
  2479. F0ERR2,    JMS I [CRLF
  2480.     JMS I [PRINT
  2481. HNMESG,    TEXT    "         --  NOT FOUND ON SYS: "
  2482.     JMP I [GOAWAY
  2483.  
  2484. F0ERR3,    JMS I [CRLF
  2485.     JMS I [PRINT
  2486.     TEXT    "OLD HANDLER NOT FOUND IN MONITOR"
  2487.     JMP I [GOAWAY
  2488.  
  2489. F0ERR4,    JMS I [CRLF
  2490.     JMS I [PRINT
  2491.     TEXT    "CAN'T - HANDLER ALREADY RESIDENT"
  2492.     JMP I [GOAWAY
  2493.  
  2494. F0ERR5,    JMS I [CRLF
  2495.     JMS I [PRINT
  2496.     TEXT    "CAN'T - TOO MANY LOGICAL DEVICES"
  2497.     JMP I [GOAWAY
  2498.  
  2499.  
  2500. NOTSER,    JMS I [PRINT
  2501.     TEXT    "? CAN'T, NOT SERIAL"
  2502.     JMP I [GOAWAY
  2503.  
  2504.     PAGE
  2505.  
  2506. /    7200-7577 BUFFER FOR HANDLER, WE CAN USE
  2507. /    IT FOR SET HANDLER CODE ...
  2508.  
  2509.     *HNDLBF
  2510.  
  2511. PRHED,    0            //CHECK FOR VT TYPE & CLEAR THE SCREEN.
  2512.     CDF 10
  2513.     TAD I (7726
  2514.     CDF 0
  2515.     AND (200
  2516.     SNA CLA
  2517.     JMP PRHED9        //NO SCOPE
  2518.     TAD I (7771        //WHERE OS78 & OS278 BITS LIVE IN MONITOR
  2519.     AND (4
  2520.     SZA CLA
  2521.     TAD (VT278P-VT52P    //VT278
  2522.     TAD (VT52P        //VT52 TYPE
  2523.     DCA HDPTR        //LOCAL
  2524.     TAD I HDPTR
  2525.     SNA
  2526.     JMP PRHED9            //SCREEN IS ZAPPED--DO THE TEXT PART.
  2527.     JMS I [TYPE
  2528.     ISZ HDPTR
  2529.     JMP .-5            //KEEP ON TRUCKIN'
  2530. PRHED9,    JMS I (PRHED1        //PRINT HEADER
  2531.     CIF CDF 10
  2532.     JMP I PRHED
  2533.  
  2534.  
  2535.  
  2536.             //"[&77 WILL BUILD A 33 FOR ESCAPE CHAR
  2537.  
  2538. VT278P,    "[&77;"[;"H;"[&77;"[;"J;0
  2539. VT52P,    "[&77;"H;"[&77;"J;0
  2540.  
  2541. HDPTR,    0
  2542.  
  2543.     PAGE
  2544.  
  2545. PRHED1,    0
  2546.     JMS I [CRLF
  2547.     JMS I [PRINT        //PRINT HEADER FOR DEVICES TO BE LISTED.
  2548.     TEXT /USE "SET HANDLER OLD NEW" TO CHANGE THESE DEVICES:/
  2549.     JMS I [CRLF
  2550.     JMS I [PRINT
  2551.     TEXT    "DEVICE NAME       LOGICAL DEVICE(S)"
  2552.     JMS I [PRINT
  2553.     TEXT    "___________       _________________"
  2554.     JMS I [CRLF
  2555.     JMP I PRHED1
  2556.     FIELD 0
  2557.     *200
  2558.     PAGE
  2559.  
  2560.     IFNZRO MACREL <.ASECT HANSET
  2561.     >
  2562.     FIELD 1
  2563.     *2000
  2564.     /THIS IS THE CODE ADDED TO RESOLVE THE OVER ABUNDANCE OF
  2565.     /HANDLERS NECESSARY TO ACCOMMODATE OS78 USERS...
  2566.  
  2567.     BUFHN=3200        /BUFFER AREA
  2568.  
  2569. HSET,
  2570.     JMS I (7700
  2571.     10            /LOCK IN USR
  2572.     JMS I (LOPT        /TEST FOR L OPTION
  2573.     CIF CDF 0
  2574.     JMS I (SPACE1        /USE FIELD ZERO SPACE SUBROUTINE
  2575.     JMS I (LOPT        /TEST AGAIN
  2576.     CDF 10            /RESET DATA FIELD TO 1 --- CHANGED BY LOPT
  2577.     JMS LODEGR        /READ IN GROUP TO BE REPLACED
  2578.     JMS I (REPLGR        /GO GET THE PERTINENT INFO FROM GROUP 1
  2579.     CIF CDF 0        /
  2580.     JMS I (GETTOO
  2581.     CLA
  2582.     CIF CDF 0
  2583.     JMS I (SPACE1        /JUMP OVER SPACES
  2584.     TAD (NAME        /SET HANDLER LOAD NAME POINTER
  2585.     DCA STBLK
  2586.     JMS LODEGR        /READ IN GROUP TWO
  2587.     JMS I (NEWGR        /DO THE HANDLER TABLE SWITCH
  2588.     JMS I (LODBLK        /LOAD THE HANDLER ONTO SYSTEM
  2589.     JMS I (USRLD        /SET USR TABLES ON SYS
  2590.     JMS I (BLK66        /SET DCB, ETC. ON SYS
  2591.     CIF CDF 0
  2592.     JMP I (DONE        /EXIT ROUTINE
  2593.  
  2594.  
  2595. LODEGR,    0        //ROUTINE TO READ IN HANDLER FILE
  2596.     CIF CDF 0        /
  2597.     JMS I (GETTOO        /GET FIRST TWO CHARACTERS OF THE NAME
  2598.     DCA NAME        /STORED IN SIX-PACK
  2599.     CIF CDF 0        /
  2600.     JMS I (GETTOO        /GET SECOND TWO
  2601.     DCA I (NAME+1        /
  2602.     CIF CDF 0
  2603.     JMS I (GETTOO        /ANY MORE CHARACTERS...
  2604.     DCA I (NAME+2
  2605.     JMS LODE        /READ IN THE HANDLER FILE
  2606.     JMP I LODEGR
  2607.  
  2608. LODE,    0        //ROUTINE TO LOAD HANDLER FILE
  2609.     CLA
  2610.     TAD (1            /ADD IN DEVICE NUMBER
  2611.     JMS I (200        /FOR USR CALL
  2612.     2            /LOOKUP FILE
  2613. STBLK,    NAME            /POINTER TO FILENAME
  2614.     0
  2615.     JMP F1ERR2        /
  2616.     TAD STBLK        /STARTING BLOCK OF FILE
  2617.     IAC            /SKIP BY CCB
  2618.     DCA NBLK        /STORE IT FOR READ
  2619.     CDF 10
  2620.     CIF 0
  2621.     JMS I (SHNDLR        /CALL SYS HANDLER
  2622.     0610            /READ SIX PAGES INTO FIELD 1
  2623. STLOC,    BUFHN            /INTO HANDLER BUFFER
  2624. NBLK,    0            /FROM THIS BLOCK ON SYS DEVICE
  2625.     JMP F1ERR
  2626.     JMP I LODE
  2627.  
  2628. F1ERR,    CIF CDF 0
  2629.     JMP I (F0ERR        /READ ERROR
  2630.  
  2631. F1ERR1,    CIF CDF 0
  2632.     JMP I (F0ERR1        /WRITE ERROR
  2633.  
  2634. F1ERR2,    
  2635.     TAD I NMEPR        /MOVE NAME INTO ERROR MESSAGE
  2636.     SNA            /IS THIS WORD USED?
  2637.     JMP OVNOUT        /EMPTY
  2638.     AND (77            /SECOND LETTER ZERO?
  2639.     SNA CLA
  2640.     TAD (40            /IF SO, MAKE IT A SPACE
  2641.     TAD I NMEPR
  2642.     CDF 0
  2643.     DCA I NMSG
  2644.     CDF 10
  2645.     ISZ NMSG        /BUMP POINTERS
  2646.     ISZ NMEPR
  2647.     ISZ NKNT        /ALL DONE?
  2648.     JMP F1ERR2        /NOT YET
  2649. OVNOUT,    CDF 0
  2650.     TAD (5610        /MOVE IN THE .HN
  2651.     DCA I NMSG
  2652.     ISZ NMSG
  2653.     TAD (1640
  2654.     DCA I NMSG
  2655.     CIF CDF 0
  2656.     JMP I (F0ERR2        /XXXXXX.HN NOT FOUND ON SYS:
  2657.  
  2658.  
  2659. LODBLK,    0        //LOADS NEW HANDLER INTO SYSTEM AREA
  2660.     CDF 10
  2661.     CIF 0
  2662.     JMS I (SHNDLR    //V4 - CHANGED TO WRITE ONLY TWO PAGES
  2663.     4210            /TWO PAGES FROM FIELD 1
  2664.     3400
  2665. SYSBLK,    0            /BLOCK TO WRITE TO
  2666.     JMP I (F1ERR1
  2667.     JMP I LODBLK
  2668.  
  2669.  
  2670. F1LNPR,    0
  2671. NKNT,    -3
  2672. NMSG,    HNMESG
  2673. NMEPR,    NAME
  2674. NAME,    FILENAME .HN
  2675.  
  2676.     PAGE
  2677.  
  2678.  
  2679.     *2200
  2680. REPLGR,    0        //ACCESSES INFO ABOUT PERMANENT DEVICE NAMES
  2681. REPEAT,    JMS I (ADJNM        /ADJUST THE DEVICE NAME
  2682.     DCA I (X1T        /ZERO OFFSET
  2683.     TAD HTMP        /ADD IN NAME
  2684.     CIA
  2685.     DCA HTMP        /STORE FOR TESTING
  2686.     TAD I PDNT        /POINTER TO PDNT STORED IN 10036
  2687.     DCA HTMP1        /
  2688. HLOOP,    ISZ HTMP1        /BUMP POINTER TO TABLE
  2689.     TAD I HTMP1        /GET THE ENTRY
  2690.     TAD HTMP        /IS IT THE ONE WE WANT?
  2691.     SNA CLA
  2692.     JMP FOUND1        /IT IS HERE!
  2693.     ISZ KNTR        /FINISHED WITH TABLE?
  2694.     JMP HLOOP
  2695.     JMP I (TSTERR        /IF SO, TEST FOR NO ROOM FOR SECOND ENTRY
  2696.  
  2697. FOUND1,    ISZ I (PRTST        /IS THIS THE NEW HANDLER?
  2698.     SKP
  2699.     JMP I (F1ERR4        /IF SO IT'S AN ERROR
  2700.     TAD I PDNT        /ADD THE STARTING POINT OF THE PDNT
  2701.     CIA
  2702.     TAD HTMP1        /SUBTRACT IT FROM POINTER
  2703.     ISZ TESTO        /IS THAT THE FIRST OR SECOND ENTRY ?
  2704.     JMP SECND
  2705.     DCA OFST1        /STORE THE FIRST OFFSET POINT
  2706.     TAD I PDHIT        /GET THE START OF DHIT
  2707.     TAD OFST1        /ADD OFFSET IN TO TABLE
  2708.     DCA HTMP1
  2709.     TAD I HTMP1        /POINT TO DHIT ENTRY
  2710.     AND (3600        /SAVE THE RELATIVE BLOCK LOCATION
  2711.     DCA BLKSL
  2712.     TAD BLKSL
  2713.     CLL RAR
  2714.     BSW            /RE-POSITION BLOCK NO. TO COMPUTE REAL BLOCK 
  2715.     TAD (15
  2716.     DCA I (SYSBLK        /ALSO SAVE THE REAL BLOCK LOCATION
  2717.     ISZ I (BUFHN        /WERE THERE TWO ENTRY POINTS?
  2718.     JMP TWO
  2719.     TAD I PDNT        /NO, PASS BY SYS AND DSK AND LOOK FOR ZERO...
  2720.     DCA HTMP1
  2721.     TAD (-16
  2722.     DCA KNTR        /RESET COUNTER
  2723.     DCA HTMP        /SET DESIRED ENTRY VALUE TO ZERO
  2724.     JMP HLOOP
  2725.  
  2726. TWO,    TAD (-16        /RESET COUNTER
  2727.     DCA KNTR
  2728.     TAD (10
  2729.     DCA I (X1T        /SET TO POINT TO SECOND DEVICE NAME
  2730.     JMP REPEAT
  2731.  
  2732. SECND,    DCA OFST2        /SAVE OFSET FOR SECOND HANDLER SLOT
  2733.     DCA I HTMP1        /SET SECOND HANDLER ENTRY TO ZERO
  2734. REPTUR,    JMP I REPLGR        /TIME TO RETURN
  2735.  
  2736. PDHIT,    37            /POINTER TO DEVICE HANDLER INFO TABLE
  2737. BLKSL,    0
  2738. HTMP,    0
  2739. HTMP1,    0
  2740. TESTO,    -1
  2741. KNTR,    -16
  2742. OFST1,    0
  2743. OFST2,    0
  2744.  
  2745.  
  2746. NEWGR,    0        //RESETS THE DEVICE HANDLER TABLES
  2747.     JMS I (PRESNT        /TEST TO SEE IF HANDLER ALREADY PRESENT
  2748. SECRPT,    JMS I (PDEVNM        /SET UP PERMANENT DEVICE NAME
  2749.     TAD I PDNT        /POINTER TO PERMANENT DEVICE HANDLER TABLE
  2750.     TAD OFST1        /OFFSET INTO TABLE
  2751.     DCA HTMP1        /STORE FOR LOAD
  2752. OVER,    TAD HTMP
  2753.     DCA I HTMP1        /STORE THE PERMANENT DEVICE NAME
  2754.             //LOAD DEVICE CONTROL WORD TABLE
  2755.     TAD (7760        /START OF TABLE
  2756.     TAD OFST1        /OFFSET
  2757.     DCA HTMP1
  2758.     TAD I NDATA        /ADD IN INFO FROM HANDLER HEADER
  2759.     DCA I HTMP1        /STORE IN DCWT
  2760.             //LOAD DEVICE HANDLER INFORMATION TABLE
  2761.     TAD I PDHIT        /POINTER TO TABLE
  2762.     TAD OFST1        /OFFSET
  2763.     DCA HTMP1
  2764.     ISZ NDATA        /BUMP POINTER TO DHIT DATA
  2765.     TAD I NDATA
  2766.     TAD BLKSL        /RELATIVE BLOCK ON SYS
  2767.     DCA I HTMP1
  2768.             //ZERO DEVICE HANDLER RESIDENCY TABLE
  2769.     TAD (7647        /START OF DHRT
  2770.     TAD OFST1
  2771.     DCA HTMP1
  2772.     DCA I HTMP1        /ZEROED
  2773.     JMS I (DONE1
  2774.     JMP I NEWGR
  2775.  
  2776. USRLD,    0        //ADDS HANDLER(S) INFO TO SYS
  2777.     CDF 10
  2778.     CIF 0
  2779.     JMS I (SHNDLR
  2780.     0610            /READ 3 BLOCKS FROM SYS
  2781.     BUFHN            /INTO BUFHN
  2782.     13            /FROM USR AREA ON SYS
  2783.     JMP I (F1ERR        /ERROR RETURN
  2784.     TAD I PDNT        /FIRST MOVE DEVICE NAMES
  2785.     JMS I (MOVE
  2786.     TAD I PDHIT        /THEN, THE INFO TABLE
  2787.     JMS I (MOVE
  2788.     CDF 10
  2789.     CIF 0
  2790.     JMS I (SHNDLR        /RE-WRITE USR
  2791.     4410
  2792.     BUFHN+400
  2793.     14
  2794.     JMP I (F1ERR1
  2795.     JMP I USRLD
  2796.  
  2797. PDNT,    36            /POINTER TO PERMANENT DEVICE NAME TABLE
  2798. NDATA,    0
  2799.  
  2800.     PAGE
  2801.     *2400
  2802.  
  2803. BLK66,    0        //LOAD DCW TABLE ON SYS
  2804.     CDF 10
  2805.     CIF 0
  2806.     JMS I (SHNDLR        /READ IN BLOCK 66
  2807.     0210            /
  2808.     BUFHN            /INTO BUFFER
  2809.     66
  2810.     JMP I (F1ERR
  2811.     TAD (200        /SET TO PROPERLY ACCESS BLOCK 66 THRU MOVE
  2812.     DCA MVADD
  2813.     TAD (7760        /ADD POINTER TO DCWT
  2814.     JMS MOVE        /MOVE TABLE
  2815.     CDF 10
  2816.     CIF 0
  2817.     JMS I (SHNDLR        /RE-WRITE BLOCK 66
  2818.     4210
  2819.     BUFHN
  2820.     66
  2821.     JMP I (F1ERR1
  2822.     JMP I BLK66
  2823.  
  2824. MOVE,    0        //CODE MOVING SUBROUTINE
  2825.     DCA MTMP        /STORE POINTER TO CODE TO BE MOVED
  2826. LOPE,    TAD MTMP        /SET UP STORAGE LOCATION
  2827.     TAD (BUFHN
  2828.     TAD MVADD        /BLOCK 66 ADJUSTMENT
  2829.     DCA DEPLOC        /
  2830.     TAD I MTMP        /MOVE DATA
  2831.     DCA I DEPLOC        /TO HERE
  2832.     ISZ MTMP        /BUMP POINTER
  2833.     ISZ KNT            /ALL DONE??
  2834.     JMP LOPE        /IF NOT, LOOP
  2835.     TAD (-17        /RESET COUNTER
  2836.     DCA KNT
  2837.     JMP I MOVE
  2838.  
  2839. DONE1,    0
  2840.     ISZ TEST1        /HAVE BOTH HANDLERS BEEN LOADED?
  2841.     JMP I DONE1        /YES, RETURN
  2842.     ISZ I (BUFHN        /ARE THERE TWO HANDLERS?
  2843.     SKP
  2844.     JMP I DONE1        /ONLY ONE HANDLER
  2845.     TAD (10            /2ND HANDLER IS TEN LOC. FROM START OF BUFFER
  2846.     DCA I (X1T
  2847.     TAD I (OFST2        /ADD SECOND OFFSET
  2848.     DCA I (OFST1        /STORE FOR ROUTINE
  2849.     JMP I (SECRPT        /REPEAT
  2850.  
  2851. PDEVNM,    0        //SET UP WORD FOR PDNT
  2852.     TAD TEST1        /FIRST, TEST FOR PROPER # OF ENTRY POINTS
  2853.     SZA CLA            /IF ZERO ONLY ONE
  2854.     JMP CONT        /CONTINUE NORMALLY
  2855.     IAC
  2856.     TAD I (BUFHN        /IF MORE THAN ONE, ERROR
  2857.     SZA CLA
  2858.     JMP F1ERR5
  2859. CONT,    JMS I (ADJNM        /ADJUST NAME OF ENTRY 
  2860.     IAC            /SET UP POINTER FOR NEW DATA
  2861.     TAD I (X1T
  2862.     DCA I (NDATA
  2863.     DCA I (X1T        /ZERO OFFSET
  2864.     JMP I PDEVNM
  2865.  
  2866. TSTERR,    ISZ PRTST        /IS THIS THE NEW HANDLER ??
  2867.     SKP
  2868.     JMP I PRESNT        /IF SO, WE DIDN'T REALLY WANT TO FIND IT
  2869.     TAD I (HTMP        /SEE IF ENTRY POINT SEARCHED FOR WAS ZERO
  2870.     SZA CLA
  2871.     JMP F1ERR3        /IF NOT, HANDLER NOT FOUND
  2872.     ISZ TEST1        /SET TEST1 TO ALLOW FOR ONLY ONE HANDLER
  2873.     NOP
  2874.     JMP I (REPTUR        /RETURN
  2875.  
  2876. PRESNT,    0        //ROUTINE TO AID IN TESTING PRESENCE OF HANDLER
  2877.     STA
  2878.     DCA PRTST        /SET TEST INDICATOR
  2879.     TAD (-16        /RESET COUNTER
  2880.     DCA I (KNTR
  2881.     JMS I (REPLGR        /GO SEARCH TABLE
  2882.     JMP I PRESNT
  2883.  
  2884.  
  2885. F1ERR3,    CIF CDF 0
  2886.     JMP I (F0ERR3        /OLD HANDLER NOT FOUND ON SYS:
  2887.  
  2888. F1ERR4,    JMS I (LPTHND        //IF LPT HANDLER, LET THE CHANGE HAPPEN
  2889.     JMP I PRESNT
  2890. RERR4,    CIF CDF 0
  2891.     JMP I (F0ERR4        /HANDLER ALREADY PRESENT
  2892.  
  2893. F1ERR5,    CIF CDF 0
  2894.     JMP I (F0ERR5        /TOO MANY HANDLERS
  2895.  
  2896.  
  2897. PRTST,    0    
  2898. TEST1,    -1
  2899. KNT,    -17
  2900. MVADD,    0
  2901. DEPLOC,    0
  2902. MTMP,    0
  2903.  
  2904.     PAGE
  2905.  
  2906.  
  2907.     *2600
  2908.  
  2909. ADJNM,    0        //ROUTINE TO AJUST DEVICE NAME TO LOOK LIKE TABLE ENTRY
  2910.     TAD X1T            /ADD IN OFFSET FOR FIRST OR SECOND ENTRY POINT
  2911.     TAD (BUFHN+3        /ADD IN OFFSET TO NAME
  2912.     DCA X2T            /STORE IT TEMPORARILY
  2913.     TAD X2T
  2914.     IAC            /POINTER TO OSECOND HALF OF NAME
  2915.     DCA X1T            /LIKEWISE, STORE  SECOND WORD
  2916.     TAD I X2T
  2917.     TAD I X1T
  2918.     DCA I (HTMP        /STORE THE PERMANENT DEVICE NAME
  2919.     TAD I X1T        /IS SECOND WORD NON-ZERO?
  2920.     SNA CLA
  2921.     JMP I ADJNM        /RETURN
  2922.     TAD I (HTMP        /IF NON ZERO, SET ZERO BIT
  2923.     RAL
  2924.     STL RAR
  2925.     DCA I (HTMP
  2926.     JMP I ADJNM
  2927.  
  2928. LOPT,    0            /DOES LINPTR CONTAIN /L?
  2929.     CDF 0
  2930.     TAD I (LINPTR
  2931.     DCA F1LP2        /ACCESS POINTER INTO LINE BUFFER
  2932.     TAD I F1LP2
  2933.     TAD (-"/
  2934.     SZA CLA            /IS THERE AN OPTION?
  2935.     JMP I LOPT        /NO, SO RETURN
  2936.     ISZ F1LP2        /BUMP POINTER
  2937.     TAD I F1LP2        /IS THERE AN L FOLLOWING?
  2938.     TAD (-"L
  2939.     SZA CLA
  2940.     JMP I LOPT        /IF NO, RETURN
  2941.     CIF CDF 0
  2942.     JMS I (PRHED        /PRINT THE HEADER
  2943.     JMS I (SRNT        /SEARCH THE NAME LIST
  2944.     JMS I (PRLIS        /PRINT THE LIST
  2945.     CIF CDF 0
  2946.     JMP I (GOAWAY
  2947.  
  2948.  
  2949. TSTTBL,    0        //SEARCH HANDLER NAME TABLE.
  2950.     DCA WEWNT        /STORE DEVICE NAME WE'RE SEARCHING FOR
  2951.     TAD I PTNAM        /GET NUMBER OF ENTRIES IN TABLE(NEGATIVE)
  2952.     DCA TBLCNT        /STORE AS COUUNTER
  2953.     ISZ PTNAM        /POINT TO DEVICE NAME
  2954. SECDT,    TAD WEWNT        /LOOK FOR NAME
  2955.     TAD I PTNAM        /IS THIS IT?
  2956.     SNA CLA        
  2957.     JMP I (LPTCHK        /YES GO STORE INFO
  2958.     ISZ PTNAM        /NO, BUMP POINTER
  2959.     ISZ PTNAM        /ADVANCE PAST GROUP INFO
  2960.     ISZ TBLCNT        /HAVE WE TESTED ALL THE GROUPS
  2961.     JMP SECDT        /NOT YET...
  2962. RESTPR,    TAD (GTABL        /RESET TABLE POINTER
  2963.     DCA PTNAM
  2964.     JMP I TSTTBL        /GO GET NEXT NAME
  2965.  
  2966.  
  2967. PTNAM,    GTABL
  2968. WEWNT,    0
  2969. TBLCNT,    0
  2970. X1T,    0
  2971. X2T,    0
  2972. F1LP2,    0
  2973.  
  2974. /SEE IF LPT HANDLER, YES RETURN CALL+1; NO CALL+2
  2975.  
  2976. LPTHND,    0
  2977.     TAD I (HTMP
  2978.     TAD (4020
  2979.     SZA CLA            /LPT HANDLER
  2980.     ISZ LPTHND        /NOT AN LPT HANDLER
  2981.     JMP I LPTHND
  2982.  
  2983.  
  2984.     PAGE
  2985.  
  2986.  
  2987.     *3000
  2988.  
  2989. SRNT,    0
  2990.     TAD I (PDNT        /GET POINTER TO TABLE
  2991.     DCA INFOT
  2992.     TAD I INFOT
  2993.     DCA INFOT        /NOW CONTAINS TABLE START
  2994. SRLOOP,    TAD I INFOT        /GET TABLE ENTRY
  2995.     JMS I (TSTTBL        /GET CORR. HANDLER NAME...
  2996.     ISZ INFOT
  2997.     ISZ INCNT        /ARE WE THRU TABLE?
  2998.     JMP SRLOOP        /
  2999.     JMP I SRNT
  3000.  
  3001. SETFND,    IAC
  3002.     TAD I (PTNAM        /BUMP POINTER AND STORE
  3003.     DCA NPTNAM
  3004.     TAD I NPTNAM        /ACCESS    JMS INF0
  3005.     ISZ PRPNT        //BUMP POINTER
  3006.     DCA I PRPNT        /STORE IN FOR PRINTING
  3007.     ISZ PRPNT        /ADVANCE TO NEXT SPOT
  3008.     JMP I (RESTPR        /RETURN TO RESTORE TABLE POINTER
  3009.     
  3010. PRLIS,    0        //THIS ROUTINE ALLOWS US TO PRINT LIST
  3011.             //IT IS FILLED BY SETFND...
  3012.     TAD (CIF 10        /SET PRINT RETURN TO FIELD ONE
  3013.     CDF 0
  3014.     DCA I (PRCDF        /STORE IT
  3015.     CDF 10
  3016. PRSTRT,    JMS I .+1        /START PRINTING LIST
  3017.     PREND
  3018.     JMS I .+1
  3019.     PREND
  3020.     JMS I .+1
  3021.     PREND
  3022.     JMS I .+1
  3023.     PREND
  3024.     JMS I .+1
  3025.     PREND
  3026.     JMS I .+1
  3027.     PREND
  3028.     JMS I .+1
  3029.     PREND
  3030.     JMS I .+1
  3031.     PREND
  3032.     JMS I .+1
  3033.     PREND
  3034.     JMS I .+1
  3035.     PREND
  3036.     JMS I .+1
  3037.     PREND
  3038.     JMS I .+1
  3039.     PREND
  3040.     JMS I .+1
  3041.     PREND
  3042.     JMS I .+1
  3043.     PREND
  3044.     JMS I .+1
  3045.     PREND        
  3046.     JMP I PRLIS        /END OF TABLE, MAX 17 OCTAL ENTRIES
  3047.  
  3048. PREND,    0
  3049.     JMP I PRLIS
  3050.  
  3051. NPTNAM,    0
  3052. PRPNT,    PRSTRT
  3053. INCNT,    -16
  3054. INFOT,    0
  3055.  
  3056.     PAGE
  3057.     
  3058.  
  3059.  
  3060.     *3200
  3061.  
  3062. /    3200-4377 IS THE BUFFER FOR NORMAL HANDLER PROCEDURES
  3063. /    HOWEVER, THE LIST OPTION ALLOWS US TO USE IT WITHOUT ANY
  3064. /    CONFLICT.
  3065.  
  3066.  
  3067. /    GTABL CONTAINS TWO WORD GROUPS OF INFORMATION
  3068. /    CONCERNING EACH POSSIBLE HANDLER GROUP. TSTTBL
  3069. /    SEARCHES FOR THE STORED VALUE OF THE DEVICE NAME.
  3070. /    IF FOUND IT THEN STORES THE
  3071. /    NAME PRINTING INFO.
  3072.  
  3073. GTABL,    -GHALF        //DEVICES THIS TABLE RECOGNIZES
  3074.     GBEGIN=.
  3075.  
  3076.     -6601;PBAT        /BAT
  3077. LPTID,    -4020;PLPT        /LPT
  3078.     -7421;PLQP        /LQP
  3079.     -4510;PRX2A        /RX2A (RX20,RX21)
  3080.     -4512;PRX2B        /RX2B (RX22,RX23)
  3081.     -5010;PRX5A        /RX5A (RX50:RX50,RX51)
  3082.     -5012;PRX5B        /RX5B (RX50:RX52,RX53)
  3083.     -4764;PRD5A        /RD5A (RD51:RD50,RD51)
  3084.     -4766;PRD5B        /RD5B (RD51:RD52,RD53)
  3085.     -4215;PRL0        /RL0  (RL0A,RL0B)
  3086.     -4315;PRL1        /RL1  (RL1A,RL1B)
  3087.     -4217;PRLC        /RLC  (RL0C,RL1C)
  3088.     -5076;PSLU2        /SLU2
  3089.     -5077;PSLU3        /SLU3
  3090.     -5376;PVLU2        /VLU2
  3091.     -5377;PVLU3        /VLU3
  3092.     -4263;RL02D1        //R0AB R20A,R20B
  3093.     -4265;RL02D2        //R0CD
  3094.     -4363;RL02D3        //R1AB
  3095.     -4365;RL02D4        //R1CD
  3096.     -4267;RL02D5        //R01E
  3097.     -6077;PCOM0        //COM0 DECmate 1
  3098.     -6100;PCOM1        //COM1
  3099.     -6034;PCOMM        //COMM DECmate 2
  3100.     /-4631;PSYS        //SYSTEM
  3101.     /-5723;PDSK        //DISK
  3102.     /-5524;PTTY        //TTY
  3103.  
  3104.     GEND=.
  3105.  
  3106. GENTRY=GEND-GBEGIN
  3107. GHALF=GENTRY%2
  3108.  
  3109. /CHECK FOR LPT, IF SO SEE IF PARALLEL OR SERIAL
  3110.  
  3111. LPTCHK,    TAD I (PTNAM
  3112.     DCA LPCHK
  3113.     TAD I LPCHK
  3114.     TAD (4020    /IS STORED NAME LPT?
  3115.     SZA CLA
  3116.     JMP I (SETFND    /IS NOT STORE INFO
  3117.     JMS I USR1    /IF=1; DF=1
  3118.     1        /FETCH
  3119.     DEVICE LPT
  3120.     HNDLBF+1    /LOAD INTO LOC. 7200-7577 FIELD 0
  3121.     JMP I (F1ERR3
  3122.     CDF 0
  3123.     TAD I (7203    /CHECK ID FOR SERIAL
  3124.     CDF 10
  3125.     TAD (-2423
  3126.     SZA 
  3127.     JMP LA34    /SEE, IF LA34
  3128.     TAD (LPTSE    /SERIAL
  3129.     DCA I (LPTID+1    /KLUGE THE MESSAGE POINTER
  3130.     JMP I (SETFND    /AND STORE THE INFO
  3131. LA34,    TAD (2423-6364
  3132.     SZA CLA
  3133.     JMP I (SETFND    /WAS PARALLEL, STORE INFO AS IS
  3134.     TAD (LPT34
  3135.     DCA I (LPTID+1    /KLUGE THE MESSAGE POINTER
  3136.     JMP I (SETFND    /AND STORE THE INFO
  3137.  
  3138. LPCHK,    0
  3139. USR1,    200
  3140.  
  3141.     IFDEF FORDEV    <
  3142. PSYS,    0        //SYS:
  3143.     CIF 0
  3144.     JMS I (PRINT
  3145.     TEXT    "(SYS:)"
  3146.     ISZ PSYS
  3147.     JMP I PSYS
  3148.  
  3149. PDSK,    0        //DISK
  3150.     CIF 0
  3151.     JMS I (PRINT
  3152.     TEXT    "(DSK:)"
  3153.     ISZ PDSK
  3154.     JMP I PDSK
  3155.     >
  3156.  
  3157.     IFDEF FORDEV    <
  3158.  
  3159. PTTY,    0
  3160.     CIF 0
  3161.     JMS I (PRINT
  3162.     TEXT    "      (TTY:)"
  3163.     ISZ PTTY
  3164.     JMP I PTTY
  3165.     >
  3166.  
  3167. LPTSE,    0        //VT278'S SERIAL VERSION OF LPT (IOT'S 32-33)
  3168.     CIF 0
  3169.     JMS I (PRINT
  3170.     TEXT "LPTS              LPT (SERIAL)"
  3171.     ISZ LPTSE
  3172.     JMP I LPTSE
  3173.  
  3174.     *3400
  3175.  
  3176. /    NORMALLY USED AS SET HANDLER BUFFER, LIST OPTION
  3177. /    CAN USE THIS SPACE.
  3178.  
  3179. PRX2A,    0
  3180.     CIF 0
  3181.     JMS I (PRINT
  3182.     TEXT    "RX2A              RX20,RX21 (RX02)"
  3183.     ISZ PRX2A
  3184.     JMP I PRX2A
  3185.  
  3186. PRX2B,    0
  3187.     CIF 0
  3188.     JMS I (PRINT
  3189.     TEXT    "RX2B              RX22,RX23 (RX02)"
  3190.     ISZ PRX2B
  3191.     JMP I PRX2B
  3192.  
  3193. PRL0,    0
  3194.     CIF 0
  3195.     JMS I (PRINT
  3196.     TEXT    "RL0               RL0A,RL0B (RL01)"
  3197.     ISZ PRL0
  3198.     JMP I PRL0
  3199.  
  3200. PRL1,    0
  3201.     CIF 0
  3202.     JMS I (PRINT
  3203.     TEXT    "RL1               RL1A,RL1B (RL01)"
  3204.     ISZ PRL1
  3205.     JMP I PRL1
  3206.  
  3207. PRLC,    0
  3208.     CIF 0
  3209.     JMS I (PRINT
  3210.     TEXT    "RLC               RL0C,RL1C (RL01)"
  3211.     ISZ PRLC
  3212.     JMP I PRLC
  3213.  
  3214.     *3600
  3215.  
  3216.  
  3217. /    3600 IS BUFFER FOR NORMAL HANDLER OPERATION
  3218. /    USING IT HERE FOR LISTING CAUSES NO CONFLICT
  3219.  
  3220. PLPT,    0
  3221.     CIF 0
  3222.     JMS I (PRINT
  3223.     TEXT    "LPSV              LPT (PARALLEL)"
  3224.     ISZ PLPT
  3225.     JMP I PLPT
  3226.  
  3227. PSLU2,    0
  3228.     CIF 0
  3229.     JMS I (PRINT
  3230.     TEXT    "SLU2              SLU2"
  3231.     ISZ PSLU2
  3232.     JMP I PSLU2
  3233.  
  3234. PBAT,    0
  3235.     CIF 0
  3236.     JMS I (PRINT
  3237.     TEXT    "BAT               BAT"
  3238.     ISZ PBAT
  3239.     JMP I PBAT
  3240.  
  3241. PLQP,    0
  3242.     CIF 0
  3243.     JMS I (PRINT
  3244.     TEXT    "LQP               LQP (PARALLEL)"
  3245.     ISZ PLQP
  3246.     JMP I PLQP
  3247.  
  3248.     *4000
  3249.  
  3250.  
  3251. /    4000    NORMALLY USED AS BUFFER FOR SET HANDLER WE CAN US IT FOR 
  3252. /    LISTING...
  3253.  
  3254. PSLU3,    0
  3255.     CIF 0
  3256.     JMS I  (PRINT
  3257.     TEXT    "SLU3              SLU3"
  3258.     ISZ PSLU3
  3259.     JMP I PSLU3
  3260.  
  3261. PVLU2,    0
  3262.     CIF 0
  3263.     JMS I (PRINT
  3264.     TEXT    "VLU2              VLU2"
  3265.     ISZ PVLU2
  3266.     JMP I PVLU2
  3267.  
  3268. PVLU3,    0
  3269.     CIF 0
  3270.     JMS I (PRINT
  3271.     TEXT    "VLU3              VLU3"
  3272.     ISZ PVLU3
  3273.     JMP I PVLU3
  3274.  
  3275. PRD5A,    0
  3276.     CIF 0
  3277.     JMS I (PRINT
  3278.     TEXT    "RD5A              RD50,RD51 (RD51)
  3279.     ISZ PRD5A
  3280.     JMP I PRD5A
  3281.  
  3282. PRD5B,    0
  3283.     CIF 0
  3284.     JMS I (PRINT
  3285.     TEXT    "RD5B              RD52,RD53 (RD51)
  3286.     ISZ PRD5B
  3287.     JMP I PRD5B
  3288.     *4200
  3289.  
  3290. /    4200    NORMALLY USED AS BUFFER FOR SET HANDLER WE CAN US IT FOR 
  3291. /    LISTING...
  3292.  
  3293. //NEW FOR V4:
  3294.  
  3295. RL02D1,    0
  3296.     CIF 0
  3297.     JMS I (PRINT
  3298.     TEXT    "R0AB              R20A,R20B (RL02)"
  3299.     ISZ RL02D1
  3300.     JMP I RL02D1
  3301.  
  3302. RL02D2,    0
  3303.     CIF 0
  3304.     JMS I (PRINT
  3305.     TEXT    "R0CD              R20C,R20D (RL02)"
  3306.     ISZ RL02D2
  3307.     JMP I RL02D2
  3308.  
  3309. RL02D3,    0
  3310.     CIF 0
  3311.     JMS I (PRINT
  3312.     TEXT    "R1AB              R21A,R21B (RL02)"
  3313.     ISZ RL02D3
  3314.     JMP I RL02D3
  3315.  
  3316. RL02D4,    0
  3317.     CIF 0
  3318.     JMS I (PRINT
  3319.     TEXT    "R1CD              R21C,R21D (RL02)"
  3320.     ISZ RL02D4
  3321.     JMP I RL02D4
  3322.  
  3323. RL02D5,    0
  3324.     CIF 0
  3325.     JMS I (PRINT
  3326.     TEXT    "R01E              R20E,R21E (RL02)"
  3327.     ISZ RL02D5
  3328.     JMP I RL02D5
  3329.  
  3330.  
  3331.     *4400
  3332.  
  3333. /    4400    NORMALLY USED AS BUFFER FOR SET HANDLER WE CAN US IT FOR 
  3334. /    LISTING...
  3335.  
  3336. PCOM0,    0
  3337.     CIF 0
  3338.     JMS I (PRINT
  3339.     TEXT    "COM0              COM0"
  3340.     ISZ PCOM0
  3341.     JMP I PCOM0
  3342.     
  3343. PCOM1,    0
  3344.     CIF 0
  3345.     JMS I (PRINT
  3346.     TEXT    "COM1              COM1"
  3347.     ISZ PCOM1
  3348.     JMP I PCOM1
  3349.  
  3350. PCOMM,    0
  3351.     CIF 0
  3352.     JMS I (PRINT
  3353.     TEXT    "COMM              COMM"
  3354.     ISZ PCOMM
  3355.     JMP I PCOMM
  3356.     
  3357. LPT34,    0        //VT78'S SERIAL VERSION OF LPT (IOT'S 65-66)
  3358.     CIF 0
  3359.     JMS I (PRINT
  3360.     TEXT "LP34              LPT (SERIAL)"
  3361.     ISZ LPT34
  3362.     JMP I LPT34
  3363.  
  3364. PRX5A,    0
  3365.     CIF 0
  3366.     JMS I (PRINT
  3367.     TEXT    "RX5A              RX50,RX51 (RX50)"
  3368.     ISZ PRX5A
  3369.     JMP I PRX5A
  3370.  
  3371. PRX5B,    0
  3372.     CIF 0
  3373.     JMS I (PRINT
  3374.     TEXT    "RX5B              RX52,RX53 (RX50)"
  3375.     ISZ PRX5B
  3376.     JMP I PRX5B
  3377.  
  3378. *6000
  3379.             //ROUTINE TO LOAD THE FIND THE NEW SYSTEM HANDLER,
  3380.             //LOAD IT INTO CORE AND VERIFY THAT IT IS A
  3381.             //VALID SYSTEM HANDLER
  3382.  
  3383. SYSSET,    0
  3384.     CIF CDF 0        /LOAD THE OUTPUT DEVICE HANDLER
  3385.     JMS I (DEVGET        /INTO F0 7200-7577
  3386.     CDF 0
  3387.     TAD I (ENTRY        /GET THE ENTRY POINT OF THE HANDLER
  3388.     CDF 30
  3389.     DCA I (NEWDEV        /SAVE IT IN F3 FOR LATER
  3390.     CDF 10
  3391.     CLA
  3392.     CIF CDF 0
  3393.     JMS I (SPACE1        /SKIP OVER ANY SPACES IN THE COMMAND
  3394.     TAD (NAME        /GET POINTER TO THE NEW HANDLER FILE NAME
  3395.     DCA I (STBLK        /SAVE IT FOR THE LOAD FROM SYS
  3396.     TAD (BUFHN        /GET START OF BUFFER TO LOAD TO
  3397.     DCA I (STLOC        /SAVE IT FOR THE READ
  3398.     JMS I (LODEGR        /LOAD THE NEW HANDLER FILE
  3399.     JMS CHKHND        /SEE IF HANDLER IS LEGAL
  3400.     CIF CDF 30
  3401.     JMP I SYSSET        /EXIT
  3402.  
  3403.             //ROUTINE TO CHECK IF THE HANDLER IS LEGAL
  3404. CHKHND,    0
  3405.     TAD I (BUFHN        /GET MINUS THE NUMBER OF HANDLERS IN THE FILE
  3406.     DCA MNOHND        /SAVE IT
  3407.     TAD MNOHND        /GET IT BACK
  3408.     TAD (12            /GET MAXIMUM ALLOWED # OF HANDLERS
  3409.     SPA CLA            /ARE THERE TOO MANY HANDLERS
  3410.     JMP I (TOOMNY        /YES, OUTPUT AN ERROR MESSAGE
  3411.     TAD (BUFHN        /NO, GET START OF HANDLER BUFFER
  3412.     DCA HNDPTR        /SET UP POINTER FOR IT
  3413. CHKSYS,    TAD HNDPTR        /GET POINTER TO THE START OF THE HEADER BLOCK
  3414.     TAD SYSOFF        /ADD IN OFFSET TO THE SYSTEM WORD
  3415.     DCA LOCPTR        /SAVE THAT LOCATION
  3416.     TAD I LOCPTR        /GET THE WORD WITH THE SYSTEM BIT
  3417.     RTL            /PUT THE SYSTEM BIT IN THE LINK
  3418.     SZL            /IS THIS A SYSTEM HANDLER?
  3419.     JMP CHKSIZ        /YES, NOW CHECK FOR 1 OR 2 PAGE
  3420.     CLL CLA            /NO
  3421.     ISZ MNOHND        /ANY MORE HANDLERS?
  3422.     SKP            /YES, LETS CHECK THE NEXT ONE
  3423.     JMP I (NOTSYS        /NO, OUTPUT AN ERROR MESSAGE
  3424.     TAD HNDPTR        /GET THE HANDLER POINTER
  3425.     TAD (10            /ADD IN OFFSET TO START OF NEXT HANDLER
  3426.     DCA HNDPTR        /SAVE NEW POINTER
  3427.     JMP CHKSYS        /CHECK THE NEXT HANDLER
  3428.  
  3429. CHKSIZ,    RAR            /MOVE THE SIZE BIT INTO THE LINK
  3430.     SZL CLA            /IS IT A TWO PAGE HANDLER
  3431.     TAD (-1            /YES, SET SWITCH TO A MINUS 1
  3432.     CDF 30            /NO, LEAVE AC=0
  3433.     DCA I (SYSSIZ        /SAVE SWITCH IN FIELD THREE
  3434.     CDF 10
  3435.     TAD HNDPTR        /GET THE START OF THE CORRECT HANDLER
  3436.     TAD DCBOFF        /ADD IN OFFSET TO THE DCW
  3437.     DCA LOCPTR        /SAVE THE LOCATION
  3438.     TAD I LOCPTR        /GET THE DCB WORD
  3439.     AND (7770        /SET BITS 9-11 TO 0 - TENTATIVE FILE INDICATOR
  3440.     CDF 30
  3441.     DCA I (NEWDCB        /SAVE THE NEW DCB WORD IN FIELD THREE
  3442.     CDF 10
  3443.     TAD HNDPTR        /GET THE START OF THE CORRECT HANDLER
  3444.     TAD LENOFF        /ADD IN THE OFFSET TO THE LENGTH OF DEV. WORD
  3445.     DCA LOCPTR        /SAVE THE LOCATION
  3446.     TAD I LOCPTR        /GET THE DEVICE LENGTH
  3447.     CDF 30
  3448.     DCA I (DEVLEN        /SAVE IT IN FIELD THREE
  3449.     CDF 10
  3450.     JMP I CHKHND
  3451.  
  3452. MNOHND,    0            /MINUS NO OF HANDLERS
  3453. HNDPTR,    0            /HANDLER POINTER
  3454. LOCPTR,    0            /LOCATION POINTER
  3455. SYSOFF,    6            /SYSTEM AND SIZE BIT IN WORD 6 OF HANDLER
  3456. DCBOFF,    5            /DCB WORD IS WORD 5
  3457. LENOFF,    10            /LENGTH OF DEVICE IN WORD 10
  3458.  
  3459. PAGE
  3460.  
  3461.  
  3462.             //NO SYSTEM DEVICE FOUND ERROR ROUTINE
  3463. NOTSYS,    TAD (CIF 10        /SET UP FOR VALID RETURN
  3464.     CDF 0
  3465.     DCA I (PRCDF        /DATA FIELD CHANGE FOR VALID RETURN
  3466.     CDF 10
  3467.     CIF 0
  3468.     JMS I (PRINT        /OUTOUT THE ERROR MESSAGE 
  3469.     TEXT    "NOT A VALID SYSTEM HANDLER!!"
  3470.     TAD (CIF 0        /RESTORE RETURN FOR PRINT
  3471.     CDF 0
  3472.     DCA I (PRCDF        /DATA FIELD RESTORATION
  3473.     CIF 0
  3474.     JMP I (GOAWAY        /EXIT TO MONITOR AFTER ERROR MESSAGE
  3475.  
  3476.  
  3477.             //TOO MANY HANDLERS IN FILE ERROR ROUTINE
  3478. TOOMNY,    TAD (CIF 10        /SET UP FOR VALID RETURN
  3479.     CDF 0
  3480.     DCA I (PRCDF        /DATA FIELD CHANGE FOR VALID RETURN
  3481.     CDF 10
  3482.     CIF 0
  3483.     JMS I (PRINT        /OUTPUT ERROR MESSAGE
  3484.     TEXT    "TOO MANY INDIVIDUAL HANDLERS IN THIS HANDLER FILE!!"
  3485.     TAD (CIF 0        /RESTORE RETURN FOR PRINT
  3486.     CDF 0
  3487.     DCA I (PRCDF        /DATA FIELD RESTORATION
  3488.     CIF 0
  3489.     JMP I (GOAWAY        /EXIT TO MONITOR AFTER ERROR MESSAGE
  3490.  
  3491. OPT0,    LINPTR
  3492. OPT1,    0
  3493.  
  3494.  
  3495.     ////OS8 - 'SET SYS DEVICE LOGDEV:HANDLR' CODE 
  3496.  
  3497.         ///PORTION OF SET PROGRAM TO CREATE A NEW SYSTEM DEVICE
  3498.  
  3499.             //THIS PORTION OF THE SET PROGRAM WILL
  3500.             //QUERY THE USER TO SEE IF HE WANTS TO ZERO
  3501.             //THE DIRECTORY AND IF HE WISHES TO BOOT THE
  3502.             //NEW SYSTEM DEVICE AFTER IT IS BUILT.
  3503.             //IF THE PROGRAM IS CALLED THRU BATCH THEN THE
  3504.             //QUESTIONS ARE NEVER ASKED DEFAULTS WILL BE
  3505.             //USED WHICH ARE TO NOT ZERO THE DIRECTORY AND
  3506.             //TO BOOT THE NEW DEVICE.
  3507.             //THE INPUT FILE SPEC THAT WAS INPUTTED WILL
  3508.             //THEN BE LOOKED FOR TO SEE IF THE FILE IS
  3509.             //AVAILABLE ON THE OLD SYSTEM DEVICE AND IF
  3510.             //NOT AN ERROR MESSAGE WILL BE OUTPUT AND
  3511.             //AGAIN WE EXIT TO MONITOR.
  3512.             //ONCE THE FILE IS FOUND IT IS CHECKED TO SEE
  3513.             //IF IT IS A SYSTEM HANDLER AND IF NOT AN
  3514.             //ERROR MESSAGE IS OUTPUT AND EXIT TO MONITOR.
  3515.             //IF IT IS A VALID SYSTEM HANDLER, IT IS THEN CHECKED
  3516.             //TO SEE IF IT IS A ONE OR TWO PAGE HANDLER.
  3517.             //BLOCKS 7-67 ARE TRANSFERED FROM THE OLD
  3518.             //SYSTEM DEVICE TO THE NEW SYSTEM DEVICE.
  3519.             //THEN THE HANDLER IS THEN LOADED INTO CORE
  3520.             //AND BLOCKS 0 AND 66 ARE BUILT FROM THE
  3521.             //INFORMATION CONTAINED ON THE EXISTING SYSTEM
  3522.             //DEVICE AND IN THE NEW HANDLER FILE.
  3523.             //BLOCKS 0 AND 66 ARE THEN WRITTEN TO THE NEW SYSTEM 
  3524.             //DEVICE.
  3525.             //IF IT WAS REQUESTED TO ZERO THE DIRECTORY
  3526.             //THIS IS NOW DONE.
  3527.             //IF NOT THIS ROUTINE IS SKIPPED.
  3528.             //IF THE USER WISHED TO BOOT THE NEW DEVICE
  3529.             //THEN THE MONITOR AREAS OF CORE ARE SET TO
  3530.             //THE INFORMATION CONTAINED IN BLOCKS 0 AND 66
  3531.             //AND WE EXIT TO 07600 IN THE NEW MONITOR.
  3532.             //IF IT WAS NOT REQUESTED TO BOOT WE EXIT
  3533.             //THE SET ROUTINE 'GOAWAY'
  3534.  
  3535. FIELD 3
  3536. *0000
  3537. *0020
  3538.             //DEFINITIONS
  3539.  
  3540. K40,    40            /BIT 6 MASK
  3541. K77,    77            /BIT 0-5 MASKOUT
  3542. K100,    100
  3543. K177,    177
  3544. K200,    200
  3545. K203,    203            /CTRL C CODE
  3546. K212,    212            /LINEFEED CODE
  3547. K215,    215            /RETURN CODE
  3548. KC203,    -203            /MINUS CTRL C CODE
  3549.  
  3550. CHAR,    0            /CHARACTER HOLD AREA
  3551. POINT,    0            /CHARACTER POINTER HOLD AREA
  3552. STTRN,    0            /STARTING BLOCK TO TRANSFER
  3553. TRNCNT,    0            /NO. OF TIMES TO TRANSFER 7 BLOCKS
  3554. DEVLEN,    0            /LENGTH OF NEW SYSTEM DEVICE
  3555. UPDLOC,    0            /LOCATION TO UPDATE
  3556. SYSSIZ,    0            /HANDLER SIZE SWITH - 0=1 PAGE -1=2 PAGE
  3557. NEWDCB,    0            /NEW DCB WORD
  3558. NEWDEV,    0            /ENTRY POINT FOR OUTPUT DEVICE
  3559. LCKUSR,    7700            /LOCKIN USR LOCATION
  3560. DATEWD,    7666            /DATE WORD LOCATION IN FIELD 1
  3561. BCHIND,    7777            /BATCH INDICTAOR LOCATION IN FIELD 0
  3562. ZEROYN,    "Y            /DEFAULT IS ZERO DIRECTORY
  3563. BOOTYN, "N            /DEFAULT IS DON'T BOOT THE NEW SYSTEM
  3564. FLBUFF, FILBUF            /POINTER TO BUFFER BEING USED
  3565.  
  3566. FILBUF=0            /BUFFER TO LOAD BLOCK TO 
  3567. BLK0L=FILBUF            /BLOCK 0 LOWER BUFFER
  3568. BLK0U=FILBUF+200        /BLOCK 0 UPPER BUFFER
  3569. BLK66L=FILBUF+400        /BLOCK 66 LOWER BUFFER
  3570. BLK66U=FILBUF+600        /BLOCK 66 UPPER BUFFER
  3571.  
  3572.             //ROUTINE POINTERS
  3573.  
  3574. ASKYN,    ASKER            /ASK A QUESTION ROUTINE
  3575. MSGPRT,PRTMSG            /MESSAGE PRINTING ROUTINE
  3576.  
  3577.             // USR INSTRUCTIONS
  3578.  
  3579. FETCH=1
  3580. FIND=2
  3581. ENTER=3
  3582. CLOSE=4
  3583. DECODE=5
  3584. CHAIN=6
  3585. ERROR=7
  3586. USRIN=10
  3587. USROUT=11
  3588. INQUIR=12
  3589. RESET=13
  3590.  
  3591.             //MESSAGE TABLE
  3592. *200
  3593. ZROMSG,    TEXT    "DO YOU WISH TO ZERO THE NEW SYSTEM DEVICE DIRECTORY? Y OR N: "
  3594. BOTMSG,    TEXT    "DO YOU WISH TO BOOT THE NEW SYSTEM DEVICE? Y OR N: "
  3595. SYSBLT,    TEXT    "SYSTEM BUILT"
  3596.             //START OF 'SET SYS DEVICE LOGDEV:HANDLR' CODE
  3597. *2000
  3598.             //THIS IS THE MAJOR ROUTINE OF THE SET SYS
  3599.             //DEVICE CODE.  ALL MAJOR FUNCTIONS ARE EITHER
  3600.             //DONE HERE OR ARE CALLED FROM HERE.
  3601. CHGSYS,    CLA CLL            /CLEAR AC AND LINK
  3602.     CDF 30            /SET DATA FIELD TO CURRENT FIELD
  3603.     CIF 10            /SET INSTRUCTION FIELD TO USR FIELD
  3604.     JMS I LCKUSR        /LOCK IN USR
  3605.     USRIN
  3606.     CLL CLA
  3607.     CDF 0
  3608.     TAD I BCHIND        /GET BATCH INDICATOR
  3609.     CDF 30
  3610.     RTL            /PUT BATCH RUNNING INDICATOR IN LINK
  3611.     SZL CLA            /IS BATCH RUNNING?
  3612.     JMP USEDEF        /YES, USE DEFAULTS TO QUESTIONS
  3613.     JMS I ASKYN        /NO, QUERY THE USER
  3614.     ZROMSG            /DO YOU WISH TO ZERO DIRECTORY?
  3615.     DCA ZEROYN        /SAVE THE ANSWER
  3616.     JMS I ASKYN
  3617.     BOTMSG            /DO YOU WISH TO BOOT THE NEW SYSTEM
  3618.     DCA BOOTYN        /SAVE THE ANSWER
  3619.  
  3620.  
  3621.             //SYSSET LOADS THE DEVICE HANDLER AND THE NEW
  3622.             //SYSTEM HANDLER INTO CORE SO THAT BOTH MAY BE
  3623.             //ACCESS AT ANY TIME
  3624. USEDEF,    CIF CDF 10
  3625.     JMS I (SYSSET
  3626.     CLA CLL
  3627.     TAD (-7            /GET MINUS NUMBER OF TRANSFERS TO DO
  3628.     DCA TRNCNT        /SAVE IT
  3629.     TAD (7            /START AT BLOCK 7
  3630.     DCA STTRN        /SAVE START OF TRNSFER BLOCK
  3631. TRNMOR,    JMS GET7        /READ 7 BLOCKS FROM OLD SYS INTO FIELD 2
  3632.     JMS PUT7        /WRITE SAME 7 BLOCKS TO NEW DEVICE FROM FIELD 2
  3633.     TAD STTRN        /GET STARTING BLOCK NUMBER
  3634.     TAD (7            /ADD 7 TO IT
  3635.     DCA STTRN        /SAVE FOR POSSIBLE NEXT TRANSFER
  3636.     ISZ TRNCNT        /HAVE WE OUTPUT A TOTAL OF 61 BLOCKS
  3637.     JMP TRNMOR        /NO, OUTPUT ANOTHER 7 BLOCKS
  3638.                 /YES, UPDATE AND MOVE BLOCK 0 AND 66
  3639.  
  3640.             //MOV066 READS IN THE OLD SYSTEM BLOCKS 0 AND
  3641.             //66 AND PUTS THE NEW SYSTEM HANDER AND
  3642.             //RELATED INFORMATION INTO THEIR BUFFER AND
  3643.             //THEN WRITES THEM BACK OUT TO THE NEW DEVICE
  3644.     JMS I (MOV066
  3645.     CLA CLL
  3646.     TAD ZEROYN        /GET THE ZERO DIRECTORY SWITCH
  3647.     TAD (-"Y        /GET A MINUS 'Y'
  3648.     SNA CLA            /SHOULD WE ZERO THE DIRECTORY?
  3649.     JMS I (UPD1        /YES, UPDATE BLOCK 1 - DIRECTORY
  3650.     JMS I MSGPRT        /OUTPUT SYS BUILT MESSAGE
  3651.     SYSBLT
  3652.     JMS I (OCRLF        /OUTPUT A RETURN AFTER THE MESSAGE
  3653.     CLA
  3654.     TAD BOOTYN        /GET THE BOOT SWITCH
  3655.     TAD (-"Y        /GET A MINUS 'Y'
  3656.     SNA CLA            /BOOT THE NEW DEVICE
  3657.     JMP I (BOOTIT        /YES, BOOT AWAY    
  3658.     CIF CDF 0        /NO, EXIT NORMALLY
  3659.     JMP I (GOAWAY
  3660.  
  3661.  
  3662. GET7,    0
  3663.     CLA
  3664.     DCA GETBUF        /SET UP BUFFER TO LOAD TO
  3665.     TAD STTRN        /GET STARTING BLOCK NUMBER TO TRANSFER
  3666.     DCA GETBLK        /SAVE IT
  3667.     CDF 30
  3668.     CIF 0
  3669.     JMS I (SHNDLR        /CALL SYS HANDLER
  3670.     1620            /READ IN 16 PAGES (7 BLOCKS) INTO FIELD 2
  3671. GETBUF,    0            /STARTING AT BEGINNING OF FIELD
  3672. GETBLK,    0            /FROM THIS BLOCK ON SYS DEVICE
  3673.     JMP F3ERR        /ERROR ROUTINE
  3674.     JMP I GET7        
  3675.  
  3676. PUT7,    0
  3677.     CLA
  3678.     DCA PUTBUF        /SET UP TO START AT BEIGINNING OF FIELD
  3679.     TAD STTRN        /GET BLOCK TO START WITH
  3680.     DCA PUTBLK        /SAVE IT
  3681.     CDF 30
  3682.     CIF 0
  3683.     JMS I NEWDEV        /CALL OUTPUT DEVICE HANDLER
  3684.     5620            /WRITE OUT 16 PAGES (7 BLOCKS) FROM FIELD 2
  3685. PUTBUF,    0            /STARTING AT BEGINNING OF FIELD
  3686. PUTBLK,    0            /ONTO THIS BLOCK ON THE OUTPUT DEVICE
  3687.     JMP F3ERR1        /ERROR ROUTINE
  3688.     JMP I PUT7
  3689.  
  3690. F3ERR,    CIF CDF 0
  3691.     JMP I (F0ERR        /READ ERROR
  3692.  
  3693. F3ERR1,    CIF CDF 0
  3694.     JMP I (F0ERR1        /WRITE ERROR
  3695.  
  3696. PAGE
  3697.  
  3698.  
  3699.             //ROUTINE TO UPDATE BLOCK 0 AND 66
  3700.             //THESE BLOCKS CONTAIN MANY THINGS TO BE CHANGED
  3701.             //AMONG THEM ARE THE BOOTSTRAP AND THE SYSTEM HANDLER
  3702. MOV066,    0
  3703.             //READ IN BLOCK 0
  3704.     CDF 30
  3705.     CIF 0
  3706.     JMS I (SHNDLR        /CALL OLD SYSTEM DEVICE HANDLER
  3707.     0220            /READ 1 BLOCK INTO FIELD 2
  3708.     BLK0L            /STARTING AT BLOCK 0 BUFFER
  3709.     0            /FROM BLOCK 0
  3710.     JMP I (F3ERR        /ERROR BRANCH
  3711.             //READ IN BLOCK 66
  3712.     CDF 30
  3713.     CIF 0
  3714.     JMS I (SHNDLR        /CALL OLD SYSTEM DEVICE HANDLER
  3715.     0220            /READ 1 BLOCK FROM FIELD 2
  3716.     BLK66L            /STARTING AT BLOCK 66 BUFFER
  3717.     66            /FROM BLOCK 66
  3718.     JMP I (F3ERR        /ERROR BRANCH
  3719.             //UPDATE BUFFERS CONTAINING BLOCKS 0 AND 66
  3720.     JMS I (CHG066        /ROUTINE FOR BUFFER CHANGES
  3721.             //WRITE OUT BLOCK 0
  3722.     CDF 30
  3723.     CIF 0
  3724.     JMS I NEWDEV        /WRITE TO NEW DEVICE
  3725.     4220            /WRITE 1 BLOCK FROM FIELD 2
  3726.     BLK0L            /STARTING AT BLOCK 0 BUFFER
  3727.     0            /TO BLOCK 0
  3728.     JMP I (F3ERR1        /ERROR BRANCH
  3729.             //WRITE OUT BLOCK 66
  3730.     CDF 30
  3731.     CIF 0
  3732.     JMS I NEWDEV        /WRITE TO NEW DEVICE
  3733.     4220            /WRITE 1 BLOCK FROM FIELD 2
  3734.     BLK66L            /STARTING AT BLOCK 66 BUFFER
  3735.     66            /TO BLOCK 66
  3736.     JMP I (F3ERR1        /ERROR BRANCH
  3737.     JMP I MOV066
  3738.  
  3739. PAGE
  3740.             //ROUTINE TO PUT THE NEW SYSTEM HANDLER INTO THE
  3741.             //APPROPRIATE LOCATIONS IN THE BUFFERS WHERE THERE
  3742.             //ARE BEING STORED TEMPORARILY AND TO UPDATE
  3743.             //OTHER RELATED INFO.
  3744.  
  3745. CHG066,    0
  3746.     CLL CLA
  3747.     CDF 10
  3748.     TAD I (MNOHND        /GET MINUS THE NUMBER OF HANDLERS IN FILE
  3749.     CDF 30
  3750.     CIA             /MAKE IT POSITIVE
  3751.     AND (17            /KEEP ONLY BITS 8-11
  3752.     RTL            /MULTIPLY BY 10 - # OF LOCATIONS PER HEADER
  3753.     RAL
  3754.     TAD (1            /ADD IN OFFSET TO FIRST HANDLER
  3755.     TAD (BUFHN        /ADD IN START OF BUFFER WITH BOOTSTRAP
  3756.     DCA BOOTLN        /SAVE THE LOCATION OF THE BOOTSTRAP LENGTH
  3757.     TAD BOOTLN        /GET IT BACK
  3758.     TAD (1            /ADD OFFSET TO START OF BOOTSTRAP
  3759.     DCA BOOTST        /SAVE LOCATION OF START OF BOOTSTRAP
  3760.             //UPDATE BLOCK 66 (LOWER) TO REFLECT NEW HANDLER INFO
  3761.             //SET UP DCW TABLE TO SHOW NEW DCB WORD
  3762.     TAD NEWDCB        /GET THE NEW DCB WORD
  3763.     CDF 20
  3764.     DCA I SYSDCB        /SAVE IN FIELD 2 AT THE SYS DCB LOCATION
  3765.     CDF 30
  3766.     TAD NEWDCB        /GET BACK THE DCB WORD
  3767.     CDF 20
  3768.     DCA I DSKDCB        /SAVE IT IN FIELD 2 AT THE DSK DCB LOCATION
  3769.     CDF 30
  3770.             //SET UP THE DHR TABLE
  3771.     TAD (SHNDLR        /GET THE OFFSET TO THE SYSTEM HANDLER
  3772.     CDF 20
  3773.     DCA I DHRPTR        /SAVE IT IN THE FIRST LOCATION OF THE DHR TABLE
  3774.     CDF 30
  3775.     ISZ DHRPTR        /INCREMENT THE POINTER FOR THE NEXT SAVE
  3776.     TAD (SHNDLR        /GET THE OFFSET AGAIN
  3777.     CDF 20
  3778.     DCA I DHRPTR        /SAVE DSK SAME AS SYS
  3779.     CDF 30
  3780.             //ZERO OUT THE REST OF THE TABLE
  3781. ZERDHR,    ISZ DHRPTR        /INCREMENT THE POINTER AGAIN
  3782.     CDF 20
  3783.     DCA I DHRPTR        /ZERO THE LOCATION
  3784.     CDF 30
  3785.     ISZ DHRLEN        /LAST LOCATION TO ZERO YET
  3786.     JMP ZERDHR        /NO, ZERO ANOTHER ONE
  3787.             //MOVE FIELD 1 7600 IMAGE TO NEW BLOCK 0 (LOWER)
  3788.             //FROM NEW BLOCK 66 (LOWER)
  3789.     TAD (-200        /MOVE 200 LOCATIONS 
  3790.     JMS I (MOVIT
  3791.     CDF 20            /FROM FIELD 2
  3792.     BLK66L            /FIRST HALF OF BLOCK 66 BUFFER
  3793.     CDF 20            /TO FIELD 2
  3794.     BLK0L            /1ST HALF OF NEW BLOCK 0
  3795.             //MOVE BOOTSTRAP TO BLOCK 0 (LOWER)
  3796.     TAD BOOTST        /GET START OF BOOTSTRAP LOCATION
  3797.     DCA MVBT0        /SAVE IT FOR BLOCK 0 MOVE
  3798.     CDF 10            /NO OF LOCATIONS IS IN FIELD 1
  3799.     TAD I BOOTLN        /GET THE LENGTH OF THE BOOTSTRAP
  3800.     CDF 30
  3801.     JMS I (MOVIT
  3802.     CDF 10            /FROM FIELD 1
  3803. MVBT0,    0            /STARTING AT START OF BOOTSTRAP
  3804.     CDF 20            /TO FIELD 2
  3805.     BLK0L            /AT THE START OF BLOCK 0 BUFFER
  3806.             //MOVE 47 LOCATIONS OF THE BOOTSTRAP TO BLOCK 66(LOWER)
  3807.     TAD BOOTST        /GET START BOOTSTRAP LOCATION LOCATION AGAIN
  3808.     DCA MVBT66        /SAVE IT FOR BLOCK 66 MOVE
  3809.     TAD (-47        /MOVE 47 LOCATIONS
  3810.     JMS I (MOVIT
  3811.     CDF 10            /FROM FIELD 1
  3812. MVBT66,    0            /STARTING AT BEGINNING OF BOOTSTRAP
  3813.     CDF 20            /TO FIELD 2
  3814.     BLK66L            /STARTING AT BEGINNING OF BLOCK 66 BUFFER
  3815.             //MOVE 1ST PAGE OF NEW HANDLER TO NEW BLOCK 0 (UPPER)
  3816.     TAD (-135        /MOVE 135 LOCATIONS
  3817.     JMS I (MOVIT
  3818.     CDF 10            /FROM FIELD 1
  3819.     BUFHN+207        /FROM THE 1ST PAGE OF THE NEW HANDLER
  3820.     CDF 20            /TO FIELD 2
  3821.     BLK0U+7            /2ND HALF OF NEW BLOCK 0 BUFFER
  3822.             //MOVE 2ND PAGE OF NEW HANDLER TO NEW BLOCK 66 (UPPER)
  3823.     TAD (-174        /MOVE 174 LOCATIONS
  3824.     JMS I (MOVIT
  3825.     CDF 10            /FROM FIELD 1
  3826.     BUFHN+400        /START OF 2ND PAGE OF HANDLER
  3827.     CDF 20            /TO FIELD 2
  3828.     BLK66U            /2ND HALF OF NEW BLOCK 66 BUUFER
  3829.             //SET LAST FOUR LOCATIONS OF BLOCK 66 UPPER TO ZERO
  3830.     CLA            /CLEAR AC
  3831.     CDF 20
  3832.     DCA I (BLK66U+174    /CLEAR LOCATION 174
  3833.     DCA I (BLK66U+175    /CLEAR LOCATION 175
  3834.     DCA I (BLK66U+176    /CLEAR LOCATION 176
  3835.     DCA I (BLK66U+177    /CLEAR LOCATION 177
  3836.     JMP I CHG066
  3837.  
  3838.             //ALL THESE LOCATIONS ARE IN REFERENCE TO
  3839.             //THE BLOCK 0 AND BLOCK 66 BUFFERS
  3840. BOOTLN,    0            /BOOTSTRAP LENGTH LOCATION
  3841. BOOTST,    0            /LOCATION OF START OF BOOTSTRAP
  3842. SYSDCB,    BLK66L+160        /LOCATION OF SYS DCB WORD
  3843. DSKDCB,    BLK66L+161        /LOCATION OF DSK DCB WORD
  3844. DHRPTR,    BLK66L+47        /LOC. IN DHR TABLE, INITIALLY TO FIRST LOC.
  3845. DHRLEN,    -15            /NO. OF LOC. TO ZERO IN DHR TABLE
  3846.  
  3847. PAGE
  3848.  
  3849.             //ROUTINE TO UPDATE BLOCK 1
  3850.             //THIS BLOCK MUST BE UPDATED TO SHOW THAT THERE IS 
  3851.             //ONLY ONE FILE ON THE DEVICE NAMELY AN EMPTY ONE
  3852.             //THE LENGTH OF THE REMAINING SPACE THERE
  3853.             //THIS IS ONLY DONE UPON REQUEST
  3854.             //THE DEFAULT IS TO NOT ZERO THE DIRECTORY
  3855. UPD1,    0
  3856.     CDF 30
  3857.     CIF 0
  3858.     JMS I NEWDEV        /CALL OUTPUT DEVICE HANDLER
  3859.     0220            /READ 1 BLOCK INTO FIELD 2
  3860.     FILBUF            /STARTING AT LOCATION FILBUF
  3861.     1            /FROM BLOCK 1
  3862.     JMP I (F3ERR        /ERROR BRANCH
  3863.     TAD FLBUFF        /GET LOCATION 0 OF BUFFER
  3864.     DCA UPDLOC        /STORE IT
  3865.     STA            /GET A MINUS ONE IN AC
  3866.     CDF 20            /BE SURE TO STORE INFO IN FIELD 2
  3867.     DCA I UPDLOC        /SAVE IN MINUS NUMBER OF FILES SPOT
  3868.     ISZ UPDLOC        /SET UP FOR LOCATION 1 IN BUFFER
  3869.     TAD (70            /GET START OF FILE STORAGE BLOCK
  3870.     DCA I UPDLOC        /SAVE IT
  3871.     ISZ UPDLOC        /SET UP FOR LOCATION 2 IN BUFFER
  3872.     DCA I UPDLOC        /SET LINK TO NEXT SEGMENT TO ZERO
  3873.     ISZ UPDLOC        /SET UP FOR LOCATION 3
  3874.     DCA I UPDLOC        /SET POINTER FOR TENTATIVE FILES TO 0
  3875.     ISZ UPDLOC        /SET UP FOR LOCATION 4
  3876.     STA            /1 ADDITIONAL INFO WORDS USED FOR DATE
  3877.     DCA I UPDLOC
  3878.     ISZ UPDLOC        /SET UP FOR LOCATION 5
  3879.     DCA I UPDLOC        /ZERO HERE MEANS EMPTY FILE
  3880.     ISZ UPDLOC        /SET UP FOR LOCATION 6
  3881.     TAD DEVLEN        /GET THE DEVICE LENGTH
  3882.     TAD (-70        /SUBTRACT 70 FROM IT
  3883.     CIA            /MAKE IT A MINUS
  3884.     DCA I UPDLOC        /SAVE MINUS NO. OF BLOCKS FOR FILE STORAGE
  3885.     CDF 30
  3886.     CIF 0
  3887.     JMS I NEWDEV        /CALL OUTPUT DEVICE HANDLER
  3888.     4220            /WRITE 1 BLOCK FROM FIELD 2
  3889.     FILBUF            /STARTING AT LOCATION FILBUF
  3890.     1            /TO BLOCK 1
  3891.     JMP I (F3ERR1        /ERROR BRANCH
  3892.     JMP I UPD1
  3893.  
  3894.     PAGE
  3895.  
  3896.  
  3897.             //MOVIT MOVES CORE AROUND  (CALLABLE FROM ANY FIELD)
  3898.  
  3899.             //    TAD (-# OF LOCS TO MOVE
  3900.             //    JMS MOVE
  3901.             //    CDF FROM FIELD
  3902.             //    FROM BUFFER LOCATION START
  3903.             //    CDF 'TO' FIELD
  3904.             //    TO BUFFER
  3905.  
  3906.  
  3907. MOVIT,    0
  3908.     DCA MVCT        /STORE # OF LOCATIONS TO MOVE
  3909.     RDF            /FIND OUT FIELD TO RETURN TO
  3910.     TAD (CIF CDF        /ADD IN A FIELD CHANGE INSTRUCTION
  3911.     DCA MOVRET        /SAVE THE FIELD CHANGE INSTRUCTION
  3912.     TAD I MOVIT        /GET DATA FIELD TO READ FROM INSTRUCTION
  3913.     DCA MVCDF2        /SAVE IT
  3914.     ISZ MOVIT        /POINT TO INPUT BUFFER VALUE
  3915.     TAD I MOVIT        /GET START OF BUFFER TO MOVE
  3916.     DCA MVTM1        /SAVE IT
  3917.     ISZ MOVIT        /POINT TO OUTPUT DATA FIELD INSTRUCTION
  3918.     TAD I MOVIT        /GET THE INSTRUCTION
  3919.     DCA MVDF        /SAVE IT
  3920.     ISZ MOVIT        /POINT TO OUTPUT BUFFER VALUE
  3921.     TAD I MOVIT        /GET START OF BUFFER TO DEPOSIT IN
  3922.     DCA MVTM2        /SAVE IT
  3923.     ISZ MOVIT        /POINT TO RETURN LOCATION
  3924.     TAD MVCT        /GET # OF LOCATIONS TO MOVE
  3925.     SNA CLA            /ANY LOCATIONS TO MOVE
  3926.     JMP MOVRET        /NO, LET'S GET OUT OF HERE
  3927.                 /YES, LET'S MOVE THEM
  3928. MVCDF2,    CDF 0            /GETS ALTERED TO INPUT FIELD INSTRUCTION
  3929.     TAD I MVTM1        /READ A LOCATION
  3930. MVDF,    HLT            /GETS ALTERED TO OUTPUT FIELD INSTRUCTION
  3931.     DCA I MVTM2        /PUT THE VALUE IN THE OUTPUT LOCATION
  3932.     ISZ MVTM1        /BUMP POINTER TO INPUT LOCATION
  3933.     ISZ MVTM2        /BUMP POINTER TO OUTPUT LOCATION
  3934.     ISZ MVCT        /BUMP NUMBER OF LOCATIONS TO MOVE
  3935.     JMP MVCDF2        /YES, DO NEXT LOCATION
  3936. MOVRET,    HLT            /GETS ALTERED TO RETURN TO CALLING FIELD
  3937.     JMP I MOVIT
  3938.  
  3939. MVCT,    0
  3940. MVTM1,    0
  3941. MVTM2,    0
  3942.  
  3943. PAGE
  3944.  
  3945.  
  3946.             //ROUTINE TO PRINT MESSAGES
  3947.  
  3948. PRTMSG, 0
  3949.     CLL CLA            /CLEAR AC AND LINK
  3950.     TAD I PRTMSG        /GET MESSAGE POINTER
  3951.     DCA POINT        /SAVE IT
  3952.     ISZ PRTMSG
  3953.     NOP
  3954. TTYMOR, TAD I POINT        /GET TWO CHARACTERS
  3955.     BSW            /BYTE SWAP
  3956.     AND K77            /MASK OUT SECOND CHARACTER - BITS 0-5
  3957.     SNA            /ARE BITS 6-11 = ZERO
  3958.     JMP I PRTMSG        /YES, END OF MESSAGE
  3959.     JMS BLDCHR        /NO, PRINT THE CHARACTER
  3960.     TAD I POINT        /GET SAME TWO CHARACTERS AGAIN
  3961.     AND K77            /MASK OUT FIRST CHARACTER
  3962.     SNA            /ARE BITS 6-11 = ZERO
  3963.     JMP I PRTMSG        /YES, END OF MESSAGE
  3964.     JMS BLDCHR        /NO, PRINT THE CHARACTER
  3965.     ISZ POINT        /INCREMENT MESSAGE POINTER
  3966.     JMP TTYMOR        /GET NEXT TWO CHARACTERS
  3967.     JMP I PRTMSG        /END OF MESSAGE
  3968.  
  3969. BLDCHR, 0            /ROUTINE TO BUILD CHARACTER
  3970.     DCA CHAR        /STORE THE 6-BIT CHARACTER CODE
  3971.     TAD CHAR        /GET IT BACK
  3972.     AND K40            /IS IT GREATER THAN 40
  3973.     SNA CLA            /NO
  3974.     TAD K100        /YES, SET UP FOR 300 CODE
  3975.     TAD K200        /SET UP FOR 200 CODE
  3976.     TAD CHAR        /GET THE CHARACTER BACK
  3977.     JMS CHROUT        /OUTPUT THE CHARACTER
  3978.     CLA CLL
  3979.     JMP I BLDCHR
  3980.  
  3981. CHROUT, 0            /ROUTINE TO OUTPUT THE CHARACTER
  3982.     TLS            /OUTPUT THE CHARACTER
  3983.     TSF            /SKIP ON CLEAR FLAG
  3984.     JMP .-1
  3985.     CLA CLL            /CLEAR THE CHARACTER OUT OF THE AC
  3986.     JMP I CHROUT
  3987.  
  3988.             //ROUTINE TO ASK A QUESTION
  3989.             //REQUIRING A ONE CHARACTER ANSWER
  3990.             //AND TO ACCEPT THE ANSWER
  3991.             //ANSWER IS RETURNED IN THE AC
  3992.  
  3993. ASKER,    0
  3994.     TAD I ASKER        /FIND THE MESSAGE POINTER
  3995.     DCA MSGPTR        /STORE IT
  3996.     ISZ ASKER        /SET UP ASKER TO EXIT TO THE RIGHT LOCATION
  3997.     NOP
  3998.     JMS PRTMSG        /OUTPUT THE MESSAGE
  3999. MSGPTR, 0
  4000.             //ACCEPT THE ANSWER
  4001.     CLA CLL
  4002.     KSF            /SKIP IF KEYBOARD NOT READY
  4003.     JMP .-1            /LOOP TILL WE GOT THE ANSWER
  4004.     KRB            /GET THE ANSWER
  4005.     AND (137        /MASK OUT LC BIT
  4006.     TAD K200        /AND CONVERT TO 8 BIT
  4007.     TAD KC203        /CHECK FOR A CTRL C
  4008.     SNA            /WAS IT A CTRL C?
  4009.     JMP OUT            /YES, GET BACK TO MONITOR
  4010.     TAD K203        /SET THE AC TO THE CHARCTER VALUE AGAIN
  4011.     DCA CHAR        /STORE THE ANSWER
  4012.     TAD CHAR        /GET IT BACK
  4013.     JMS CHROUT        /PRINT IT BACK
  4014.     JMS OCRLF        /OUTPUT A CRLF
  4015.     TAD CHAR        /GET IT AGAIN
  4016.     JMP I ASKER        /EXIT
  4017.  
  4018.             //ROUTINE TO OUTPUT CRLF AFTER A MESSAGE
  4019.  
  4020. OCRLF,    0
  4021.     TAD K212        /GET A LINEFEED CODE
  4022.     JMS CHROUT        /OUTPUT IT
  4023.     TAD K215        /GET A CARRAIGE RETURN CODE
  4024.     JMS CHROUT        /OUTPUT IT
  4025.     JMP I OCRLF
  4026.  
  4027.             //ROUTINE TO JUMP OUT ON A CTRL C
  4028. OUT,    CIF CDF 0
  4029.     JMP I (MONIT5
  4030.  
  4031. PAGE
  4032.  
  4033.             //ROUTINE TO BOOT THE NEW SYSTEM DEVICE
  4034.             //THIS IS ONLY DONE UPON REQUEST
  4035.             //THE DEFAULT IS A REQUEST TO BOOT
  4036. BOOTIT,    0
  4037.             //SAVE THE DATE AND BATCH INDICATOR
  4038.     CDF 10
  4039.     TAD I DATEWD        /GET THE DATE WORD
  4040.     DCA SAVDAT        /SAVE IT
  4041.     CDF 0
  4042.     TAD I BCHIND        /GET THE BATCH INDICATOR WORD
  4043.     DCA SAVBAT        /SAVE IT
  4044.     CDF 30
  4045.             //ROUTINE TO READ IN BLOCK 0 AND 66
  4046.             //READ IN BLOCK 0
  4047.     CDF 30
  4048.     CIF 0
  4049.     JMS I NEWDEV        /CALL NEW SYSTEM DEVICE HANDLER
  4050.     0220            /READ 1 BLOCK INTO FIELD 2
  4051.     BLK0L            /STARTING AT BLOCK 0 BUFFER
  4052.     0            /FROM BLOCK 0
  4053.     JMP I (F3ERR        /ERROR BRANCH
  4054.             //READ IN BLOCK 66
  4055.     CDF 30
  4056.     CIF 0
  4057.     JMS I NEWDEV        /CALL NEW SYSTEM DEVICE HANDLER
  4058.     0220            /READ 1 BLOCK FROM FIELD 2
  4059.     BLK66L            /STARTING AT BLOCK 66 BUFFER
  4060.     66            /FROM BLOCK 66
  4061.     JMP I (F3ERR        /ERROR BRANCH
  4062.             //MOVE FIELD 0 CODE TO FIELD 0
  4063.     TAD (-200        /MOVE 200 LOCATIONS
  4064.     JMS I (MOVIT
  4065.     CDF 20            /FROM FIELD 2
  4066.     BLK0U            /FROM THE UPPER PART OF BLOCK 0
  4067.     CDF 0            /TO FIELD 0
  4068.     MONIT            /STARTING AT 7600
  4069.             //MOVE FIELD 1 CODE TO FIELD 1
  4070.     TAD (-200        /MOVE 200 LOCATIONS
  4071.     JMS I (MOVIT
  4072.     CDF 20            /FROM FIELD 2
  4073.     BLK66L            /STARTING AT BEGINNING OF BLOCK 66
  4074.     CDF 10            /TO FIELD 1
  4075.     MONIT            /BEGINNING AT 7600
  4076.             //MOVE FIELD 2 CODE TO FIELD 2, JUST IN CASE
  4077.     TAD (-174        /MOVE 174 LOCATIONS
  4078.     JMS I (MOVIT
  4079.     CDF 20            /FROM FIELD 2
  4080.     BLK66U            /STARTING AT SECOND HALF OF BLOCK 66
  4081.     CDF 20            /TO FIELD 2
  4082.     MONIT            /BEGINNING AT 7600
  4083.             //DISMISS USR FROM CORE
  4084.     CDF 30            /SET DATA FIELD TO CURRENT FIELD
  4085.     CIF 10            /SET INSTRUCTION FIELD TO USR FIELD
  4086.     JMS I LCKUSR        /DISMISS USR
  4087.     USROUT
  4088.             //RESTORE THE DATE AND BATCH WORDS
  4089.     TAD SAVDAT        /GET THE SAVED DATE WORD
  4090.     CDF 10
  4091.     DCA I DATEWD        /PUT IT WHERE IT BELONGS
  4092.     TAD SAVBAT        /GET THE SAVED BATCH WORD
  4093.     CDF 0
  4094.     DCA I BCHIND        /PUT IT BACK TOO
  4095.             //NOW EXIT TO NEW MONITOR
  4096.     CIF CDF 0        /BE SURE TO EXIT TO FIELD 0
  4097.     JMP I (MONIT        /MONITOR LOCATION
  4098.  
  4099. SAVDAT,    0            /DATE SAVE LOCATION
  4100. SAVBAT,    0            /BATCH INDICATOR SAVE LOCATION
  4101.     
  4102.  
  4103. $$$                /END OF PROGRAM
  4104.  
  4105.