*DECK     MACROS
          IDENT  MACRO_S
 MACROS   TITLE  MACRO_S - HOST COMPILER STORAGE MACRO SKELTONS.
*CALL     SSTCALL 
          SPACE  3
**        MACRO_S - HOST COMPILER STORAGE MACRO SKELTONS. 
* 
*         *MACRO_S* CONTAINS THE DEFINITIONS OF THE HOST COMPILERS
*         MACROS THAT GENERATE STORAGE RESERVATION AND INITIALIZATION 
*         DIRECTIVES IN THE RELOCATABLE BINARY.  FOR EACH MACRO IN
*         THE HOST COMPILERS ASSEMBLY TEXT ( FTNMAC,PLIMAC,ETC. ) THERE 
*         IS A CORRESPONDING *SMACRO* DEFINITION IN A COMDECK *SMACROS* 
*         WHICH RESIDES ON THE IT"S OLDPL.  THE RULES FOR CREATING THIS 
*         DECK AND THE SMACROS ARE DISCUSSED BELOW. 
          SPACE  3
 N.MMP    EQU    6           MAX MACRO PARAMS 
  
*         DEFINE ORDERING OF LOCAL BLOCKS 
  
          USE    PARAMB      PARAMETER BUFFERS
          USE    INDEXT      MACRO OPCODE INDEX TABLE 
          ENTRY  F$MACS 
 F$MACS   BSS    0
          USE    SKELS       MACRO SKELTONS 
  
          USE    PARAMB 
 PBUF     ENTRY. 0,#         0 WORD 
          BSS    N.MMP       MACRO PARAMETER WORDS
 L0       BSSZ   N.MMP+1     MACRO PARAMTER WORD
 Z        SET    L0-PBUF
 SS#BIAS  EQENT  377777B-Z   - INDEX FROM PBUF TO LOCAL SYMS
          ECHO   1,Z=(1,2,3,4,5,6)
 L_Z      EQU    L0+Z 
  
          ENTRY  F$MIC       MICRO STRING VALUES - 60/0L_STRNG,60/6*NCHR
 F$MIC    BSS    0
          ECHO   1,I=(1,2,3,4)
 M_I      BSS    2
 ORG#CTR  ENTRY. 0
  
          ECHO   ,Z=(1,2,3,4,5,6) 
          QUAL   CON
 C_Z      =      0
          QUAL   SYM
 S_Z      =      0
          ENDD
          QUAL
 IF.XX    SPACE  2,7
*         DEFINE IF.XX VALUES 
  
 .Z       SET    0
          ECHO   2,XX=("RELOPS")
 IF.XX    EQU    .Z 
 .Z       SET    .Z+1 
  
*         DEFINE ORDINALS OF FIXED LOCAL BLOCKS FOR USE. MACRO, ETC.
  
          IFC    NE,/"HC.FLB"//,4 
 .Z       SET    1S15+0 
          ECHO   2,X=("HC.FLB") 
 X$       EQU    .Z 
 .Z       SET    .Z+1 
  
*         DEFINE OPERATOR VALUE MICROS FOR SET. MACRO 
  
 +        MICRO  1,,/0/ 
 -        MICRO  1,,/1/ 
 *        MICRO  1,,/2/ 
 /        MICRO  1,,/3/ 
 LITORD   SPACE  2,14 
**        LITORD? - DEFINE LITERAL ORDINAL IN *PARAMB* BLOCK
* 
* ORD     LITORD? CONSTANT
  
          MACRO  LITORD?,L,VAL
          IF     -DEF,/PARAMB/.VAL,6
          USE    PARAMB 
          QUAL   PARAMB 
 .VAL     =      *-PBUF 
          QUAL   *
          DATA   VAL
          USE    *
* 
 L        SET    /PARAMB/.VAL 
          ENDM
  
          QUAL   PARAMB 
 .0       EQU    0
          QUAL
 MAC-DEF  TITLE  MACRO DEFINITIONS
