.NLIST .ENABL LC .MACRO ...CM. .REM ~ Copyright (c) 1998 by Mentec, Inc., Nashua, NH. All rights reserved This software is furnished under a license for use only on a single computer system and may be copied only with the inclusion of the above copyright notice. This software, or any other copies thereof, may not be provided or otherwise made available to any other person except for use on such system and to one who agrees to these license terms. Title to and ownership of the software shall at all times remain in Mentec, Inc. The information in this document is subject to change without notice and should not be construed as a commitment by Digital Equipment Corporation, or Mentec, Inc. Digital and Mentec assume no responsibility for the use or reliability of its software on equipment which is not supplied by Digital or Mentec, and listed in the Software Product Description. ~ .ENDM ...CM. .MACRO .BSECT NAME ..BS.. = 1 .ENDM .BSECT .MACRO BS NAME .IF NB NAME NAME == ..BS.. .ENDC ..BS.. = ..BS.. * 2 .ENDM BS .MACRO .ERR AREA,CODE,LEVEL,RETURN,FILE,TABLE,PREFIX,LEVBYT,RETRY,ASCII .IF NB AREA .IF DIF ,AREA MOV AREA,R0 .ENDC .ENDC .IF NB CODE MOVB CODE,@R0 .ENDC .RET.. = 0 ...... = 0 .IF NB RETURN .IRPC ..RET., .IF EQ ...... .IIF IDN ..RET., .RET.. = 200 ...... = 1 .ENDC .ENDM .ENDC .ASC.. = 0 .IIF NB .ASC.. = 40 ...... = 0 .IRPC ..LEV., .IF EQ ...... MOVB #''..LEV.!.RET..!.ASC..,1(R0) ...... = 1 .ENDC .ENDM .IIF NB MOV PREFIX,2(R0) .IIF NB MOV LEVBYT,4(R0) .IIF NB MOV TABLE,6(R0) .IF NB MOV FILE,10(R0) .IIF NB .ERROR ; F I L E and A S C I I can not both be specified; .IFF .IF NB MOV ASCII,10(R0) .IFF CLR 10(R0) .ENDC .ENDC .IIF NB MOV RETRY,12(R0) JSR PC,$ERROR .ENDM .ERR .MACRO .OPEN FDB,LIST .IF NB FDB .IF DIF ,FDB MOV FDB,R0 .ENDC .ENDC .IF NB LIST .IF DIF ,LIST MOV LIST,R1 .ENDC .ENDC JSR PC,$OPEN .ENDM .OPEN .MACRO .FDBLK .DFFDB ...PC1 = . .BLKB FDB$SZ ...PC2 = . .MACRO .FDBLK ...PC1 = . .BLKB FDB$SZ ...PC2 = . .ENDM .FDBLK .ENDM .FDBLK .MACRO .DFFDB .DSECT 1,GLOBAL=YES DS F.OPIN,BYTE DS F.OPOUT .DSECT 10,GLOBAL=YES DS F.IOIN,BYTE DS F.IOOUT .DSECT GLOBAL=YES ; File open offsets DS F.OP.,,0 DS F.OPCH,BYTE ;Open channel DS F.OPCD,BYTE ;Open code DS F.OPNM ;-> File name DS F.OPLN ;Length of file for open (seq num for .LOOKUP) DS F.OPSN ;Seq num for .ENTER (unused in .LOOKUP) DS F.IO.,,0 DS F.IOCH,BYTE ;Channel DS F.IOCD,BYTE ;.READx, .WRITx code DS F.IOBK ;Current I/O block number DS F.IOBF ;-> I/O buffer DS F.IOWC ;I/O word count DS F.IOCR ;I/O completion routine ; .DSTATUS information block DS F.DS.,,0 DS F.DVTP,BYTE ;Device code DS F.DVST,BYTE ;Device status byte DS F.DVHS ;Handler size DS F.DHEP ;Handler entry point DS F.DVSZ ;Size of device ; .GET/.PUT information DS F.BPTR ;PUT, GET buffer pointer DS F.RSIZ ;Record size DS F.BFSZ ;I/O buffer size in bytes DS F.URBA ;User record buffer address DS F.NRBD,,2 ;-> Record, length of record DS F.IOBS ;Allocated size of I/O buffer DS F.URBS ;Allocated size of user record buffer DS F.HNLD ;Device handler load address DS F.HSIZ ;Device handler space size DS F.ERR,BYTE ;I/O error byte DS FDB$EN,,0 FDB$SZ = &177776 .DSECT FDB$SZ,GLOBAL=YES DS FDB$SZ,,0 ;Size of the FDB .MACRO .DFFDB .ENDM .DFFDB .ENDM .DFFDB .MACRO .DFPAG .DSECT 1010,GLOBAL=YES DS P$GSIZ ;Page size .DSECT 1,GLOBAL=YES DS PG$WRT ;Page written into flag .DSECT GLOBAL=YES DS P$GNXT ;Link to next page DS P$GBLK,BYTE ;Page relative block number DS P$GSTS,BYTE ;Page status byte DS P$GTIM ;Time of last reference DS P$GLOK ;Page lock count DS P$GHD,,0 ;Page header size .MACRO .DFPAG .ENDM .DFPAG .ENDM .DFPAG .MACRO .DFFER .ENDM .DFFER .MACRO .FILE TYPE,CHAN,NAME,RECSIZ=80.,LEN=0,SEQNUM=0,BUFSIZ=512. .FDBLK . = ...PC1 + F.OPCH .BYTE CHAN .BYTE F.OP'TYPE .IF NB NAME .WORD NAME .IFF .WORD 0 .ENDC .IF IDN ,TYPE .WORD SEQNUM .WORD 0 .IFF .WORD LEN .WORD SEQNUM .ENDC .BYTE CHAN .BYTE F.IO'TYPE .WORD 0 .WORD 0 .WORD BUFSIZ / 2 .WORD 0 . = ...PC1 + F.RSIZ .WORD RECSIZ .WORD BUFSIZ .IF IDN ,TYPE .WORD 1 .ENDC . = ...PC2 .ENDM .FILE ;+ ; .MACRO DSECT N ; ; START A STORAGE LAYOUT DEFINITION BLOCK AT 'N' (DEFAULT IS 0) ;- .MACRO .DSECT N=0,GLOBAL=NO ..TEMP = N ..GLBL = 0 .IIF IDN ,, ..GLBL = 1 .ENDM .DSECT ;+ ; .MACRO DS NAME,UNIT,SIZE,GLOBAL ; ; DEFINE STORAGE IN A STORAGE LAYOUT ; 'NAME' IS A SYMBOL THAT IS EQUATED TO THE CURRENT OFFSET IN THE LAYOUT ; IF BLANK, NO SYMBOL IS DEFINED BUT SPACE IS RESERVED ; 'UNIT' IS NON-BLANK TO DEFINE BYTES, BLANK TO DEFINE WORDS ; 'SIZE' IS THE SIZE OF THE ENTITY IN UNITS OF BYTES OR WORDS (DEFAULT 1) ; TYPICAL USES: ; DS FOO RESERVE 1 WORD FOR FOO ; DS FOO,,3 RESERVE 3 WORDS FOR FOO ; DS FOO,BYTE,1 RESERVE 1 BYTE FOR FOO ; DS FOO,,0 DEFINE FOO HERE, BUT RESERVE NOTHING ; DS ,,3 RESERVE 3 WORDS ;- .MACRO DS NAME,UNIT,SIZE=1,GLOBAL .IF NB NAME .IF B .IF NE ..GLBL .IRP N,<\..TEMP> ;.LIST NAME == N ;.NLIST .ENDR .IFF .IRP N,<\..TEMP> ;.LIST NAME = N ;.NLIST .ENDR .ENDC .IFF .IRP N,<\..TEMP> ;.LIST NAME == N ;.NLIST .ENDR .ENDC .ENDC .IF NB UNIT ..TEMP = ..TEMP + SIZE .IFF ..TEMP = ..TEMP + <2*> .ENDC .ENDM DS .MACRO SOB REG,LAB DEC REG BNE LAB .ENDM SOB .MACRO PUTLIN BUF,LEN MOV LEN,-(SP) MOV BUF,-(SP) JSR PC,$PUTLIN .ENDM PUTLIN .MACRO GET$S FDB MOV FDB,R0 CALL $GETLN .ENDM GET$S .MACRO PUT$S FDB,BUFFER,LENGTH MOV FDB,R0 MOV BUFFER,F.NRBD+2(R0) MOV LENGTH,F.NRBD(R0) CALL $PUTLN .ENDM PUT$S .MACRO UNORG .ENDM UNORG .MACRO ORIGIN SECT,LIST .MACRO UNORG .LIST BEX PSECT SECT, .ENDM UNORG PSECT , .NLIST BEX .ENDM ORIGIN .MACRO PSECT SECT,LIST .LIST BEX .IF IDN ,<*> UNORG .NLIST BEX .MEXIT .IFF .IF NB .PSECT SECT,LIST .IFF .PSECT SECT .ENDC .ENDC .NLIST BEX .ENDM PSECT .MACRO ERRMSG NAME,TEXT DS NAME,BYTE .PSECT .LIBD. EM.'NAME: .ASCII \TEXT\<200> .PSECT .LIBP. .WORD EM.'NAME .ENDM ERRMSG .MACRO MSGLST NAME .DSECT .PSECT .LIBP. NAME: .WORD MAX.FE .ENDM MSGLST .MACRO MSGEND DS MAX.FE .ENDM MSGEND ;+ ; This macro generates calls to the formatting routine. The arguments ; are: ; BUFFER - a pointer to an output buffer. If not specified, ; R0 is assumed to point the output buffer. ; PICTUR - an ASCII string enclosed in '<>', containing the ; format string and/or formatting directives. See ; comments in file RESRC1.MAC. ; ARGUMENTS- values contained in '<>' to satisfy any formatting ; directives. SP addressing is not valid. ;- .MACRO FORMAT BUFFER,PICTUR,ARGUMENTS,LAB1 .IF NB PSECT .LIBD. ...FMT = . .ASCIZ \PICTUR\ PSECT * .ENDC ...ARG = 0 ..ARGC = 0 .IRP ARG, ..ARGC = ..ARGC +1 .ENDM ..LOOP = ..ARGC .REPT ..ARGC ..LOP1 = ..LOOP .IRP ARG, ..LOP1 = ..LOP1 -1 .IF EQ ..LOP1 MOV ARG,-(SP) ...ARG = ...ARG +1 .ENDC .ENDM ..LOOP = ..LOOP -1 .ENDR .IF NB MOV #...FMT,-(SP) .IFF .IF NB LAB1 MOV LAB1,-(SP) .IFF .ERROR ;No FORMAT string specified .ENDC .ENDC ...ARG = ...ARG +1 MOV #<...ARG*2>,-(SP) .IF NB BUFFER MOV BUFFER,R0 .ENDC .GLOBL $FORMAT JSR PC,$FORMAT .ENDM FORMAT .MACRO PUSH ARGS .IRP ARG, MOV ARG,-(SP) .ENDR .ENDM PUSH .MACRO POP ARGS .IRP ARG, MOV (SP)+,ARG .ENDR .ENDM POP .LIST