*COMDECK PTCNFCARD
_$J+? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*                      P T C N F C A R D                              * 
*                                                                     * 
*        PROCESS CONFIGURE CARD                                       * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_$I-,R-,G-   INTERRUPTABLE, NON-RECURSIVE ? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW  - PROCESS /*CONFIG CARD, AND BUILD AUTO-RECOGNITION      * 
*              PARAMETERS BUFFER                                      * 
*                                                                     * 
** INPUT     - LCB-PTR, BUFFER ADDRESS WITH CONFIGURE CARD            * 
*              FIRST CHAR IS EXPECETD AT DATA+1 (SAME AS FOR BIP)     * 
*                                                                     * 
** CALLING PROGRAM -                                                  * 
*              HASP TIP                                               * 
*              2780/3780 TIP                                          * 
*                                                                     * 
** OUTPUT    - IF CONFIGURE CARD CORRECT                              * 
*              THEN LINE OPERATIONAL WORKLIST TO SVM WITH             * 
*              AUTO-RECOGNITION PARAMETERS BUFFER                     * 
*              ELSE BUFFER WITH ERROR MSG PASSED BACK TO TIP          * 
*              PASSED BUFFER POINTER WILL BE ZERO IF CARD CORRECT     * 
*              THE PROPER TERMINAL CLASS VALUE IS PUT IN THE TCB      * 
*              THE PROPER SUB-TIP TYPE VALUE IS PUT IN THE LCB        * 
*                                                                     * 
** EXTERNAL SUBROUTINES -                                             * 
*              PBGET1BF  - GET A BUFFER                               * 
*              PBRELZRO  - RELEASE CHAIN OF BUFFERS (MAY BE ZERO)     * 
*              PBREL1BF  - RELEASE A BUFFER                           * 
*              PBFMAD    - CONVERT ASCII NUMBER TO BINARY             * 
*              PBLSPUT   - MAKE A WORKLIST ENTRY                      * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PGCNFCARD (T7LCBP : BZLCBP; VAR T7BUFP : B0BUFPTR); 
  
LABEL 
      999;                                  _BAD PARAMETER EXIT        ?
  
CONST 
      T7COMMA = #,#;
      T7BLANK = # #;
      T7EQUAL = #=#;
      T7SLASH = #/#;
      T7CZERO = #0#;
      T7NKWDS = 12;                         _NR OF KEYWORDS IN TABLE   ?
      T7NULMS = 3;                          _NR OF UPPER LIMITS (.=XXX)?
      T7EMLNG = 14;                         _LENGTH ERROR MESSAGE      ?
_ 
* * * *  TABLE ENTRIES (T7TABLE) FOR X780 CR/LP 
? 
      T7TBCR  = 10;                         _CARD READER               ?
      T7TBLP  = 11;                         _LINE PRINTER              ?
_ 
* * * *  SPECIAL PROCESSING VALUES FOR THE KEYWORDS 
? 
_     T7SPNO  = 0;     ?                    _NO SPECIAL PROCESSING DONE?
      T7SPTT  = 1;                          _SP FOR POST/3780 TERM.TYPE?
      T7SPCO  = 2;                          _SP FOR CLUSTER ORDINAL    ?
      T7SPSDV = 3;                          _SP FOR SINGLE BATCH DEVICE?
      T7SPMDV = 4;                          _SP FOR MULTIPLE DEVICES   ?
_ 
* * * *  DEFINITION OF LOCAL TIPTYPES 
? 
      T7TTHSP = 0;                          _LOCAL TIPTYP HASP         ?
      T7TT780 = 1;                          _LOCAL TIPTYP X780         ?
_     T7TTU1  = 2; ?                        _LOCAL TIPTYP USER1        ?
_     T7TTU2  = 3; ?                        _LOCAL TIPTYP USER2        ?
      T7TTMAX = T7TT780;                    _HIGHEST LOCAL TIPTYP NR   ?
_ 
* * * *  DEFINITION OF KEYWORD EXCLUSION BITS FOR CR/LP 
? 
      T7EBCR  = 3;                          _EXCLUSION BIT FOR CR      ?
      T7EBLP  = 4;                          _EXCLUSION BIT FOR LP/PR   ?
  
TYPE
      T7TBLTP = PACKED RECORD 
                  TTLTPBT : B04BITS;        _1=HASP, 2=X780, 3=BOTH    ?
                  TTEXCCB : B04BITS;        _EXCLUSION CONTROL BIT     ?
                  TTSPROC : B04BITS;        _SPECIAL PROCESSING REQUIRD?
                  TTKWLNG : B04BITS;        _LENGTH OF KEYWORD         ?
                  TTKWRD  : PACKED ARRAY    _KEYWORD                   ?
                            [1..4] OF CHAR; 
                  TTDEVTP : B04BITS;        _DEVICE TYPE FOR TA/DT PAIR?
                  TTDFLT  : B04BITS;        _DEFAULT VALUE (NO EQUAL)  ?
                  TTLOWLM : B04BITS;        _LOWER LIMIT FOR PTCONVERT ?
                  TTUPLMX : B04BITS;        _UPPER LIMIT INDEX         ?
                END;
  
VAR 
      T7LOCTT : INTEGER;                    _LOCAL TIPTP: HASP=1,X780=2?
                                            _UTP1=3,UTP2=4.            ?
      T7BUFL  : B0BUFPTR;                   _LOCAL PTR CNFG CARD       ?
      T7SVMBP : B0BUFPTR;                   _AUTO-REC PARAMS BUFFER    ?
      T7NTMLS : INTEGER;                    _NUMBER OF TERMINALS       ?
      T7TABX  : INTEGER;                    _WORK TABLE INDEX          ?
      T7CCX   : INTEGER;                    _CURRENT CHARACTER INDEX   ?
      T7CPX   : INTEGER;                    _CURRENT PARAMETER INDEX   ?
      T7CPLNG : INTEGER;                    _CURRENT PARAMETER LENGTH  ?
      T7EXCLW : B0OVERLAY;                  _KEYWORD EXCLUSION CONTR.WD?
      T7DXCL  : B0OVERLAY;                  _DEVICE NR EXCLUSION CW    ?
      T7CSMLC : INTEGER;                    _CURRENT LCD FOR SERV.MSG  ?
      T7TRMCH : CHAR;                       _CURRENT TERMINATOR CHAR   ?
      T7WORK  : B0OVERLAY;                  _WORK OVERLAY WORD         ?
      T7INT   : INTEGER;                    _WORK INTEGER              ?
      T7TABP  : 'T7TBLTP;                   _POINTER INTO KEYWORD-TABLE?
      T7CMPTR : 'T7TBLTP;                   _COMPARE POINTER           ?
      T7ERMSG : PACKED ARRAY [0..T7EMLNG]   _BAD CONFIGURE ERROR MSG   ?
                OF CHAR;
      T7CONF  : ARRAY [1..5] OF INTEGER;    _CANNED /*CONFIG TEXT      ?
      T7ALL   : ARRAY [1..3] OF INTEGER;    _CANNED =ALL TEXT          ?
      T7TABLE : ARRAY [1..T7NKWDS]          _KEYWORD TABLE             ?
                OF T7TBLTP; 
      T7UPLTB : ARRAY [0..T7NULMS]          _VARIOUS UPPER LIMITS IN   ?
                OF INTEGER;                 _ T7TABLE FIELD TTUPLMX    ?
      T7LTTBT : ARRAY [0..T7TTMAX]          _TIPTYPE BITS FOR T7LOCTT  ?
                OF SET OF 0..15;
      T7DFCS  : PACKED ARRAY [0..T7TTMAX]   _DEFAULT CODE SETS         ?
                OF CHAR;
      T7STDFT,                              _SUB-TIP POST/2780 DEFAULTS?
      T7STALT : ARRAY [0..T7TTMAX]          _SUB-TIP PRE/3780          ?
                OF N0SUBTIP;
      T7TCDFT,                              _TC POST/2780 (DEFAULTS)   ?
      T7TCALT : ARRAY [0..T7TTMAX]          _TC PRE/3780               ?
                OF N0TCLASS;                _                          ?
  
VALUE 
      T7ERMSG = (# <BAD /*CONFIG>#);
      T7CONF  = ($F008,#/*CONFIG#); 
      T7ALL   = ($F004,#=ALL#); 
      T7TABLE = ($1104,#POST#,0,
                 $1113,#PRE #,0,
                 $2104,#2780#,0,
                 $2114,#3780#,0,
                 $F222,#CO  #,$0103,
                 $1342,#CR  #,$1112,
                 $1442,#LP  #,$2112,
                 $1542,#CP  #,$3112,
                 $1642,#PL  #,$4112,
                 $2332,#CR  #,$1110,
                 $2432,#LP  #,$2110,
                 $2532,#CP  #,$3221); 
      T7UPLTB = (1,3,7,255);
      T7LTTBT = (1,2 _,4,8? );
      T7STDFT = (N0HSPOST,N0BSC2);
      T7STALT = (N0HSPRE,N0BSC3); 
      T7DFCS  = ($0909 _,UT1 UT2? );
      T7TCDFT = (N0HASP,N02780);
      T7TCALT = (N0HASP,N03780);
  
_$J+? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
* * * *   P T B A D P A R M   -   RETURN TO CALLER WITH BAD PARAMETER * 
*                                 T7BUFL, T7CCX SET JUST PASSED PARM  * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PTBADPARM;
  
VAR 
      T7INT : INTEGER;
BEGIN 
WITH T7BUFL' DO 
  BEGIN 
  FOR T7INT := 0 TO T7EMLNG DO
    BFDATAC [T7CCX + T7INT] :=              _PUT ERROR MSG IN BUFFER   ?
    T7ERMSG [T7INT];
  BFLCD := T7CCX + T7EMLNG;                 _INSERT LCD                ?
  BFINTBLK := TRUE;                         _SET INTERNAL BLOCK FLAG   ?
  BFDATAC [BTPT] := CHR (HTMSG);            _RESPONSE BT OF MESSAGE    ?
  BIINT [BTWD]   := HTMSG;
  PBREL1BF (T7SVMBP, BEDBSIZE);             _RELEASE BUFFER FOR SVMSG  ?
  END;
GOTO EXIT 999;                              _RETURN TO CALLER PTCNFCARD?
END; _PROCEDURE PTBADPARM?
_ 
* 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
* * * *   P T G E T P A R M  -  GET NEXT PARAMETER FROM CONFIG BUFFER * 
*                               T7BUFL, T7CCX MUST BE SET UP ON ENTRY * 
*                               ON EXIT: T7CPX SET TO PRECEDING SEPAR.* 
*                                        T7CCX SET TO FOLLOWING SEPAR.* 
*                                        T7CPLNG IS LENGTH OF PARAM.  * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PTGETPARM (T7TCHR : CHAR);
  
BEGIN 
T7CPLNG := -1;
T7CPX   := T7CCX;                           _SET INDEX TO PARAMETER    ?
REPEAT
  T7CPLNG := T7CPLNG + 1;                   _BUMP LENGTH OF PARAMETER  ?
  T7CCX   := T7CCX + 1;                     _BUMP POINTER TO NEXT CHAR ?
  T7TRMCH := T7BUFL'.BFDATAC [T7CCX];       _GET CHARACTER             ?
  IF T7CCX > T7BUFL'.BFLCD
  THEN                                      _END-OF-SOURCE REACHED,    ?
    T7TRMCH := T7BLANK;                     _FORCE TERMINATION         ?
UNTIL (T7TRMCH = T7TCHR)  ! 
      (T7TRMCH = T7BLANK) ! 
      (T7TRMCH = T7COMMA);                  _UNTIL TERMINATOR FOUND    ?
IF T7CPLNG = 0
THEN
  PTBADPARM;                                _ZERO LENGTH PARAMETER, BAD?
END; _PROCEDURE PTGETPARM?
_$J+? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
* * * *   P T C O M P A R E   -   COMPARE TEXT FOR A GIVEN LENGTH     * 
*                                 T7BUFL,T7CPX,T7CMPTR MUST BE SET UP * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
FUNCTION PTCOMPARE (T7LNG : INTEGER) : BOOLEAN; 
  
VAR 
      T7INT : INTEGER;
  
BEGIN 
T7WORK.BAINT := T7CMPTR'.TTLTPBT;           _GET TIPTYPE ALLOWED BITS  ?
IF (T7LNG " T7CMPTR'.TTKWLNG) !             _NO MATCH IN LENGTH KEYWORD?
   (T7LTTBT [T7LOCTT] & T7WORK.BASETN = []) _OR NOT ALLOWED FOR THIS TT?
THEN
  PTCOMPARE := FALSE
ELSE
  PTCOMPARE := TRUE;                        _PRESET FOR GOOD COMPARE   ?
  FOR T7INT := 1 TO T7CPLNG DO
  IF T7CMPTR'.TTKWRD [T7INT] "
     T7BUFL'.BFDATAC [T7CPX + T7INT]        _COMPARE CHARACTERS        ?
  THEN
    PTCOMPARE := FALSE; 
END; _FUNCTION PTCOMPARE? 
_ 
* 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
* * * *   P T A D D T A D T   -   ADD TA/DT TO SVM BUFFER             * 
*                                 T7TABP,T7BUFL,T7CSMLC MUST BE SET UP* 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PTADDTADT (T7TA : INTEGER); 
  
BEGIN 
IF T7TA \ T7TABP'.TTLOWLM 
THEN                                        _INSERT TA/DT IF TA ABOVE  ?
  BEGIN                                     _ LOWER LIMIT              ?
  T7CSMLC := T7CSMLC + 1; 
  T7SVMBP'.BFDATAC [T7CSMLC] := CHR (T7TA); _INSERT TERMINAL ADDRESS   ?
  T7CSMLC := T7CSMLC + 1; 
  T7SVMBP'.BFDATAC [T7CSMLC] := 
    CHR (T7TABP'.TTDEVTP);                  _INSERT DEVICE TYPE        ?
  T7NTMLS := T7NTMLS + 1;                   _BUMP NUMBER OF TERMINALS  ?
  END;
END; _PROCEDURE PTADDTADT?
_$J+? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
* * * *   P T C O N V E R T   -   CONVERT PARAMETER TO BINARY         * 
*                                 T7BUFL,T7CPX,T7CCX MUST BE SET UP   * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
FUNCTION PTCONVERT (T7TMCH : CHAR) : INTEGER; 
  
VAR 
      T7LCDSAVE : INTEGER;                  _USED TO SAVE LCD          ?
      T7RESLT : INTEGER;                    _BINARY RESULT OF CONVERSN ?
  
BEGIN 
IF T7TRMCH " T7EQUAL                        _PARAMETER PASSED          ?
THEN
  PTCONVERT := T7TABP'.TTDFLT               _NO, RETURN DEFAULT        ?
ELSE
  BEGIN                                     _YES,                      ?
  PTGETPARM (T7TMCH);                       _GET THE PARAMETER         ?
  T7CPX         := T7CPX + 1;               _SET TO FIRST ASCII DIGIT  ?
  T7LCDSAVE := T7BUFL'.BFLCD;               _SAVE LCD ACROSS PBFMAD    ?
  T7BUFL'.BFLCD := T7CCX - 1;               _SET TO LAST ASCII DIGIT   ?
  IF PBFMAD (T7RESLT,T7BUFL,T7CPX) = FALSE  _CONVERT ASCII TO BINARY   ?
  THEN
    PTBADPARM;                              _BAD CONVERSION            ?
  IF T7RESLT > T7UPLTB [T7TABP'.TTUPLMX]
  THEN
    PTBADPARM;                              _PARAMETER OUT OF RANGE    ?
  T7BUFL'.BFLCD := T7LCDSAVE;               _RESTORE LCD               ?
  PTCONVERT := T7RESLT;                     _PASS ON CONVERTED NUMBER  ?
  END; _IF T7TRMCH " T7EQUAL ELSE?
END; _FUNCTION PTCONVERT? 
_ 
* 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
* * * *   P T E X C L C H K   -   CHECK FOR MULTIPLE OCCURRANCE       * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PTEXCLCHK (VAR T7XCLW : B0OVERLAY; T7BITNR : INTEGER);
  
BEGIN 
IF T7BITNR IN T7XCLW.BASETN 
THEN
  PTBADPARM;                                _DUPLICATE FOUND, EXIT     ?
T7XCLW.BASETN := T7XCLW.BASETN ! [T7BITNR]; _SET BIT IN EXCLUSION WORD ?
END; _PROCEDURE PTEXCLCHK?
_$J+? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
* * * *   B E G I N   P R O C E D U R E   P T C N F C A R D           * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
BEGIN _PTCNFCARD? 
_ 
* * * *  SET LOCAL TIPTYPE IN T7LOCTT 
? 
IF T7LCBP'.BZTIPTYP = N1HASP
THEN
  T7LOCTT := T7TTHSP
ELSE
  T7LOCTT := T7TT780; 
_ 
* * * *  INITIALIZE BUFFER AND PRESET POINTERS INTO BUFFER WITH /*CONFIG
? 
T7BUFL := T7BUFP;                           _GET CONFIG CARD PTR LOCAL ?
PBRELZRO (T7BUFL'.BCCHAINS [DBUFLENGTH],
          BEDBSIZE);                        _RELEASE ALL BUT FIRST BUFR?
T7BUFL'.BFLCD := PBMIN (T7BUFL'.BFLCD,      _ALLOW SPACE FOR ERROR MSG ?
                        $7D-(T7EMLNG+1)); 
T7CCX := DATA;                              _SET CURRENT CHARACTER INDX?
T7EXCLW.BASETN := [ ];                      _RESET EXCLUSION CONTROL WD?
T7LCBP'.BZSUBTIP := T7STDFT [T7LOCTT];      _INSERT DFLT SUB-TIP IN LCB?
T7LCBP'.BZTCBPTR'.BSTCB.BSTCLASS := 
  T7TCDFT [T7LOCTT];                        _INSERT DFLT TC IN AR-TCB  ?
_ 
* * * *  GET A BUFFER FOR AUTO-REC PARAMS AND PRE-INITIALIZE IT 
? 
T7SVMBP := PBGET1BF (BEDBSIZE);             _GET BFR FOR AUTO-REC PARAM?
WITH T7SVMBP' DO                            _SET INDEX TO AUTO-REC BFR ?
  BEGIN 
  BFFCD           := DATA;                  _SET POSITION FOR LS/CS    ?
  BIINT[DATA/2+1] := ORD(T7DFCS[T7LOCTT]);  _INSERT DEFAULT LS/CS      ?
  BFDATAC[DATA+2] := CHR(T7STDFT[T7LOCTT]); _INSERT DEFAULT SUB-TIP    ?
  BFDATAC[DATA+3] := CHR(1);                _DEFAULT CO IS 1           ?
  BFDATAC[DATA+5] := CHR(1);                _INSERT TA                 ?
  BFDATAC[DATA+6] := CHR(N1CON);            _ AND DT FOR CONSOLE       ?
  T7CSMLC         := DATA + 6;              _PRESET LCD FOR A-R PARAMS ?
  T7NTMLS         := 1;                     _PRESET NUMBER OF TERMINALS?
_ 
* * * *  TEST IF CARD PROPERLY STARTS WITH /*CONFIG 
? 
  PTGETPARM (T7COMMA);                      _GET /*CONFIG KEYWORD      ?
  ADDR (T7CONF, T7CMPTR);                   _SET COMPARPTR TO /*CONFIG ?
  IF PTCOMPARE (T7CPLNG) = FALSE
  THEN                                      _FIRST KEYW. AINT /*CONFIG ?
    PTBADPARM;                              _EXIT WITH BAD PARAMETER   ?
_ 
* * * *  CARD IS /*CONFIG, PROCESS ALL FOLLOWING KEYWORDS 
? 
  WHILE T7TRMCH " T7BLANK DO                _LOOP THROUGH PARAMETERS   ?
    BEGIN                                   _UNTIL BLANK FOUND         ?
    PTGETPARM (T7EQUAL);                    _GET NEXT PARAMETER KEYWORD?
    T7TABX := 1;
    REPEAT
      ADDR (T7TABLE [T7TABX], T7CMPTR);     _GET ADDRESS KW TABLE-ENTRY?
      IF PTCOMPARE (T7CPLNG)
      THEN
_ 
* * * *  MATCHING KEYWORD FOUND (AND ALLOWED FOR THIS TIPTYPE)
? 
        BEGIN 
        T7TABP := T7CMPTR;
        WITH T7TABP' DO                     _INDEX TO KEYWORD TAB-ENTRY?
          BEGIN 
_ 
* * * *  MAKE SURE THIS IS THE FIRST OCCURRANCE OF THIS KEYWORD 
? 
          PTEXCLCHK (T7EXCLW, TTEXCCB);     _TEST FOR EXCLUSIVE OCCUR. ?
  
          CASE TTSPROC OF 
_ 
* * * *  PERFORM SPECIAL PROCESSING FOR PRE OR 3780 
? 
            T7SPTT: 
              BEGIN 
              T7LCBP'.BZTCBPTR'.BSTCB.      _SET TERM CLASS INTO       ?
              BSTCLASS := T7TCALT [T7LOCTT];_ AUTO RECOGNITION TCB     ?
              T7LCBP'.BZSUBTIP :=           _SET SUB-TIP TYPE IN LCB   ?
                T7STALT [T7LOCTT];
              BFDATAC[DATA+2] :=            _ AND IN A-R PARAMS BUFFER ?
                CHR (T7STALT [T7LOCTT]);
              END; _T7SPOST,T7SP378:? 
_ 
* * * *  PERFORM SPECIAL PROCESSING FOR CLUSTER ORDINAL (CO)
? 
            T7SPCO: 
              BEGIN 
              BFDATAC [DATA+3] := CHR 
              (PTCONVERT (T7COMMA));        _CONVERT PARAMETER FOR CO  ?
              END; _T7SPCO:?
_ 
* * * *  PERFORM SPECIAL PROCESSING FOR MULTIPLY DEFINED DEVICES
? 
            T7SPMDV:  
              BEGIN 
              T7DXCL.BASETN := [ ];         _RESET MULT. DEV. EXCLUSION?
              ADDR (T7ALL, T7CMPTR);
              T7CPX   := T7CCX - 1; 
              IF PTCOMPARE (4)              _SEE IF PARAMETER =ALL     ?
              THEN
                BEGIN 
                PTGETPARM (T7COMMA);        _YES, REMOVE #=ALL#        ?
                FOR T7INT := 1 TO 7 DO      _AND CREATE 7 DEVICES      ?
                  PTADDTADT (T7INT) 
                END 
              ELSE
                BEGIN 
                REPEAT
                  IF T7TRMCH = T7SLASH
                  THEN                      _MULTIPLE PARAMETER VALUES ?
                    T7TRMCH := T7EQUAL;     _FORCE PROCESSING OF VALUE
                                              FOLLOWING SLASH          ?
                  T7INT := PTCONVERT
                           (T7SLASH);       _CONVERT TILL SLASH/COMMA  ?
                  PTEXCLCHK (T7DXCL,T7INT); _TEST FOR EXCLUSIVE DEV.NR ?
                  PTADDTADT (T7INT);
                UNTIL T7TRMCH " T7SLASH;    _UNTIL TERMINATOR ISNT #/# ?
                END; _IF PTCOMPARE(..) ELSE?
              END; _T7SPMDV:? 
_ 
* * * *  PERFORM SPECIAL PROCESSING FOR SINGLY DEFINED DEVICES
? 
            T7SPSDV:  
              BEGIN 
              PTADDTADT 
                (PTCONVERT (T7COMMA));
              END; _T7SPSDV:? 
  
            END; _CASE TTSPROC OF?
          END; _WITH T7TABT' DO?
        T7TABX := T7NKWDS + 1;              _FORCE END OF TABLE        ?
        END _IF PTCOMPARE (0) THEN? 
      ELSE
_ 
* * * *  NO MATCH FOUND, GET NEXT TABLE ENTRY, BAD IF AT END-OF-TABLE 
? 
        BEGIN 
        T7TABX := T7TABX + 1;               _NEXT KEYWORD TABLE INDEX  ?
        IF T7TABX = T7NKWDS + 1             _LAST ENTRY DID NOT MATCH  ?
        THEN
          PTBADPARM;                        _EXIT WITH BAD PARAMETER   ?
        END; _IF PTCOMPARE (0) ELSE?
    UNTIL T7TABX = T7NKWDS + 1;             _UNTIL END-OF-TABLE        ?
    END; _WHILE T7TRMCH " T7BLANK DO? 
_ 
* * * *  CONFIGURE CARD PROCESSED, SPECIAL PROCESSING FOR X780
? 
  IF T7LOCTT = T7TT780
  THEN
    BEGIN 
    IF T7EXCLW.BASETN & [T7EBCR] = [ ]      _CR PASSED THROUGH CONFIG  ?
    THEN                                    _NO,                       ?
      BEGIN 
      ADDR (T7TABLE [T7TBCR], T7TABP);
      PTADDTADT (1);                        _ADD IT                    ?
      END;
    IF T7EXCLW.BASETN & [T7EBLP] = [ ]      _LP/PR PASSED              ?
    THEN
      BEGIN 
      ADDR (T7TABLE [T7TBLP], T7TABP);
      PTADDTADT (1);                        _NO, ADD                   ?
      END;
    END;
_ 
* * * *  CONFIGURE CARD PROCESSED, SEND LINE OPERATIONAL WORKLIST TO SVM
? 
  BFDATAC[DATA+4] := CHR(T7NTMLS);          _SET NUMBER OF TERMINALS   ?
  BFLCD           := T7CSMLC;               _SET LCD OF A-R PARAMS BFR ?
  END; _WITH T7SVMBP' DO? 
WITH BWWLENTRY [OPS].CMSMLEY DO             _INDEX TO SM-WL OVERLAY    ?
  BEGIN 
  CMWKCODE := D0LINE;                       _LINE EVENT WORKCODE       ?
  CMDATA   := D5OPER;                       _LINE OPERATIONAL          ?
  CMLINO   := T7LCBP'.BZLINO; 
  CMPTR    := T7SVMBP;
  END;
PBLSPUT (BWWLENTRY [OPS], 
         BYWLCB [B0SMWL]);                  _SEND LINE OPERAT. TO SVM  ?
PBREL1BF (T7BUFL, BEDBSIZE);                _CONFIG CARD OK, REL. BUFR ?
999:  
T7BUFP := T7BUFL;                           _PASS RESP IF BAD CONFIG   ?
END; _PROCEDURE PGCNFCARD?
_ 
* 
* 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
* * * *   P T C N F C A R D  -  TOPHAT FOR PGCNFCARD                  * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PTCNFCARD (T7LCBP : BZLCBP; VAR T7BUFP : B0BUFPTR); 
  
VAR 
      T7CURPG : INTEGER;                    _CURRENT PAGE NUMBER       ?
      T7BUFL  : B0BUFPTR;                   _LOCAL BUFFER POINTER      ?
  
BEGIN 
T7BUFL := T7BUFP;                           _GET VAR PARM FROM PAGE    ?
PBRDPGE (T7CURPG);                          _SAVE CURRENT PAGE NUMBER  ?
PBPSWITCH (T7PGCNFCARD);                    _SWITCH TO PGCNFCARD PAGE  ?
PGCNFCARD (T7LCBP, T7BUFL);                 _CALL PAGED ROUTINE        ?
PBPSWITCH (T7CURPG);                        _RESTORE CALLERS PAGE      ?
T7BUFP := T7BUFL;                           _RETURN VAR TYPE PARAMETER ?
END; _PROCEDURE PTCNFCARD?
