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
Wrap
Text File
|
2000-06-30
|
7KB
|
348 lines
;
; 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