         << LINES .001/.009 ARE RESERVED FOR SYSTEMS INTEGRATION >>     00000001
$INCLUDE INCLPCB5                                              << 9969>>00306000
$INCLUDE INCLICS                                               << 9969>>00307000
EQUATE                                                         << 9336>>00450100
   DIREC'SIZE = 41,                                            << 9336>>00450200
   ALEVEL = 2,                                                 << 9336>>00450300
   ULEVEL = 3;          << For directory searches >>           << 9336>>00450400
                                                               << 9336>>00450500
   DIRSIZEM1             = 4096,                               << 9341>>00540000
   DIRSIZEB              = 8192,                               <<09429>>00545000
   CANTFINDCOMM          = 1901, << and 1902, 1903 >>                   00821000
   SHW'USERNEEDSEQUAL    = 1990,                               << 9336>>01315000
   USER'SYNX             = 2000,                               << 9336>>01345100
   USER'LEN              = 2001,                               << 9336>>01345200
   ACCT'SYNX             = 2002,                               << 9336>>01345300
   ACCT'LEN              = 2003,                               << 9336>>01345400
   FILE'SYNX             = 2004,                               << 9336>>01345410
   SHW'UKNKEYWORD        = 2005,                               << 9336>>01345420
   SHOWCATTOOMANYPARMS   = 2006,                               << 9336>>01345430
   BADSHOWACCTSPEC       = 2007,                               << 9336>>01345440
   SHOWILLEGALWILDS      = 2008,                               << 9336>>01345450
   INVALSETSYNTAX        = 2009,                               << 9336>>01345460
   INVALSHOWSYNTAX       = 2010,                               << 9336>>01345470
   UNKNOWNOPTIONNOTSET   = 2011,                               << 9336>>01345480
   CMDNOTALPHANOTSET     = 2012,                               << 9336>>01345490
   CMDTOOLONGNOTSET      = 2013,                               << 9336>>01345491
   NO'ACCT               = 1437,                               << 9336>>01345500
   NO'USER               = 1438,                               << 9336>>01345600
   FILE'LEN              = 532,                                << 9336>>01345900
LOGICAL PROCEDURE CIBADFILENAME(ERRNUM,PARM);                  <<02152>>01416000
  VALUE PARM;                                                  <<02152>>01417000
  DOUBLE PARM;                                                 <<02152>>01418000
  INTEGER ERRNUM;                                              <<02152>>01419000
  OPTION PRIVILEGED, UNCALLABLE, EXTERNAL;                     <<02152>>01419100
                                                               <<02152>>01419200
                                                               << 9336>>01871100
DOUBLE PROCEDURE DIRECFIND( TYPE, LINKAGE'INDEXP, ACCTNAME,    << 9336>>01871200
                            GRPNAME, FILENAME, RETURNENTRY );  << 9336>>01871300
   VALUE TYPE, LINKAGE'INDEXP;                                 << 9336>>01871400
   INTEGER TYPE;                                               << 9336>>01871500
   DOUBLE LINKAGE'INDEXP;                                      << 9336>>01871600
   LOGICAL ARRAY ACCTNAME, GRPNAME, FILENAME, RETURNENTRY;     << 9336>>01871700
   OPTION EXTERNAL;                                            << 9336>>01871800
PROCEDURE INITUDCNO( SHOW, SETCATCOMFN, CHECK'UDC'ARRAY,       << 9336>>02015000
                     CHECK'USER, CHECK'ACCT );                 << 9336>>02016000
   VALUE   SHOW, SETCATCOMFN;                                  << 9336>>02020000
   LOGICAL SHOW;                                               << 9336>>02025000
   LOGICAL ARRAY CHECK'UDC'ARRAY;                              << 9336>>02025100
   BYTE    ARRAY CHECK'USER, CHECK'ACCT;                       << 9336>>02026000
                                                               <<09430>>02051000
PROCEDURE PVCLOSE( FILENUM, DISP, SECCODE );                   <<09430>>02052000
   VALUE FILENUM, DISP, SECCODE;                               <<09430>>02053000
   INTEGER FILENUM, DISP, SECCODE;                             <<09430>>02054000
   OPTION PRIVILEGED, EXTERNAL;                                <<09430>>02054100
PROCEDURE QUEUEPROC(PCBPT,QUEUE,LOC);                          << 9969>>02290010
VALUE PCBPT,QUEUE,LOC;                                         << 9969>>02290020
INTEGER PCBPT,QUEUE,LOC;                                       << 9969>>02290030
OPTION EXTERNAL;                                               << 9969>>02290040
$PAGE                                                          << 9336>>02300010
$TITLE "GET'USER'ID"                                           << 9336>>02300020
INTEGER PROCEDURE GET'USER'ID( PARMPTR, IDNAME, LEN );         << 9336>>02300030
VALUE LEN;                                                     << 9336>>02300050
LOGICAL LEN;                                                   << 9336>>02300060
BYTE POINTER PARMPTR;                                          << 9336>>02300070
BYTE ARRAY IDNAME;                                             << 9336>>02300080
COMMENT:                                                       << 9336>>02300090
         GET'USER'ID determines if identifier as pointed to by << 9336>>02300100
         PARMPTR is of correct syntax and length.  If so, the  << 9336>>02300110
         identifier is placed, left-justified into IDNAME.     << 9336>>02300120
         The following syntax checks are made:                 << 9336>>02300130
            1.  First letter is alpha                          << 9336>>02300140
            2.  No embedded special characters.                << 9336>>02300150
            3.  Length is less than or greater than eight.     << 9336>>02300160
         This works for checking 8 character id or file names. << 9336>>02300181
         The following errors may be returned by GET'USER'ID:  << 9336>>02300190
            0 - ok                                             << 9336>>02300200
            1 - IDNAME syntax incorrect                        << 9336>>02300210
            2 - IDNAME length is greater than eight.           << 9336>>02300220
         ;                                                     << 9336>>02300230
BEGIN                                                          << 9336>>02300240
LOGICAL ERR,                                                   << 9336>>02300250
        I;                                                     << 9336>>02300260
EQUATE  SYNTAX'FORM = 1,                                       << 9336>>02300270
        SYNTAX'LEN = 2;                                        << 9336>>02300280
GET'USER'ID := 0;  << Assume no errors >>                      << 9336>>02300290
IF LEN > 8                                                     << 9336>>02300300
   THEN GET'USER'ID := SYNTAX'LEN                              << 9336>>02300310
   ELSE BEGIN                                                  << 9336>>02300320
        IF PARMPTR <> ALPHA                                    << 9336>>02300350
           THEN GET'USER'ID := SYNTAX'FORM                     << 9336>>02300360
           ELSE BEGIN                                          << 9336>>02300370
                I := 0;                                        << 9336>>02300390
                ERR := FALSE;                                  << 9336>>02300400
                WHILE ( I <  LEN LAND ERR = FALSE ) DO         << 9336>>02300410
                    BEGIN                                      << 9336>>02300420
                    MOVE IDNAME( I ) := PARMPTR, ( 1 );        << 9336>>02300430
                    IF PARMPTR = SPECIAL  << A special char >> << 9336>>02300440
                       THEN BEGIN                              << 9336>>02300450
                            ERR := TRUE;                       << 9336>>02300460
                            GET'USER'ID := SYNTAX'FORM;        << 9336>>02300470
                            END;                               << 9336>>02300480
                    I := I + 1;                                << 9336>>02300490
                    @PARMPTR := @PARMPTR + 1;                  << 9336>>02300500
                    END;                                       << 9336>>02300510
                 END; << ELSE BEGIN >>                         << 9336>>02300520
        END; << ELSE BEGIN >>                                  << 9336>>02300530
