Trailing-Edge
-
PDP-10 Archives
-
tops10_integ_tools_v4_10jan-86
-
70,6067/tvaxv1/tvmacr.mar
There is 1 other file named tvmacr.mar in the archive. Click here to see a list.
.MACRO WROUTDEF X
.SAVE
.PSECT DATA,LONG,NOWRT,SHR
...TMPA=.
.ASCII \ \
.=...TMPA
.NARG ARGCNT
.IF EQ ARGCNT
.ASCII \SYS$OUTPUT\
.IF_FALSE
.ASCII \X\
.ENDC
.RESTORE
PUSHAL ...TMPA
CALLS #1,G^GENR18D
.ENDM
.MACRO CVTCLP X,Y,Z
MOVB #^A'+',-Y-1(SP)
MOVC3 #Y,X,-Y(SP)
CVTSP #Y,-Y-1(SP),#15,-9-Y(SP)
CVTPL #15,-9-Y(SP),Z
.ENDM
.MACRO IF. CND
.IF EQ INITSW.&<1@1>
IF_MAX.=0
INITSW.=INITSW.!<1@1>
IF_LEV.=0
.ENDC
.IF EQ IF_LEV.
IF_STAT.=0
IF_USE.=0
IF_CNT.=0
IF_STRT.=IF_MAX.
.ENDC
IF_CNT.=IF_CNT.+1
IF_MAX.=IF_MAX.+1
IF_LEV.=IF_LEV.+1
IFC. <CND>
IF_STAT.=IF_STAT.!<1@IF_CNT.>
.ENDM
.MACRO IFC. C
.IF EQ %LOCATE(C,<*EQ>)
IFL. BEQL,\IF_MAX.
.MEXIT
.ENDC
.IF EQ %LOCATE(C,<*GT>)
IFL. BGTRU,\IF_MAX.
.MEXIT
.ENDC
.IF EQ %LOCATE(C,<*OVERFLOW>)
IFL. BVS,\IF_MAX.
.MEXIT
.ENDC
.IF EQ %LOCATE(C,<*GTS>)
IFL. BGTR,\IF_MAX.
.MEXIT
.ENDC
.IF EQ %LOCATE(C,<*NE>)
IFL. BNEQ,\IF_MAX.
.MEXIT
.ENDC
.IF EQ %LOCATE(C,<*ZERO>)
IFL. BEQL,\IF_MAX.
.MEXIT
.ENDC
.IF EQ %LOCATE(C,<*LE>)
IFL. BLEQU,\IF_MAX.
.MEXIT
.ENDC
.IF EQ %LOCATE(C,<*LES>)
IFL. BLEQ,\IF_MAX.
.MEXIT
.ENDC
.IF EQ %LOCATE(C,<*LT>)
IFL. BLSSU,\IF_MAX.
.MEXIT
.ENDC
.IF EQ %LOCATE(C,<*LTS>)
IFL. BLSS,\IF_MAX.
.MEXIT
.ENDC
.IF EQ %LOCATE(C,<*ON>)
IFL. BNEQ,\IF_MAX.
.MEXIT
.ENDC
.IF EQ %LOCATE(C,<*OFF>)
IFL. BEQL,\IF_MAX.
.MEXIT
.ENDC
.IF EQ %LOCATE(C,<*NONZERO>)
IFL. BNEQ,\IF_MAX.
.MEXIT
.ENDC
.IF EQ %LOCATE(C,<*GE>)
IFL. BGEQU,\IF_MAX.
.MEXIT
.ENDC
.IF EQ %LOCATE(C,<*GES>)
IFL. BGEQ,\IF_MAX.
.MEXIT
.ENDC
.IF EQ %LOCATE(C,<*OVER>)
IFL. BVS,\IF_MAX.
.MEXIT
.ENDC
.IF EQ %LOCATE(C,<*ERROR>)
IFL2. \IF_MAX.
.MEXIT
.ENDC
.IF EQ %LOCATE(C,<*NOERROR>)
IFL3. \IF_MAX.
.MEXIT
.ENDC
.ERROR 1;WRONG CONDITION IN IF;
.ENDM
.MACRO IFL. BI,LL,?L1
BI L1
BRW IF.'LL
IF_RTC.=1
L1:
.ENDM
.MACRO IFL2. LL,?L1
BLBC R0,L1
BRW IF.'LL
IF_RTC.=1
L1:
.ENDM
.MACRO IFL3. LL,?L1
BLBS R0,L1
BRW IF.'LL
IF_RTC.=1
L1:
.ENDM
.MACRO ENDIF.
LOCAT.
.IIF EQ IF_I.,.MEXIT
.IF NE IF_STAT.&<1@IF_I.>
LAB. IF.,\IF_LAB.
IF_STAT.=IF_STAT.&^C<1@IF_I.>
.IF_FALSE
LAB. EIF.,\IF_LAB.
.ENDC
IF_LEV.=IF_LEV.-1
IF_USE.=IF_USE.!<1@IF_I.>
.ENDM
.MACRO ELSE.
LOCAT.
.IIF EQ IF_I.,.MEXIT
BLAB. EIF.,\IF_LAB.
LAB. IF.,\IF_LAB.
IF_STAT.=IF_STAT.&^C<1@IF_I.>
.ENDM
.MACRO LAB. TT,LL
TT'LL:
.ENDM
.MACRO BLAB. TT,LL
BRW TT'LL
.ENDM
.MACRO LOCAT.
IF_I.=IF_CNT.
.REPEAT IF_CNT.
.IF EQ IF_USE.&<1@IF_I.>
.IIF EQ IF_I., .ERROR 2;UNMATCHED ELSE OR ENDIF;
IF_LAB.=IF_STRT.+IF_I.
.MEXIT
.ENDC
IF_I.=IF_I.-1
.ENDR
.ENDM
.MACRO CALLS. SUB,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10
.NARG COUNT
.IRP ARG,<A10,A9,A8,A7,A6,A5,A4,A3,A2,A1>
.IF NOT_BLANK ARG
PUSHAB ARG
.ENDC
.ENDR
CALLS #<COUNT-1>,G^SUB
.ENDM
.MACRO INITG NAM
INITSW.=0
.PSECT NAM,SHR,QUAD,NOWRT
.ENTRY NAM,^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,R11>
.ENDM
.MACRO RETURNG
RET
.ENDM
.MACRO VPASS NSEC,?L1
.SAVE_PSECT
.PSECT DATA,SHR,LONG,NOWRT
...TMP1=.
.LONG -<NSEC*10000000>,-1
.RESTORE_PSECT
$SETIMR_S DAYTIM=...TMP1
$WAITFR_S EFN=#0
BLBS R0,L1
$EXIT_S R0
L1:
.ENDM
.MACRO LOCKG LLK,?L1,?L2,?L3
BBCS #0,LLK,L3
ADDL2 R10,R9
MOVAB LLK,GTAP(R9) ;STORE ADDR OF LOCK
SUBL2 R10,GTAP(R9) ;MAKE IT OFFSET
ADDW2 #1,1+LLK
L1: ADDL3 R10,GTSWA(R9),R0
MOVB #3,(R0) ;STORE WAIT INDICATION
BBCS #0,LLK,L2
$HIBER_S
BRW L1
L2: ADDL3 R10,GTSWA(R9),R0
MOVB #0,(R0)
DECW 1+LLK ;WAIT COUNT
SUBL2 R10,R9
L3: MOVL R9,3+LLK ;PTR TO TCB
.ENDM
.MACRO UNLOCKG LLK,?L1
CMPL R9,3+LLK
BNEQ L1 ;BR IF NOT OWNER
CLRL 3+LLK
MOVB #0,LLK
TSTW 1+LLK
BEQL L1 ;BR IF NOBODY WAITING
MOVAB LLK,R1
CALLS #0,G^GADI09
L1:
.ENDM
.MACRO ABEND TXTLL,TXT
.NARG ARGCNT
.IF EQ ARGCNT-1
WROUT <TXTLL>
.IF_FALSE
WROUT TXTLL,TXT
.ENDC
$EXIT_S
.ENDM
.MACRO ABEND0 TXTLL,TXT
PUSHL R0
.NARG ARGCNT
.IF EQ ARGCNT-1
WROUT <TXTLL>
.IF_FALSE
WROUT TXTLL,TXT
.ENDC
POPL R0 ;RELOAD R0
$EXIT_S R0
.ENDM
.MACRO SDCATDEF
.SHOW ME
;
; CATALOG LAYOUT;
;;
CDBNAM=0 ;DATABASE NAME;
CDBREF=CDBNAM+10 ;REL DB NR;
CDBAFA=CDBREF+2 ;ADDR FIRST AREA;
CDBAFR=CDBAFA+4 ;ADDR FIRST RECORD;
CDBOPEN=CDBAFR+4 ;OPEN MODE;
CDBIMPT=CDBOPEN+1 ;IMPART MODE;
CDBRECA=CDBIMPT+1 ;RECORD SAVE AREA;
;;
; AREA ENTRY;
;;
CANAM=0 ;AREA NAME;
CABUF=CANAM+54 ;NUMBER OF BUFFERS;
CANBPGE=CABUF+2 ;NUMBER OF PAGES;
CASZPGE=CANBPGE+4 ;PG SIZE IN BYTES;
CALIMIT=CASZPGE+2 ;FREE SPACE LIMIT;
CAREF=CALIMIT+2 ;AREA REFERENCE;
CATYP=CAREF+2 ;AREA TYPE;
CALL=CATYP+1 ;LENGTH;
;;
; RECORD ENTRY;
;;
RECORD=0;
CRNAM=0 ;RECORD NAME;
CRREF=CRNAM+10 ;RECORD REFERENCE;
CRLNG=CRREF+2 ;RECORD LENGTH;
CRAREF=CRLNG+2 ;AREA REFERENCE;
CRAFACC=CRAREF+2 ;ADDR FIRST ACCESS PATH;
CRAFREL=CRAFACC+4 ;ADDR FIRST RELATION;
CRLL=CRAFREL+4 ;LENGTH;
;;
; ACCESS PATH;
;;
CPNAM=0 ;ACCESS PATH NAME;
CPREF=CPNAM+30 ;ACCESS PATH REFERENCE;
CPMRELAD=CPREF+2 ;ADDRESS MATCHED RELATION;
CPSRT=CPMRELAD+4 ;ACCESS PATH KIND;
CPSKETS=CPSRT+1 ;NR OF ENTRIES IN SELECT KEY;
CPLL=CPSKETS+2 ;LENGTH;
;;
; RELATION ENTRY;
;;
RELAT=0;
CSOREF=0 ;OWNER RECORD REF;
CSOKETS=CSOREF+2 ;NR OF ENTRIES IN OWNER KEY;
CSSRT=CSOKETS+2 ;RELATION MODE (OPT/MAND);
CSXMAN=^X01 ;OBLIGED;
CSXEBC=^X02 ;EBCDIC KEY SEQUENCE;
CSDUPL=CSSRT+1 ;DUPLICATES OPTION;
CSIAREF=CSDUPL+1 ;INDEX AREA REF;
CSIRREF=CSIAREF+2 ;INDEX RECORD REF;
CSAFKEY=CSIRREF+2 ;ADDR FIRST INDEX KEY;
CSLL=CSAFKEY+4 ;LENGTH;
;;
; INDEX KEY ENTRY;
;;
INDKEY=0;
CKDSP=0 ;KEY DISPLACEMENT;
CKLNG=CKDSP+2 ;KEY LENGTH;
CKLL=CKLNG+2 ;LENGTH;
;;
; LAYOUT SULM;
;;
; LOGICAL SDMS PART;
;;
CGRECOP=0 ;ADDR RECORD OCCURRENCE;
CGSAVDBK=CGRECOP+4 ;DB KEY SAVE AREA;
CGDBK=CGSAVDBK+4 ;DATABASE KEY;
CGKEY1=CGDBK+4+2 ;LOGICAL INDEX KEY;
CGKEY2=CGKEY1+254 ;OLD KEY;
CGKEY3=CGKEY2+254 ;NEW KEY;
CGRELTAB=CGKEY3+254 ;ROLLBACK TABLE;
CGSAVRTC=CGRELTAB+<10*4> ;SAVE RETURN CODE;
CGREMREF=CGSAVRTC+2 ;SAVE RECORD REF;
CGSAVRP=CGREMREF+2 ;SAVE RECORD PTR;
CGSPREL=CGSAVRP+4 ;ADDR SPECIFIC RELATION;
CGKLL=CGSPREL+4 ;LENGTH OF SELECT OR OWNER KEY;
CGKTLL=CGKLL+2 ;TOTAL LENGTH INDEX KEY;
;;
; PARAMETER AREA LOGICAL SDMS;
;;
CGPARAM=CGKTLL+2 ;PAR AREA;
CPAFNR=CGPARAM ;FUNCTION;
CPADBNR=CPAFNR+2 ;DB NR;
CPAANR=CPADBNR+2 ;AREA NR;
CPARNR=CPAANR+2 ;RECORD TYPE;
CPARLL=CPARNR+2 ;RECORD LENGTH;
CPARTN=CPARLL+2 ;RETURN CODE;
CPADBA=CPARTN+2 ;DB CATALOG ADDR;
CPADBK=CPADBA+4 ;DATABASE KEY;
CPARECA=CPADBK+4 ;ADDR RECORD;
CPACTWA=CPARECA+4 ;ADDR CURRENCY AREA;
;;
; LAYOUT INTERFACE CB TO GSBI50;
;;
CIFNR=0 ;FUNCTION;
CIACCRF=CIFNR+2 ;ACCES PATH REF;
CICATA=CIACCRF+2 ;CATALOG ADDR;
CIRECA=CICATA+4 ;RECORD ADDR;
CIACCA=CIRECA+4 ;ACC PATH ADDR;
CIRECP=CIACCA+4 ;RECORD ENTRY ADDR;
CISAVP=CIRECP+4 ;ADDR CURRENCY AREA;
CIRTC=CISAVP+4 ;RETURN CODE;
CILL=CIRTC+2 ;LENGTH;
.NOSHOW ME
.PAGE
.ENDM
.MACRO INIT NAME
.PSECT NAME,QUAD,NOSHR,WRT
.ENTRY NAME,^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,R11>
INITSW.=0
.ENDM
.MACRO WROUT P1,P2
.NARG ARGCNT
.IF EQ ARGCNT-1
.SAVE
.PSECT DATA,LONG,NOWRT,SHR
...TMPA=.
.ASCII \P1\
...TMPL=.-...TMPA
...TMPP=.
.ADDRESS ...TMPL
.ADDRESS ...TMPA
.RESTORE_PSECT
PUSHAL ...TMPP
CALLS #1,G^GENR18O
.IF_FALSE
.SAVE
.PSECT DATAW,LONG,WRT,NOSHR
...TMPP=.
.BLKL 2
.RESTORE_PSECT
MOVAB P2,...TMPP+4
MOVZWL P1,...TMPP
PUSHAL ...TMPP
CALLS #1,G^GENR18O
.ENDC
.ENDM
.MACRO ON_ERROR DEST,?L
BLBS R0,L
BRW DEST ;BR WITH WORD OFFSET
L:
.ENDM
.MACRO RDATA TEXT
.SAVE_PSECT
.PSECT DATA,LONG,NOWRT,SHR
...TMPA=.
.BYTE 13,10 ;CR LF
.ASCII \TEXT\
...TMPL=.-...TMPA ;LENGTH
...TMPP=.
.ADDRESS ...TMPL
.ADDRESS ...TMPA
.RESTORE_PSECT
.SAVE_PSECT
.PSECT DATAW,LONG,WRT,NOSHR
...TMPI=.
.BLKL 2
.RESTORE_PSECT
PUSHAL ...TMPI
PUSHAL ...TMPP
CALLS #2,G^GENR18I
MOVZWL ...TMPI,R1
MOVL ...TMPI+4,R2 ;ADDR INPUT
.ENDM
.MACRO EDIT SRC,LL,DEST
.IF EQ INITSW.&<1@2>
EDIT_P.=0 ;FIRST TIME
INITSW.=INITSW.!<1@2>
.ENDC
CVTLP SRC,#LL,-8(SP)
.IF EQ EDIT_P.&<1@LL> ;PATTERN NOT DEFINED
.SAVE_PSECT
.PSECT DATA,LONG,NOWRT,SHR
EDITP LL
.RESTORE_PSECT
EDIT_P.=EDIT_P.!<1@LL>
.ENDC
EDITPC #LL,-8(SP),EDITP'LL,DEST
.ENDM
.MACRO EDITP LL
.IF EQ LL-1
EDITP'LL:
.BYTE 3,^X91,^X04,^X00
.MEXIT
.ENDC
.IF EQ LL-2
EDITP'LL:
.BYTE ^X91,3,^X91,4,0
.MEXIT
.ENDC
.IF EQ LL-3
EDITP'LL:
.BYTE ^X92,3,^X91,4,0
.MEXIT
.ENDC
.IF EQ LL-4
EDITP'LL:
.BYTE ^X91,^X44,^X2C,^X92,3,^X91,4,0
.MEXIT
.ENDC
.IF EQ LL-5
EDITP'LL:
.BYTE ^X92,^X44,^X2C,^X92,3,^X91,4,0
.MEXIT
.ENDC
.IF EQ LL-6
EDITP'LL:
.BYTE ^X93,^X44,^X2C,^X92,3,^X91,4,0
.MEXIT
.ENDC
.IF EQ LL-7
EDITP'LL:
.BYTE ^X91,^X44,^X2C,^X93,^X44,^X2C,^X92,3,^X91,4,0
.MEXIT
.ENDC
.IF EQ LL-8
EDITP'LL:
.BYTE ^X92,^X44,^X2C,^X93,^X44,^X2C,^X92,3,^X91,4,0
.MEXIT
.ENDC
.IF EQ LL-9
EDITP'LL:
.BYTE ^X93,^X44,^X2C,^X93,^X44,^X2C,^X92,3,^X91,4,0
.MEXIT
.ENDC
.IF EQ LL-10
EDITP'LL:
.BYTE ^X91,^X44,^X2C,^X93,^X44,^X2C,^X93,^X44,^X2C,^X92,3,^X91,4,0
.MEXIT
.ENDC
.MERROR 1 ;WRONG PARAMETER VALUE;
.ENDM
.MACRO SFUNC
OPEN=0
CLOSE=1
READUNI=2
READNXT=3
WRITE=4
REWRITE=5
DELETE=6
LOCKUPD=7
DEPART=8
LOCKEXCL=9
WRITEDU=10
IMPART=11
CHECKPT=12
.ENDM
.MACRO SRTCS
NOIMPT=1
IMPTDONE=2
KEYWRONG=3
DUPLIC=4
NORDDONE=5
ACTOWNR=6
NOTFOUND=7
NOTNEXT=8
NOOWNREC=9
.ENDM
.MACRO PLOAD LL,ADR,?L1,?L2
.IF EQ INITSW.&<1@3>
.SAVE_PSECT
.PSECT DATAW,LONG,WRT,NOSHR
INITSW.=INITSW.!<1@3> ;SET FIRST TIME
PLOADIN: .LONG 512,512
PLOADRET: .LONG 0,0
PLOADFAB: $FAB FOP=UFO,DNM=<.EXE>
$SECDEF
.RESTORE_PSECT
.ENDC
MOVB LL,PLOADFAB+FAB$B_FNS
MOVAB ADR,PLOADFAB+FAB$L_FNA
$OPEN FAB=PLOADFAB
ON_ERROR L1
$CRMPSC_S INADR=PLOADIN,RETADR=PLOADRET,-
FLAGS=#SEC$M_CRF!SEC$M_EXPREG!SEC$M_WRT,-
CHAN=PLOADFAB+FAB$L_STV,-
PAGCNT=#0,VBN=#2
ON_ERROR L1
; $CLOSE FAB=PLOADFAB
; ON_ERROR L1
MOVL PLOADRET,R1 ;RETURN START ADDR
L1:
.ENDM