*COMDECK  NMI=MAC 
 $MACROS$ SPACE  2,8
          CTEXT  MACRO DEFINITIONS FOR *L* DISPLAY USAGE
 QUES     SPACE  4,8
***       QUES - COORDINATE SETTINGS FOR QUESTIONS. 
*         DEFINITIONS OF *Y* COORDINATE AND VERTICAL SPACING VALUES 
*         FOR QUESTIONS TO BE POSED VIA CALLS TO *QUERY*.  THE SYMBOLS
*         ARE QUALIFIED BY THE NAME *QUES*. 
          SPACE  1
          QUAL   QUES 
 QUESVS   EQU    24 
 QUESY    EQU    702B 
          QUAL
 TEXT     SPACE  4,8
***       TEXT - COORDINATE SETTINGS FOR QUESTION TEXT. 
*         DEFINITIONS OF *Y* COORDINATE AND VERTICAL SPACING VALUES 
*         FOR THE TEXT WHICH ACCOMPANIES QUESTIONS POSED VIA CALLS TO 
*         *QUERY*.  THE SYMBOLS ARE QUALIFIED BY THE NAME *TEXT*. 
          SPACE  1
          QUAL   TEXT 
 TEXTVS   EQU    24 
 TEXTY    EQU    476B 
          QUAL
 DISPLAY  SPACE  4,8
***       DISPLAY  NAME,TOD,TITLE,EORI
*         A MACRO TO INITIALIZE A DISPLAY.  THE PARAMETERS ARE AS 
*         FOLLOWS%
*                NAME = NAME OF DISPLAY.  ALL SYMBOLS GENERATED WITHIN
*                       THE MACRO WILL BE QUALIFIED BY THIS NAME. 
*                TOD = TYPE OF DISPLAY - MAY BE EITHER% 
*                            1.  *INFORM* - WILL BE DISPLAYED VIA CALLS 
*                                TO INFORM.  PAGES ARE PERMITTED. 
*                            2.  *QUERY* - WILL BE DISPLAYED VIA CALLS
*                                TO QUERY.  NO PAGING PERMITTED AND WE
*                                LEAVE SPACE FOR THE MASTER DISPLAY.
*                TITLE = TITLE TO APPEAR AT TOP OF DISPLAY.  WILL BE
*                        DISPLAYED IN MEDIUM, INTENSE CHARACTERS AND
*                        THEREFORE CANNOT EXCEED 32 CHARACTERS. 
*                EORI = FLAG TO INDICATE WHETHER DISPLAY NAME IS TO BE
*                       CONSIDERED AS AN ENTRY POINT.  IF YOU DO NOT
*                       WANT IT CLASSIFIED AS AN ENTRY POINT THE VALUE
*                       MUST BE *I*.
* 
*         NOTE%  IF DISPLAY IS A *QUERY*, THE QUESTION MUST APPEAR AS 
*         THE FIRST LINE OF DISPLAY TEXT (IMMEDIATELY AFTER THE DISPLAY 
*         MACRO).  IT MUST BE PRESENTED TO COMPASS VIA THE FOLLOWING
*         STATEMENT%
* 
*         QUESTION (ACTUAL QUESTION TEXT) 
* 
*         IT WILL BE DISPLAYED IN SMALL CHARACTERS AND CANNOT, THEREFORE
*         EXCEED 64 CHARACTERS.  IMMEDIATELY FOLLOWING THIS CARD MUST 
*         APPEAR AT LEAST SOME TEXT EXPLAINING OPTIONS, ETC.  THESE 
*         LINES MAY BE GENERATED VIA ANY OF THE TEXT GENERATION MACROS. 
          SPACE  1
 DISPLAY  MACRO  NAME,TOD,TITLE,EORI
          LOCAL  ERROR,ORGD 
 ORGD     BSS    0           FORCE A NEW WORD BOUNDARY
 ERROR    SET    1
 DISNAME  MICRO  1,,$_NAME_$
 INFORM   IFC    EQ,$TOD$INFORM$
 ERROR    SET    0
          QUAL   NAME 
 .TYPE.   EQU    1
 NPAGE    SET    1
 N        DECMIC NPAGE,2
 PAGE_"N" EQU    *
          QUAL
 INFORM   ENDIF 
 QUERY    IFC    EQ,$TOD$QUERY$ 
 ERROR    SET    0
          QUAL   NAME 
 .TYPE.   EQU    0
 DISFWA   EQU    *
          QUAL
 QUERY    ENDIF 
          IFNE   ERROR,0,1
          ERR    SECOND PARAMETER UNRECOGNIZED - SEE COMMENTS.
          IFC    NE,$EORI$I$,1
          ENTRY  NAME        CREATE THE NAMED ENTRY POINT 
 HEADER   MICRO  1,,$_TITLE_$ 
          LINE   MEDIUM,I,C,1,("HEADER")
          IFEQ   /_NAME_/.TYPE.,0,1 
          RESET  QUES 
 DISPLAY  ENDM
 DISEND   SPACE  4,8