**        SMACRO - DEFINE THE BEGINNING OF A STORAGE MACRO DEFINITION.
* 
* NAME    SMACRO PLIST,LAB
*         NAME - MACRO NAME ( @ 6 CHARACTERS )
*         PLIST - A PARENTHESIZED LIST OF THE ARGUMENT NAMES ( @ 6 ARGS)
*         LAB  - = LAB IF THE FIRST ARG IS TO BE PLACED IN THE LABEL
*                FIELD WHEN THE MACRO IS LISTED.
* 
*         THE ARE NAME LIST IS OF THE FORM - (PI=ANAME,...) OR (PI,... )
*         WHERE 1 @ I @ 6 , AND P IS THE ARGUMENT TYPE  - 
*         C - 18 BIT CONSTANT, S - SYMTAB ORDINAL, Q - QUAL BLOCK TABLE 
*         ORDINAL, B - BLOCK TABLE ORDINAL, AND M - MICRO TABLE ORDINAL.
*         LOCAL SYMBOL ( GENERATED WITHIN ) THE MACRO ARE *LI*, WHERE 
*         1 @ I @ 6 .  THEY ARE NOT LISTED ON THE *SMACRO* LINE.
*         *ANAME* IS ANY SYMBOLIC NAME AND "ANAME" MAY BE REFERENCED IN 
*         THE MACRO DEFINITION WHERE EVER THE CORRESPONDING PARAMETER 
*         MAY APPEAR. 
* 
*         EXAMPLE - 
* PENTRY  SMACRO (S1=NAME,S2=ADDR,C1=VAL,C2=ER) 
*         THE CORRESPONDING *COMPASS* STATEMENT WOULD BE -
* PENTRY  MACRO  NAME,ADDR,VAL,ER 
*         THE ENTRY POINT *M$NAME* IS DEFINED AS THE OPCODE VALUE.
  
 .        EQU    0
 .LAB     EQU    1
  
          ECHO   1,Z=(C,B,S,Q,M,E,L),V=(1,2,3,4,5,6,7)
 AT.Z = V 
  
          MACRO  SMACRO,NAME,PL,LAB 
          ERRNZ  .FWA        MISSING ENDS DIRECTIVE 
 MN       MICRO  6,1, NAME
          IFC    EQ,/"MN"//,1 
          ENTRY  M$NAME 
 M$NAME   =      .MN
 .MN      SET    .MN+1
          USE    SKELS
+         VFD    36/6L;A
          VFD    3/1-.LAB 
*         SETUP A LIST OF ARG TYPES FOR O-LIST, PARAM ADDRESS"S AND EQV"
 .N       SET    0
          IRP    PL 
 .N       SET    .N+1 
 P        MICRO  1,1,/PL/ 
 PN       MICRO  1,2,/PL/ 
          IFC    EQ,/"P"/B/,1 
 PN       MICRO  1,,/"PN"$/ 
 EQV      MICRO  4,,/PL/
          IFC    NE,/"EQV"//,1
 "EQV"    MICRO  1,,/"PN"/
          VFD    3/AT."P" 
          IFC    NE,/"P"/M/,1 
 "PN"     SET    PBUF+.N
          IRP 
          ERRPL  .N-1-N.MMP  ;A HAS MORE THAN N.MMP PARAMETERS
          VFD    *P/.N
*         FWA OF MACRO BODY, N.PARAM RELOC, N.LOCAL RELOC 
 .FWA     SET    *
 L.PR     SET    .FWA 
 N.PR     SET    0
 .IFB     SET    0
          ENDM
  
          NOREF  .FWA,.LEN,N.PR,L.PR,.Z,Z,.N,.L 
 .FWA     SET    0
 .MN      SET    128         BASE VALUE OF SMACRO OPCODES 
 ENDS     SPACE  2,14 
**        ENDS - TERMINATE A *SMACRO* DEFINITION
* 
*         ENDS
*         ENDS CORRESPONDS TO THE COMPASS *ENDM* PSEUDO.
  
 ENDS     MACRO 
 .LEN     SET    *-.FWA 
 MAX.LM   MAX    .LEN,MAX.LM
          IFC    NE,/"IFSTK"//,2
 IFSTK    MICRO  1,,
          ERR    IF/ENDIF NESTING ERROR 
*                            EXPAND RELOC BYTES 
          ECHO   6,T=(PR) 
          IFNE   N.T,0,5
 Z        SET    1
          DUP    N.T,3
 Z        DECMIC Z
          VFD    12/T."Z" 
 Z        SET    Z+1
*                            TERMINATE LAST WORD OF RELOC BYTES 
          IFNE   *P,60,1
          VFD    *P/0 
          USE    INDEXT 
          VFD    6/,18/N.PR,18/.LEN,18/.FWA-1 
          USE    SKELS
 .FWA     SET    0
          ENDM
  
 MAX.LM   SET    0           MAX *SMACRO* LENGTH
 FRB?     SPACE  2,14 