END;  << GET'USER'ID >>                                        << 9336>>02300540
$PAGE                                                          << 9336>>02300550
   IF (FILENO <> PREVFILENO) and (length <> 0) then            <<02151>>02405000
$PAGE                                                          << 9336>>02444999
$PAGE                                                          << 9336>>02449999
<<                                    [;SHOW]              >>  << 9336>>02506000
                                                               << 9336>>02945100
      * These series of fixes will enhance the effectiveness   << 9336>>02945200
        of performing a :SETCATALOG with the USER= keyword.    << 9336>>02945300
        Specifically, the user.account input string will be    << 9336>>02945400
        verified for special characters and length - the       << 9336>>02945500
        user.account will be verified that it does indeed exist<< 9336>>02945600
        on the system.  Previously, the UDC file was simply    << 9336>>02945700
        added to COMMAND.PUB.SYS.  Here, INITUDC will be called<< 9336>>02945800
        to open the supplied UDC files and perform the         << 9336>>02945900
        initialization process against them.  But, INITUDC will<< 9336>>02946000
        not write the entries to the UDC extra data segment,   << 9336>>02946100
        thus following the philosophy that the user must log on<< 9336>>02946200
        to initialize, formally, the new UDC's.  Along with    << 9336>>02946300
        these fixes are ad hoc rewording of error messages.    << 9336>>02946400
        Note that the externals to INITUDC have been changed.  << 9336>>02946410
        An array, CHECK'UDC'ARRAY, is used in place of CI      << 9336>>02946420
        storage.                                               << 9336>>02946430
                                                               << 9336>>02946500
   LASTDELIM = IPARMS((2*(PARMNUM-1))+1).(11:5) #,             << 9336>>02971000
   USER'DELIMS = [8/".",8/";",16/%15]D #,                      << 9336>>02986000
   DOT        = 0,                                             << 9336>>03011000
   SEMI       = 1,                                             << 9336>>03015000
   USER'CR    = 2,                                             << 9336>>03016000
$EDIT                                                          << 9336>>03045000
   ERRORNUM,      << Return from GET'USER'ID >>                << 9336>>03120100
   DUMMY,         << For call to DIRECFIND   >>                << 9336>>03120200
                                                               << 9336>>03145300
LOGICAL ARRAY                                                  << 9336>>03146000
   CHECK'UDC'ARRAY(0:2);                                       << 9336>>03147000
                                                               << 9336>>03147100
LOGICAL ARRAY                                                  << 9336>>03148000
   RET'ENTRY( 0: DIREC'SIZE-1 );                               << 9336>>03149000
   UDELIMS'D := USER'DELIMS,                                   << 9336>>03171000
   USERDELIMS(*) = UDELIMS'D;                                  << 9336>>03255000
      USERP1DELIM       = IUSERPARMS(1).(11:5)#,               << 9336>>03325000
$EDIT VOID=03345000                                            << 9336>>03330000
      USERP2DELIM       = IUSERPARMS(3).(11:5)#;               << 9336>>03360000
$EDIT                                                          << 9336>>03385000
$EDIT                                                          << 9336>>03390000
                                                               << 9336>>03400100
LOGICAL ARRAY                                                  << 9336>>03400200
   L'ASNAME(0:3),          << Account name specified by user >><< 9336>>03400300
   L'USNAME(0:3);          << User name specified by user    >><< 9336>>03400400
                                                               << 9336>>03400500
BYTE    ARRAY                                                  << 9336>>03401000
   ASNAME(*) = L'ASNAME,                                       << 9336>>03402000
   USNAME(*) = L'USNAME;                                       << 9336>>03403000
                                                               << 9336>>03421100
LOGICAL POINTER                                                << 9336>>03421200
   USERSPECD  := @CHECK'UDC'ARRAY(0),                          << 9336>>03421300
   FILEFAILED := @CHECK'UDC'ARRAY(1);                          << 9336>>03421400
                                                               << 9336>>03421500
      << Check for a ";" as a starting delimiter >>            << 9336>>04025100
      IF LASTDELIM <> SEMI                                     << 9336>>04025300
         THEN BEGIN                                            << 9336>>04025400
              @PARMPTR := @PARMPTR - 1;                        << 9336>>04025500
              CIERR( ERRNUM := INVALSETSYNTAX, PARMPTR );      << 9336>>04025600
              GOTO OUTLOOP;                                    << 9336>>04025700
              END;                                             << 9336>>04025800
                                                               << 9336>>04026000
            BEGIN                                              << 9336>>04046000
            GOTO OUTLOOP;                                      << 9336>>04051000
            END;                                               << 9336>>04052000
            IF NEXTDELIM <> EQUALS                             << 9336>>04285000
               THEN BEGIN                                      << 9336>>04286000
                    @PARMPTR := @PARMPTR + 4;                  << 9336>>04286100
                    CIERR( ERRNUM := USERWANTSEQS, PARMPTR );  << 9336>>04287000
                    GOTO OUTLOOP;                              << 9336>>04288000
                    END                                        << 9336>>04290000
$EDIT VOID=04342000                                            << 9336>>04331000
$EDIT                                                          << 9132>>04345000
            PARMNUM := PARMNUM + 1;                            << 9336>>04350000
            MOVE USNAME := "        ";                         << 9336>>04360000
            MOVE ASNAME := "        ";                         << 9336>>04365000
            @PARMPTR := PARMADDR;  << Stuff after "=" >>       << 9336>>04370000
            IF PARMLEN = 0                                     << 9336>>04371000
               THEN BEGIN                                      << 9336>>04372000
                    CIERR( ERRNUM := EXPTUSERSPEC, PARMPTR );  << 9336>>04373000
                    GOTO OUTLOOP;                              << 9336>>04374000
                    END;                                       << 9336>>04375000
            MYCOMMAND( PARMPTR, USERDELIMS, MAXUSERSPECPARMS,  << 9336>>04380000
                       NUMUSERSPECPARMS, USERPARMS );          << 9336>>04385000
            @PARMPTR := USERP1ADDR;   << Should be user name >><< 9336>>04390000