***       DISEND NAME 
*         A MACRO TO TERMINATE A DISPLAY.  THE PARAMETER *NAME* IS THE
*         SAME AS THE PARAMETER WHICH APPEARED ON THE LAST *DISPLAY*
*         MACRO CALL. 
          SPACE  1
 DISEND   MACRO  NAME 
          LOCAL  ERROR,C
          IFC    EQ,$NAME$$,1 
          ERR    PARAMETER IS MISSING.
 ERROR    SET    1
 QUERY    IFEQ   /_NAME_/.TYPE.,0 
          QUAL   NAME 
 DISLWA   EQU    *
          QUAL
 NAME     BSS    0
          QUAL   NAME 
          VFD    30/DISFWA,30/DISLWA
          QUAL
 ERROR    SET    0
 QUERY    ENDIF 
 INFORM   IFEQ   /_NAME_/.TYPE.,1 
          QUAL   NAME 
 .PAGE_"N" EQU   *           TERMINATE LAST PAGE
          QUAL
 NAME     BSS    0
          QUAL   NAME 
          CON    NPAGE       NUMBER OF PAGES
 C        SET    0
 DISTAB   DUP    NPAGE
 C        SET    C+1
 N        DECMIC C,2
          VFD    30/PAGE_"N"_,30/.PAGE_"N"
 DISTAB   ENDD
          QUAL
 ERROR    SET    0
 INFORM   ENDIF 
          IFNE   ERROR,0,1
          ERR    NO MATCHING DISPLAY MACRO FOR THIS DISEND MACRO. 
 DISEND   ENDM
 PAGE     SPACE  4,8
***       PAGE
*         A MACRO TO FORCE A NEW PAGE.  MAY BE USED ONLY DURING CREATION
*         OF AN *INFORM* DISPLAY. 
          SPACE  1
 PAGE     MACRO 
 TEST     IFNE   Y,/QUES/QUESY
 Y        SET    0           FORCE A NEW PAGE 
          SKIP   MEDIUM,1,MEDIUM
 TEST     ENDIF 
 PAGE     ENDM
 LINE     SPACE  4,8