*         FRB - FORM A RELOC BYTE ( INTERNAL MACRO )
* 
*         FRB?   TYP,BOTTOM-BIT 
  
 FRB?     MACRO  T,BOT
          IFC    EQ,/T/L/,2 
 .LB      SET    .LB+1
          SKIP   6
 N.PR     SET    N.PR+1 
 Z        DECMIC N.PR 
          NOREF  PR."Z" 
          ERRPL  *-L.PR-64
 PR."Z"   SET    ;BS6+*-L.PR
 L.PR     SET    *
          ENDM
  
          NOREF  .LB
 BTW      SPACE  3,14 
**        BTW - BEGIN TEXT WORD DEFINITION
*         BTW BEGINS THE DEFINITION OF A WORD OF DATA WHOSE FIELDS MAY
*         BE FILLED IN WITH VALUES TAKEN FROM THE MACRO PARAMS OR SET 
*         DEFINED VALUES OR STRING VALUES.
*         ARI, ACI, MIC, ASV, SET. IF.XX, ELSE. AND ENDIF. MAY APPEAR 
*         INSIDE A BTW/ETW PAIR.  A BTW FORCES UPPER. 
* 
*         BTW    ADDR 
*         ADDR = ADDRESS OF TEMPLATE WORD, MAY NOT BE A LITERAL.
*                IF ADDR IS ABSENT, THEN A ZERO TEMPLATE WORD IS ASSUMED
  
 BTW      MACRO  ADDR 
          LOCAL  ETWA 
 BTW      MICRO  1,,/ETWA/
          ERRNZ  .VFD        BTW/ETW NESTING ERROR
          IFC    NE,$ADDR$$,2 
          VFD    12/1023+OC.BTW,18/ETWA,12/,18/ADDR 
          SKIP   1
          VFD    12/1023+OC.BTW,18/ETWA,12/,18/PBUF 
 .VFD     SET    *-.FWA 
          ENDM
  
**        ETW - END TEXT WORD DEFINITION
* 
*         ETW 
  
 ETW      MACRO 
          ERRZR  .VFD        BTW/ETW NESTING ERROR
          ERRPL  .IFB-.VFD   BTW/ETW MUST BE INSIDE A IF/ELSE/ENDIF 
 "BTW"    EQU    *-1-.FWA    BTW/ETW NESTING ERROR
 BTW      MICRO  1,,
 .VFD     SET    0
          ENDM
 ARI      SPACE  2,14 
**        ARI - ADD RELOCATION INFO TO TEXT FIELD 
*         ACI - ADD CONSTANT VALUE TO TEXT FIELD. 
* 
*         ARI    TOP-BIT,BIT-LEN,SYMORD 
*  OR     ARI    RELOC,SYMORD/PARAM   RELOC = U, M OR L FOR UPPER,
*         MIDDLE OR LOWER RELOCATION. 
*         THE CORRESPONDING *COMPASS* STATEMENTS WOULD BE - 
*         POS    TOP-BIT
*         VFD    BIT-LEN/PARAM-VALUE  IS ADDED TO THE CURRENT BTW WORD
  
 RL.U     EQU    30          BASE BIT OF RELOCATABLE FIELD
 RL.M     EQU    15 
 RL.L     EQU    0
  
          ECHO   ,OCV=(ARI,ACI,AAC) 
 OCV      MACRO  TB,LEN,ORD 
          ERRZR  .VFD        OCV MUST BE INSIDE A BTW/ETW PAIR
 Z        IFC    EQ,/ORD//
 .L       SET    18 
 .F       SET    RL.TB+1S10 
 .S       MICRO  1,,/LEN/ 
 Z        ELSE
 .L       SET    LEN
 .F       SET    TB+1-.L+1S10 
 .S       MICRO  1,,/ORD/ 
 Z        ENDIF 
          VFD    12/1023+OC.OCV,18/59-.L,12/.F,18/".S"
          ENDM
          ENDD
  
          NOREF  .F,.L
 AAE      SPACE  3,14 
**        AAE - ADD ADDRESS EXPRESSION TO A TEXT FIELD
* 
*         AAE    TOP-BIT,BIT-LEN,SYMORD,CA
*         AAE    RELOC,SYMORD,CA
* 
*         IF SYMORD = CON. , THEN THE VALUE OF THE CA WILL BE CHANGED 
*         TO THE VALUE OF CUT(CA) AND * IH+CA* WILL BE ADDED TO THE 
*         FIELD.
  
 AAE      MACRO  TB,LEN,ORD,CA
          IFC    EQ,/CA//,3 
          ARI    TB,LEN 
          AAC    TB,ORD 
          ELSE   2
          ARI    TB,LEN,ORD 
          AAC    TB,LEN,CA
          ENDM
 MIC      SPACE  2,14 
