home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 2 / goldfish_vol2_cd1.bin / files / dev / asm / tbsource / shellterm / st1.21.s < prev    next >
Text File  |  1993-12-21  |  63KB  |  3,197 lines

  1. *************************************************
  2. *                        *
  3. *           (C)opyright 1992-93        *
  4. *                        *
  5. *        by Tomi Blinnikka        *
  6. *                        *
  7. *    Don't try to understand the code    *
  8. *                        *
  9. * Version 0.01    28/05/1992            *
  10. *     -0.99ö                    *
  11. *                        *
  12. * Version 1.00    04/08/1992            *
  13. *                        *
  14. * BUGS: Lots! No phonebook.            *
  15. *                        *
  16. * Version 1.01    05/08/1992            *
  17. *                        *
  18. * BUGS: Some. Dialer problems.            *
  19. *                        *
  20. * Version 1.02    06/08/1992            *
  21. *                        *
  22. * BUGS: Less. Still dialer problems.        *
  23. *                        *
  24. * Version 1.03    08/08/1992            *
  25. *                        *
  26. * BUGS:                     *
  27. *                        *
  28. * Version 1.04    11/08/1992            *
  29. *                        *
  30. * Released                    *
  31. *                        *
  32. * BUGS: Send CTRL-P didn't work            *
  33. *                        *
  34. * Version 1.05    15/08/1992            *
  35. *                        *
  36. * Version 1.06    28/08/1992            *
  37. *                        *
  38. * Added prefs file and swap BS & DEL        *
  39. * See docs for more info            *
  40. *                        *
  41. * Version 1.07    30/08/1992            *
  42. *                        *
  43. * Version 1.08    04/09/1992            *
  44. *                        *
  45. * Added cursor remap                *
  46. *                        *
  47. * Version 1.09    06/09/1992            *
  48. *                        *
  49. * Version 1.10    20/10/1992            *
  50. *                        *
  51. * Hopefully fixed bug in FindWord        *
  52. * Added: PublicPorts                *
  53. *                        *
  54. * Version 1.11    13/11/1992 <-Friday the 13th    *
  55. *                        *
  56. * Version for Mika Henttinen            *
  57. *                        *
  58. * Version 1.12    30/12/1992            *
  59. *                        *
  60. * Changed parser to Commodore's own ReadArgs    *
  61. *                        *
  62. * Version 1.13    02/01/1993            *
  63. *                        *
  64. * Added 'Execute Command'            *
  65. *                        *
  66. * Version 1.14    06/02/1993            *
  67. *                        *
  68. * Fixed bug at start clearing CLI pointer's    *
  69. * last byte                    *
  70. *                        *
  71. * Version 1.15    10/02/1993            *
  72. *                        *
  73. * Made sure that the Modify Mode in the dialer    *
  74. * is turned off when the dialer is quit        *
  75. *                        *
  76. * Version 1.16    24/03/1993            *
  77. *                        *
  78. * Fixed bug with opening device!        *
  79. *                        *
  80. * Version 1.17    25/03/1993            *
  81. *                        *
  82. * Added optional port                *
  83. *                        *
  84. * Version 1.18    22/05/1993            *
  85. *                        *
  86. * Added scripts to archive            *
  87. *                         *
  88. * Fixed bug with opening device and setting    *
  89. * parameters.                    *
  90. *                        *
  91. * Added XON/XOFF                *
  92. *                        *
  93. * Version 1.19    26/05/1993            *
  94. *                        *
  95. * Added version to prefs file            *
  96. *                        *
  97. * Version 1.20    23/06/1993            *
  98. *                        *
  99. * Fixed "Can't open device '"... string.    *
  100. *                        *
  101. * Version 1.21    02/07/1993            *
  102. *                        *
  103. * Fixed 'Load prefs' bug.            *
  104. *                        *
  105. *************************************************
  106.  
  107.     INCLUDE    "JMPLibs.i"
  108.     INCLUDE    "exec/types.i"
  109.     INCLUDE    "exec/nodes.i"
  110.     INCLUDE    "exec/lists.i"
  111.     INCLUDE    "exec/ports.i"
  112.     INCLUDE    "exec/memory.i"
  113.     INCLUDE    "exec/devices.i"
  114.     INCLUDE    "exec/io.i"
  115.     INCLUDE    "exec/tasks.i"
  116.     INCLUDE    "libraries/dosextens.i"
  117.     INCLUDE    "libraries/dos.i"
  118.     INCLUDE    "devices/serial.i"
  119.  
  120.     INCLUDE    "XREF:2.0.xref"
  121.     INCLUDE    "XREF:exec.xref"
  122.     INCLUDE    "XREF:dos.xref"
  123.  
  124.  
  125. PROGVERSION:    macro
  126.         dc.b    "1.21 (02.07.93)"
  127.         endm
  128.  
  129. STFileVersion:    EQU    'ST01'
  130.  
  131. CTRL_B:        EQU    2
  132. CTRL_F:        EQU    6
  133. BS:        EQU    8
  134. TAB:        EQU    9
  135. LF:        EQU    10
  136. CR:        EQU    13
  137. CTRL_N:        EQU    $E
  138. CTRL_O:        EQU    $F
  139. CTRL_P:        EQU    $10
  140. DEL:        EQU    127
  141. CSI:        EQU    $9B
  142. Cursor_Up:    EQU    'A'
  143. Cursor_Down:    EQU    'B'
  144. Cursor_Left:    EQU    'D'
  145. Cursor_Right:    EQU    'C'
  146.  
  147. MENU_KEY:    EQU    CTRL_P
  148. STATS_KEY:    EQU    CTRL_O
  149.  
  150. FALSE:        EQU    0
  151. TRUE:        EQU    1
  152.  
  153. BUFLEN:        EQU    1024
  154. ENTRYLENGTH:    EQU    20
  155.  
  156.         section    ST,CODE
  157.  
  158.         push    d2-d7/a2-a6
  159.         push    d0/a0
  160.  
  161.         openlib    Dos,NoDos        ;Keep at beginning
  162.  
  163. CLIStart:    lib    Dos,Output
  164.         move.l    d0,_stdout
  165.         lib    Dos,Input
  166.         move.l    d0,_stdin
  167.         move.l    d0,d1
  168.         lib    Dos,IsInteractive
  169.         tst.l    d0
  170.         beq    NotInteractive
  171.         pull    d0/a0
  172.  
  173.         lea.l    CLTemplate1,a0
  174.         move.l    a0,d1
  175.         lea.l    CLArray1,a0
  176.         move.l    a0,d2
  177.         clr.l    d3
  178.         lib    Dos,ReadArgs
  179.         move.l    d0,RDArgs1
  180.         beq    NoRDArgs
  181.  
  182.         move.l    CLArray1,a0
  183.         lea.l    FileNameBuf1,a1
  184.         tst.b    (a0)
  185.         beq    Parse2
  186. CLCopyLoop:    move.b    (a0)+,(a1)+
  187.         tst.b    -1(a1)
  188.         bne    CLCopyLoop
  189.  
  190. Parse2:        tst.l    OptPortName
  191.         beq    Parse3            ;No port specified
  192.  
  193.         lib    Exec,CreateMsgPort
  194.         move.l    d0,OptPort
  195.         beq    NoMsgPort
  196.  
  197. ;Add port to public lists
  198.  
  199.         move.l    OptPort,a1
  200.         move.l    OptPortName,a0
  201.         move.l    a0,LN_NAME(a1)
  202.         lib    Exec,AddPort
  203.  
  204. Parse3:
  205.  
  206. MainStart:    openlib    Utility,NoUtility        ;Keep at beginning
  207.  
  208.         bsr    LoadPrefsFile
  209.  
  210.         bsr    OpenSerial
  211.  
  212.         bsr    SetSerParams
  213.         tst.l    d0
  214.         beq    MainStart1
  215.         bsr    ParamsNotSet
  216.  
  217. MainStart1:    lea.l    StartText1,a0
  218.         bsr    Printer
  219.  
  220. ;Change mode for CLI to RAW:
  221.  
  222.         move.l    _stdin,d1
  223.         move.l    #TRUE,d2
  224.         lib    Dos,SetMode
  225.  
  226. ;Flush extra text
  227.  
  228.         move.l    _stdin,d1
  229.         lib    Dos,Flush
  230.  
  231. Looper:        move.l    _stdin,d1
  232.         move.l    #5000,d2
  233.         lib    Dos,WaitForChar
  234.         tst.l    d0
  235.         beq    Looper1
  236.         move.l    _stdin,d1
  237.         lea.l    Buffer1,a0
  238.         move.l    a0,d2
  239.         move.l    #1,d3
  240.         lib    Dos,Read
  241.         cmp.b    #MENU_KEY,Buffer1
  242.         beq    Menu
  243.         move.b    CPAssign,d0
  244.         cmp.b    Buffer1,d0
  245.         beq    DoCTRL_P2
  246.         bsr    DoCLIInput
  247. Looper1:    move.l    #BUFLEN,d0
  248.         move.l    #1,d1
  249.         bsr    Read
  250.         tst.l    d0
  251.         beq    Looper
  252.  
  253.         lea.l    Buffer3,a0
  254.         clr.b    0(a0,d0.l)    ;null terminated, please!
  255.  
  256.         bsr    DoSerialInput
  257.  
  258.         move.l    _stdout,d1
  259.         lea.l    Buffer4,a1
  260.         bsr    GetLength
  261.         move.l    d0,d3
  262.         lea.l    Buffer4,a0
  263.         move.l    a0,d2
  264.         lib    Dos,Write
  265.  
  266.         bsr    DoCapture
  267.  
  268.         bra    Looper
  269.  
  270. Menu:        bsr    DoANSI
  271.         lea.l    MenuText1,a0
  272.         bsr    Printer
  273. Menu1:        move.l    _stdin,d1
  274.         lib    Dos,FGetC
  275.         cmp.l    #-1,d0
  276.         beq    ShutDown
  277.         cmp.l    #'a',d0
  278.         bcs    Menu2
  279.         cmp.l    #'z',d0
  280.         bhi    Menu2
  281.         sub.l    #32,d0
  282. Menu2:        cmp.l    #'P',d0
  283.         beq    Prefs
  284.         cmp.l    #'S',d0
  285.         beq    DoStats
  286.         cmp.l    #'C',d0
  287.         beq    ClearBoth
  288.         cmp.l    #'D',d0
  289.         beq    Dialer
  290.         cmp.l    #'B',d0
  291.         beq    DoBreak
  292.         cmp.l    #'O',d0
  293.         beq    DoCTRL_P
  294.         cmp.l    #'F',d0
  295.         beq    ResetFont
  296.         cmp.l    #'X',d0
  297.         beq    ClearScreen
  298.         cmp.l    #'R',d0
  299.         beq    DoReset
  300.         cmp.l    #'H',d0
  301.         beq    DoHangUp
  302.         cmp.l    #'L',d0
  303.         beq    DoOpenCapture
  304.         cmp.l    #'K',d0
  305.         beq    DoCloseCapture
  306.         cmp.l    #'+',d0
  307.         beq    DoUpLoad
  308.         cmp.l    #'-',d0
  309.         beq    DoDownLoad
  310.         cmp.l    #'M',d0
  311.         beq    DoExecute
  312.         cmp.l    #'?',d0
  313.         beq    DoInfo
  314.         cmp.l    #'Q',d0
  315.         beq    Quit
  316.         cmp.l    #'E',d0
  317.         beq    Exit1
  318.         bra    Menu1
  319. Exit1:        lea.l    ExitText1,a0
  320.         bsr    Printer
  321.  
  322. Exit:        bsr    DoANSI
  323.         lea.l    TerminalText1,a0
  324.         bsr    Printer
  325.         bclr.b    #0,ModifyMode            ;Clear modify bit
  326.  
  327.         tst.w    SerOpen
  328.         bne    Exit_OUT
  329.         bsr    NoSerial
  330. Exit_OUT:    bra    Looper1
  331.  
  332. ResetFont:    lea.l    ResetFText1,a0
  333.         bsr    Printer
  334.         lea.l    PlainText1,a0
  335.         bsr    Printer
  336.         bra    Menu
  337.  
  338. ClearScreen:    lea.l    ClearSText1,a0
  339.         bsr    Printer
  340.         bra    Exit
  341.  
  342. DoANSI:        tst.b    UseANSI
  343.         beq    DoANSI_OUT
  344.         lea.l    ClearSText1,a0
  345.         bsr    Printer
  346. DoANSI_OUT:    rts
  347.  
  348. DoStats:    lea.l    StatsText2,a0
  349.         bsr    Printer
  350.         bsr    DoANSI
  351.         bsr    GiveStats
  352.         bsr    GetAnyKey
  353.         bra    Menu
  354.  
  355. ClearBoth:    lea.l    ClearText1,a0
  356.         bsr    Printer
  357.         clr.l    Received
  358.         clr.l    Sent
  359.         bra    Menu
  360.  
  361. DoBreak:    bsr    SendBREAK
  362.         lea.l    BreakText2,a0
  363.         bsr    Printer
  364.  
  365.         bra    Exit
  366.  
  367. DoCTRL_P:    move.b    #CTRL_P,Buffer1
  368.         bsr    Writer
  369.         lea.l    CTRL_PText1,a0
  370.         bsr    Printer
  371.         add.l    #1,Sent
  372.         bra    Exit
  373.  
  374. DoCTRL_P2:    move.b    #CTRL_P,Buffer1
  375.         bsr    Writer
  376.         add.l    #1,Sent
  377.         bra    Looper
  378.  
  379. DoReset:    lea.l    ResetText1,a0
  380.         bsr    Printer
  381.         lea.l    ResetText2,a1
  382.         bsr    GetLength
  383.         lea.l    ResetText2,a0
  384.         bsr    Writer2
  385.         bra    Exit
  386.  
  387. DoHangUp:    lea.l    HangUpText1,a0
  388.         bsr    Printer
  389.         move.l    #3*50,d1
  390.         lib    Dos,Delay
  391.         lea.l    HangUpText2,a1
  392.         bsr    GetLength
  393.         lea.l    HangUpText2,a0
  394.         bsr    Writer2
  395.         move.l    #2*55,d1
  396.         lib    Dos,Delay
  397.         lea.l    HangUpText3,a1
  398.         bsr    GetLength
  399.         lea.l    HangUpText3,a0
  400.         bsr    Writer2
  401.         bra    Exit
  402.  
  403. DoOpenCapture:    lea.l    OpenCaptureText1,a0
  404.         bsr    Printer
  405.  
  406.         tst.l    CaptureFile
  407.         bne    DoOpenCapture_ERR2
  408.  
  409.         lea.l    FileNameBuf2,a0
  410.         move.l    #128,d3
  411.         bsr    GetString
  412.  
  413.         tst.b    FileNameBuf2
  414.         beq    DoOpenCapture_OUT
  415.  
  416.         lea.l    FileNameBuf2,a0
  417.         move.l    a0,d1
  418.         move.l    #MODE_READWRITE,d2
  419.         lib    Dos,Open
  420.         move.l    d0,CaptureFile
  421.         beq    DoOpenCapture_ERR1
  422.  
  423. DoOpenCapture_OUT: bra    Menu
  424. DoOpenCapture_ERR1: lea.l    CaptureErrorText1,a0
  425.         bsr    Printer
  426.         bra    Menu
  427. DoOpenCapture_ERR2: lea.l    CaptureErrorText2,a0
  428.         bsr    Printer
  429.         bra    Menu
  430.  
  431. DoCloseCapture:    lea.l    CloseCaptureText1,a0
  432.         bsr    Printer
  433.  
  434.         move.l    CaptureFile,d1
  435.         beq    DoCloseCapture_OUT
  436.         lib    Dos,Close
  437.         clr.l    CaptureFile
  438. DoCloseCapture_OUT: bra    Menu
  439.  
  440. DoUpLoad:    lea.l    ULText2,a0
  441.         bsr    Printer
  442.         lea.l    ULProgram,a0
  443.         tst.b    (a0)
  444.         beq    DoUpLoad9
  445.  
  446.         lea.l    FileNameBuf2,a0
  447.         move.l    #128,d3
  448.         bsr    GetString
  449.  
  450.         bsr    MakeCmdString
  451.  
  452.         tst.b    ULDir
  453.         beq    DoUpLoad1
  454.         lea.l    ULDir,a0
  455.         move.l    a0,d1
  456.         move.l    #ACCESS_READ,d2
  457.         lib    Dos,Lock
  458.         move.l    d0,ULLock
  459.         bne    DoUpLoad2
  460.  
  461. DoUpLoad1:    lea.l    NoULDirText1,a0
  462.         bsr    Printer
  463.         bra    DoUpLoad5
  464.  
  465. DoUpLoad2:    move.l    ULLock,d1
  466.         lib    Dos,CurrentDir
  467.         move.l    d0,OldLock
  468.  
  469. DoUpLoad5:    lea.l    ULText3,a0
  470.         bsr    Printer
  471.  
  472.         lea.l    FileNameBuf3,a0
  473.         move.l    a0,d1
  474.         clr.l    d2
  475.         clr.l    d3
  476.         lib    Dos,Execute
  477.  
  478. ;change back to dir where we started from
  479.  
  480.         move.l    OldLock,d1
  481.         beq    DoUpLoad7
  482.         lib    Dos,CurrentDir
  483.         clr.l    OldLock
  484.  
  485. DoUpLoad7:    move.l    ULLock,d1
  486.         beq    DoUpLoad8
  487.         lib    Dos,UnLock
  488.         clr.l    ULLock
  489. DoUpLoad8:
  490.         bra    Exit
  491. DoUpLoad9:    lea.l    NoULDLProgText1,a0
  492.         bsr    Printer
  493.         bra    Exit
  494.  
  495. DoDownLoad:    lea.l    DLText2,a0
  496.         bsr    Printer
  497.         tst.b    DLProgram
  498.         beq    DoDownLoad9
  499.  
  500. ;change to the dl dir
  501.  
  502.         tst.b    DLDir
  503.         beq    DoDownLoad1
  504.         lea.l    DLDir,a0
  505.         move.l    a0,d1
  506.         move.l    #ACCESS_READ,d2
  507.         lib    Dos,Lock
  508.         move.l    d0,DLLock
  509.         bne    DoDownLoad2
  510.  
  511. DoDownLoad1:    lea.l    NoDLDirText1,a0
  512.         bsr    Printer
  513.         bra    DoDownLoad5
  514.  
  515. DoDownLoad2:    move.l    DLLock,d1
  516.         lib    Dos,CurrentDir
  517.         move.l    d0,OldLock
  518.  
  519. DoDownLoad5:    lea.l    DLProgram,a0
  520.         move.l    a0,d1
  521.         clr.l    d2
  522.         clr.l    d3
  523.         lib    Dos,Execute
  524.  
  525. ;change back to dir where we started from
  526.  
  527.         move.l    OldLock,d1
  528.         beq    DoDownLoad7
  529.         lib    Dos,CurrentDir
  530.         clr.l    OldLock
  531.  
  532. DoDownLoad7:    move.l    DLLock,d1
  533.         beq    DoDownLoad8
  534.         lib    Dos,UnLock
  535.         clr.l    DLLock
  536. DoDownLoad8:    bra    Exit
  537.  
  538. DoDownLoad9:    lea.l    NoULDLProgText1,a0
  539.         bsr    Printer
  540.         bra    Exit
  541.  
  542. DoExecute:    lea.l    ExecuteText1,a0
  543.         bsr    Printer
  544.  
  545.         lea.l    FileNameBuf2,a0
  546.         move.l    #128,d3
  547.         bsr    GetString
  548.  
  549.         lea.l    FileNameBuf2,a0
  550.         tst.b    (a0)
  551.         beq    DoExecute_OUT
  552.         move.l    a0,d1
  553.         clr.l    d2
  554.         clr.l    d3
  555.         lib    Dos,Execute
  556.  
  557.         bsr    GetAnyKey
  558.  
  559. DoExecute_OUT:    bra    Menu
  560.  
  561. DoInfo:        lea.l    InfoText1,a0
  562.         bsr    Printer
  563.         bsr    DoANSI
  564.         lea.l    AuthorText1,a0
  565.         bsr    Printer
  566.         bsr    GetAnyKey
  567.         bra    Menu
  568.  
  569. Quit:        lea.l    QuitText1,a0
  570.         bsr    Printer
  571.         lea.l    CRLFText1,a0
  572.         bsr    Printer
  573.         bsr    GiveStats
  574.         bra    ShutDown
  575.  
  576. ;If you add another way to get out of the dialer, please remember to clear
  577. ;the ModifyMode (just in case), so the user can't accidentally erase an
  578. ;entry!
  579.  
  580. Dialer:        lea.l    DialerText1,a0
  581.         bsr    Printer
  582. Dialer0.1:    bsr    DoANSI
  583.         lea.l    DialerText2,a0
  584.         bsr    Printer
  585. Dialer0.2:    bsr    PrintEntries
  586. Dialer0.3:    bsr    PrintSelect
  587. Dialer0.4:    lea.l    DialerText3,a0
  588.         bsr    Printer
  589. Dialer1:    move.l    _stdin,d1
  590.         lib    Dos,FGetC
  591.         cmp.l    #-1,d0
  592.         beq    Menu
  593.         cmp.l    #'a',d0
  594.         bcs    Dialer2
  595.         cmp.l    #'z',d0
  596.         bhi    Dialer
  597.         sub.l    #32,d0
  598. Dialer2:    cmp.l    #'0',d0
  599.         beq    DoEntry0
  600.         cmp.l    #'1',d0
  601.         beq    DoEntry1
  602.         cmp.l    #'2',d0
  603.         beq    DoEntry2
  604.         cmp.l    #'3',d0
  605.         beq    DoEntry3
  606.         cmp.l    #'4',d0
  607.         beq    DoEntry4
  608.         cmp.l    #'5',d0
  609.         beq    DoEntry5
  610.         cmp.l    #'6',d0
  611.         beq    DoEntry6
  612.         cmp.l    #'7',d0
  613.         beq    DoEntry7
  614.         cmp.l    #'8',d0
  615.         beq    DoEntry8
  616.         cmp.l    #'9',d0
  617.         beq    DoEntry9
  618.         cmp.l    #'D',d0
  619.         beq    DialList
  620.         cmp.l    #'E',d0
  621.         beq    Exit1
  622.         cmp.l    #'M',d0
  623.         beq    MainMenu
  624.         cmp.l    #'-',d0
  625.         beq    MainMenu
  626.         cmp.l    #'S',d0
  627.         beq    SingleDial
  628.         cmp.l    #'R',d0
  629.         beq    Relist
  630.         cmp.l    #'C',d0
  631.         beq    ClearList
  632.         cmp.l    #'A',d0
  633.         beq    SelectAll
  634.         cmp.l    #'I',d0
  635.         beq    SetModifyMode
  636.         cmp.l    #'P',d0
  637.         beq    EditPrefix
  638.         cmp.l    #'H',d0
  639.         beq    DialerHelp
  640.         cmp.l    #'?',d0
  641.         beq    DialerHelp
  642.         bra    Dialer1
  643.  
  644. SetModifyMode:    bchg.b    #0,ModifyMode
  645.         beq    SetModifyMode1
  646.         lea.l    ModifyText2,a0
  647.         bsr    Printer
  648.         bra    Dialer0.4
  649. SetModifyMode1:    lea.l    ModifyText1,a0
  650.         bsr    Printer
  651.         bra    Dialer0.4
  652.  
  653. DialerHelp:    lea.l    HelpText1,a0
  654.         bsr    Printer
  655.         bsr    DoANSI
  656.         bra    Dialer0.4
  657.  
  658. ClearList:    lea.l    ClearText2,a0
  659.         bsr    Printer
  660.         bsr    DoANSI
  661.         clr.l    EntrySelected1
  662.         clr.l    EntrySelected5
  663.         clr.w    EntrySelected9
  664.         bra    DoEntry_OUT1
  665.  
  666. SelectAll:    lea.l    AllText1,a0
  667.         bsr    Printer
  668.         bsr    DoANSI
  669.         move.l    #$01010101,EntrySelected1
  670.         move.l    #$01010101,EntrySelected5
  671.         move.w    #$0101,EntrySelected9
  672.         bra    DoEntry_OUT1
  673.  
  674. DoEntry1:    lea.l    Entry1,a0
  675.         tst.w    ModifyMode
  676.         bne    EditEntry
  677.         bchg.b    #0,EntrySelected1
  678.         bra    DoEntry_OUT
  679. DoEntry2:    lea.l    Entry2,a0
  680.         tst.w    ModifyMode
  681.         bne    EditEntry
  682.         bchg.b    #0,EntrySelected2
  683.         bra    DoEntry_OUT
  684. DoEntry3:    lea.l    Entry3,a0
  685.         tst.w    ModifyMode
  686.         bne    EditEntry
  687.         bchg.b    #0,EntrySelected3
  688.         bra    DoEntry_OUT
  689. DoEntry4:    lea.l    Entry4,a0
  690.         tst.w    ModifyMode
  691.         bne    EditEntry
  692.         bchg.b    #0,EntrySelected4
  693.         bra    DoEntry_OUT
  694. DoEntry5:    lea.l    Entry5,a0
  695.         tst.w    ModifyMode
  696.         bne    EditEntry
  697.         bchg.b    #0,EntrySelected5
  698.         bra    DoEntry_OUT
  699. DoEntry6:    lea.l    Entry6,a0
  700.         tst.w    ModifyMode
  701.         bne    EditEntry
  702.         bchg.b    #0,EntrySelected6
  703.         bra    DoEntry_OUT
  704. DoEntry7:    lea.l    Entry7,a0
  705.         tst.w    ModifyMode
  706.         bne    EditEntry
  707.         bchg.b    #0,EntrySelected7
  708.         bra    DoEntry_OUT
  709. DoEntry8:    lea.l    Entry8,a0
  710.         tst.w    ModifyMode
  711.         bne    EditEntry
  712.         bchg.b    #0,EntrySelected8
  713.         bra    DoEntry_OUT
  714. DoEntry9:    lea.l    Entry9,a0
  715.         tst.w    ModifyMode
  716.         bne    EditEntry
  717.         bchg.b    #0,EntrySelected9
  718.         bra    DoEntry_OUT
  719. DoEntry0:    lea.l    Entry10,a0
  720.         tst.w    ModifyMode
  721.         bne    EditEntry
  722.         bchg.b    #0,EntrySelected0
  723. DoEntry_OUT:    lea.l    EntryTextXIV,a0
  724.         bsr    Printer
  725.         bsr    DoANSI
  726. DoEntry_OUT1:    bsr    PrintSelect
  727.         lea.l    SelectionText1,a0
  728.         bsr    Printer
  729.         bra    Dialer1
  730.  
  731. EditEntry:    push    a0
  732.         lea.l    EditEntryText1,a0
  733.         bsr    Printer
  734.         lea.l    EditEntryText2,a0
  735.         bsr    Printer
  736.         pull    a0
  737.         move.l    #ENTRYLENGTH,d3
  738.         bsr    GetString
  739.         bsr    PrintEntries
  740.         bra    DoEntry_OUT1
  741.  
  742. EditPrefix:    lea.l    EditEntryText3,a0
  743.         bsr    Printer
  744.         lea.l    EditEntryText4,a0
  745.         bsr    Printer
  746.         lea.l    DialPrefix,a0
  747.         move.l    #16,d3
  748.         bsr    GetString
  749.         bra    Dialer0.1
  750.  
  751. MainMenu:    bclr.b    #0,ModifyMode            ;Clear modify bit
  752.         lea.l    MainMenuText1,a0
  753.         bsr    Printer
  754.         bra    Menu
  755.  
  756. DialList:    lea.l    DialText1,a0
  757.         bsr    Printer
  758.         bsr    DoANSI
  759.         lea.l    DialText2,a0
  760.         bsr    Printer
  761.  
  762. DialList1:    lea.l    EntrySelected1,a2
  763.         tst.b    (a2)
  764.         beq    DialList2
  765.         lea.l    Entry1,a0
  766.         tst.b    (a0)
  767.         beq    DialList1.1
  768.         bsr    DialEntry
  769.         tst.l    d0        ;connect
  770.         bne    DialList1.01
  771. DialLCONNECT:    clr.b    (a2)
  772.         beq    Exit
  773. DialList1.01:    cmp.l    #2,d0        ;cancel
  774.         beq    Dialer0.1
  775.         cmp.l    #3,d0        ;remove
  776.         bne    DialList2
  777. DialList1.1:    clr.b    (a2)
  778. DialList2:    lea.l    EntrySelected2,a2
  779.         tst.b    (a2)
  780.         beq    DialList3
  781.         lea.l    Entry2,a0
  782.         tst.b    (a0)
  783.         beq    DialList2.1
  784.         bsr    DialEntry
  785.         tst.l    d0
  786.         beq    DialLCONNECT    ;Connect
  787.         cmp.l    #2,d0        ;cancel
  788.         beq    Dialer0.1
  789.         cmp.l    #3,d0        ;remove
  790.         bne    DialList3
  791. DialList2.1:    clr.b    (a2)
  792. DialList3:    lea.l    EntrySelected3,a2
  793.         tst.b    (a2)
  794.         beq    DialList4
  795.         lea.l    Entry3,a0
  796.         tst.b    (a0)
  797.         beq    DialList3.1
  798.         bsr    DialEntry
  799.         tst.l    d0
  800.         beq    DialLCONNECT    ;Connect
  801.         cmp.l    #2,d0        ;cancel
  802.         beq    Dialer0.1
  803.         cmp.l    #3,d0        ;remove
  804.         bne    DialList4
  805. DialList3.1:    clr.b    (a2)
  806. DialList4:    lea.l    EntrySelected4,a2
  807.         tst.b    (a2)
  808.         beq    DialList5
  809.         lea.l    Entry4,a0
  810.         tst.b    (a0)
  811.         beq    DialList4.1
  812.         bsr    DialEntry
  813.         tst.l    d0
  814.         beq    DialLCONNECT    ;Connect
  815.         cmp.l    #2,d0        ;cancel
  816.         beq    Dialer0.1
  817.         cmp.l    #3,d0        ;remove
  818.         bne    DialList5
  819. DialList4.1:    clr.b    (a2)
  820. DialList5:    lea.l    EntrySelected5,a2
  821.         tst.b    (a2)
  822.         beq    DialList6
  823.         lea.l    Entry5,a0
  824.         tst.b    (a0)
  825.         beq    DialList5.1
  826.         bsr    DialEntry
  827.         tst.l    d0
  828.         beq    DialLCONNECT    ;Connect
  829.         cmp.l    #2,d0        ;cancel
  830.         beq    Dialer0.1
  831.         cmp.l    #3,d0        ;remove
  832.         bne    DialList6
  833. DialList5.1:    clr.b    (a2)
  834. DialList6:    lea.l    EntrySelected6,a2
  835.         tst.b    (a2)
  836.         beq    DialList7
  837.         lea.l    Entry6,a0
  838.         tst.b    (a0)
  839.         beq    DialList6.1
  840.         bsr    DialEntry
  841.         tst.l    d0
  842.         beq    DialLCONNECT    ;Connect
  843.         cmp.l    #2,d0        ;cancel
  844.         beq    Dialer0.1
  845.         cmp.l    #3,d0        ;remove
  846.         bne    DialList7
  847. DialList6.1:    clr.b    (a2)
  848. DialList7:    lea.l    EntrySelected7,a2
  849.         tst.b    (a2)
  850.         beq    DialList8
  851.         lea.l    Entry7,a0
  852.         tst.b    (a0)
  853.         beq    DialList7.1
  854.         bsr    DialEntry
  855.         tst.l    d0
  856.         beq    DialLCONNECT    ;Connect
  857.         cmp.l    #2,d0        ;cancel
  858.         beq    Dialer0.1
  859.         cmp.l    #3,d0        ;remove
  860.         bne    DialList8
  861. DialList7.1:    clr.b    (a2)
  862. DialList8:    lea.l    EntrySelected8,a2
  863.         tst.b    (a2)
  864.         beq    DialList9
  865.         lea.l    Entry8,a0
  866.         tst.b    (a0)
  867.         beq    DialList8.1
  868.         bsr    DialEntry
  869.         tst.l    d0
  870.         beq    DialLCONNECT    ;Connect
  871.         cmp.l    #2,d0        ;cancel
  872.         beq    Dialer0.1
  873.         cmp.l    #3,d0        ;remove
  874.         bne    DialList9
  875. DialList8.1:    clr.b    (a2)
  876. DialList9:    lea.l    EntrySelected9,a2
  877.         tst.b    (a2)
  878.         beq    DialList10
  879.         lea.l    Entry9,a0
  880.         tst.b    (a0)
  881.         beq    DialList9.1
  882.         bsr    DialEntry
  883.         tst.l    d0
  884.         beq    DialLCONNECT    ;Connect
  885.         cmp.l    #2,d0        ;cancel
  886.         beq    Dialer0.1
  887.         cmp.l    #3,d0        ;remove
  888.         bne    DialList10
  889. DialList9.1:    clr.b    (a2)
  890. DialList10:    lea.l    EntrySelected0,a2
  891.         tst.b    (a2)
  892.         beq    DialList11
  893.         lea.l    Entry10,a0
  894.         tst.b    (a0)
  895.         beq    DialList10.1
  896.         bsr    DialEntry
  897.         tst.l    d0
  898.         beq    DialLCONNECT    ;Connect
  899.         cmp.l    #2,d0        ;cancel
  900.         beq    Dialer0.1
  901.         cmp.l    #3,d0        ;remove
  902.         bne    DialList11
  903. DialList10.1:    clr.b    (a2)
  904. DialList11:    tst.l    EntrySelected1
  905.         bne    DialList1
  906.         tst.l    EntrySelected5
  907.         bne    DialList1
  908.         tst.w    EntrySelected9
  909.         bne    DialList1
  910.         lea.l    EmptyText1,a0
  911.         bsr    Printer
  912.         bra    Dialer0.1
  913.  
  914. Relist:        lea.l    RelistText1,a0
  915.         bsr    Printer
  916.         bsr    DoANSI
  917.         bra    Dialer0.2
  918.  
  919. SingleDial:    lea.l    SingleText1,a0
  920.         bsr    Printer
  921.  
  922.         bsr    DoANSI
  923.  
  924.         lea.l    SingleText2,a0
  925.         bsr    Printer
  926.  
  927.         lea.l    DialBuffer1,a0
  928.         move.l    #ENTRYLENGTH,d3
  929.         bsr    GetString
  930.         tst.l    d0
  931.         bne    Dialer0.1
  932.  
  933.         lea.l    DialBuffer1,a1
  934.         bsr    GetLength
  935.         tst.l    d0
  936.         beq    Dialer0.1
  937.  
  938.         lea.l    DialText2,a0
  939.         bsr    Printer
  940.  
  941. SingleDial1:    lea.l    DialBuffer1,a0
  942.         bsr    DialEntry
  943.         tst.l    d0
  944.         beq    Exit
  945.         cmp.l    #1,d0
  946.         beq    SingleDial1
  947.         cmp.l    #2,d0
  948.         beq    Dialer0.1
  949.         cmp.l    #3,d0
  950.         beq    Dialer0.1
  951.         bra    Dialer0.1
  952.  
  953. Prefs:        lea.l    PrefsText1,a0
  954.         bsr    Printer
  955. Prefs1:        bsr    DoANSI
  956.         lea.l    PrefsText2,a0
  957.         bsr    Printer
  958. Prefs2:        move.l    _stdin,d1
  959.         lib    Dos,FGetC
  960.         cmp.l    #-1,d0
  961.         beq    Menu
  962.         cmp.l    #'a',d0
  963.         bcs    Prefs3
  964.         cmp.l    #'z',d0
  965.         bhi    Prefs3
  966.         sub.l    #32,d0
  967. Prefs3:        cmp.l    #'S',d0
  968.         beq    SetSpeed
  969.         cmp.l    #'T',d0
  970.         beq    Terminal
  971.         cmp.l    #'R',d0
  972.         beq    ClearSettings
  973.         cmp.l    #'L',d0
  974.         beq    DoLoad
  975.         cmp.l    #'W',d0
  976.         beq    DoSave
  977.         cmp.l    #'N',d0
  978.         beq    NameFile
  979.         cmp.l    #'E',d0
  980.         beq    Exit1
  981.         cmp.l    #'V',d0
  982.         beq    DoView
  983.         cmp.l    #'U',d0
  984.         beq    SetULDir
  985.         cmp.l    #'D',d0
  986.         beq    SetDLDir
  987.         cmp.l    #'+',d0
  988.         beq    SetULProg
  989.         cmp.l    #'-',d0
  990.         beq    SetDLProg
  991.         cmp.l    #'A',d0
  992.         beq    AssignCTRL_P
  993.         cmp.l    #'M',d0
  994.         beq    MainMenu
  995.         bra    Prefs2
  996.  
  997. SetULDir:    lea.l    ULText5,a0
  998.         bsr    Printer
  999.         lea.l    ULDir,a0
  1000.         move.l    #128,d3
  1001.         bsr    GetString
  1002.         bra    Prefs1
  1003.  
  1004. SetDLDir:    lea.l    DLText5,a0
  1005.         bsr    Printer
  1006.         lea.l    DLDir,a0
  1007.         move.l    #128,d3
  1008.         bsr    GetString
  1009.         bra    Prefs1
  1010.  
  1011. SetULProg:    lea.l    ULText1,a0
  1012.         bsr    Printer
  1013.         lea.l    ULProgram,a0
  1014.         move.l    #128,d3
  1015.         bsr    GetString
  1016.         bra    Prefs1
  1017.  
  1018. SetDLProg:    lea.l    DLText1,a0
  1019.         bsr    Printer
  1020.         lea.l    DLProgram,a0
  1021.         move.l    #128,d3
  1022.         bsr    GetString
  1023.         bra    Prefs1
  1024.  
  1025. AssignCTRL_P:    lea.l    AssignText1,a0
  1026.         bsr    Printer
  1027.  
  1028.         move.l    _stdin,d1
  1029.         lib    Dos,Flush
  1030.  
  1031.         lea.l    AssignText2,a0
  1032.         bsr    Printer
  1033.  
  1034.         move.l    _stdin,d1
  1035.         lib    Dos,FGetC
  1036.         cmp.l    #-1,d0
  1037.         beq    Prefs1
  1038.         move.b    d0,CPAssign
  1039.  
  1040.         lea.l    CRLFText1,a0
  1041.         bsr    Printer
  1042.         bra    Prefs1
  1043.  
  1044. NameFile:    lea.l    EnterNText1,a0
  1045.         bsr    Printer
  1046.  
  1047.         lea.l    EnterNText2,a0
  1048.         bsr    Printer
  1049.  
  1050.         lea.l    FileNameBuf1,a0
  1051.         move.l    #128,d3
  1052.         bsr    GetString
  1053.         tst.l    d0
  1054.         bne    Prefs1
  1055.  
  1056.         bra    Prefs1
  1057.  
  1058. DoLoad:        lea.l    LoadText1,a0
  1059.         bsr    Printer
  1060.         bsr    CloseSerial
  1061.         bsr    LoadPrefsFile
  1062.         bsr    OpenSerial
  1063.  
  1064.         bsr    SetSerParams
  1065.         tst.l    d0
  1066.         beq    DoLoad1
  1067.         bsr    ParamsNotSet
  1068. DoLoad1:    bra    Prefs1
  1069. DoSave:        lea.l    SaveText1,a0
  1070.         bsr    Printer
  1071.         bsr    SavePrefsFile
  1072.         bra    Prefs1
  1073.  
  1074. DoView:        lea.l    ViewText1,a0
  1075.         bsr    Printer
  1076.         bsr    DoANSI
  1077.         bsr    GiveSettings
  1078.         bsr    GetAnyKey
  1079.         bra    Prefs1
  1080.  
  1081. ClearSettings:    lea.l    ClearText3,a0
  1082.         bsr    Printer
  1083.         move.l    #9600,Speed
  1084.         move.b    #8,DataBits
  1085.         move.b    #1,StopBits
  1086.         clr.l    CRTranslate    ;All translating (long)
  1087.         clr.l    SwapBSDEL    ;SwapBSDEL+UseANSI+CPAssign+CursorRemap
  1088.         bsr    SetSerParams
  1089.         tst.l    d0
  1090.         beq    ClearSettings1
  1091.         bsr    ParamsNotSet
  1092. ClearSettings1:    bra    Prefs1
  1093.  
  1094. Terminal:    lea.l    STerminalText1,a0
  1095.         bsr    Printer
  1096. Terminal1:    bsr    DoANSI
  1097.         lea.l    STerminalText2,a0
  1098.         bsr    Printer
  1099. Terminal2:    move.l    _stdin,d1
  1100.         lib    Dos,FGetC
  1101.         cmp.l    #-1,d0
  1102.         beq    Prefs1
  1103.         cmp.l    #'a',d0
  1104.         bcs    Terminal3
  1105.         cmp.l    #'z',d0
  1106.         bhi    Terminal3
  1107.         sub.l    #32,d0
  1108. Terminal3:    cmp.l    #'L',d0
  1109.         beq    SetLocalEcho
  1110.         cmp.l    #'S',d0
  1111.         beq    SetSwapBSDEL
  1112.         cmp.l    #'1',d0
  1113.         beq    SetCRTrans
  1114.         cmp.l    #'2',d0
  1115.         beq    SetLFTrans
  1116.         cmp.l    #'3',d0
  1117.         beq    SetCRTransIn
  1118.         cmp.l    #'4',d0
  1119.         beq    SetLFTransIn
  1120.         cmp.l    #'A',d0
  1121.         beq    SetANSIMode
  1122.         cmp.l    #'C',d0
  1123.         beq    SetCRemapMode
  1124.         cmp.l    #'E',d0
  1125.         beq    Exit1
  1126.         cmp.l    #'M',d0
  1127.         beq    MainMenu
  1128.         cmp.l    #'-',d0
  1129.         beq    Prefs
  1130.         bra    Terminal2
  1131.  
  1132. SetCRemapMode:    bchg.b    #0,CursorRemap
  1133.         beq    SetCRemapMode1
  1134.         lea.l    CRemapText2,a0
  1135.         bsr    Printer
  1136.         bra    Terminal1
  1137. SetCRemapMode1:    lea.l    CRemapText1,a0
  1138.         bsr    Printer
  1139.         bra    Terminal1
  1140.  
  1141. SetANSIMode:    bchg.b    #0,UseANSI
  1142.         beq    SetANSIMode1
  1143.         lea.l    ANSIText2,a0
  1144.         bsr    Printer
  1145.         bra    Terminal1
  1146. SetANSIMode1:    lea.l    ANSIText1,a0
  1147.         bsr    Printer
  1148.         bra    Terminal1
  1149.  
  1150. SetSwapBSDEL:    bchg.b    #0,SwapBSDEL
  1151.         beq    SetSwapBSDEL1
  1152.         lea.l    SwapText2,a0
  1153.         bsr    Printer
  1154.         bra    Terminal1
  1155. SetSwapBSDEL1:    lea.l    SwapText1,a0
  1156.         bsr    Printer
  1157.         bra    Terminal1
  1158.  
  1159. SetCRTrans:    lea.l    CRTransText1,a0
  1160.         bsr    Printer
  1161.         lea.l    CRTransText2,a0
  1162.         bsr    Printer
  1163.         bsr    GetNSA
  1164.         cmp.l    #-1,d0
  1165.         beq    Terminal1
  1166.         move.b    d0,CRTranslate
  1167.         bra    Terminal1
  1168.  
  1169. SetLFTrans:    lea.l    LFTransText1,a0
  1170.         bsr    Printer
  1171.         lea.l    LFTransText2,a0
  1172.         bsr    Printer
  1173.         bsr    GetNSA
  1174.         cmp.l    #-1,d0
  1175.         beq    Terminal1
  1176.         move.b    d0,LFTranslate
  1177.         bra    Terminal1
  1178.  
  1179. SetCRTransIn:    lea.l    CRTransText3,a0
  1180.         bsr    Printer
  1181.         lea.l    CRTransText2,a0
  1182.         bsr    Printer
  1183.         bsr    GetNSA
  1184.         cmp.l    #-1,d0
  1185.         beq    Terminal1
  1186.         move.b    d0,CRTranslateIn
  1187.         bra    Terminal1
  1188.  
  1189. SetLFTransIn:    lea.l    LFTransText3,a0
  1190.         bsr    Printer
  1191.         lea.l    LFTransText2,a0
  1192.         bsr    Printer
  1193.         bsr    GetNSA
  1194.         cmp.l    #-1,d0
  1195.         beq    Terminal1
  1196.         move.b    d0,LFTranslateIn
  1197.         bra    Terminal1
  1198.  
  1199. SetLocalEcho:    bchg.b    #0,LocalEcho
  1200.         beq    SetLocalEcho1
  1201.         lea.l    EchoText2,a0
  1202.         bsr    Printer
  1203.         bra    Terminal1
  1204. SetLocalEcho1:    lea.l    EchoText1,a0
  1205.         bsr    Printer
  1206.         bra    Terminal1
  1207.  
  1208. SetSpeed:    lea.l    SpeedText11,a0
  1209.         bsr    Printer
  1210. SetSpeed1:    bsr    DoANSI
  1211.         lea.l    SpeedText1,a0
  1212.         bsr    Printer
  1213. SetSpeed2:    move.l    _stdin,d1
  1214.         lib    Dos,FGetC
  1215.         cmp.l    #-1,d0
  1216.         beq    Prefs1
  1217.         cmp.l    #'a',d0
  1218.         bcs    SetSpeed3
  1219.         cmp.l    #'z',d0
  1220.         bhi    SetSpeed3
  1221.         sub.l    #32,d0
  1222. SetSpeed3:    move.l    Speed,d7    ;get real speed if fail later
  1223.         cmp.l    #'0',d0
  1224.         beq    DoSpeed0
  1225.         cmp.l    #'1',d0
  1226.         beq    DoSpeed1
  1227.         cmp.l    #'2',d0
  1228.         beq    DoSpeed2
  1229.         cmp.l    #'3',d0
  1230.         beq    DoSpeed3
  1231.         cmp.l    #'4',d0
  1232.         beq    DoSpeed4
  1233.         cmp.l    #'5',d0
  1234.         beq    DoSpeed5
  1235.         cmp.l    #'6',d0
  1236.         beq    DoSpeed6
  1237.         cmp.l    #'7',d0
  1238.         beq    DoSpeed7
  1239.         cmp.l    #'8',d0
  1240.         beq    DoSpeed8
  1241.         cmp.l    #'9',d0
  1242.         beq    DoSpeed9
  1243.         cmp.l    #'D',d0
  1244.         beq    SetDataBits
  1245.         cmp.l    #'S',d0
  1246.         beq    SetStopBits
  1247.         cmp.l    #'N',d0
  1248.         beq    SetDevice
  1249.         cmp.l    #'R',d0
  1250.         beq    ReOpenDevice
  1251.         cmp.l    #'X',d0
  1252.         beq    SetXONXOFF
  1253.         cmp.l    #'E',d0
  1254.         beq    Exit1
  1255.         cmp.l    #'M',d0
  1256.         beq    MainMenu
  1257.         cmp.l    #'-',d0
  1258.         beq    Prefs
  1259.         bra    SetSpeed2
  1260.  
  1261. DoSpeed1:    move.l    #110,Speed
  1262.         bra    DoSpeed_OUT
  1263. DoSpeed2:    move.l    #300,Speed
  1264.         bra    DoSpeed_OUT
  1265. DoSpeed3:    move.l    #1200,Speed
  1266.         bra    DoSpeed_OUT
  1267. DoSpeed4:    move.l    #2400,Speed
  1268.         bra    DoSpeed_OUT
  1269. DoSpeed5:    move.l    #4800,Speed
  1270.         bra    DoSpeed_OUT
  1271. DoSpeed6:    move.l    #9600,Speed
  1272.         bra    DoSpeed_OUT
  1273. DoSpeed7:    move.l    #19200,Speed
  1274.         bra    DoSpeed_OUT
  1275. DoSpeed8:    move.l    #38400,Speed
  1276.         bra    DoSpeed_OUT
  1277. DoSpeed9:    move.l    #57600,Speed
  1278.         bra    DoSpeed_OUT
  1279. DoSpeed0:    move.l    #115200,Speed
  1280. DoSpeed_OUT:    lea.l    SpeedText13,a0
  1281.         bsr    Printer
  1282.  
  1283.         bsr    SetSerParams
  1284.         tst.l    d0
  1285.         beq    DoSpeed_OUT1
  1286.  
  1287.         lea.l    SpeedText12,a0
  1288.         bsr    Printer
  1289.         move.l    d7,Speed
  1290. DoSpeed_OUT1:    bra    SetSpeed1        ;OPTI
  1291.  
  1292. SetDevice:    lea.l    NameText1,a0
  1293.         bsr    Printer
  1294.  
  1295.         lea.l    NameText2,a0
  1296.         bsr    Printer
  1297.  
  1298.         lea.l    SerDevNBuffer1,a0
  1299.         move.l    #32,d3
  1300.         bsr    GetString
  1301.         tst.l    d0
  1302.         bne    SetSpeed1
  1303.  
  1304.         lea.l    NameText3,a0
  1305.         bsr    Printer
  1306.  
  1307.         lea.l    DialBuffer1,a0
  1308.         move.l    #12,d3
  1309.         bsr    GetString
  1310.         tst.l    d0
  1311.         bne    SetSpeed1
  1312.  
  1313.         lea.l    DialBuffer1,a0
  1314.         bsr    ConvASCII
  1315.         move.l    d0,SerUnit
  1316.  
  1317.         lea.l    CRLFText1,a0
  1318.         bsr    Printer
  1319.  
  1320.         bsr    CloseSerial
  1321.         bsr    OpenSerial
  1322.  
  1323.         bsr    SetSerParams
  1324.         tst.l    d0
  1325.         beq    SetDevice1
  1326.         bsr    ParamsNotSet
  1327.  
  1328. SetDevice1:    bra    SetSpeed1
  1329.  
  1330. ReOpenDevice:    lea.l    ReOpenText1,a0
  1331.         bsr    Printer
  1332.         bsr    CloseSerial
  1333.         bsr    OpenSerial
  1334.         bsr    SetSerParams
  1335.         tst.l    d0
  1336.         beq    ReOpenDevice1
  1337.         bsr    ParamsNotSet
  1338. ReOpenDevice1:    bra    SetSpeed1
  1339.  
  1340. SetDataBits:    move.b    DataBits,d7
  1341. SetDataBits0.1:    cmp.b    #7,DataBits
  1342.         beq    SetDataBits1
  1343.         move.b    #7,DataBits
  1344.         lea.l    DBitsText1,a0
  1345.         bsr    Printer
  1346.         bra    SetDataBits2
  1347. SetDataBits1:    move.b    #8,DataBits
  1348.         lea.l    DBitsText2,a0
  1349.         bsr    Printer
  1350.         bra    SetSpeed1
  1351. SetDataBits2:    bsr    SetSerParams
  1352.         tst.l    d0
  1353.         beq    SetSpeed1
  1354.         move.b    d7,DataBits
  1355.         lea.l    DBitsText3,a0
  1356.         bsr    Printer
  1357.         bra    SetSpeed1
  1358.  
  1359. SetStopBits:    move.b    StopBits,d7
  1360. SetStopBits0.1:    cmp.b    #1,StopBits
  1361.         beq    SetStopBits1
  1362.         move.b    #1,StopBits
  1363.         lea.l    SBitsText1,a0
  1364.         bsr    Printer
  1365.         bra    SetStopBits2
  1366. SetStopBits1:    move.b    #2,StopBits
  1367.         lea.l    SBitsText2,a0
  1368.         bsr    Printer
  1369.         bra    SetSpeed1
  1370. SetStopBits2:    bsr    SetSerParams
  1371.         tst.l    d0
  1372.         beq    SetSpeed1
  1373.         move.b    d7,StopBits
  1374.         lea.l    SBitsText3,a0
  1375.         bsr    Printer
  1376.         bra    SetSpeed1
  1377.  
  1378. SetXONXOFF:    bchg.b    #0,XONXOFF
  1379.         beq    SetXONXOFF1
  1380.         lea.l    XXText2,a0
  1381.         bsr    Printer
  1382.         bsr    SetSerParams
  1383.         tst.l    d0
  1384.         beq    SetSpeed1
  1385.         bsr    ParamsNotSet
  1386.         bra    SetSpeed1
  1387. SetXONXOFF1:    lea.l    XXText1,a0
  1388.         bsr    Printer
  1389.         bsr    SetSerParams
  1390.         tst.l    d0
  1391.         beq    SetSpeed1
  1392.         bsr    ParamsNotSet
  1393.         bra    SetSpeed1
  1394.  
  1395. ;Dials one number. Fails for three reasons, because the user decided
  1396. ;to skip this entry, to cancel dialing or to remove this entry.
  1397. ;If a busy is found, a value of 1 will be returned.
  1398. ;
  1399. ;Inputs a0 = pointer to phonenumber (ASCII text)
  1400. ;
  1401. ;Result d0 = Success (0=Connect, 1=Skipped, 2=Cancelled, 3=Remove this entry)
  1402. ;
  1403.  
  1404. DialEntry:    push    d2-d7/a2-a6
  1405.         move.l    a0,a4
  1406.  
  1407. DialEntry1:    lea.l    DialPrefix,a1
  1408.         bsr    GetLength
  1409.         lea.l    DialPrefix,a0
  1410.         bsr    Writer2
  1411.         move.l    a4,a1
  1412.         bsr    GetLength
  1413.         move.l    a4,a0
  1414.         bsr    Writer2
  1415.         lea.l    CRLFText1,a1
  1416.         bsr    GetLength
  1417.         lea.l    CRLFText1,a0
  1418.         bsr    Writer2
  1419.         lea.l    DialingText1,a0
  1420.         bsr    Printer
  1421.         move.l    a4,a0
  1422.         bsr    Printer
  1423.         lea.l    CRLFText1,a0
  1424.         bsr    Printer
  1425.         move.l    #BUFLEN,d0        ;try to read ATDT etc.
  1426.         move.l    #1,d1
  1427.         bsr    Read
  1428.  
  1429. DialEntry2:    move.l    #10,d1
  1430.         lib    Dos,Delay
  1431.         move.l    #BUFLEN,d0
  1432.         move.l    #4,d1
  1433.         bsr    Read
  1434.         tst.l    d0
  1435.         beq    DialEntry3
  1436.         lea.l    Buffer3,a0
  1437.         clr.b    0(a0,d0.l)    ;null terminated, please!
  1438.         move.b    #'C',d0
  1439.         move.b    #'O',d1
  1440.         lea.l    Buffer3,a0
  1441.         bsr    FindWord
  1442.         bne    DialEntry_OUT1
  1443.         move.b    #'B',d0
  1444.         move.b    #'U',d1
  1445.         lea.l    Buffer3,a0
  1446.         bsr    FindWord
  1447.         bne    DialEntry4
  1448.         move.b    #'N',d1
  1449.         move.b    #'O',d1
  1450.         lea.l    Buffer3,a0
  1451.         bsr    FindWord
  1452.         bne    DialEntry_OUT2
  1453. DialEntry3:    move.l    _stdin,d1
  1454.         move.l    #10000,d2
  1455.         lib    Dos,WaitForChar
  1456.         tst.l    d0
  1457.         beq    DialEntry2
  1458.         move.l    _stdin,d1
  1459.         lea.l    Buffer2,a0
  1460.         move.l    a0,d2
  1461.         move.l    #1,d3
  1462.         lib    Dos,Read
  1463.         cmp.l    #1,d0
  1464.         bne    DialEntry2
  1465.         cmp.b    #' ',Buffer2    ;Space
  1466.         beq    DialEntry_OUT2
  1467.         cmp.b    #27,Buffer2    ;ESC
  1468.         beq    DialEntry_OUT3
  1469.         cmp.b    #8,Buffer2    ;BS
  1470.         beq    DialEntry_OUT4
  1471.         bra    DialEntry2
  1472. DialEntry4:    lea.l    BusyText1,a0
  1473.         bsr    Printer
  1474.         move.l    #50+25,d1
  1475.         lib    Dos,Delay
  1476.         pull    d2-d7/a2-a6
  1477.         move.l    #1,d0
  1478.         rts
  1479. DialEntry_OUT1:    move.l    #BUFLEN,d0        ;try to read extra stuff
  1480.         move.l    #1,d1
  1481.         bsr    Read
  1482. ;        lea.l    ConnectText1,a0
  1483. ;        bsr    Printer
  1484.         pull    d2-d7/a2-a6
  1485.         clr.l    d0
  1486.         rts
  1487. DialEntry_OUT2:    lea.l    CRLFText1,a1
  1488.         bsr    GetLength
  1489.         lea.l    CRLFText1,a0
  1490.         bsr    Writer2
  1491.         lea.l    SkippedText1,a0
  1492.         bsr    Printer
  1493.         move.l    #50+25,d1
  1494.         lib    Dos,Delay
  1495.         pull    d2-d7/a2-a6
  1496.         move.l    #1,d0
  1497.         rts
  1498. DialEntry_OUT3:    lea.l    CancelledText1,a0
  1499.         bsr    Printer
  1500.         lea.l    CRLFText1,a1
  1501.         bsr    GetLength
  1502.         lea.l    CRLFText1,a0
  1503.         bsr    Writer2
  1504.         move.l    #50+25,d1
  1505.         lib    Dos,Delay
  1506.         pull    d2-d7/a2-a6
  1507.         move.l    #2,d0
  1508.         rts
  1509. DialEntry_OUT4:    lea.l    CRLFText1,a1
  1510.         bsr    GetLength
  1511.         lea.l    CRLFText1,a0
  1512.         bsr    Writer2
  1513.         move.l    #55,d1
  1514.         lib    Dos,Delay
  1515.         lea.l    RemoveText1,a0
  1516.         bsr    Printer
  1517.         pull    d2-d7/a2-a6
  1518.         move.l    #3,d0
  1519.         rts
  1520.  
  1521. Break:        lea.l    BreakText1,a0
  1522.         bsr    Printer
  1523.         clr.l    d0
  1524.         rts
  1525.  
  1526. ClearSer:    tst.w    SerOpen
  1527.         beq    ClearSer_OUT
  1528.         move.l    IORRequest,a1
  1529.         ABORTIO
  1530.         move.l    IORRequest,a1
  1531.         lib    Exec,WaitIO
  1532. ClearSer_OUT:    rts
  1533.  
  1534. ;Buffered read from a device
  1535. ;
  1536. ;Inputs d0 = Buffer length (maximum amount to read)
  1537. ;    d1 = Minimum amout to read
  1538. ;
  1539. ;Result d0 = Amount actually read
  1540. ;
  1541.  
  1542. Read:        push    d2-d7/a2-a6
  1543.  
  1544.         tst.w    SerOpen
  1545.         beq    Read_OUT1
  1546.  
  1547.         move.l    d0,d4
  1548.         move.l    d1,d5
  1549.  
  1550.         move.l    IOWRequest,a1            ;get amount of bytes
  1551.         move.w    #SDCMD_QUERY,IO_COMMAND(a1)    ;in buffer
  1552.         or.b    #IOF_QUICK,IO_FLAGS(a1)
  1553.         lib    Exec,DoIO
  1554.  
  1555.         move.l    IOWRequest,a1
  1556.         move.l    IO_ACTUAL(a1),d0
  1557.         beq    Read_OUT1
  1558.         cmp.l    d5,d0
  1559.         bmi    Read_OUT1
  1560.         cmp.l    d4,d0
  1561.         bls    Read1
  1562.         move.l    d4,d0            ;available > buffer size
  1563. Read1:        move.l    IORRequest,a1
  1564.         move.l    d0,IO_LENGTH(a1)
  1565.         BEGINIO
  1566.  
  1567.         move.l    IORRequest,a1
  1568.         move.l    IO_ACTUAL(a1),d0    ;even on an error we return
  1569.         add.l    d0,Received        ;correct amount in buffer
  1570.         pull    d2-d7/a2-a6
  1571.         rts
  1572.  
  1573. Read_OUT1:    clr.l    d0
  1574.         pull    d2-d7/a2-a6
  1575.         rts
  1576.  
  1577. Writer:        tst.w    SerOpen
  1578.         beq    Writer1.1
  1579.         add.l    #1,Sent
  1580.         move.l    IOWRequest,a1
  1581.         move.l    #1,IO_LENGTH(a1)        ;writes in one byte "chunks"
  1582.         move.w    #CMD_WRITE,IO_COMMAND(a1)
  1583.         lea.l    Buffer1,a0
  1584.         move.l    a0,IO_DATA(a1)
  1585.         lib    Exec,DoIO        ;May freeze, too bad
  1586. Writer1.1:    rts
  1587.  
  1588. ;Writes string to serial port
  1589. ;
  1590. ;D0 = Length
  1591. ;A0 = String
  1592.  
  1593. Writer2:    tst.w    SerOpen
  1594.         beq    Writer2.1
  1595.         add.l    d0,Sent
  1596.         move.l    IOWRequest,a1
  1597.         move.w    #CMD_WRITE,IO_COMMAND(a1)
  1598.         move.l    d0,IO_LENGTH(a1)
  1599.         move.l    a0,IO_DATA(a1)
  1600.         lib    Exec,DoIO        ;May freeze, too bad
  1601. Writer2.1:    rts
  1602.  
  1603. DoCapture:    move.l    CaptureFile,d1
  1604.         beq    DoCapture_OUT
  1605.         lea.l    Buffer4,a1
  1606.         bsr    GetLength
  1607.         move.l    d0,d3
  1608.         lea.l    Buffer4,a0
  1609.         move.l    a0,d2
  1610.         lib    Dos,Write
  1611. DoCapture_OUT:    rts
  1612.  
  1613. SetSerParams:    tst.w    SerOpen
  1614.         beq    SSerParams_OUT
  1615.  
  1616. ;        bsr    ClearSer        ;DEBUG
  1617.  
  1618.         move.l    IOSRequest,a1
  1619.         move.w    #SDCMD_SETPARAMS,IO_COMMAND(a1)
  1620.         clr.l    IO_EXTFLAGS(a1)
  1621.         clr.l    d4
  1622.         tst.b    XONXOFF
  1623.         beq    SetSerParams1
  1624.         move.b    #SERF_XDISABLED,IO_SERFLAGS(a1)
  1625.         move.l    #$DEADBEEF,d4
  1626. SetSerParams1:    move.l    Speed,IO_BAUD(a1)
  1627.         move.b    DataBits,IO_READLEN(a1)
  1628.         move.b    DataBits,IO_WRITELEN(a1)
  1629.         move.b    StopBits,IO_STOPBITS(a1)
  1630.         lib    Exec,DoIO
  1631.         move.l    IOSRequest,a1
  1632.         clr.l    d0
  1633.         move.b    IO_ERROR(a1),d0
  1634.         cmp.l    #SerErr_DevBusy,d0
  1635.         beq    SetSerParams2
  1636.         rts
  1637. SetSerParams2:    cmp.l    #$DEADBEEF,d4        ;If we set XON/XOFF and
  1638.         beq    SSerParams_OUT        ;got error then clear it
  1639.         rts
  1640. SSerParams_OUT:    clr.l    d0
  1641.         rts
  1642.  
  1643. SendBREAK:    tst.w    SerOpen
  1644.         beq    SendBreak_OUT
  1645.         move.l    IOWRequest,a1
  1646.         move.w    #SDCMD_BREAK,IO_COMMAND(a1)
  1647.         or.b    #IOF_QUICK,IO_FLAGS(a1)
  1648.         lib    Exec,DoIO
  1649. SendBreak_OUT:    rts
  1650.  
  1651. DoCLIInput:    lea.l    Buffer1,a0
  1652.         cmp.b    #CR,Buffer1
  1653.         beq    DoCLIInput3
  1654.         cmp.b    #LF,Buffer1
  1655.         beq    DoCLIInput4
  1656.         cmp.b    #BS,Buffer1
  1657.         beq    DoCLIInput5
  1658.         cmp.b    #DEL,Buffer1
  1659.         beq    DoCLIInput6
  1660.         cmp.b    #CSI,Buffer1
  1661.         beq    DoCSI
  1662. DoCLIInput1:    bsr    Writer
  1663.         btst.b    #0,LocalEcho
  1664.         beq    DoCLIInput2
  1665.         lea.l    Buffer1,a0
  1666.         bsr    Printer
  1667. DoCLIInput2:    rts
  1668. DoCLIInput3:    tst.b    CRTranslate
  1669.         beq    DoCLIInput1
  1670.         cmp.b    #1,CRTranslate
  1671.         beq    DoCLIInput2
  1672.         cmp.b    #2,CRTranslate
  1673.         bne    DoCLIInput2
  1674.         bsr    DoCLIInput1
  1675.         move.b    #LF,Buffer1
  1676.         bra    DoCLIInput1
  1677. DoCLIInput4:    tst.b    LFTranslate
  1678.         beq    DoCLIInput1
  1679.         cmp.b    #1,LFTranslate
  1680.         beq    DoCLIInput2
  1681.         cmp.b    #2,LFTranslate
  1682.         bne    DoCLIInput2
  1683.         move.b    #CR,Buffer1
  1684.         bsr    DoCLIInput1
  1685.         move.b    #LF,Buffer1
  1686.         bra    DoCLIInput1
  1687. DoCLIInput5:    tst.b    SwapBSDEL
  1688.         beq    DoCLIInput1
  1689.         move.b    #DEL,Buffer1
  1690.         bra    DoCLIInput1
  1691. DoCLIInput6:    tst.b    SwapBSDEL
  1692.         beq    DoCLIInput1
  1693.         move.b    #BS,Buffer1
  1694.         bra    DoCLIInput1
  1695.  
  1696. DoCSI:        tst.b    CursorRemap
  1697.         beq    DoCSI_OUT
  1698.         move.l    _stdin,d1
  1699.         lea.l    Buffer1,a0
  1700.         move.l    a0,d2
  1701.         move.l    #1,d3
  1702.         lib    Dos,Read
  1703.         cmp.b    #Cursor_Up,Buffer1
  1704.         beq    DoCSI1
  1705.         cmp.b    #Cursor_Down,Buffer1
  1706.         beq    DoCSI2
  1707.         cmp.b    #Cursor_Left,Buffer1
  1708.         beq    DoCSI3
  1709.         cmp.b    #Cursor_Right,Buffer1
  1710.         beq    DoCSI4
  1711.         bra    DoCLIInput1
  1712. DoCSI1:        move.b    #CTRL_P,Buffer1
  1713.         bra    DoCLIInput1
  1714. DoCSI2:        move.b    #CTRL_N,Buffer1
  1715.         bra    DoCLIInput1
  1716. DoCSI3:        move.b    #CTRL_B,Buffer1
  1717.         bra    DoCLIInput1
  1718. DoCSI4:        move.b    #CTRL_F,Buffer1
  1719. DoCSI_OUT:    bra    DoCLIInput1
  1720.  
  1721. DoSerialInput:    push    d0-d7/a2-a6
  1722.         lea.l    Buffer3,a0
  1723.         lea.l    Buffer4,a1
  1724. DoSerialInput1:    tst.b    (a0)
  1725.         beq    DoSerialInput3.1
  1726.         cmp.b    #CR,(a0)
  1727.         beq    DoSerialInput4
  1728.         cmp.b    #LF,(a0)
  1729.         beq    DoSerialInput6
  1730. DoSerialInput2:    move.b    (a0)+,(a1)+
  1731.         bra    DoSerialInput1
  1732. DoSerialInput3:    pull    d0-d7/a2-a6
  1733.         rts
  1734. DoSerialInput3.1: clr.b    (a1)
  1735.         pull    d0-d7/a2-a6
  1736.         rts
  1737. DoSerialInput4:    tst.b    CRTranslateIn
  1738.         beq    DoSerialInput2
  1739.         cmp.b    #1,CRTranslateIn
  1740.         bne    DoSerialInput5
  1741.         add.l    #1,a0
  1742.         bra    DoSerialInput1
  1743. DoSerialInput5:    cmp.b    #2,CRTranslateIn
  1744.         bne    DoSerialInput2
  1745.         move.b    #CR,(a1)+
  1746.         move.b    #LF,(a1)+
  1747.         add.l    #1,a0
  1748.         bra    DoSerialInput1
  1749. DoSerialInput6:    tst.b    LFTranslateIn
  1750.         beq    DoSerialInput2
  1751.         cmp.b    #1,LFTranslateIn
  1752.         bne    DoSerialInput7
  1753.         add.l    #1,a0
  1754.         bra    DoSerialInput1
  1755. DoSerialInput7:    cmp.b    #2,LFTranslateIn
  1756.         bne    DoSerialInput2
  1757.         move.b    #CR,(a1)+
  1758.         move.b    #LF,(a1)+
  1759.         add.l    #1,a0
  1760.         bra    DoSerialInput1
  1761.  
  1762. ;gets anykey from user
  1763. ;
  1764. ;Results d0 = -1 for error, otherwise d0 = key pressed
  1765.  
  1766. GetAnyKey:    lea.l    AnyKeyText1,a0
  1767.         bsr    Printer
  1768.         move.l    _stdin,d1
  1769.         lib    Dos,Flush
  1770.         move.l    _stdin,d1
  1771.         lib    Dos,FGetC
  1772.         lea.l    CRLFText1,a0
  1773.         bsr    Printer
  1774.         rts
  1775.  
  1776. ;Gets a string from the user, null terminated
  1777. ;
  1778. ;Inputs    a0 = pointer to buffer
  1779. ;    d3 = length of buffer
  1780. ;
  1781. ;Result    d0 = -1 if failed
  1782. ;
  1783.  
  1784. GetString:    push    a0
  1785.         push    a0
  1786.         move.l    _stdin,d1
  1787.         move.l    #FALSE,d2
  1788.         lib    Dos,SetMode
  1789.  
  1790.         move.l    _stdin,d1
  1791.         lib    Dos,Flush
  1792.  
  1793.         move.l    _stdin,d1
  1794.         pull    d2
  1795.         lib    Dos,FGets
  1796.         tst.l    d0
  1797.         beq    GetString_OUT2
  1798.  
  1799.         pull    a0
  1800.         bsr    GetLLength
  1801.         clr.b    -1(a0,d1.l)    ;remove LF
  1802.  
  1803.         move.l    _stdin,d1
  1804.         move.l    #TRUE,d2
  1805.         lib    Dos,SetMode
  1806.  
  1807.         move.l    _stdin,d1
  1808.         lib    Dos,Flush
  1809.  
  1810.         clr.l    d0
  1811.         rts
  1812.  
  1813. GetString_OUT2:    move.l    #-1,d0
  1814.         rts
  1815.  
  1816. ;Gets input from user
  1817. ;
  1818. ;Results d0 = 0 for N, 1 for S, 2 for A, -1 for error
  1819.  
  1820. GetNSA:        move.l    _stdin,d1
  1821.         lib    Dos,FGetC
  1822.         cmp.l    #-1,d0
  1823.         beq    GetNSA_ERR1
  1824.         cmp.l    #'a',d0
  1825.         bcs    GetNSA0.1
  1826.         cmp.l    #'z',d0
  1827.         bhi    GetNSA0.1
  1828.         sub.l    #32,d0
  1829. GetNSA0.1:    cmp.l    #'N',d0
  1830.         beq    GetNSA1
  1831.         cmp.l    #'S',d0
  1832.         beq    GetNSA2
  1833.         cmp.l    #'A',d0
  1834.         beq    GetNSA3
  1835.         cmp.l    #CR,d0
  1836.         beq    GetNSA_ERR1
  1837.         cmp.l    #LF,d0
  1838.         beq    GetNSA_ERR1
  1839.         bra    GetNSA
  1840. GetNSA1:    lea.l    NoneText1,a0
  1841.         bsr    Printer
  1842.         move.l    #0,d0
  1843.         rts
  1844. GetNSA2:    lea.l    StripText1,a0
  1845.         bsr    Printer
  1846.         move.l    #1,d0
  1847.         rts
  1848. GetNSA3:    lea.l    AddText1,a0
  1849.         bsr    Printer
  1850.         move.l    #2,d0
  1851.         rts
  1852. GetNSA_ERR1:    move.l    #-1,d0
  1853.         rts
  1854.  
  1855. ;Give NSA
  1856. ;
  1857. ;Inputs d0 = NSA qualifier(?)
  1858. ;
  1859.  
  1860. GiveNSA:    tst.b    d0
  1861.         beq    GiveNSA1
  1862.         cmp.b    #1,d0
  1863.         beq    GiveNSA2
  1864.         cmp.b    #2,d0
  1865.         beq    GiveNSA3
  1866.         lea.l    NAText1,a0
  1867.         bsr    Printer
  1868.         rts
  1869. GiveNSA1:    lea.l    NText1,a0
  1870.         bsr    Printer
  1871.         rts
  1872. GiveNSA2:    lea.l    SText1,a0
  1873.         bsr    Printer
  1874.         rts
  1875. GiveNSA3:    lea.l    AText1,a0
  1876.         bsr    Printer
  1877.         rts
  1878.  
  1879. Nope:        lea.l    SpaceText1,a0
  1880.         bsr    Printer
  1881.         rts
  1882. Yep:        lea.l    StarText1,a0
  1883.         bsr    Printer
  1884.         rts
  1885.  
  1886. GiveSettings:    clr.l    SpeedText90
  1887.         clr.l    SpeedText90+4
  1888.         clr.l    SpeedText90+8
  1889.         lea.l    fstrl3,a0        ;HEX->ASCII
  1890.         lea.l    Speed,a1        ;Number2Print
  1891.         lea.l    PutChProc,a2
  1892.         lea.l    SpeedText90,a3        ;Destination
  1893.         lib    Exec,RawDoFmt
  1894.  
  1895.         lea.l    CurrentText1,a0
  1896.         bsr    Printer
  1897.  
  1898.         tst.l    Speed
  1899.         beq    GiveSettings0.1
  1900.         lea.l    SpeedText90,a0
  1901.         bsr    Printer
  1902.         bra    GiveSettings0.2
  1903.  
  1904. GiveSettings0.1: lea.l    DefText1,a0
  1905.         bsr    Printer
  1906.  
  1907. GiveSettings0.2: lea.l    CurrentText2,a0
  1908.         bsr    Printer
  1909.  
  1910.         tst.w    LocalEcho
  1911.         bne    GiveSettings1
  1912.         bsr    Nope
  1913.         bra    GiveSettings2
  1914. GiveSettings1:    bsr    Yep
  1915.  
  1916. GiveSettings2:    lea.l    CurrentText7,a0
  1917.         bsr    Printer
  1918.  
  1919.         lea.l    CurrentText3,a0
  1920.         bsr    Printer
  1921.  
  1922.         move.b    CRTranslate,d0
  1923.         bsr    GiveNSA
  1924.  
  1925.         lea.l    CurrentText4,a0
  1926.         bsr    Printer
  1927.  
  1928.         move.b    LFTranslate,d0
  1929.         bsr    GiveNSA
  1930.  
  1931.         lea.l    CurrentText7,a0
  1932.         bsr    Printer
  1933.  
  1934.         lea.l    CurrentText5,a0
  1935.         bsr    Printer
  1936.  
  1937.         move.b    CRTranslateIn,d0
  1938.         bsr    GiveNSA
  1939.  
  1940.         lea.l    CurrentText6,a0
  1941.         bsr    Printer
  1942.  
  1943.         move.b    LFTranslateIn,d0
  1944.         bsr    GiveNSA
  1945.  
  1946.         lea.l    CurrentText7,a0
  1947.         bsr    Printer
  1948.  
  1949.         lea.l    CurrentText8,a0
  1950.         bsr    Printer
  1951.  
  1952.         cmp.b    #7,DataBits
  1953.         bne    GiveSettings3
  1954.         lea.l    SevenText1,a0
  1955.         bsr    Printer
  1956.         bra    GiveSettings4
  1957. GiveSettings3:    cmp.b    #8,DataBits
  1958.         bne    GiveSettings3.1
  1959.         lea.l    EightText1,a0
  1960.         bsr    Printer
  1961.         bra    GiveSettings4
  1962. GiveSettings3.1: lea.l    DefText1,a0
  1963.         bsr    Printer
  1964.  
  1965. GiveSettings4:    lea.l    CurrentText9,a0
  1966.         bsr    Printer
  1967.  
  1968.         cmp.b    #1,StopBits
  1969.         bne    GiveSettings5
  1970.         lea.l    OneText1,a0
  1971.         bsr    Printer
  1972.         bra    GiveSettings6
  1973. GiveSettings5:    cmp.b    #2,StopBits
  1974.         bne    GiveSettings5.1
  1975.         lea.l    TwoText1,a0
  1976.         bsr    Printer
  1977.         bra    GiveSettings6
  1978. GiveSettings5.1: lea.l    DefText1,a0
  1979.         bsr    Printer
  1980.  
  1981. GiveSettings6:    lea.l    CurrentText7,a0
  1982.         bsr    Printer
  1983.  
  1984.         lea.l    CurrentText9.01,a0
  1985.         bsr    Printer
  1986.  
  1987.         tst.b    XONXOFF
  1988.         bne    GiveSettings6.1
  1989.         bsr    Nope
  1990.         bra    GiveSettings6.2
  1991. GiveSettings6.1: bsr    Yep
  1992.  
  1993. GiveSettings6.2: lea.l    CurrentText7,a0
  1994.         bsr    Printer
  1995.  
  1996.         lea.l    CurrentText9.1,a0
  1997.         bsr    Printer
  1998.  
  1999.         tst.b    SwapBSDEL
  2000.         bne    GiveSettings7
  2001.         bsr    Nope
  2002.         bra    GiveSettings8
  2003. GiveSettings7:    bsr    Yep
  2004.  
  2005. GiveSettings8:    lea.l    CurrentText9.11,a0
  2006.         bsr    Printer
  2007.  
  2008.         tst.b    UseANSI
  2009.         bne    GiveSettings9
  2010.         bsr    Nope
  2011.         bra    GiveSettings10
  2012. GiveSettings9:    bsr    Yep
  2013.  
  2014. GiveSettings10:    lea.l    CurrentText7,a0
  2015.         bsr    Printer
  2016.  
  2017.         lea.l    CurrentText9.12,a0
  2018.         bsr    Printer
  2019.  
  2020.         tst.b    CursorRemap
  2021.         bne    GiveSettings11
  2022.         bsr    Nope
  2023.         bra    GiveSettings12
  2024. GiveSettings11:    bsr    Yep
  2025.  
  2026. GiveSettings12:    lea.l    CurrentText7,a0
  2027.         bsr    Printer
  2028.  
  2029.         lea.l    CurrentText9.2,a0
  2030.         bsr    Printer
  2031.  
  2032.         clr.w    CPAssignText
  2033.         clr.l    CTRLPASCII
  2034.         move.b    CPAssign,CPAssignText+1
  2035.         lea.l    fstrl4,a0        ;HEX->ASCII
  2036.         lea.l    CPAssignText,a1        ;Number2Print
  2037.         lea.l    PutChProc,a2
  2038.         lea.l    CTRLPASCII,a3        ;Destination
  2039.         lib    Exec,RawDoFmt
  2040.  
  2041.         lea.l    CTRLPASCII,a0
  2042.         bsr    Printer
  2043.  
  2044.         lea.l    CRLFText1,a0
  2045.         bsr    Printer
  2046.  
  2047.         lea.l    CurrentText9.3,a0
  2048.         bsr    Printer
  2049.  
  2050.         lea.l    ULProgram,a0
  2051.         bsr    Printer
  2052.  
  2053.         lea.l    CurrentText9.4,a0
  2054.         bsr    Printer
  2055.  
  2056.         lea.l    DLProgram,a0
  2057.         bsr    Printer
  2058.  
  2059.         lea.l    CurrentText9.5,a0
  2060.         bsr    Printer
  2061.  
  2062.         lea.l    ULDir,a0
  2063.         bsr    Printer
  2064.  
  2065.         lea.l    CurrentText9.6,a0
  2066.         bsr    Printer
  2067.  
  2068.         lea.l    DLDir,a0
  2069.         bsr    Printer
  2070.  
  2071.         lea.l    CRLFText1,a0
  2072.         bsr    Printer
  2073.  
  2074.         lea.l    CurrentText10,a0
  2075.         bsr    Printer
  2076.  
  2077.         lea.l    SerDevNBuffer1,a0
  2078.         bsr    Printer
  2079.  
  2080.         lea.l    CurrentText11,a0
  2081.         bsr    Printer
  2082.  
  2083.         lea.l    fstrl3,a0        ;HEX->ASCII
  2084.         lea.l    SerUnit,a1        ;Number2Print
  2085.         lea.l    PutChProc,a2
  2086.         lea.l    CurrentText12,a3    ;Destination
  2087.         lib    Exec,RawDoFmt
  2088.  
  2089.         lea.l    CurrentText12,a0
  2090.         bsr    Printer
  2091.  
  2092.         lea.l    CurrentText13,a0
  2093.         bsr    Printer
  2094.  
  2095.         lea.l    FileNameBuf1,a0
  2096.         bsr    Printer
  2097.  
  2098.         lea.l    CRLFText1,a0
  2099.         bsr    Printer
  2100.  
  2101.         rts
  2102.  
  2103. GiveStats:    lea.l    fstrl1,a0        ;HEX->ASCII
  2104.         lea.l    Received,a1        ;Number2Print
  2105.         lea.l    PutChProc,a2
  2106.         lea.l    ReceivedText1,a3    ;Destination
  2107.         lib    Exec,RawDoFmt
  2108.  
  2109.         lea.l    fstrl2,a0        ;HEX->ASCII
  2110.         lea.l    Sent,a1            ;Number2Print
  2111.         lea.l    PutChProc,a2
  2112.         lea.l    SentText1,a3        ;Destination
  2113.         lib    Exec,RawDoFmt
  2114.  
  2115.         lea.l    StatsText1,a0
  2116.         bsr    Printer
  2117.         lea.l    ReceivedText1,a0
  2118.         bsr    Printer
  2119.         lea.l    SentText1,a0
  2120.         bsr    Printer
  2121.         lea.l    CRLFText1,a0
  2122.         bsr    Printer
  2123.         rts
  2124.  
  2125. PrintEntries:    tst.b    DialPrefix
  2126.         beq    PrintEntries1
  2127.         lea.l    PrefixText1,a0
  2128.         bsr    Printer
  2129.         lea.l    DialPrefix,a0
  2130.         bsr    Printer
  2131.         lea.l    CRLFText1,a0
  2132.         bsr    Printer
  2133. PrintEntries1:    tst.b    Entry1
  2134.         beq    PrintEntries2
  2135.         lea.l    EntryText1,a0
  2136.         bsr    Printer
  2137.         lea.l    Entry1,a0
  2138.         bsr    Printer
  2139.         lea.l    CRLFText1,a0
  2140.         bsr    Printer
  2141. PrintEntries2:    tst.b    Entry2
  2142.         beq    PrintEntries3
  2143.         lea.l    EntryText2,a0
  2144.         bsr    Printer
  2145.         lea.l    Entry2,a0
  2146.         bsr    Printer
  2147.         lea.l    CRLFText1,a0
  2148.         bsr    Printer
  2149. PrintEntries3:    tst.b    Entry3
  2150.         beq    PrintEntries4
  2151.         lea.l    EntryText3,a0
  2152.         bsr    Printer
  2153.         lea.l    Entry3,a0
  2154.         bsr    Printer
  2155.         lea.l    CRLFText1,a0
  2156.         bsr    Printer
  2157. PrintEntries4:    tst.b    Entry4
  2158.         beq    PrintEntries5
  2159.         lea.l    EntryText4,a0
  2160.         bsr    Printer
  2161.         lea.l    Entry4,a0
  2162.         bsr    Printer
  2163.         lea.l    CRLFText1,a0
  2164.         bsr    Printer
  2165. PrintEntries5:    tst.b    Entry5
  2166.         beq    PrintEntries6
  2167.         lea.l    EntryText5,a0
  2168.         bsr    Printer
  2169.         lea.l    Entry5,a0
  2170.         bsr    Printer
  2171.         lea.l    CRLFText1,a0
  2172.         bsr    Printer
  2173. PrintEntries6:    tst.b    Entry6
  2174.         beq    PrintEntries7
  2175.         lea.l    EntryText6,a0
  2176.         bsr    Printer
  2177.         lea.l    Entry6,a0
  2178.         bsr    Printer
  2179.         lea.l    CRLFText1,a0
  2180.         bsr    Printer
  2181. PrintEntries7:    tst.b    Entry7
  2182.         beq    PrintEntries8
  2183.         lea.l    EntryText7,a0
  2184.         bsr    Printer
  2185.         lea.l    Entry7,a0
  2186.         bsr    Printer
  2187.         lea.l    CRLFText1,a0
  2188.         bsr    Printer
  2189. PrintEntries8:    tst.b    Entry8
  2190.         beq    PrintEntries9
  2191.         lea.l    EntryText8,a0
  2192.         bsr    Printer
  2193.         lea.l    Entry8,a0
  2194.         bsr    Printer
  2195.         lea.l    CRLFText1,a0
  2196.         bsr    Printer
  2197. PrintEntries9:    tst.b    Entry9
  2198.         beq    PrintEntries10
  2199.         lea.l    EntryText9,a0
  2200.         bsr    Printer
  2201.         lea.l    Entry9,a0
  2202.         bsr    Printer
  2203.         lea.l    CRLFText1,a0
  2204.         bsr    Printer
  2205. PrintEntries10:    tst.b    Entry10
  2206.         beq    PrintEntries11
  2207.         lea.l    EntryText10,a0
  2208.         bsr    Printer
  2209.         lea.l    Entry10,a0
  2210.         bsr    Printer
  2211.         lea.l    CRLFText1,a0
  2212.         bsr    Printer
  2213. PrintEntries11:    rts
  2214.  
  2215. PrintSelect:    lea.l    SelectedText1,a0
  2216.         bsr    Printer
  2217.         lea.l    SelectText1,a0
  2218.         bsr    Printer
  2219.         tst.b    EntrySelected1
  2220.         beq    PrintSelect1
  2221.         lea.l    SelectText11,a0
  2222.         bsr    Printer
  2223.         bra    PrintSelect2
  2224. PrintSelect1:    lea.l    SelectText12,a0
  2225.         bsr    Printer
  2226. PrintSelect2:    lea.l    SelectText2,a0
  2227.         bsr    Printer
  2228.         tst.b    EntrySelected2
  2229.         beq    PrintSelect3
  2230.         lea.l    SelectText11,a0
  2231.         bsr    Printer
  2232.         bra    PrintSelect4
  2233. PrintSelect3:    lea.l    SelectText12,a0
  2234.         bsr    Printer
  2235. PrintSelect4:    lea.l    SelectText3,a0
  2236.         bsr    Printer
  2237.         tst.b    EntrySelected3
  2238.         beq    PrintSelect5
  2239.         lea.l    SelectText11,a0
  2240.         bsr    Printer
  2241.         bra    PrintSelect6
  2242. PrintSelect5:    lea.l    SelectText12,a0
  2243.         bsr    Printer
  2244. PrintSelect6:    lea.l    SelectText4,a0
  2245.         bsr    Printer
  2246.         tst.b    EntrySelected4
  2247.         beq    PrintSelect7
  2248.         lea.l    SelectText11,a0
  2249.         bsr    Printer
  2250.         bra    PrintSelect8
  2251. PrintSelect7:    lea.l    SelectText12,a0
  2252.         bsr    Printer
  2253. PrintSelect8:    lea.l    SelectText5,a0
  2254.         bsr    Printer
  2255.         tst.b    EntrySelected5
  2256.         beq    PrintSelect9
  2257.         lea.l    SelectText11,a0
  2258.         bsr    Printer
  2259.         bra    PrintSelect10
  2260. PrintSelect9:    lea.l    SelectText12,a0
  2261.         bsr    Printer
  2262. PrintSelect10:    lea.l    SelectText6,a0
  2263.         bsr    Printer
  2264.         tst.b    EntrySelected6
  2265.         beq    PrintSelect11
  2266.         lea.l    SelectText11,a0
  2267.         bsr    Printer
  2268.         bra    PrintSelect12
  2269. PrintSelect11:    lea.l    SelectText12,a0
  2270.         bsr    Printer
  2271. PrintSelect12:    lea.l    SelectText7,a0
  2272.         bsr    Printer
  2273.         tst.b    EntrySelected7
  2274.         beq    PrintSelect13
  2275.         lea.l    SelectText11,a0
  2276.         bsr    Printer
  2277.         bra    PrintSelect14
  2278. PrintSelect13:    lea.l    SelectText12,a0
  2279.         bsr    Printer
  2280. PrintSelect14:    lea.l    SelectText8,a0
  2281.         bsr    Printer
  2282.         tst.b    EntrySelected8
  2283.         beq    PrintSelect15
  2284.         lea.l    SelectText11,a0
  2285.         bsr    Printer
  2286.         bra    PrintSelect16
  2287. PrintSelect15:    lea.l    SelectText12,a0
  2288.         bsr    Printer
  2289. PrintSelect16:    lea.l    SelectText9,a0
  2290.         bsr    Printer
  2291.         tst.b    EntrySelected9
  2292.         beq    PrintSelect17
  2293.         lea.l    SelectText11,a0
  2294.         bsr    Printer
  2295.         bra    PrintSelect18
  2296. PrintSelect17:    lea.l    SelectText12,a0
  2297.         bsr    Printer
  2298. PrintSelect18:    lea.l    SelectText0,a0
  2299.         bsr    Printer
  2300.         tst.b    EntrySelected0
  2301.         beq    PrintSelect19
  2302.         lea.l    SelectText13,a0
  2303.         bsr    Printer
  2304.         bra    PrintSelect20
  2305. PrintSelect19:    lea.l    SelectText14,a0
  2306.         bsr    Printer
  2307. PrintSelect20:    lea.l    CRLFText1,a0
  2308.         bsr    Printer
  2309.         rts
  2310.  
  2311. LoadPrefsFile:    move.l    CLArray1,d1
  2312.         move.l    #MODE_OLDFILE,d2
  2313.         lib    Dos,Open
  2314.         move.l    d0,PrefsFile
  2315.         bne    LoadPrefsFile1
  2316.  
  2317.         lea.l    FileErrorText1,a0
  2318.         bsr    Printer
  2319.         move.l    CLArray1,a0
  2320. ;        lea.l    FileNameBuf1,a0
  2321.         bsr    Printer
  2322.         lea.l    CRLFText1,a0
  2323.         bsr    Printer
  2324.         bra    LoadPF_ERR1
  2325.  
  2326. LoadPrefsFile1:    move.l    PrefsFile,d1
  2327.         lea.l    PrefsStart,a0
  2328.         move.l    a0,d2
  2329.         move.l    #4,d3
  2330.         lib    Dos,Read
  2331.         cmp.l    #4,d0
  2332.         beq    LoadPrefsFile2
  2333.  
  2334.         lea.l    FileErrorText2,a0
  2335.         bsr    Printer
  2336.         bra    LoadPF_ERR1
  2337.  
  2338. LoadPrefsFile2: cmp.l    #STFileVersion,PrefsStart
  2339.         beq    LoadPrefsFile3
  2340.  
  2341.         lea.l    FileErrorText3,a0
  2342.         bsr    Printer
  2343.         bra    LoadPF_ERR1
  2344.  
  2345. LoadPrefsFile3:    move.l    PrefsFile,d1
  2346.         lea.l    SerDevNBuffer1,a0
  2347.         move.l    a0,d2
  2348.         move.l    #PrefsSize-4,d3
  2349.         lib    Dos,Read
  2350.         cmp.l    #PrefsSize-4,d0
  2351.         beq    LoadPrefsFile4
  2352.  
  2353.         lea.l    FileErrorText2,a0
  2354.         bsr    Printer
  2355.         bra    LoadPF_ERR2
  2356.  
  2357. LoadPrefsFile4:
  2358. LoadPF_OUT:    bsr    KillPFile
  2359.         move.l    #-1,d0
  2360.         rts
  2361. LoadPF_ERR1:    bsr    KillPFile
  2362.         clr.l    d0
  2363.         rts
  2364. LoadPF_ERR2:    bsr    KillPFile
  2365.         clr.l    d0
  2366.         rts
  2367.  
  2368. SavePrefsFile:    lea.l    FileNameBuf1,a0
  2369.         move.l    a0,d1
  2370.         move.l    #MODE_NEWFILE,d2
  2371.         lib    Dos,Open
  2372.         move.l    d0,PrefsFile
  2373.         bne    SavePrefsFile1
  2374.  
  2375.         lea.l    FileErrorText1,a0
  2376.         bsr    Printer
  2377.         lea.l    FileNameBuf1,a0
  2378.         bsr    Printer
  2379.         lea.l    CRLFText1,a0
  2380.         bsr    Printer
  2381.         bra    SavePF_ERR1
  2382.  
  2383. SavePrefsFile1:    move.l    #STFileVersion,PrefsStart
  2384.  
  2385.         move.l    PrefsFile,d1
  2386.         lea.l    PrefsStart,a0
  2387.         move.l    a0,d2
  2388.         move.l    #PrefsSize,d3
  2389.         lib    Dos,Write
  2390.         cmp.l    #PrefsSize,d0
  2391.         beq    SavePF_OUT
  2392.  
  2393.         lea.l    FileErrorText4,a0
  2394.         bsr    Printer
  2395.         bra    SavePF_ERR2
  2396.  
  2397. SavePF_OUT:    bsr    KillPFile
  2398.         move.l    #-1,d0
  2399.         rts
  2400. SavePF_ERR1:    clr.l    d0
  2401.         rts
  2402. SavePF_ERR2:    bsr    KillPFile
  2403.         clr.l    d0
  2404.         rts
  2405.  
  2406. ;Create MsgPorts & IOReqs for serial.device (or for other device)
  2407.  
  2408. CreateReqs:    tst.w    SerOpen
  2409.         bne    CreateReqs_OUT        ;If open!!
  2410.         lib    Exec,CreateMsgPort
  2411.         move.l    d0,SRRPort
  2412.         beq    NoMsgPort2
  2413.  
  2414. ;Add port to public lists
  2415.  
  2416.         move.l    SRRPort,a1
  2417.         lea.l    RPortText1,a0
  2418.         move.l    a0,LN_NAME(a1)
  2419.         lib    Exec,AddPort
  2420.  
  2421. ;Create write reply port for serial.device (or modem0.device etc.)
  2422.  
  2423.         lib    Exec,CreateMsgPort
  2424.         move.l    d0,SWRPort
  2425.         beq    NoMsgPort2
  2426.  
  2427. ;Add port to public lists
  2428.  
  2429.         move.l    SWRPort,a1
  2430.         lea.l    WPortText1,a0
  2431.         move.l    a0,LN_NAME(a1)
  2432.         lib    Exec,AddPort
  2433.  
  2434. ;Create SetSerParams reply port for serial.device (or modem0.device etc.)
  2435.  
  2436.         lib    Exec,CreateMsgPort
  2437.         move.l    d0,SSRPort
  2438.         beq    NoMsgPort2
  2439.  
  2440. ;Create the requests themselves
  2441.  
  2442.         move.l    #IOEXTSER_SIZE,d0    ;Read IOReq
  2443.         move.l    SRRPort,a0
  2444.         lib    Exec,CreateIORequest
  2445.         move.l    d0,IORRequest
  2446.         beq    NoIOReq
  2447.  
  2448.         move.l    #IOEXTSER_SIZE,d0    ;Write IOReq
  2449.         move.l    SWRPort,a0
  2450.         lib    Exec,CreateIORequest
  2451.         move.l    d0,IOWRequest
  2452.         beq    NoIOReq
  2453.  
  2454.         move.l    #IOEXTSER_SIZE,d0    ;SetParams IOReq
  2455.         move.l    SSRPort,a0
  2456.         lib    Exec,CreateIORequest
  2457.         move.l    d0,IOSRequest
  2458.         beq    NoIOReq
  2459.  
  2460.         move.l    #1,d0            ;No error
  2461.         rts
  2462. CreateReqs_OUT:    clr.l    d0            ;Error
  2463.         rts
  2464.  
  2465. DeleteReqs:    move.l    IORRequest,a0
  2466.         lib    Exec,DeleteIORequest        ;Delete RReq
  2467.         clr.l    IORRequest
  2468.  
  2469.         move.l    IOWRequest,a0
  2470.         lib    Exec,DeleteIORequest        ;Delete WRreq
  2471.         clr.l    IOWRequest
  2472.  
  2473.         move.l    IOSRequest,a0
  2474.         lib    Exec,DeleteIORequest        ;Delete SRreq
  2475.         clr.l    IOSRequest
  2476.  
  2477.         move.l    SRRPort,a1            ;Remove possible
  2478.         cmp.l    #$00,a1                ;ports from lists
  2479.         beq    DeleteReqs2            ;and then delete
  2480.         lib    Exec,RemPort            ;the ports
  2481.  
  2482.         move.l    SRRPort,a0
  2483.         lib    Exec,DeleteMsgPort
  2484.         clr.l    SRRPort
  2485.  
  2486. DeleteReqs2:    move.l    SWRPort,a1
  2487.         cmp.l    #$00,a1
  2488.         beq    DeleteReqs3
  2489.         lib    Exec,RemPort
  2490.  
  2491.         move.l    SWRPort,a0
  2492.         lib    Exec,DeleteMsgPort
  2493.         clr.l    SWRPort
  2494.  
  2495.         move.l    SSRPort,a0
  2496.         lib    Exec,DeleteMsgPort
  2497.         clr.l    SSRPort
  2498.  
  2499. DeleteReqs3:    rts
  2500.  
  2501. KillPFile:    move.l    PrefsFile,d1
  2502.         beq    KillPFile1
  2503.         lib    Dos,Close
  2504.         clr.l    PrefsFile
  2505. KillPFile1:    rts
  2506.  
  2507. ShutDown:    bsr    CloseSerial
  2508.  
  2509. ShutDown9000:
  2510.  
  2511. ShutDown8900:    bsr    DeleteReqs
  2512.  
  2513. ShutDown8800:
  2514.         move.l    _stdin,d1
  2515.         beq    ShutDown8700
  2516.         move.l    #FALSE,d2
  2517.         lib    Dos,SetMode
  2518.  
  2519. ShutDown8700:    move.l    OptPort,a1
  2520.         cmp.l    #$00,a1
  2521.         beq    ShutDown8600
  2522.         lib    Exec,RemPort
  2523.  
  2524. ShutDown8600:    move.l    OptPort,a0
  2525.         lib    Exec,DeleteMsgPort
  2526.  
  2527. ShutDown8000:    bsr    KillPFile
  2528.  
  2529.         move.l    CaptureFile,d1
  2530.         beq    ShutDown7000
  2531.         lib    Dos,Close
  2532. ShutDown7000:    move.l    RDArgs1,d1
  2533.         beq    ShutDown6900
  2534.         lib    Dos,FreeArgs
  2535. ShutDown6900:
  2536.  
  2537. ShutDown1000:    closlib    Dos
  2538.         pull    d2-d7/a2-a6
  2539.         clr.l    d0
  2540.         rts
  2541.  
  2542. ;open serial.device
  2543.  
  2544. OpenSerial:    bsr    DeleteReqs
  2545.         bsr    CreateReqs
  2546.         tst.w    SerOpen
  2547.         bne    OpenSerial_OUT
  2548.         lea.l    SerDevNBuffer1,a0
  2549.         move.l    SerUnit,d0
  2550.         move.l    IORRequest,a1
  2551.         move.b    #SERF_SHARED,IO_SERFLAGS(a1)
  2552.         clr.l    d1                ;no flags
  2553.         lib    Exec,OpenDevice
  2554.         tst.l    d0
  2555.         bne    NoSerial
  2556.         move.w    #$1,SerOpen        ;just to tell if open
  2557.  
  2558. ;Copy info from one req to the other
  2559.  
  2560.         move.l    IORRequest,a0
  2561.  
  2562.         move.l    IOWRequest,a1            ;for Write request
  2563.         move.l    IO_DEVICE(a0),IO_DEVICE(a1)
  2564.         move.l    IO_UNIT(a0),IO_UNIT(a1)
  2565.  
  2566.         add.l    #48,a0            ;get start of ioser
  2567.         add.l    #48,a1
  2568.         move.l    #34,d0
  2569.         lib    Exec,CopyMem
  2570.  
  2571.         move.l    IORRequest,a0
  2572.         move.l    IOSRequest,a1            ;for SetParams request
  2573.         move.l    IO_DEVICE(a0),IO_DEVICE(a1)
  2574.         move.l    IO_UNIT(a0),IO_UNIT(a1)
  2575.  
  2576.         add.l    #48,a0            ;get start of ioser
  2577.         add.l    #48,a1
  2578.         move.l    #34,d0
  2579.         lib    Exec,CopyMem
  2580.  
  2581.         move.l    IORRequest,a1
  2582.         move.w    #CMD_READ,IO_COMMAND(a1)
  2583.         or.b    #IOF_QUICK,IO_FLAGS(a1)
  2584.         lea.l    Buffer3,a0
  2585.         move.l    a0,IO_DATA(a1)
  2586.         move.l    #1,IO_LENGTH(a1)
  2587.  
  2588.         move.l    #BUFLEN,d0    ;just so the request is used
  2589.         move.l    #0,d1        ;TRY: #1
  2590.         bsr    Read
  2591.  
  2592.         clr.l    d0
  2593.         rts
  2594. OpenSerial_OUT:    move.l    #-1,d0
  2595.         rts
  2596.  
  2597. CloseSerial:    tst.w    SerOpen
  2598.         beq    CloseSerial1
  2599.         bsr    ClearSer
  2600.         move.l    IORRequest,a1
  2601.         lib    Exec,CloseDevice
  2602.  
  2603.         bsr    DeleteReqs
  2604.  
  2605.         clr.w    SerOpen
  2606. CloseSerial1:    rts
  2607.  
  2608. ;Get length of text in given address
  2609. ;
  2610. ;Input a1 = Address of null terminated text string
  2611. ;
  2612. ;Result d0 = Length
  2613.  
  2614. GetLength:    clr.l    d0
  2615.         cmp.l    #$00,a1        ;fixes enforcer hit
  2616.         beq    GetLength_OUT
  2617. GetLength2:    add.l    #1,d0
  2618.         tst.b    (a1)+
  2619.         bne    GetLength2
  2620.         sub.l    #1,d0        ;don't include NULL
  2621. GetLength_OUT:    rts
  2622.  
  2623.  
  2624. ;Get line length of text in given address, including LF
  2625. ;
  2626. ;Input a0 = Address of LF terminated text string
  2627. ;
  2628. ;Result d1 = Length
  2629.  
  2630. GetLLength:    push    a0
  2631.         clr.l    d1
  2632.         cmp.l    #$00,a0        ;fixes enforcer hit
  2633.         beq    GetLLength_OUT
  2634. GetLLength2:    add.l    #1,d1
  2635.         cmp.b    #10,(a0)+
  2636.         bne    GetLLength2
  2637. GetLLength_OUT:    pull    a0
  2638.         rts
  2639.  
  2640. ;Finds a string in another string
  2641. ;
  2642. ;Inputs    a0 = Pointer to string1 (from what to find)
  2643. ;    d0 = Lower byte ('C' out of 'CO') (what to search for)
  2644. ;    d1 = Higher byte ('O' out of 'CO')
  2645. ;
  2646. ;Result    d0 = 0 if not found
  2647. ;
  2648. ;BUGS
  2649.  
  2650. FindWord:    tst.b    (a0)
  2651.         beq    FindWord1
  2652.         cmp.b    (a0),d0
  2653.         beq    FindWord2
  2654.         add.l    #1,a0
  2655.         bra    FindWord
  2656. FindWord1:    clr.l    d0        ;keep right before rts
  2657.         rts
  2658. FindWord2:    add.l    #1,a0
  2659.         tst.b    (a0)
  2660.         beq    FindWord1
  2661.         cmp.b    (a0),d1
  2662.         bne    FindWord2
  2663.         move.l    #-1,d0        ;keep right before rts
  2664.         rts
  2665.  
  2666. ;Input a0 = Address of text string
  2667. ;
  2668. ;Result d0 = Length
  2669.  
  2670. ConvASCII:    clr.l    d0
  2671.         clr.l    d1
  2672.         cmp.b    #' ',(a0)
  2673.         bne    ConvASCII2
  2674.         add.l    #1,a0
  2675. ConvASCII2:    move.b    (a0),d1
  2676.         cmp.b    #'0',d1
  2677.         bcs    ConvASCII_OUT
  2678.         cmp.b    #'9',d1
  2679.         bhi    ConvASCII_OUT
  2680.         sub.b    #'0',d1
  2681.         push    d1/a0
  2682.         move.l    #10,d1
  2683.         lib    Utility,UMult32
  2684.         pull    d1/a0
  2685.         add.l    d1,d0
  2686.         add.l    #1,a0
  2687.         bra    ConvASCII2
  2688. ConvASCII_OUT:    rts
  2689.  
  2690. MakeCmdString:    lea.l    FileNameBuf3,a0
  2691.         lea.l    ULProgram,a4
  2692.         move.l    a4,a5
  2693.         add.l    #128,a5
  2694.         bsr    MCS1
  2695.  
  2696.         move.b    #' ',(a0)+
  2697.  
  2698.         lea.l    FileNameBuf2,a4
  2699.         move.l    a4,a5
  2700.         add.l    #128,a5
  2701.         bsr    MCS1
  2702.  
  2703. ;        lea.l    FileNameBuf3,a0        ;DEBUG
  2704. ;        bsr    Printer            ;DEBUG
  2705.         rts
  2706.  
  2707. MCS1:        move.b    (a4)+,(a0)+
  2708.         tst.b    (a4)
  2709.         beq    MCS2
  2710.         cmp.l    a4,a5
  2711.         bne    MCS1
  2712. MCS2:        rts
  2713.  
  2714. ;Error etc. messages
  2715.  
  2716. NoRDArgs:    lib    Dos,IoErr
  2717.         move.l    d0,d1
  2718.         clr.l    d2
  2719.         lib    Dos,PrintFault
  2720.         bra    ShutDown
  2721.  
  2722. NoUtility:    lea.l    NoUtiText1,a0
  2723.         bsr    Printer
  2724.         bra    ShutDown
  2725.  
  2726. NoDos:        add.l    #8,sp
  2727.         pull    d2-d7/a2-a6
  2728.         move.l    #RETURN_FAIL,d0
  2729.         rts
  2730.  
  2731. NotInteractive:    add.l    #8,sp
  2732.         lea.l    NotIntText1,a0
  2733.         bsr    Printer
  2734.         bra    ShutDown
  2735.  
  2736. NoMsgPort:    lea.l    NoMsgPortText1,a0
  2737.         bsr    Printer
  2738.         bra    ShutDown
  2739.  
  2740. NoMsgPort2:    lea.l    NoMsgPortText1,a0
  2741.         bsr    Printer
  2742.         clr.l    d0
  2743.         rts
  2744.  
  2745. NoIOReq:    lea.l    NoIOReqText1,a0        ;WARNING: DIFFERENT!
  2746.         bsr    Printer
  2747.         clr.l    d0
  2748.         rts
  2749.  
  2750. NoSerial:    lea.l    NoSerialText1,a0
  2751.         bsr    Printer
  2752.         lea.l    SerDevNBuffer1,a0
  2753.         bsr    Printer
  2754.         lea.l    NoSerialText2,a0
  2755.         bsr    Printer
  2756.         move.l    IORRequest,a1
  2757.         move.b    IO_ERROR(a1),d0
  2758.         move.b    d0,ErrorNum+1
  2759.         bsr    PrintErrorNum
  2760.         lea.l    CRLFText1,a0
  2761.         bsr    Printer
  2762.         move.l    #-1,d0
  2763.         rts
  2764.  
  2765. ParamsNotSet:    lea.l    SerSetText1,a0
  2766.         bsr    Printer
  2767.         rts
  2768.  
  2769. Printer:    printa    a0,_stdout
  2770.         rts
  2771.  
  2772. PrintErrorNum:    clr.l    ErrorNumText2
  2773.         clr.w    ErrorNumText2+4
  2774.         lea.l    fstrl5,a0        ;HEX->ASCII
  2775.         lea.l    ErrorNum,a1        ;Number2Print
  2776.         lea.l    PutChProc,a2
  2777.         lea.l    ErrorNumText2,a3        ;Destination
  2778.         lib    Exec,RawDoFmt
  2779.  
  2780.         lea.l    ErrorNumText,a0
  2781.         bsr    Printer
  2782.         lea.l    ErrorNumText2,a0
  2783.         bsr    Printer
  2784.         rts
  2785.  
  2786. PutChProc:    tst.b    d0
  2787.         beq    PutChProc_OUT
  2788.         move.b    d0,(a3)+
  2789. PutChProc_OUT:    rts
  2790.  
  2791. ;Structures
  2792.  
  2793. ;lib stuff
  2794.  
  2795.         libnames
  2796.  
  2797. ;Other stuff, part I
  2798.  
  2799. SRRPort:    dc.l    0
  2800. IORRequest:    dc.l    0
  2801. SWRPort:    dc.l    0
  2802. IOWRequest:    dc.l    0
  2803. SSRPort:    dc.l    0
  2804. IOSRequest:    dc.l    0
  2805. OptPort:    dc.l    0
  2806. _stdout:    dc.l    0
  2807. _stdin:        dc.l    0
  2808. Sent:        dc.l    0            ;Count sent chars
  2809. Received:    dc.l    0            ;Count reveived chars
  2810. PrefsFile:    dc.l    0
  2811. RDArgs1:    dc.l    0
  2812. CLArray1:    dc.l    FileNameBuf1        ;Pointer to filename
  2813. OptPortName:    dc.l    0            ;Pointer to optional portname
  2814.  
  2815. ;Other stuff part II
  2816.  
  2817. OldLock:    dc.l    0        ;dir we started from
  2818. ULLock:        dc.l    0        ;uload dir
  2819. DLLock:        dc.l    0        ;dload dir
  2820. CaptureFile:    dc.l    0        ;Capture everything here..
  2821.  
  2822. EntrySelected1:    dc.b    0
  2823. EntrySelected2:    dc.b    0
  2824. EntrySelected3:    dc.b    0
  2825. EntrySelected4:    dc.b    0
  2826. EntrySelected5:    dc.b    0
  2827. EntrySelected6:    dc.b    0
  2828. EntrySelected7:    dc.b    0
  2829. EntrySelected8:    dc.b    0
  2830. EntrySelected9:    dc.b    0
  2831. EntrySelected0:    dc.b    0
  2832. ModifyMode:    dc.w    0    ;0=No, 1=Yes
  2833. CPAssignText:    dc.w    0
  2834.  
  2835. ;Serial device stuff
  2836.  
  2837. SerOpen:    dc.w    0
  2838. ErrorNum:    dc.w    0
  2839.  
  2840. ;Strings, error
  2841.  
  2842. BreakText1:    dc.b    "***Break",13,10,0
  2843. NotIntText1:    dc.b    "ERROR: Please don't redirect input!",13,10,0
  2844. NoUtiText1:    dc.b    "ERROR: Couldn't open utility.library!",13,10,0
  2845. NoMsgPortText1:    dc.b    "ERROR: Couldn't get message port!",13,10,0
  2846. NoIOReqText1:    dc.b    "ERROR: Couldn't get SerialIOReq!",13,10,0
  2847. NoSerialText1:    dc.b    "ERROR: Device '",0
  2848. NoSerialText2:    dc.b    "' not open!",13,10,0
  2849. FileErrorText1:    dc.b    13,10,"ERROR: Couldn't open file: ",0
  2850. FileErrorText2:    dc.b    "ERROR: Couldn't read file!",13,10,0
  2851. FileErrorText3:    dc.b    "ERROR: Incorrect filetype!",13,10,0
  2852. FileErrorText4:    dc.b    "ERROR: Couldn't write to file!",13,10,0
  2853. NoULDLProgText1: dc.b    13,10,"ERROR: No transfer program specified!",13,10,0
  2854. NoULDirText1:    dc.b    13,10,"ERROR: Couldn't access upload directory!",13,10,0
  2855. NoDLDirText1:    dc.b    13,10,"ERROR: Couldn't access download directory!",13,10,0
  2856. CaptureErrorText1:    dc.b    13,10,"ERROR: Couldn't open capture!",13,10,0
  2857. CaptureErrorText2:    dc.b    13,10,"ERROR: Capture already open!",13,10,0
  2858. ErrorNumText:    dc.b    "Error number: ",0
  2859. fstrl5:        dc.b    "%d"
  2860.         ds.w    0
  2861. ErrorNumText2:    dc.b    0,0,0,0,0,0
  2862.  
  2863. ;Strings
  2864.  
  2865. StartText1:    dc.b    "Welcome to ShellTerm. Use CTRL-P to get menu.",13,10,0
  2866.         ds.l    0
  2867. RPortText1:    dc.b    "ShellTerm_RPort",0
  2868. WPortText1:    dc.b    "ShellTerm_WPort",0
  2869.  
  2870. ;Main menu
  2871.  
  2872. MenuText1:    dc.b    13,10,"ShellTerm menu. Please choose item:",13,10
  2873.         dc.b    13,10,"(S) Statistics      (C) Clear statistics"
  2874.         dc.b    13,10,"(B) Send BREAK      (O) Send CTRL-P"
  2875.         dc.b    13,10,"(F) Reset font      (X) Clear screen"
  2876.         dc.b    13,10,"(R) Reset modem     (H) Hangup line"
  2877.         dc.b    13,10,"(+) Upload          (-) Download"
  2878.         dc.b    13,10,"(D) Dialer          (P) Preferences"
  2879.         dc.b    13,10,"(L) Open capture    (K) Close capture"
  2880.         dc.b    13,10,"(M) Execute command (?) Information",13,10
  2881.         dc.b    13,10,"(Q) Quit ShellTerm  (E) Exit menus",13,10
  2882.         dc.b    13,10,"Selection: ",0
  2883. ExecuteText1:    dc.b    "Execute",13,10
  2884.         dc.b    "Command to execute: ",0
  2885. InfoText1:    dc.b    "Information",13,10,0
  2886. BreakText2:    dc.b    "Break sent",13,10,0
  2887. CTRL_PText1:    dc.b    "CTRL-P sent",13,10,0
  2888. ExitText1:    dc.b    "Exit",13,10,0
  2889. TerminalText1:    dc.b    13,10,"Terminal mode active:",13,10,0
  2890. ResetFText1:    dc.b    "Reset font",13,10,0
  2891. QuitText1:    dc.b    "Quit",13,10,0
  2892. StatsText1:    dc.b    "Statistics:",13,10,0
  2893. StatsText2:    dc.b    "Statistics",13,10,13,10,0
  2894. DialerText1:    dc.b    "Dialer",13,10,0
  2895. PrefsText1:    dc.b    "Preferences",13,10,0
  2896. ULText1:    dc.b    "Upload program (SZ)",13,10
  2897.         dc.b    "Program name: ",0
  2898. ULText2:    dc.b    "Upload file",13,10
  2899.         dc.b    "File to upload: ",0
  2900. ULText3:    dc.b    "Uploading file, please wait...",13,10,0
  2901. ULText5:    dc.b    "Upload dir",13,10
  2902.         dc.b    "Directory: ",0
  2903. DLText1:    dc.b    "Download program (RZ)",13,10
  2904.         dc.b    "Program name: ",0
  2905. DLText2:    dc.b    "Downloading file, please wait...",13,10,0
  2906. DLText5:    dc.b    "Download dir",13,10
  2907.         dc.b    "Directory: ",0
  2908. OpenCaptureText1: dc.b    "Open capture",13,10
  2909.         dc.b    "Name of file: ",0
  2910. CloseCaptureText1: dc.b    "Close capture",13,10,0
  2911.  
  2912. ReceivedText1:    dc.b    "                            ",00,00,0    ;max of 4294967295
  2913. ;            "   4294967295 bytes received",CR,LF
  2914. SentText1:    dc.b    "                        ",00,00,0    ;max of 4294967295
  2915. ;            "   4294967295 bytes sent",CR,LF
  2916. fstrl1:        dc.b    "   %10.ld bytes received",13,10,0
  2917. fstrl2:        dc.b    "   %10.ld bytes sent",0
  2918. ClearText1:    dc.b    "Cleared",13,10,0
  2919. ClearText3:    dc.b    "Reset",13,10,0
  2920. CRLFText1:    dc.b    CR,LF,0
  2921. ResetText1:    dc.b    "Reset",13,10,0
  2922. ResetText2:    dc.b    "ATZ",13,10,0
  2923. HangUpText1:    dc.b    "Hangup",13,10,0
  2924. HangUpText2:    dc.b    "+++",0
  2925. HangUpText3:    dc.b    "ATH0",13,10,0
  2926. PlainText1:    dc.b    $9b,$30,$6d,$1b,$63
  2927. ClearSText1:    dc.b    $1B,$5B,$30,$3B,$30,$48,$1B,$5B,$4A,0
  2928.  
  2929. ;Preferences
  2930.  
  2931. PrefsText2:    dc.b    13,10,"ShellTerm preferences:",13,10
  2932.         dc.b    13,10,"(S)erial settings  (T)erminal settings"
  2933.         dc.b    13,10,"(R)eset settings   (V)iew settings"
  2934.         dc.b    13,10,"(L)oad prefs       (W)rite prefs"
  2935.         dc.b    13,10,"(N)ame prefsfile   (A)ssign CTRL-P"
  2936.         dc.b    13,10,"(+) Upload program (-) Download program"
  2937.         dc.b    13,10,"(U)pload dir       (D)ownload dir",13,10
  2938.         dc.b    13,10,"(M)ain menu        (E)xit menus",13,10
  2939.         dc.b    13,10,"Selection: ",0
  2940. ViewText1:    dc.b    "View settings",13,10,0
  2941. SpeedText11:    dc.b    "Serial settings",13,10,0
  2942. SpeedText13:    dc.b    "Speed",13,10,0
  2943. STerminalText1:    dc.b    "Terminal settings",13,10,0
  2944. LoadText1:    dc.b    "Load prefs",13,10,0
  2945. SaveText1:    dc.b    "Write prefs",13,10,0
  2946. AssignText1:    dc.b    "Assign CTRL-P",13,10,0
  2947. AssignText2:    dc.b    13,10,"Press key to assign CTRL-P to: ",0
  2948. EnterNText1:    dc.b    "Enter name",13,10,0
  2949. EnterNText2:    dc.b    13,10,"File name: ",0
  2950. DBitsText1:    dc.b    "Using 7 databits",13,10,0
  2951. DBitsText2:    dc.b    "Using 8 databits",13,10,0
  2952. DBitsText3:    dc.b    13,10,"ERROR: Couldn't set databits!",13,10,0
  2953. SBitsText1:    dc.b    "Using 1 stopbit",13,10,0
  2954. SBitsText2:    dc.b    "Using 2 stopbits",13,10,0
  2955. SBitsText3:    dc.b    13,10,"ERROR: Couldn't set stopbits!",13,10,0
  2956. XXText1:    dc.b    "XON/XOFF is on",13,10,0
  2957. XXText2:    dc.b    "XON/XOFF is off",13,10,0
  2958. XXText3:    dc.b    13,10,"ERROR: Couldn't set XON/XOFF!",13,10,0
  2959. CRTransText2:    dc.b    13,10,"(N)one, (S)trip, (A)dd LF: ",0
  2960. LFTransText2:    dc.b    13,10,"(N)one, (S)trip, (A)dd CR: ",0
  2961. AnyKeyText1:    dc.b    13,10,"Please press any key: ",0
  2962. NoneText1:    dc.b    "None",13,10,0
  2963. StripText1:    dc.b    "Strip",13,10,0
  2964. AddText1:    dc.b    "Add",13,10,0
  2965.  
  2966. STerminalText2:    dc.b    13,10,"Terminal settings:",13,10
  2967.         dc.b    13,10,"OUT: (1) CR translate   (2) LF translate"
  2968.         dc.b    13,10,"IN:  (3) CR translate   (4) LF translate"
  2969.         dc.b    13,10,"     (L)ocal echo       (S)wap DEL & BS"
  2970.         dc.b    13,10,"     (A)nsi codes       (C)ursor remap",13,10
  2971.         dc.b    13,10,"(M)ain menu   (-) Previous menu   (E)xit menus",13,10
  2972.         dc.b    13,10,"Selection: ",0
  2973. CRTransText1:    dc.b    "CR translate (OUT)",13,10,0
  2974. LFTransText1:    dc.b    "LF translate (OUT)",13,10,0
  2975. CRTransText3:    dc.b    "CR translate (IN)",13,10,0
  2976. LFTransText3:    dc.b    "LF translate (IN)",13,10,0
  2977. EchoText1:    dc.b    "Local echo enabled",13,10,0
  2978. EchoText2:    dc.b    "Local echo disabled",13,10,0
  2979. SwapText1:    dc.b    "BS & DEL swapping enabled",13,10,0
  2980. SwapText2:    dc.b    "BS & DEL swapping disabled",13,10,0
  2981. ANSIText1:    dc.b    "ANSI mode on",13,10,0
  2982. ANSIText2:    dc.b    "ANSI mode off",13,10,0
  2983. CRemapText1:    dc.b    "Cursor remap on",13,10,0
  2984. CRemapText2:    dc.b    "Cursor remap off",13,10,0
  2985.  
  2986. CurrentText1:    dc.b    13,10,"Current settings: Speed (",0
  2987. CurrentText2:    dc.b    "), Local echo (",0
  2988. CurrentText3:    dc.b    "                  CR xlate out (",0
  2989. CurrentText4:    dc.b    "), LF xlate out (",0
  2990. CurrentText5:    dc.b    "                  CR xlate in (",0
  2991. CurrentText6:    dc.b    "), LR xlate in (",0
  2992. CurrentText7:    dc.b    ")",13,10,0
  2993. CurrentText8:    dc.b    "                  Databits (",0
  2994. CurrentText9:    dc.b    "), Stopbits (",0
  2995. CurrentText9.01: dc.b    "                  XON/XOFF (",0
  2996. CurrentText9.1:    dc.b    "                  Swap BS & DEL (",0
  2997. CurrentText9.11: dc.b    "), ANSI mode (",0
  2998. CurrentText9.12: dc.b    "                  Remap cursor keys (",0
  2999. CurrentText9.2:    dc.b    13,10,"CTRL-P assigned to ASCII: ",0
  3000. CurrentText9.3:    dc.b    13,10,"Upload program  : ",0
  3001. CurrentText9.4:    dc.b    13,10,"Download program: ",0
  3002. CurrentText9.5:    dc.b    13,10,"Upload dir      : ",0
  3003. CurrentText9.6:    dc.b    13,10,"Download dir    : ",0
  3004. CurrentText10:    dc.b    13,10,"Device name: ",0
  3005. CurrentText11:    dc.b    13,10,"Unit number: ",0
  3006. CurrentText12:    dcb.b    14,0
  3007. CurrentText13:    dc.b    13,10,"Prefs file : ",0
  3008. NAText1:    dc.b    "N/A",0
  3009. DefText1:    dc.b    "Default",0
  3010. StarText1:    dc.b    "*",0
  3011. SpaceText1:    dc.b    " ",0
  3012. NText1:        dc.b    "N",0
  3013. SText1:        dc.b    "S",0
  3014. AText1:        dc.b    "A",0
  3015. OneText1:    dc.b    "1",0
  3016. TwoText1:    dc.b    "2",0
  3017. SevenText1:    dc.b    "7",0
  3018. EightText1:    dc.b    "8",0
  3019. fstrl4:        dc.b    "%d",0
  3020.  
  3021. ;Speed prefs
  3022.  
  3023. SpeedText1:    dc.b    13,10,"Serial settings:",13,10
  3024.         dc.b    13,10,"(1) 110 bps     (2) 300 bps"
  3025.         dc.b    13,10,"(3) 1200 bps    (4) 2400 bps"
  3026.         dc.b    13,10,"(5) 4800 bps    (6) 9600 bps"
  3027.         dc.b    13,10,"(7) 19 200 bps  (8) 38 400 bps"
  3028.         dc.b    13,10,"(9) 57 600 bps  (0) 115 200 bps"
  3029.         dc.b    13,10,"(N)ame & Unit   (R)e-open"
  3030.         dc.b    13,10,"(D)atabits      (S)topbits"
  3031.         dc.b    13,10,"(X)ON/XOFF",13,10
  3032.         dc.b    13,10,"(M)ain menu   (-) Previous menu   (E)xit menus",13,10
  3033.         dc.b    13,10,"Selection: ",0
  3034. SpeedText12:    dc.b    13,10,"ERROR: Couldn't set that speed. Please reselect!",13,10,0
  3035. SerSetText1:    dc.b    13,10,"ERROR: Couldn't set serial parameters!",13,10,0
  3036. fstrl3:        dc.b    "%ld",0
  3037.         ds.w    0
  3038. CTRLPASCII:    dc.b    0,0,0,0,0,0,0,0
  3039. SpeedText90:    dc.b    0,0,0,0,0,0,0,0,0,0,0,0
  3040. NameText1:    dc.b    "Set device unit & name",13,10,0
  3041. NameText2:    dc.b    13,10,"Device name: ",0
  3042. NameText3:    dc.b    13,10,"Unit number: ",0
  3043. ReOpenText1:    dc.b    "Re-open device",13,10,0
  3044.  
  3045. ;Dialer stuff
  3046.  
  3047. DialerText2:    dc.b    13,10,"Auto-dialer (phonebook)",13,10
  3048.         dc.b    13,10,"Entries:",13,10,13,10,0
  3049. PrefixText1:    dc.b    "Prefix: ",0
  3050. EntryText1:    dc.b    "1) ",0
  3051. EntryText2:    dc.b    "2) ",0
  3052. EntryText3:    dc.b    "3) ",0
  3053. EntryText4:    dc.b    "4) ",0
  3054. EntryText5:    dc.b    "5) ",0
  3055. EntryText6:    dc.b    "6) ",0
  3056. EntryText7:    dc.b    "7) ",0
  3057. EntryText8:    dc.b    "8) ",0
  3058. EntryText9:    dc.b    "9) ",0
  3059. EntryText10:    dc.b    "0) ",0
  3060. DialerText3:    dc.b    13,10,"(0-9) Un/select entry  (R)elist numbers"
  3061.         dc.b    13,10,"  (S)ingle dial        (D)ial list"
  3062.         dc.b    13,10,"  (C)lear list         (A)ll"
  3063.         dc.b    13,10,"Ed(I)t mode            (P)refix",13,10
  3064.         dc.b    13,10,"  (M)ain menu          (E)xit menus",13,10
  3065. SelectionText1:    dc.b    13,10,"Selection: ",0
  3066. DialText1:    dc.b    "Dial list",13,10,0
  3067. MainMenuText1:    dc.b    "Main menu",13,10,0
  3068. SingleText1:    dc.b    "Dial number",13,10,0
  3069. SingleText2:    dc.b    "Number to dial: ",0
  3070. RelistText1:    dc.b    "Relist",13,10,13,10,0
  3071. EntryTextXIV:    dc.b    "Entry",13,10,0
  3072. ClearText2:    dc.b    "Clear",13,10,0
  3073. AllText1:    dc.b    "All",13,10,0
  3074. HelpText1:    dc.b    "Help",13,10,0
  3075. ModifyText1:    dc.b    "Edit mode on",13,10,0
  3076. ModifyText2:    dc.b    "Edit mode off",13,10,0
  3077. EditEntryText1:    dc.b    "Edit entry",13,10,0
  3078. EditEntryText2:    dc.b    13,10,"Enter number: ",0
  3079. EditEntryText3:    dc.b    "Edit prefix",13,10,0
  3080. EditEntryText4:    dc.b    13,10,"Enter prefix: ",0
  3081. DialingText1:    dc.b    13,10,"Dialing: ",0
  3082. DialText2:    dc.b    13,10,"[Space] to skip, [Backspace] to remove this entry, [Escape] to quit",13,10,0
  3083. ConnectText1:    dc.b    "Connection established",13,10,0
  3084. BusyText1:    dc.b    "Busy",13,10,0
  3085. SkippedText1:    dc.b    "Skipping entry",13,10,0
  3086. CancelledText1:    dc.b    "Quitting",13,10,0
  3087. RemoveText1:    dc.b    "Removing this entry",13,10,0
  3088. EmptyText1:    dc.b    13,10,"List is empty",13,10,0
  3089. SelectedText1:    dc.b    13,10,"Entries selected:",13,10,0
  3090. SelectText1:    dc.b    "1 (",0
  3091. SelectText2:    dc.b    "2 (",0
  3092. SelectText3:    dc.b    "3 (",0
  3093. SelectText4:    dc.b    "4 (",0
  3094. SelectText5:    dc.b    "5 (",0
  3095. SelectText6:    dc.b    "6 (",0
  3096. SelectText7:    dc.b    "7 (",0
  3097. SelectText8:    dc.b    "8 (",0
  3098. SelectText9:    dc.b    "9 (",0
  3099. SelectText0:    dc.b    "0 (",0
  3100. SelectText11:    dc.b    "*) ",0
  3101. SelectText12:    dc.b    " ) ",0
  3102. SelectText13:    dc.b    "*)",0
  3103. SelectText14:    dc.b    " )",0
  3104.  
  3105. ;Strings, names
  3106.  
  3107. CLTemplate1:    dc.b    "FROM,PORT/K",0
  3108. STVersion:    dc.b    "$VER: ShellTerm "
  3109.         PROGVERSION
  3110.         dc.b    " (C)opyright Tomi Blinnikka 1993",0
  3111. AuthorText1:    dc.b    13,10,"Name          : ShellTerm",13,10
  3112.         dc.b    "Version       : "
  3113.         PROGVERSION
  3114.         dc.b    13,10
  3115.         dc.b    "Author        : Tomi Blinnikka",13,10
  3116. ;        dc.b    "NOTICE        : BETA-TESTER VERSION",13,10
  3117. ;        dc.b    "Registered to : ",13,10
  3118.         dc.b    13,10,"(C)opyright Tomi Blinnikka 1993",13,10,0
  3119.         ds.l    0
  3120.  
  3121. ;Buffers
  3122.  
  3123. Buffer1:    dcb.b    2,0        ;For writes to serial (read from CLI)
  3124. Buffer2:    dcb.b    2,0        ;For reads
  3125. Buffer3:    dcb.b    BUFLEN,0    ;For reads from serial
  3126. Buffer4:    dcb.b    BUFLEN*2,0    ;For writes to CLI
  3127.  
  3128. DialBuffer1:    dcb.b    ENTRYLENGTH,0    ;for single dial/serial unit number :)
  3129.  
  3130. FileNameBuf1:    dc.b    "S:ShellTerm.PREFS"
  3131.         dcb.b    128-17,0
  3132. FileNameBuf2:    dcb.b    128,0        ;File to UL/capture filename
  3133. FileNameBuf3:    dcb.b    2*128,0        ;CMD string with arguments
  3134.  
  3135. PREFS_START:
  3136.  
  3137. PrefsStart:    dc.l    STFileVersion
  3138. SerDevNBuffer1:    dc.b    "serial.device"
  3139.         dcb.b    32-13,0        ;device name
  3140. SerUnit:    dc.l    0
  3141. Speed:        dc.l    9600
  3142. LocalEcho:    dc.w    0        ;(0=no echo, 1=echo)
  3143. CRTranslate:    dc.b    0        ;0=none, 1=strip, 2=add LF
  3144. LFTranslate:    dc.b    0        ;0=none, 1=strip, 2=add CR
  3145. CRTranslateIn:    dc.b    0        ;0=none, 1=strip, 2=add LF
  3146. LFTranslateIn:    dc.b    0        ;0=none, 1=strip, 2=add CR
  3147. DataBits:    dc.b    8
  3148. StopBits:    dc.b    1
  3149. XONXOFF:    dc.b    0        ;0=No, 1=Yes
  3150. Pad1:        dc.b    0
  3151. Future1:    dc.l    0
  3152. Future2:    dc.l    0
  3153. Future3:    dc.l    0
  3154. Future4:    dc.l    0
  3155. SwapBSDEL:    dc.b    0        ;1=Yes
  3156. UseANSI:    dc.b    0        ;1=Yes
  3157. CPAssign:    dc.b    0        ;key to assign CTRL-P to
  3158. CursorRemap:    dc.b    0        ;remap cursor keys
  3159.  
  3160. ULProgram:    dcb.b    128,0        ;SZ
  3161. DLProgram:    dcb.b    128,0        ;RZ
  3162. ULDir:        dcb.b    128,0        ;SZ
  3163. DLDir:        dcb.b    128,0        ;RZ
  3164. DialPrefix:    dc.b    "ATDT"        ;dial prefix
  3165.         dcb.b    16-4,0
  3166. Entry1:        dcb.b    ENTRYLENGTH,0    ;Entry 1
  3167. Entry2:        dcb.b    ENTRYLENGTH,0    ;Entry 2
  3168. Entry3:        dcb.b    ENTRYLENGTH,0    ;Entry 3
  3169. Entry4:        dcb.b    ENTRYLENGTH,0    ;Entry 4
  3170. Entry5:        dcb.b    ENTRYLENGTH,0    ;Entry 5
  3171. Entry6:        dcb.b    ENTRYLENGTH,0    ;Entry 6
  3172. Entry7:        dcb.b    ENTRYLENGTH,0    ;Entry 7
  3173. Entry8:        dcb.b    ENTRYLENGTH,0    ;Entry 8
  3174. Entry9:        dcb.b    ENTRYLENGTH,0    ;Entry 9
  3175. Entry10:    dcb.b    ENTRYLENGTH,0    ;Entry 10
  3176.  
  3177. PREFS_END:    dc.l    0,0
  3178.  
  3179. PrefsSize:    EQU    (PREFS_END-PREFS_START)
  3180.         end
  3181.  
  3182.  
  3183.  
  3184. ClearSer:    move.l    IORRequest,a1
  3185.         lib    Exec,CheckIO
  3186.         tst.l    d0
  3187.         beq    ClearSer1
  3188.         move.l    IORRequest,a1
  3189.         lib    Exec,WaitIO
  3190.         rts
  3191.  
  3192. ClearSer1:    move.l    IORRequest,a1
  3193.         ABORTIO
  3194.         move.l    IORRequest,a1
  3195.         lib    Exec,WaitIO
  3196.         rts
  3197.