$EDIT VOID=04425000                                            << 9336>>04395000
               << Verify syntax of user name.           >>     << 9336>>04426600
               ERRORNUM := GET'USER'ID( PARMPTR, USNAME,       << 9336>>04427000
                                        USERP1LEN );           << 9336>>04428000
               IF ERRORNUM <> 0                                << 9336>>04429000
                  THEN BEGIN                                   << 9336>>04429010
                       @PARMPTR := USERP1ADDR;                 << 9336>>04429020
                       IF ERRORNUM = 1                         << 9336>>04429100
                          THEN CIERR( ERRNUM := USER'SYNX,     << 9336>>04429200
                                                 PARMPTR )     << 9336>>04429300
                          ELSE CIERR( ERRNUM := USER'LEN,      << 9336>>04429400
                                                 PARMPTR );    << 9336>>04429500
                       GOTO OUTLOOP;                           << 9336>>04429600
                       END;   << If errornum <> 0 >>           << 9336>>04429700
               IF USERP1DELIM = DOT THEN                       << 9336>>04435000
               BEGIN      << Expect an account name >>         << 9336>>04440000
               @PARMPTR := USERP2ADDR;                         << 9336>>04445000
               IF USERP2LEN = 0                                << 9336>>04450000
                  THEN BEGIN                                   << 9336>>04455000
                       @PARMPTR := @PARMPTR - 1;               << 9336>>04456000
                       CIERR( ERRNUM := BADSHOWACCTSPEC,       << 9336>>04460000
                                        PARMPTR );             << 9336>>04465000
                       GOTO OUTLOOP;                           << 9336>>04470000
                       END;                                    << 9336>>04475000
                                                               << 9336>>04480000
               << Verify syntax of account name.        >>     << 9336>>04480600
               ERRORNUM := GET'USER'ID( PARMPTR, ASNAME,       << 9336>>04481000
                                        USERP2LEN );           << 9336>>04482000
               IF ERRORNUM <> 0                                << 9336>>04483000
                  THEN BEGIN                                   << 9336>>04483100
                       @PARMPTR := USERP2ADDR;                 << 9336>>04483200
                       IF ERRORNUM = 1                         << 9336>>04484000
                          THEN CIERR( ERRNUM := ACCT'SYNX,     << 9336>>04484100
                                                 PARMPTR )     << 9336>>04484110
                          ELSE CIERR( ERRNUM := ACCT'LEN,      << 9336>>04484200
                                                 PARMPTR );    << 9336>>04484300
                       GOTO OUTLOOP;                           << 9336>>04484400
                       END;  << If errornum <> 0 >>            << 9336>>04484500
               IF USERP2DELIM <> SEMI    AND                   << 9336>>04485000
                  USERP2DELIM <> CR                            << 9336>>04490000
                  THEN BEGIN                                   << 9336>>04495000
                       @PARMPTR := @PARMPTR + USERP2LEN;       << 9336>>04500000
                       CIERR( ERRNUM := INVALSETSYNTAX,        << 9336>>04505000
                              PARMPTR );                       << 9336>>04510000
                       GOTO OUTLOOP;                           << 9336>>04515000
                       END;                                    << 9336>>04515010
               END  << BEGIN >>                                << 9336>>04515020
          ELSE BEGIN                                           << 9336>>04515030
               IF USERP1DELIM <> SEMI    AND                   << 9336>>04515040
                  USERP1DELIM <> CR                            << 9336>>04515050
                  THEN BEGIN                                   << 9336>>04515060
                       @PARMPTR := @PARMPTR + USERP1LEN;       << 9336>>04515070
                       CIERR( ERRNUM := INVALSETSYNTAX,        << 9336>>04515080
                              PARMPTR );                       << 9336>>04515090
                       GOTO OUTLOOP;                           << 9336>>04515091
                       END;                                    << 9336>>04515092
               MOVE ASNAME(0) := ANAME(0),(8);                 << 9336>>04515093
               END;                                            << 9336>>04515094
                                                               << 9336>>04515100
               << Verify the existence of account       >>     << 9336>>04516200
               DIRECFIND( ALEVEL&LSL(3), 0D, L'ASNAME, DUMMY,  << 9336>>04516300
                          DUMMY, RET'ENTRY );                  << 9336>>04516400
               IF <>                                           << 9336>>04516500
                  THEN BEGIN                                   << 9336>>04516510
                       @PARMPTR := USERP2ADDR;                 << 9336>>04516520
                       CIERR( ERRNUM := NO'ACCT,  PARMPTR );   << 9336>>04516600
                       GOTO OUTLOOP;                           << 9336>>04516610
                       END;                                    << 9336>>04516620
                                                               << 9336>>04516700
               << Verify the existence of user          >>     << 9336>>04516800
               DIRECFIND( ULEVEL&LSL(3), 0D, L'ASNAME,L'USNAME,<< 9336>>04516900
                          DUMMY, RET'ENTRY );                  << 9336>>04517000
               IF <>                                           << 9336>>04517100
                  THEN BEGIN                                   << 9336>>04517110
                       @PARMPTR := USERP1ADDR;                 << 9336>>04517120
                       CIERR( ERRNUM := NO'USER,  PARMPTR );   << 9336>>04517200
                       GOTO OUTLOOP;                           << 9336>>04517300
                       END;                                    << 9336>>04517400
      IF NEXTDELIM <> SEMI AND NEXTDELIM <> CR                 << 9336>>04606100
         THEN BEGIN                                            << 9336>>04606200
              @PARMPTR := @PARMPTR + INTEGER( PARMLEN );       << 9336>>04606300
              CIERR( ERRNUM := INVALSETSYNTAX, PARMPTR );      << 9336>>04606400
              GOTO OUTLOOP;                                    << 9336>>04606500
              END;                                             << 9336>>04606600
$EDIT VOID=04665000                                            << 9336>>04655000
<< If the ;USER= keyword was specified, set a global flag >>   << 9336>>05415000
<< which alerts INITUDC not to write the directory out to >>   << 9336>>05420000
<< the UDC extra data segment.  We only want INITUDC to   >>   << 9336>>05425000
<< verify that the supplied UDC files are legal and will  >>   << 9336>>05430000
<< be correctly initalized when the user logs on later.   >>   << 9336>>05431000
<< If errors are returned or not returned, just return.   >>   << 9336>>05432000
$EDIT                                                          << 9336>>05435000
   IF NOT USERSPECD                                            << 9336>>05445000
      THEN UDCDSTNO := 0;                                      << 9336>>05446000
   IF USERSPECD                                                << 9336>>05450000
      THEN INITUDCNO( SHOW, COMFN, CHECK'UDC'ARRAY, USNAME,    << 9336>>05451000
                                                    ASNAME )   << 9336>>05451100
      ELSE INITUDCNO( SHOW, COMFN, CHECK'UDC'ARRAY );          << 9336>>05452000
   IF USERSPECD = TRUE  << Then must check FILEFAILED >>       << 9336>>05455000
      THEN IF FILEFAILED = -1                                  << 9336>>05460000
              THEN GOTO LOCKWRDERR                             << 9336>>05465000
              ELSE IF FILEFAILED = 0                           << 9336>>05470000
                      THEN GOTO UDCFAILED                      << 9336>>05475000
                      ELSE                                     << 9336>>05480000
      ELSE IF INTEGER( UDCDSTNO ) <= 0                         << 9336>>05485000
              THEN BEGIN                                       << 9336>>05490000
                   IF INTEGER( UDCDSTNO ) < 0                  << 9336>>05495000
                      THEN BEGIN                               << 9336>>05496000
LOCKWRDERR:                CIERR( ERRNUM := LOCKWORDERR );     << 9336>>05500000
                           END;                                << 9336>>05501000
                                                               << 9336>>05505000
                   IF USERSPECD = FALSE                        << 9336>>05510000
                      THEN UDCDSTNO := OLDDSTNO;               << 9336>>05515000
                                                               << 9336>>05516000
UDCFAILED:         << Restore old udcs for user >>             << 9336>>05517000
                   UDCDIRCWRITE( UNAME, ANAME, OLDUDCSEXIST,   << 9336>>05518000
                                              OLDRECNO      ); << 9336>>05519000
                   RELEASERECS( RECNO );                       << 9336>>05519100
                   ERRNUM := INITUDCFAILED;                    << 9336>>05519200
                   END;                                        << 9336>>05520000
      INITUDCNO( FALSE, COMFN, CHECK'UDC'ARRAY );              << 9336>>05725000
USERSPECD := FALSE;                                            << 9336>>05780000
FILEFAILED := 0;                                               << 9336>>05781000
$PAGE                                                          << 9336>>06479999
   FCLOSE'OPTIONS := 0,                                        <<02152>>06620100
   FOPTIONS,                                                   <<02152>>06620200
   ERRORNUM,                                                   << 9336>>06621000
   DUMMY,                                                      << 9336>>06622000
   INDIRECT,                                                   <<02152>>06686000
      USER'DELIMS  = [8/".",8/";",16/%15]D #,                  << 9336>>06731000
      DELIMDEF     = [8/",",8/";",8/"=",8/%15]D #;             << 9336>>06735000
      MAXSHOWPARMS      = 5,  << Actually 1 more than  >>      << 9336>>06750000
      MAXUSERPARMS      = 3,                                   << 9336>>06756000
      COMMA             = 0,                                   << 9336>>06760000
      DOT               = 0,                                   << 9336>>06765000
      SEMI              = 1,                                   << 9336>>06770000
      EQUALS            = 2,                                   << 9336>>06771000
      USER'CR           = 2,                                   << 9336>>06772000
      UDELIMS'D := USER'DELIMS,                                << 9336>>06787000
      UDELIMS(*) = UDELIMS'D,                                  << 9336>>06796000
      NUMUSERPARMS,                                            << 9336>>06810100
      ACTPARMS,                                                << 9336>>06811000
   LOGICAL ARRAY                                               << 9336>>06821000
      RET'ENTRY( 0:DIREC'SIZE-1 );                             << 9336>>06822000
   DOUBLE ARRAY                                                << 9336>>06841000
      USERPARMS(0:MAXUSERPARMS);                               << 9336>>06842000
                                                               << 9336>>06843000
   INTEGER ARRAY                                               << 9336>>06844000
      IUSERPARMS(*) = USERPARMS;                               << 9336>>06844100
$EDIT VOID = 06930000                                          << 9336>>06850000
   DEFINE                                                      << 9336>>06931000
      LASTDELIM = IPARMS((2*(ACTPARMS-1))+1).(11:5) #,         << 9336>>06931100
      PARMADDR  = IPARMS(2*ACTPARMS) #,                        << 9336>>06932000
      PARMLEN   = IPARMS(2*ACTPARMS + 1).(0:8) #,              << 9336>>06933000
      NEXTDELIM = IPARMS(2*ACTPARMS + 1).(11:5)#;              << 9336>>06934000
                                                               << 9336>>06934100
   DEFINE                                                      << 9336>>06934200
      USERP1ADDR      = IUSERPARMS #,                          << 9336>>06934300
      USERP1LEN       = IUSERPARMS(1).(0:8) #,                 << 9336>>06934400
      USERP1DELIM     = IUSERPARMS(1).(11:5) #,                << 9336>>06934500
      USERP2ADDR      = IUSERPARMS(2) #,                       << 9336>>06934600
      USERP2LEN       = IUSERPARMS(3).(0:8) #,                 << 9336>>06934700
      USERP2DELIM     = IUSERPARMS(3).(11:5) #,                << 9336>>06934800
      USERP3ADDR      = IUSERPARMS(4) #,                       << 9336>>06934900
      USERP3LEN       = IUSERPARMS(5).(0:8) #,                 << 9336>>06934910
      USERP3DELIM     = IUSERPARMS(5).(11:5) #;                << 9336>>06934920
                                                               << 9336>>06934930
   LOGICAL ARRAY                                               << 9336>>06935100
      L'ANAME(0:3),                                            << 9336>>06935200
      L'UNAME(0:3);                                            << 9336>>06935300
                                                               << 9336>>06935400
$EDIT                                                          << 9336>>06945000
$EDIT                                                          << 9336>>06950000
                                                               << 9336>>06970900
   BYTE POINTER                                                << 9336>>06971000
      FILENAMEPTR;                                             << 9336>>06972000
                                                               << 9336>>06973000
   BYTE ARRAY                                                  << 9336>>06974000
      FILENAME(0:28);                                          <<02152>>06974100
                                                               << 9336>>06974200
                                                               << 9336>>06974300
   BYTE    ARRAY                                               << 9336>>06974400
      ANAME(*)   = L'ANAME,                                    << 9336>>06974500
      UNAME(*)   = L'UNAME;                                    << 9336>>06974600
                                                               << 9336>>06974700
      USERSPEC := FALSE,                                       << 9336>>06996000
BYTE ARRAY PKEYLIST(0:1) = PB :=                               << 9336>>07071100
     6,4,"USER",                                               << 9336>>07071200
     0;                                                        << 9336>>07071300
EQUATE PKEYLISTLEN = 7;                                        << 9336>>07071400
BYTE ARRAY KEYLIST(0:PKEYLISTLEN - 1);                         << 9336>>07071500
$EDIT VOID=07150000                                            <<02152>>07146010
                                                               <<02152>>07146100
SUBROUTINE OPENLISTFILE;                                       <<02152>>07146200
<< Opens the list file if specified >>                         <<02152>>07146300
BEGIN                                                          <<02152>>07146400
ACTPARMS := 0;                                                 <<02152>>07146500
MOVE DEV := "LP ";                                             <<02152>>07146600
SAVEBYTE := FILENAME( PARMLEN );                               <<02152>>07146700
FILENAME( PARMLEN ) := 0;  << For FOPEN, CIERR >>              <<02152>>07146800
IF INDIRECT THEN BEGIN                                         <<02152>>07146900
  LISTFN := FOPEN( FILENAME, %2504, %101);                     <<02152>>07147000
  IF <> THEN BEGIN                                             <<02152>>07147100
    @PARMPTR := PARMADDR;                                      <<02152>>07147200
    CIERR( ERRNUM := SHOWCATLISTOPENF, PARMPTR,                <<02152>>07147300
                         1, @FILENAME );                       <<02152>>07147400
    GOTO OUTL;                                                 <<02152>>07147500
  END;                                                         <<02152>>07147600
  FGETINFO(LISTFN,,FOPTIONS);                                  <<02152>>07147700
  FCLOSE'OPTIONS.(13:3) := IF FOPTIONS.(14:2) = %0             <<02152>>07147800
                              THEN %2  << TEMP >>              <<02152>>07147900
                              ELSE %0; << OLD  >>              <<02152>>07148000
END                                                            <<02152>>07148100
ELSE BEGIN                                                     <<02152>>07148200
  LISTFN := FOPEN( FILENAME, %4, 1, , DEV);                    <<02152>>07148300
  IF <>                                                        <<02152>>07148400
    THEN BEGIN                                                 <<02152>>07148500
          @PARMPTR := PARMADDR;                                <<02152>>07148600
           CIERR( ERRNUM := SHOWCATLISTOPENF, PARMPTR,         <<02152>>07148700
                                 1, @FILENAME );               <<02152>>07148800
           GOTO OUTL;                                          <<02152>>07148900
           END;                                                <<02152>>07149000
END;                                                           <<02152>>07149100
FILENAME( PARMLEN ) := SAVEBYTE;                               <<02152>>07149200
END;  << Subroutine OPENLISTFILE >>                            <<02152>>07149300
                                                               <<02152>>07149400
                                                               <<02152>>07149500
                                                               <<02152>>07149600
   ACTPARMS := 0;                                              << 9336>>07207000
   NUMPARMS := 0;                                              << 9336>>07211000
   INDIRECT := FALSE;                                          <<02152>>07212000
   IF NUMPARMS > MAXSHOWPARMS                                  << 9336>>07216000
      THEN BEGIN                                               << 9336>>07216100
           CIERR( ERRNUM := SHOWCATTOOMANYPARMS, PARMADDR );   << 9336>>07217000
           GOTO OUTL;                                          << 9336>>07218000
           END;                                                << 9336>>07219000
<< Check for first parameter - a list file.  If it exists, >>  << 9336>>07225000
<< see if it is appropriate for a list file.               >>  << 9336>>07230000
IF NUMPARMS = 0 OR PARMLEN = 0                                 << 9336>>07235000
   THEN BEGIN                                                  << 9336>>07240000
        SETLIST := FALSE;           << No listfile specified >><< 9336>>07245000
        LISTFN := FOPEN( , %14, 1 ); << Open $STDLIST >>       << 9336>>07250000
        IF <>                                                  << 9336>>07255000
           THEN BEGIN                                          << 9336>>07255100
                CIERR( ERRNUM := SHOWCATLISTOPENF, PARMPTR  ); << 9336>>07260000
                GOTO OUTL;                                     << 9336>>07261000
                END;                                           << 9336>>07262000
        END                                                    << 9336>>07265000
   ELSE BEGIN                                                  << 9336>>07270000
        SETLIST := TRUE;  << Listfile specified >>             << 9336>>07275000
        @PARMPTR := PARMADDR;                                  << 9336>>07280000
        << Make a specific check for the $NULL file >>         << 9336>>07281000
        IF PARMPTR = "$NULL" AND INTEGER( PARMLEN ) = 5        << 9336>>07282000
           THEN BEGIN                                          << 9336>>07283000
                MOVE FILENAME := ("$NULL",0);                  << 9336>>07284000
                GOTO CONTINUE;                                 << 9336>>07284100
                END;                                           << 9336>>07284200
        << CHECK FOR BACKREFERNCED FILE NAME >>                <<02152>>07284300
        IF PARMPTR = "*" THEN BEGIN                            <<02152>>07284400
          << note that ERRORNUM is used as a    >>             <<02152>>07284500
          <<   dummy parameter in the next call >>             <<02152>>07284600
          IF CIBADFILENAME(ERRORNUM,PARMS(ACTPARMS)) THEN      <<02152>>07284700
            GOTO OUTL;                                         <<02152>>07284800
          MOVE FILENAME := PARMPTR, (PARMLEN);                 <<02152>>07284810
          INDIRECT := TRUE;                                    <<02152>>07284900
        END                                                    <<02152>>07284910
        ELSE BEGIN                                             <<02152>>07284920
          ERRORNUM := GET'USER'ID(PARMPTR,FILENAME,PARMLEN);   <<02152>>07285000
$EDIT                                                          << 9336>>07290000
          IF ERRORNUM <> 0                                     <<02152>>07295000
             THEN BEGIN                                        <<02152>>07295100
                  IF ERRORNUM = 1                              <<02152>>07300000
                     THEN CIERR( ERRNUM := FILE'SYNX,          <<02152>>07305000
                                           PARMPTR )           <<02152>>07310000
                     ELSE CIERR( ERRNUM := FILE'LEN,           <<02152>>07315000
                                           PARMPTR );          <<02152>>07320000
                  GOTO OUTL;                                   <<02152>>07320100
                  END;                                         <<02152>>07320200
        END;                                                   <<02152>>07321200
$EDIT                                                          << 9336>>07325000
$EDIT                                                          << 9336>>07330000
        END;  << Else BEGIN >>                                 << 9336>>07337000
                                                               << 9336>>07338000
CONTINUE:                                                      << 9336>>07338010
                                                               << 9336>>07338020
ACTPARMS := ACTPARMS + 1;                                      << 9336>>07338100
                                                               << 9336>>07338200
USERSPEC := FALSE;                                             << 9336>>07338300
                                                               << 9336>>07338400
ERRORNUM := 0;                                                 << 9336>>07364000
MOVE KEYLIST := PKEYLIST, (PKEYLISTLEN);                       << 9336>>07365000
WHILE ACTPARMS < NUMPARMS AND ERRORNUM = 0 DO                  << 9336>>07370000
   BEGIN                                                       << 9336>>07375000
   @PARMPTR := PARMADDR;                                       << 9336>>07380000
      << Check for a ";" as a starting delimiter >>            << 9336>>07380100
      IF LASTDELIM <> SEMI                                     << 9336>>07380300
         THEN BEGIN                                            << 9336>>07380400
              @PARMPTR := @PARMPTR + 1;                        << 9336>>07380500
              CIERR( ERRNUM := INVALSHOWSYNTAX, PARMPTR );     << 9336>>07380600
              GOTO OUTL;                                       << 9336>>07380700
              END;                                             << 9336>>07380800
   CASE SEARCH( PARMPTR, PARMLEN, KEYLIST ) OF                 << 9336>>07385000
      BEGIN                                                    << 9336>>07390000
                                                               << 9336>>07395000
      << 0 - Unknown keyword >>                                << 9336>>07400000
      BEGIN                                                    << 9336>>07401000
      CIERR( ERRNUM := SHW'UKNKEYWORD, PARMPTR );              << 9336>>07405000
      GOTO OUTL;                                               << 9336>>07406000
      END;                                                     << 9336>>07407000
                                                               << 9336>>07410000
      << 1 - ;USER= keyword >>                                 << 9336>>07415000
      BEGIN                                                    << 9336>>07420000
      USERSPEC := TRUE;                                        << 9336>>07421000
      MOVE UNAME := "@       ";                                << 9336>>07422000
      MOVE ANAME := "@       ";    << For WILD "@" specs >>    << 9336>>07423000
      IF NEXTDELIM <> EQUALS                                   << 9336>>07425000
         THEN BEGIN                                            << 9336>>07425100
              @PARMPTR := @PARMPTR + 4;                        << 9336>>07425200
              CIERR( ERRNUM := SHW'USERNEEDSEQUAL, PARMPTR );  << 9336>>07430000
              GOTO OUTL;                                       << 9336>>07430100
              END;                                             << 9336>>07430200
      << Get the user id.  The user must be specified while >> << 9336>>07435000
      << the account is optional.  But if the account is    >> << 9336>>07440000
      << specified, then the user and the account must be   >> << 9336>>07445000
      << seperated by a ".".  If the account is not         >> << 9336>>07450000
      << specified, the caller's account is assumed.        >> << 9336>>07455000
      ACTPARMS := ACTPARMS + 1;                                << 9336>>07456000
      @PARMPTR := PARMADDR;   << Stuff after the "=" >>        << 9336>>07460000
      IF PARMLEN = 0                                           << 9336>>07461000
         THEN BEGIN                                            << 9336>>07462000
              CIERR( ERRNUM := BADSHOWUSERSPEC, PARMPTR );     << 9336>>07463000
              GOTO OUTL;                                       << 9336>>07464000
              END;  << No target user specification >>         << 9336>>07464100
      MYCOMMAND( PARMPTR, UDELIMS,   MAXUSERPARMS,             << 9336>>07465000
                 NUMUSERPARMS, USERPARMS );                    << 9336>>07470000
      @PARMPTR := USERP1ADDR;  << Should be the user name >>   << 9336>>07475000
      << Verify the syntax of the user id >>                   << 9336>>07480000
      << First see it's a WILD user (girls love'em WILD!) >>   << 9336>>07481000
      IF PARMPTR = "@" AND USERP1LEN = 1                       << 9336>>07482000
         THEN BEGIN                                            << 9336>>07483000
              WILDUSER := TRUE;                                << 9336>>07484000
              GOTO GETACCT;                                    << 9336>>07484100
              END;                                             << 9336>>07484200
      ERRORNUM := GET'USER'ID( PARMPTR, UNAME, USERP1LEN );    << 9336>>07485000
$EDIT                                                          << 9336>>07490000
      IF ERRORNUM <> 0                                         << 9336>>07495000
         THEN BEGIN                                            << 9336>>07495100
              @PARMPTR := USERP1ADDR;  << Bad loc. >>          << 9336>>07495200
              IF ERRORNUM = 1                                  << 9336>>07500000
                 THEN CIERR( ERRNUM := USER'SYNX,  PARMPTR )   << 9336>>07505000
                 ELSE CIERR( ERRNUM := USER'LEN ,  PARMPTR );  << 9336>>07510000
             GOTO OUTL;                                        << 9336>>07511000
             END;                                              << 9336>>07512000
                                                               << 9336>>07515000
GETACCT:                                                       << 9336>>07516000
      << See if an account name was specified >>               << 9336>>07520000
      IF USERP1DELIM = DOT                                     << 9336>>07525000
         THEN BEGIN                                            << 9336>>07530000
              << We are expecting an account name >>           << 9336>>07535000
$EDIT                                                          << 9336>>07540000
              @PARMPTR := USERP2ADDR;  << Account name >>      << 9336>>07545000
              IF USERP2LEN = 0                                 << 9336>>07546000
                 THEN BEGIN                                    << 9336>>07547000
                      @PARMPTR := @PARMPTR - 1;                << 9336>>07547100
                      CIERR( ERRNUM := BADSHOWACCTSPEC,        << 9336>>07548000
                                       PARMPTR );              << 9336>>07549000
                      GOTO OUTL;                               << 9336>>07549100
                      END;                                     << 9336>>07549200
              << First see if it's a WILD account     >>       << 9336>>07549300
              IF PARMPTR = "@" AND USERP2LEN = 1               << 9336>>07549400
                 THEN BEGIN                                    << 9336>>07549500
                      WILDACCT := TRUE;                        << 9336>>07549600
                      GOTO VERIFYACCT;                         << 9336>>07549700
                      END;                                     << 9336>>07549800
              ERRORNUM := GET'USER'ID( PARMPTR, ANAME,         << 9336>>07550000
                                       USERP2LEN );            << 9336>>07555000
              IF ERRORNUM <> 0                                 << 9336>>07560000
                 THEN BEGIN                                    << 9336>>07560100
                      @PARMPTR := USERP2ADDR; << Bad loc.  >>  << 9336>>07560200
                      IF ERRORNUM = 1                          << 9336>>07565000
                         THEN CIERR( ERRNUM := ACCT'SYNX,      << 9336>>07570000
                                                PARMPTR )      << 9336>>07575000
                         ELSE CIERR( ERRNUM := ACCT'LEN ,      << 9336>>07580000
                                                PARMPTR );     << 9336>>07585000
                      GOTO OUTL;                               << 9336>>07586000
                      END;                                     << 9336>>07587000
              IF USERP2DELIM <> SEMI    AND                    << 9336>>07587100
                 USERP2DELIM <> CR                             << 9336>>07587200
                 THEN BEGIN                                    << 9336>>07587300
                      @PARMPTR := @PARMPTR + USERP2LEN;        << 9336>>07587400
                      CIERR( ERRNUM := INVALSHOWSYNTAX,        << 9336>>07587500
                             PARMPTR );                        << 9336>>07587600
                      GOTO OUTL;                               << 9336>>07587700
                      END;                                     << 9336>>07587800
              END  << BEGIN >>                                 << 9336>>07590000
         ELSE BEGIN                                            << 9336>>07590100
              IF USERP1DELIM <> SEMI    AND                    << 9336>>07590200
                 USERP1DELIM <> CR                             << 9336>>07590300
                 THEN BEGIN                                    << 9336>>07590400
                      @PARMPTR := @PARMPTR + USERP1LEN;        << 9336>>07590500
                      CIERR( ERRNUM := INVALSHOWSYNTAX,        << 9336>>07590600
                             PARMPTR );                        << 9336>>07590700
                      GOTO OUTL;                               << 9336>>07590800
                      END;                                     << 9336>>07590810
              MOVE ANAME(0) := CALLERACCT(0),(8);              << 9336>>07590900
              END;                                             << 9336>>07590910
                                                               << 9336>>07591100
VERIFYACCT:                                                    << 9336>>07591110
                                                               << 9336>>07591120
      << Can't have ;USER=username.@ >>                        << 9336>>07591121
      IF WILDACCT AND NOT WILDUSER                             << 9336>>07591130
         THEN BEGIN                                            << 9336>>07591140
              @PARMPTR := USERP2ADDR;                          << 9336>>07591150
              CIERR( ERRNUM := SHOWILLEGALWILDS, PARMPTR );    << 9336>>07591160
              GOTO OUTL;                                       << 9336>>07591170
              END;                                             << 9336>>07591180
                                                               << 9336>>07591190
      << Verify existence of account >>                        << 9336>>07591200
      << If WILDACCT, then jump to capability checks >>        << 9336>>07591210
      IF WILDACCT                                              << 9336>>07591220
         THEN GOTO CHECKCAPS;                                  << 9336>>07591230
                                                               << 9336>>07591240
      DIRECFIND( ALEVEL&LSL(3), 0D, L'ANAME, DUMMY,            << 9336>>07591300
                 DUMMY, RET'ENTRY );                           << 9336>>07591400
      IF <>                                                    << 9336>>07591500
         THEN BEGIN                                            << 9336>>07591510
              @PARMPTR := USERP2ADDR;                          << 9336>>07591520
              CIERR( ERRNUM := NO'ACCT,  PARMPTR );            << 9336>>07591600
              GOTO OUTL;                                       << 9336>>07591610
              END;                                             << 9336>>07591620
                                                               << 9336>>07591700
      << Verify existence of user    >>                        << 9336>>07591800
      << If WILDUSER, jump to capability checks >>             << 9336>>07591810
      IF WILDUSER                                              << 9336>>07591820
         THEN GOTO CHECKCAPS;                                  << 9336>>07591830
                                                               << 9336>>07591840
      DIRECFIND( ULEVEL&LSL(3), 0D, L'ANAME, L'UNAME,          << 9336>>07591900
                 DUMMY, RET'ENTRY );                           << 9336>>07592000
      IF <>                                                    << 9336>>07592100
         THEN BEGIN                                            << 9336>>07592110
              @PARMPTR := USERP1ADDR;                          << 9336>>07592120
              CIERR( ERRNUM := NO'USER,  PARMPTR );            << 9336>>07592200
              GOTO OUTL;                                       << 9336>>07592210
              END;                                             << 9336>>07592220
                                                               << 9336>>07592300
      END;  << 1 - USER keyword >>                             << 9336>>07595000
                                                               << 9336>>07600000
      END;  << CASE statement >>                               << 9336>>07605000
                                                               << 9336>>07610000
  IF NEXTDELIM <> SEMI AND NEXTDELIM <> CR                     << 9336>>07611000
      THEN BEGIN                                               << 9336>>07612000
           @PARMPTR := @PARMPTR + PARMLEN;                     << 9336>>07613000
           CIERR( ERRNUM := INVALSHOWSYNTAX, PARMPTR );        << 9336>>07614000
           GOTO OUTL;                                          << 9336>>07614100
           END;                                                << 9336>>07614200
    ACTPARMS := ACTPARMS + 1;                                  << 9336>>07615000
                                                               << 9336>>07620000
    END;  << WHILE statment >>                                 << 9336>>07625000
                                                               << 9336>>07626000
CHECKCAPS:                                                     << 9336>>07626100
                                                               << 9336>>07626200
IF NOT USERSPEC                                                << 9336>>07627000
   THEN GOTO COMMANDLIST;                                      << 9336>>07628000
$EDIT VOID = 07710000                                          << 9336>>07630000
      IF SETLIST                                               << 9336>>07846000
         THEN OPENLISTFILE;                                    << 9336>>07847000
                                                               << 9336>>07848000
IF SETLIST                                                     << 9336>>08060100
   THEN GENMSG( SETSEVEN, USEDLISTFILE );                      << 9336>>08060200
$EDIT                                                          << 9336>>08095000
                                                               << 9336>>08106000
COMMANDLIST:                                                   << 9336>>08107000
                                                               << 9336>>08108000
   IF SETLIST                                                  << 9336>>08155000
      THEN BEGIN                                               << 9336>>08156000
           OPENLISTFILE;                                       << 9336>>08157000
           GENMSG( SETSEVEN, USEDLISTFILE );                   << 9336>>08158000
           END                                                 << 9336>>08159000
      ELSE PRINT( BUFF', 0, 0 );                               << 9336>>08160000
FCLOSE(LISTFN,FCLOSE'OPTIONS,0);                               <<02152>>08355000
$PAGE                                                          << 9336>>08369999
$PAGE                                                          << 9336>>08734999
$PAGE                                                          << 9336>>09224999
$PAGE                                                          << 9336>>10244999
$PAGE                                                          << 9336>>10589999
$PAGE                                                          << 9336>>11039999
PROCEDURE INITUDC( SHOW, SETCATCOMFN, CHECK'UDC'ARRAY,         << 9336>>11045000
                   CHECK'USER, CHECK'ACCT );                   << 9336>>11046000
   VALUE    SHOW, SETCATCOMFN;                                 << 9336>>11050000
   LOGICAL  SHOW;                                              << 9336>>11055000
   BYTE     ARRAY CHECK'USER, CHECK'ACCT;                      << 9336>>11056000
   LOGICAL  ARRAY CHECK'UDC'ARRAY;                             << 9336>>11057000
<<                                                          >> << 9336>>11351010
<< Fix Information                                          >> << 9336>>11351020
<<                                                          >> << 9336>>11351030
<< * With this fix, the created directory will not be       >> << 9336>>11351040
<<   written to the UDC extra data segment if the USER=     >> << 9336>>11351050
<<   keyword was specified with the :SETCATALOG command.    >> << 9336>>11351060
<<   Added a new input parameter to INITUDC procedure.      >> << 9336>>11351061
<<   The input parameter CHECK'UDC'ONLY will be TRUE        >> << 9336>>11351070
<<   if the directory is not to be written.                 >> << 9336>>11351080
<<   The only possible spot where CHECK'UDC'ONLY could be   >> << 9336>>11351090
<<   set to TRUE is from CXSETCATALOG.                      >> << 9336>>11351100
<<                                                          >> << 9336>>11351110
   WHICHERR,                                                   << 9336>>11486000
                                                               << 9969>>11736000
LOGICAL PCBPT;                                                 << 9969>>11737000
LOGICAL POINTER PCB = 3;                                       << 9969>>11737010
LOGICAL POINTER ICS = 7;                                       << 9969>>11737020
EQUATE                                                         << 9969>>11737030
  DISPQ = 1,                                                   << 9969>>11737040
  ENDOFCLASS = 0;                                              << 9969>>11737050
DEFINE                                                         << 9969>>11737060
  PENABLE = ASSEMBLE(PSEB)#,                                   << 9969>>11737070
  PDISABLE = ASSEMBLE(PSDB)#;                                  << 9969>>11737080
LOGICAL OLDPRI := 0;                                           << 9969>>11738000
            <<0>> BEGIN                                        << 9336>>12180000
                  IF CHECK'UDC'ARRAY( 0 ) = TRUE               << 9336>>12180030
                     THEN BEGIN                                << 9336>>12180040
                          ERROR( UNKNOWNOPTIONNOTSET, SYNERR,  << 9336>>12180050
                                 SPTR, SAVEPTR );              << 9336>>12180051
                          GOTO OUTL;                           << 9336>>12180060
                          END                                  << 9336>>12180070
                     ELSE ERROR( -UNKNOWNOPTION, SYNERR, SPTR, << 9336>>12180071
                                  SAVEPTR );                   << 9336>>12180072
                  END;                                         << 9336>>12180080
GO MAINCODE;                                                   << 9969>>12625000
MAINCODE:                                                      << 9969>>12685000
   PCBPT := CURPRC;                                            << 9969>>12776000
   PDISABLE;                                                   << 9969>>12776010
   OLDPRI := QUEUEINGINFO.(2:3);  << CQ, DQ, EQ >>             << 9969>>12776020
   IF OLDPRI = 1 OR OLDPRI = 2 << DQ OR EQ >> THEN             << 9969>>12776030
   BEGIN                                                       << 9969>>12776040
     << SINCE THIS PROCESS WILL HAVE COMMAND.PUB.SYS LOCKED, >><< 9969>>12776050
     << WE WILL PUT HIM IN THE CQ TEMPORARILY TO ALLOW HIM   >><< 9969>>12776060
     << TO COMPETE WITH SESSIONS FOR CPU TIME.  IF WE DIDN'T >><< 9969>>12776070
     << DO THIS HE MIGHT NOT RUN AND AT THE SAME TIME, HOLD  >><< 9969>>12776080
     << UP OTHER PEOPLE LOGGING ON.                          >><< 9969>>12776090
     QUEUEINGINFO.CSCHEDFLAG := 1;                             << 9969>>12776100
     QUEUEINGINFO.DSCHEDFLAG := 0;                             << 9969>>12776110
     QUEUEINGINFO.ESCHEDFLAG := 0;                             << 9969>>12776120
     SPCBPPRI := ICS(-ICS'CSCHEDBASECELL);                     << 9969>>12776130
     TOS := %1000D;                                            << 9969>>12776140
     ASSEMBLE(XCHD);                                           << 9969>>12776150
     QUEUEPROC(PCBPT,DISPQ,ENDOFCLASS);                        << 9969>>12776160
     ASSEMBLE(XCHD);                                           << 9969>>12776170
     ASSEMBLE(DDEL);                                           << 9969>>12776180
   END;                                                        << 9969>>12776190
   PENABLE;                                                    << 9969>>12776200
IF CHECK'UDC'ARRAY( 0 ) = TRUE                                 << 9336>>12791000
   THEN BEGIN                                                  << 9336>>12792000
        MOVE USER(0) := CHECK'USER,(8);                        << 9336>>12793000
        MOVE ACCOUNT(0) := CHECK'ACCT,(8);                     << 9336>>12794000
        END                                                    << 9336>>12795000
   ELSE WHO( ,,,USER,,ACCOUNT );                               << 9336>>12795100
                            IF CHECK'UDC'ARRAY( 0 ) = TRUE     << 9336>>13736000
                               THEN WHICHERR :=                << 9336>>13737000
                                             CMDTOOLONGNOTSET  << 9336>>13738000
                               ELSE WHICHERR :=                << 9336>>13739000
                                             CMDTOOLONG;       << 9336>>13739100
                            ERROR(WHICHERR, IF SHOW THEN       << 9336>>13740000
                  IF CHECK'UDC'ARRAY( 0 ) = TRUE               << 9336>>13796000
                     THEN WHICHERR := CMDNOTALPHANOTSET        << 9336>>13797000
                     ELSE WHICHERR := CMDNOTALPHA;             << 9336>>13798000
                  ERROR(WHICHERR, IF SHOW THEN SYNERRNOL       << 9336>>13800000
                                                               << 9341>>13840010
               << Special check here to ensure that the     >> << 9341>>13840020
               << current command fits into the directory   >> <<09429>>13840030
               << along with the trailer entry of 26 bytes. >> <<09429>>13840035
               ENTRYLEN := DIRHEADSIZE + (LEN+1)&LSR(1);       << 9341>>13840040
               IF (OFFSET + ENTRYLEN*2 + 26) > DIRSIZEB        <<09429>>13840050
                  THEN ERR( TOOMANYCMDSFORDIR, -1 );           << 9341>>13840060
                                                               << 9341>>13840070
$EDIT VOID=13935000                                            <<09429>>13930000
   IF CHECK'UDC'ARRAY( 0 ) = TRUE                              <<09430>>14126000
      THEN PVCLOSE( UDCFN, 0, 0 );                             <<09430>>14127000
                                                               << 9336>>14231100
<< If input parameter CHECK'UDC'ARRAY TRUE, then DO NOT    >>  << 9336>>14231200
<< write the directory out to the UDC extra data segment.  >>  << 9336>>14231300
IF CHECK'UDC'ARRAY( 0 ) = TRUE                                 << 9336>>14231400
   THEN GOTO AFTER'WRITE;                                      << 9336>>14231500
                                                               << 9336>>14231600
                                                               << 9336>>14280100
AFTER'WRITE:                                                   << 9336>>14284000
CHECK'UDC'ARRAY( 1 ) := 1; << Flag of success when ;USER= >>   << 9336>>14285000
   IF OLDPRI = 2 OR OLDPRI = 1 THEN                            << 9969>>14341000
   BEGIN                                                       << 9969>>14341010
     PDISABLE;                                                 << 9969>>14341020
     QUEUEINGINFO.(2:3) := OLDPRI;                             << 9969>>14341030
     IF QUEUEINGINFO.DSCHEDFLAG = 1                            << 9969>>14341040
        THEN SPCBPPRI := ICS(-ICS'DSCHEDBASECELL)              << 1136>>14341050
        ELSE SPCBPPRI := ICS(-ICS'ESCHEDBASECELL);             << 1136>>14341060
     TOS := %1000D;                                            << 9969>>14341070
     ASSEMBLE(XCHD);                                           << 9969>>14341080
     QUEUEPROC(PCBPT,DISPQ,ENDOFCLASS);                        << 9969>>14341090
     ASSEMBLE(XCHD;DDEL);                                      << 9969>>14341100
     PENABLE;                                                  << 9969>>14341110
   END;                                                        << 9969>>14341120
  <<  SUDDENDEATH(535);    COULDN'T FIND LOGON CMD IN DIR >>            14520000
      SEMERR (CANTFINDCOMM + I);                                        14521000
   IF OLDPRI = 2 OR OLDPRI = 1 THEN                            << 9969>>14625010
   BEGIN                                                       << 9969>>14625020
     PDISABLE;                                                 << 9969>>14625030
     QUEUEINGINFO.(2:3) := OLDPRI;                             << 9969>>14625040
     IF QUEUEINGINFO.DSCHEDFLAG = 1                            << 9969>>14625050
        THEN SPCBPPRI := ICS(-ICS'DSCHEDBASECELL)              << 1136>>14625060
        ELSE SPCBPPRI := ICS(-ICS'ESCHEDBASECELL);             << 1136>>14625070
     TOS := %1000D;                                            << 9969>>14625080
     ASSEMBLE(XCHD);                                           << 9969>>14625090
     QUEUEPROC(PCBPT,DISPQ,ENDOFCLASS);                        << 9969>>14625100
     ASSEMBLE(XCHD;DDEL);                                      << 9969>>14625110
     PENABLE;                                                  << 9969>>14625120
   END;                                                        << 9969>>14625130
         IF CHECK'UDC'ARRAY( 0 ) = TRUE                        << 9336>>14660000
            THEN CHECK'UDC'ARRAY( 1 ) := -1                    << 9336>>14661000
            ELSE UDCDSTNO   := -1;                             << 9336>>14662000
$PAGE                                                          << 9336>>14704999
$PAGE                                                          << 9336>>14924999
$PAGE                                                          << 9336>>15509999
$PAGE                                                          << 9336>>15904999
$PAGE                                                          << 9336>>16174999
$PAGE                                                          << 9336>>16534999
$PAGE                                                          << 9336>>16814999
$PAGE                                                          << 9336>>17059999
$PAGE                                                          << 9336>>17849999
$PAGE                                                          << 9336>>18184999
$PAGE                                                          << 9336>>18254999
$PAGE                                                          << 9336>>18569999