***       LINE   CHAR,INTEN,COLUMN,VERT,TEXT,VAR,TAG
*         A MACRO TO GENERATE TEXT IN *L* DISPLAY FORMAT. 
*         PARAMETERS ARE AS FOLLOWS%
*                CHAR = CHARACTER SIZE - MAY BE ANY OF THE FOLLOWING% 
*                            1.  *S* OR *SMALL*.  (8X8 CHARACTERS)
*                            2.  *M* OR *MEDIUM*.  (16X16 CHARACTERS) 
*                            3.  *L* OR *LARGE*.  (32X32 CHARACTERS)
*                INTEN = INTENSITY, A FUNCTION OF CHARACTER SIZE.  IT 
*                        MAY BE ANY OF THE FOLLOWING% 
*                            1.  *N* OR *NORMAL*. 
*                            2.  *B* OR *BRIGHT*. 
*                            3.  *I* OR *INTENSE*.
*                COLUMN = HORIZONTAL INDENTATION.  IT MAY BE ANY OF 
*                         THE FOLLOWING%
*                            1.  *C* CENTER THE LINE. 
*                            2.  *DECIMAL NUMBER* - NUMBER OF LEADING 
*                                BLANKS TO PRECEED ACTUAL TEXT. 
*                VERT = VERTICAL SPACING, A FUNCTION OF CHARACTER SIZE. 
*                       IT MAY BE ANY OF THE FOLLOWING% 
*                            1.  *DECIMAL NUMBER* - SPECIFIC LINE.  IT
*                                MUST BE IN THE RANGE OF (1 - 45).  LINE
*                                1 IS THE TOP LINE, LINE 45 IS THE
*                                BOTTOM LINE. 
*                            2.  *** (ASTERISK) - CALCULATE SPACING 
*                                BASED ON CHARACTER SIZE OF THIS LINE.
*                            3.  ** (NULL) - CALCULATE SPACING BASED
*                                ON CHARACTER SIZE OF LAST LINE.
*                TEXT = THE ACTUAL MESSAGE TEXT.  IF IT WILL INCLUDE
*                       BLANKS, ENCLOSE THE TEXT WITHIN PARENTHESES.
*                VAR = NUMBER OF WORDS TO ADD TO TEXT.  FOR THOSE CASES 
*                      WHEN VARIABLE TEXT IS TO BE ADDED TO A MESSAGE,
*                      THIS PARAMETER MAY BE USED.  IT SPECIFIES THE
*                      NUMBER OF WORDS (10 CHARACTERS) TO BE ADDED TO 
*                      THE MESSAGE.  THE WORDS ARE ASSEMBLED AS%
*                            TAG   BSSZ  VAR
*                      THE USER MUST SUPPLY THE TEXT. 
*                TAG = THE NAME TO BE USED FOR THE FIRST OF THE EXTRA 
*                      WORDS. 
          SPACE  1
 LINE     MACRO  CHAR,INTEN,COLUMN,VERT,TEXT,VAR,TAG
          LOCAL  ERROR,CSIZE,NML,BRT,HS,VS
          LOCAL  LENGTH,INTENSE,X,HERE,THERE,CTR
 ERROR    SET    1
 OPTION   MICRO  1,1,$_CHAR_$ 
 SMALL    IFC    EQ,$_"OPTION"_$S$
 CSIZE    EQU    0           CHARACTER SIZE 
 NML      EQU    1           NORMAL INTENSITY 
 BRT      EQU    2           BRIGHT INTENSITY 
 HS       EQU    8           HORIZONTAL SPACING 
 VS       EQU    12          VERTICAL SPACING 
 ERROR    SET    0
 SMALL    ENDIF 
 MEDIUM   IFC    EQ,$_"OPTION"_$M$
 CSIZE    EQU    1           CHARACTER SIZE 
 NML      EQU    2           NORMAL INTENSITY 
 BRT      EQU    4           BRIGHT INTENSITY 
 HS       EQU    16          HORIZONTAL SPACING 
 VS       EQU    24          VERTICAL SPACING 
 ERROR    SET    0
 MEDIUM   ENDIF 
 LARGE    IFC    EQ,$_"OPTION"_$L$
 CSIZE    EQU    2           CHARACTER SIZE 
 NML      EQU    4           NORMAL INTENSITY 
 BRT      EQU    7           BRIGHT INTENSITY 
 HS       EQU    32          HORIZONTAL SPACING 
 VS       EQU    40          VERTICAL SPACING 
 ERROR    SET    0
 LARGE    ENDIF 
          IFNE   ERROR,0,1
          ERR    FIRST PARAMETER UNRECOGNIZED - SEE COMMENTS. 
 ERROR    SET    1
 OPTION   MICRO  1,1,$_INTEN_$
          IFC    EQ,$_"OPTION"_$N$,2
 ERROR    SET    0
 INTENSE  EQU    NML
          IFC    EQ,$_"OPTION"_$B$,2
 ERROR    SET    0
 INTENSE  EQU    BRT
          IFC    EQ,$_"OPTION"_$I$,2
 ERROR    SET    0
 INTENSE  EQU    7           MOST INTENSE OF ALL
          IFNE   ERROR,0,1
          ERR    SECOND PARAMETER UNRECOGNIZED - SEE COMMENTS.
 X        SET    0
 OPTION   MICRO  1,,$_TEXT_$
 LENGTH   MICCNT OPTION 
          IFC    NE,$VAR$$,1
 LENGTH   SET    10*VAR+LENGTH
 CENTER   IFC    EQ,$COLUMN$C$
 CTR      SET    LENGTH*HS
 CTR      SET    512-CTR
 X        SET    CTR/2
 CENTER   ENDIF 
          IFC    GE,$COLUMN$0$,1
 X        SET    HS*COLUMN
          IFGT   X,512,1
          ERR    HORIZONTAL SPACING IS INVALID - EXCEEDS 512. 
 CTR      SET    LENGTH*HS
 CTR      SET    CTR+X
          IFGT   CTR,512,1
          ERR    MESSAGE TO LONG OR INDENTATION PROBLEM.
 ERROR    SET    1
          IFC    EQ,$VERT$$,2 
 ERROR    SET    0
 CTR      SET    LASTVS 
          IFC    EQ,$VERT$*$,2
 ERROR    SET    0
 CTR      SET    VS 
 VERTICAL IFNE   ERROR,0
          IFGT   VERT,45,1
          ERR    FOURTH PARAMETER IS UNRECOGNIZED - SEE COMMENTS. 
 Y        SET    46*10-VERT*10
 VERTICAL ENDIF 
 VERTICAL IFEQ   ERROR,0
          IFLT   Y,60B,1
 Y        SET    0
          IFLT   CTR,Y,1
 Y        SET    Y-CTR
 NXTPAGE  IFGE   CTR,Y
          IFNE   /_"DISNAME"_/.TYPE.,1,1
          ERR    DISPLAY HAS OVERFLOWED - SHORTEN IT. 
 OVERFLOW IFEQ   /_"DISNAME"_/.TYPE.,1
          QUAL   "DISNAME"
 .PAGE_"N" EQU   *           TERMINATE PREVIOUS PAGE
 NPAGE    SET    NPAGE+1
 N        DECMIC NPAGE,2
 PAGE_"N" EQU    *           DEFINE NEW PAGE
          QUAL
          LINE   M,I,C,1,("HEADER") 
 Y        SET    Y-CTR
 OVERFLOW ENDIF 
 NXTPAGE  ENDIF 
 VERTICAL ENDIF 
 FOUR     MICRO  1,4,$_TEXT_$ 
 REST     MICRO  5,,$_TEXT_$
 HERE     EQU    *
          VFD    6/THERE-HERE,3/CSIZE,3/INTENSE,12/6000B+X,12/7000B+Y,24