**        MIC - DEFINE CHARACTER STRING VALUE OF SYMTAB ORD 
* 
* MI      MICRO  FIRST-CHAR,,$BCD(SYMORD)$         N-CHAR = 0 
* MI      MICRO  FIRST-CHAR,N-CHAR,$BCD(SYMORD)      $   N-CHAR " 0 
*         N-CHAR = NUMBER OF CHARACTERS, IF = 0 THEN TAKE CHARS UNTIL 
*                SEPERATOR CHAR 
*         MIC IS EQUIVALENT TO THE STATEMENT -
* MI      MICRO  FIRST-CHAR,N-CHAR,$BCD(SYMORD)$
*         WHERE $ IS THE SEP-CHAR.
  
  
          MACRO  MIC,M,FC,NC,SC,SYMORD
          IF     -DEF,/SYM/SYMORD,1 
          ERR    SYMORD MUST BE A SYMTAB ORDINAL
          VFD   12/1023+OC.MIC,12/M-M1,6/6*NC,6/6*FC-6,6/1R_SC,18/SYMORD
          ENDM
 ASV      SPACE  2,14 
**        ASV - ADD STRING VALUE TO FIELD 
* 
*         ASV    TOP-BIT,NC,MIC 
*         TOP-BIT = LEFTMOST BIT OF WORD
*         THE STRING NC_L"MIC" IS ADDED TO THE FIELD STARTING AT TOP-BIT
  
 ASV      MACRO  TB,NC,MIC
          VFD    12/1023+OC.ASV,6/TB,18/6*NC-1,6/,18/MIC
          ENDM
 IF.XX    SPACE  3,16 
**        IF.XX CONDITIONALLY ASSEMBLE MACRO CODE 
*         CODE IS SKIPPED UNTIL ENDIF OR ELSE IF P1 XX P2 IS FALSE. 
* 
* LAB     IF.XX  P1,P2    ( XX = LT,LE,GT,GE,EQ, OR NE )
*         PI - IF TEST PARAMETERS, ARE INTERPRETED AS CONSTANTS.
  
          NOREF  .O1,.O2,.IFB,.VFD
 IFSTK    MICRO  1,,
  
          ECHO   ,XX=(EQ,NE,GE,LE,LT,GT)
* 
          MACRO  IF.XX,LOC,P1,P2
          LOCAL  LABL 
          IFC    EQ,/LOC//,1
          ERR    IF.XX MUST BE LABELED
 LOC.     MICRO  1,,/LABL/
 I        ECHO   ,P=(P1,P2),V=(.O1,.O2) 
          IF     -ABS,P,2 
 V        SET    P-PBUF 
          SKIP   1
 V        LITORD? P 
 I        ENDD
          VFD    12/1023+OC.IFT,3/IF.XX,15/LABL-*,15/.O1,15/.O2 
 .Z       DECMIC .IFB,5 
 IFSTK    MICRO  1,,/".Z""IFSTK"/ 
 .IFB     SET    *-.FWA 
          ENDM
          ENDD
 ELSE     SPACE  2,10 
**        ELSE. - REVERSE EFFECTS OF *IF.XX*
* 
* LAB     ELSE. 
  
          MACRO  ELSE.,LOC
          LOCAL  LABL 
          ERRMI  .IFB-.VFD   BTW/ETW MUST BE CONTAINED WITH A IF/ELSE 
*                            DEFINE LOC FOR IF SKIP COUNT 
 "LOC."   BSS    0
 LOC.     MICRO  1,,/LABL/
          VFD    12/1023+OC.ELSE,30/,18/LABL-*
          ENDM
 ENDIF.   SPACE  2,10 
**        ENDIF. - TERMINATE IF RANGE 
* 
* LAB     ENDIF.
  
          MACRO  ENDIF.,LOC 
          ERRMI  .IFB-.VFD   BTW/ETW MUST BE CONTAINED WITH A IF/ELSE 
 "LOC."   EQU    *-1
 IFSTK    MICRO  6,,/"IFSTK"/ 
 .Z       MICRO  1,5,/"IFSTK"/
 .IFB     SET    ".Z" 
          ENDM
 DCSS     SPACE  2,12 
