%ì VAX-11 Librarian V04-00àá7«]˜àêt«]˜KØLwwwB \ ALLOC_STRING°AOBLEQ_WJAOBLSS_WäASK|BBCCI_WBBCC_WŒBBCS_WBBC_WzBBSC_WòBBSSI_WŠBBSS_WBBS_WxBCC_WØBCS_W>BEQLU_W¤BEQL_WBGEQU_WlBGEQ_WÎBGTRU_W:BGTR_WœBLBC_WBLBS_WtBLEQU_WÚBLEQ_WBBLSSU_W¨BLSS_W BNEQU_WpBNEQ_WÒBREAKšBVC_WúBVS_WZCALLœCOLLAPSEøCONCATCOUNT DEF_PSECThDISPLAYb BNEQU_WpBNEQ_WÒBREAKšBVC_WúBVS_WZCALLœCOLLAPSEøCONCATCOUNT DEF_PSECThDISPLAY `DO :DSB_LONG ELSE!LENB_LONG!¢ENDIF"^ENDWHILE# FIND_LENGTH$IF%JITEM%öMESSAGE'$MSG..(¬NEXT)lREPEAT* REQEND*fREQLIST*¤ RESET_PSECT*äRUN+È SET_PSECT,\SIGNAL,zSMAC.B,ÚSMAC.BC-T SMAC.BRKNXT-–SMAC.BS.SMAC.CC.Š SMAC.EMIT. SMAC.EMITLKÿÿBLSS_Wÿÿ RESET_PSECTÿÿSMAC.LEQÿÿSMAC.RVSÿÿ_OPCDEFDEF^*äRUN+È SET_PSECT,\SIGNAL,zSMAC.B,ÚSMAC.BC-T SMAC.BRKNXT-–SMAC.BS.SMAC.CC.Š SMAC.EMIT. SMAC.EMITL.¨SMAC.EQL/, SMAC.ERROR/® SMAC.GENBR/° SMAC.GENTST1ÎSMAC.GEQ1L SMAC.GSLB2* SMAC.GSLB.B3¶SMAC.GTR4:SMAC.IF5&SMAC.INI5¨SMAC.LBC6(SMAC.LBS6¢SMAC.LEQ6  SMAC.LONGB70 SMAC.LONGB.B7<SMAC.LSS7ºSMAC.NEQ8> SMAC.OKAY8¼ SMAC.PEEK8èSMAC.POP9f SMAC.PUSH9SMAC.RBC[6  SMAC.LONGB70 SMAC.LONGB.B7<SMAC.LSS7ºSMAC.NEQ8> SMAC.OKAY8¼ SMAC.PEEK8èSMAC.POP9f SMAC.PUSH9SMAC.RBC9xSMAC.RBS9ÜSMAC.RCC:J SMAC.REQL:´ SMAC.RGEQ: SMAC.RGTR:ˆ SMAC.RLBC:î SMAC.RLBS;Z SMAC.RLEQ;Ä SMAC.RLSS;. SMAC.RNEQ;˜SMAC.RSC<SMAC.RVC<nSMAC.RVS<ÖSMAC.RW<6SMAC.SC<° SMAC.SHORTB=ž SMAC.SHORTB.B=ˆSMAC.TAG=ò SMAC.UNTIL?€SMAC.VC?úSMAC.VS?tSMAC.W0<ÖSMAC.RW<6SMAC.SC<° SMAC.SHORTB=ž SMAC.SHORTB.B=ˆSMAC.TAG=ò SMAC.UNTIL?€SMAC.VC?úSMAC.VS?tSMAC.W?ì SMAC.WHILE@äSOBGEQ_WAtSOBGTR_WAþSPAWNAÊSTRINGB UNTILC„VECTORCâWAITDÂWHILEE$_LANDEFF² _LANHDRDEFGþ_OPCDEF ­ L?¦]˜6.MACRO ALLOC_STRING STRING=, BYTE_COUNT=, GBL=NOGLOBAL .IF BLANK STRING* .ERROR 0;ALLOC_STRING -- no name given; .MEXIT .ENDC .IF BLANK BYTE_COUNT0 .ERROR 0;ALLOC_STRING -- no byte count given; .MEXIT .ENDC .IF IDENTICAL , .LISTSTRING'_S==BYTE_COUNTSTRING'_T:: .BLKB STRING'_SSTRING:: .LONG STRING'_S .ADDRESS STRING'_TSTRING'_DS:: .LONG STRING'_S .ADDRESS STRING'_T .NLIST .IF_FALSE .LISTSTRING'_S=BYTE_COUNTSTRING'_T: .BLKB STRING'_SSTRING: .LONG STRING'_S .ADDRESS STRING'_TSTRING'_DS: .LONG STRING'_S .ADDRESS STRING'_T .NLIST .ENDC.ENDM ALLOC_STRINGww­€P¦]˜/.MACRO AOBLEQ_W LIMIT, INDEX, DEST, ?INT, ?NEXT AOBLEQ LIMIT, INDEX, INT BRB NEXT INT: BRW DESTNEXT:.ENDM AOBLEQ_Www­€P¦]˜/.MACRO AOBLSS_W LIMIT, INDEX, DEST, ?INT, ?NEXT AOBLSS LIMIT, INDEX, INT BRB NEXT INT: BRW DESTNEXT:.ENDM AOBLSS_Www­àï)¦]˜M.MACRO ASK FROM=INPUT, PROMPT_STRING=, RESULT_STRING=, RESULT_LENGTH=, FLAGS= .IF DIFFERENT ,! .IF DIFFERENT ,# .IF DIFFERENT ,E .ERROR 0;ASK -- input source must be INPUT,COMMAND or FOREIGN; .MEXIT .ENDC .ENDC .ENDC .IF BLANK PROMPT_STRING/ .ERROR 0;ASK -- input prompt string missing; .MEXIT .ENDC .IF BLANK RESULT_STRING/ .ERROR 0;ASK -- input result string missing; .MEXIT .ENDC .IF BLANK RESULT_LENGTH/ .ERROR 0;ASK -- input result length missing; .MEXIT .ENDC .EXTERNAL LIB$GET_'FROM __ARG_COUNT=3 .IF IDENTICAL , .IF NOT_BLANK FLAGS PUSHAL FLAGS __ARG_COUNT=4 .ENDC .ENDC PUSHAW RESULT_LENGTH PUSHAL PROMPT_STRING PUSHAL RESULT_STRING$ CALLS #__ARG_COUNT, G^LIB$GET_'FROM .ENDM ASKww­ œQ¦]˜+.MACRO BBCCI_W POS, BASE, DEST, ?INT, ?NEXT BBCCI POS, BASE, INT BRB NEXT INT: BRW DESTNEXT: .ENDM BBCCI_Www­À"S¦]˜$.MACRO BBCC_W POS, BASE, DEST, ?NEXT BBSC POS, BASE, NEXT BRW DESTNEXT: .ENDM BBCC_Www­À"S¦]˜$.MACRO BBCS_W POS, BASE, DEST, ?NEXT BBSS POS, BASE, NEXT BRW DESTNEXT: .ENDM BBCS_Www­À"S¦]˜#.MACRO BBC_W POS, BASE, DEST, ?NEXT BBS POS, BASE, NEXT BRW DESTNEXT: .ENDM BBC_Www­À"S¦]˜$.MACRO BBSC_W POS, BASE, DEST, ?NEXT BBCC POS, BASE, NEXT BRW DESTNEXT: .ENDM BBSC_Www­À"S¦]˜+.MACRO BBSSI_W POS, BASE, DEST, ?INT, ?NEXT BBSSI POS, BASE, INT BRB NEXT INT: BRW DESTNEXT: .ENDM BBSSI_Www­0V¦]˜$.MACRO BBSS_W POS, BASE, DEST, ?NEXT BBCS POS, BASE, NEXT BRW DESTNEXT: .ENDM BBSS_Www­0V¦]˜#.MACRO BBS_W POS, BASE, DEST, ?NEXT BBC POS, BASE, NEXT BRW DESTNEXT: .ENDM BBS_Www­0V¦]˜.MACRO BCC_W DEST, ?NEXT BCS NEXT BRW DESTNEXT: .ENDM BCC_Www­ ¶W¦]˜.MACRO BCS_W DEST, ?%NEXT BCC NEXT BRW DESTNEXT: .ENDM BCS_Www­@=Y¦]˜.MACRO BEQLU_W DEST, ?NEXT BNEQU NEXT BRW DESTNEXT: .ENDM BEQLU_Www­@=Y¦]˜.MACRO BEQL_W DEST, ?NEXT BNEQ NEXT BRW DESTNEXT: .ENDM BEQL_Www­@=Y¦]˜.MACRO BGEQU_W DEST, ?NEXT BLSSU NEXT BRW DESTNEXT: .ENDM BGEQU_Www­@=Y¦]˜.MACRO BGEQ_W DEST, ?NEXT BLSS NEXT BRW DESTNEXT: .ENDM BGEQ_Www­@=Y¦]˜.MACRO BGTRU_W DEST, ?NEXT B#LEQU NEXT BRW DESTNEXT: .ENDM BGTRU_Www­àÃZ¦]˜.MACRO BGTR_W DEST, ?NEXT BLEQ NEXT BRW DESTNEXT: .ENDM BGTR_Www­àÃZ¦]˜.MACRO BLBC_W SRC, DEST, ?NEXT BLBS SRC, NEXT BRW DESTNEXT: .ENDM BLBC_Www­àÃZ¦]˜.MACRO BLBS_W SRC, DEST, ?NEXT BLBC SRC, NEXT BRW DESTNEXT: .ENDM BLBS_Www­€J\¦]˜.MACRO BLEQU_W DEST, ?NEXT BGTRU NEXT BRW DESTNEXT: .ENDM BLEQU_Www­€J\¦]˜.MACRO BLEQ_W DEST$, ?NEXT BGTR NEXT BRW DESTNEXT: .ENDM BLEQ_Www­ Ñ]¦]˜.MACRO BLSSU_W DEST, ?NEXT BGEQU NEXT BRW DESTNEXT: .ENDM BLSSU_Www­ Ñ]¦]˜.MACRO BLSS_W DEST, ?NEXT BGEQ NEXT BRW DESTNEXT: .ENDM BLSS_Www­ Ñ]¦]˜.MACRO BNEQU_W DEST, ?NEXT BEQLU NEXT BRW DESTNEXT: .ENDM BNEQU_Www­ÀW_¦]˜.MACRO BNEQ_W DEST, ?NEXT BEQL NEXT BRW DESTNEXT: .ENDM BNEQ_Www­@EÄ´ ˜> .MACRO BREAK BRKID, IFDUM,T1,C1,T2,C2,T3,C3,T4,C4,T5,C5,T6,C6; .IF NDF, SMAC..INI0 .ERROR ; BREAK occurs before any structures .MEXIT .ENDC .IF IDN,BRKID, ;" SMAC.PEEK ..LBL, ..TYP, LEV=0 ; .IF LE,..TYP-4 ;0 .ERROR ; Can't BREAK from an IF structure .MEXIT .IF_FALSE;B SMAC.BRKNXT ,,,,,,,,,- ,, .IRP CC,\..LBL SMAC.EMIT .ENDR ENDIF .ENDC .IF_FALSE ;;!B SMAC.BRKNXT ,,,,,,,,,,- , SMAC.EMIT  ENDIF .ENDC .ENDM BREAKww­ÀW_¦]˜.MACRO BVC_W DEST, ?NEXT BVS NEXT BRW DESTNEXT: .ENDM BVC_Www­`Þ`¦]˜.MACRO BVS_W DEST, ?NEXT BVC NEXT BRW DESTNEXT: .ENDM BVS_Www­Ä´ ˜/ .MACRO CALL NAME,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9;; ..CNT = 0) .IRP ARG, .IF NB,ARG .NTYPE ..TYP,ARG ; ..TYP = ..TYP@-4&^XF .IF IDN,0, ; PUSHL #0 ; .MEXIT .ENDC ..FLG = 0 .IIF LE,..TYP-1, ..FLG=1 .IIF EQ,..TYP-5, ..FLG=1 .IF EQ,..FLG ; PUSHAL ARG .IF_FALSE PUSHL ARG ; .ENDC ..CNT = ..CNT + 1 .ENDC .ENDR .IRP CC,\..CNT CALLS #'CC',G^'NAME .ENDR .ENDM CALLww­àŽN¦]˜.MACRO COLLAPSE DEST=, SOURCE= .IF BLANK DEST- .ERROR 0;COLLAPSE -- destination required; .MEXIT .ENDC .EXTERNAL STR_COLLAPSE .IF BLANK SOURCE PUSHAQ DEST'_DS .IF_FALSE PUSHAQ SOURCE .ENDC PUSHAQ DEST'_DS CALLS #2, G^STR_COLLAPSE FIND_LENGTH DEST.ENDM COLLAPSEww­ K¦]˜/.MACRO CONCAT DEST=, S1, S2, S3, S4, S5, S6, S7 .IF BLANK DEST+ .ERROR 0;CONCAT -- destination required; .MEXIT .ENDC .IF BLANK S1: .ERROR 0;CONCAT -- at least one source string required; .MEXIT .ENDC .EXTERNAL" STR$CONCAT __ARG_COUNT=1$ .IRP S_NAME,  .IF NOT_BLANK S_NAME PUSHAQ S_NAME __ARG_COUNT=__ARG_COUNT+1 .ENDC .ENDR PUSHAQ DEST'_DS! CALLS #__ARG_COUNT, G^STR$CONCAT FIND_LENGTH DEST .ENDM CONCATww­ ‰‚Ä´ ˜ .MACRO COUNT INIT; .IF NB,INIT .LONG INIT .IF_FALSE .LONG 0 .ENDC .ENDM COUNTww­@ÿ¦]˜6.MACRO DEF_PSECT PSECT_NAME, TYPE=CODE, ALIGNMENT=PAGE .IF BLANK PSECT_NAME' .ERROR 0;DEF_PSECT -- name is blank; .MEXIT .ENDC __TYPE_OK=1 .IF IDENTICAL , __TYPE_OK=0E .PSECT PSECT_NAME PIC,USR,CON,REL,GBL,SHR,EXE,RD,NOWRT,'ALIGNMENT' .ENDC .IF IDENTICAL , __TYPE_OK=0G .PSECT PSECT_NAME PIC,USR,CON,REL,GBL,NOSHR,NOEXE,RD,WRT,'ALIGNMENT' .ENDC .IF IDENTICAL , __TYPE_OK=0E .PSECT PSECT_NAME PIC,USR,CON,REL,GBL,SHR,NOEXE,RD,WRT,'ALIGNMENT' .ENDC .IF IDENTICAL , __TYPE_OK=0 E .PSECT PSECT_NAME PIC,USR,OVR,REL,GBL,SHR,NOEXE,RD,WRT,'ALIGNMENT' .ENDC .IF IDENTICAL , __TYPE_OK=0G .PSECT PSECT_NAME PIC,USR,CON,REL,GBL,SHR,NOEXE,RD,NOWRT,'ALIGNMENT' .ENDC .IF NOT_EQUAL __TYPE_OKL .ERROR 0;DEF_PSECT -- PSECT must be CODE,DATA,DATA_SHR,COMMON or RO_DATA; .ENDC.ENDM DEF_PSECTww­@i(¦]˜.MACRO DISPLAY DESCRIPTOR .IF BLANK DESCRIPTOR* .ERROR 0;DISPLAY -- nothing to display; .MEXIT .ENDC .EXTERNAL L#!IB$PUT_OUTPUT PUSHAQ DESCRIPTOR CALLS #1, G^LIB$PUT_OUTPUT .ENDM DISPLAYww­€«7¦]˜.MACRO DO COMMAND .IF BLANK COMMAND# .ERROR 0;DO -- nothing to do...; .MEXIT .ENDC .EXTERNAL LIB$DO_COMMAND PUSHAL COMMAND CALLS #1, G^LIB$DO_COMMAND.ENDM DOww­@„Ä´ ˜ .MACRO DSB_LONG;; SMAC..LONGM = 0 .ENDM DSB_LONGww­Àõ}Ä´ ˜ .MACRO ELSE .IF NDF, SMAC..INI) .ERROR ; ELSE occurs before any IF's .MEXIT!" .ENDC SMAC.PEEK ..LBL, ..TYP ; .IF NE,<..TYP - SMAC..IF>- .ERROR ; Incorrect nesting of ELSE block .MEXIT .IF_FALSE SMAC.POP ..LBL, ..TYP ; .IRP ..N, \..LBL SMAC.EMIT  .ENDR SMAC.TAG \..LBL, 3 SMAC.PUSH \..LBL, \SMAC..ELSE .ENDC .ENDM ELSEww­@„Ä´ ˜ .MACRO ENB_LONG;; SMAC..LONGM = 1 .ENDM ENB_LONGww­Àõ}Ä´ ˜ .MACRO ENDIF .IF NDF, SMAC..INI* .ERROR ; ENDIF occurs before #any IF's .MEXIT .ENDC SMAC.PEEK ..LBL, ..TYP ; .IF EQ,<..TYP - SMAC..IF> ; SMAC.TAG \..LBL, 3 ; .IF_FALSE .IF EQ,<..TYP-SMAC..ELSE> ; SMAC.TAG \..LBL,4 ; .IF_FALSE4 .ERROR ; ENDIF does not terminate an IF block .MEXIT .ENDC .ENDC SMAC.POP ..LBL, ..TYP ; ; .ENDM ENDIFww­`|Ä´ ˜ .MACRO ENDWHILE .IF NDF, SMAC..INI0 .ERROR ; ENDWHILE occurs before any WHILE's .MEXIT .ENDC SMAC.PEEK ..LBL, ..TYP ;!$ .IF NE,<..TYP - SMAC..WHILE>;1 .ERROR ; ENDWHILE does not terminate a WHILE .MEXIT .ENDC SMAC.POP ..LBL, ..TYP ; ; SMAC.TAG \..LBL,2 ; .IRP CC,\..LBL ; SMAC.EMIT  .ENDR SMAC.TAG \..LBL,3 ; .ENDM ENDWHILEww­ÀíF¦]˜.MACRO FIND_LENGTH STRING .IF BLANK STRING) .ERROR 0;FIND_LENGTH -- no name given; .MEXIT .ENDC .EXTERNAL STR_LEN PUSHAQ STRING'_DS CALLS #1, G^STR_LEN MOVL R0, STRING.ENDM FIND_LEN%GTHww­ÎtÄ´ ˜9 .MACRO IF T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6 SMAC.INI ; .NARG ..NARG .IF BLANK, ;7 .ERROR ; Missing condition or THEN in IF statement .MEXIT .ENDC .IF NE,<<..NARG/2>*2-..NARG> ;7 .ERROR ; Missing condition or THEN in IF statement .MEXIT .ENDC ..NOOR = 1( SMAC.IF ,,,,,,- ,,,,C1,T1 .IF EQ,..NOOR ; SMAC.TAG \SMAC..LBLN,2 .ENDC SMAC.PUSH \SM!&AC..LBLN,\SMAC..IF SMAC..LBLN = SMAC..LBLN + 1 .ENDM IFww­@„Ä´ ˜+ .MACRO ITEM ITMCOD, BUFADR, BUFLEN, LENADR; .IF NB,BUFLEN .WORD BUFLEN .IFF .WORD 4 .ENDC .IF BLANK,' .ERROR ; ITMCOD parameter required .MEXIT .IFF .WORD ITMCOD .ENDC .IF BLANK,' .ERROR ; BUFADR parameter required .MEXIT .IFF .ADDRESS BUFADR .ENDC .IF NB,LENADR .ADDRESS LENADR .IFF .LONG 0 .ENDC .ENDM ITEMww­$' ‰‚Ä´ ˜, .MACRO MESSAGE CODE,F1,F2,F3,F4,F5,F6,F7,F8;;; .IF BLANK, ;, .ERROR ; Message code must be specified .MEXIT .ENDC PUSHL R0 .NARG ..MSG_NARGS ; ..LEN = 0! .IRP F, .IF NB, ; PUSHL 'F ..LEN = ..LEN + 1 ; .ENDC .ENDR .IF NE,<..LEN> ; PUSHL #..LEN ..LEN = ..LEN + 1 ; .ENDC PUSHL CODE PUSHL #..LEN+1 MOVL SP,R0 $PUTMSG_S MSGVEC=(R0) ADDL2 #<4*<..LEN+2>>,SP( POPL R0 .ENDM MESSAGEww­ ‰‚Ä´ ˜" .MACRO MSG.. CODE,FW,FX,FY,FZ,?L1 .IF NB, ; ..FLEN=0 ; .IRP F, ; .IF NB, ; .NTYPE ..TYP,F ; ..TYP = ..TYP@-4&^XF ..FLG = 0 .IIF LE,..TYP-1, ..FLG=1 .IIF EQ,..TYP-5, ..FLG=1 .IF EQ,..FLG ; PUSHAL F .IF_FALSE ; PUSHL F .ENDC ..FLEN = ..FLEN + 1 .ENDC .ENDR PUSHL CODE CMPZV #STS$V_FAC_NO,- #STS)$S_FAC_NO,- (SP),- #1 BLEQ L1 MOVAB 4(SP),SP PUSHL #..FLEN INCL R1 PUSHL CODEL1: ADDL2 #..FLEN+1,R1 .ENDC .ENDM MSG..ww­àˑĴ ˜= .MACRO NEXT NXTID, IFDUM,T1,C1,T2,C2,T3,C3,T4,C4,T5,C5,T6,C6; .IF NDF, SMAC..INI/ .ERROR ; NEXT occurs before any structures .MEXIT .ENDC .IF IDN,NXTID, ;" SMAC.PEEK ..LBL, ..TYP, LEV=0 ; .IF LE,..TYP-4 ;- .ERROR ; Can't NEXT in an IF structure .MEXIT .IF_F*ALSE;B SMAC.BRKNXT ,,,,,,,,,- ,, .IRP CC,\..LBL SMAC.EMIT .ENDR ENDIF .ENDC .IF_FALSE ;;B SMAC.BRKNXT ,,,,,,,,,,- , SMAC.EMIT  ENDIF .ENDC .ENDM NEXTww­`|Ä´ ˜ .MACRO REPEAT SMAC.INI ;;% SMAC.PUSH \SMAC..LBLN, \SMAC..REPEAT SMAC.TAG \SMAC..LBLN, 1SMAC..LBLN = SMAC..LBLN !++ 1 .ENDM REPEATww­@„Ä´ ˜ .MACRO REQEND; .LONG 0 .ENDM REQENDww­@„Ä´ ˜ .MACRO REQLIST; .ENDM REQLISTww­ â&¦]˜.MACRO RESET_PSECT .IF NOT_DEFINED __PS_LEVEL@ .ERROR 0;RESET_PSECT -- attempt to RESET psect without a SET; .MEXIT .ENDC .IF EQUAL __PS_LEVEL+ .ERROR 0;RESET_PSECT -- too many resets; .MEXIT .ENDC __PS_LEVEL=__PS_LEVEL-1 .RESTORE_PSECT.ENDM RESET_PSECTww­ 29¦]˜.MACRO R,UN PROGRAM .IF BLANK PROGRAM% .ERROR 0;RUN -- nothing to run...; .MEXIT .ENDC .EXTERNAL LIB$RUN_PROGRAM PUSHAL PROGRAM CALLS #1, G^LIB$RUN_PROGRAM .ENDM RUNww­`Õ#¦]˜).MACRO SET_PSECT PSECT_NAME, SAVE_CONTEXT .IF BLANK PSECT_NAME' .ERROR 0;SET_PSECT -- name is blank; .MEXIT .ENDC .IF NOT_DEFINED __PS_LEVEL __PS_LEVEL=0 .ENDC .IF BLANK SAVE_CONTEXT .SAVE_PSECT .ENDC .IF NOT_BLANK SAVE_CONTEXT .SAVE_PSECT LOCAL$-_BLOCK .ENDC .PSECT PSECT_NAME __PS_LEVEL=__PS_LEVEL+1.ENDM SET_PSECTww­ ‰‚Ä´ ˜$ .MACRO SIGNAL CODE1, F1, CODE2, F2;;;;; .IF BLANK, ;, .ERROR ; Message code must be specified .MEXIT .ENDC PUSHL R0 CLRL R1 MSG.. CODE2,F2 MSG.. CODE1,F1 CALLS R1,G^LIB$SIGNAL POPL R0 .ENDM SIGNALww­À*ŠÄ´ ˜ .MACRO SMAC.B DEST, SIGNED SMAC.EMIT .ENDM SMAC.Bww­À*ŠÄ´ ˜$ .MACRO SMAC.BC D.EST, SIGNED, SENSE; SMAC.GSLB.B , , DEST .ENDM SMAC.BCww­à–…Ä´ ˜B .MACRO SMAC.BRKNXT T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6; ..NOOR = 1@ SMAC.IF ,,,,,,,,,,C1,T1 .IF EQ,..NOOR ; SMAC.TAG \SMAC..LBLN,2 .ENDC SMAC.PUSH \SMAC..LBLN,\SMAC..IF SMAC..LBLN = SMAC..LBLN + 1 .ENDM SMAC.BRKNXTww­À*ŠÄ´ ˜$ .MACRO SMAC.BS DEST, SIGNED, SENSE; SMAC.GSLB.B , , DEST .ENDM SMA/C.BSww­ ¾ŽÄ´ ˜# .MACRO SMAC.CC DEST, SIGNED, SENSE* SMAC.GSLB , , ,  .ENDM SMAC.CCww­ ¤ˆÄ´ ˜ .MACRO SMAC.EMIT VAL .IIF NE,SMAC..LISTON, .SHOW ME VAL! .IIF NE,SMAC..LISTON, .NOSHOW ME .ENDM SMAC.EMITww­ ¤ˆÄ´ ˜ .MACRO SMAC.EMITL VAL .IIF NE,SMAC..LISTON, .SHOW MEVAL:! .IIF NE,SMAC..LISTON, .NOSHOW ME .ENDM SMAC.EMITLww­À*ŠÄ´ ˜$ .MACRO SMAC.EQL DEST, SIGNED, SENSE+ SMAC.GSLB , , ,  .ENDM SMAC.EQLww­À*ŠÄ´ ˜' .MACRO SMAC.ERROR DEST, SIGNED, SENSE;;! SMAC.GSLB.B , , DEST .ENDM SMAC.ERRORww­€‡Ä´ ˜# .MACRO SMAC.GENBR REL, DEST, SENSE ..LCP = %LENGTH(REL) - 1 ;" .IF IDN,%EXTRACT(..LCP,1,REL),0 SMAC.%EXTRACT(0,..LCP,REL) , U, .IF_FALSE SMAC.'REL , <>,  .ENDC .ENDM SMAC.GENBRww­€‡Ä´ ˜6 .MACRO SMAC.GENTST REL, ARG1, ARG2, TYPE, DEST, SENSE .1IF BLANK,REL$ .ERROR ; Relation not specified .MEXIT .ENDC .IF BLANK,ARG2 ; .IF BLANK,ARG1 ;( SMAC.GENBR , , ; .IF_FALSE$ .IF DIF,%EXTRACT(0,2,REL),; .IF DIF,REL,OKAY ; .IF DIF,REL,ERROR;! SMAC.EMIT * SMAC.GENBR , , ; .MEXIT .ENDC .ENDC .ENDC;, SMAC.GENBR , ,  .ENDC .IF_FALSE! .IF DIF,%EXTRACT(0,1,2REL),;# SMAC.EMIT & SMAC.GENBR , , .IF_FALSE0 SMAC.GENBR , ,  .ENDC .ENDC .ENDM SMAC.GENTSTww­À*ŠÄ´ ˜$ .MACRO SMAC.GEQ DEST, SIGNED, SENSE+ SMAC.GSLB , , ,  .ENDM SMAC.GEQww­€‡Ä´ ˜* .MACRO SMAC.GSLB REL, DEST, SIGNED, SENSE .IF EQ,SMAC..LONGM ;/ SMAC.SHORTB , , , .MEXIT .ENDC .IF NDF,DEST ;0!3 SMAC.LONGB , , , ; .MEXIT .IF_FALSE .IF LT,<128-<.-DEST>> ;0 SMAC.LONGB , , , .MEXIT .IF_FALSE1 SMAC.SHORTB , , , .MEXIT .ENDC .ENDC .ENDM SMAC.GSLBww­€‡Ä´ ˜1 .MACRO SMAC.GSLB.B REL, SENSE, ARG1, DEST, DUMMY;;; .IF NB,DUMMY;;3 SMAC.GSLB.B , , , .MEXIT .IF_FALSE; .IF EQ,SMAC..4LONGM ;1 SMAC.SHORTB.B , , , .MEXIT .ENDC .IF NDF,DEST ;2 SMAC.LONGB.B , , , ; .MEXIT .IF_FALSE .IF LT,<128-<.-DEST>> ;2 SMAC.LONGB.B , , , .MEXIT .IF_FALSE3 SMAC.SHORTB.B , , , .MEXIT .ENDC .ENDC .ENDC .ENDM SMAC.GSLB.Bww­ ¾ŽÄ´ ˜$ .MACRO SMAC.GTR DEST, SIGNED, SENSE+ SMAC.GSLB 5, , ,  .ENDM SMAC.GTRww­@„Ä´ ˜F .MACRO SMAC.IF C6,T6,C5,T5,C4,T4,C3,T3,C2,T2,C1,REL,ARG1,ARG2,TYPE=L ; .IRP CC,\SMAC..LBLN .IF IDN,, ..NOOR = 0F SMAC.GENTST , , , , <_.'CC'.2>, SMAC..NORM .IF_FALSE ;G SMAC.GENTST , , , , <_.'CC'.3>, SMAC..BRREV .ENDC .ENDR .IF NB, ;, SMAC.IF <>, <>, , , , , -% , , , , C2, T2"6 .ENDC .ENDM SMAC.IFww­à–…Ä´ ˜ .MACRO SMAC.INI; SMAC..INI = 1 ; SMAC..IF = 1 ; SMAC..REPEAT = 5 SMAC..WHILE = 6 SMAC..ELSE = 2 SMAC..BRREV = 1 ; SMAC..NORM = 0 SMAC..SP = 0 ; SMAC..LBLN = 0 ;& .IIF NDF,SMAC..LONGM, SMAC..LONGM = 0 ;( .IIF NDF,SMAC..LISTON, SMAC..LISTON = 0 .MACRO SMAC.INI ; .ENDM SMAC.INI .ENDM SMAC.INIww­À*ŠÄ´ ˜% .MACRO SMAC.LBC DEST, SIGNED, SENSE;! SMAC.GSLB.B , , DEST .ENDM SMAC.LBCww­À*ŠÄ´ ˜% .MACRO SMAC.LBS DEST, SIGNED, SENSE;! SMAC.GSLB.B , , DEST .ENDM SMAC.LBSww­À*ŠÄ´ ˜$ .MACRO SMAC.LEQ DEST, SIGNED, SENSE+ SMAC.GSLB , , ,  .ENDM SMAC.LEQww­ ¤ˆÄ´ ˜2 .MACRO SMAC.LONGB REL, DEST, SIGNED, SENSE, ?LBL1;; .IF IDN,SENSE,SMAC..BRREV ; SMAC.EMIT .IF_FALSE SMAC.R'REL ,  .ENDC SMAC.EMIT  SMA8C.EMITL  .ENDM SMAC.LONGBww­ ¤ˆÄ´ ˜2 .MACRO SMAC.LONGB.B REL, ARG1, DEST, SENSE, ?LBL1;;; .IF IDN,SENSE,SMAC..BRREV ; SMAC.EMIT .IF_FALSE SMAC.R'REL ,  .ENDC SMAC.EMIT  SMAC.EMITL  .ENDM SMAC.LONGB.Bww­ ¾ŽÄ´ ˜$ .MACRO SMAC.LSS DEST, SIGNED, SENSE+ SMAC.GSLB , , ,  .ENDM SMAC.LSSww­À*ŠÄ´ ˜$ .MACRO SMAC.NEQ DEST, SIGNED, SENSE+ SMAC.GSLB <9NEQ>, , ,  .ENDM SMAC.NEQww­À*ŠÄ´ ˜& .MACRO SMAC.OKAY DEST, SIGNED, SENSE;;! SMAC.GSLB.B , , DEST .ENDM SMAC.OKAYww­À*ŠÄ´ ˜ .MACRO SMAC.PEEK LBL,TYP,LEV=0 .IF LE,SMAC..SP-LEV4 .ERROR ; Incorrect nesting or missing statemnt. .MEXIT .IF_FALSE ..TMP = SMAC..SP - LEV .IRP CC,\..TMP LBL = SMAC..STKL'CC TYP = SMAC..STKT'CC .ENDR .ENDC .ENDM SMAC.PEEKww­À*ŠÄ´ ˜ .MA:CRO SMAC.POP LBL,TYP SMAC.PEEK ,  SMAC..SP = SMAC..SP - 1 .ENDM SMAC.POPww­ ¤ˆÄ´ ˜ .MACRO SMAC.PUSH LBL,TYP SMAC..SP = SMAC..SP + 1 .IRP CC, \SMAC..SP SMAC..STKT'CC = TYP SMAC..STKL'CC = LBL .ENDR .ENDM SMAC.PUSHww­@EÄ´ ˜ .MACRO SMAC.RBC ARG1, DEST SMAC.EMIT  .ENDM SMAC.RBCww­@EÄ´ ˜ .MACRO SMAC.RBS ARG1, DEST SMAC.EMIT  .ENDM SMAC.RBSww­@EÄ´ ˜ .MACRO SMAC.RCC; DEST, SIGNED SMAC.EMIT  .ENDM SMAC.RCCww­ ¾ŽÄ´ ˜ .MACRO SMAC.REQL DEST, SIGNED SMAC.EMIT  .ENDM SMAC.REQLww­@EÄ´ ˜ .MACRO SMAC.RGEQ DEST, SIGNED SMAC.EMIT  .ENDM SMAC.RGEQww­ ¾ŽÄ´ ˜ .MACRO SMAC.RGTR DEST, SIGNED SMAC.EMIT  .ENDM SMAC.RGTRww­@EÄ´ ˜ .MACRO SMAC.RLBC ARG1, DEST SMAC.EMIT  .ENDM SMAC.RLBCww­@EÄ´ ˜< .MACRO SMAC.RLBS ARG1, DEST SMAC.EMIT  .ENDM SMAC.RLBSww­@EÄ´ ˜ .MACRO SMAC.RLEQ DEST, SIGNED SMAC.EMIT  .ENDM SMAC.RLEQww­ ¾ŽÄ´ ˜ .MACRO SMAC.RLSS DEST, SIGNED SMAC.EMIT  .ENDM SMAC.RLSSww­ ¾ŽÄ´ ˜ .MACRO SMAC.RNEQ DEST, SIGNED SMAC.EMIT  .ENDM SMAC.RNEQww­@EÄ´ ˜ .MACRO SMAC.RSC DEST, SIGNED SMAC.EMIT  .ENDM SMAC.RSCww=­@EÄ´ ˜ .MACRO SMAC.RVC DEST, SIGNED SMAC.EMIT  .ENDM SMAC.RVCww­@EÄ´ ˜ .MACRO SMAC.RVS DEST, SIGNED SMAC.EMIT  .ENDM SMAC.RVSww­@EÄ´ ˜ .MACRO SMAC.RW DEST, SIGNED SMAC.EMIT  .ENDM SMAC.RWww­ ¾ŽÄ´ ˜# .MACRO SMAC.SC DEST, SIGNED, SENSE* SMAC.GSLB , , ,  .ENDM SMAC.SCww­ ¤ˆÄ´ ˜, .MACRO SMAC.SHORTB REL, DEST, SIGNED, SENSE .IF DIF,SEN>SE,SMAC..BRREV ; SMAC.EMIT .MEXIT .IF_FALSE SMAC.R'REL , .MEXIT .ENDC .ENDM SMAC.SHORTBww­ ¤ˆÄ´ ˜, .MACRO SMAC.SHORTB.B REL, ARG1, DEST, SENSE; .IF DIF,SENSE,SMAC..BRREV ; SMAC.EMIT .MEXIT .IF_FALSE SMAC.R'REL , .MEXIT .ENDC .ENDM SMAC.SHORTB.Bww­ ¤ˆÄ´ ˜ .MACRO SMAC.TAG LBL, SUFFIX SMAC.EMITL <_.'LBL'.'SUFFIX> .ENDM SMAC.TAGww­à–…Ä?´ ˜I .MACRO SMAC.UNTIL C6,T6,C5,T5,C4,T4,C3,T3,C2,T2,C1,REL,ARG1,ARG2,TYPE=L ; .IRP CC,\..LBL .IF IDN,, ; SMAC.EMIT .IF_FALSE .IF DIF,, ; .IF DIF,, ;5 SMAC.GENTST , , , , - <_.'CC'.1>, SMAC..BRREV .IF_FALSE ;4 SMAC.GENTST , , , ,- <_.'CC'.3>, SMAC..NORM .ENDC .ENDC .ENDC .ENDR .IF NB, ;/ @ SMAC.UNTIL <>, <>, , , , , -% , , , , C2, T2 .ENDC .ENDM SMAC.UNTILww­ ¾ŽÄ´ ˜# .MACRO SMAC.VC DEST, SIGNED, SENSE* SMAC.GSLB , , ,  .ENDM SMAC.VCww­ ¾ŽÄ´ ˜# .MACRO SMAC.VS DEST, SIGNED, SENSE* SMAC.GSLB , , ,  .ENDM SMAC.VSww­ ¾ŽÄ´ ˜" .MACRO SMAC.W DEST, SIGNED, SENSE) SMAC.GSLB , , , .ENDM SMAC.Www­à–…Ä´ ˜IA .MACRO SMAC.WHILE C6,T6,C5,T5,C4,T4,C3,T3,C2,T2,C1,REL,ARG1,ARG2,TYPE=L ; .IRP CC,\SMAC..LBLN .IF IDN,, ..NOOR = 0F SMAC.GENTST , , , , <_.'CC'.4>, SMAC..NORM .IF_FALSE ;G SMAC.GENTST , , , , <_.'CC'.3>, SMAC..BRREV .ENDC .ENDR .IF NB, ;/ SMAC.WHILE <>, <>, , , , , -% , , , , C2, T2 .ENDC .ENDM SMAC.WHILEww­`Þ`¦]˜(.MACRO S!BOBGEQ_W INDEX, DEST, ?INT, ?NEXT SOBGEQ INDEX, INT BRB NEXT INT: BRW DESTNEXT:.ENDM SOBGEQ_Www­eb¦]˜(.MACRO SOBGTR_W INDEX, DEST, ?INT, ?NEXT SOBGTR INDEX, INT BRB NEXT INT: BRW DESTNEXT:.ENDM SOBGTR_Www­ 29¦]˜.MACRO SPAWN COMMAND .EXTERNAL LIB$SPAWN .IF BLANK COMMAND CALLS #0, G^LIB$SPAWN .IF_FALSE PUSHAL COMMAND CALLS #1, G^LIB$SPAWN .ENDC .ENDM SPAWNww­@„Ä´ ˜ .MACRO STRING LEN, INIT, ?SYM"C;; $DSCDEF .NCHR ..CNT, .IF GE, .WORD LEN .IF_FALSE .WORD ..CNT .IF_TRUE_FALSE .BYTE DSC$K_DTYPE_T .BYTE DSC$K_CLASS_S .ADDRESS SYMSYM: .ASCII ~INIT~ .IF_TRUE . = . +  .ENDC .ENDM STRINGww­`|Ä´ ˜1 .MACRO UNTIL T1,C1,T2,C2,T3,C3,T4,C4,T5,C5,T6,C6 .IF NDF,SMAC..INI. .ERROR ; UNTIL occurs before any REPEAT's .MEXIT .ENDC SMAC.PEEK ..LBL, ..TYP .IF NE,<..TYP-SMAC..REPEAT>/ D .ERROR ; UNTIL does not terminate a REPEAT .MEXIT .ENDC SMAC.POP ..LBL, ..TYP ; .IRP CC,\..LBL SMAC.TAG 'CC',2 ; .ENDR .NARG ..NARG .IF EQ,..NARG: .ERROR ; UNTIL requires a condition, FOREVER, or ONCE .MEXIT .ENDC? SMAC.UNTIL ,,,,,,,,,,- C1, T1 SMAC.TAG \..LBL,3 .ENDM UNTILww­@„Ä´ ˜ .MACRO VECTOR NRELS,SIZE=L; .BLK'SIZE NRELS .ENDM VECTORww­À¸:¦]˜.MACRO WAIET SECONDS .IF BLANK SECONDS+ .ERROR 0;WAIT -- no wait time specified; .MEXIT .ENDC .EXTERNAL LIB$WAIT PUSHAF SECONDS CALLS #1, G^LIB$WAIT .ENDM WAITww­`|Ä´ ˜< .MACRO WHILE T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6 SMAC.INI ; .NARG ..NARG .IF BLANK, ;8 .ERROR ; Missing condition or DO in WHILE statement .MEXIT .ENDC .IF NE,<<..NARG/2>*2-..NARG> ;8 .ERROR ; Missing condition or DO in WHILE statement .MEFXIT .ENDC ..NOOR = 1 SMAC.TAG \SMAC..LBLN,1 ;+ SMAC.WHILE ,,,,,,- ,,,,C1,T1 .IF EQ,..NOOR ; SMAC.TAG \SMAC..LBLN,4 .ENDC# SMAC.PUSH \SMAC..LBLN,\SMAC..WHILE SMAC..LBLN = SMAC..LBLN + 1 .ENDM WHILEww­ÀéÇ>9˜.macro _landef, global $defini lan, global$equ lan_s_ethernet 1500$equ lan_c_ethernet 1500$equ lan_s_ethernet_pad 1498$equ lan_c_ethernet_pad 1498$equ lan_s_802_ctl1 1497$equ lanG_c_802_ctl1 1497$equ lan_s_802_ctl2 1496$equ lan_c_802_ctl2 1496$equ lan_s_802e 1492$equ lan_c_802e 1492 $defend lan, global def .endm _landefww­ÀÔ>9˜.macro _lanhdrdef, global $defini lanhdr, global$equ lanhdr_s_lanhdrdef 20$equ lanhdr_c_lanhdrdef 20$equ lanhdr_s_address 6$equ lanhdr_r_dest 0$equ lanhdr_r_source 6$equ lanhdr_w_protocol 12$equ lanhdr_b_dsap 12$equ lanhdr_b_ssap 13$equ lanhdr_b_ctl1 14$equ lanhdr_b_ctl2 15$eHqu lanhdr_r_pid 15$equ lanhdr_s_pid 5$equ lanhdr_r_copid 15$equ lanhdr_s_copid 3$equ lanhdr_w_ipid 18$equ lanhdr_r_ipid 18$equ lanhdr_s_ipid 2$equ lanhdr_c_snap_sap 170 $defend lanhdr, global def.endm _lanhdrdefww­~ó8®Z—.macro _opcdef gbl$defini opc,gbl$def opc$b_rqstcode .blkb 1$def opc$b_scope .blkb 1$def opc$l_options .blkl 1$def opc$l_rq_options .blkl 1$def opc$l_attnmask1 .blkl 1$def opc$l_attnmask2 .blkl 1$def opc$l_rqstid .bIlkl 1$def opc$l_uic .blkl 1$def opc$k_hdr_size __save = . . = __save!$def opc$w_request_length .blkw 1$def opc$t_request_text$def opc$k_request_min_size . = __save"$def opc$w_security_length .blkw 1$def opc$t_security_text$def opc$k_security_min_size . = __save$def opc$t_reply_opr$def opc$k_reply_min_size . = __save$def opc$t_oprenable_opr$def opc$k_operenable_min_size . = __save$def opc$t_logfile_opr$def opc$k_logfile_min_size#J . = __save$def opc$t_status_opr$def opc$k_status_min_size . = __save$def opc$k_cancel_min_size . = __save$def opc$k_timestamp_min_size . = __save$def opc$k_shutdown_min_size$vield opc,0,<- - - - >$vield opc,0,<- - - - >$vield opc,0,<- - - - - >$vield opc,0,<- - >$vield opc,0,<- - >$vield opc,0,<- - - - - - - - >$equlst opc$k_,gbl,,,<- - - - - >$equlst opc$k_,gbl,,,<- - - - - >$equlst opc$_x_,gbl,,,<- - - - - - - - - - - - - >$defend opc,gbl .endm _opcdefww