,/4H_"FOUR" 
          IFC    NE,$_"REST"_$$,1 
          DATA   H$_"REST"_$
          IFC    NE,$VAR$$,1
 TAG      BSSZ   VAR
 THERE    EQU    *
 LASTVS   SET    VS 
          NOREF  LASTVS,Y 
 LINE     ENDM
 SMALL    SPACE  4,8
***       SMALL  TEXT 
*         AN ABBREVIATED FORM OF THE *LINE* MACRO.  IT CAN BE USED ONLY 
*         FOR SMALL, NORMAL INTENSITY LINES.
          SPACE  1
 SMALL    MACRO  TEXT 
          LINE   SMALL,NORMAL,,,(TEXT)
 SMALL    ENDM
 MEDIUM   SPACE  4,8
***       MEDIUM TEXT 
*         AN ABBREVIATED FORM OF THE *LINE* MACRO.  IT CAN BE USED ONLY 
*         FOR MEDIUM, NORMAL INTENSITY LINES. 
          SPACE  1
 MEDIUM   MACRO  TEXT 
          LINE   MEDIUM,NORMAL,,,(TEXT) 
 MEDIUM   ENDM
 LARGE    SPACE  4,8
***       LARGE  TEXT 
*         AN ABBREVIATED FORM OF THE *LINE* MACRO.  IT CAN BE USED ONLY 
*         FOR LARGE, NORMAL INTENSITY LINES.
          SPACE  1
 LARGE    MACRO  TEXT 
          LINE   LARGE,NORMAL,,,(TEXT)
 LARGE    ENDM
 SKIP     SPACE  4,8
