mirror of https://github.com/wwarthen/RomWBW.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
233 lines
6.9 KiB
233 lines
6.9 KiB
;
|
|
|
|
TITLE ZFORS.Z80 - 09/29/88 - ZMD Sysop Description Utility
|
|
; Copyrighted (c) 1987, 1988
|
|
; Robert W. Kramer III
|
|
|
|
PAGE
|
|
;- -;
|
|
; Update History ;
|
|
; ;
|
|
; Date Release Comments ;
|
|
; -------- ------- ---------------------------------------------- ;
|
|
; ;
|
|
; 09/29/88 v1.50 - Added trivial routines to display the user's ;
|
|
; prompt selections to screen. ;
|
|
; 03/13/88 v1.49 - No changes made to this file ;
|
|
; 03/13/88 v1.48 - Had a small problem with TPA fix which has been ;
|
|
; corrected. CHKTPA was calculating the total ;
|
|
; number of bytes available for DBUF, but wasn't ;
|
|
; clearing register L (forcing an even amount of ;
|
|
; sectors before initializing OUTSIZ buffer limit ;
|
|
; comparison word). This may have introduced ;
|
|
; minimal garbage to your FOR file if your FOR ;
|
|
; file is large enough to fill available TPA with ;
|
|
; ZMD, ZFORS or to the log file if running ZMDEL. ;
|
|
; - Rewrote OUTCHR routine in ZMDSUBS. ;
|
|
; - Redefined buffer table at end of programs. STACK;
|
|
; and filename buffers now EQUated with offsets ;
|
|
; from the last switch/toggle in program instead ;
|
|
; of with DS directive. ;
|
|
; - Some systems which do NOT have an interrupt ;
|
|
; driven keyboard may have noticed problems when ;
|
|
; an invalid key was entered in the ZNEWP, ZFORP ;
|
|
; and ZMDEL programs. In ZNEWP and ZFORP, if a ;
|
|
; CR was entered to pause the output, output was ;
|
|
; limited to one line at a time per key pressed. ;
|
|
; If an invalid key was hit, output would have ;
|
|
; remained in a paused state until one of the ;
|
|
; abort keys were pressed. This was difficult to ;
|
|
; find since my keyboard is interrupt driven and ;
|
|
; I could not duplicate the problem on my own ;
|
|
; system. ;
|
|
; 02/25/88 v1.47 - No change(s) made to this file
|
|
; 01/27/88 v1.46 - Set MODE to 255 so ZMDSUBS knows we might be ;
|
|
; running in local mode and not to worry if BYE ;
|
|
; is running or not when CHKENV checks to see ;
|
|
; which clock features are valid. ;
|
|
; 01/17/88 v1.45 - First public release ;
|
|
; 12/06/87 v1.02 - Fixed numerous trivial bugs. ;
|
|
;- -;
|
|
|
|
;-------------------------------------------------------------------------;
|
|
; EXTERNAL Declarations: |
|
|
;-------------------------------------------------------------------------;
|
|
|
|
|
|
EXTRN CLRLIN,DECOUT,DSCFLG,ERXIT,EXIT,FILCNT,GETDAT
|
|
EXTRN GETDSC,GETFN,GETKIND,ILPRTB,INPUT,NEWNAM,OLDDRV
|
|
EXTRN OLDUSR,OPNFOR,PRINTV,RECAR1,SHOCAT,STACK,TYPE
|
|
EXTRN UCASE,NOFOR,MODE
|
|
|
|
;
|
|
;-------------------------------------------------------------------------;
|
|
; Program Starts Here |
|
|
;-------------------------------------------------------------------------;
|
|
|
|
|
|
.Z80
|
|
ASEG
|
|
ORG 100H ; Program starts
|
|
JP BEGIN ; Jump around configuration table
|
|
INCLUDE ZMDHDR.Z80 ; Include the ZMD header overlay
|
|
.REQUEST ZMDSUBS ; Include the ZMD subroutines
|
|
|
|
;
|
|
;
|
|
; Save CP/M stack, initialize new one for this program
|
|
;
|
|
BEGIN: LD (STACK),SP ; Save return address to CCP
|
|
LD SP,STACK ; Initialize new one for this program
|
|
|
|
;
|
|
; Save current drive/user
|
|
;
|
|
LD A,255 ; Get current user
|
|
CALL RECAR1
|
|
LD (OLDUSR),A ; Store it
|
|
LD C,CURDRV ; Get current drive
|
|
CALL BDOS
|
|
LD (OLDDRV),A ; Store it
|
|
|
|
;
|
|
; Disable sleepy caller timeout and set description routines for up to
|
|
; 50 new entries
|
|
;
|
|
XOR A
|
|
LD (DESWAIT),A ; Disable sleepy caller timer
|
|
LD A,50
|
|
LD (FILCNT),A ; Allow up to 50 descriptions
|
|
|
|
LD A,255
|
|
LD (MODE),A ; Tell ZMDSUBS we're a sysop utility
|
|
|
|
;
|
|
; Display program name and version
|
|
;
|
|
BEGIN1: LD HL,SYSFOR ; Point to name of this program
|
|
CALL PRINTV ; Display it
|
|
|
|
LD A,(DESCRIB) ; Regular FOR descriptions?
|
|
OR A
|
|
JP NZ,MAKDESC ; Yes, skip next
|
|
|
|
LD A,(MSGDESC) ; BBS message base descriptions?
|
|
OR A
|
|
JP Z,NOFOR ; No, descriptions disabled
|
|
LD A,1
|
|
LD (DSCFLG),A ; Set flag to show message base descriptions
|
|
LD A,(PRUSR) ; Get the private user
|
|
LD (USER),A ; FOR destination
|
|
LD A,(PRDRV) ; Get the private drive
|
|
LD (DRIVE),A ; FOR destination
|
|
JP MAKFN ; Skip date stuff
|
|
|
|
;
|
|
; Get the date of the upload if suppose to.
|
|
;
|
|
MAKDESC:LD A,(DSTAMP) ; Datestamping description header?
|
|
OR A
|
|
JP Z,MAKFN ; No, go get filename
|
|
CALL ILPRTB
|
|
DB 'Date of upload: ',0
|
|
CALL GETDAT ; Get the date
|
|
|
|
;
|
|
; Get the filename (no spaces with '.' filename seperator)
|
|
;
|
|
MAKFN: CALL ILPRTB
|
|
DB CR,LF
|
|
DB ' Name of file: ',0
|
|
CALL GETFN ; Get filename
|
|
CALL CLRLIN ; Clear current line
|
|
LD A,B ; Get filename bytes remaining count in A
|
|
CP 11 ; Anything entered?
|
|
JP NZ,GOTNM1 ; Yes, skip this
|
|
|
|
;
|
|
; No filename was entered, check for save or abort, else continue
|
|
;
|
|
CALL ILPRTB
|
|
DB 'Save, Continue, Abort: ',0
|
|
CALL INPUT ; Get character
|
|
CALL UCASE ; Convert to uppercase
|
|
CP 'S' ; Save changes?
|
|
JP Z,OPNFOR ; Yes, write current buffer to FOR file
|
|
|
|
CP 'A' ; Abort program?
|
|
JP NZ,BEGIN1 ; No, get next character
|
|
CALL ILPRTB
|
|
DB CR
|
|
DB 'Abort with NO changes? ',0
|
|
CALL INPUT
|
|
CALL UCASE
|
|
CP 'Y'
|
|
JP NZ,BEGIN1
|
|
JP EXIT ; Then abort
|
|
|
|
;
|
|
; Display file descriptor/upload areas and get choice
|
|
;
|
|
GOTNM1: CALL GETKIND ; Get file category for description header
|
|
|
|
;
|
|
; Show the drive/user
|
|
;
|
|
LD A,(MSGDESC) ; Using BBS message base for descriptions?
|
|
OR A
|
|
JP NZ,SHOWDU ; Yes, show drive/user of uploaded file
|
|
LD A,(INCLDU) ; Include du in description header?
|
|
OR A
|
|
JP Z,SHOWFN ; No, then skip this stuff
|
|
|
|
SHOWDU: LD A,(DRV) ; Get upload drive
|
|
CALL TYPE ; Output to console
|
|
LD A,(USR) ; Get upload user area
|
|
LD H,0
|
|
LD L,A ; In A
|
|
CALL DECOUT ; Decimal output routine
|
|
LD A,':' ; Output colon
|
|
CALL TYPE
|
|
|
|
;
|
|
; Show the filename
|
|
;
|
|
SHOWFN: LD HL,NEWNAM
|
|
|
|
SHONM1: LD A,(HL)
|
|
CP LF
|
|
JP Z,SHOWCT
|
|
CALL TYPE
|
|
INC HL
|
|
JP SHONM1
|
|
|
|
;
|
|
; Show the file descriptor/upload area
|
|
;
|
|
SHOWCT: LD A,(ASKIND) ; Supposed to be showing file descriptor?
|
|
OR A
|
|
JP Z,MKENTRY ; No, get the description
|
|
CALL ILPRTB
|
|
DB ' - ',0
|
|
CALL SHOCAT ; If so, show it
|
|
|
|
;
|
|
; Get up to 7 lines for description
|
|
;
|
|
MKENTRY:CALL GETDSC ; Get up to 7 lines for description
|
|
JP NZ,BEGIN1 ; If none entered, or incorrect, skip next
|
|
|
|
LD IY,FILCNT ; Else point to maximum entries left
|
|
DEC (IY) ; One less to go
|
|
JP BEGIN1 ; Get next one
|
|
|
|
;
|
|
; These next are dummy routines to satisfy ZMDSUBS external requests.
|
|
; They do nothing, but leave them alone.
|
|
;
|
|
DONE:: JP EXIT ; Exit routine can take care of us
|
|
TIME:: RET
|
|
|
|
|
|
END
|
|
|