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 / RECORD.MQC / RECORD.MAC
Text File  |  2000-06-30  |  7KB  |  348 lines

  1. ;
  2. ;  PROGRAM:  RECORD
  3. ;  AUTHOR:  RICHARD CONN
  4. ;  VERSION:  1.4
  5. ;  DATE:  6 Jan 83
  6. ;  PREVIOUS VERSIONS:  1.3 (5 Jan 83)
  7. ;  PREVIOUS VERSIONS:  1.0 (30 Dec 82), 1.1 (31 Dec 82), 1.2 (1 Jan 83)
  8. ;
  9. VERS    EQU    14
  10.  
  11. ;
  12. ;    This program is Copyright (c) 1982, 1983 by Richard Conn
  13. ;    All Rights Reserved
  14. ;
  15. ;    ZCPR2 and its utilities, including this one, are released
  16. ; to the public domain.  Anyone who wishes to USE them may do so with
  17. ; no strings attached.  The author assumes no responsibility or
  18. ; liability for the use of ZCPR2 and its utilities.
  19. ;
  20. ;    The author, Richard Conn, has sole rights to this program.
  21. ; ZCPR2 and its utilities may not be sold without the express,
  22. ; written permission of the author.
  23. ;
  24.  
  25.  
  26. ;
  27. ;    RECORD enables and disables the disk output redirectable I/O
  28. ; drivers for ZCPR2.  This command takes two forms:
  29. ;
  30. ;        RECORD ON    <-- Turn on console recording
  31. ;        RECORD OFF    <-- Turn off console recording
  32. ;        RECORD ON LST    <-- Turn on printer recording
  33. ;        RECORD OFF LST    <-- Turn off printer recording
  34. ;
  35.     ext    print,fname,bbline
  36.  
  37. fcb    equ    5dh        ;FCB Input
  38. fcb2    equ    6dh        ;FCB2 Input
  39. cr    equ    0dh
  40. lf    equ    0ah
  41.  
  42. ;
  43. ;  Branch to Start of Program
  44. ;
  45.     jmp    start
  46.  
  47. ;
  48. ;******************************************************************
  49. ;
  50. ;  SINSFORM -- ZCPR2 Utility Standard General Purpose Initialization Format
  51. ;
  52. ;    This data block precisely defines the data format for
  53. ; initial features of a ZCPR2 system which are required for proper
  54. ; initialization of the ZCPR2-Specific Routines in SYSLIB.
  55. ;
  56.  
  57. ;
  58. ;  EXTERNAL PATH DATA
  59. ;
  60. EPAVAIL:
  61.     DB    0FFH    ; IS EXTERNAL PATH AVAILABLE? (0=NO, 0FFH=YES)
  62. EPADR:
  63.     DW    40H    ; ADDRESS OF EXTERNAL PATH IF AVAILABLE
  64.  
  65. ;
  66. ;  INTERNAL PATH DATA
  67. ;
  68. INTPATH:
  69.     DB    0,0    ; DISK, USER FOR FIRST PATH ELEMENT
  70.             ; DISK = 1 FOR A, '$' FOR CURRENT
  71.             ; USER = NUMBER, '$' FOR CURRENT
  72.     DB    0,0
  73.     DB    0,0
  74.     DB    0,0
  75.     DB    0,0
  76.     DB    0,0
  77.     DB    0,0
  78.     DB    0,0    ; DISK, USER FOR 8TH PATH ELEMENT
  79.     DB    0    ; END OF PATH
  80.  
  81. ;
  82. ;  MULTIPLE COMMAND LINE BUFFER DATA
  83. ;
  84. MCAVAIL:
  85.     DB    0FFH    ; IS MULTIPLE COMMAND LINE BUFFER AVAILABLE?
  86. MCADR:
  87.     DW    0FF00H    ; ADDRESS OF MULTIPLE COMMAND LINE BUFFER IF AVAILABLE
  88.  
  89. ;
  90. ;  DISK/USER LIMITS
  91. ;
  92. MDISK:
  93.     DB    4    ; MAXIMUM NUMBER OF DISKS
  94. MUSER:
  95.     DB    31    ; MAXIMUM USER NUMBER
  96.  
  97. ;
  98. ;  FLAGS TO PERMIT LOG IN FOR DIFFERENT USER AREA OR DISK
  99. ;
  100. DOK:
  101.     DB    0FFH    ; ALLOW DISK CHANGE? (0=NO, 0FFH=YES)
  102. UOK:
  103.     DB    0FFH    ; ALLOW USER CHANGE? (0=NO, 0FFH=YES)
  104.  
  105. ;
  106. ;  PRIVILEGED USER DATA
  107. ;
  108. PUSER:
  109.     DB    10    ; BEGINNING OF PRIVILEGED USER AREAS
  110. PPASS:
  111.     DB    'chdir',0    ; PASSWORD FOR MOVING INTO PRIV USER AREAS
  112.     DS    41-($-PPASS)    ; 40 CHARS MAX IN BUFFER + 1 for ending NULL
  113.  
  114. ;
  115. ;  CURRENT USER/DISK INDICATOR
  116. ;
  117. CINDIC:
  118.     DB    '$'    ; USUAL VALUE (FOR PATH EXPRESSIONS)
  119.  
  120. ;
  121. ;  DMA ADDRESS FOR DISK TRANSFERS
  122. ;
  123. DMADR:
  124.     DW    80H    ; TBUFF AREA
  125.  
  126. ;
  127. ;  NAMED DIRECTORY INFORMATION
  128. ;
  129. NDRADR:
  130.     DW    00000H    ; ADDRESS OF MEMORY-RESIDENT NAMED DIRECTORY
  131. NDNAMES:
  132.     DB    64    ; MAX NUMBER OF DIRECTORY NAMES
  133. DNFILE:
  134.     DB    'NAMES   '    ; NAME OF DISK NAME FILE
  135.     DB    'DIR'        ; TYPE OF DISK NAME FILE
  136.  
  137. ;
  138. ;  REQUIREMENTS FLAGS
  139. ;
  140. EPREQD:
  141.     DB    000H    ; EXTERNAL PATH?
  142. MCREQD:
  143.     DB    000H    ; MULTIPLE COMMAND LINE?
  144. MXREQD:
  145.     DB    000H    ; MAX USER/DISK?
  146. UDREQD:
  147.     DB    000H    ; ALLOW USER/DISK CHANGE?
  148. PUREQD:
  149.     DB    000H    ; PRIVILEGED USER?
  150. CDREQD:
  151.     DB    000H    ; CURRENT INDIC AND DMA?
  152. NDREQD:
  153.     DB    000H    ; NAMED DIRECTORIES?
  154. Z2CLASS:
  155.     DB    1    ; CLASS 1
  156.     DB    'ZCPR2'
  157.     DS    10    ; RESERVED
  158.  
  159. ;
  160. ;  END OF SINSFORM -- STANDARD DEFAULT PARAMETER DATA
  161. ;
  162. ;******************************************************************
  163. ;
  164. iobase:
  165.     dw    0    ; I/O Driver Base Address
  166.  
  167. ;
  168. ;  Start of Program
  169. ;
  170. start:
  171.     call    print
  172.     db    'RECORD, Version '
  173.     db    (vers/10)+'0','.',(vers mod 10)+'0',0
  174.  
  175.     lhld    iobase        ;Check for I/O Driver Defn
  176.     mov    a,h
  177.     ora    l
  178.     jnz    start0
  179.     call    print
  180.     db    cr,lf,'Abort -- I/O Driver Address NOT Defined',0
  181.     ret
  182.  
  183. start0:
  184.     call    status        ;Call Status Routine
  185.     jz    nodriver    ;No Driver Available?
  186.     cpi    80H        ;MUST have Disk Driver Module (> 80H) Loaded
  187.     jnc    start1
  188.     call    print
  189.     db    cr,lf,'Abort -- Disk Driver Module NOT Loaded',0
  190.     ret
  191. nodriver:
  192.     call    print
  193.     db    cr,lf,'Abort -- No I/O Driver Module Loaded',0
  194.     ret
  195.  
  196. start1:
  197.     lda    fcb        ;Get first char
  198.     cpi    'O'        ;Must be O
  199.     jnz    help
  200.     lda    fcb+1        ;Get 2nd char
  201.     cpi    'N'        ;ON?
  202.     jnz    off
  203. on:
  204.     call    getfile    ;Get File Name
  205.     lda    fcb2    ;Printer?
  206.     cpi    'P'
  207.     jnz    on1
  208.     call    lopen    ;TTY (HL pts to File FCB)
  209.     call    print
  210.     db    cr,lf,'++ TTY Recording ON ++',0
  211.     ret
  212. on1:
  213.     call    copen    ;CRT (HL pts to File FCB)
  214.     call    print
  215.     db    cr,lf,'++ CRT Recording ON ++',0
  216.     ret
  217. off:
  218.     lda    fcb2    ;Printer?
  219.     cpi    'P'
  220.     jnz    off1
  221.     call    print
  222.     db    cr,lf,'++ TTY Recording OFF ++',cr,lf,0
  223.     call    lclose    ;Close Disk File
  224.     ret
  225. off1:
  226.     call    print
  227.     db    cr,lf,'++ CRT Recording OFF ++',cr,lf,0
  228.     call    cclose    ;Close Disk File
  229.     ret
  230. ;
  231. ;  Print Help Message
  232. ;
  233. help:
  234.     call    print
  235.     db    cr,lf
  236.     db    cr,lf,'RECORD turns on and off recording of screen displays'
  237.     db    cr,lf,'on disk under ZCPR2 with the SYSIO Redirectable I/O '
  238.     db    'Drivers'
  239.     db    cr,lf,'engaged.'
  240.     db    cr,lf
  241.     db    cr,lf,'It is invoked by two forms:'
  242.     db    cr,lf
  243.     db    cr,lf,'    RECORD ON  or RECORD ON PRINTER'
  244.     db    cr,lf,'    RECORD OFF or RECORD OFF PRINTER'
  245.     db    cr,lf
  246.     db    cr,lf,'Minimum Required Option Forms are ON, OF, and P:'
  247.     db    cr,lf,'    RECORD ON P = RECORD ON PRINTER'
  248.     db    cr,lf,'If the P option is given, then TTY output is '
  249.     db    'recorded,'
  250.     db    cr,lf,'else CRT output is recorded.'
  251.     db    cr,lf,0
  252.     ret
  253. ;
  254. ;  Obtain Name of Output File and Return Pointer to its FCB in HL
  255. ;
  256. getfile:
  257.     call    print
  258.     db    cr,lf,'Output File Name (<CR> for DISKOUT)? ',0
  259.     mvi    a,0ffh    ;Caps
  260.     call    bbline    ;Get user Input
  261.     call    sblank    ;Skip to Non-Blank
  262.     ora    a    ;EOL?
  263.     jz    defexit    ;Done if Default
  264.     lxi    d,confcb    ;Pt to FCB
  265.     push    d    ;Save ptr for return
  266.     call    fname    ;Extract Name
  267.     jz    uderr    ;No UD Allowed
  268.     mov    a,c    ;Check for any UD
  269.     cpi    0ffh
  270.     jnz    uderr
  271.     mov    a,b
  272.     cpi    0ffh
  273.     jz    getf1
  274. uderr:
  275.     call    print
  276.     db    cr,lf,'Override -- File is Placed in your Current Directory'
  277.     db    cr,lf,0
  278. getf1:
  279.     pop    h    ;Get ptr to FCB
  280.     ret
  281. defexit:
  282.     lxi    h,confcb    ;Default FCB
  283.     lda    fcb2    ;Check for Printer
  284.     cpi    'P'
  285.     rnz
  286.     lxi    h,prtfcb    ;Printer FCB
  287.     ret
  288. ;
  289. ;  Skip to Non-Blank
  290. ;
  291. sblank:
  292.     mov    a,m    ;Get char
  293.     inx    h    ;Pt to next
  294.     cpi    ' '    ;Loop if Space
  295.     jz    sblank
  296.     dcx    h    ;Pt to Non-Blank Char
  297.     ret
  298.  
  299. ;
  300. ;  I/O Driver Interface Routines
  301. ;
  302. status:
  303.     push    h        ;Save HL
  304.     push    d        ;Save DE
  305.     lxi    d,0        ;No Offset for Status
  306. runio:
  307.     lhld    iobase        ;Get I/O Base Address
  308.     dad    d        ;Pt to Routine
  309.     pop    d        ;Restore DE
  310.     xthl            ;Restore HL and Place Address on Stack
  311.     ret            ;"Run" Routine
  312. copen:
  313.     push    h        ;Save Regs
  314.     push    d
  315.     lxi    d,36        ;Offset for Console Open Routine
  316.     jmp    runio        ;Run Routine
  317. cclose:
  318.     push    h        ;Save Regs
  319.     push    d
  320.     lxi    d,39        ;Offset for Console Close Routine
  321.     jmp    runio
  322. lopen:
  323.     push    h        ;Save Regs
  324.     push    d
  325.     lxi    d,42        ;Offset for Printer Open Routine
  326.     jmp    runio
  327. lclose:
  328.     push    h        ;Save Regs
  329.     push    d
  330.     lxi    d,45        ;Offset for Printer Close Routine
  331.     jmp    runio
  332.  
  333. ;
  334. ;  FCBs
  335. ;
  336. confcb:
  337.     db    0
  338.     db    'DISKOUT '
  339.     db    'CON'
  340.     ds    24
  341. prtfcb:
  342.     db    0
  343.     db    'DISKOUT '
  344.     db    'PRT'
  345.     ds    24
  346.  
  347.     end
  348.