home *** CD-ROM | disk | FTP | other *** search
- ;
- ; PROGRAM: RECORD
- ; AUTHOR: RICHARD CONN
- ; VERSION: 1.4
- ; DATE: 6 Jan 83
- ; PREVIOUS VERSIONS: 1.3 (5 Jan 83)
- ; PREVIOUS VERSIONS: 1.0 (30 Dec 82), 1.1 (31 Dec 82), 1.2 (1 Jan 83)
- ;
- VERS EQU 14
-
- ;
- ; This program is Copyright (c) 1982, 1983 by Richard Conn
- ; All Rights Reserved
- ;
- ; ZCPR2 and its utilities, including this one, are released
- ; to the public domain. Anyone who wishes to USE them may do so with
- ; no strings attached. The author assumes no responsibility or
- ; liability for the use of ZCPR2 and its utilities.
- ;
- ; The author, Richard Conn, has sole rights to this program.
- ; ZCPR2 and its utilities may not be sold without the express,
- ; written permission of the author.
- ;
-
-
- ;
- ; RECORD enables and disables the disk output redirectable I/O
- ; drivers for ZCPR2. This command takes two forms:
- ;
- ; RECORD ON <-- Turn on console recording
- ; RECORD OFF <-- Turn off console recording
- ; RECORD ON LST <-- Turn on printer recording
- ; RECORD OFF LST <-- Turn off printer recording
- ;
- ext print,fname,bbline
-
- fcb equ 5dh ;FCB Input
- fcb2 equ 6dh ;FCB2 Input
- cr equ 0dh
- lf equ 0ah
-
- ;
- ; Branch to Start of Program
- ;
- jmp start
-
- ;
- ;******************************************************************
- ;
- ; SINSFORM -- ZCPR2 Utility Standard General Purpose Initialization Format
- ;
- ; This data block precisely defines the data format for
- ; initial features of a ZCPR2 system which are required for proper
- ; initialization of the ZCPR2-Specific Routines in SYSLIB.
- ;
-
- ;
- ; EXTERNAL PATH DATA
- ;
- EPAVAIL:
- DB 0FFH ; IS EXTERNAL PATH AVAILABLE? (0=NO, 0FFH=YES)
- EPADR:
- DW 40H ; ADDRESS OF EXTERNAL PATH IF AVAILABLE
-
- ;
- ; INTERNAL PATH DATA
- ;
- INTPATH:
- DB 0,0 ; DISK, USER FOR FIRST PATH ELEMENT
- ; DISK = 1 FOR A, '$' FOR CURRENT
- ; USER = NUMBER, '$' FOR CURRENT
- DB 0,0
- DB 0,0
- DB 0,0
- DB 0,0
- DB 0,0
- DB 0,0
- DB 0,0 ; DISK, USER FOR 8TH PATH ELEMENT
- DB 0 ; END OF PATH
-
- ;
- ; MULTIPLE COMMAND LINE BUFFER DATA
- ;
- MCAVAIL:
- DB 0FFH ; IS MULTIPLE COMMAND LINE BUFFER AVAILABLE?
- MCADR:
- DW 0FF00H ; ADDRESS OF MULTIPLE COMMAND LINE BUFFER IF AVAILABLE
-
- ;
- ; DISK/USER LIMITS
- ;
- MDISK:
- DB 4 ; MAXIMUM NUMBER OF DISKS
- MUSER:
- DB 31 ; MAXIMUM USER NUMBER
-
- ;
- ; FLAGS TO PERMIT LOG IN FOR DIFFERENT USER AREA OR DISK
- ;
- DOK:
- DB 0FFH ; ALLOW DISK CHANGE? (0=NO, 0FFH=YES)
- UOK:
- DB 0FFH ; ALLOW USER CHANGE? (0=NO, 0FFH=YES)
-
- ;
- ; PRIVILEGED USER DATA
- ;
- PUSER:
- DB 10 ; BEGINNING OF PRIVILEGED USER AREAS
- PPASS:
- DB 'chdir',0 ; PASSWORD FOR MOVING INTO PRIV USER AREAS
- DS 41-($-PPASS) ; 40 CHARS MAX IN BUFFER + 1 for ending NULL
-
- ;
- ; CURRENT USER/DISK INDICATOR
- ;
- CINDIC:
- DB '$' ; USUAL VALUE (FOR PATH EXPRESSIONS)
-
- ;
- ; DMA ADDRESS FOR DISK TRANSFERS
- ;
- DMADR:
- DW 80H ; TBUFF AREA
-
- ;
- ; NAMED DIRECTORY INFORMATION
- ;
- NDRADR:
- DW 00000H ; ADDRESS OF MEMORY-RESIDENT NAMED DIRECTORY
- NDNAMES:
- DB 64 ; MAX NUMBER OF DIRECTORY NAMES
- DNFILE:
- DB 'NAMES ' ; NAME OF DISK NAME FILE
- DB 'DIR' ; TYPE OF DISK NAME FILE
-
- ;
- ; REQUIREMENTS FLAGS
- ;
- EPREQD:
- DB 000H ; EXTERNAL PATH?
- MCREQD:
- DB 000H ; MULTIPLE COMMAND LINE?
- MXREQD:
- DB 000H ; MAX USER/DISK?
- UDREQD:
- DB 000H ; ALLOW USER/DISK CHANGE?
- PUREQD:
- DB 000H ; PRIVILEGED USER?
- CDREQD:
- DB 000H ; CURRENT INDIC AND DMA?
- NDREQD:
- DB 000H ; NAMED DIRECTORIES?
- Z2CLASS:
- DB 1 ; CLASS 1
- DB 'ZCPR2'
- DS 10 ; RESERVED
-
- ;
- ; END OF SINSFORM -- STANDARD DEFAULT PARAMETER DATA
- ;
- ;******************************************************************
- ;
- iobase:
- dw 0 ; I/O Driver Base Address
-
- ;
- ; Start of Program
- ;
- start:
- call print
- db 'RECORD, Version '
- db (vers/10)+'0','.',(vers mod 10)+'0',0
-
- lhld iobase ;Check for I/O Driver Defn
- mov a,h
- ora l
- jnz start0
- call print
- db cr,lf,'Abort -- I/O Driver Address NOT Defined',0
- ret
-
- start0:
- call status ;Call Status Routine
- jz nodriver ;No Driver Available?
- cpi 80H ;MUST have Disk Driver Module (> 80H) Loaded
- jnc start1
- call print
- db cr,lf,'Abort -- Disk Driver Module NOT Loaded',0
- ret
- nodriver:
- call print
- db cr,lf,'Abort -- No I/O Driver Module Loaded',0
- ret
-
- start1:
- lda fcb ;Get first char
- cpi 'O' ;Must be O
- jnz help
- lda fcb+1 ;Get 2nd char
- cpi 'N' ;ON?
- jnz off
- on:
- call getfile ;Get File Name
- lda fcb2 ;Printer?
- cpi 'P'
- jnz on1
- call lopen ;TTY (HL pts to File FCB)
- call print
- db cr,lf,'++ TTY Recording ON ++',0
- ret
- on1:
- call copen ;CRT (HL pts to File FCB)
- call print
- db cr,lf,'++ CRT Recording ON ++',0
- ret
- off:
- lda fcb2 ;Printer?
- cpi 'P'
- jnz off1
- call print
- db cr,lf,'++ TTY Recording OFF ++',cr,lf,0
- call lclose ;Close Disk File
- ret
- off1:
- call print
- db cr,lf,'++ CRT Recording OFF ++',cr,lf,0
- call cclose ;Close Disk File
- ret
- ;
- ; Print Help Message
- ;
- help:
- call print
- db cr,lf
- db cr,lf,'RECORD turns on and off recording of screen displays'
- db cr,lf,'on disk under ZCPR2 with the SYSIO Redirectable I/O '
- db 'Drivers'
- db cr,lf,'engaged.'
- db cr,lf
- db cr,lf,'It is invoked by two forms:'
- db cr,lf
- db cr,lf,' RECORD ON or RECORD ON PRINTER'
- db cr,lf,' RECORD OFF or RECORD OFF PRINTER'
- db cr,lf
- db cr,lf,'Minimum Required Option Forms are ON, OF, and P:'
- db cr,lf,' RECORD ON P = RECORD ON PRINTER'
- db cr,lf,'If the P option is given, then TTY output is '
- db 'recorded,'
- db cr,lf,'else CRT output is recorded.'
- db cr,lf,0
- ret
- ;
- ; Obtain Name of Output File and Return Pointer to its FCB in HL
- ;
- getfile:
- call print
- db cr,lf,'Output File Name (<CR> for DISKOUT)? ',0
- mvi a,0ffh ;Caps
- call bbline ;Get user Input
- call sblank ;Skip to Non-Blank
- ora a ;EOL?
- jz defexit ;Done if Default
- lxi d,confcb ;Pt to FCB
- push d ;Save ptr for return
- call fname ;Extract Name
- jz uderr ;No UD Allowed
- mov a,c ;Check for any UD
- cpi 0ffh
- jnz uderr
- mov a,b
- cpi 0ffh
- jz getf1
- uderr:
- call print
- db cr,lf,'Override -- File is Placed in your Current Directory'
- db cr,lf,0
- getf1:
- pop h ;Get ptr to FCB
- ret
- defexit:
- lxi h,confcb ;Default FCB
- lda fcb2 ;Check for Printer
- cpi 'P'
- rnz
- lxi h,prtfcb ;Printer FCB
- ret
- ;
- ; Skip to Non-Blank
- ;
- sblank:
- mov a,m ;Get char
- inx h ;Pt to next
- cpi ' ' ;Loop if Space
- jz sblank
- dcx h ;Pt to Non-Blank Char
- ret
-
- ;
- ; I/O Driver Interface Routines
- ;
- status:
- push h ;Save HL
- push d ;Save DE
- lxi d,0 ;No Offset for Status
- runio:
- lhld iobase ;Get I/O Base Address
- dad d ;Pt to Routine
- pop d ;Restore DE
- xthl ;Restore HL and Place Address on Stack
- ret ;"Run" Routine
- copen:
- push h ;Save Regs
- push d
- lxi d,36 ;Offset for Console Open Routine
- jmp runio ;Run Routine
- cclose:
- push h ;Save Regs
- push d
- lxi d,39 ;Offset for Console Close Routine
- jmp runio
- lopen:
- push h ;Save Regs
- push d
- lxi d,42 ;Offset for Printer Open Routine
- jmp runio
- lclose:
- push h ;Save Regs
- push d
- lxi d,45 ;Offset for Printer Close Routine
- jmp runio
-
- ;
- ; FCBs
- ;
- confcb:
- db 0
- db 'DISKOUT '
- db 'CON'
- ds 24
- prtfcb:
- db 0
- db 'DISKOUT '
- db 'PRT'
- ds 24
-
- end
-