***       SKIP   CHAR,NUMBER,NEW
*         A MACRO TO SKIP LINES (DOUBLE, TRIPLE, ETC. SPACING). 
*         PARAMETERS ARE AS FOLLOWS%
*                CHAR = CHARACTER SIZE OF BLANK LINE.  MAY BE ANY OF
*                       THE FOLLOWING%
*                            1.  *S* OR *SMALL*.
*                            2.  *M* OR *MEDIUM*. 
*                            3.  *L* OR *LARGE*.
*                            4.  *** (ASTERISK) - USE LAST DEFINED
*                                LINE SPACING.
*                NUMBER = NUMBER OF LINES TO SKIP.  IF OMITTED WE ASSUME
*                         ONE (1) BLANK LINE. 
*                NEW = NEW SPACING VALUE.  INDICATES THAT A NEW VERTICAL
*                      SPACING VALUE IS DESIRED.  IF PRESENT, IT MUST 
*                      BE ONE OF THE FOLLOWING% 
*                            1.  *S* OR *SMALL*.
*                            2.  *M* OR *MEDIUM*. 
*                            3.  *L* OR *LARGE*.
*         IF IN *TEXT* MODE AND THE PAGE IS FULL, OR WILL BE FULL AFTER 
*         SPACING, A NEW PAGE IS CREATED AND NO SPACING OCCURS.  ANY NEW
*         SPACING VALUE IS ACTED UPON.
          SPACE  1
          PURGMAC  SKIP      ELIMINATE *3* TYPE ERROR 
 SKIP     MACRO  CHAR,NUMBER,NEW
          LOCAL  ERROR,VS,INC,OLDVS 
 ERROR    SET    1
 OPTION   MICRO  1,1,$_CHAR_$ 
          IFC    EQ,$_"OPTION"_$S$,2
 ERROR    SET    0
 VS       EQU    12 
          IFC    EQ,$_"OPTION"_$M$,2
 ERROR    SET    0
 VS       EQU    24 
          IFC    EQ,$_"OPTION"_$L$,2
 ERROR    SET    0
 VS       EQU    40 
          IFC    EQ,$_"OPTION"_$*$,2
 ERROR    SET    0
 VS       EQU    LASTVS 
          IFNE   ERROR,0,1
          ERR    FIRST PARAMETER MUST BE *S*, *M*, *L*, OR ***. 
          IFC    EQ,$NUMBER$$,1 
 INC      SET    VS 
          IFC    NE,$NUMBER$$,1 
 INC      SET    VS*NUMBER
 OPTION   MICRO  1,1,$_NEW_$
 ERROR    SET    1
          IFC    EQ,$_"OPTION"_$S$,2
 ERROR    SET    0
 LASTVS   SET    12 
          IFC    EQ,$_"OPTION"_$M$,2
 ERROR    SET    0
 LASTVS   SET    24 
          IFC    EQ,$_"OPTION"_$L$,2
 ERROR    SET    0
 LASTVS   SET    40 
          IFC    EQ,$_"OPTION"_$$,2 
 ERROR    SET    0
 LASTVS   SET    VS 
          IFNE   ERROR,0,1
          ERR    THIRD PARAMETER MUST BE *S*, *M*, OR *L*.
          IFLT   Y,60B,1
 Y        SET    0           FORCE A NEW PAGE 
          IFLT   INC,Y,1
 Y        SET    Y-INC
 OVERFLOW IFGE   INC,Y
          IFNE   /_"DISNAME"_/.TYPE.,1,1
          ERR    DISPLAY HAS OVERFLOWED A PAGE - SHORTEN IT.
 NXTPAGE  IFEQ   /_"DISNAME"_/.TYPE.,1
          QUAL   "DISNAME"
 .PAGE_"N" EQU   *           TERMINATE PREVIOUS PAGE
 NPAGE    SET    NPAGE+1     INCREMENT PAGE COUNT 
 N        DECMIC NPAGE,2
 PAGE_"N" EQU    *           BEGIN NEW PAGE 
          QUAL
 OLDVS    SET    LASTVS      SAVE CURRENT SPACING 
          LINE   MEDIUM,INTENSE,C,1,("HEADER")
 LASTVS   SET    OLDVS       HONOR NEW SPACING VALUE
 NXTPAGE  ENDIF 
 OVERFLOW ENDIF 
 SKIP     ENDM
 SAVEY    SPACE  4,8
