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
/
TEMPLATE.MAC
< prev
next >
Wrap
Text File
|
2000-06-30
|
18KB
|
779 lines
;
; PROGRAM: TEMPLATE
; AUTHOR: Richard Conn
; VERSION: 1.2
; DATE: 26 Apr 83
; PREVIOUS VERSIONS: 1.1 (25 Apr 83), 1.0 (15 Jan 83)
;
VERS equ 12
;
; << This is a Template designed to assist the programmer
; in writing ZCPR2 Utilities >>
; << Insert a Description of the Program Here >>
;
; TEMPLATE is provided as a template around which to build
; ZCPR2 utilities. The body of TEMPLATE calls the following routines
; which must be provided for the specific function:
;
; BANNER -- Prints Name of Program
; HELP -- Prints Help Message
; INIT -- Performs Necessary Initializations
; DINIT -- Performs Necessary De-Initializations
; OPTAB -- Table of Command Line Options
; FUNCTION -- Performs Function of Program
; ABORT -- Prints Abort Message and Exits
;
; The flow of TEMPLATE is as follows:
; 1) Init ZCPR2 Buffers and Save Command Line
; 2) Print Banner by Calling BANNER
; 3) Call INIT Routine to Initialize Program
; 4) Process Command Line Options
; -- OPTAB is used to specify option chars
; and the routines used to process them
; -- Each option character routine is provided
; by the programmer
; 5) Print HELP Message if Invalid Option encountered
; and exit, calling DINIT on the way out
; 6) Select Files, allowing for Inspection
; 7) Call FUNCTION for each file selected; when FUNCTION
; is called, program has already been logged into the
; the directory containing the desired file and HL pts
; to the FCB of the desired file
; 8) Exit, calling DINIT on the way out
;
; Nomenclature:
; All Labels Used internal to TEMPLATE are prefixed with T$
; All Labels Intended to be accessed by the programmer which
; are a part of TEMPLATE are prefixed with E$ (External)
; By employing such conventions, the programmer is relatively
; free to employ any variable names he desires without
; having to concern himself with labels and such used
; by TEMPLATE
;
;
; 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.
;
FALSE EQU 0
TRUE EQU NOT FALSE
;
; BASIC SYSLIB ROUTINES NEEDED BY TEMPLATE
;
C$ESIZE EQU 16 ; SIZE OF DIR ENTRY (FROM SYSLIB DIRF ROUTINE)
EXT DIRFS ; DIRECTORY PROCESSOR
EXT DIRPACK ; PACK DIRECTORY
EXT ZGPINS ; INIT BUFFERS
EXT ZFNAME ; FILE NAME PROCESSOR
EXT INITFCB ; INIT FCB
EXT RETUD ; RETURN CURRENT USER/DISK
EXT PUTUD ; SAVE CURRENT USER/DISK
EXT GETUD ; RESTORE CURRENT USER/DISK
EXT LOGUD ; LOG INTO USER/DISK
EXT PRINT ; PRINT STRING PTED TO BY RET ADR
EXT PADC ; PRINT A AS DECIMAL CHARS
EXT COUT ; CONSOLE OUTPUT ROUTINE
EXT CST ; CONSOLE STATUS ROUTINE
EXT CIN ; CONSOLE INPUT ROUTINE
EXT CAPS ; CAPITALIZE ROUTINE
EXT CRLF ; NEW LINE ROUTINE
EXT CLINE ; COMMAND LINE STRING SAVE ROUTINE
EXT CODEND ; CODE END COMPUTATION ROUTINE
EXT F$OPEN ; FILE OPEN
EXT F$READ ; BLOCK READ
EXT F$CLOSE ; FILE CLOSE
;
; Insert Function-Required Library References Here
;
;
; CP/M EQUATES
;
CPM EQU 0 ; WARM BOOT
BDOSE EQU CPM+5 ; BDOS ENTRY
FCB EQU CPM+5CH ; FCB
TBUFF EQU CPM+80H ; INPUT LINE BUFFER
DEL EQU 7FH ; <DEL>
CR EQU 13 ; <CR>
FF EQU 12 ; <FF>
LF EQU 10 ; <LF>
CTRLC EQU 'C'-'@' ; ^C
CTRLG EQU 'G'-'@'
CTRLH EQU 'H'-'@'
CTRLI EQU 'I'-'@'
CTRLS EQU 'S'-'@'
CTRLX EQU 'X'-'@'
CTRLZ EQU 'Z'-'@'
;
; Branch to Start of Program
;
JMP T$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 0 ; CLASS 0
DB 'ZCPR2'
DS 10 ; RESERVED
;
; END OF SINSFORM -- STANDARD DEFAULT PARAMETER DATA
;
;******************************************************************
;
;
; **** Special Initial Value Area for GENINS
;
;
; Start of Program
;
T$START:
LXI H,0 ; GET STACK PTR
DAD SP
SHLD V$STACK ; SAVE IT
LXI SP,V$STACK ; SET SP
XRA A ; A=0
STA V$INSPECT ; TURN OFF FILE INSPECTION
CALL PUTUD ; SAVE CURRENT USER/DISK AWAY
CALL RETUD ; GET CURRENT USER/DISK
MOV A,B ; SAVE DISK
STA V$DISK
MOV A,C ; SAVE USER
STA V$USER
CALL ZGPINS ; INIT BUFFERS
LXI H,TBUFF ; SAVE COMMAND LINE
CALL CLINE
SHLD V$CMDLNE ; SAVE PTR
;
; Banner of Program
;
CALL BANNER ; PRINT BANNER PROVIDED BY USER
;
; Check for Help Request
;
LDA FCB+1 ; GET FIRST CHAR OF FILE NAME
CPI ' ' ; NO FILE SPEC?
JZ T$HELPENT
CPI '/' ; OPTION CAUGHT?
JNZ T$ECONT
;
; Print Help Information
;
T$HELPENT:
CALL HELP ; PRINT PROGRAM'S HELP MESSAGE
;
; RETURN TO OS
;
T$RETURN:
CALL DINIT ; DEINIT PROGRAM
LHLD V$STACK ; GET OLD STACK
SPHL ; SET IT
RET
;
; PROGRAM'S INIT ROUTINE
;
T$ECONT:
CALL INIT ; PROG INIT ROUTINE
;
; EXTRACT FLAGS IF PRESENT
;
LXI H,0 ; SET FILE COUNT
SHLD V$FILECNT
LHLD V$CMDLNE ; PT TO BUFFER
;
; SKIP TO FILE NAME STRING
;
CALL T$SBLANK ; SKIP OVER BLANKS
;
; SKIP TO END OF FILE NAME STRING
;
CALL T$SNBLANK ; SKIP OVER NON-BLANKS
;
; CHECK FOR LEADING SLASH ON OPTION AND SKIP IT IF SO
;
T$OPT:
CPI '/' ; OPTION CHAR?
JNZ T$OPTION
INX H ; SKIP SLASH
;
; PROCESS LIST OF OPTIONS
;
T$OPTION:
MOV A,M ; GET BYTE
ORA A ; DONE?
JZ T$DSPEC
INX H ; PT TO NEXT CHAR
CPI ' ' ; SKIP OVER SPACES
JZ T$OPTION
MOV C,A ; COMMAND IN C
LXI D,OPTAB ; PT TO OPTION TABLE
T$OPTL:
LDAX D ; GET OPTION LETTER
ORA A ; END OF TABLE?
JZ T$HELPENT ; HELP IF SO
CMP C ; MATCH?
JZ T$OPTM ; PROCESS IF SO
INX D ; PT TO NEXT ENTRY
INX D
INX D
JMP T$OPTL
;
; PROCESS OPTION
;
T$OPTM:
PUSH H ; SAVE HL ON STACK
LXI H,T$OPTION ; GET RETURN ADDRESS
XTHL ; ... ON STACK AND RESTORE HL
INX D ; PT TO ADDRESS
LDAX D ; GET ADDRESS LOW
MOV B,A ; ... IN B
INX D
LDAX D ; GET ADDRESS HIGH
MOV D,A ; ... IN D
MOV E,B ; LOW IN E
PUSH D ; PUT ADDRESS ON STACK
MOV A,C ; COMMAND IN A
RET ; "CALL" OPTION ROUTINE
;
; BEGIN MOVING THROUGH FILE NAMES, SEPARATED BY COMMAS
;
T$DSPEC:
LHLD V$CMDLNE ; PT TO FIRST BYTE
CALL T$SBLANK ; SKIP TO NON-BLANK
;
; MAJOR REENTRY POINT WHEN FILE SPECS ARE SEPARATED BY COMMAS
; HL PTS TO FIRST BYTE OF NEXT FILE SPEC
;
T$DSPEC1:
LXI SP,V$STACK ; RESET STACK
CALL GETUD ; RESET USER IF NECESSARY
LXI D,V$NTFCB ; PT TO FCB IN DE, PT TO 1ST CHAR OF FN IN HL
CALL ZFNAME ; EXTRACT FILE NAME INTO FCB, AND GET DISK AND USER
JZ T$DERR ; ERROR HANDLER
SHLD V$NEXTCH ; SAVE PTR TO DELIMITER WHICH ENDED SCAN
MOV A,B ; SAVE POSSIBLE DRIVE SPEC
CPI 0FFH ; CURRENT DISK?
JZ T$DSPEC2
LDA MDISK ; GET MAX DISK NUMBER
DCR B ; ADJUST TO WITHIN BOUNDS 0-15
CMP B ; WITHIN BOUNDS?
MOV A,B ; GET DISK NUMBER IN A
JNC T$USPEC
T$DERR:
CALL PRINT
DB CR,LF,'Invalid Disk Specification',0
JMP T$RETURN
;
; SET CURRENT DISK
;
T$DSPEC2:
LDA V$DISK ;GET CURRENT DISK
MOV B,A ;... IN B
; CHECK FOR USER NUMBER
T$USPEC:
MOV A,C ; GET NEW USER NUMBER
CPI 0FFH ; DEFAULT USER?
JZ T$USPEC1
CPI '?' ; ALL USERS NOT ALLOWED?
JZ T$UERR
LDA MUSER ; GET MAX USER NUMBER
CMP C
MOV A,C ; USER NUMBER IN A
JNC T$FCT
T$UERR:
CALL PRINT
DB CR,LF,'Invalid User Number',0
JMP T$RETURN
T$USPEC1:
LDA V$USER ;GET CURRENT USER
MOV C,A ;... IN C
;
; LOAD DIRECTORY AND PERFORM FUNCTION
;
T$FCT:
MOV A,B ; SAVE NEW DISK/USER AWAY
STA V$CDISK ; CURRENT DISK
MOV A,C
STA V$CUSER ; CURRENT USER
CALL LOGUD ; LOG INTO ACCOUNT
CALL CODEND ; PT TO END OF CODE
CALL RETUD ; GET USER NUMBER FOR DIRFS
MVI A,11000000B ; SELECT SYS AND NON-SYS FILES
ORA C ; OR IN USER NUMBER
LXI D,V$NTFCB ; PT TO FCB
CALL INITFCB ; INIT THE FCB
CALL DIRFS ; LOAD DIR, SELECT FILES, PACK, AND ALPHABETIZE
;
; DETERMINE BEGINNING OF SCRATCH AREA (SCRATCH) AND SIZE IN PAGES (BCNT)
;
PUSH H ; SAVE PTR AND COUNT
PUSH B
LXI D,C$ESIZE ; SET PTR TO NEXT FREE BLOCK
T$FCTFRE:
MOV A,B ; DONE?
ORA C
JZ T$FCTFR1
DAD D ; PT TO NEXT
DCX B ; COUNT DOWN
JMP T$FCTFRE
T$FCTFR1:
INR H ; NEXT PAGE
MVI L,0
SHLD V$SCRATCH ; SET PTR TO SCRATCH AREA
XCHG ; PTR IN DE
LHLD BDOSE+1 ; COMPUTE BLOCK BUFFER SIZE
MOV A,H ; ADJUST FOR ZCPR2
SUI 10
SUB D ; A=SIZE IN BLOCKS
STA V$BCNT ; SET BLOCK COUNT
POP B ; RESTORE AND SAVE REGS
POP H
;
; ALLOW USER TO INSPECT FILES
;
PUSH H
PUSH B
CALL T$ICHECK ; CHECK FOR INSPECT OPTION AND INSPECT IF SET
POP B ; RESTORE COUNT AND PTR
POP H
;
; PERFORM FUNCTION; HL PTS TO FILE AND BC CONTAINS NUMBER OF FILES
;
T$FCTL:
MOV A,B ; CHECK FOR COMPLETION (COUNT = 0)
ORA C
JZ T$FCTL1
DCX B ; COUNT DOWN
LXI SP,V$STACK ; RESET STACK
PUSH B ; SAVE COUNT AND PTR
PUSH H
MOV A,M ; SELECTED FILE?
ORA A ; 0=YES
CZ FUNCTION ; PERFORM FUNCTION
;
; ENTRY POINT TO SKIP TO NEXT FILE IN LIST
;
E$FCTLNXT:
LXI SP,V$STACK-4 ; RESTORE STACK
POP H ; RESTORE PTR
POP B ; RESTORE COUNT
LXI D,C$ESIZE ; PT TO NEXT ENTRY
DAD D
JMP T$FCTL
;
; CHECK FOR NEXT FILE SPEC
;
T$FCTL1:
CALL GETUD ; RETURN TO BASE USER/DISK
LHLD V$NEXTCH ; GET PTR
MOV A,M ; GET DELIM
CPI ',' ; ANOTHER FILE?
JNZ T$RETURN
INX H ; PT TO CHAR AFTER COMMA
JMP T$DSPEC1 ; CONTINUE PROCESSING
;
; INSPECT FILES -- THIS ROUTINE IS TO PERFORM A FILE INSPECTION
; ON INPUT, HL PTS TO FIRST 16-BYTE ENTRY AND BC=NUMBER OF ENTRIES
;
T$ICHECK:
MOV A,B ;ANY FILES?
ORA C ;0=NO
RZ
PUSH H ;SAVE PTRS
PUSH B
LXI D,C$ESIZE ;SIZE OF ENTRY
T$ICHK1:
MVI M,0 ;CLEAR MSBYTES
DAD D ;PT TO NEXT
DCX B ;COUNT DOWN
MOV A,B ;DONE?
ORA C
JNZ T$ICHK1
POP B ;RESTORE PTRS
POP H
LDA V$INSPECT ;INSPECT?
ORA A ;0=NO
RZ
CALL PRINT
DB CR,LF,'File Inspect Mode',0
T$ICHK2:
CALL PRINT
DB CR,LF,'Select ',0
CALL E$PRFN ;PRINT FILE NAME
CALL PRINT
DB ' -- (Y/N/Q=Select Rest/S=Skip Rest/other=Y)? '
DB 0
CALL CIN ;GET RESPONSE
CALL CAPS ;CAPITALIZE
CALL COUT ;ECHO
CPI 'Q' ;SELECT REST?
JZ T$ICHKYR
CPI 'S' ;SKIP REST
JZ T$ICHKNR
CPI 'N' ;NO TO THIS ONE?
JNZ T$ICHK3
MVI M,0FFH ;SET NO FLAG IN FILE FCB
T$ICHK3:
DAD D ;PT TO NEXT ONE
DCX B ;COUNT DOWN
MOV A,B ;DONE?
ORA C
JNZ T$ICHK2
RET
; CHECK REST OF FILES AS SELECTED
T$ICHKYR:
CALL PRINT
DB CR,LF,' Rest of Files Selected',0
RET
; CHECK REST OF FILES AS NOT SELECTED
T$ICHKNR:
MVI M,0FFH ;SET NO FLAG
DAD D ;PT TO NEXT
DCX B ;COUNT DOWN
MOV A,B ;DONE?
ORA C
JNZ T$ICHKNR
CALL PRINT
DB CR,LF,' Rest of Files NOT Selected',0
RET
;
; UTILITIES
; T$SBLANK -- SKIP BLANKS PTED TO BY HL UNTIL NON-BLANK ENCOUNTERED; HL
; T$SNBLANK -- SKIP NON-BLANKS PTED TO BY HL UNTIL BLANK OR EOL; HL
; E$PRFN -- PRINT FILE NAME PTED TO BY HL; AFFECT NOTHING
;
; SKIP UNTIL NON-BLANK
;
T$SBLANK:
MOV A,M ; LOOK FOR BLANK
INX H ; PT TO NEXT
CPI ' ' ; BLANK?
JZ T$SBLANK
DCX H ; BACK UP
RET
;
; SKIP UNTIL BLANK OR EOL
;
T$SNBLANK:
MOV A,M ; GET CHAR
INX H ; PT TO NEXT
CPI ' ' ; BLANK?
JZ T$SNB1
ORA A ; EOL?
JNZ T$SNBLANK
T$SNB1:
DCX H ; BACK UP
RET
;
; PRINT FILE NAME PTED TO BY HL
; OUTPUT TO CON:
;
E$PRFN:
PUSH H ; SAVE REGS
PUSH B
CALL RETUD ; GET CURRENT USER/DISK
MOV A,B ; GET DISK NUMBER
ADI 'A' ; CONVERT TO LETTER
CALL COUT ; PRINT LETTER
MOV A,C ; GET USER NUMBER
CALL PADC ; PRINT USER NUMBER
CALL PRINT
DB ': ',0
INX H ; PT TO FILE NAME
MVI B,8 ; PRINT NAME
CALL T$PRNT
MVI A,'.' ; DECIMAL
CALL COUT
MVI B,3 ; PRINT TYPE
CALL T$PRNT
POP B ; GET REGS
POP H
RET
;
; PRINT CHARS PTED TO BY HL FOR B BYTES
; OUTPUT TO CON:
;
T$PRNT:
MOV A,M ; GET CHAR
CALL COUT
INX H ; PT TO NEXT
DCR B ; COUNT DOWN
JNZ T$PRNT
RET
;***********************************************
;* Application-Specific Section
;***********************************************
;****************************************************
;*
;* Function-Specific Routines
;* These routines need to be customized for the
;* specific function being performed. These, in
;* effect, implement the function. Other Entry Points
;* useful to the programmer are:
;* E$FCTLNXT -- Clean Abort of Current
;* Processing and Skip
;* to Next File in List;
;* This is a Clean Way to
;* Abort FUNCTION for the
;* Next File
;* E$PRFN -- Print File Name Pted to
;* by HL; No Regs Affected
;*
;****************************************************
;
; **** EMERGENCY ABORT
;
ABORT:
CALL PRINT
db '<< Insert Your Abort Message Here >>'
DB 0
CALL GETUD ; RETURN HOME
JMP T$RETURN
;
; **** BANNER -- PRINT BANNER FOR PROGRAM (PROGRAM NAME ET AL)
;
BANNER:
CALL PRINT
db '<< Insert Banner of Program Here >>'
DB 0
RET
;
; **** HELP -- PRINT PROGRAM'S HELP MESSAGE
;
HELP:
CALL PRINT
db '<< Insert HELP Text Here >>'
DB 0
RET
;
; **** PROGRAM INIT ROUTINE
; THIS ROUTINE IS USED BY THE PROGRAM TO PERFORM ANY NECESSARY
; INITIALIZATIONS
;
INIT:
RET
;
; **** FUNCTION COMPLETE -- CLEANUP AND EXIT
; FILL THIS IN WITH CLEANUP CODE FOR EXIT
;
DINIT:
RET
;
; **** OPTION TABLE USED TO PROCESS COMMAND LINE
; EACH OPTION IS A CAPITAL LETTER OR SPECIAL CHAR FOLLOWED BY
; AN ADDRESS; THE TABLE IS TERMINATED BY A BINARY ZERO
;
OPTAB:
DB 'I' ; FILE INSPECTION OPTION
DW OPTINSP ; REMOVE THESE TWO LINES AND THE FOLLOWING ROUTINE
; IF YOU DO NOT WANT FILE INSPECTION OPTION IN
; COMMAND LINE
DB 0 ; END OF TABLE
;
; **** OPTION ROUTINES
; EACH ROUTINE IS PROVIDED THE OPTION CHARACTER IN THE A REGISTER
; AND A POINTER TO THE NEXT CHARACTER IN THE COMMAND LINE IN THE
; HL REGISTER PAIR; ONLY HL NEED TO BE PRESERVED (WITH OPTIONAL
; ADVANCEMENT TO THE NEXT OPTION) ON EXIT
;
OPTINSP:
MVI A,0FFH ; TURN ON FILE INSPECTION OPTION
STA V$INSPECT ; THIS IS PROVIDED AS A SAMPLE ROUTINE
; AND FOR THE INDICATED FUNCTION
RET
;
; **** FUNCTION -- MAIN FUNCTION OF TEMPLATE
; ON ENTRY, HL PTS TO NAME OF FILE (16 BYTES) AND USER IS LOGGED INTO
; DIRECTORY CONTAINING INDICATED FILE
;
FUNCTION:
CALL CRLF
CALL E$PRFN ; THIS IS PROVIDED AS A SIMPLE ROUTINE TO RUN
RET
;
; **** BUFFERS -- PLACE APPLICATION-SPECIFIC BUFFERS HERE
;
;***********************************************
;* End of Application-Specific Section
;***********************************************
;
; BUFFERS
;
V$DISK:
DS 1 ; HOME DISK NUMBER
V$USER:
DS 1 ; HOME USER NUMBER
V$CDISK:
DS 1 ; CURRENT DISK NUMBER
V$CUSER:
DS 1 ; CURRENT USER NUMBER
V$CMDLNE:
DS 2 ; PTR TO COMMAND LINE STRING
V$NEXTCH:
DS 2 ; PTR TO NEXT CHAR IN MULTIFILE COMMAND LINE
V$FILECNT:
DS 2 ; COUNT OF NUMBER OF FILES RENAMED
V$SCRATCH:
DS 2 ; ADDRESS OF FIRST BYTE OF SCRATCH AREA
V$BCNT:
DS 1 ; NUMBER OF PAGES IN SCRATCH AREA
V$INSPECT:
DS 1 ; INSPECT FLAG
V$NTFCB:
DS 36 ; FCB FOR NEW FILE
;
; Stack
;
DS 100 ; STACK AREA
V$STACK:
DS 2 ; OLD STACK PTR
END