home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / ZCPR2 / TINIT.MQC / TINIT.MAC
Text File  |  2000-06-30  |  13KB  |  653 lines

  1. ;
  2. ;  PROGRAM:  TINIT
  3. ;  VERSION:  2.1
  4. ;  AUTHOR:  RICHARD CONN
  5. ;  DATE:  25 June 83
  6. ;  DERIVATION:  TINIT.C, VERSION 1.1
  7. ;  PREVIOUS VERSIONS:  2.0 (1 Jan 83)
  8. ;
  9. vers    equ    21
  10.  
  11. ;
  12. ;    TINIT inits the TVI 950 terminal from a config file, optionally
  13. ; specified by the user.  The Config file is created by CONFIG.  TINIT
  14. ; will search along the command-search path for an indicated or default
  15. ; file, load it, and program the TVI 950 from it.
  16. ;
  17. ;    TINIT assumes that X-ON/X-OFF flow control is enabled in the
  18. ; TVI 950.  It uses this to ensure that the commands are not sent to
  19. ; the terminal too quickly.
  20. ;
  21. ;    TINIT is invoked by the following forms:
  22. ;        TINIT        <-- Program using STD.CFG
  23. ;        TINIT file    <-- Program using file.CFG
  24. ;        TINIT file.typ    <-- Program using file.typ
  25. ;        TINIT //    <-- Print Help Message
  26. ;
  27.  
  28. ;
  29. ;  CP/M Constants
  30. ;
  31. cpm    equ    0    ; base of system
  32. fcb    equ    cpm+5ch
  33. tbuff    equ    cpm+80h
  34. xoff    equ    13h    ; ^S=X-OFF
  35. cr    equ    0dh
  36. lf    equ    0ah
  37. esc    equ    1bh    ; ESCAPE code for CRT Programming
  38. delay    equ    200h    ; long delay for TVI 950 to accept command
  39. tablen    equ    80    ; length of tab buffer
  40. ullen    equ    81    ; length of user line buffer
  41. fkeylen    equ    464    ; length of function key buffer
  42.  
  43. ;
  44. ;  SYSLIB Routines
  45. ;
  46.     ext    zpfind,zgpins,cst,cin,cout,crlf,print,pause,moveb
  47.     ext    getud,logud,putud
  48.     ext    codend,initfcb,fi0$open,f0$get,fi0$close
  49.  
  50. ;
  51. ;  TVI 950 Commands
  52. ;
  53. clear    equ    '+'    ; clear screen
  54.  
  55. fctkey    equ    '|'    ; begin function key defn
  56. fctend    equ    'Y'-'@'    ; end function key defn
  57.  
  58. loadusr    equ    'f'    ; load user line
  59. dispusr    equ    'g'    ; display user line
  60.  
  61. sscroll    equ    '8'    ; smooth scroll
  62. hscroll    equ    '9'    ; hard scroll
  63.  
  64. tabclr    equ    '3'    ; all tab clear
  65. tabset    equ    '1'    ; set tab at cursor
  66.  
  67. vidnorm    equ    'd'    ; normal video
  68. vidrev    equ    'b'    ; reverse video
  69.  
  70. clkon    equ    '>'    ; key click on
  71. clkoff    equ    '<'    ; key click off
  72.  
  73. curs    equ    '.'    ; define cursor type
  74.  
  75. ;
  76. ;  General Init Settings
  77. ;
  78. cls    equ    '+'    ; clear screen
  79. unlock    equ    '"'    ; unlock keyboard
  80. nograph    equ    '%'    ; no graphics
  81. noprot    equ    27h    ; protect mode off
  82. normi    equ    '('    ; normal intensity
  83. notabs    equ    '3'    ; clear all tabs
  84. noclick    equ    '<'    ; key click off
  85. nocopy    equ    'A'    ; copy print mode off
  86. cmode    equ    'C'    ; conversation mode on
  87. fdx    equ    'F'    ; full duplex
  88. nomonit    equ    'X'    ; clear monitor mode
  89. nobufpr    equ    'a'    ; buffer print off
  90. vid1    equ    'd'    ; white on black
  91. nopage    equ    'w'    ; auto page off
  92.  
  93. ;
  94. ;    This program is Copyright (c) 1982, 1983 by Richard Conn
  95. ;    All Rights Reserved
  96. ;
  97. ;    ZCPR2 and its utilities, including this one, are released
  98. ; to the public domain.  Anyone who wishes to USE them may do so with
  99. ; no strings attached.  The author assumes no responsibility or
  100. ; liability for the use of ZCPR2 and its utilities.
  101. ;
  102. ;    The author, Richard Conn, has sole rights to this program.
  103. ; ZCPR2 and its utilities may not be sold without the express,
  104. ; written permission of the author.
  105. ;
  106.  
  107. ;
  108. ;  Branch to Start of Program
  109. ;
  110.     jmp    start
  111.  
  112. ;
  113. ;******************************************************************
  114. ;
  115. ;  SINSFORM -- ZCPR2 Utility Standard General Purpose Initialization Format
  116. ;
  117. ;    This data block precisely defines the data format for
  118. ; initial features of a ZCPR2 system which are required for proper
  119. ; initialization of the ZCPR2-Specific Routines in SYSLIB.
  120. ;
  121.  
  122. ;
  123. ;  EXTERNAL PATH DATA
  124. ;
  125. EPAVAIL:
  126.     DB    0FFH    ; IS EXTERNAL PATH AVAILABLE? (0=NO, 0FFH=YES)
  127. EPADR:
  128.     DW    40H    ; ADDRESS OF EXTERNAL PATH IF AVAILABLE
  129.  
  130. ;
  131. ;  INTERNAL PATH DATA
  132. ;
  133. INTPATH:
  134.     DB    0,0    ; DISK, USER FOR FIRST PATH ELEMENT
  135.             ; DISK = 1 FOR A, '$' FOR CURRENT
  136.             ; USER = NUMBER, '$' FOR CURRENT
  137.     DB    0,0
  138.     DB    0,0
  139.     DB    0,0
  140.     DB    0,0
  141.     DB    0,0
  142.     DB    0,0
  143.     DB    0,0    ; DISK, USER FOR 8TH PATH ELEMENT
  144.     DB    0    ; END OF PATH
  145.  
  146. ;
  147. ;  MULTIPLE COMMAND LINE BUFFER DATA
  148. ;
  149. MCAVAIL:
  150.     DB    0FFH    ; IS MULTIPLE COMMAND LINE BUFFER AVAILABLE?
  151. MCADR:
  152.     DW    0FF00H    ; ADDRESS OF MULTIPLE COMMAND LINE BUFFER IF AVAILABLE
  153.  
  154. ;
  155. ;  DISK/USER LIMITS
  156. ;
  157. MDISK:
  158.     DB    4    ; MAXIMUM NUMBER OF DISKS
  159. MUSER:
  160.     DB    31    ; MAXIMUM USER NUMBER
  161.  
  162. ;
  163. ;  FLAGS TO PERMIT LOG IN FOR DIFFERENT USER AREA OR DISK
  164. ;
  165. DOK:
  166.     DB    0FFH    ; ALLOW DISK CHANGE? (0=NO, 0FFH=YES)
  167. UOK:
  168.     DB    0FFH    ; ALLOW USER CHANGE? (0=NO, 0FFH=YES)
  169.  
  170. ;
  171. ;  PRIVILEGED USER DATA
  172. ;
  173. PUSER:
  174.     DB    10    ; BEGINNING OF PRIVILEGED USER AREAS
  175. PPASS:
  176.     DB    'chdir',0    ; PASSWORD FOR MOVING INTO PRIV USER AREAS
  177.     DS    41-($-PPASS)    ; 40 CHARS MAX IN BUFFER + 1 for ending NULL
  178.  
  179. ;
  180. ;  CURRENT USER/DISK INDICATOR
  181. ;
  182. CINDIC:
  183.     DB    '$'    ; USUAL VALUE (FOR PATH EXPRESSIONS)
  184.  
  185. ;
  186. ;  DMA ADDRESS FOR DISK TRANSFERS
  187. ;
  188. DMADR:
  189.     DW    80H    ; TBUFF AREA
  190.  
  191. ;
  192. ;  NAMED DIRECTORY INFORMATION
  193. ;
  194. NDRADR:
  195.     DW    00000H    ; ADDRESS OF MEMORY-RESIDENT NAMED DIRECTORY
  196. NDNAMES:
  197.     DB    64    ; MAX NUMBER OF DIRECTORY NAMES
  198. DNFILE:
  199.     DB    'NAMES   '    ; NAME OF DISK NAME FILE
  200.     DB    'DIR'        ; TYPE OF DISK NAME FILE
  201.  
  202. ;
  203. ;  REQUIREMENTS FLAGS
  204. ;
  205. EPREQD:
  206.     DB    0FFH    ; EXTERNAL PATH?
  207. MCREQD:
  208.     DB    000H    ; MULTIPLE COMMAND LINE?
  209. MXREQD:
  210.     DB    000H    ; MAX USER/DISK?
  211. UDREQD:
  212.     DB    000H    ; ALLOW USER/DISK CHANGE?
  213. PUREQD:
  214.     DB    000H    ; PRIVILEGED USER?
  215. CDREQD:
  216.     DB    0FFH    ; CURRENT INDIC AND DMA?
  217. NDREQD:
  218.     DB    000H    ; NAMED DIRECTORIES?
  219. Z2CLASS:
  220.     DB    7    ; CLASS 7
  221.     DB    'ZCPR2'
  222.     DS    10    ; RESERVED
  223.  
  224. ;
  225. ;  END OF SINSFORM -- STANDARD DEFAULT PARAMETER DATA
  226. ;
  227. ;******************************************************************
  228. ;
  229.  
  230. ;
  231. ;  Default Name of CFG File
  232. ;
  233. speed:
  234.     db    4        ; 4 MHz
  235. cfgfile:
  236.     db    'STD     '    ; may be changed by GENINS
  237.     db    'CFG'
  238.  
  239. ;
  240. ;  Start of Program
  241. ;
  242. start:
  243.     call    zgpins    ; init ZCPR2 buffers
  244.  
  245.     call    print
  246.     db    'TINIT  Version '
  247.     db    (vers/10)+'0','.',(vers mod 10)+'0',0
  248.  
  249. ;
  250. ;  Allocate Buffer Space
  251. ;
  252.     call    codend        ; get start of buffer
  253.     shld    ulbuffer    ; start of underline buffer
  254.     lxi    d,ullen        ; buffer is ullen bytes
  255.     dad    d
  256.     shld    tabbuffer    ; start of tab buffer
  257.     lxi    d,tablen    ; buffer is tablen bytes
  258.     dad    d
  259.     shld    fkeybuffer    ; start of function key buffer
  260.  
  261. ;
  262. ;  Copy Default File Name into FCB
  263. ;
  264.     lxi    h,cfgfile    ; pt to default name
  265.     lxi    d,cfgfcb+1    ; pt to FCB
  266.     mvi    b,11        ; 11 bytes
  267.     call    moveb
  268.  
  269. ;
  270. ;  Check for file name
  271. ;
  272.     lda    fcb+1    ; check for file name
  273.     cpi    ' '    ; <SP> if none
  274.     jz    program    ; program from default FCB
  275.     cpi    '/'    ; help?
  276.     jnz    start1
  277.  
  278. ;
  279. ;  Print Help Message
  280. ;
  281.     call    print
  282.     db    cr,lf,'    TINIT is used to program a TVI 950 CRT from a'
  283.     db    cr,lf,'Configuration File (CFG File) created by the CONFIG'
  284.     db    cr,lf,'Program.  TINIT is invoked in the following ways --'
  285.     db    cr,lf
  286.     db    cr,lf,'        TINIT        <-- Program from Default'
  287.     db    cr,lf,'        TINIT file    <-- Pgm from file.CFG'
  288.     db    cr,lf,'        TINIT file.typ    <-- Pgm from file.typ'
  289.     db    cr,lf,'        TINIT //    <-- Print Help'
  290.     db    cr,lf,0
  291.     ret
  292.  
  293. ;
  294. ;  Process File Name
  295. ;
  296. start1:
  297.     lxi    h,fcb+1        ; copy file name part
  298.     lxi    d,cfgfcb+1    ; copy into CFGFCB
  299.     mvi    b,8        ; 8 bytes
  300.     call    moveb
  301.     lxi    h,fcb+9        ; pt to file type
  302.     lxi    d,cfgfcb+8    ; prepare to copy file type
  303.     mvi    b,3        ; 3 bytes
  304.     mov    a,m        ; any specified?
  305.     cpi    ' '        ; default type if space
  306.     cnz    moveb
  307.  
  308. ;
  309. ;  Load Config File and Program TVI 950
  310. ;
  311. program:
  312.     lxi    d,cfgfcb    ; pt to fcb
  313.     call    initfcb        ; init it
  314.     mvi    b,0ffh        ; search current dir first
  315.     call    zpfind        ; look for file
  316.     jnz    prog1
  317.     call    print
  318.     db    cr,lf,'Configuration File ',0
  319.     xchg            ; HL pts to config file
  320.     inx    h        ; pt to file name
  321.     call    prfn        ; print name
  322.     call    print
  323.     db    ' Not Found',0
  324.     jmp    cpm
  325.  
  326. ;
  327. ;  Load File Buffer into Files
  328. ;
  329. prog1:
  330.     call    print
  331.     db    cr,lf,'Programming TVI 950 from File ',0
  332.     mov    h,d        ; ptr to fcb in HL also
  333.     mov    l,e
  334.     inx    h
  335.     call    prfn        ; print file name
  336.     call    crlf        ; new line
  337.     call    putud
  338.     call    logud        ; log into directory
  339.     call    fi0$open    ; open file for input
  340.     call    getch        ; read char
  341.     sta    cursor        ; set cursor type
  342.     call    getch
  343.     sta    ffkeys        ; set function key flag
  344.     call    getch
  345.     sta    click        ; set key click
  346.     call    getch
  347.     sta    scroll        ; set scrolling
  348.     call    getch
  349.     sta    ftabs        ; set tab program flag
  350.     call    getch
  351.     sta    fuline        ; set user line program flag
  352.     call    getch
  353.     sta    video        ; set video type
  354.     call    getch        ; flush <CR> <LF>
  355.     call    getch
  356.     lhld    ulbuffer    ; load user line if specified
  357.     lxi    d,ullen        ; size of buffer
  358.     lda    fuline
  359.     ora    a        ; 0=no
  360.     cnz    readbuffer    ; read buffer if yes
  361.     lhld    tabbuffer    ; load tab line if specified
  362.     lxi    d,tablen    ; size of buffer
  363.     lda    ftabs
  364.     ora    a
  365.     cnz    readbuffer
  366.     lhld    fkeybuffer    ; program function keys if specified
  367.     lxi    d,fkeylen    ; size of buffer
  368.     lda    ffkeys
  369.     ora    a
  370.     cnz    readbuffer
  371.     call    fi0$close    ; close file
  372.     call    getud        ; restore original user/disk
  373.  
  374. ;
  375. ;  Send Out All Terminial Initializations
  376. ;
  377.     mvi    a,unlock    ; unlock keyboard
  378.     call    cmnd
  379.     mvi    a,nograph    ; no graphics
  380.     call    cmnd
  381.     mvi    a,noprot    ; protect off
  382.     call    cmnd
  383.     mvi    a,normi        ; normal intensity
  384.     call    cmnd
  385.     mvi    a,notabs    ; no tabs
  386.     call    cmnd
  387.     mvi    a,noclick    ; no key click
  388.     call    cmnd
  389.     mvi    a,nocopy    ; no copy print mode
  390.     call    cmnd
  391.     mvi    a,cmode        ; conversation mode on
  392.     call    cmnd
  393.     mvi    a,fdx        ; full duplex
  394.     call    cmnd
  395.     mvi    a,nomonit    ; no monitor mode
  396.     call    cmnd
  397.     mvi    a,nobufpr    ; no buffer print
  398.     call    cmnd
  399.     mvi    a,vid1        ; white on black
  400.     call    cmnd
  401.     mvi    a,nopage    ; auto page off
  402.     call    cmnd
  403.     lxi    h,videom    ; normal video
  404.     call    cmnds
  405.     lxi    h,insert    ; set insert char to space
  406.     call    cmnds
  407. ;
  408. ;  Program Cursor Type
  409. ;
  410.     mvi    a,curs
  411.     call    cmnd
  412.     lda    cursor        ; cursor type
  413.     call    coutx
  414. ;
  415. ;  Program Function Keys
  416. ;
  417.     lda    ffkeys        ; any function keys?
  418.     ora    a        ; 0=no
  419.     jz    setclick
  420.     mvi    b,22        ; 22 keys to program
  421.     lhld    fkeybuffer    ; pt to buffer
  422.     mvi    a,'1'        ; set for first function key
  423.     sta    fkey
  424. nxtkey:
  425.     mov    a,m        ; get first char
  426.     ora    a        ; no string?
  427.     jz    nkey1
  428.     push    h        ; save ptr to first char
  429.     mvi    a,fctkey    ; function key follows
  430.     call    cmnd
  431.     lda    fkey        ; print function key
  432.     call    coutx
  433.     call    pstr        ; print string pted to by HL
  434.     mvi    a,fctend    ; end function
  435.     call    coutx
  436.     pop    h        ; get ptr to first char
  437. nkey1:
  438.     lxi    d,20        ; pt to next function key
  439.     dad    d
  440.     lda    fkey        ; increment function key
  441.     inr    a
  442.     sta    fkey
  443.     dcr    b        ; count down
  444.     jnz    nxtkey
  445.     call    sleep
  446.  
  447. ;
  448. ;  Set Key Click
  449. ;
  450. setclick:
  451.     lda    click        ; from file
  452.     call    cmnd
  453.  
  454. ;
  455. ;  Set Scrolling
  456. ;
  457.     lda    scroll        ; from file
  458.     call    cmnd
  459.  
  460. ;
  461. ;  Set Tabs
  462. ;
  463.     lda    ftabs        ; set tabs?
  464.     ora    a        ; 0=no
  465.     jz    setul
  466.     mvi    a,tabclr    ; clear all tab stops
  467.     call    cmnd
  468.     call    crlf        ; new line
  469.     lhld    tabbuffer    ; pt to buffer
  470.     mvi    b,tablen    ; tablen chars in buffer
  471. settabs:
  472.     mov    a,m        ; get buffer char
  473.     inx    h        ; pt to next
  474.     cpi    '.'        ; dot means set tab here
  475.     jnz    stabs1
  476.     mvi    a,tabset    ; set tab
  477.     call    cmnd
  478. stabs1:
  479.     mvi    a,' '        ; space over
  480.     call    coutx
  481.     dcr    b        ; count down
  482.     jnz    settabs
  483.     call    crlf        ; new line
  484.  
  485. ;
  486. ;  Set User Line
  487. ;
  488. setul:
  489.     lda    fuline        ; get flag
  490.     ora    a        ; 0=no
  491.     jz    setvideo
  492.     mvi    a,loadusr    ; load user line
  493.     call    cmnd
  494.     lhld    ulbuffer    ; print buffer contents
  495.     call    pstr
  496.     mvi    a,cr        ; send just <CR>
  497.     call    coutx
  498.     mvi    a,dispusr    ; display user line
  499.     call    cmnd
  500.     call    sleep
  501. ;
  502. ;  Set Video
  503. ;
  504. setvideo:
  505.     lda    video        ; get command
  506.     call    cmnd
  507.  
  508. ;
  509. ;  Done -- Clear Screen and Return to OS
  510. ;
  511.     mvi    a,cls        ; clear screen
  512.     call    cmnd
  513.     ret
  514.  
  515. ;
  516. ;  Write Single-Char Command in A
  517. ;
  518. cmnd:
  519.     push    psw        ; save command
  520.     mvi    a,esc
  521.     call    coutx        ; send ESC
  522.     pop    psw
  523.     call    coutx        ; send char
  524.     ret
  525.  
  526. ;
  527. ;  Write String Command pted to by HL
  528. ;
  529. cmnds:
  530.     mvi    a,esc        ; send ESC
  531.     call    coutx        ; and fall thru to pstr
  532. ;
  533. ;  Write String Pted to by HL
  534. ;
  535. pstr:
  536.     push    h        ; save HL
  537. pstr1:
  538.     mov    a,m        ; get char
  539.     ora    a        ; done?
  540.     jz    pstr2
  541.     inx    h        ; pt to next
  542.     call    coutx        ; send char
  543.     jmp    pstr1
  544. pstr2:
  545.     pop    h        ; get HL
  546.     ret
  547. ;
  548. ;  Print File Name pted to by HL
  549. ;
  550. prfn:
  551.     push    b        ; save BC
  552.     mvi    b,8
  553.     call    prfn1        ; print name part
  554.     mvi    a,'.'
  555.     call    coutx
  556.     mvi    b,3        ; print type
  557.     call    prfn1
  558.     pop    b        ; restore BC
  559.     ret
  560. prfn1:
  561.     mov    a,m        ; get char
  562.     call    coutx        ; print char
  563.     inx    h        ; pt to next
  564.     dcr    b        ; count down
  565.     jnz    prfn1
  566.     ret
  567.  
  568. ;
  569. ;  Sleep 0.1 secs
  570. ;
  571. sleep:
  572.     push    h        ; save regs
  573.     push    b
  574.     push    psw
  575.     lda    speed        ; get processor speed
  576.     mov    b,a        ; ... in B
  577.     lxi    h,1        ; 0.1 secs
  578.     call    pause
  579.     pop    psw        ; restore regs
  580.     pop    b
  581.     pop    h
  582.     ret
  583.  
  584. ;
  585. ;  Output Char in A to Console, but Check for X-OFF first
  586. ;
  587. coutx:
  588.     push    psw    ; save char
  589.     call    cst    ; char pending?
  590.     ora    a    ; nz=not rda
  591.     jnz    coutx1
  592.     call    cin    ; get char
  593.     cpi    xoff    ; pause?
  594.     jnz    coutx1
  595.     call    cin    ; accept any char for continue
  596. coutx1:
  597.     pop    psw    ; get char
  598.     jmp    cout    ; send it
  599.  
  600. ;
  601. ;  Get Char from File with Possible Abort
  602. ;
  603. getch:
  604.     call    f0$get        ; get char
  605.     rz            ; char OK
  606.     call    print
  607.     db    cr,lf,'File Read Error -- Aborting',0
  608.     jmp    cpm
  609.  
  610. ;
  611. ;  Read into buffer pted to by HL for DE bytes
  612. ;
  613. readbuffer:
  614.     call    getch        ; get byte from file
  615.     mov    m,a        ; put byte
  616.     inx    h        ; pt to next
  617.     dcx    d        ; count down
  618.     mov    a,d        ; done?
  619.     ora    e
  620.     jnz    readbuffer
  621.     call    getch        ; flush <CR> <LF>
  622.     jmp    getch
  623.  
  624. ;
  625. ;  Some Command Strings
  626. ;
  627. videom:
  628.     db    'G0',0
  629. insert:
  630.     db    'e ',0
  631.  
  632. ;
  633. ;  Buffers
  634. ;
  635. cursor:    ds    1
  636. fuline:    ds    1
  637. video:    ds    1
  638. ftabs:    ds    1
  639. fkey:    ds    1
  640. click:    ds    1
  641. scroll:    ds    1
  642. ffkeys:    ds    1
  643. ulbuffer:
  644.     ds    2    ; ptr
  645. tabbuffer:
  646.     ds    2    ; ptr
  647. fkeybuffer:
  648.     ds    2    ; ptr
  649. cfgfcb:
  650.     ds    36    ; FCB for config file
  651.  
  652.     end
  653.