**        DCSS - DEFINE COMPILER SPECIAL SYMBOL THAT IS GLOBAL
*         ( REFERENCED IN DIFFERENT MACROS ). 
*         A *DCSS* DEFINED SYMBOL MAY BE DEFINED BY A SET. STATEMENT
*         AND REFERENCED IN OTHER SET. OR IF.XX STATEMENTS. 
* 
* NAME    DCSS   INITIAL-VALUE,TYPE 
*         INITIAL-VALUE IS ANY ADDRESS EXPRESSION AND IS OPTIONAL.
*         TYPE = *SYM* OR *CON* WHICH INDICATES WETHER THE NAME IS TO 
*         BE INTERPRETED AS A SYMBOL TABLE ORDINAL OR A CONSTANT. 
*         DEFAULT IS *CON*. 
  
          MACRO  DCSS,NAME,VAL,TYP
 NAME     CON    VAL 0
          QUAL   TYP CON
 NAME     EQU    0
          QUAL
          ENDM
SET.      SPACE  2,14 
**        SET. - SET SYMBOL VALUE TO VALUE OF ADDRESS EXPRESSION. 
* 
* LN      SET.   A-E
*         LN - A LOCAL SYMBOL ( L1,L2,... ) 
*         A-E - AN ADDRESS EXPRESSION WHICH MAY CONTAIN CONSTANTS,
*         PARAMETERS, SYMBOL ORDINALS OR * ( THE ORG COUNTER ) AS TERMS,
*         AND + - * AND / AS OPERATORS. EVALUATION IS FROM LEFT TO RIGHT
*         WARNING - THERE IS VERY LITTLE ERROR CHECKING, SO BE CAREFUL. 
*         LET *ANY* = ABS OR REL, THEN ABS-REL, ANY*REL, ANY/REL AND
*         REL/ANY ARE ILLEGAL OPERATOR OPERAND COMBINATIONS.
  
          MACRO  SET.,LOC,AE
*                            INITIALIZE 
 LV       MICRO  1,,/LOC/ 
 AES      MICRO  1,,$AE $ 
 Z        SET    1           STRING POINTER 
          GETTKN OP1
          IFC    EQ,$"OP1"$*$,1 
 OP1      MICRO  1,,/ORG#CTR/ 
*                            CHECK FOR LEADING UNARY MINUS
          IFC    EQ,$"OP1"$-$,4 
          GETOPND OP2 
 OP1      MICRO  1,,/PBUF/
          OUTSET -
 SET      IFGE   Z,1
*                            LOOP TO EVAL REST OF EXPRESSION
          DUP    50 
          GETOPER 
          GETOPND OP2 
          OUTSET "OP" 
 OP1      MICRO  1,,/L0/
          IFEQ   Z,0,1
          STOPDUP 
          ENDD
 SET      ENDIF 
          ENDM
  
 GETOPND  MACRO  OP 
 OP       MICRO  1,,/PBUF/
 W        IFNE   Z,0
          GETTKN OP 
          IFC    EQ,$"OP"$*$,1
 OP       MICRO  1,,/ORG#CTR/ 
 Z        MICRO  1,1,$"OP"$ 
          IFC    GT,$"Z"$9$,1 
          ERR    SET/EQU EXPECTED NAME, GOT - $"OP"$
          IF     ABS,"OP",2 
 ."OP"    LITORD? "OP"
 OP       MICRO  1,,$PBUF+."OP"$
 W        ENDIF 
          ENDM
  
 GETOPER  MACRO 
 OP       MICRO  1,,/+/ 
          IFNE   Z,0,3
          GETTKN OP 
          IFC LT,$"OP"$+$,1 
          ERR    SET/EQU EXPECTED AN OPERATOR, GOT $"OP"$ 
          ENDM
  
 OUTSET   MACRO  OP 
*         ASSUMES OP1,OP2 SETUP, Z=0 IF NOMORE
 RES      MICRO  1,,/L0/
          IFEQ   Z,0,1
 RES      MICRO  1,,/"LV"/
          ECHO   3,AR=("RES","OP2","OP1"),RV=(.R1,.O2,.O1)
 RV       SET    AR-PBUF
          IF     DEF,/SYM/AR,1
 RV       SET    RV+1S14
          VFD    12/1023+OC.SET,15/.R1,3/"OP",15/.O2,15/.O1 
          ENDM
  
 GETTKN   MACRO  OP          RETURN NEXT TOKEN IN MICRO $OP$
 ZB       SET    Z
