.NLIST .ENABL LC ; 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. .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