***       SAVEY  NAME 
*         A MACRO TO SAVE THE CURRENT VALUES OF THE *Y* COORDINATE AND
*         THE VERTICAL SPACING.  THIS MACRO IS HANDY TO CREATE
*         SEQUENTIAL LINES IN A NON-SEQUENTIAL MODE.  THE PARAMETER 
*         *NAME* IS USED AS A QUALIFIER TO PREVENT DUPLICATE SYMBOLIC 
*         NAMES AND AS THE FIRST FOUR CHARACTERS OF THE SYMBOLS WHOSE 
*         VALUES ARE *Y* AND *LASTVS* AS DEFINED BY THE *LINE* MACRO. 
          SPACE  1
 SAVEY    MACRO  NAME 
          QUAL   NAME 
 NAME_Y   EQU    Y
 NAME_VS  EQU    LASTVS 
          NOREF  NAME_Y_,NAME_VS
          QUAL
 SAVEY    ENDM
 RESET    SPACE  4,8
***       RESET  NAME 
*         A MACRO TO RESET THE VALUES OF *Y* AND *VS* FOR DISPLAY LINES.
*         THIS MACRO IS USED IN CONJUNCTION WITH THE *SAVEY* MACRO
*         DESCRIBED ABOVE.  THE VALUE OF THE *Y* COORDINATE AND THE 
*         VERTICAL SPACING BETWEEN LINES IS RESET TO PREVIOUSLY SAVED 
*         VALUES.  THE PARAMETER *NAME* IS USED AS A QUALIFIER. 
          SPACE  1
 RESET    MACRO  NAME 
 Y        SET    /_NAME_/_NAME_Y
 LASTVS   SET    /_NAME_/_NAME_VS 
          NOREF  /_NAME_/_NAME_Y
          NOREF  /_NAME_/_NAME_VS 
 RESET    ENDM
 QUESTION SPACE  4,8
***       QUESTION TEXT 
*         A MACRO TO GENERATE THE QUESTION LINE OF *QUERY DISPLAYS. 
*         THE PARAMETER IS THE ACTUAL TEXT OF THE QUESTION, ENCLOSED
*         WITHIN PARENTHESIS IF THERE ARE EMBEDDED BLANKS.
          SPACE  1
 QUESTION MACRO  TXT
 Q        MICRO  1,,$_TXT_$ 
          SMALL  ("Q")
          RESET  TEXT 
 QUESTION ENDM
 $MACROS$ ENDX
          SPACE  4,8