*                            CHECK FIRST CHARACTER FOR OP OR NAME 
 OP       MICRO  Z,1,$"AES"$
 X        IFC    GT,$"OP"$9$
 Z        SET    Z+1
          IFC    EQ,$"OP"$ $,1
 Z        SET    0
 X        ELSE
*                            ASSEMBLE A NAME
          DUP    8
 Z        SET    Z+1
 Z        MICRO  Z,1,$"AES"$
          IFC    GT,$"Z"$9$,5 
          IFC    NE,$"Z"$.$,4 
 OP       MICRO  ZB,Z-ZB,$"AES"$
          IFC    EQ,$"Z"$ $,1 
 Z        SET    0
          STOPDUP 
          ENDD
 X        ENDIF 
          ENDM
  
 PSEUDOS  SPACE  3,14 
**        THE PSEUDOS DEFINED BELOW MAY APPEAR IN *SMACROS* WITH THE
*         RESTRICTION THAT THEY NOT APPEAR IN BETWEEN A BTD/ETD OR
*         BTW/ETW PAIR. 
 USE      SPACE  2,10 
**        USE. - CHANGE USE BLOCKS
* 
*         USE.   BN  , BN = FIXED LOCAL BLOCK NAME OR B-PARAM 
*                            CLF = CONDITIONAL LOAD FLAG ( BLANK OR 1 ) 
  
 USE.     MACRO  BN,CLF 
          ERRNZ  .VFD        USE MAY NOT APPEAR INSIDE A BTW/ETW PAIR 
          IF     -DEF,BN$,2 
          ERR    ILLEGAL PARAMETER TO USE. MACRO - BN 
          SKIP   1
 .Z       SET    BN$
          IF     REG,BN,1 
          FRB?   B,0
          VFD    12/1023+OC.USE,23/,1/CLF,24/.Z 
          ENDM
 QUAL     SPACE  2,14 
**        QUAL.  CHANGE QUAL BLOCK NAME 
* 
*         QUAL   QN , QN = BLANK , * OR A Q-PARAM 
  
 QUAL.    MACRO  QN 
 .Z       SET    0
          IFC    NE,/QN// 
 .Z       SET    1
          IFC    NE,/QN/*/
 Z        MICRO  1,1,/QN/ 
          IFC    NE,/"Z"/Q/,1 
          ERR    ILLEGAL ARG TO QUAL. - QN
 .Z       SET    QN 
          ENDIF 
          IF     -ABS,.Z,1
          FRB?   Q,0
          VFD    12/1023+OC.QUAL,48/.Z
          ENDM
 CON      SPACE  2,10 
**        CON. - DEFINE A RELOCATABLE WORD OF DATA
* 
* LAB     CON.   SY,CA
  
          MACRO  CON.,LAB,SY,CA 
          ERRNZ  .VFD        CON MAY NOT APPEAR INSIDE A BTW/ETW PAIR 
          IFC    NE,/LAB//,1
 LAB      BSS.   0
 .LB      SET    0
          ECHO   4,T=(SY,CA),P=(30,0) 
 .LB      SET    2*.LB
          IF     -ABS,T,2 
 Z        MICRO  1,1,/T/
          FRB?   "Z",P
          VFD    12/1023+OC.CON,18/SY,6/.LB,24/CA 
          ENDM
 BSS      SPACE  2,14 
**        BSS./BSSZ. - RESERVE STORAGE SPACE. 
* 
* LAB     BSS.   WC 
  
          ECHO   ,OCV=(BSS,BSSZ)
          MACRO  OCV.,LOC,WC
          ERRNZ  .VFD        OCV MAY NOT APPEAR INSIDE A BTW/ETW PAIR 
 .LB      SET    0
          IF     -ABS,WC,2
 Z        MICRO  1,1,/WC/ 
          FRB?   "Z",0
          VFD    12/1023+OC.OCV,24/.LB,24/WC
          IFC    NE,/LOC//,1
 LOC      SET.   *-WC 
          ENDM
          ENDD
 SMACROS  TITLE  HOST COMPILER DEFINED STORAGE MACROS 
*CALL     SMACROS 
  
*         MACRO EXPANSION BUFFER
  
          USE    /CCGSCR/ 
 F$MXB    ENTRY. 0
          BSS    MAX.LM 
 .US      SET    F$MXB+260-*       UNUSED SPACE 
          IFGT   .US,0,1
          BSS    .US
          USE    0
  
          END 
