$CONTROL USLINIT,MAP,CODE,MAIN=MPEV'CONVERSION                          00020000
$CONTROL SEGMENT=MPEV'CONVERSION                                        00030000
BEGIN                                                                   00040000
   <<  This program will perform the MPEV conversion  >>                00050000
                                                                        00060000
   <<  The parm parameter has the following meanings  >>                00070000
   <<       0 - Convert all tables                    >>                00080000
   <<  BIT 15 - Convert I/O TABLES (DVR/LPDT/LDT/DCT) >>                00090000
   <<  BIT 14 - Convert COLD LOAD INFO                >>                00100000
   <<  BIT 13 - Convert RIN TABLE                     >>                00110000
   <<  BIT 12 - Build INITIAL/SYSDUMP COMM TABLE      >>                00120000
   <<  BIT 11 - Purge system utilities                >>                00130000
                                                                        00140000
DEFINE HEADING =                                                        00150000
  "MPE V/E Conversion Program (June 5, 1984)"#;                <<A8781>>00160000
                                                                        00170000
   EQUATE SYSDISC = 1;                                                  00180000
   EQUATE READ = 0;                                                     00190000
   EQUATE WRITE = 1;                                                    00200000
   DEFINE ABS = ABSOLUTE#;                                     <<V8273>>00210000
   DEFINE OFFICIAL'VUUFF = "G.00.00" #;                        <<07989>>00220000
   ENTRY CONVERT,FORWD,BACKWD,VERIFY,HELP;                              00230000
   LOGICAL PARM;                                                        00240000
   INTEGER TERMFNUM;                                           <<V8273>>00250000
   INTEGER OPTION'TAKEN;                                                00260000
   INTEGER SYSTEM'TYPE;                                                 00270000
   INTEGER TABLENR;  << THE TABLE WE ARE CURRENTLY CONVERTING >>        00280000
   REAL PAUSETIME := 5.0;                                               00290000
   INTEGER STAT = Q-1;                                                  00300000
   LOGICAL FORWARD' := FALSE;                                           00310000
   LOGICAL SUCCESSFUL := FALSE;                                         00320000
   DOUBLE CAPABILITY;                                                   00330000
   INTEGER CAP1 = CAPABILITY;                                           00340000
   BYTE ARRAY LOGON(0:23);                                              00350000
   BYTE ARRAY ACCTNAME(*) = LOGON(8);                                   00360000
   BYTE ARRAY USERNAME(*) = LOGON;                                      00370000
   BYTE ARRAY GROUPNAME(*) = LOGON(16);                                 00380000
   DOUBLE DISCADR;                                                      00390000
   DOUBLE DEVFILEADR;                                                   00400000
   INTEGER LENGTH;                                                      00410000
   INTEGER DISCADR1 = DISCADR, DISCADR2 = DISCADR+1;                    00420000
   INTEGER ARRAY INFO(0:255);                                           00430000
   INTEGER ARRAY NEWINFO(0:383);                                        00440000
   ARRAY CTAB0(0:127);                                                  00450000
   INTEGER ARRAY DEVREC0(0:255);                                        00460000
   ARRAY OLDTABLE(0:6143);                                              00470000
   ARRAY NEWTABLE(0:7167);                                              00480000
   ARRAY DVRTAB(*) = NEWTABLE;                                          00490000
   ARRAY LDT(*) = NEWTABLE;                                             00500000
   ARRAY LDTX(*) = NEWTABLE;                                            00510000
   ARRAY LPDT(*) = NEWTABLE;                                            00520000
   ARRAY CLASS(*) = NEWTABLE;                                           00530000
   ARRAY RIN(*) = NEWTABLE;                                             00540000
   INTEGER ARRAY RIN'(*) = DB+0;                                        00550000
   INTEGER POINTER                                                      00560000
      POLDTABLE,                                                        00570000
      PCLASS;                                                           00580000
   BYTE POINTER                                                         00590000
      BPOLDTABLE;                                                       00600000
   INTEGER NROFCLASSENTS;                                               00610000
   INTEGER ERROR;                                                       00620000
   INTEGER HIGHESTLDEV;                                                 00630000
   INTEGER HIGHESTDRT;                                                  00640000
   INTEGER NRCSDVR; << NR. OF CS ADD'L DRIVERS >>                       00650000
   INTEGER CNT;                                                         00660000
   INTEGER INDEX, INDEX2, DVR'INDEX;                                    00670000
   INTEGER LDT'INDEX;                                                   00680000
   BYTE ARRAY CONFFILE(0:27) := "CONFDATA.PUB.SYS ";                    00690000
   BYTE ARRAY DEVFILE(0:27) := "DEVDATA.PUB.SYS ";                      00700000
   BYTE ARRAY ASSOCFILE(0:27) := "ASOCIATE.PUB.SYS ";          <<A8781>>00710000
   ARRAY LINE(0:35);                                                    00720000
   BYTE ARRAY BLINE(*) = LINE;                                          00730000
   INTEGER CONFFNUM;                                                    00740000
   INTEGER DEVFNUM;                                                     00750000
   INTEGER                                                              00760000
      NRRINS,                                                           00770000
      DSEGNR;                                                           00780000
   INTEGER ARRAY                                               <<V8273>>00790000
      ADDRESS(0:128) := 129(0);                                <<V8273>>00800000
   DOUBLE                                                      <<V8273>>00810000
      BANK0NEEDED := 0D,                                       <<V8273>>00820000
      AMTMEMNEEDED := 0D;                                      <<V8273>>00830000
   INTEGER                                                     <<V8273>>00840000
      BANK0,                                                   <<V8273>>00850000
      NUM'BANKS;                                               <<V8273>>00860000
                                                                        00870000
   EQUATE                                                               00880000
      CCG   = 0,                                                        00890000
      CCL   = 1,                                                        00900000
      CCE   = 2;                                                        00910000
   DEFINE                                                               00920000
      CC    = STAT.(6:2)#;                                              00930000
   EQUATE                                                               00940000
      XX = 0; <<*********** MISSING MSG ************>>                  00950000
   EQUATE                                                               00960000
      INFODVR        =  0,                                              00970000
      INFOCTAB0      =  1,                                              00980000
      INFOCTAB       =  2,                                              00990000
      INFOCSDVR      =  3,                                              01000000
      INFOCSDEF      =  4,                                              01010000
      INFOCSTAB      =  5,                                              01020000
      INFOLPDT       =  6,                                              01030000
      INFOLDT        =  7,                                              01040000
      INFOCLASS      =  8,                                              01050000
      INFOVTAB       =  9,                                              01060000
      INFOLDTX       = 10,                                              01070000
      INFOSTACK      = 11,                                              01080000
      INFODCTH       = 12,                                              01090000
      INFOTTDT       = 13,                                              01100000
      INFORIN        = 15; << THIS ISN'T AN ENTRY # >>                  01110000
   EQUATE                                                               01120000
      DEVDVR         =  0,                                              01130000
      DEVLPDT        =  1,                                              01140000
      DEVLDT         =  2,                                              01150000
      DEVLDTX        =  3,                                              01160000
      DEVDCTH        =  4,                                              01170000
      DEVCLASS       =  5,                                              01180000
      DEVTTDT        =  6,                                              01190000
      DEVCSDVR       =  7,                                              01200000
      DEVCSDEF       =  8,                                              01210000
      DEVCSTAB       =  9;                                              01220000
   EQUATE                                                               01230000
      CTAB0DCTSIZE   =   20,                                            01240000
      CTAB0ID0       =   40,                                            01250000
      CTAB0ID1       =   41;                                            01260000
   EQUATE                                                               01270000
      DVRTSIZE       = 1536,                                            01280000
      LPDTTSIZE      =  512,                                            01290000
      LDTTSIZE       = 1280,                                            01300000
      LDTXTSIZE      = 1280,                                            01310000
      DVCLTSIZE      = 1536,                                            01320000
      DCTHSIZE       =    6,                                            01330000
      TTDTTSIZE      = 1536,                                            01340000
      CSDVRTSIZE     =  128,                                            01350000
      CSTABTSIZE     = 2048,                                            01360000
      CSDEFTSIZE     =  256;                                            01370000
   EQUATE                                                               01380000
      DVRSECT        =   12,                                            01390000
      LPDTSECT       =    4,                                            01400000
      LDTSECT        =   10,                                            01410000
      LDTXSECT       =   10,                                            01420000
      DVCLSECT       =   12,                                            01430000
      DCTHSECT       =    1,                                            01440000
      TTDTSECT       =   12,                                            01450000
      CSTABSECT      =   16,                                            01460000
      CSDEFSECT      =    2;                                            01470000
   EQUATE                                                               01480000
      NRTABLES   = 16;                                                  01490000
   EQUATE                                                               01500000
      DVRTABNR    = 0,                                                  01510000
      LPDTNR      = 1,                                                  01520000
      LDTNR       = 2,                                                  01530000
      LDTXNR      = 3,                                                  01540000
      DCTHNR      = 4,                                                  01550000
      CLASSNR     = 5,                                                  01560000
      TTDTNR      = 6,                                                  01570000
      CSNR        = 7,                                                  01580000
      CSDEFNR     = 8,                                                  01590000
      CSDVRNR     = 9,                                                  01600000
      CLINFONR    = 10,                                                 01610000
      RINNR       = 11;                                                 01620000
   EQUATE                                                               01630000
      IO'CONVERTED   =  0,                                              01640000
      CL'CONVERTED   =  1,                                              01650000
      RIN'CONVERTED  =  2,                                              01660000
      COMM'CONVERTED =  3;                                              01670000
   EQUATE                                                               01680000
      ATTIOERR       =  0,                                              01690000
      GETDISCERR     =  1,                                              01700000
      GETDSEGERR     =  2,                                              01710000
      BADLINKERR     =  3;                                              01720000
   DEFINE                                                               01730000
      TTDT'CONVERTED   = CTAB0(40).(2:1)#;                              01740000
   DEFINE                                                               01750000
      DEVCHECKSUM      = DEVREC0#,                                      01760000
      DEVVERSION       = DEVREC0(1)#,                                   01770000
      DEVNEXT          = DEVREC0(2)#,                                   01780000
      DEVHIGHESTLDEV   = DEVREC0(3)#,                                   01790000
      DEVHIGHESTDRT    = DEVREC0(4)#,                                   01800000
      DEVNRCSDVR       = DEVREC0(5)#;                                   01810000
   DOUBLE ARRAY                                                         01820000
      OLDDISCADR(0:NRTABLES-1);                                         01830000
   INTEGER ARRAY                                                        01840000
      OLDTABLEN(0:NRTABLES-1);                                          01850000
   DOUBLE ARRAY                                                         01860000
      NEWDISCADR(0:NRTABLES-1);                                         01870000
   INTEGER ARRAY                                                        01880000
      NEWTABLEN(0:NRTABLES-1);                                          01890000
                                                                        01900000
   INTEGER                                                              01910000
      X = X,                                                            01920000
      QM4 = Q-4,                                                        01930000
      S0 = S-0;                                                         01940000
   BYTE POINTER                                                         01950000
      BPS0 = S-0;                                                       01960000
$INCLUDE INCLDVR                                                        01970000
$INCLUDE INCLLDT5                                                       01980000
$PAGE "  V E R I F Y I N G  -  -  -  DEFINES"                           01990000
<<  DEFINE/EQUATE INCLUDE FILE >>                                       02000000
                                                                        02010000
    DEFINE                                                              02020000
                                                                        02030000
      VERIFY'EQUATES =                                                  02040000
        << EQUATES >>                                                   02050000
        EQUATE                                                          02060000
          NUM'DRIVERS = 20,                                             02070000
          NEED'FREE'DISC = 20,                                          02080000
           CST         =  0,                                            02090000
          PCB         = CST+1                                           02100000
      #,                                                                02110000
      MPEV = SYSTEM'TYPE=0 OR SYSTEM'TYPE=1#,                           02120000
      MPEIV= SYSTEM'TYPE = 2#;                                          02130000
                                                                        02140000
$PAGE "  "                                                              02150000
                                                                        02160000
DOUBLE PROCEDURE ATTACHIO(LDEV,QMISC,DSTX,BUF,FUNC,COUNT,P1,P2,FLAGS);  02170000
   VALUE LDEV,QMISC,DSTX,BUF,FUNC,COUNT,P1,P2,FLAGS;                    02180000
   INTEGER LDEV,QMISC,DSTX,BUF,FUNC,COUNT,P1,P2,FLAGS;                  02190000
   OPTION EXTERNAL;                                                     02200000
                                                                        02210000
INTEGER PROCEDURE GET'DISC'SPACE( LDEV, NUM'SECTORS, DISCADR);          02220000
   VALUE LDEV, NUM'SECTORS;                                             02230000
   INTEGER LDEV;                                                        02240000
   DOUBLE NUM'SECTORS, DISCADR;                                         02250000
   OPTION EXTERNAL;                                                     02260000
                                                                        02270000
PROCEDURE RETURN'DISC'SPACE( LDEV, DISCADR, NUM'SECTORS);               02280000
   VALUE LDEV, DISCADR, NUM'SECTORS;                                    02290000
   INTEGER LDEV;                                                        02300000
   DOUBLE DISCADR, NUM'SECTORS;                                         02310000
   OPTION EXTERNAL;                                                     02320000
                                                                        02330000
INTEGER PROCEDURE GETDATASEGC( MEMSIZE, VDSIZE);                        02340000
   VALUE MEMSIZE, VDSIZE;                                               02350000
   INTEGER MEMSIZE, VDSIZE;                                             02360000
   OPTION EXTERNAL;                                                     02370000
                                                                        02380000
PROCEDURE RELDATASEG( DSEGNR );                                         02390000
   VALUE DSEGNR;                                                        02400000
   INTEGER DSEGNR;                                                      02410000
   OPTION EXTERNAL;                                                     02420000
                                                                        02430000
INTEGER PROCEDURE EXCHANGEDB( DATASEGNR);                               02440000
   VALUE DATASEGNR;                                                     02450000
   INTEGER DATASEGNR;                                                   02460000
   OPTION EXTERNAL;                                                     02470000
                                                                        02480000
INTRINSIC FOPEN, FREAD, FREADDIR, FWRITE, FWRITEDIR, QUIT, DEBUG,       02490000
          READX, FPOINT, FGETINFO, FCLOSE, PRINT, ASCII, WHO,           02500000
          PAUSE, PRINTFILEINFO, GETDSEG, COMMAND, DASCII,      <<V8273>>02510000
          FCONTROL,FCHECK,TERMINATE;                           <<A8781>>02520000
                                                                        02530000
PROCEDURE CLEARLINE;                                                    02540000
BEGIN << CLEARS THE LIST BUFFER >>                                      02550000
   LINE := "  ";                                                        02560000
   MOVE LINE(1) := LINE,(35);                                           02570000
END;                                                                    02580000
PROCEDURE PRINTLINE(CARR'CONTROL);                                      02590000
VALUE CARR'CONTROL;                                                     02600000
INTEGER CARR'CONTROL;                                                   02610000
OPTION VARIABLE;                                                        02620000
BEGIN << PRINTS THE LIST BUFFER >>                                      02630000
INTEGER QM4=Q-4;                                                        02640000
                                                                        02650000
IF QM4=0 THEN                                                           02660000
  CARR'CONTROL:=0;                                                      02670000
   TOS := @LINE;                                                        02680000
   TOS := @BLINE(71);  << POINTER TO LAST CHAR >>                       02690000
   IF BPS0 = " " THEN                                                   02700000
      BEGIN                                                             02710000
      ASSEMBLE( DUP, DECB);                                             02720000
      TOS := -71;                                                       02730000
      ASSEMBLE( CMPB 2 );                                               02740000
      END;                                                              02750000
   TOS := -(TOS-@BLINE+1); << NEG. NR. CHAR'S >>                        02760000
   PRINT( *, *, CARR'CONTROL);                                          02770000
   CLEARLINE;                                                           02780000
END;                                                                    02790000
PROCEDURE MESSAGE( TABLENR, STEPNR, ERRORNR);                           02800000
   VALUE TABLENR, STEPNR, ERRORNR;                                      02810000
   INTEGER TABLENR, STEPNR, ERRORNR;                                    02820000
BEGIN                                                                   02830000
   MOVE BLINE := "ERROR CONVERTING ",2;                                 02840000
   CASE TABLENR OF                                                      02850000
      BEGIN                                                             02860000
      MOVE * := "DRIVER TABLE ",2;                                      02870000
      MOVE * := "LPDT ",2;                                              02880000
      MOVE * := "LDT ",2;                                               02890000
      MOVE * := "LDTX ",2;                                              02900000
      MOVE * := "CLASS TABLE HEADER ",2;                                02910000
      MOVE * := "CLASS TABLE ",2;                                       02920000
      MOVE * := "TTDT TABLE",2;                                         02930000
      MOVE * := "CS TABLE",2;                                           02940000
      MOVE * := "CS DEF TABLE",2;                                       02950000
      MOVE * := "CS DRIVER TABLE",2;                                    02960000
      MOVE * := "COLD LOAD INFO TABLE ",2;                              02970000
      MOVE * := "RIN TABLE ",2;                                         02980000
      END;                                                              02990000
   CASE STEPNR OF                                                       03000000
      BEGIN                                                             03010000
      MOVE * := ", ATTACHIO",2;                                         03020000
      MOVE * := ", GET'DISC'SPACE",2;                                   03030000
      MOVE * := ", GETDSEG",2;                                          03040000
      MOVE * := ", BAD LINK",2;                                         03050000
      END;                                                              03060000
   IF ERRORNR <> -1 THEN                                                03070000
      BEGIN                                                             03080000
      MOVE * := ", ERROR NUMBER ",2;                                    03090000
      ASCII( ERRORNR, 10, BPS0);                                        03100000
      END;                                                              03110000
   PRINTLINE;                                                           03120000
END;  << MESSAGE >>                                                     03130000
PROCEDURE VERIFY'INTENT;                                                03140000
BEGIN                                                                   03150000
   IF FORWARD' THEN                                                     03160000
      BEGIN                                                             03170000
      MOVE BLINE :=                                            <<*8066>>03180000
         "Converting from PRE-MPEV/E(G.00.00) to MPEV/E";      <<*8066>>03190000
      PRINTLINE;                                                        03200000
      END                                                               03210000
   ELSE                                                                 03220000
      BEGIN                                                             03230000
      MOVE BLINE :=                                            <<*8066>>03240000
         "Converting from MPEV/E(G.00.00) to PRE-MPEV/E";      <<*8066>>03250000
      PRINTLINE;                                                        03260000
      END;                                                              03270000
                                                                        03280000
   IF PARM <> -1 THEN                                                   03290000
      BEGIN                                                             03300000
      MOVE BLINE := "You want to convert ONLY - ",2;                    03310000
      IF PARM.(15:1) THEN MOVE * := "I/O,",2;                           03320000
      IF PARM.(13:1) THEN MOVE * := "RIN,",2;                           03330000
      IF PARM.(14:1) THEN MOVE * := "COLD LOAD INFO,",2;                03340000
      IF PARM.(12:1) THEN MOVE * := "COMMUNICATION TABLE,",2;           03350000
      IF PARM.(11:1) THEN MOVE * := "DEL SYSTEM FILES,",2;              03360000
      TOS := TOS-1;                                                     03370000
      MOVE * := " ";                                                    03380000
      PRINTLINE;                                                        03390000
      END;                                                              03400000
                                                                        03410000
   DO BEGIN                                                             03420000
      MOVE BLINE := "OK TO PROCEED (Y/N)? ";                            03430000
      PRINT( LINE, -21, %320);                                          03440000
      CLEARLINE;                                                        03450000
      READX( LINE, -72);                                                03460000
      IF <> THEN BLINE := "N";                                          03470000
      MOVE BLINE := BLINE WHILE AS;                                     03480000
      END                                                               03490000
   UNTIL BLINE = "N" OR BLINE = "Y";                                    03500000
   IF BLINE = "N" THEN BEGIN                                            03510000
     TERMINATE;                                                         03520000
     END;                                                               03530000
   CLEARLINE;                                                           03540000
                                                                        03550000
END;                                                                    03560000
PROCEDURE IOERRCHECK( B, A);                                            03570000
   VALUE B, A;                                                          03580000
   INTEGER B, A;                                                        03590000
BEGIN                                                                   03600000
   CC := CCE;                                                           03610000
   TOS := B.(8:8);                                                      03620000
   IF S0 <> 1 THEN                                                      03630000
      BEGIN  << I/O ERROR >>                                            03640000
      CC := CCL;                                                        03650000
      ERROR := TOS;                                                     03660000
      MESSAGE( TABLENR, ATTIOERR, ERROR);                               03670000
      END;                                                              03680000
END;                                                                    03690000
$PAGE "CHECK'ACCESS"                                                    03700000
PROCEDURE CHECK'ACCESS;                                                 03710000
BEGIN                                                                   03720000
<<   CHECK FOR PROPER PROGRAM ACCESS   >>                               03730000
WHO( , CAPABILITY, , USERNAME, GROUPNAME, ACCTNAME);                    03740000
IF CAP1.(0:1) = 0 THEN                                                  03750000
   BEGIN                                                                03760000
   MOVE BLINE := "THIS PROGRAM REQUIRES SM CAPABILITY";                 03770000
   PRINTLINE;                                                           03780000
   TERMINATE;                                                           03790000
   END;                                                                 03800000
IF LOGON <> "MANAGER SYS     PUB " THEN                                 03810000
   BEGIN                                                                03820000
   MOVE BLINE := "LOGON MUST BE  -  MANAGER.SYS,PUB";                   03830000
   PRINTLINE;                                                           03840000
   TERMINATE;                                                           03850000
   END;                                                                 03860000
END; <<CHECK'ACCESS>>                                                   03870000
PROCEDURE DISC( LDEV, FUNC, BUFFER, DISCADR, COUNT);                    03880000
   VALUE LDEV, FUNC, DISCADR, COUNT;                                    03890000
   INTEGER LDEV, FUNC, COUNT;                                           03900000
   ARRAY BUFFER;                                                        03910000
   DOUBLE DISCADR;                                                      03920000
   OPTION PRIVILEGED;                                                   03930000
BEGIN                                                                   03940000
   INTEGER                                                              03950000
      DISCADR1 = DISCADR,                                               03960000
      DISCADR2 = DISCADR+1;                                             03970000
                                                                        03980000
   TOS := ATTACHIO( LDEV, 0, 0, @BUFFER, FUNC, COUNT,                   03990000
      DISCADR1, DISCADR2, 1);                                           04000000
   IOERRCHECK(*,*);                                                     04010000
   IF <> THEN CC := CCL ELSE CC := CCE;                                 04020000
END;                                                                    04030000
PROCEDURE MFDS( BUFFER, DST, OFFSET, COUNT);                            04040000
   VALUE DST, OFFSET, COUNT;                                            04050000
   ARRAY BUFFER;                                                        04060000
   INTEGER DST, OFFSET, COUNT;                                          04070000
BEGIN                                                                   04080000
   TOS := @BUFFER;                                                      04090000
   TOS := DST;                                                          04100000
   TOS := OFFSET;                                                       04110000
   TOS := COUNT;                                                        04120000
   ASSEMBLE( MFDS );                                                    04130000
END;                                                                    04140000
PROCEDURE MTDS( DST, OFFSET, BUFFER, COUNT);                            04150000
   VALUE DST, OFFSET, COUNT;                                            04160000
   ARRAY BUFFER;                                                        04170000
   INTEGER DST, OFFSET, COUNT;                                          04180000
BEGIN                                                                   04190000
   TOS := DST;                                                          04200000
   TOS := OFFSET;                                                       04210000
   TOS := @BUFFER;                                                      04220000
   TOS := COUNT;                                                        04230000
   ASSEMBLE( MTDS );                                                    04240000
END;                                                                    04250000
PROCEDURE MDS( TARGETDST, TARGETOFFSET, SOURCEDST, SOURCEOFFSET, COUNT);04260000
   VALUE TARGETDST, TARGETOFFSET, SOURCEDST, SOURCEOFFSET, COUNT;       04270000
   INTEGER TARGETDST, TARGETOFFSET, SOURCEDST, SOURCEOFFSET, COUNT;     04280000
BEGIN                                                                   04290000
   TOS := TARGETDST;                                                    04300000
   TOS := TARGETOFFSET;                                                 04310000
   TOS := SOURCEDST;                                                    04320000
   TOS := SOURCEOFFSET;                                                 04330000
   TOS := COUNT;                                                        04340000
   ASSEMBLE( MDS );                                                     04350000
END;                                                                    04360000
PROCEDURE SETBIT( TABLE, BIT);                                 <<V8273>>04370000
   VALUE BIT;                                                  <<V8273>>04380000
   ARRAY TABLE;                                                <<V8273>>04390000
   INTEGER BIT;                                                <<V8273>>04400000
BEGIN                                                          <<V8273>>04410000
   INTEGER                                                     <<V8273>>04420000
      INX     = Q+1,                                           <<V8273>>04430000
      BITPOS  = Q+2;                                           <<V8273>>04440000
                                                               <<V8273>>04450000
   TOS := BIT;                                                 <<V8273>>04460000
   TOS := 16;                                                  <<V8273>>04470000
   ASSEMBLE( DIV, STBX );                                      <<V8273>>04480000
                                                               <<V8273>>04490000
   TOS := TABLE( X );                                          <<V8273>>04500000
   X := BITPOS;                                                <<V8273>>04510000
   ASSEMBLE( TSBC 0,X );                                       <<V8273>>04520000
   TABLE( INX ) := TOS;                                        <<V8273>>04530000
END;                                                           <<V8273>>04540000
PROCEDURE RESETBIT( TABLE, BIT);                               <<V8273>>04550000
   VALUE BIT;                                                  <<V8273>>04560000
   ARRAY TABLE;                                                <<V8273>>04570000
   INTEGER BIT;                                                <<V8273>>04580000
BEGIN                                                          <<V8273>>04590000
   INTEGER                                                     <<V8273>>04600000
      INX     = Q+1,                                           <<V8273>>04610000
      BITPOS  = Q+2;                                           <<V8273>>04620000
                                                               <<V8273>>04630000
   TOS := BIT;                                                 <<V8273>>04640000
   TOS := 16;                                                  <<V8273>>04650000
   ASSEMBLE( DIV, STBX );                                      <<V8273>>04660000
                                                               <<V8273>>04670000
   TOS := TABLE( X );                                          <<V8273>>04680000
   X := BITPOS;                                                <<V8273>>04690000
   ASSEMBLE( TRBC 0,X );                                       <<V8273>>04700000
   TABLE( INX ) := TOS;                                        <<V8273>>04710000
END;                                                           <<V8273>>04720000
LOGICAL PROCEDURE TESTBIT( TABLE, BIT);                        <<V8273>>04730000
   VALUE BIT;                                                  <<V8273>>04740000
   ARRAY TABLE;                                                <<V8273>>04750000
   INTEGER BIT;                                                <<V8273>>04760000
BEGIN                                                          <<V8273>>04770000
   INTEGER                                                     <<V8273>>04780000
      INX    = Q+1,                                            <<V8273>>04790000
      BITPOS = Q+2;                                            <<V8273>>04800000
                                                               <<V8273>>04810000
   TOS := BIT;                                                 <<V8273>>04820000
   TOS := 16;                                                  <<V8273>>04830000
   ASSEMBLE( DIV, STBX );                                      <<V8273>>04840000
                                                               <<V8273>>04850000
   TOS := TABLE( X );                                          <<V8273>>04860000
   X := BITPOS;                                                <<V8273>>04870000
   ASSEMBLE( TSBC 0,X );                                       <<V8273>>04880000
   IF <> THEN TESTBIT := TRUE;                                 <<V8273>>04890000
END;                                                           <<V8273>>04900000
INTEGER PROCEDURE TYPE( LDEV);                                          04910000
   VALUE LDEV;                                                          04920000
   INTEGER LDEV;                                                        04930000
BEGIN                                                                   04940000
   INTEGER WORD;                                                        04950000
                                                                        04960000
   IF CTAB0(41).(IO'CONVERTED:1) THEN                                   04970000
      MFDS( WORD, %16, LDEV*7+2, 1)                                     04980000
   ELSE                                                                 04990000
      MFDS( WORD, %16, LDEV*5+2, 1);                                    05000000
   TYPE := WORD.(10:6);                                                 05010000
END;                                                                    05020000
INTEGER PROCEDURE SUBTYPE( LDEV);                                       05030000
   VALUE LDEV;                                                          05040000
   INTEGER LDEV;                                                        05050000
BEGIN                                                                   05060000
   INTEGER WORD;                                                        05070000
                                                                        05080000
   IF CTAB0(41).(IO'CONVERTED:1) THEN                                   05090000
      MFDS( WORD, 13, LDEV*4+1, 1)                                      05100000
   ELSE                                                                 05110000
      MFDS( WORD, 13, LDEV*2+1, 1);                                     05120000
   SUBTYPE := WORD.(12:4);                                              05130000
END;                                                                    05140000
INTEGER PROCEDURE LDEVTOVTAB( LDEV );                          <<V8616>>05150000
   VALUE LDEV;                                                 <<V8616>>05160000
   INTEGER LDEV;                                               <<V8616>>05170000
BEGIN                                                          <<V8616>>05180000
   INTEGER VOL = LDEVTOVTAB;                                   <<V8616>>05190000
                                                               <<V8616>>05200000
   IF SYSTEM'TYPE = 2 THEN                                     <<V8616>>05210000
      BEGIN  << MPE V >>                                       <<V8616>>05220000
      MFDS( VOL, 14, LDEV*7+1, 1);                             <<V8616>>05230000
      END                                                      <<V8616>>05240000
   ELSE                                                        <<V8616>>05250000
      BEGIN  << MPE IV >>                                      <<V8616>>05260000
      MFDS( VOL, 14, LDEV*5+1, 1);                             <<V8616>>05270000
      VOL := VOL.(0:8);                                        <<V8616>>05280000
      END;                                                     <<V8616>>05290000
END;                                                           <<V8616>>05300000
INTEGER PROCEDURE CHECKSUM(TARGET,TARGETLEN,OLDCHECKSUM);               05310000
   VALUE TARGETLEN, OLDCHECKSUM;                                        05320000
   ARRAY TARGET;                                                        05330000
   INTEGER TARGETLEN;                                                   05340000
   LOGICAL OLDCHECKSUM;                                                 05350000
COMMENT:                                                                05360000
   USING THE VALUE OF OLDCHECKSUM AS A BASE, THE CHECKSUM               05370000
   OF THE TARGET ARRAY IS CALCULATED AND RETURNED AS THE                05380000
   VALUE OF THE PROCEDURE.                                              05390000
END OF COMMENT;                                                         05400000
                                                                        05410000
BEGIN                                                                   05420000
   INTEGER I;                                                           05430000
   I := 0;                                                              05440000
   DO                                                                   05450000
      OLDCHECKSUM:=OLDCHECKSUM+TARGET(I)                                05460000
   UNTIL (I:=I+1) = TARGETLEN;                                          05470000
   CHECKSUM := OLDCHECKSUM;                                             05480000
END;  <<CHECKSUM>>                                                      05490000
PROCEDURE ZEROBUF( BUF, LENGTH);                                        05500000
   VALUE LENGTH;                                                        05510000
   ARRAY BUF;                                                           05520000
   INTEGER LENGTH;                                                      05530000
BEGIN                                                                   05540000
   BUF := 0;                                                            05550000
   MOVE BUF(1) := BUF,(LENGTH-1);                                       05560000
END;                                                                    05570000
PROCEDURE FERROR( FILENUM, FILENAME);                                   05580000
   VALUE FILENUM;                                                       05590000
   INTEGER FILENUM;                                                     05600000
   BYTE ARRAY FILENAME;                                                 05610000
BEGIN                                                                   05620000
   INTEGER LEN;                                                         05630000
                                                                        05640000
   SCAN FILENAME UNTIL [8/13,8/%40],1;                                  05650000
   LEN := TOS - @FILENAME;                                              05660000
   MOVE BLINE := "**** FILE ERROR ON ",2;                               05670000
   MOVE * := FILENAME,(LEN);                                            05680000
   PRINTLINE;                                                           05690000
   PRINTFILEINFO( FILENUM);                                             05700000
END;                                                                    05710000
PROCEDURE GET'TABLE'DISCADR( TABLENR, DISCADR, LENGTH);                 05720000
   VALUE TABLENR;                                                       05730000
   INTEGER TABLENR, LENGTH;                                             05740000
   DOUBLE DISCADR;                                                      05750000
BEGIN                                                                   05760000
                                                                        05770000
   IF LOGICAL(CTAB0(41).(CL'CONVERTED:1)) THEN                          05780000
      BEGIN   << COLD LOAD INFO TABLE CONVERTED >>                      05790000
      LENGTH := INFO( INFO + TABLENR*5);                                05800000
      TOS := INFO( X:=X+3);                                             05810000
      TOS := INFO( X:=X+1);                                             05820000
      DISCADR := TOS;                                                   05830000
      END                                                               05840000
   ELSE                                                                 05850000
      BEGIN   << COLD LOAD INFO IN OLD FORMAT >>                        05860000
      LENGTH := INFO( INFO + TABLENR*4);                                05870000
      TOS := INFO( X:=X+2);                                             05880000
      TOS := INFO( X:=X+1);                                             05890000
      DISCADR := TOS;                                                   05900000
      END;                                                              05910000
END;                                                                    05920000
PROCEDURE STORE'TABLE'DISCADR( TABLENR, DISCADR, LENGTH);               05930000
   VALUE TABLENR, DISCADR, LENGTH;                                      05940000
   INTEGER TABLENR, LENGTH;                                             05950000
   DOUBLE DISCADR;                                                      05960000
BEGIN                                                                   05970000
                                                                        05980000
   IF LOGICAL(CTAB0(41).(CL'CONVERTED:1)) THEN                          05990000
      BEGIN   << COLD LOAD INFO TABLE CONVERTED >>                      06000000
      INFO( INFO + TABLENR*5) := LENGTH;                                06010000
      TOS := DISCADR;                                                   06020000
      INFO( X:=X+4) := TOS;                                             06030000
      INFO( X:=X-1) := TOS;                                             06040000
      END                                                               06050000
   ELSE                                                                 06060000
      BEGIN   << COLD LOAD INFO TABLE IN OLD FORMAT >>                  06070000
      INFO( INFO + TABLENR*4) := LENGTH;                                06080000
      TOS := DISCADR;                                                   06090000
      INFO( X:=X+3) := TOS;                                             06100000
      INFO( X:=X-1) := TOS;                                             06110000
      END;                                                              06120000
END;                                                                    06130000
PROCEDURE INIT'DEVDATA;                                                 06140000
BEGIN                                                                   06150000
   INTEGER ARRAY FLAB(0:127);                                           06160000
   BYTE ARRAY DEVICE(0:7);                                              06170000
   DOUBLE FILEADR;                                                      06180000
   BYTE FILELDEV = FILEADR;                                             06190000
   DEFINE DISPTODATA = FLAB(%47).(0:8)#;                                06200000
   DEFINE FILEERROR =                                                   06210000
      BEGIN                                                             06220000
      FERROR( DEVFNUM, DEVFILE);                                        06230000
      GO FAILURE;                                                       06240000
      END#;                                                             06250000
                                                                        06260000
   MOVE DEVICE := "1 ";                                                 06270000
   ZEROBUF( DEVREC0, 128);                                              06280000
                                                                        06290000
   <<   CHECK IF DEVDATA FILE ALREADY EXISTS,      >>                   06300000
   <<   IF IT DOES, ASK FOR VERIFICATION BEFORE    >>                   06310000
   <<   PURGING                                    >>                   06320000
                                                                        06330000
   DEVFNUM := FOPEN( DEVFILE, 3);                                       06340000
   IF = THEN                                                            06350000
      BEGIN  << TROUBLE!!! - FILE ALREADY EXISTS >>                     06360000
      DO BEGIN                                                          06370000
         MOVE LINE := "OK TO PURGE FILE DEVDATA.PUB.SYS (Y/N)? ";       06380000
         PRINT( LINE, -40, %320);                                       06390000
         CLEARLINE;                                                     06400000
         READX( LINE, -72);                                             06410000
         IF <> THEN FILEERROR;                                          06420000
         MOVE BLINE := BLINE WHILE AS;                                  06430000
         END                                                            06440000
      UNTIL BLINE="N" OR BLINE="Y";                                     06450000
      IF BLINE = "N" THEN GO FAILURE;                                   06460000
      CLEARLINE;                                                        06470000
      FCLOSE( DEVFNUM, 4, 0);                                           06480000
      IF <> THEN FILEERROR;                                             06490000
      END;                                                              06500000
   DEVFNUM := FOPEN( DEVFILE, 0, %24,,DEVICE,,,,,350D,1);               06510000
   IF <> THEN FILEERROR;                                                06520000
   FWRITEDIR( DEVFNUM, DEVREC0, 128, 349D); <<SET EOF>>                 06530000
   IF <> THEN FILEERROR;                                                06540000
   FCLOSE( DEVFNUM, 1, 0);                                              06550000
   IF <> THEN FILEERROR;                                                06560000
   DEVFNUM := FOPEN( DEVFILE, 1, %24);                                  06570000
   IF <> THEN FILEERROR;                                                06580000
   FGETINFO( DEVFNUM,,,,,,,,,,,,,,,,,,,FILEADR);                        06590000
   IF FILELDEV <> 1 THEN FILEERROR;                                     06600000
   FILELDEV := 0;                                                       06610000
   DISC( SYSDISC, READ, FLAB, FILEADR, 128);                            06620000
   IF <> THEN GO FAILURE;                                               06630000
   DEVFILEADR := FILEADR+DOUBLE(DISPTODATA);                            06640000
                                                                        06650000
   DEVVERSION := 1;                                                     06660000
   DEVNEXT := 2;                                                        06670000
   DEVHIGHESTLDEV := HIGHESTLDEV;                                       06680000
   DEVHIGHESTDRT := HIGHESTDRT;                                         06690000
   DEVNRCSDVR := NRCSDVR;                                               06700000
   FWRITEDIR( DEVFNUM, DEVREC0, 256, 0D);                               06710000
   IF <> THEN FILEERROR;                                                06720000
                                                                        06730000
   CC := CCE;                                                           06740000
   RETURN;                                                              06750000
                                                                        06760000
FAILURE:                                                                06770000
   CC := CCL;                                                           06780000
END;                                                                    06790000
PROCEDURE WRITEDEVFILE( TABLENR, BUF, LENGTH);                          06800000
   VALUE TABLENR, LENGTH;                                               06810000
   INTEGER TABLENR, LENGTH;                                             06820000
   INTEGER ARRAY BUF;                                                   06830000
BEGIN                                                                   06840000
   INTEGER INX;                                                         06850000
                                                                        06860000
   INX := 64 + TABLENR*2;                                               06870000
   DEVREC0(INX) := DEVNEXT;                                             06880000
   DEVREC0(INX+1) := LENGTH;                                            06890000
   FWRITEDIR( DEVFNUM, BUF, LENGTH, DOUBLE(DEVNEXT));                   06900000
   IF <> THEN                                                           06910000
      BEGIN                                                             06920000
      FERROR( DEVFNUM, DEVFILE);                                        06930000
      GO FAILURE;                                                       06940000
      END;                                                              06950000
   DEVNEXT := DEVNEXT + (LENGTH+127)/128;                               06960000
   FWRITEDIR( DEVFNUM, DEVREC0, 128, 0D);                               06970000
   IF <> THEN                                                           06980000
      BEGIN                                                             06990000
      FERROR( DEVFNUM, DEVFILE);                                        07000000
      GO FAILURE;                                                       07010000
      END;                                                              07020000
                                                                        07030000
   CC := CCE;                                                           07040000
   RETURN;                                                              07050000
                                                                        07060000
FAILURE:                                                                07070000
   CC := CCL;                                                           07080000
END;                                                                    07090000
PROCEDURE READDEVFILE( TABLENR, BUF, LENGTH);                           07100000
   VALUE TABLENR;                                                       07110000
   INTEGER TABLENR, LENGTH;                                             07120000
   INTEGER ARRAY BUF;                                                   07130000
BEGIN                                                                   07140000
   INTEGER INX;                                                         07150000
                                                                        07160000
   INX := 64 + TABLENR*2;                                               07170000
   LENGTH := DEVREC0(INX+1);                                            07180000
   FREADDIR( DEVFNUM, BUF, LENGTH, DOUBLE(DEVREC0(INX)));               07190000
   IF <> THEN CC := CCL ELSE CC := CCE;                                 07200000
END;                                                                    07210000
PROCEDURE BUILD'DEVDATA;                                                07220000
BEGIN                                                                   07230000
   INTEGER ARRAY INFOTODEV(*) = PB :=                                   07240000
     << INFO TABLE NR    DEVDATA NR     NR SECT ALLOC >>                07250000
        INFODVR      ,   DEVDVR     ,   0          ,                    07260000
        INFOCSDVR    ,   DEVCSDVR   ,   0          ,                    07270000
        INFOCSDEF    ,   DEVCSDEF   ,   0          ,                    07280000
        INFOCSTAB    ,   DEVCSTAB   ,   CSTABSECT  ,                    07290000
        INFOLPDT     ,   DEVLPDT    ,   LPDTSECT   ,                    07300000
        INFOLDT      ,   DEVLDT     ,   LDTSECT    ,                    07310000
        INFOCLASS    ,   DEVCLASS   ,   DVCLSECT   ,                    07320000
        INFOLDTX     ,   DEVLDTX    ,   LDTXSECT   ,                    07330000
        INFODCTH     ,   DEVDCTH    ,   DCTHSECT   ,                    07340000
        INFOTTDT     ,   DEVTTDT    ,   TTDTSECT   ,                    07350000
        -1;  << TERMINATOR >>                                           07360000
   EQUATE SEED = %123456; << FOR STARTING CHECKSUM >>                   07370000
   INTEGER INX;                                                         07380000
   INTEGER I;                                                           07390000
   DEFINE FILEERROR =                                                   07400000
      BEGIN                                                             07410000
      FERROR( DEVFNUM, DEVFILE);                                        07420000
      GO FAILURE;                                                       07430000
      END#;                                                             07440000
                                                                        07450000
   I := 0;                                                              07460000
   WHILE INFOTODEV(I) <> -1 DO                                          07470000
      BEGIN                                                             07480000
      INX := 64 + INFOTODEV(I+1)*2;                                     07490000
      IF DEVREC0(INX) = 0 THEN                                          07500000
         BEGIN   << TABLE NOT WRITTERN YET - SO DOIT >>                 07510000
         GET'TABLE'DISCADR( INFOTODEV(I), DISCADR, LENGTH);             07520000
         OLDDISCADR( INFOTODEV(I)) := DISCADR;                          07530000
         OLDTABLEN( INFOTODEV(I)) := INFOTODEV(I+2);                    07540000
         DISC( SYSDISC, READ, NEWTABLE, DISCADR, LENGTH);               07550000
         IF <> THEN GO FAILURE;                                         07560000
         WRITEDEVFILE( INFOTODEV(I+1), NEWTABLE, LENGTH);               07570000
         IF <> THEN GO FAILURE;                                         07580000
         END;                                                           07590000
      STORE'TABLE'DISCADR( INFOTODEV(I),                                07600000
         DEVFILEADR+DOUBLE(DEVREC0(INX)), DEVREC0(INX+1));              07610000
      I := I+3;                                                         07620000
      END;                                                              07630000
                                                                        07640000
   DEVREC0 := CHECKSUM( DEVREC0(1), 127, SEED);                         07650000
   FWRITEDIR( DEVFNUM, DEVREC0, 128, 0D);                               07660000
   IF <> THEN FILEERROR;                                                07670000
                                                                        07680000
   CC := CCE;                                                           07690000
   RETURN;                                                              07700000
                                                                        07710000
FAILURE:                                                                07720000
   CC := CCL;                                                           07730000
END;                                                                    07740000
PROCEDURE FIXCLINFO;                                                    07750000
BEGIN                                                                   07760000
   EQUATE                                                               07770000
      CSTPTR      = 1, << POINTER TO CST INFO >>                        07780000
      NRENTS      = 2, << TOTAL CL INFO ENTRIES >>                      07790000
      NRCSTS      = 3; << NR. OF INITIAL SEGMENTS >>                    07800000
   INTEGER                                                              07810000
      ENTSIZE,    << COLD LOAD INFO ENTRY SIZE >>                       07820000
      LEN,                                                              07830000
      START,                                                            07840000
      LAST;                                                             07850000
                                                                        07860000
   TABLENR := CLINFONR;                                                 07870000
   IF NOT TTDT'CONVERTED THEN                                           07880000
      BEGIN                                                             07890000
      ERROR := GET'DISC'SPACE( SYSDISC, 1D, DISCADR);                   07900000
      IF ERROR <> 0 THEN                                                07910000
         BEGIN                                                          07920000
         MESSAGE( CLINFONR, GETDISCERR, ERROR);                         07930000
         GO FAILURE;                                                    07940000
         END;                                                           07950000
      << BUILD DEVICE CLASS TABLE HEADER >>                             07960000
      ZEROBUF( NEWTABLE, 20);                                           07970000
      NEWTABLE    := DCTHSIZE;  << TOTAL TABLE SIZE   >>                07980000
      NEWTABLE(1) := 1;         << ENTRY SIZE         >>                07990000
      NEWTABLE(2) := 0;         << # OF CLASS ENTRIES >>                08000000
      NEWTABLE(3) := DCTHSIZE;  << PTR TO CLASS TABLE >>                08010000
      NEWTABLE(4) := 0;         << # OF TTDT ENTRIES  >>                08020000
      NEWTABLE(5) := DCTHSIZE;  << PTR TO TTDT TABLE  >>                08030000
      DISC( SYSDISC, WRITE, NEWTABLE, DISCADR, DCTHSIZE);               08040000
      IF <> THEN GO FAILURE;                                            08050000
                                                                        08060000
      << INSERT DCTH AND TTDT ENTRIES IN CL INFO TAB >>                 08070000
      ENTSIZE := IF LOGICAL(CTAB0(41).(CL'CONVERTED:1)) THEN            08080000
         5 ELSE 4;                                                      08090000
      LEN := INFO(CSTPTR);                                              08100000
      LAST := INFO(CSTPTR) + INFO(NRCSTS) * ENTSIZE;                    08110000
      ZEROBUF( NEWINFO, 256);                                           08120000
      MOVE NEWINFO := INFO,(LEN);                                       08130000
      START := LEN + ENTSIZE * 2;                                       08140000
      NEWINFO(CSTPTR) := START;                                         08150000
      NEWINFO(NRENTS) := NEWINFO(NRENTS) + 2;                           08160000
      MOVE NEWINFO(START) := INFO(LEN),(LAST-LEN);                      08170000
      MOVE INFO := NEWINFO,(256);                                       08180000
      STORE'TABLE'DISCADR( INFODCTH, DISCADR, DCTHSIZE);                08190000
      END;                                                              08200000
                                                                        08210000
   CC := CCE;                                                           08220000
   RETURN;                                                              08230000
                                                                        08240000
FAILURE:                                                                08250000
   CC := CCL;                                                           08260000
END;                                                                    08270000
PROCEDURE BUILD'COMMREC;                                                08280000
BEGIN                                                                   08290000
   INTEGER ARRAY CTAB0TOCOMM(*) = PB :=                                 08300000
     << CTAB0 >> << COMM >>                                             08310000
           3,          7,   << HI DRT            >>                     08320000
          10,         40,   << LOG FILE NUMBER   >>                     08330000
          17,         12,   << FILES DUMPED      >>                     08340000
          18,          8,   << HI LDEV           >>                     08350000
          19,          9,   << HVOL/#VOL         >>                     08360000
          20,         20,   << CLASS SIZE        >>                     08370000
          21,          5,   << FIX               >>                     08380000
          22,         11,   << CL ID             >>                     08390000
          23,         16,   << MAX INIT SEG      >>                     08400000
          24,         15,   << DISC LOAD ENTRY   >>                     08410000
          25,         22,   << VTAB SIZE         >>                     08420000
          26,         23,   << INFO SIZE         >>                     08430000
          29,         24,   << CSTAB SIZE        >>                     08440000
          32,         10,   << ADD'L DVRS        >>                     08450000
          34,          4,   << UPDATE            >>                     08460000
          35,          3,   << VERSION           >>                     08470000
          36,         13,   << SERIAL LOAD       >>                     08480000
          37,          0,   << MIT VERSION       >>                     08490000
          38,          1,   << MIT UPDATE        >>                     08500000
          39,          2,   << MIT FIX           >>                     08510000
          40,         30,   << ID 0              >>                     08520000
          41,         31,   << ID 1              >>                     08530000
          42,         32,   << ID 2              >>                     08540000
          43,         33,   << ID 3              >>                     08550000
          44,         14,   << TAPE REC SIZE     >>                     08560000
          45,         21,   << TTDT SIZE         >>                     08570000
          46,          6,   << EXP SYSTEM #      >>                     08580000
          -1,         -1;   << TERMINATOR        >>                     08590000
                                                                        08600000
   ENTRY BUILD'CTAB0;                                                   08610000
   EQUATE SEED = %123456;                                               08620000
   INTEGER COREX;                                                       08630000
   INTEGER I;                                                           08640000
   INTEGER OLDCTAB041;                                                  08650000
   DEFINE MEMSIZE = CTAB0#;                                             08660000
   INTEGER ARRAY COMM(0:127);                                           08670000
   DEFINE FILEERROR =                                                   08680000
      BEGIN                                                             08690000
      FERROR( CONFFNUM, CONFFILE);                                      08700000
      GOTO FAILURE;                                                     08710000
      END#;                                                             08720000
                                                                        08730000
   IF CTAB0(41).(COMM'CONVERTED:1) THEN                                 08740000
      BEGIN                                                             08750000
      MOVE BLINE := "COMMUNCIATION TABLE - already converted";          08760000
      PRINTLINE;                                                        08770000
      CC := CCE;                                                        08780000
      RETURN;                                                           08790000
      END;                                                              08800000
   CTAB0(41).(COMM'CONVERTED:1) := 1;                                   08810000
   FREADDIR( CONFFNUM, NEWTABLE, 128, DOUBLE(1+CTAB0(1)));              08820000
   IF <> THEN FILEERROR;                                                08830000
   NEWTABLE(14) := 16384; << LOADER SEGMENT TABLE >>                    08840000
   FWRITEDIR( CONFFNUM, NEWTABLE, 128, 1D);                             08850000
   IF <> THEN FILEERROR;                                                08860000
   OLDCTAB041 := CTAB0(41);                                             08870000
                                                                        08880000
   ZEROBUF( COMM, 128);                                                 08890000
                                                                        08900000
   I := 0;                                                              08910000
   WHILE CTAB0TOCOMM(I) <> -1 DO                                        08920000
      BEGIN                                                             08930000
      COMM(CTAB0TOCOMM(I+1)) := CTAB0(CTAB0TOCOMM(I));                  08940000
      CTAB0(CTAB0TOCOMM(I)) := 0;                                       08950000
      I := I+2;                                                         08960000
      END;                                                              08970000
                                                                        08980000
   CTAB0(41) := OLDCTAB041;                                             08990000
   CTAB0(3) := CTAB0; << MEMORY SIZE IN K WORDS >>                      09000000
   CTAB0(1) := 1; << VERSION >>                                         09010000
   CTAB0 := CHECKSUM( CTAB0(1), 127, NOT(SEED));                        09020000
                                                                        09030000
   DISC( SYSDISC, WRITE, COMM, 31D, 128);                               09040000
   IF <> THEN GO FAILURE2;                                              09050000
                                                                        09060000
   ZEROBUF( NEWTABLE, 256);                                             09070000
   NEWTABLE(21) := INFO(11);                                            09080000
   INFO(11) := 0;                                                       09090000
   DISC( SYSDISC, WRITE, NEWTABLE, 32D, 256);                           09100000
   IF <> THEN GO FAILURE2;                                              09110000
                                                                        09120000
   CC := CCE;                                                           09130000
   RETURN;                                                              09140000
                                                                        09150000
BUILD'CTAB0:                                                            09160000
                                                                        09170000
   IF NOT CTAB0(41).(COMM'CONVERTED:1) THEN                             09180000
      BEGIN                                                             09190000
      MOVE BLINE := "COMMUNCIATION TABLE - already converted";          09200000
      PRINTLINE;                                                        09210000
      CC := CCE;                                                        09220000
      RETURN;                                                           09230000
      END;                                                              09240000
   OLDCTAB041 := CTAB0(41);                                             09250000
   DISC( SYSDISC, READ, COMM, 31D, 128);                                09260000
   IF <> THEN GOTO FAILURE;                                             09270000
   CTAB0 := CTAB0(3);  << MEMORY SIZE IN K WORDS >>                     09280000
                                                                        09290000
   I := 0;                                                              09300000
   WHILE CTAB0TOCOMM(I) <> -1 DO                                        09310000
      BEGIN                                                             09320000
      CTAB0(CTAB0TOCOMM(I)) := COMM(CTAB0TOCOMM(I+1));                  09330000
      I := I+2;                                                         09340000
      END;                                                              09350000
                                                                        09360000
   OLDCTAB041.(COMM'CONVERTED:1) := 0;                                  09370000
   CTAB0(41) := OLDCTAB041;                                             09380000
   CTAB0(40) := %140000;                                                09390000
   COREX := 0;                                                          09400000
   IF MEMSIZE >=  80 THEN COREX := 1;                                   09410000
   IF MEMSIZE >=  96 THEN COREX := 2;                                   09420000
   IF MEMSIZE >= 128 THEN COREX := 3;                                   09430000
   IF MEMSIZE >= 160 THEN COREX := 4;                                   09440000
   IF MEMSIZE >= 192 THEN COREX := 5;                                   09450000
   IF MEMSIZE >= 224 THEN COREX := 6;                                   09460000
   IF MEMSIZE >= 256 THEN COREX := 7;                                   09470000
   CTAB0(1) := COREX;                                                   09480000
                                                                        09490000
   FREADDIR( CONFFNUM, NEWTABLE, 128, 1D);                              09500000
   IF <> THEN FILEERROR;                                                09510000
   FWRITEDIR( CONFFNUM, NEWTABLE, 128, DOUBLE(1+COREX));                09520000
   IF <> THEN FILEERROR;                                                09530000
                                                                        09540000
   DISC( SYSDISC, READ, NEWTABLE, 32D, 256);                            09550000
   IF <> THEN GOTO FAILURE;                                             09560000
   INFO(11) := NEWTABLE(21);                                            09570000
                                                                        09580000
   CC := CCE;                                                           09590000
   RETURN;                                                              09600000
                                                                        09610000
FAILURE:                                                                09620000
   CC := CCG;                                                           09630000
   RETURN;                                                              09640000
FAILURE2:                                                               09650000
   CC := CCL;                                                           09660000
END;                                                                    09670000
PROCEDURE RETURN'SPACE( DISCADR, LENGTH);                               09680000
   DOUBLE ARRAY DISCADR;                                                09690000
   LOGICAL ARRAY LENGTH;                                                09700000
BEGIN                                                                   09710000
   INTEGER CNT := 0;                                                    09720000
                                                                        09730000
   WHILE CNT < NRTABLES DO                                              09740000
      BEGIN                                                             09750000
      IF DISCADR(CNT) <> 0D AND LENGTH(CNT) <> 0 THEN                   09760000
         RETURN'DISC'SPACE( SYSDISC, DISCADR(CNT),                      09770000
            DOUBLE( LENGTH(CNT)));                                      09780000
      CNT := CNT+1;                                                     09790000
      END;                                                              09800000
END;                                                                    09810000
PROCEDURE PURGE'UTIL'MPEIV;                                             09820000
BEGIN                                                                   09830000
   BYTE ARRAY UTILITIES(*) = PB :=                                      09840000
      8,"RECOVER2",                                            <<f8714>>09850000
      5,"DPAN4",                                                        09860000
      8,"LISTLOG2",                                                     09870000
      7,"LISTEQ2",                                                      09880000
      7,"DISKED2",                                                      09890000
      8,"LISTDIR2",                                                     09900000
      5,"SPOOK",                                                        09910000
      8,"ASOCTABL",                                                     09920000
      5,"FREE2",                                                        09930000
      6,"ATPDSM",                                              <<f8714>>09940000
      0;  << TERMINATOR >>                                              09950000
                                                                        09960000
   INTEGER                                                              09970000
      DISP,      << DISPLACEMENT IN UTILITIES >>                        09980000
      ERR,       << RETURN FROM COMMAND >>                              09990000
      PARM,      << RETURN FROM COMMAND >>                              10000000
      LEN,       << LENGTH OF FILENAME >>                               10010000
      FNUM;      << RETURN FROM FOPEN >>                                10020000
   BYTE ARRAY                                                           10030000
      FILENAME(0:29),                                                   10040000
      BUF(0:39),                                                        10050000
      TEMP(0:1);                                                        10060000
   INTEGER ARRAY                                                        10070000
      NRCHARS(*) = TEMP;                                                10080000
   DEFINE NRCHARS' = TEMP(1)#;                                          10090000
                                                                        10100000
   TEMP := 0;                                                           10110000
   DISP := 1;                                                           10120000
   MOVE NRCHARS' := UTILITIES,(1);                                      10130000
   WHILE NRCHARS <> 0 DO                                                10140000
      BEGIN                                                             10150000
      MOVE FILENAME := UTILITIES(DISP),(NRCHARS),2;                     10160000
      MOVE * := ".PUB.SYS",2;                                           10170000
      LEN := TOS-@FILENAME;                                             10180000
      MOVE BUF := "PURGE ",2;                                           10190000
      MOVE * := FILENAME,(LEN),2;                                       10200000
      MOVE * := (13);                                                   10210000
      COMMAND( BUF, ERR, PARM);                                         10220000
      IF <> THEN                                                        10230000
         BEGIN                                                          10240000
         MOVE BLINE := "UNABLE TO PURGE ",2;                            10250000
         MOVE * := FILENAME,(LEN),2;                                    10260000
         MOVE * := "  --  ERROR ",2;                                    10270000
         ASCII( ERR, 10, BPS0);                                         10280000
         PRINTLINE;                                                     10290000
         END                                                   <<V8273>>10300000
      ELSE                                                     <<V8273>>10310000
         BEGIN                                                 <<V8273>>10320000
         MOVE BLINE := FILENAME,(LEN);                         <<V8273>>10330000
         MOVE BLINE(17) := "PURGED!";                          <<V8273>>10340000
         PRINTLINE;                                            <<V8273>>10350000
         END;                                                  <<V8273>>10360000
      DISP := DISP+NRCHARS;                                             10370000
      MOVE NRCHARS' := UTILITIES(DISP),(1);                             10380000
      DISP := DISP+1;                                                   10390000
      END;                                                              10400000
END;                                                                    10410000
$CONTROL SEGMENT=BACKWARD'CONVERT                                       10420000
PROCEDURE PURGE'UTIL'MPEV;                                              10430000
BEGIN                                                                   10440000
   BYTE ARRAY UTILITIES(*) = PB :=                                      10450000
      8,"RECOVER5",                                                     10460000
      5,"DPAN5",                                                        10470000
      8,"LISTLOG5",                                                     10480000
      7,"LISTEQ5",                                                      10490000
      7,"DISKED5",                                                      10500000
      8,"LISTDIR5",                                                     10510000
      6,"SPOOK5",                                                       10520000
      8,"ASOCTBL5",                                                     10530000
      5,"FREE5",                                                        10540000
      7,"TERMDSM",                                             <<f8714>>10550000
      0;  << TERMINATOR >>                                              10560000
                                                                        10570000
   INTEGER                                                              10580000
      DISP,      << DISPLACEMENT IN UTILITIES >>                        10590000
      ERR,       << RETURN FROM COMMAND >>                              10600000
      PARM,      << RETURN FORM COMMAND >>                              10610000
      LEN,       << LENGTH OF FILENAME >>                               10620000
      FNUM;      << RETURN FROM FOPEN >>                                10630000
   BYTE ARRAY                                                           10640000
      FILENAME(0:29),                                                   10650000
      BUF(0:39),                                                        10660000
      TEMP(0:1);                                                        10670000
   INTEGER ARRAY                                                        10680000
      NRCHARS(*) = TEMP;                                                10690000
   DEFINE NRCHARS' = TEMP(1)#;                                          10700000
                                                                        10710000
   TEMP := 0;                                                           10720000
   DISP := 1;                                                           10730000
   MOVE NRCHARS' := UTILITIES,(1);                                      10740000
   WHILE NRCHARS <> 0 DO                                                10750000
      BEGIN                                                             10760000
      MOVE FILENAME := UTILITIES(DISP),(NRCHARS),2;                     10770000
      MOVE * := ".PUB.SYS",2;                                           10780000
      LEN := TOS-@FILENAME;                                             10790000
      MOVE BUF := "PURGE ",2;                                           10800000
      MOVE * := FILENAME,(LEN),2;                                       10810000
      MOVE * := (13);                                                   10820000
      COMMAND( BUF, ERR, PARM);                                         10830000
      IF <> THEN                                                        10840000
         BEGIN                                                          10850000
         MOVE BLINE := "UNABLE TO PURGE ",2;                            10860000
         MOVE * := FILENAME,(LEN),2;                                    10870000
         MOVE * := "  --  ERROR ",2;                                    10880000
         ASCII( ERR, 10, BPS0);                                         10890000
         PRINTLINE;                                                     10900000
         END                                                   <<V8273>>10910000
      ELSE                                                     <<V8273>>10920000
         BEGIN                                                 <<V8273>>10930000
         MOVE BLINE := FILENAME,(LEN);                         <<V8273>>10940000
         MOVE BLINE(17) := "PURGED!";                          <<V8273>>10950000
         PRINTLINE;                                            <<V8273>>10960000
         END;                                                  <<V8273>>10970000
      DISP := DISP+NRCHARS;                                             10980000
      MOVE NRCHARS' := UTILITIES(DISP),(1);                             10990000
      DISP := DISP+1;                                                   11000000
      END;                                                              11010000
END;                                                                    11020000
$PAGE "     F O R W A R D     C O N V E R S I O N"                      11030000
$CONTROL SEGMENT=MPEV'CONVERSION                               <<A8781>>11040000
PROCEDURE CONVERT'ASSOC;                                       <<A8781>>11050000
BEGIN                                                          <<A8781>>11060000
   INTEGER                                                     <<A8781>>11070000
      OLDREC,                                                  <<A8781>>11080000
      NEWREC,                                                  <<A8781>>11090000
      NEXT'EXT,                                                <<A8781>>11100000
      LDEV,                                                    <<A8781>>11110000
      NEWFILE,                                                 <<A8781>>11120000
      OLDFILE,                                                 <<A8781>>11130000
      ERRNR;                                                   <<A8781>>11140000
   DOUBLE                                                      <<A8781>>11150000
      FILESIZE;                                                <<A8781>>11160000
   INTEGER ARRAY                                               <<A8781>>11170000
      BUF(0:12);                                               <<A8781>>11180000
   DEFINE                                                      <<A8781>>11190000
      ERROR'ON'NEW =                                           <<A8781>>11200000
         BEGIN                                                 <<A8781>>11210000
         FERROR( NEWFILE, ASSOCFILE);                          <<A8781>>11220000
         GO FAILURE;                                           <<A8781>>11230000
         END#,                                                 <<A8781>>11240000
      ERROR'ON'OLD =                                           <<A8781>>11250000
         BEGIN                                                 <<A8781>>11260000
         FERROR( OLDFILE, ASSOCFILE);                          <<A8781>>11270000
         GO FAILURE;                                           <<A8781>>11280000
         END#;                                                 <<A8781>>11290000
                                                               <<A8781>>11300000
   CC := CCE;                                                  <<A8781>>11310000
                                                               <<A8781>>11320000
   FILESIZE := IF FORWARD' THEN 2048D ELSE 1304D;              <<A8781>>11330000
   OLDFILE := FOPEN( ASSOCFILE, %2001, %100);                  <<A8781>>11340000
   IF <> THEN                                                  <<A8781>>11350000
      BEGIN                                                    <<A8781>>11360000
      FCHECK( OLDFILE, ERRNR);                                 <<A8781>>11370000
      IF ERRNR = 52 THEN                                       <<A8781>>11380000
         RETURN                                                <<A8781>>11390000
      ELSE                                                     <<A8781>>11400000
         ERROR'ON'OLD;                                         <<A8781>>11410000
      END;                                                     <<A8781>>11420000
   NEWFILE := FOPEN( ASSOCFILE, %2000, 4, 13,,,,,,FILESIZE);   <<A8781>>11430000
   IF <> THEN ERROR'ON'NEW;                                    <<A8781>>11440000
                                                               <<A8781>>11450000
   NEXT'EXT := IF FORWARD' THEN 1000 ELSE 256;                 <<A8781>>11460000
                                                               <<A8781>>11470000
   FOR LDEV := 1 UNTIL 255 DO                                  <<A8781>>11480000
      BEGIN                                                    <<A8781>>11490000
      OLDREC := LDEV;                                          <<A8781>>11500000
      NEWREC := LDEV;                                          <<A8781>>11510000
      FREADDIR( OLDFILE, BUF, 13, DOUBLE(OLDREC));             <<A8781>>11520000
      IF <> THEN ERROR'ON'OLD;                                 <<A8781>>11530000
      WHILE BUF(12) <> 0 DO                                    <<A8781>>11540000
         BEGIN                                                 <<A8781>>11550000
         OLDREC := BUF(12);                                    <<A8781>>11560000
         BUF(12) := NEXT'EXT;                                  <<A8781>>11570000
         FWRITEDIR( NEWFILE, BUF, 13, DOUBLE(NEWREC));         <<A8781>>11580000
         IF <> THEN ERROR'ON'NEW;                              <<A8781>>11590000
         NEWREC := NEXT'EXT;                                   <<A8781>>11600000
         FREADDIR( OLDFILE, BUF, 13, DOUBLE(OLDREC));          <<A8781>>11610000
         IF <> THEN ERROR'ON'OLD;                              <<A8781>>11620000
         NEXT'EXT := NEXT'EXT+1;                               <<A8781>>11630000
         END;                                                  <<A8781>>11640000
      FWRITEDIR( NEWFILE, BUF, 13, DOUBLE(NEWREC));            <<A8781>>11650000
      IF <> THEN ERROR'ON'NEW;                                 <<A8781>>11660000
      END;                                                     <<A8781>>11670000
                                                               <<A8781>>11680000
   << BUILD HEADER RECORD >>                                   <<A8781>>11690000
   ZEROBUF( BUF, 13);                                          <<A8781>>11700000
   BUF := NEXT'EXT;                                            <<A8781>>11710000
   FWRITEDIR( NEWFILE, BUF, 13, 0D);                           <<A8781>>11720000
   IF <> THEN ERROR'ON'NEW;                                    <<A8781>>11730000
                                                               <<A8781>>11740000
   << ZERO FUTURE ENTRIES GOING FORWARD >>                     <<A8781>>11750000
   IF FORWARD' THEN                                            <<A8781>>11760000
      BEGIN                                                    <<A8781>>11770000
      ZEROBUF( BUF, 13);                                       <<A8781>>11780000
      FOR LDEV := 256 UNTIL 999 DO                             <<A8781>>11790000
         BEGIN                                                 <<A8781>>11800000
         FWRITEDIR( NEWFILE, BUF, 13, DOUBLE(LDEV));           <<A8781>>11810000
         IF <> THEN ERROR'ON'NEW;                              <<A8781>>11820000
         END;                                                  <<A8781>>11830000
      END;                                                     <<A8781>>11840000
                                                               <<A8781>>11850000
   FCLOSE( OLDFILE, 4, 0); << PURGE OLD FILE >>                <<A8781>>11860000
   IF <> THEN ERROR'ON'OLD;                                    <<A8781>>11870000
   FCLOSE( NEWFILE, 1, 0); << SAVE NEW FILE >>                 <<A8781>>11880000
   IF <> THEN ERROR'ON'NEW;  << *BAD* *BAD* NEWS >>            <<A8781>>11890000
                                                               <<A8781>>11900000
   RETURN;                                                     <<A8781>>11910000
                                                               <<A8781>>11920000
FAILURE:                                                       <<A8781>>11930000
   CC := CCL;                                                  <<A8781>>11940000
END;                                                           <<A8781>>11950000
$CONTROL SEGMENT=MPEV'CONVERSION                                        11960000
PROCEDURE FORWARD'CONVERT;                                              11970000
BEGIN                                                                   11980000
   INTEGER                                                              11990000
      CLASSTABSIZE,                                                     12000000
      TTDTTABSIZE,                                                      12010000
      SECONDARYLEN,                                                     12020000
      LEN,                                                              12030000
      I,                                                                12040000
      J,                                                                12050000
      CNT;                                                              12060000
   BYTE ARRAY                                                           12070000
      DEVEXISTS(0:255);                                                 12080000
   BYTE POINTER                                                         12090000
      BPNTR;                                                            12100000
   INTEGER ARRAY                                                        12110000
      GLPTR(@) = DB+1;                                                  12120000
                                                                        12130000
   HIGHESTLDEV := CTAB0( 18);                                           12140000
   HIGHESTDRT := CTAB0( 3);                                             12150000
   NRCSDVR := CTAB0( 32);                                               12160000
                                                                        12170000
   DEVEXISTS := 0;                                                      12180000
   MOVE DEVEXISTS(1) := DEVEXISTS,(255);                                12190000
                                                                        12200000
   <<*********************>>                                   <<V8273>>12210000
   <<   PURGE UTILITIES   >>                                   <<V8273>>12220000
   <<*********************>>                                   <<V8273>>12230000
                                                               <<V8273>>12240000
   IF PARM.(11:1) THEN                                         <<V8273>>12250000
      PURGE'UTIL'MPEIV;                                        <<V8273>>12260000
                                                               <<V8273>>12270000
   FCONTROL( TERMFNUM, 14, I); << DISABLE BREAK !!! >>         <<V8273>>12280000
                                                               <<V8273>>12290000
   FIXCLINFO; << DO TTDT CONVERTION IF NOT ALREADY DONE >>              12300000
   IF <> THEN GO FAILURE;                                               12310000
                                                                        12320000
   <<*************************>>                                        12330000
   <<    CONVERT I/O TABLES   >>                                        12340000
   <<*************************>>                                        12350000
                                                                        12360000
   IF PARM.(15:1) THEN                                                  12370000
      BEGIN                                                             12380000
      IF LOGICAL(CTAB0(41).(IO'CONVERTED:1)) THEN                       12390000
         BEGIN                                                          12400000
         MOVE BLINE := "I/O TABLES - already converted";                12410000
         PRINTLINE;                                                     12420000
         END                                                            12430000
      ELSE                                                              12440000
         BEGIN                                                          12450000
                                                                        12460000
         INIT'DEVDATA; << BUILD AND INITIALIZE DEVDATA FILE >>          12470000
         IF <> THEN GO FAILURE;                                         12480000
                                                                        12490000
         <<**************>>                                             12500000
         <<   CS TABLE   >>                                             12510000
         <<**************>>                                             12520000
                                                                        12530000
         TABLENR := CSNR;                                               12540000
         GET'TABLE'DISCADR( INFOCSTAB, DISCADR, LENGTH);                12550000
         OLDDISCADR( INFOCSTAB) := DISCADR;                             12560000
         OLDTABLEN( INFOCSTAB) := CSTABSECT;                            12570000
         DISC( SYSDISC, READ, OLDTABLE, DISCADR, LENGTH);               12580000
         IF <> THEN GOTO FAILURE;                                       12590000
         ZEROBUF( NEWTABLE, 7168);                                      12600000
                                                                        12610000
         << MOVE IN HEADER ENTRY >>                                     12620000
         MOVE NEWTABLE := OLDTABLE,(7);                                 12630000
         << BUILD NEW CS LDTX >>                                        12640000
         INDEX := 7;                                                    12650000
         INDEX2 := 7;                                                   12660000
         I := 0;                                                        12670000
         WHILE I < INTEGER(OLDTABLE( 1)) DO                             12680000
            BEGIN                                                       12690000
            LEN := OLDTABLE( INDEX);                                    12700000
            MOVE NEWTABLE( INDEX2) := OLDTABLE( INDEX),(4);             12710000
            NEWTABLE( INDEX2+4) := OLDTABLE( INDEX+3).(8:8);            12720000
            NEWTABLE( INDEX2+3).(8:8) := 0;                             12730000
            MOVE NEWTABLE( INDEX2+5) := OLDTABLE( INDEX+4),(9);         12740000
            NEWTABLE( INDEX2+14) := OLDTABLE( INDEX+13).(0:8);          12750000
            NEWTABLE( INDEX2+15) := OLDTABLE( INDEX+13).(8:8);          12760000
            MOVE NEWTABLE( INDEX2+16) := OLDTABLE( INDEX+14),(LEN-14);  12770000
            << FIX CONTROL SECTION POINTER >>                           12780000
            IF NEWTABLE( INDEX2+16) <> 0 THEN                  <<C8107>>12790000
               NEWTABLE( INDEX2+16) := NEWTABLE( INDEX2+16)+2; <<C8107>>12800000
            << FIX ID LIST SECTION POINTER >>                           12810000
            IF NEWTABLE( INDEX2+17) <> 0 THEN                  <<C8107>>12820000
               NEWTABLE( INDEX2+17) := NEWTABLE( INDEX2+17)+2; <<C8107>>12830000
            << FIX PHONE LIST SECTION POINTER >>                        12840000
            IF NEWTABLE( INDEX2+18) <> 0 THEN                  <<C8107>>12850000
               NEWTABLE( INDEX2+18) := NEWTABLE( INDEX2+18)+2; <<C8107>>12860000
            NEWTABLE( INDEX2) := NEWTABLE( INDEX2)+2;                   12870000
            NEWTABLE := NEWTABLE+2;                                     12880000
            INDEX2 := INDEX2+INTEGER(NEWTABLE(INDEX2));                 12890000
            I := I+1;                                                   12900000
            INDEX := INDEX+INTEGER(OLDTABLE(INDEX));                    12910000
            END;                                                        12920000
         << BUILD NEW CS DRIVER ENTRIES >>                              12930000
         NEWTABLE(6) := INDEX2;                                         12940000
         MOVE NEWTABLE( INDEX2) := OLDTABLE( INDEX),                    12950000
            (OLDTABLE-OLDTABLE(6));                                     12960000
         WRITEDEVFILE( DEVCSTAB, NEWTABLE, NEWTABLE);                   12970000
         IF <> THEN GOTO FAILURE;                                       12980000
         CTAB0(29) := NEWTABLE;                                         12990000
                                                                        13000000
         <<******************>>                                         13010000
         <<   DRIVER TABLE   >>                                         13020000
         <<******************>>                                         13030000
                                                                        13040000
         TABLENR := DVRTABNR;                                           13050000
         FREADDIR( CONFFNUM, OLDTABLE, (HIGHESTLDEV+1)*6, 9D);          13060000
         IF <> THEN                                                     13070000
            BEGIN                                                       13080000
            FERROR( CONFFNUM, CONFFILE);                                13090000
            GO FAILURE;                                                 13100000
            END;                                                        13110000
         ZEROBUF( DVRTAB, 7168);                                        13120000
         CNT := 1;                                                      13130000
         WHILE CNT <= HIGHESTLDEV DO                                    13140000
            BEGIN                                                       13150000
            DVR'INDEX := CNT*7;                                         13160000
            INDEX := CNT*6;                                             13170000
            DVRDRTNUM := OLDTABLE(INDEX).(0:9);                         13180000
            DVRUNITNUM := OLDTABLE(INDEX).(9:7);                        13190000
            DVRCORERES := OLDTABLE(INDEX+1).(0:1);                      13200000
            DVRCHANNUM := OLDTABLE(INDEX+1).(1:3);                      13210000
            DVRDSBIT := OLDTABLE(INDEX+1).(7:1);                        13220000
            DVRMASTERLDEV := OLDTABLE(INDEX+1).(8:8);                   13230000
            @BPNTR := @OLDTABLE(INDEX+2) &LSL(1);                       13240000
            IF BPNTR = "HIOTERM0" THEN                                  13250000
               BEGIN                                                    13260000
               IF TYPE(CNT) = 16 THEN                                   13270000
                  MOVE DVRNAME := "HIOTERM2"                            13280000
               ELSE                                                     13290000
                  IF TYPE(CNT) = 32 THEN                                13300000
                     MOVE DVRNAME := "HIOASLP2";                        13310000
               END                                                      13320000
            ELSE                                                        13330000
               MOVE DVRNAME := OLDTABLE(INDEX+2),(4);                   13340000
            IF DVRDRTNUM <> 0 OR DVRDSBIT <> 0 THEN                     13350000
               DEVEXISTS(CNT) := 1;                                     13360000
            CNT := CNT+1;                                               13370000
            END;                                                        13380000
         LENGTH := (HIGHESTLDEV+1) * 7;                                 13390000
         WRITEDEVFILE( DEVDVR, DVRTAB, LENGTH);                         13400000
         IF <> THEN GO FAILURE;                                         13410000
                                                                        13420000
         <<************************>>                                   13430000
         <<   DEVICE CLASS TABLE   >>                                   13440000
         <<************************>>                                   13450000
                                                                        13460000
         TABLENR := CLASSNR;                                            13470000
         GET'TABLE'DISCADR( INFOCLASS, DISCADR, LENGTH);                13480000
         OLDDISCADR( INFOCLASS) := DISCADR;                             13490000
         OLDTABLEN( INFOCLASS) := DVCLSECT;                             13500000
         IF LENGTH > 6144 THEN                                          13510000
            BEGIN                                                       13520000
            MOVE BLINE := "DEVICE CLASS TABLE TOO LARGE TO CONVERT";    13530000
            PRINTLINE;                                                  13540000
            GOTO FAILURE;                                               13550000
            END;                                                        13560000
         DISC( SYSDISC, READ, OLDTABLE, DISCADR, LENGTH);               13570000
         IF <> THEN GOTO FAILURE;                                       13580000
         ZEROBUF( CLASS, 7167);                                         13590000
         MFDS( NROFCLASSENTS, 14, 2, 1);                                13600000
         @PCLASS := @CLASS;                                             13610000
         @POLDTABLE := @OLDTABLE;                                       13620000
         CNT := 0;                                                      13630000
         WHILE CNT < NROFCLASSENTS DO                                   13640000
            BEGIN                                                       13650000
            MOVE PCLASS := POLDTABLE,(5),1;                             13660000
            @POLDTABLE := TOS;                                          13670000
            @PCLASS := TOS;                                             13680000
            @BPOLDTABLE := @POLDTABLE &LSL(1);                          13690000
            I := BPOLDTABLE;  << NR. OF LDEV'S >>                       13700000
            PCLASS := I;                                                13710000
            J := 1;                                                     13720000
            WHILE J <= I DO                                             13730000
               BEGIN                                                    13740000
               PCLASS(J) := BPOLDTABLE(J);                              13750000
               J := J+1;                                                13760000
               END;                                                     13770000
            @PCLASS := @PCLASS(J);                                      13780000
            @POLDTABLE := @BPOLDTABLE(J+1) &LSR(1);                     13790000
            CNT := CNT+1;                                               13800000
            END;                                                        13810000
         CLASSTABSIZE := @PCLASS-@CLASS;                                13820000
         CTAB0(CTAB0DCTSIZE) := CLASSTABSIZE;                           13830000
         WRITEDEVFILE( DEVCLASS, CLASS, CLASSTABSIZE);                  13840000
         IF <> THEN GO FAILURE;                                         13850000
                                                                        13860000
         <<****************>>                                           13870000
         <<   LPDT TABLE   >>                                           13880000
         <<****************>>                                           13890000
                                                                        13900000
         TABLENR := LPDTNR;                                             13910000
         GET'TABLE'DISCADR( INFOLPDT, DISCADR, LENGTH);                 13920000
         OLDDISCADR( INFOLPDT) := DISCADR;                              13930000
         OLDTABLEN( INFOLPDT) := LPDTSECT;                              13940000
         DISC( SYSDISC, READ, OLDTABLE, DISCADR, LENGTH);               13950000
         IF <> THEN GOTO FAILURE;                                       13960000
         ZEROBUF( LPDT, 4096);                                          13970000
         <<    FORMAT HEADER    >>                                      13980000
         LPDT := OLDTABLE.(0:8);                                        13990000
         LPDT(1) := 4;                                                  14000000
         <<    FORMAT TABLE    >>                                       14010000
         CNT := 1;                                                      14020000
         WHILE CNT <= HIGHESTLDEV DO                                    14030000
            BEGIN                                                       14040000
            INDEX := CNT*2;                                             14050000
            INDEX2 := CNT*4;                                            14060000
            LPDT(INDEX2) := OLDTABLE(INDEX) LAND %100000;               14070000
            LPDT(INDEX2+1) := OLDTABLE(INDEX+1);                        14080000
            CNT := CNT+1;                                               14090000
            END;                                                        14100000
         LENGTH := (HIGHESTLDEV+1) * 4; << CALUATE NEW LENGTH >>        14110000
         WRITEDEVFILE( DEVLPDT, LPDT, LENGTH);                          14120000
         IF <> THEN GO FAILURE;                                         14130000
                                                                        14140000
         <<***************>>                                            14150000
         <<   LDT TABLE   >>                                            14160000
         <<***************>>                                            14170000
                                                                        14180000
         TABLENR := LDTNR;                                              14190000
         GET'TABLE'DISCADR( INFOLDT, DISCADR, LENGTH);                  14200000
         OLDDISCADR( INFOLDT) := DISCADR;                               14210000
         OLDTABLEN( INFOLDT) := LDTSECT;                                14220000
         DISC( SYSDISC, READ, OLDTABLE, DISCADR, LENGTH);               14230000
         IF <> THEN GOTO FAILURE;                                       14240000
         ZEROBUF( LDT, 7167);                                           14250000
         <<    FORMAT HEADER    >>                                      14260000
         LDT'NUM'ENTRIES := HIGHESTLDEV;                                14270000
         LDT'ENTRY'SIZE := 7;                                           14280000
         <<    FORMAT TABLE    >>                                       14290000
         CNT := 1;                                                      14300000
         WHILE CNT <= HIGHESTLDEV DO                                    14310000
            BEGIN                                                       14320000
            LDT'INDEX := CNT*7;                                         14330000
            INDEX := CNT*5;                                             14340000
            LDT(LDT'INDEX+2) := OLDTABLE(INDEX+2);                      14350000
            LDT(LDT'INDEX+3).(0:8) := OLDTABLE(INDEX+3).(0:8);          14360000
            LDT'SPOOL'QUEUES := OLDTABLE(INDEX+4).(7:1);       <<*8428>>14370000
            LDT'DFLT'TERM'TYPE := OLDTABLE(INDEX+4).(0:7);     <<*8428>>14380000
            LDT'DFLT'OUT'DEV := OLDTABLE(INDEX+3).(8:8);                14390000
            CNT := CNT+1;                                               14400000
            END;                                                        14410000
         LENGTH := (HIGHESTLDEV+1) * 7; << CALUATE NEW LENGTH >>        14420000
         WRITEDEVFILE( DEVLDT, LDT, LENGTH);                            14430000
         IF <> THEN GO FAILURE;                                         14440000
                                                                        14450000
         <<****************>>                                           14460000
         <<   LDTX TABLE   >>                                           14470000
         <<****************>>                                           14480000
                                                                        14490000
         TABLENR := LDTXNR;                                             14500000
         GET'TABLE'DISCADR( INFOLDTX, DISCADR, LENGTH);                 14510000
         OLDDISCADR( INFOLDTX) := DISCADR;                              14520000
         OLDTABLEN( INFOLDTX) := LDTXSECT;                              14530000
         DISC( SYSDISC, READ, OLDTABLE, DISCADR, LENGTH);               14540000
         IF <> THEN GO FAILURE;                                         14550000
         <<   BUILD NEW HEADER   >>                                     14560000
         OLDTABLE := HIGHESTLDEV;                                       14570000
         OLDTABLE(1) := 5;                                              14580000
         <<   FIXUP OLD TABLE   >>                                      14590000
         CNT := 1;                                                      14600000
         WHILE CNT <= HIGHESTLDEV DO                                    14610000
            BEGIN                                                       14620000
            IF DEVEXISTS(CNT) <> 0 THEN                                 14630000
               BEGIN                                                    14640000
               IF TYPE(CNT) = 16 OR                                     14650000
                  TYPE(CNT) = 32 AND                                    14660000
                  (SUBTYPE(CNT)=14 OR SUBTYPE(CNT)=15) THEN             14670000
                  BEGIN                                                 14680000
                  IF NOT TTDT'CONVERTED THEN                            14690000
                     OLDTABLE(CNT*5+1) := -1;                           14700000
                  END                                                   14710000
               ELSE                                                     14720000
                  OLDTABLE(CNT*5+1) := 0;                               14730000
               END;                                                     14740000
            CNT := CNT+1;                                               14750000
            END;                                                        14760000
         LENGTH := (HIGHESTLDEV+1) * 5;                                 14770000
         WRITEDEVFILE( DEVLDTX, OLDTABLE, LENGTH);                      14780000
         IF <> THEN GO FAILURE;                                         14790000
                                                                        14800000
         <<*******************************>>                            14810000
         <<   DEVICE CLASS TABLE HEADER   >>                            14820000
         <<*******************************>>                            14830000
                                                                        14840000
         TABLENR := DCTHNR;                                             14850000
         GET'TABLE'DISCADR( INFODCTH, DISCADR, LENGTH);                 14860000
         OLDDISCADR(INFODCTH) := DISCADR;                               14870000
         OLDTABLEN(INFODCTH) := DCTHSECT;                               14880000
         DISC( SYSDISC, READ, OLDTABLE, DISCADR, LENGTH);               14890000
         IF <> THEN GO FAILURE;                                         14900000
         TTDTTABSIZE := OLDTABLE - DCTHSIZE;                            14910000
         OLDTABLE    := DCTHSIZE+CLASSTABSIZE+TTDTTABSIZE;              14920000
         OLDTABLE(1) := 1;  << ENTRY SIZE >>                            14930000
         OLDTABLE(2) := NROFCLASSENTS; << # OF CLASS ENTS >>            14940000
         OLDTABLE(3) := DCTHSIZE;      << PTR TO CLASS TAB >>           14950000
         OLDTABLE(5) := DCTHSIZE+CLASSTABSIZE; <<PTR TO TTDT>>          14960000
         WRITEDEVFILE( DEVDCTH, OLDTABLE, DCTHSIZE);                    14970000
         IF <> THEN GO FAILURE;                                         14980000
                                                                        14990000
         BUILD'DEVDATA;                                                 15000000
         IF <> THEN GO FAILURE;                                         15010000
                                                                        15020000
         CTAB0(41).(IO'CONVERTED:1) := 1;                               15030000
         END;                                                           15040000
      END;                                                              15050000
                                                                        15060000
   <<**********************>>                                           15070000
   <<   COVERT RIN TABLE   >>                                           15080000
   <<**********************>>                                           15090000
                                                                        15100000
   IF PARM.(13:1) THEN                                                  15110000
      BEGIN                                                             15120000
      TABLENR := RINNR;                                                 15130000
      IF LOGICAL(CTAB0(41).(RIN'CONVERTED:1)) THEN                      15140000
         BEGIN                                                          15150000
         MOVE BLINE := "RIN TABLE - already converted";                 15160000
         PRINTLINE;                                                     15170000
         END                                                            15180000
      ELSE                                                              15190000
         BEGIN                                                          15200000
         OLDTABLEN( INFORIN) := INFO(23);                      <<C8456>>15210000
         DISCADR1 := INFO(18);                                          15220000
         DISCADR2 := INFO(19);                                          15230000
         OLDDISCADR( INFORIN) := DISCADR;                               15240000
         MFDS( LENGTH, 22, 1, 1);                                       15250000
         MFDS( OLDTABLE, 22, 0, LENGTH+4);                              15260000
         NRRINS := OLDTABLE(1) / 2 -1;                                  15270000
         ZEROBUF( RIN, 6144);                                           15280000
         <<    FORMAT HEADER    >>                                      15290000
         RIN := OLDTABLE + OLDTABLE/2;                                  15300000
         RIN(1) := OLDTABLE(1) + OLDTABLE(1)/2;                         15310000
         <<    FORMAT TABLE    >>                                       15320000
         CNT := 1;                                                      15330000
         WHILE CNT <= NRRINS DO                                         15340000
            BEGIN                                                       15350000
            INDEX := CNT*2;                                             15360000
            INDEX2 := CNT*3;                                            15370000
            RIN( INDEX2).(0:2) := OLDTABLE(INDEX).(0:2);                15380000
            CASE RIN(INDEX2).(0:2) OF                                   15390000
               BEGIN                                                    15400000
               RIN(INDEX2).(2:14) := OLDTABLE(INDEX).(2:14)+            15410000
                  OLDTABLE(INDEX).(2:14)/2;                             15420000
               ;                                                        15430000
               RIN(INDEX2).(2:14) := OLDTABLE(INDEX).(2:14)             15440000
                  - OLDTABLE(1);                                        15450000
               ;                                                        15460000
               END;                                                     15470000
            CNT := CNT+1;                                               15480000
            END;                                                        15490000
         SECONDARYLEN := OLDTABLE(OLDTABLE(1)+1) * 12 +4;               15500000
         LENGTH := SECONDARYLEN + INTEGER(RIN(1)) + 4;                  15510000
         DSEGNR := GETDATASEGC( LENGTH, 0);                             15520000
         IF <> THEN                                                     15530000
            BEGIN                                                       15540000
            MESSAGE( RINNR, GETDSEGERR, DSEGNR);                        15550000
            GO FAILURE;                                                 15560000
            END;                                                        15570000
         MTDS( DSEGNR, 0, RIN, RIN(1));                                 15580000
         MDS( DSEGNR, RIN(1), 22, OLDTABLE(1), SECONDARYLEN);           15590000
         <<   FIXUP FREE LIST FOR SECONDARY TABLE   >>                  15600000
         J := OLDTABLE(1);  << NEW DISP >>                              15610000
         EXCHANGEDB( DSEGNR );                                          15620000
         I := 0;                                                        15630000
         WHILE GLPTR(I) <> 0 DO                                         15640000
            BEGIN                                                       15650000
            GLPTR(I) := GLPTR(I) - J;                                   15660000
            I := GLPTR(I);                                              15670000
            IF NOT(4 <= I <= SECONDARYLEN) THEN                         15680000
               BEGIN                                                    15690000
               EXCHANGEDB( 0 );                                         15700000
               MESSAGE( RINNR, BADLINKERR, -1);                         15710000
               GOTO FAILURE;                                            15720000
               END;                                                     15730000
            END;                                                        15740000
         EXCHANGEDB( 0 );  << XCH DB BACK TO STK >>                     15750000
         ERROR := GET'DISC'SPACE( SYSDISC, DOUBLE((LENGTH+127)/128),    15760000
            DISCADR);                                                   15770000
         IF ERROR <> 0 THEN                                             15780000
            BEGIN                                                       15790000
            MESSAGE( RINNR, GETDISCERR, ERROR);                         15800000
            GOTO FAILURE;                                               15810000
            END;                                                        15820000
         NEWDISCADR(INFORIN) := DISCADR;                                15830000
         NEWTABLEN(INFORIN) := LENGTH;                                  15840000
         TOS := ATTACHIO( SYSDISC, 0, DSEGNR, 0, WRITE,                 15850000
            LENGTH, DISCADR1, DISCADR2, 1);                             15860000
         IOERRCHECK( *, *);                                             15870000
         RELDATASEG( DSEGNR);                                           15880000
         INFO(18) := DISCADR1;                                          15890000
         INFO(19) := DISCADR2;                                          15900000
         INFO(23) := (LENGTH+127)/128;                                  15910000
         CTAB0(41).(RIN'CONVERTED:1) := 1;                              15920000
         END;                                                           15930000
      END;                                                              15940000
                                                                        15950000
   <<**********************************>>                               15960000
   <<   CONVERT COLD LOAD INFO TABLE   >>                               15970000
   <<**********************************>>                               15980000
                                                                        15990000
   TTDT'CONVERTED := 1;                                                 16000000
   ZEROBUF( NEWINFO, 384);                                              16010000
   MOVE NEWINFO := INFO,(256);                                          16020000
   IF PARM.(14:1) THEN                                                  16030000
      BEGIN                                                             16040000
      TABLENR := CLINFONR;                                              16050000
      IF LOGICAL(CTAB0(41).(CL'CONVERTED:1)) THEN                       16060000
         BEGIN                                                          16070000
         MOVE BLINE := "COLD LOAD INFO TABLE - already converted";      16080000
         PRINTLINE;                                                     16090000
         END                                                            16100000
      ELSE                                                              16110000
         BEGIN                                                          16120000
         ZEROBUF( NEWINFO, 384);                                        16130000
         MOVE NEWINFO := INFO,(INFO);                                   16140000
         CNT := 0;                                                      16150000
         WHILE CNT < INFO(2) DO                                         16160000
            BEGIN                                                       16170000
            INDEX := INFO + CNT*4;                                      16180000
            INDEX2 := INFO + CNT*5;                                     16190000
            NEWINFO(INDEX2) := INFO(INDEX);                             16200000
            NEWINFO(INDEX2+1) := IF INDEX >= INFO(1) THEN 1 ELSE 0;     16210000
            NEWINFO(INDEX2+2) := INFO(INDEX+1);                         16220000
            NEWINFO(INDEX2+3) := INFO(INDEX+2);                         16230000
            NEWINFO(INDEX2+4) := INFO(INDEX+3);                         16240000
            CNT := CNT+1;                                               16250000
            END;                                                        16260000
         << ADJUST CST INFO POINTER >>                                  16270000
         NEWINFO(1) := INFO + ((INFO(1)-INFO)/4*5);                     16280000
         CTAB0(41).(CL'CONVERTED:1) := 1;                               16290000
         END;                                                           16300000
      END;                                                              16310000
                                                                        16320000
   <<***************************>>                             <<A8781>>16330000
   <<   CONVERT ASOCIATE FILE   >>                             <<A8781>>16340000
   <<***************************>>                             <<A8781>>16350000
                                                               <<A8781>>16360000
   CONVERT'ASSOC;                                              <<A8781>>16370000
   IF <> THEN GO FAILURE;                                      <<A8781>>16380000
                                                               <<A8781>>16390000
   <<***********************************************>>                  16400000
   <<   BUILD INITIAL/SYSDUMP COMMUNICATION TABLE   >>                  16410000
   <<***********************************************>>                  16420000
                                                                        16430000
   IF PARM.(12:1) THEN                                                  16440000
      BEGIN                                                             16450000
      BUILD'COMMREC;                                                    16460000
      IF > THEN GOTO FAILURE;                                           16470000
      IF < THEN GOTO FAILURE2;                                          16480000
      END;                                                              16490000
                                                                        16500000
   FWRITEDIR( CONFFNUM, CTAB0, 128, 0D);                                16510000
   IF <> THEN GOTO FAILURE2;                                            16520000
   DISC( SYSDISC, WRITE, NEWINFO, 28D, 384);                            16530000
   IF <> THEN GOTO FAILURE2;                                            16540000
                                                                        16550000
                                                                        16560000
   <<   COLD LOAD INFO UPDATED AND WRITTERN IT IS NOW SAFE   >>         16570000
   <<   TO RELEASE THE DISC SPACE FOR THE OLD TABLES.        >>         16580000
                                                                        16590000
   RETURN'SPACE( OLDDISCADR, OLDTABLEN);                                16600000
                                                                        16610000
   SUCCESSFUL := TRUE;                                                  16620000
   MOVE BLINE := ("SUCCESSFUL CONVERSION -- UPDATE WITH ",     <<*8066>>16630000
                  "MPEV/E (G.00.00)");                         <<*8066>>16640000
   PRINTLINE;                                                           16650000
                                                                        16660000
   RETURN;                                                              16670000
FAILURE:                                                                16680000
   <<   CONVERSION FAILED! --- RESTORE SYSTEM TO ORGINAL CONDITION    >>16690000
                                                                        16700000
   RETURN'SPACE( NEWDISCADR, NEWTABLEN);                                16710000
                                                                        16720000
   MOVE BLINE := "CONVERSION FAILED.....NO MODIFITIONS DONE";           16730000
   PRINTLINE;                                                           16740000
   RETURN;                                                              16750000
                                                                        16760000
FAILURE2:                                                               16770000
   <<   CONVERSION FAILED! --- IN A *BAD* WAY >>                        16780000
                                                                        16790000
   RETURN'SPACE( NEWDISCADR, NEWTABLEN);                                16800000
                                                                        16810000
   MOVE BLINE := "CONVERSION FAILED.....DISC BOOT MAY BE DAMAGED";      16820000
   PRINTLINE;                                                           16830000
   MOVE BLINE := "BE SURE YOUR SYSTEM IS BACKED UP!";                   16840000
   PRINTLINE;                                                           16850000
   MOVE BLINE := "SHUTDOWN";                                            16860000
   PRINTLINE;                                                           16870000
   MOVE BLINE := "COLDLOAD  WITH   PRE-MPEV/E(G.00.00)";       <<*8066>>16880000
   PRINTLINE;                                                           16890000
END;  << FORWARD'CONVERT >>                                             16900000
$CONTROL SEGMENT=BACKWARD'CONVERT                                       16910000
$PAGE "     B A C K W A R D     C O N V E R S I O N"                    16920000
PROCEDURE BACKWARD'CONVERT;                                             16930000
BEGIN                                                                   16940000
   DOUBLE                                                               16950000
      CONFFILEADR;  << DISCADR OF FIRST RECORD OF CONFDATA >>           16960000
   BYTE                                                                 16970000
      CONFLDEV = CONFFILEADR;                                           16980000
   ARRAY                                                                16990000
      FLAB(0:127);                                                      17000000
   DEFINE DISPTODATA = FLAB(%47).(0:8)#;                                17010000
   BYTE POINTER                                                         17020000
      BPNTR;                                                            17030000
   INTEGER                                                              17040000
      CLASSTABSIZE,                                                     17050000
      NRENTS,                                                           17060000
      ENTSIZE,                                                          17070000
      SECONDARYLEN,                                                     17080000
      LENGTH,                                                           17090000
      LEN,                                                              17100000
      I,                                                                17110000
      J,                                                                17120000
      CNT;                                                              17130000
                                                                        17140000
                                                                        17150000
   FGETINFO( CONFFNUM,,,,,,,,,,,,,,,,,,,CONFFILEADR);                   17160000
   IF CONFLDEV <> 1 THEN GO FAILURE;                                    17170000
   CONFLDEV := 0;                                                       17180000
   DISC( SYSDISC, READ, FLAB, CONFFILEADR, 128);                        17190000
   IF <> THEN GO FAILURE;                                               17200000
   CONFFILEADR := CONFFILEADR+DOUBLE(DISPTODATA);                       17210000
                                                                        17220000
   DEVFNUM := FOPEN( DEVFILE, 1, %324);                                 17230000
   IF <> THEN                                                           17240000
      BEGIN                                                             17250000
      FERROR( DEVFNUM, DEVFILE);                                        17260000
      GO FAILURE;                                                       17270000
      END;                                                              17280000
                                                                        17290000
   FREADDIR( DEVFNUM, DEVREC0, 128, 0D);                                17300000
   IF <> THEN                                                           17310000
      BEGIN                                                             17320000
      FERROR( DEVFNUM, DEVFILE);                                        17330000
      GO FAILURE;                                                       17340000
      END;                                                              17350000
                                                                        17360000
   <<*********************>>                                   <<V8273>>17370000
   <<   PURGE UTILITIES   >>                                   <<V8273>>17380000
   <<*********************>>                                   <<V8273>>17390000
                                                               <<V8273>>17400000
   IF PARM.(11:1) THEN                                         <<V8273>>17410000
      PURGE'UTIL'MPEV;                                         <<V8273>>17420000
                                                               <<V8273>>17430000
   FCONTROL( TERMFNUM, 14, I); << DISABLE BREAK!!! >>          <<V8273>>17440000
                                                               <<V8273>>17450000
   <<***************************>>                                      17460000
   <<   CONVERT BACK TO CTAB0   >>                                      17470000
   <<***************************>>                                      17480000
                                                                        17490000
   IF PARM.(12:1) THEN                                                  17500000
      BEGIN                                                             17510000
      BUILD'CTAB0;                                                      17520000
      IF > THEN GOTO FAILURE;                                           17530000
      IF < THEN GOTO FAILURE2;                                          17540000
      END;                                                              17550000
                                                                        17560000
   HIGHESTLDEV := CTAB0( 18);                                           17570000
   HIGHESTDRT := CTAB0( 3);                                             17580000
   NRCSDVR := CTAB0( 32);                                               17590000
                                                                        17600000
   <<***********************>>                                          17610000
   <<   COVERT I/O TABLES   >>                                          17620000
   <<***********************>>                                          17630000
                                                                        17640000
   IF PARM.(15:1) THEN                                                  17650000
      BEGIN                                                             17660000
      TABLENR := DVRTABNR;                                              17670000
      IF NOT LOGICAL(CTAB0(41).(IO'CONVERTED:1)) THEN                   17680000
         BEGIN                                                          17690000
         MOVE BLINE := "I/O TABLES - already converted";                17700000
         PRINTLINE;                                                     17710000
         END                                                            17720000
      ELSE                                                              17730000
         BEGIN                                                          17740000
                                                                        17750000
         <<******************>>                                         17760000
         <<   DRIVER TABLE   >>                                         17770000
         <<******************>>                                         17780000
                                                                        17790000
         TABLENR := DVRTABNR;                                           17800000
         READDEVFILE( DEVDVR, DVRTAB, LENGTH);                          17810000
         IF <> THEN GO FAILURE;                                         17820000
         ZEROBUF( OLDTABLE, 6144);                                      17830000
         CNT := 1;                                                      17840000
         WHILE CNT <= HIGHESTLDEV DO                                    17850000
            BEGIN                                                       17860000
            DVR'INDEX := CNT*7;                                         17870000
            INDEX := CNT*6;                                             17880000
            OLDTABLE(INDEX).(0:9) := DVRDRTNUM;                         17890000
            OLDTABLE(INDEX).(9:7) := DVRUNITNUM;                        17900000
            OLDTABLE(INDEX+1).(0:1) := DVRCORERES;                      17910000
            OLDTABLE(INDEX+1).(1:3) := DVRCHANNUM;                      17920000
            OLDTABLE(INDEX+1).(7:1) := DVRDSBIT;                        17930000
            OLDTABLE(INDEX+1).(8:8) := DVRMASTERLDEV;                   17940000
            @BPNTR := @DVRNAME &LSL(1);                                 17950000
            IF BPNTR = "HIOTERM2" OR BPNTR = "HIOASLP2" THEN            17960000
               MOVE OLDTABLE(INDEX+2) := "HIOTERM0"                     17970000
            ELSE                                                        17980000
               MOVE OLDTABLE(INDEX+2) := DVRNAME,(4);                   17990000
            CNT := CNT+1;                                               18000000
            END;                                                        18010000
         FWRITEDIR( CONFFNUM, OLDTABLE, DVRTSIZE, 9D);                  18020000
         IF <> THEN                                                     18030000
            BEGIN                                                       18040000
            FERROR( CONFFNUM, CONFFILE);                                18050000
            GO FAILURE;                                                 18060000
            END;                                                        18070000
         LENGTH := (HIGHESTLDEV+1) * 6;                                 18080000
         STORE'TABLE'DISCADR( INFODVR, CONFFILEADR + 9D,                18090000
            LENGTH);                                                    18100000
                                                                        18110000
         <<*************************>>                                  18120000
         <<   CS DEFINATION TABLE   >>                                  18130000
         <<*************************>>                                  18140000
                                                                        18150000
         READDEVFILE( DEVCSDEF, NEWTABLE, LENGTH);                      18160000
         IF <> THEN GO FAILURE;                                         18170000
         FWRITEDIR( CONFFNUM, NEWTABLE, CSDEFTSIZE, 22D);               18180000
         IF <> THEN                                                     18190000
            BEGIN                                                       18200000
            FERROR( CONFFNUM, CONFFILE);                                18210000
            GO FAILURE;                                                 18220000
            END;                                                        18230000
         STORE'TABLE'DISCADR( INFOCSDEF, CONFFILEADR + 22D,             18240000
            CSDEFTSIZE);                                                18250000
                                                                        18260000
         <<********************************>>                           18270000
         <<   CS ADDITIONAL DRIVER TABLE   >>                           18280000
         <<********************************>>                           18290000
                                                                        18300000
         READDEVFILE( DEVCSDVR, NEWTABLE, LENGTH);                      18310000
         IF <> THEN GO FAILURE;                                         18320000
         FWRITEDIR( CONFFNUM, NEWTABLE, CSDVRTSIZE, 21D);               18330000
         IF <> THEN                                                     18340000
            BEGIN                                                       18350000
            FERROR( CONFFNUM, CONFFNUM);                                18360000
            GO FAILURE;                                                 18370000
            END;                                                        18380000
         STORE'TABLE'DISCADR( INFOCSDVR, CONFFILEADR + 21D,             18390000
            CSDVRTSIZE);                                                18400000
                                                                        18410000
         <<**************>>                                             18420000
         <<   CS TABLE   >>                                             18430000
         <<**************>>                                             18440000
                                                                        18450000
         TABLENR := CSNR;                                               18460000
         ZEROBUF( OLDTABLE, CSTABTSIZE);                                18470000
         READDEVFILE( DEVCSTAB, NEWTABLE, LENGTH);                      18480000
         IF <> THEN GO FAILURE;                                         18490000
                                                                        18500000
         << BUILD HEADER ENTRY >>                                       18510000
         MOVE OLDTABLE := NEWTABLE,(7);                                 18520000
         << BUILD NEW LDTX AREA >>                                      18530000
         INDEX := 7;                                                    18540000
         INDEX2 := 7;                                                   18550000
         I := 0;                                                        18560000
         WHILE I < INTEGER(NEWTABLE( 1)) DO                             18570000
            BEGIN                                                       18580000
            LEN := NEWTABLE( INDEX2);                                   18590000
            MOVE OLDTABLE( INDEX) := NEWTABLE( INDEX2),(4);             18600000
            OLDTABLE( INDEX+3).(8:8) := NEWTABLE( INDEX2+4);   <<C8456>>18610000
            MOVE OLDTABLE( INDEX+4) := NEWTABLE( INDEX2+5),(9);         18620000
            OLDTABLE( INDEX+13).(0:8) := NEWTABLE( INDEX2+14);          18630000
            OLDTABLE( INDEX+13).(8:8) := NEWTABLE( INDEX2+15).(8:8);    18640000
            MOVE OLDTABLE( INDEX+14) := NEWTABLE(INDEX2+16),(LEN-16);   18650000
            << UPDATE CSLDTX POINTER >>                                 18660000
            IF OLDTABLE( INDEX+14) <> 0 THEN                            18670000
               OLDTABLE( INDEX+14) := OLDTABLE( INDEX+14)-2;            18680000
            << UPDATE ID LIST POINTER >>                                18690000
            IF OLDTABLE( INDEX+15) <> 0 THEN                            18700000
               OLDTABLE( INDEX+15) := OLDTABLE( INDEX+15)-2;            18710000
            << UPDATE PHONE LIST POINTER >>                             18720000
            IF OLDTABLE( INDEX+16) <> 0 THEN                            18730000
               OLDTABLE( INDEX+16) := OLDTABLE( INDEX+16)-2;            18740000
            OLDTABLE( INDEX) := OLDTABLE( INDEX)-2;                     18750000
            OLDTABLE := OLDTABLE-2;                                     18760000
            INDEX2 := INDEX2+INTEGER(NEWTABLE( INDEX2));                18770000
            INDEX := INDEX+INTEGER(OLDTABLE( INDEX));                   18780000
            I := I+1;                                                   18790000
            END;                                                        18800000
         << BUILD NEW CS DRIVER ENTRIES >>                              18810000
         OLDTABLE(6) := INDEX;                                          18820000
         MOVE OLDTABLE( INDEX) := NEWTABLE( INDEX2),                    18830000
            (NEWTABLE-NEWTABLE(6));                                     18840000
         << CHECK IF CS DATA SEGMENT IS TOO BIG TO FIT IN CONFDATA >>   18850000
         IF OLDTABLE > CSTABTSIZE THEN                         <<C8456>>18860000
            BEGIN                                                       18870000
            MOVE BLINE := "CS DATA SEGMENT TOO LARGE TO CONVERT";       18880000
            PRINTLINE;                                                  18890000
            GOTO FAILURE;                                               18900000
            END;                                                        18910000
         ERROR := GET'DISC'SPACE( SYSDISC, DOUBLE(CSTABSECT),           18920000
            DISCADR);                                                   18930000
         IF ERROR <> 0 THEN                                             18940000
            BEGIN                                                       18950000
            MESSAGE( CSNR, GETDISCERR, ERROR);                          18960000
            GOTO FAILURE;                                               18970000
            END;                                                        18980000
         NEWDISCADR( INFOCSTAB) := DISCADR;                             18990000
         NEWTABLEN( INFOCSTAB) := CSTABSECT;                            19000000
         DISC( SYSDISC, WRITE, OLDTABLE, DISCADR, CSTABTSIZE);          19010000
         IF <> THEN GO FAILURE;                                         19020000
         STORE'TABLE'DISCADR( INFOCSTAB, DISCADR, OLDTABLE);            19030000
         CTAB0( 29) := OLDTABLE;                                        19040000
                                                                        19050000
         <<************************>>                                   19060000
         <<   DEVICE CLASS TABLE   >>                                   19070000
         <<************************>>                                   19080000
                                                                        19090000
         TABLENR := CLASSNR;                                            19100000
         READDEVFILE( DEVCLASS, CLASS, LENGTH);                         19110000
         IF LENGTH > 6144 THEN                                          19120000
            BEGIN                                                       19130000
            MOVE BLINE := "DEVICE CLASS TABLE TOO LARGE TO CONVERT";    19140000
            PRINTLINE;                                                  19150000
            GOTO FAILURE;                                               19160000
            END;                                                        19170000
         ZEROBUF( OLDTABLE, 6144);                                      19180000
         MFDS( NROFCLASSENTS, 40, 2, 1);                                19190000
         @PCLASS := @CLASS;                                             19200000
         @POLDTABLE := @OLDTABLE;                                       19210000
         CNT := 0;                                                      19220000
         WHILE CNT < NROFCLASSENTS DO                                   19230000
            BEGIN                                                       19240000
            MOVE POLDTABLE := PCLASS,(5),1;                             19250000
            @PCLASS := TOS;                                             19260000
            @POLDTABLE := TOS;                                          19270000
            @BPOLDTABLE := @POLDTABLE &LSL(1);                          19280000
            I := PCLASS;  << NR. OF LDEV'S >>                           19290000
            BPOLDTABLE := I;                                            19300000
            J := 1;                                                     19310000
            WHILE J <= I DO                                             19320000
               BEGIN                                                    19330000
               BPOLDTABLE(J) := PCLASS(J);                              19340000
               J := J+1;                                                19350000
               END;                                                     19360000
            @PCLASS := @PCLASS(J);                                      19370000
            @POLDTABLE := @BPOLDTABLE(J+1) &LSR(1);                     19380000
            CNT := CNT+1;                                               19390000
            END;                                                        19400000
         CLASSTABSIZE := @POLDTABLE-@OLDTABLE;                          19410000
         IF CLASSTABSIZE > DVCLTSIZE THEN                               19420000
            BEGIN                                                       19430000
            MOVE BLINE := "DEVICE CLASS TABLE TOO LARGE TO CONVERT";    19440000
            PRINTLINE;                                                  19450000
            GO FAILURE;                                                 19460000
            END;                                                        19470000
         ERROR := GET'DISC'SPACE( SYSDISC, DOUBLE(DVCLSECT),            19480000
            DISCADR);                                                   19490000
         IF ERROR <> 0 THEN                                             19500000
            BEGIN                                                       19510000
            MESSAGE( CLASSNR, GETDISCERR, ERROR);                       19520000
            GOTO FAILURE;                                               19530000
            END;                                                        19540000
         NEWDISCADR(CLASSNR) := DISCADR;                                19550000
         NEWTABLEN(CLASSNR) := DVCLSECT;                                19560000
         DISC( SYSDISC, WRITE, OLDTABLE, DISCADR, DVCLTSIZE);           19570000
         IF <> THEN GOTO FAILURE;                                       19580000
         CTAB0(CTAB0DCTSIZE) := CLASSTABSIZE;                           19590000
         STORE'TABLE'DISCADR( INFOCLASS, DISCADR, CLASSTABSIZE);        19600000
                                                                        19610000
         <<****************>>                                           19620000
         <<   LPDT TABLE   >>                                           19630000
         <<****************>>                                           19640000
                                                                        19650000
         TABLENR := LPDTNR;                                             19660000
         READDEVFILE( DEVLPDT, LPDT, LENGTH);                           19670000
         IF <> THEN GOTO FAILURE;                                       19680000
         ZEROBUF( OLDTABLE, 2048);                                      19690000
         <<    FORMAT HEADER    >>                                      19700000
         OLDTABLE := 2;                                                 19710000
         OLDTABLE.(0:8) := LPDT;                                        19720000
         <<    FORMAT TABLE    >>                                       19730000
         CNT := 1;                                                      19740000
         WHILE CNT <= HIGHESTLDEV DO                                    19750000
            BEGIN                                                       19760000
            INDEX := CNT*2;                                             19770000
            INDEX2 := CNT*4;                                            19780000
            OLDTABLE(INDEX) := LPDT(INDEX2) LAND %100000;               19790000
            OLDTABLE(INDEX+1) := LPDT(INDEX2+1);                        19800000
            CNT := CNT+1;                                               19810000
            END;                                                        19820000
         LENGTH := (HIGHESTLDEV+1) * 2; << CALUATE NEW LENGTH >>        19830000
         ERROR := GET'DISC'SPACE( SYSDISC, DOUBLE(LPDTSECT),            19840000
            DISCADR);                                                   19850000
         IF ERROR <> 0 THEN                                             19860000
            BEGIN                                                       19870000
            MESSAGE( LPDTNR, GETDISCERR, ERROR);                        19880000
            GOTO FAILURE;                                               19890000
            END;                                                        19900000
         NEWDISCADR( INFOLPDT) := DISCADR;                              19910000
         NEWTABLEN( INFOLPDT) := LPDTSECT;                              19920000
         DISC( SYSDISC, WRITE, OLDTABLE, DISCADR, LPDTTSIZE);  <<C8456>>19930000
         IF <> THEN GOTO FAILURE;                                       19940000
         LENGTH := (HIGHESTLDEV+1) * 2;                                 19950000
         STORE'TABLE'DISCADR( INFOLPDT, DISCADR, LENGTH);               19960000
                                                                        19970000
         <<***************>>                                            19980000
         <<   LDT TABLE   >>                                            19990000
         <<***************>>                                            20000000
                                                                        20010000
         TABLENR := LDTNR;                                              20020000
         READDEVFILE( DEVLDT, LDT, LENGTH);                             20030000
         IF <> THEN GOTO FAILURE;                                       20040000
         ZEROBUF( OLDTABLE, 5120);                                      20050000
         <<    FORMAT HEADER    >>                                      20060000
         OLDTABLE := 5;                                                 20070000
         OLDTABLE.(0:8) := LDT'NUM'ENTRIES;                             20080000
         OLDTABLE(1) := (HIGHESTLDEV+1) * 5; << CLASS TAB PTR >>        20090000
         OLDTABLE(2) := NROFCLASSENTS;                                  20100000
         OLDTABLE(3) := CLASSTABSIZE;                                   20110000
         <<    FORMAT TABLE    >>                                       20120000
         CNT := 1;                                                      20130000
         WHILE CNT <= HIGHESTLDEV DO                                    20140000
            BEGIN                                                       20150000
            LDT'INDEX := CNT*7;                                         20160000
            INDEX := CNT*5;                                             20170000
            OLDTABLE(INDEX+1).(0:8) := LDT'SPOOLER'PIN;                 20180000
            OLDTABLE(INDEX+1).(8:8) := LDT'CONTROL'Y'PIN;               20190000
            OLDTABLE(INDEX+2) := LDT(LDT'INDEX+2);                      20200000
            OLDTABLE(INDEX+3).(0:8) := LDT(LDT'INDEX+3).(0:8);          20210000
            OLDTABLE(INDEX+3).(8:8) := LDT'DFLT'OUT'DEV;                20220000
            OLDTABLE(INDEX+4).(7:1) := LDT'SPOOL'QUEUES;       <<*8428>>20230000
            OLDTABLE(INDEX+4).(0:7) := LDT'DFLT'TERM'TYPE;     <<*8428>>20240000
            CNT := CNT+1;                                               20250000
            END;                                                        20260000
         LENGTH := (HIGHESTLDEV+1) * 5; << CALUATE NEW LENGTH >>        20270000
         ERROR := GET'DISC'SPACE( SYSDISC, DOUBLE(LDTSECT),             20280000
            DISCADR);                                                   20290000
         IF ERROR <> 0 THEN                                             20300000
            BEGIN                                                       20310000
            MESSAGE( LDTNR, GETDISCERR, ERROR);                         20320000
            GOTO FAILURE;                                               20330000
            END;                                                        20340000
         NEWDISCADR( INFOLDT) := DISCADR;                               20350000
         NEWTABLEN( INFOLDT) := LDTSECT;                                20360000
         DISC( SYSDISC, WRITE, OLDTABLE, DISCADR, LDTTSIZE);   <<C8456>>20370000
         IF <> THEN GOTO FAILURE;                                       20380000
         LENGTH := (HIGHESTLDEV+1) * 5;                                 20390000
         STORE'TABLE'DISCADR( INFOLDT, DISCADR, LENGTH);                20400000
                                                                        20410000
         <<****************>>                                           20420000
         <<   LDTX TABLE   >>                                           20430000
         <<****************>>                                           20440000
                                                                        20450000
         TABLENR := LDTXNR;                                             20460000
         ZEROBUF( NEWTABLE, LDTXTSIZE);                                 20470000
         READDEVFILE( DEVLDTX, NEWTABLE, LENGTH);                       20480000
         IF <> THEN GO FAILURE;                                         20490000
         NEWTABLE := 5;                                                 20500000
         NEWTABLE.(0:8) := HIGHESTLDEV;                                 20510000
         NEWTABLE(1) := 0;                                              20520000
         ERROR := GET'DISC'SPACE( SYSDISC, DOUBLE(LDTXSECT),            20530000
            DISCADR);                                                   20540000
         IF ERROR <> 0 THEN                                             20550000
            BEGIN                                                       20560000
            MESSAGE( LDTXNR, GETDISCERR, ERROR);                        20570000
            GO FAILURE;                                                 20580000
            END;                                                        20590000
         NEWDISCADR( INFOLDTX) := DISCADR;                              20600000
         NEWTABLEN( INFOLDTX) := LDTXSECT;                              20610000
         DISC( SYSDISC, WRITE, NEWTABLE, DISCADR, LDTXTSIZE);           20620000
         IF <> THEN GOTO FAILURE;                                       20630000
         LENGTH := (HIGHESTLDEV+1) * 5;                                 20640000
         STORE'TABLE'DISCADR( INFOLDTX, DISCADR, LENGTH);               20650000
                                                                        20660000
         CTAB0(41).(IO'CONVERTED:1) := 0;                               20670000
         END;                                                           20680000
      END;                                                              20690000
                                                                        20700000
   <<***********************>>                                          20710000
   <<   CONVERT RIN TABLE   >>                                          20720000
   <<***********************>>                                          20730000
                                                                        20740000
   IF PARM.(13:1) THEN                                                  20750000
      BEGIN                                                             20760000
      TABLENR := RINNR;                                                 20770000
      IF NOT LOGICAL(CTAB0(41).(RIN'CONVERTED:1)) THEN                  20780000
         BEGIN                                                          20790000
         MOVE BLINE := "RIN TABLE - already converted";                 20800000
         PRINTLINE;                                                     20810000
         END                                                            20820000
      ELSE                                                              20830000
         BEGIN                                                          20840000
         OLDTABLEN( INFORIN) := INFO(23);                      <<C8456>>20850000
         DISCADR1 := INFO(18);                                          20860000
         DISCADR2 := INFO(19);                                          20870000
         OLDDISCADR( INFORIN) := DISCADR;                               20880000
         MFDS( LENGTH, 22, 1, 1);                                       20890000
         MFDS( RIN, 22, 0, LENGTH+4);                                   20900000
         NRRINS := RIN(1) / 3 -1;                                       20910000
         ZEROBUF( OLDTABLE, 4096);                                      20920000
         <<    FORMAT HEADER    >>                                      20930000
         OLDTABLE := RIN / 3 *2;                                        20940000
         OLDTABLE(1) := RIN(1) / 3 *2;                                  20950000
         <<    FORMAT TABLE    >>                                       20960000
         CNT := 1;                                                      20970000
         WHILE CNT <= NRRINS DO                                         20980000
            BEGIN                                                       20990000
            INDEX := CNT*2;                                             21000000
            INDEX2 := CNT*3;                                            21010000
            OLDTABLE(INDEX).(0:2) := RIN( INDEX2).(0:2);                21020000
            CASE OLDTABLE(INDEX).(0:2) OF                               21030000
               BEGIN                                                    21040000
               OLDTABLE(INDEX).(2:14) := RIN(INDEX2).(2:14) / 3 *2;     21050000
               ;                                                        21060000
               OLDTABLE(INDEX).(2:14) := RIN(INDEX2).(2:14)             21070000
                  + OLDTABLE(1);                                        21080000
               ;                                                        21090000
               END;                                                     21100000
            CNT := CNT+1;                                               21110000
            END;                                                        21120000
         SECONDARYLEN := RIN(RIN(1)+1) * 12 +4;                         21130000
         LENGTH := SECONDARYLEN + INTEGER(OLDTABLE(1)) + 4;             21140000
         DSEGNR := GETDATASEGC( LENGTH, 0);                             21150000
         IF <> THEN                                                     21160000
            BEGIN                                                       21170000
            MESSAGE( RINNR, GETDSEGERR, DSEGNR);                        21180000
            GO FAILURE;                                                 21190000
            END;                                                        21200000
         MTDS( DSEGNR, 0, OLDTABLE, OLDTABLE(1));                       21210000
         MDS( DSEGNR, OLDTABLE(1), 22, RIN(1), SECONDARYLEN);           21220000
         <<   FIXUP FREE LIST FOR SECONDARY TABLE   >>                  21230000
         J := OLDTABLE(1);  << NEW DISP >>                              21240000
         EXCHANGEDB( DSEGNR );                                          21250000
         I := RIN'(1);                                                  21260000
         WHILE RIN'(I) <> 0 DO                                          21270000
            BEGIN                                                       21280000
            RIN'(I) := RIN'(I) + J;                                     21290000
            I := RIN'(I);                                               21300000
            IF NOT(RIN'(1) <= I <= LENGTH) THEN                         21310000
               BEGIN                                                    21320000
               EXCHANGEDB( 0 ); << BACK TO STACK >>                     21330000
               MESSAGE( RINNR, BADLINKERR, -1);                         21340000
               GOTO FAILURE;                                            21350000
               END;                                                     21360000
            END;                                                        21370000
         EXCHANGEDB( 0 );  << XCH DB BACK TO STK >>                     21380000
         ERROR := GET'DISC'SPACE( SYSDISC, DOUBLE((LENGTH+127)/128),    21390000
            DISCADR);                                                   21400000
         IF ERROR <> 0 THEN                                             21410000
            BEGIN                                                       21420000
            MESSAGE( RINNR, GETDISCERR, ERROR);                         21430000
            GOTO FAILURE;                                               21440000
            END;                                                        21450000
         NEWDISCADR( INFORIN) := DISCADR;                               21460000
         NEWTABLEN( INFORIN) := (LENGTH+127)/128;                       21470000
         TOS := ATTACHIO( SYSDISC, 0, DSEGNR, 0, WRITE,                 21480000
            LENGTH, DISCADR1, DISCADR2, 1);                             21490000
         IOERRCHECK( *, *);                                             21500000
         RELDATASEG( DSEGNR);                                           21510000
         INFO(18) := DISCADR1;                                          21520000
         INFO(19) := DISCADR2;                                          21530000
         INFO(23) := (LENGTH+127)/128;                                  21540000
         CTAB0(41).(RIN'CONVERTED:1) := 0;                              21550000
         END;                                                           21560000
      END;                                                              21570000
                                                                        21580000
   <<**********************************>>                               21590000
   <<   CONVERT COLD LOAD INFO TABLE   >>                               21600000
   <<**********************************>>                               21610000
                                                                        21620000
   <<   If the I/O tables have been backward converted   >>             21630000
   <<   then the COLD LOAD INFO table will be converted  >>             21640000
   <<   to Q-MIT format(the TTDT and FDCTHDR entries     >>             21650000
   <<   will be deleted).                                >>             21660000
   IF NOT CTAB0(41).(IO'CONVERTED:1) THEN                               21670000
      BEGIN                                                             21680000
      ENTSIZE := IF CTAB0(41).(CL'CONVERTED:1) THEN 5 ELSE 4;           21690000
      MOVE NEWINFO := INFO,(INFO(1) - ENTSIZE*2),2;                     21700000
      MOVE * := INFO(INFO(1)),(INFO(2)*ENTSIZE);                        21710000
      NEWINFO(1) := NEWINFO(1) - ENTSIZE*2;                             21720000
      TTDT'CONVERTED := 0;                                              21730000
      END                                                               21740000
   ELSE                                                                 21750000
      MOVE NEWINFO := INFO,(256);                                       21760000
                                                                        21770000
   IF PARM.(14:1) THEN                                                  21780000
      BEGIN                                                             21790000
      TABLENR := CLINFONR;                                              21800000
      IF NOT LOGICAL(CTAB0(41).(CL'CONVERTED:1)) THEN                   21810000
         BEGIN                                                          21820000
         MOVE BLINE := "COLD LOAD INFO TABLE - already converted";      21830000
         PRINTLINE;                                                     21840000
         END                                                            21850000
      ELSE                                                              21860000
         BEGIN                                                          21870000
         ZEROBUF( NEWINFO, 256);                                        21880000
         MOVE NEWINFO := INFO,(INFO);                                   21890000
         << COPY DATA ENTRIES >>                               <<C8456>>21900000
         CNT := 0;                                             <<C8456>>21910000
         WHILE CNT < 12 DO                                     <<C8456>>21920000
            BEGIN                                              <<C8456>>21930000
            INDEX := INFO + CNT*4;                             <<C8456>>21940000
            INDEX2 := INFO + CNT*5;                            <<C8456>>21950000
            NEWINFO(INDEX) := INFO(INDEX2);                    <<C8456>>21960000
            NEWINFO(INDEX+1) := INFO(INDEX2+2);                <<C8456>>21970000
            NEWINFO(INDEX+2) := INFO(INDEX2+3);                <<C8456>>21980000
            NEWINFO(INDEX+3) := INFO(INDEX2+4);                <<C8456>>21990000
            CNT := CNT+1;                                      <<C8456>>22000000
            END;                                               <<C8456>>22010000
         << COPY CODE ENTRIES >>                               <<C8456>>22020000
         INDEX := INDEX+4;                                     <<C8456>>22030000
         INDEX2 := INFO(1);                                    <<C8456>>22040000
         NEWINFO(1) := INDEX;  << CODE POINTER >>              <<C8456>>22050000
         CNT := 0;                                             <<C8456>>22060000
         WHILE CNT < INFO(3) DO                                <<C8456>>22070000
            BEGIN                                              <<C8456>>22080000
            NEWINFO(INDEX) := INFO(INDEX2);                    <<C8456>>22090000
            NEWINFO(INDEX+1) := INFO(INDEX2+2);                <<C8456>>22100000
            NEWINFO(INDEX+2) := INFO(INDEX2+3);                <<C8456>>22110000
            NEWINFO(INDEX+3) := INFO(INDEX2+4);                <<C8456>>22120000
            INDEX := INDEX+4;                                  <<C8456>>22130000
            INDEX2 := INDEX2+5;                                <<C8456>>22140000
            CNT := CNT+1;                                      <<C8456>>22150000
            END;                                               <<C8456>>22160000
         CTAB0(41).(CL'CONVERTED:1) := 0;                               22170000
         END;                                                           22180000
      END;                                                              22190000
                                                                        22200000
   <<***************************>>                             <<A8781>>22210000
   <<   CONVERT ASOCIATE FILE   >>                             <<A8781>>22220000
   <<***************************>>                             <<A8781>>22230000
                                                               <<A8781>>22240000
   CONVERT'ASSOC;                                              <<A8781>>22250000
   IF <> THEN GO FAILURE;                                      <<A8781>>22260000
                                                               <<A8781>>22270000
   FWRITEDIR( CONFFNUM, CTAB0, 128, 0D);                                22280000
   IF <> THEN GOTO FAILURE2;                                            22290000
   DISC( SYSDISC, WRITE, NEWINFO, 28D, 256);                            22300000
   IF <> THEN GOTO FAILURE2;                                            22310000
                                                                        22320000
                                                                        22330000
   <<   COLD LOAD INFO UPDATED AND WRITTERN IT IS NOW SAFE   >>         22340000
   <<   TO RELEASE THE DISC SPACE FOR THE OLD TABLES.        >>         22350000
                                                                        22360000
   RETURN'SPACE( OLDDISCADR, OLDTABLEN);                                22370000
                                                                        22380000
   SUCCESSFUL := TRUE;                                                  22390000
   MOVE BLINE:=                                                         22400000
       ("SUCCESSFUL CONVERSION -- UPDATE/COLDLOAD WITH ",      <<*8066>>22410000
        "PRE-MPEV/E(G.00.00)");                                <<*8066>>22420000
   PRINTLINE;                                                           22430000
                                                                        22440000
   RETURN;                                                              22450000
FAILURE:                                                                22460000
   <<   CONVERSION FAILED! --- RESTORE SYSTEM TO ORGINAL CONDITION    >>22470000
                                                                        22480000
   RETURN'SPACE( NEWDISCADR, NEWTABLEN);                                22490000
                                                                        22500000
   MOVE BLINE := "CONVERSION FAILED.....NO MODIFITIONS DONE";           22510000
   PRINTLINE;                                                           22520000
   RETURN;                                                              22530000
                                                                        22540000
FAILURE2:                                                               22550000
   <<   CONVERSION FAILED! --- IN A *BAD* WAY >>                        22560000
                                                                        22570000
   RETURN'SPACE( NEWDISCADR, NEWTABLEN);                                22580000
                                                                        22590000
   MOVE BLINE := "CONVERSION FAILED.....DISC BOOT MAY BE DAMAGED";      22600000
   PRINTLINE;                                                           22610000
   MOVE BLINE := "BE SURE YOUR SYSTEM IS BACKED UP!";                   22620000
   PRINTLINE;                                                           22630000
   MOVE BLINE := "SHUTDOWN";                                            22640000
   PRINTLINE;                                                           22650000
   MOVE BLINE := "COLDLOAD  WITH   MPEV/E(G.00.00)";           <<*8066>>22660000
   PRINTLINE;                                                           22670000
END;   << BACKWARD'CONVERT >>                                           22680000
$CONTROL SEGMENT=MPEV'CONVERSION                                        22690000
PROCEDURE CONVERTING;                                                   22700000
   BEGIN                                                                22710000
   MFDS( NEWTABLE, 25, 0, 20);                                          22720000
   IF NEWTABLE(1).(8:8) = %32 THEN                                      22730000
      BEGIN << JMAT IN MPE IV FORMAT >>                                 22740000
      IF NEWTABLE(9) <> 1 OR NEWTABLE(11) <> 0 THEN                     22750000
         BEGIN                                                          22760000
         MOVE BLINE := "ALL OTHER JOBS AND SESSIONS MUST BE LOGGED OFF";22770000
         PRINTLINE;                                                     22780000
         TERMINATE;                                                     22790000
         END;                                                           22800000
      END                                                               22810000
   ELSE                                                                 22820000
      BEGIN << JMAT IN MPE V FORMAT >>                                  22830000
      IF NEWTABLE(11) <> 1 OR NEWTABLE(13) <> 0 THEN                    22840000
         BEGIN                                                          22850000
         MOVE BLINE := "ALL OTHER JOBS AND SESSIONS MUST BE LOGGED OFF";22860000
         PRINTLINE;                                                     22870000
         TERMINATE;                                                     22880000
         END;                                                           22890000
      END;                                                              22900000
                                                                        22910000
                                                                        22920000
   <<    INITIALIZE TABLES AND VARIABLES    >>                          22930000
   TABLENR := -1;                                                       22940000
                                                                        22950000
   CNT := 0;                                                            22960000
   WHILE CNT < NRTABLES DO                                              22970000
      BEGIN                                                             22980000
      OLDDISCADR(CNT) := 0D;                                            22990000
      OLDTABLEN(CNT) := 0;                                              23000000
      NEWDISCADR(CNT) := 0D;                                            23010000
      NEWTABLEN(CNT) := 0;                                              23020000
      CNT := CNT+1;                                                     23030000
      END;                                                              23040000
                                                                        23050000
    CASE SYSTEM'TYPE OF BEGIN                                           23060000
      FORWARD':=TRUE;   << MPE IV ==> MPE V/E >>                        23070000
      FORWARD':=TRUE;                                                   23080000
      FORWARD':=FALSE;  << MPE V/E ==> MPE IV >>                        23090000
      END;                                                              23100000
                                                                        23110000
   VERIFY'INTENT;                                                       23120000
                                                                        23130000
                                                                        23140000
   <<    READ COLD LOAD INFO TABLE   >>                                 23150000
   DISC( SYSDISC, READ, INFO, 28D, 256);                                23160000
   IF <> THEN TERMINATE;                                                23170000
                                                                        23180000
                                                                        23190000
   CONFFNUM := FOPEN( CONFFILE, 1, %324); << OPEN CONFDATA >>           23200000
   IF <> THEN                                                           23210000
      BEGIN                                                             23220000
      FERROR( CONFFNUM, CONFFILE);                                      23230000
      TERMINATE;                                                        23240000
      END;                                                              23250000
   FREADDIR( CONFFNUM, CTAB0, 128, 0D);                                 23260000
   IF <> THEN                                                           23270000
      BEGIN                                                             23280000
      FERROR( CONFFNUM, CONFFILE);                                      23290000
      TERMINATE;                                                        23300000
      END;                                                              23310000
                                                                        23320000
   IF FORWARD' THEN                                                     23330000
      FORWARD'CONVERT                                                   23340000
   ELSE                                                                 23350000
      BACKWARD'CONVERT;                                                 23360000
                                                                        23370000
   FCLOSE( CONFFNUM, 0, 0);                                             23380000
   FCLOSE( DEVFNUM, 0, 0);                                              23390000
                                                                        23400000
   IF SUCCESSFUL THEN                                                   23410000
      BEGIN                                                             23420000
      PAUSE( PAUSETIME); << WAIT FOR TERMINAL I/O TO COMPLETE >>        23430000
      ASSEMBLE( HALT 15 );                                              23440000
      END;                                                              23450000
  END;  << CONVERTING >>                                                23460000
$CONTROL SEGMENT=VERIFY'CONVERSION                                      23470000
INTEGER PROCEDURE THISCPU;                                              23480000
OPTION EXTERNAL;                                                        23490000
$PAGE "  V E R I F Y I N G  -  -  -  GET'SYTEM'TYPE"                    23500000
INTEGER PROCEDURE GET'SYSTEM'TYPE;                                      23510000
COMMENT                                                                 23520000
                                                                        23530000
  This procedure will return the type of conversion we are              23540000
verifying for.                                                          23550000
                                                                        23560000
Returns:                                                                23570000
                                                                        23580000
  0 --  Converting from MPE IV to MPE V (New microcode)                 23590000
  1 --  Converting from MPE IV to MPE V (Old microcode)                 23600000
  2 --  Converting from MPE V to MPE IV                                 23610000
                                                                        23620000
                                                                        23630000
ENDCOMMENT;                                                             23640000
BEGIN                                                                   23650000
INTEGER POINTER PCB = 3;                                                23660000
INTEGER SIZE,CPU;                                                       23670000
                                                                        23680000
SIZE := PCB(1);  << ENTRY SIZE CELL OF PCB HEADER >>                    23690000
IF SIZE = 16 THEN                                                       23700000
  BEGIN                                                                 23710000
  CPU:=THISCPU;                                                         23720000
  IF 0<=CPU<=3 THEN                                                     23730000
    BEGIN                                                               23740000
    MOVE BLINE:="*WARNING This CPU is not supported by";               23750000
    PRINTLINE;                                                          23760000
    MOVE BLINE:="         by MPE V.  Contact your SE  ";                23770000
    PRINTLINE;                                                          23780000
    GET'SYSTEM'TYPE:=-1;                                                23790000
    END                                                                 23800000
  ELSE IF CPU=4                                                         23810000
    THEN GET'SYSTEM'TYPE:=1                                             23820000
  ELSE GET'SYSTEM'TYPE:=0;                                              23830000
  END                                                                   23840000
ELSE IF SIZE = 21                                                       23850000
  THEN GET'SYSTEM'TYPE := 2                                             23860000
ELSE BEGIN                                                              23870000
  MOVE BLINE := "System Type not recognized";                           23880000
  PRINTLINE;                                                            23890000
  MOVE BLINE := "Contact your SE";                                      23900000
  PRINTLINE;                                                            23910000
  PRINTLINE;                                                            23920000
  TERMINATE;                                                            23930000
  END;                                                                  23940000
END;  << GET'SYSTEM'TYPE >>                                             23950000
$PAGE "  V E R I F Y I N G  -  -  -  GETSPACE"                          23960000
LOGICAL PROCEDURE GETSPACE(NRENTRIES, ENTRYSIZE, WHERE, B32);  <<V8273>>23970000
   VALUE NRENTRIES,ENTRYSIZE,WHERE,B32;                        <<V8273>>23980000
   INTEGER NRENTRIES, ENTRYSIZE, WHERE;                        <<V8273>>23990000
   LOGICAL B32;                                                <<V8273>>24000000
BEGIN  COMMENT                                                          24010000
                                                                        24020000
      WHERE                                                             24030000
        0    - ANYWHERE                                                 24040000
        1    - BANK 0 ONLY                                              24050000
        2    - BANK 0 ABOVE SYSGLOB                                     24060000
        3    - NOT BANK 0                                               24070000
        4    - TEMPORARY STORAGE                                        24080000
      B32                                                               24090000
        ALIGN ON A 32 WORD BOUNDARY                                     24100000
                                                                        24110000
COMMENT:  EACH CELL OF THE ARRAY ADDRESS POINTS TO THE FIRST            24120000
AVAILABLE WORD IN ITS ASSOCIATED BANK.  THUS, THE MEMORY                24130000
ADDRESSES THAT ARE LESS THAN ADDRESS(BANK#) ARE IN USE  AND             24140000
THE HIGHER ONES ARE FREE.  NOTE THAT ADDRESS(BANK#) IS THE              24150000
AMOUNT OF THE BANK IN USE WHILE -ADDRESS(BANK#) IS THE                  24160000
AMOUNT OF FREE SPACE IN THAT BANK.                                      24170000
;                                                                       24180000
                                                                        24190000
   DOUBLE  INITTABLE,                                                   24200000
           MEMADR = INITTABLE;                                          24210000
   INTEGER LOWLIMIT,                                                    24220000
           HIGHLIMIT;                                                   24230000
   LOGICAL DONE,                                                        24240000
           I,                                                           24250000
           TABSIZE,                                                     24260000
           BANK     = INITTABLE,                                        24270000
           COREADDR = INITTABLE+1,                                      24280000
           HCLIMIT,                                                     24290000
           LCLIMIT;                                                     24300000
   DEFINE TEMPORARY = (WHERE=4)#;                                       24310000
                                                                        24320000
   DEFINE LCMEMLOC = ADDRESS(NUM'BANKS+1)#;                             24330000
                                                                        24340000
   EQUATE SYSBASE = %1000;                                              24350000
                                                                        24360000
GETSPACE:=TRUE;                                                         24370000
   TABSIZE := ((NRENTRIES*ENTRYSIZE+3)/4)*4;                            24380000
   LOWLIMIT := IF WHERE = 3 THEN 1 ELSE 0;                              24390000
   HCLIMIT := 65530; << 65536-AMOUNT INITIAL NEEDS >>                   24400000
   HIGHLIMIT := IF WHERE = 1 OR WHERE = 2 THEN 1                        24410000
                                          ELSE NUM'BANKS;               24420000
   LCLIMIT := SYSBASE;                                                  24430000
                                                                        24440000
   DONE := FALSE;                                                       24450000
                                                                        24460000
   IF NOT ( 2 <= WHERE <= 3 ) THEN                                      24470000
      BEGIN  << SEARCH AREA BETWEEN 0 AND SYSBASE >>                    24480000
      BANK := 0;                                                        24490000
      COREADDR := IF B32 THEN (LCMEMLOC+31)/32*32 ELSE                  24500000
         LCMEMLOC;                                                      24510000
      IF COREADDR+TABSIZE <= LCLIMIT THEN                               24520000
         BEGIN                                                          24530000
         IF NOT TEMPORARY THEN                                          24540000
            LCMEMLOC := COREADDR + TABSIZE;                             24550000
         DONE := TRUE;                                                  24560000
         END;                                                           24570000
      END;                                                              24580000
                                                                        24590000
   I := LOWLIMIT;                                                       24600000
   WHILE (I <> LOGICAL(HIGHLIMIT)) AND NOT DONE DO                      24610000
      BEGIN                                                             24620000
      BANK := I;                                                        24630000
      COREADDR := IF B32 THEN (ADDRESS(BANK)+31)/32*32                  24640000
         ELSE ADDRESS(BANK);                                            24650000
      IF TABSIZE <= -(COREADDR+5) THEN                                  24660000
         BEGIN                 <<^INSURE 3 WDS FOR TRAILER>>            24670000
         IF BANK=0 AND (COREADDR+TABSIZE < HCLIMIT) OR                  24680000
            BANK <> 0 THEN                                              24690000
            BEGIN                                                       24700000
            DONE := TRUE;                                               24710000
            IF NOT TEMPORARY THEN                                       24720000
               ADDRESS(BANK) := COREADDR + TABSIZE;                     24730000
            END;                                                        24740000
         END;                                                           24750000
      I := I+1;                                                         24760000
      END;                                                              24770000
                                                                        24780000
   IF NOT DONE THEN  << OUT OF MEMORY >>                                24790000
     BEGIN                                                              24800000
      AMTMEMNEEDED := AMTMEMNEEDED+DOUBLE(TABSIZE);            <<V8273>>24810000
      IF WHERE=1 OR WHERE=2 THEN                               <<V8273>>24820000
         BANK0NEEDED := BANK0NEEDED+DOUBLE(TABSIZE);           <<V8273>>24830000
      GETSPACE := FALSE;                                       <<V8273>>24840000
     END;                                                               24850000
                                                                        24860000
   IF WHERE=1 OR WHERE=2 THEN                                           24870000
      BEGIN                                                             24880000
      TOS := HCLIMIT;                                                   24890000
      ASSEMBLE(NEG);                                                    24900000
      BANK0 := ADDRESS(BANK) + TOS;                                     24910000
      END;                                                              24920000
END;  << GETSPACE >>                                                    24930000
$PAGE "  V E R I F Y I N G  -  -  -  INIT'TABLES"                       24940000
LOGICAL PROCEDURE CHKMEMSIZE;                                  <<V8273>>24950000
COMMENT                                                                 24960000
                                                                        24970000
   This procedure will 1) input the first record of CONFDATA an         24980000
2) make sure that enough memory is configured on a conversion f         24990000
MPE V to MPE IV.                                                        25000000
                                                                        25010000
Inputs:                                                                 25020000
                                                                        25030000
  SYSTEM'TYPE  -- The type of system conversion (0 is IV to V (new),    25040000
                  1 is IV to V (old), 2 is V to IV)                     25050000
                                                                        25060000
Outputs:                                                                25070000
                                                                        25080000
  CONFFNUM     -- The CONFDATA file number                              25090000
                                                                        25100000
  CTAB0        -- Record 0 of the CONFDATA file.                        25110000
                                                                        25120000
  MEMSIZE      -- Configured size (in banks) of the system.             25130000
                                                                        25140000
Globals Used:                                                           25150000
                                                                        25160000
  CONFFILE     -- Array containing the name "CONFDATA"                  25170000
                                                                        25180000
ENDCOMMENT;                                                             25190000
BEGIN                                                                   25200000
ARRAY                                                          <<V8273>>25210000
   CTAB0(0:127);                                               <<V8273>>25220000
INTEGER                                                        <<V8273>>25230000
   MEMSIZE;                                                    <<V8273>>25240000
                                                               <<V8273>>25250000
                                                                        25260000
FREADDIR( CONFFNUM,CTAB0,128,0D);                                       25270000
IF <> THEN                                                              25280000
  BEGIN                                                                 25290000
  FERROR( CONFFNUM,CONFFILE);                                           25300000
  TERMINATE;                                                            25310000
  END;                                                                  25320000
IF MPEIV THEN                                                           25330000
  MEMSIZE := CTAB0(3) / 64                                              25340000
ELSE MEMSIZE := CTAB0(0) /64;                                           25350000
IF MPEV THEN                                                            25360000
  BEGIN                                                                 25370000
  IF MEMSIZE < 4 THEN                                                   25380000
    BEGIN                                                               25390000
    MOVE BLINE:="*WARNING  MPEV systems must have at";                 25400000
    PRINTLINE;                                                          25410000
    MOVE BLINE:="least 512 K bytes (256 K words) of main ";             25420000
    PRINTLINE;                                                          25430000
    MOVE BLINE:="memory configured on the system before ";              25440000
    PRINTLINE;                                                          25450000
    MOVE BLINE:="conversion is attempted";                              25460000
    PRINTLINE;                                                          25470000
    PRINTLINE;                                                          25480000
    CHKMEMSIZE := TRUE;                                        <<V8273>>25490000
    END;                                                                25500000
  END;                                                                  25510000
END;                                                                    25520000
$PAGE "  V E R I F Y I N G  -  -  -  DISC'SPACE'RETURN"                 25530000
$CONTROL SEGMENT=HELP                                          <<V8273>>25540000
PROCEDURE HELP'FACILITY;                                       <<V8273>>25550000
BEGIN                                                          <<V8273>>25560000
   BYTE ARRAY MSG(*) = PB :=                                   <<V8273>>25570000
"   This program must be run BEFORE updating a system from",0, <<V8273>>25580000
"Ciper (C/D.00.20), Q-mit (C/D.01.00), Q-delta1 (C/D.01.01)",0,<<V8273>>25590000
"Q-delta2 (C/D.01.02), or MPEV/P (E/F.00.00), to MPEV/E.",0,   <<V8273>>25600000
"This program must be run again on MPE V/E, if you wish to",0, <<V8273>>25610000
"return to one of the above MPE IV systems.  The following",0, <<V8273>>25620000
"tables will be converted to MPE V/E format",0,0,              <<V8273>>25630000
"I/O TABLES",0,0,                                              <<V8273>>25640000
"CS Table",0,"CS Def Table",0,"CS additional driver table",0,  <<V8273>>25650000
"Driver Table",0,"Terminal Type Descriptor Table",0,           <<V8273>>25660000
"Device Class Table",0,"LPDT",0,"LDT",0,"LDTX",0,              <<V8273>>25670000
"Device Class Table Header",0,0,                               <<V8273>>25680000
"OTHER TABLES",0,0,                                            <<V8273>>25690000
"RIN Table",0,"Cold Load Information Table",0,                 <<V8273>>25700000
"CONFDATA FILE",0,"Sysdump/Initial Communication Table",0,0,   <<V8273>>25710000
"DRIVER REPLACEMENT",0,0,                                      <<V8273>>25720000
"MPE V    HIOTERM0  TYPE 16  -->  HIOTERM2",0,                 <<V8273>>25730000
"         HIOTERM0  TYPE 32  -->  HIOASLP2",0,                 <<V8273>>25740000
"MPE IV   HIOTERM2           -->  HIOTERM0",0,                 <<V8273>>25750000
"         HIOASLP2           -->  HIOTERM0",0,0,               <<V8273>>25760000
"PURGED UTILITIES",0,0,                                        <<V8273>>25770000
"      CONVERSION TO",0,                                       <<V8273>>25780000
"    MPE V      MPE IV",0,0,                                   <<V8273>>25790000
"  RECOVER2   RECOVER5",0,                                     <<A8781>>25800000
"  DPAN4      DPAN5",0,                                        <<V8273>>25810000
"  LISTLOG2   LISTLOG5",0,                                     <<V8273>>25820000
"  LISTEQ2    LISTEQ5",0,                                      <<V8273>>25830000
"  DISKED2    DISKED5",0,                                      <<V8273>>25840000
"  LISTDIR2   LISTDIR5",0,                                     <<V8273>>25850000
"  SPOOK      SPOOK5",0,                                       <<V8273>>25860000
"  ASOCTABL   ASOCTBL5",0,                                     <<V8273>>25870000
"  ATPDSM     TERMDSM",0,                                      <<A8781>>25880000
"  FREE2      FREE5",0,0,                                      <<V8273>>25890000
"The PCONVERT program requires SM capability, and the logon",0,<<V8273>>25900000
"must be MANAGER.SYS,PUB.  No other users are allowed to be",0,<<V8273>>25910000
"logged on during the conversion.   Upon successful",0,        <<V8273>>25920000
"conversion the system will HALT and an update to the",0,      <<V8273>>25930000
"new/old system MUST be performed.  The syntax is as follows:",<<V8273>>25940000
0,0,                                                           <<V8273>>25950000
":RUN PCONVERT",0,0,                                           <<V8273>>25960000
"PCONVERT will automaticly determine whether a forward or",0,  <<V8273>>25970000
"backward conversion is required.  PCONVERT executed on a",0,  <<V8273>>25980000
"MPE IV or MPE V/P system will convert the table structures",0,<<V8273>>25990000
"to MPE V/E format.  PCONVERT executed on a MPE V/E system",0, <<V8273>>26000000
"will convert the table structures to MPE IV format.",0,0,     <<V8273>>26010000
"VERIFICATION",0,0,                                            <<V8273>>26020000
"(1)  Will check if this CPU model will support MPE V/E.",0,0, <<V8273>>26030000
"(2)  Will check if there is enough main memory to support",0, <<V8273>>26040000
"     MPE V/E.",0,0,                                           <<V8273>>26050000
"(3)  Will check if there is enough disc space to update to",0,<<V8273>>26060000
"     MPE V/E.",0,0,                                           <<V8273>>26070000
"(4)  Will check if any non-standard drivers are configured.", <<V8273>>26080000
0,"     These devices should be deleted from the",             <<V8273>>26090000
" configuration",0,"     before the update.",0,0,              <<V8273>>26100000
"(5)  Will check if core resident tables will fit in main",0,  <<V8273>>26110000
"     memory.",0,0,                                            <<V8426>>26120000
"(6)  On backward conversion, will check if any tables are",0, <<V8273>>26130000
"     over MPE IV maximums.",0,0,                              <<V8273>>26140000
"(7)  On backward conversion, will check if directory was",0,  <<V8273>>26150000
"     expanded, if so an update must be done to a MIT",0,      <<V8273>>26160000
"     that has the directory patches installed.",0,0,          <<V8273>>26170000
"Running PCONVERT will do two things:",0,0,                    <<V8273>>26180000
"(1)  It will first go through a verification process,",0,     <<V8273>>26190000
"     checking to see if the table conversion can be done;",0, <<V8273>>26200000
"(2)  and it will then perform the actual table conversion.",0,<<V8273>>26210000
0,                                                             <<V8273>>26220000
"There are five different options that can be specified on",0, <<V8273>>26230000
"the run of PCONVERT.",0,0,                                    <<V8273>>26240000
"(1)  :RUN PCONVERT,VERIFY",0,                                 <<V8273>>26250000
"     This option forces a VERIFY only.  The normal",0,        <<V8273>>26260000
"     security checking does not apply to this option.",0,0,   <<V8273>>26270000
"(2)  :RUN PCONVERT,CONVERT",0,                                <<V8273>>26280000
"     This option forces a conversion without verification.",0,<<V8273>>26290000
"     This may used when your tables are over MPE IV",0,       <<V8273>>26300000
"     maximums during a conversion backwards and you plan",0,  <<V8273>>26310000
"     to do a COLDLOAD for example.",0,0,                      <<V8273>>26320000
"(3)  :RUN PCONVERT,FORWD",0,                                  <<V8273>>26330000
"     This option forces a forward conversion without",0,      <<V8426>>26340000
"     verification.",0,0,                                      <<V8426>>26350000
"(4)  :RUN PCONVERT,BACKWD",0,                                 <<V8273>>26360000
"     This option forces a backward conversion without",0,     <<V8426>>26370000
"     verification.",0,0,                                      <<V8426>>26380000
"(5)  :RUN PCONVERT,HELP",0,                                   <<V8273>>26390000
"     This help facility.",0,                                  <<V8273>>26400000
   0,255; << terminator >>                                     <<V8273>>26410000
                                                               <<V8273>>26420000
   INTEGER                                                     <<V8273>>26430000
      CNT   := 0,                                              <<V8273>>26440000
      COL   := 0;                                              <<V8273>>26450000
   BYTE ARRAY                                                  <<V8273>>26460000
      CHAR(0:1) = Q;                                           <<V8273>>26470000
                                                               <<V8273>>26480000
   SUBROUTINE NEXTCHAR;                                        <<V8273>>26490000
   BEGIN                                                       <<V8273>>26500000
      MOVE CHAR := MSG(CNT),(1);                               <<V8273>>26510000
      CNT := CNT+1;                                            <<V8273>>26520000
   END;                                                        <<V8273>>26530000
                                                               <<V8273>>26540000
   NEXTCHAR;                                                   <<V8273>>26550000
   WHILE CHAR <> 255 DO                                        <<V8273>>26560000
      BEGIN                                                    <<V8273>>26570000
      COL := 0;                                                <<V8273>>26580000
      WHILE CHAR <> 0 DO                                       <<V8273>>26590000
         BEGIN                                                 <<V8273>>26600000
         BLINE(COL) := CHAR;                                   <<V8273>>26610000
         COL := COL+1;                                         <<V8273>>26620000
         NEXTCHAR;                                             <<V8273>>26630000
         END;                                                  <<V8273>>26640000
      PRINTLINE;                                               <<V8273>>26650000
      NEXTCHAR;                                                <<V8273>>26660000
      END;                                                     <<V8273>>26670000
END;                                                           <<V8273>>26680000
$CONTROL SEGMENT=VERIFY'CONVERSION                             <<V8273>>26690000
LOGICAL PROCEDURE CHKMPE4MAX;                                  <<V8273>>26700000
BEGIN                                                          <<V8273>>26710000
   ARRAY TABLES(*) = PB :=                                     <<V8273>>26720000
   << TABLE NAME                 CONFWD   MPE4     MPE5 >>     <<V8273>>26730000
      "LOGICAL DEVICES       ",   127,     255,     999,       <<V8273>>26740000
      "CST                   ",     0,     192,    2048,       <<V8273>>26750000
      "CSTX                  ",     5,    8191,    8191,       <<V8273>>26760000
      "DST                   ",     1,    1024,    4096,       <<V8273>>26770000
      "PCB                   ",     2,     256,    1024,       <<V8273>>26780000
      "I/O QUEUE             ",     3,     255,    1300,       <<V8273>>26790000
      "DISC REQUEST QUEUE    ",    44,     255,     900,       <<V8273>>26800000
      "TBUF                  ",     4,      99,      99,       <<V8273>>26810000
      "SBUF                  ",    12,     253,     253,       <<V8273>>26820000
      "SWAP                  ",    47,    2048,    5400,       <<V8273>>26830000
      "PRIMARY MESSAGE       ",    46,     255,    1023,       <<V8273>>26840000
      "SECONDARY MESSAGE     ",    48,     255,    1023,       <<V8273>>26850000
      "SPECIAL REQUEST       ",    45,     255,    2048,       <<V8273>>26860000
      "ICS                   ",     6,    2048,    4096,       <<V8273>>26870000
      "UCOP                  ",     7,     256,    1024,       <<V8273>>26880000
      "TIMER REQUEST LIST    ",     9,     255,    1023,       <<V8273>>26890000
      "BREAKPOINT            ",     8,     255,    1024,       <<V8273>>26900000
      "USERS PER LOG PROCESS ",    43,     128,     256,       <<V8273>>26910000
      "MAX SESSIONS          ",    40,     255,     500,       <<V8273>>26920000
      "MAX JOBS              ",    41,     255,     500,       <<V8273>>26930000
      "MAX CONCURRENT PGMS   ",    13,     127,     511,       <<V8273>>26940000
      "MAX CODE SEGS/PROCESS ",    31,      63,     255,       <<V8273>>26950000
      0;                                                       <<V8273>>26960000
   EQUATE                                                      <<V8273>>26970000
      NAME       = 0,                                          <<V8273>>26980000
      NAMESIZE   = 11,                                         <<V8273>>26990000
      CONFWD     = NAMESIZE,                                   <<V8273>>27000000
      MPE4       = CONFWD+1,                                   <<V8273>>27010000
      MPE5       = MPE4+1,                                     <<V8273>>27020000
      ENTRYSIZE  = MPE5+1;                                     <<V8273>>27030000
   INTEGER                                                     <<V8273>>27040000
      INX    := 0;                                             <<V8273>>27050000
   LOGICAL                                                     <<V8273>>27060000
      NOHDR  := TRUE;                                          <<V8273>>27070000
   LOGICAL                                                     <<V8273>>27080000
      FAILED = CHKMPE4MAX;                                     <<V8273>>27090000
   ARRAY                                                       <<V8273>>27100000
      COMM(0:127),                                             <<V8273>>27110000
      CTAB(0:127);                                             <<V8273>>27120000
                                                               <<V8273>>27130000
   DISC( SYSDISC, READ, COMM, 31D, 128);                       <<V8273>>27140000
   IF <> THEN TERMINATE;                                       <<V8273>>27150000
                                                               <<V8273>>27160000
   FREADDIR( CONFFNUM, CTAB, 128, 1D);                         <<V8273>>27170000
   IF <> THEN                                                  <<V8273>>27180000
      BEGIN                                                    <<V8273>>27190000
      FERROR( CONFFNUM, CONFFILE);                             <<V8273>>27200000
      TERMINATE;                                               <<V8273>>27210000
      END;                                                     <<V8273>>27220000
                                                               <<V8273>>27230000
   IF CTAB(21) > 6112 THEN                                     <<V8273>>27240000
      BEGIN                                                    <<V8273>>27250000
      MOVE BLINE := ("*WARNING -- DIRECTORY IS GREATER",      <<V8273>>27260000
         " THAN 6112 SECTORS");                                <<V8273>>27270000
      PRINTLINE;                                               <<V8273>>27280000
      MOVE BLINE := ("   You must UPDATE with one",            <<V8273>>27290000
         " of the following MITS");                            <<V8273>>27300000
      PRINTLINE;                                               <<V8273>>27310000
      MOVE BLINE := "      MPEV/P (E.B0.00)";                  <<V8273>>27320000
      PRINTLINE;                                               <<V8273>>27330000
      MOVE BLINE := "      MPEV/P WITH DIRECTORY PATCHES";     <<V8273>>27340000
      PRINTLINE;                                               <<V8273>>27350000
      MOVE BLINE := "      Q-MIT WITH DIRECTORY PATCHES";      <<V8273>>27360000
      PRINTLINE;                                               <<V8273>>27370000
      MOVE BLINE := "      CONSULT WITH YOUR LOCAL SE";        <<V8273>>27380000
      PRINTLINE;                                               <<V8273>>27390000
      PRINTLINE;                                               <<V8273>>27400000
      END;                                                     <<V8273>>27410000
                                                               <<V8273>>27420000
   << KLUDGE TO CHECK FOR HIGHEST LDEV >>                      <<V8273>>27430000
   CTAB(127) := COMM(8); << HIGHEST LDEV >>                    <<V8273>>27440000
                                                               <<V8273>>27450000
   INX := 0;                                                   <<V8273>>27460000
   WHILE TABLES(INX+NAME) <> 0 DO                              <<V8273>>27470000
      BEGIN                                                    <<V8273>>27480000
      IF CTAB( TABLES(INX+CONFWD)) > TABLES(INX+MPE4) THEN     <<V8273>>27490000
         BEGIN                                                 <<V8273>>27500000
         IF NOHDR THEN                                         <<V8273>>27510000
            BEGIN                                              <<V8273>>27520000
            FAILED := TRUE;                                    <<V8273>>27530000
            NOHDR := FALSE;                                    <<V8273>>27540000
            MOVE BLINE := ("*WARNING -- THE FOLLOWING TABLES",<<V8273>>27550000
               " ARE OVER PRE-MPEV/E MAXIMUMS");               <<V8273>>27560000
            PRINTLINE;                                         <<V8273>>27570000
            PRINTLINE;                                         <<V8273>>27580000
            MOVE BLINE := ("TABLE NAME             CURRENT",   <<V8273>>27590000
               " SIZE   PRE-MPEV/E MAX");                      <<V8273>>27600000
            PRINTLINE;                                         <<V8273>>27610000
            END;                                               <<V8273>>27620000
         MOVE LINE := TABLES(INX+NAME),(NAMESIZE);             <<V8273>>27630000
         ASCII( CTAB(TABLES(INX+CONFWD)),-10,BLINE(31));       <<V8273>>27640000
         ASCII( TABLES(INX+MPE4),-10,BLINE(47));               <<V8273>>27650000
         PRINTLINE;                                            <<V8273>>27660000
         END;                                                  <<V8273>>27670000
      INX := INX+ENTRYSIZE;                                    <<V8273>>27680000
      END;                                                     <<V8273>>27690000
                                                               <<V8273>>27700000
   IF FAILED THEN PRINTLINE;                                   <<V8273>>27710000
                                                               <<V8273>>27720000
END; <<CHKMPE4MAX>>                                            <<V8273>>27730000
                                                               <<V8273>>27740000
LOGICAL PROCEDURE CHKDISCUTIL;                                 <<V8273>>27750000
BEGIN                                                          <<V8273>>27760000
   DOUBLE ARRAY SIZES(*) = PB :=                               <<V8273>>27770000
      14000D,      << SYSTEM SL            >>                  <<V8273>>27780000
       2000D,      << SYSTEM PROGRAMS      >>                  <<V8273>>27790000
       1000D,      << NEW CONVERTED TABLES >>                  <<V8273>>27800000
          0D;      << TERMINATOR           >>                  <<V8273>>27810000
   DOUBLE ARRAY                                                <<V8273>>27820000
      DISCADR(0:19); << HOLDS DISC ADDRESSES OF AQUIRED SPACE>><<V8273>>27830000
   DOUBLE                                                      <<V8273>>27840000
      AMTNEEDED;                                               <<V8273>>27850000
   INTEGER                                                     <<V8273>>27860000
      FAILED = CHKDISCUTIL,                                    <<V8273>>27870000
      STATUS,                                                  <<V8273>>27880000
      CNT;                                                     <<V8273>>27890000
                                                               <<V8273>>27900000
   ZEROBUF( DISCADR, 40);                                      <<V8273>>27910000
                                                               <<V8273>>27920000
   << GET DISC SPACE >>                                        <<V8273>>27930000
   CNT := 0;                                                   <<V8273>>27940000
   WHILE SIZES(CNT) <> 0D DO                                   <<V8273>>27950000
      BEGIN                                                    <<V8273>>27960000
      STATUS :=GET'DISC'SPACE(SYSDISC,SIZES(CNT),DISCADR(CNT));<<V8273>>27970000
      IF STATUS <> 0 THEN DISCADR(CNT) := 0D;                  <<V8273>>27980000
      CNT := CNT+1;                                            <<V8273>>27990000
      END;                                                     <<V8273>>28000000
                                                               <<V8273>>28010000
   << RETURN DISC SPACE, COMPUTE AMOUNT NEEDED >>              <<V8273>>28020000
   AMTNEEDED := 0D;                                            <<V8273>>28030000
   CNT := 0;                                                   <<V8273>>28040000
   WHILE SIZES(CNT) <> 0D DO                                   <<V8273>>28050000
      BEGIN                                                    <<V8273>>28060000
      IF DISCADR(CNT) <> 0D THEN                               <<V8273>>28070000
         RETURN'DISC'SPACE(SYSDISC,DISCADR(CNT),SIZES(CNT))    <<V8273>>28080000
      ELSE                                                     <<V8273>>28090000
         AMTNEEDED := AMTNEEDED + SIZES(CNT);                  <<V8273>>28100000
      CNT := CNT+1;                                            <<V8273>>28110000
      END;                                                     <<V8273>>28120000
                                                               <<V8273>>28130000
   IF AMTNEEDED > 0D THEN                                      <<V8273>>28140000
      BEGIN                                                    <<V8273>>28150000
      FAILED := TRUE;                                          <<V8273>>28160000
      MOVE BLINE := ("*WARNING -- This system does not have", <<V8273>>28170000
         " enough disc space");                                <<V8273>>28180000
      PRINTLINE;                                               <<V8273>>28190000
      MOVE BLINE := "   on LDEV 1 to convert to MPE V/E";      <<V8273>>28200000
      PRINTLINE;                                               <<V8273>>28210000
      MOVE BLINE := "   You need an additional ",2;            <<V8273>>28220000
      TOS := TOS + DASCII( AMTNEEDED, 10, BPS0);               <<V8273>>28230000
      MOVE * := " sectors of contiguous disc space";           <<V8273>>28240000
      PRINTLINE;                                               <<V8273>>28250000
      PRINTLINE;                                               <<V8273>>28260000
      END;                                                     <<V8273>>28270000
                                                               <<V8273>>28280000
END; <<CHKDISCUTIL>>                                           <<V8273>>28290000
INTEGER PROCEDURE DSTSIZE( DSTN);                              <<V8273>>28300000
   VALUE DSTN;                                                 <<V8273>>28310000
   INTEGER DSTN;                                               <<V8273>>28320000
BEGIN                                                          <<V8273>>28330000
   DSTSIZE := ABS(ABS(2)+DSTN*4).(3:13)*4;                     <<V8273>>28340000
END;                                                           <<V8273>>28350000
LOGICAL PROCEDURE CKIOTABLES( HLDEV, HDRT, NRTERMS);           <<V8273>>28360000
   VALUE HLDEV, HDRT;                                          <<V8273>>28370000
   INTEGER HLDEV, HDRT, NRTERMS;                               <<V8273>>28380000
BEGIN                                                          <<V8273>>28390000
   INTEGER ARRAY DRIVERS(*) = PB :=                            <<V8273>>28400000
    << DVR NAME    ILT 4   DIT 4   ILT 5   DIT 5 >>            <<V8273>>28410000
                                                               <<V8273>>28420000
      "HIOASLP0",     20,     16,     26,     17,              <<V8426>>28430000
      "HIOASLP2",    298,     37,    220,     17,              <<V8426>>28440000
      "HIOCDRD0",    100,     12,    187,     13,              <<V8426>>28450000
      "HIOCIPR0",     62,     13,     63,     13,              <<V8426>>28460000
      "HIOCTAP0",    166,     27,    166,     28,              <<V8426>>28470000
      "HIOFLOP0",    266,     25,    266,     27,              <<V8426>>28480000
      "HIOLPRT0",     90,     11,     91,     14,              <<V8426>>28490000
      "HIOLPRT1",    112,     11,    113,     12,              <<V8426>>28500000
      "HIOLPRT2",    142,     11,    143,     14,              <<V8426>>28510000
      "HIOMDSC1",    194,     37,    194,     38,              <<V8426>>28520000
      "HIOMDSC2",    162,     27,    162,     30,              <<V8426>>28530000
      "HIOPPRT0",     54,     33,     55,     34,              <<V8426>>28540000
      "HIOTAPE0",    122,     13,    122,     14,              <<V8426>>28550000
      "HIOTAPE1",    145,     14,    145,     15,              <<V8426>>28560000
      "HIOTAPE2",    171,     14,    171,     14,              <<V8426>>28570000
      "HIOTEPE0",    246,     51,    246,     51,              <<V8426>>28580000
      "HIOTERM0",    298,     37,    220,     21,              <<V8426>>28590000
      "HIOTERM1",     20,     20,     26,     21,              <<V8426>>28600000
      "HIOTERM2",    298,     37,    220,     21,              <<V8426>>28610000
      "IODS0   ",      0,     23,      0,     30,              <<V8426>>28620000
      "IODSTRM0",      0,     18,      0,     24,              <<V8426>>28630000
      "IODSTRMX",      0,     21,      0,     27,              <<V8426>>28640000
      "IODSX   ",      0,     45,      0,     50,              <<V8426>>28650000
      "IOINP0  ",     14,    216,     14,    219,              <<V8426>>28660000
      "IOM3270 ",      0,     18,      0,     21,              <<V8426>>28670000
      "IOMCONS0",      0,     14,      0,     16,              <<V8426>>28680000
      "IOMPLP0 ",      0,     14,      0,     14,              <<V8426>>28690000
      "IOMPNLP0",      0,     14,      0,     16,              <<V8426>>28700000
      "IOMPS0  ",      0,     22,      0,     22,              <<V8426>>28710000
      "IOMPTRM0",      0,     14,      0,     14,              <<V8426>>28720000
      "IOMRDR0 ",      0,     14,      0,     16,              <<V8426>>28730000
      "IOMRJE0 ",      0,     26,      0,     41,              <<V8426>>28740000
      "IOMRJE1 ",      0,     15,      0,     16,              <<V8426>>28750000
      "IONRDR0 ",      0,     11,      0,     13,              <<A8600>>28760000
      "IOPAD0  ",      0,     63,      0,     66,              <<V8426>>28770000
      "IOPAD1  ",      0,     63,      0,     66,              <<A8600>>28780000
      "ZZ"; << TERMINATOR >>                                   <<V8273>>28790000
   BYTE ARRAY                                                  <<V8273>>28800000
      BDRIVERS(*) = DRIVERS;                                   <<V8273>>28810000
   EQUATE                                                      <<V8273>>28820000
      ILTSIZE4   = 4,                                          <<V8273>>28830000
      DITSIZE4   = ILTSIZE4+1,                                 <<V8273>>28840000
      ILTSIZE5   = DITSIZE4+1,                                 <<V8273>>28850000
      DITSIZE5   = ILTSIZE5+1,                                 <<V8273>>28860000
      ENTRYSIZE  = DITSIZE5+1;                                 <<V8273>>28870000
   EQUATE                                                      <<V8273>>28880000
      ANYWHERE   = 0,                                          <<V8273>>28890000
      INBANK0    = 1,                                          <<V8273>>28900000
      ABOVE      = 2,  << BANK0 ABOVE SYSGLOB >>               <<V8273>>28910000
      NOTBANK0   = 3,                                          <<V8273>>28920000
      TEMPORARY  = 4,                                          <<V8273>>28930000
      B32        = TRUE, << ALIGN ON 32 WORD BND >>            <<V8273>>28940000
      NOTB32     = FALSE;                                      <<V8273>>28950000
   INTEGER                                                     <<V8273>>28960000
      DRT,                                                     <<V8273>>28970000
      UNIT,                                                    <<V8273>>28980000
      LDEV,                                                    <<V8273>>28990000
      COL,                                                     <<V8273>>29000000
      ILTSIZE,                                                 <<V8273>>29010000
      DITSIZE,                                                 <<V8273>>29020000
      UNITS,                                                   <<V8273>>29030000
      INX,                                                     <<V8273>>29040000
      DVR'INDEX;                                               <<V8273>>29050000
   ARRAY                                                       <<V8273>>29060000
      BADLDEVS(0:63), << BIT MAP - 1024 BITS >>                <<V8273>>29070000
      NAMEW(0:3);                                              <<V8273>>29080000
   BYTE ARRAY                                                  <<V8273>>29090000
      NAME(*) = NAMEW;                                         <<V8273>>29100000
   LOGICAL                                                     <<V8273>>29110000
      DONE,                                                    <<V8273>>29120000
      PSEUDODVR,                                               <<V8273>>29130000
      FAILED = CKIOTABLES;                                     <<V8273>>29140000
   INTEGER                                                     <<V8273>>29150000
      DVRDRT,                                                  <<V8273>>29160000
      DVRUNIT;                                                 <<V8273>>29170000
                                                               <<V8273>>29180000
   SUBROUTINE SETDVRVALUES;                                    <<V8273>>29190000
   BEGIN                                                       <<V8273>>29200000
      IF SYSTEM'TYPE = 2 THEN                                  <<V8273>>29210000
         BEGIN                                                 <<V8273>>29220000
         DVR'INDEX := LDEV*7;                                  <<V8273>>29230000
         DVRDRT := DVRDRTNUM;                                  <<V8273>>29240000
         DVRUNIT := DVRUNITNUM;                                <<V8273>>29250000
         PSEUDODVR := DVRDSBIT;                                <<V8273>>29260000
         MOVE NAMEW := DVRNAME,(4);                            <<V8273>>29270000
         END                                                   <<V8273>>29280000
      ELSE                                                     <<V8273>>29290000
         BEGIN                                                 <<V8273>>29300000
         DVR'INDEX := LDEV*6;                                  <<V8273>>29310000
         DVRDRT := DVRTAB(DVR'INDEX).(0:9);                    <<V8273>>29320000
         DVRUNIT := DVRTAB(DVR'INDEX).(9:7);                   <<V8273>>29330000
         PSEUDODVR := DVRTAB(DVR'INDEX+1).(7:1);               <<V8273>>29340000
         MOVE NAMEW := DVRTAB(DVR'INDEX+2),(4);                <<V8273>>29350000
         END;                                                  <<V8273>>29360000
   END;                                                        <<V8273>>29370000
                                                               <<V8273>>29380000
   LOGICAL SUBROUTINE SEARCH;                                  <<V8273>>29390000
   BEGIN                                                       <<V8273>>29400000
      INX := 0;                                                <<V8273>>29410000
      DONE := FALSE;                                           <<V8273>>29420000
                                                               <<V8273>>29430000
      DO BEGIN                                                 <<V8273>>29440000
         IF NAME = BDRIVERS(INX*2),(8) THEN                    <<V8273>>29450000
            BEGIN                                              <<V8273>>29460000
            IF SYSTEM'TYPE = 2 THEN                            <<V8273>>29470000
               BEGIN                                           <<V8273>>29480000
               ILTSIZE := DRIVERS(INX+ILTSIZE4);               <<V8273>>29490000
               DITSIZE := DRIVERS(INX+DITSIZE4);               <<V8273>>29500000
               END                                             <<V8273>>29510000
            ELSE                                               <<V8273>>29520000
               BEGIN                                           <<V8273>>29530000
               ILTSIZE := DRIVERS(INX+ILTSIZE5);               <<V8273>>29540000
               DITSIZE := DRIVERS(INX+DITSIZE5);               <<V8273>>29550000
               END;                                            <<V8273>>29560000
            SEARCH := TRUE;                                    <<V8273>>29570000
            DONE := TRUE;                                      <<V8273>>29580000
            END                                                <<V8273>>29590000
         ELSE                                                  <<V8273>>29600000
            IF < THEN                                          <<V8273>>29610000
               DONE := TRUE;                                   <<V8273>>29620000
         INX := INX+ENTRYSIZE;                                 <<V8273>>29630000
         END UNTIL DONE;                                       <<V8273>>29640000
   END;                                                        <<V8273>>29650000
                                                               <<V8273>>29660000
   SUBROUTINE PRINTLIST;                                       <<V8273>>29670000
   BEGIN                                                       <<V8273>>29680000
      COL := 0;                                                <<V8273>>29690000
                                                               <<V8273>>29700000
      FOR LDEV := 1 UNTIL HLDEV DO                             <<V8273>>29710000
         BEGIN                                                 <<V8273>>29720000
         IF TESTBIT( BADLDEVS, LDEV) THEN                      <<V8273>>29730000
            BEGIN                                              <<V8273>>29740000
            IF COL >= 68 THEN                                  <<V8273>>29750000
               BEGIN                                           <<V8273>>29760000
               PRINTLINE;                                      <<V8273>>29770000
               COL := 0;                                       <<V8273>>29780000
               END;                                            <<V8273>>29790000
            COL := COL+ASCII( LDEV,10,BLINE(COL))+1;           <<V8273>>29800000
            END;                                               <<V8273>>29810000
         END;                                                  <<V8273>>29820000
      PRINTLINE;                                               <<V8273>>29830000
   END;                                                        <<V8273>>29840000
                                                               <<V8273>>29850000
   ZEROBUF( BADLDEVS, 64);                                     <<V8273>>29860000
                                                               <<V8273>>29870000
   IF SYSTEM'TYPE <> 2 THEN                                    <<V8273>>29880000
      BEGIN                                                    <<V8273>>29890000
      FREADDIR( CONFFNUM, DVRTAB, (HLDEV+1)*6, 9D);            <<V8273>>29900000
      IF <> THEN                                               <<V8273>>29910000
         BEGIN                                                 <<V8273>>29920000
         FERROR( CONFFNUM, CONFFILE);                          <<V8273>>29930000
         TERMINATE;                                            <<V8273>>29940000
         END;                                                  <<V8273>>29950000
      END                                                      <<V8273>>29960000
   ELSE                                                        <<V8273>>29970000
      BEGIN                                                    <<V8273>>29980000
      DEVFNUM := FOPEN( DEVFILE, 1, %324);                     <<V8273>>29990000
      IF <> THEN                                               <<V8273>>30000000
         BEGIN                                                 <<V8273>>30010000
         FERROR( DEVFNUM, DEVFILE);                            <<V8273>>30020000
         TERMINATE;                                            <<V8273>>30030000
         END;                                                  <<V8273>>30040000
      FREADDIR( DEVFNUM, DEVREC0, 128, 0D);                    <<V8273>>30050000
      IF <> THEN                                               <<V8273>>30060000
         BEGIN                                                 <<V8273>>30070000
         FERROR( DEVFNUM, DEVFILE);                            <<V8273>>30080000
         TERMINATE;                                            <<V8273>>30090000
         END;                                                  <<V8273>>30100000
      READDEVFILE( DEVDVR, DVRTAB, LENGTH);                    <<V8273>>30110000
      IF <> THEN TERMINATE;                                    <<V8273>>30120000
      FCLOSE( DEVFNUM, 0, 0);                                  <<V8273>>30130000
      END;                                                     <<V8273>>30140000
                                                               <<V8273>>30150000
      <<  PROCESS REAL DEVICES >>                              <<V8273>>30160000
                                                               <<V8273>>30170000
   FOR DRT := 8 UNTIL HDRT DO                                  <<V8273>>30180000
      BEGIN                                                    <<V8273>>30190000
      UNITS := 0;                                              <<V8273>>30200000
      ILTSIZE := 0;                                            <<V8426>>30210000
      FOR LDEV := 1 UNTIL HLDEV DO                             <<V8273>>30220000
         BEGIN                                                 <<V8273>>30230000
         SETDVRVALUES;                                         <<V8273>>30240000
         IF DVRDRT = DRT AND NOT PSEUDODVR THEN                <<V8273>>30250000
            BEGIN                                              <<V8273>>30260000
            IF SEARCH THEN                                     <<V8273>>30270000
               BEGIN                                           <<V8273>>30280000
               GETSPACE( DITSIZE,1,INBANK0,NOTB32);            <<V8273>>30290000
               UNITS := UNITS+1;                               <<V8273>>30300000
               END                                             <<V8273>>30310000
            ELSE                                               <<V8273>>30320000
               BEGIN                                           <<V8273>>30330000
               SETBIT( BADLDEVS, LDEV);                        <<V8273>>30340000
               FAILED := TRUE;                                 <<V8273>>30350000
               END;                                            <<V8273>>30360000
            END;                                               <<V8273>>30370000
         END;                                                  <<V8273>>30380000
      GETSPACE( ILTSIZE+UNITS,1,INBANK0,NOTB32);               <<V8426>>30390000
      END;                                                     <<V8273>>30400000
                                                               <<V8273>>30410000
      <<  PROCESS PSEUDO DRIVERS  >>                           <<V8273>>30420000
                                                               <<V8273>>30430000
   FOR LDEV := 2 UNTIL HLDEV DO                                <<V8273>>30440000
      BEGIN                                                    <<V8273>>30450000
      SETDVRVALUES;                                            <<V8273>>30460000
      IF PSEUDODVR THEN                                        <<V8273>>30470000
         BEGIN                                                 <<V8273>>30480000
         IF SEARCH THEN                                        <<V8273>>30490000
            GETSPACE( DITSIZE, 1, INBANK0, NOTB32)             <<V8273>>30500000
         ELSE                                                  <<V8273>>30510000
            BEGIN                                              <<V8273>>30520000
            SETBIT( BADLDEVS, LDEV);                           <<V8273>>30530000
            FAILED := TRUE;                                    <<V8273>>30540000
            END;                                               <<V8273>>30550000
         END;                                                  <<V8273>>30560000
      END;                                                     <<V8273>>30570000
                                                               <<V8273>>30580000
   <<  COUNT CONFIGURED ADCC TERMINALS  >>                     <<V8273>>30590000
                                                               <<V8273>>30600000
   NRTERMS := 0;                                               <<V8273>>30610000
   FOR LDEV := 2 UNTIL HLDEV DO                                <<V8273>>30620000
      BEGIN                                                    <<V8273>>30630000
      SETDVRVALUES;                                            <<V8273>>30640000
      IF DVRDRT <> 0 THEN                                      <<V8273>>30650000
         IF NAME = "HIOTERM2" OR NAME = "HIOASLP2" OR          <<V8426>>30660000
            NAME = "HIOTERM0" THEN                             <<V8426>>30670000
            NRTERMS := NRTERMS+1;                              <<V8273>>30680000
      END;                                                     <<V8273>>30690000
                                                               <<V8273>>30700000
   << PRINT MESSAGE ABOUT ANY BAD DRIVERS >>                   <<V8273>>30710000
                                                               <<V8273>>30720000
   IF FAILED THEN                                              <<V8273>>30730000
      BEGIN                                                    <<V8273>>30740000
      MOVE BLINE := ("*WARNING -- NON-STANDARD DRIVER ON",    <<V8273>>30750000
         " THE FOLLOWING LDEV(S)");                            <<V8273>>30760000
      PRINTLINE;                                               <<V8273>>30770000
      PRINTLIST;                                               <<V8273>>30780000
      MOVE BLINE := ("   I/O table use not caluated for ",     <<V8273>>30790000
         "the above ldev(s)");                                 <<V8273>>30800000
      PRINTLINE;                                               <<V8273>>30810000
      MOVE BLINE := ("   Non-standard drivers should be",      <<V8273>>30820000
         " deconfigured before");                              <<V8273>>30830000
      PRINTLINE;                                               <<V8273>>30840000
      MOVE BLINE := "   an UPDATE is attemped";                <<V8273>>30850000
      PRINTLINE;                                               <<V8273>>30860000
      PRINTLINE;                                               <<V8273>>30870000
      END;                                                     <<V8273>>30880000
                                                               <<V8273>>30890000
END;                                                           <<V8273>>30900000
LOGICAL PROCEDURE CHKMEMUTIL;                                  <<V8273>>30910000
BEGIN                                                          <<V8273>>30920000
   INTEGER                                                     <<V8273>>30930000
      NRPORTS,                                                 <<V8273>>30940000
      PRISIZE,                                                 <<V8273>>30950000
      SECSIZE,                                                 <<V8273>>30960000
      MINPRI,                                                  <<V8273>>30970000
      MINSEC,                                                  <<V8273>>30980000
      ENTRIES,                                                 <<V8273>>30990000
      SIZE,                                                    <<V8273>>31000000
      VOL,                                                     <<V8616>>31010000
      HLDEV,                                                   <<V8273>>31020000
      HDRT,                                                    <<V8273>>31030000
      NRTERMS,                                                 <<V8273>>31040000
      CORELOC;                                                 <<V8273>>31050000
   DOUBLE                                                      <<V8273>>31060000
      VMSIZE,                                                  <<V8616>>31070000
      REC;                                                     <<V8273>>31080000
   LOGICAL                                                     <<V8273>>31090000
      FAILED   = CHKMEMUTIL;                                   <<V8273>>31100000
   INTEGER ARRAY                                               <<V8273>>31110000
      COMM(0:127),                                             <<V8273>>31120000
      CTAB0(0:127),                                            <<V8273>>31130000
      CTAB(0:127);                                             <<V8273>>31140000
   EQUATE                                                      <<V8273>>31150000
      ANYWHERE   = 0,                                          <<V8273>>31160000
      INBANK0    = 1,                                          <<V8273>>31170000
      ABOVE      = 2,  << BANK0 ABOVE SYSGLOB >>               <<V8273>>31180000
      NOTBANK0   = 3,                                          <<V8273>>31190000
      TEMPORARY  = 4,                                          <<V8273>>31200000
      B32        = TRUE, << ALIGN ON 32 WORD BND >>            <<V8273>>31210000
      NOTB32     = FALSE;                                      <<V8273>>31220000
   EQUATE                                                      <<V8273>>31230000
      VDSMDST    = 39,                                         <<V8273>>31240000
      DLTDST     = 15,                                         <<V8273>>31250000
      IORESDST   = 16;                                         <<V8273>>31260000
                                                               <<V8273>>31270000
   INTEGER SUBROUTINE PORTSIZE;                                <<V8273>>31280000
   BEGIN                                                       <<V8273>>31290000
      NRPORTS := CTAB(2)+1;                                    <<V8273>>31300000
      PRISIZE := CTAB(46);                                     <<V8273>>31310000
      SECSIZE := CTAB(48);                                     <<V8273>>31320000
                                                               <<V8273>>31330000
      MINPRI := (NRPORTS+1) &LSR(1);                           <<V8273>>31340000
      IF PRISIZE < MINPRI THEN                                 <<V8273>>31350000
         PRISIZE := MINPRI;                                    <<V8273>>31360000
      IF PRISIZE > 1023 THEN                                   <<V8273>>31370000
         PRISIZE := 1023;                                      <<V8273>>31380000
                                                               <<V8273>>31390000
      MINSEC := (NRPORTS+7) &LSR(3);                           <<V8273>>31400000
      IF SECSIZE < MINSEC THEN                                 <<V8273>>31410000
         SECSIZE := MINSEC;                                    <<V8273>>31420000
      IF MINSEC > 1023 THEN                                    <<V8273>>31430000
         MINSEC := 1023;                                       <<V8273>>31440000
      PORTSIZE := 13 + NRPORTS*16 + (PRISIZE+SECSIZE)*6;       <<V8273>>31450000
   END;                                                        <<V8273>>31460000
                                                               <<V8273>>31470000
   BANK0NEEDED := 0D;                                          <<V8273>>31480000
   AMTMEMNEEDED := 0D;                                         <<V8273>>31490000
                                                               <<V8273>>31500000
   FREADDIR( CONFFNUM, CTAB0, 128, 0D);                        <<V8273>>31510000
   IF <> THEN                                                  <<V8273>>31520000
      BEGIN                                                    <<V8273>>31530000
      FERROR( CONFFNUM, CONFFILE);                             <<V8273>>31540000
      TERMINATE                                                <<V8273>>31550000
      END;                                                     <<V8273>>31560000
   REC := IF SYSTEM'TYPE = 2 THEN                              <<V8273>>31570000
      1D ELSE DOUBLE(CTAB0(1)+1);                              <<V8273>>31580000
   FREADDIR( CONFFNUM, CTAB, 128, REC);                        <<V8273>>31590000
   IF <> THEN                                                  <<V8273>>31600000
      BEGIN                                                    <<V8273>>31610000
      FERROR( CONFFNUM, CONFFILE);                             <<V8273>>31620000
      TERMINATE;                                               <<V8273>>31630000
      END;                                                     <<V8273>>31640000
   NUM'BANKS := IF SYSTEM'TYPE=2 THEN CTAB0(3)/64 ELSE         <<V8273>>31650000
      CTAB0/64;                                                <<V8273>>31660000
   IF SYSTEM'TYPE=2 THEN                                       <<V8273>>31670000
      BEGIN                                                    <<V8273>>31680000
      DISC( SYSDISC, READ, COMM, 31D, 128);                    <<V8273>>31690000
      IF <> THEN TERMINATE;                                    <<V8273>>31700000
      HLDEV := COMM(8);                                        <<V8273>>31710000
      HDRT := COMM(7);                                         <<V8273>>31720000
      END                                                      <<V8273>>31730000
   ELSE                                                        <<V8273>>31740000
      BEGIN                                                    <<V8273>>31750000
      HLDEV := CTAB0(18);                                      <<V8273>>31760000
      HDRT := CTAB0(3);                                        <<V8273>>31770000
      END;                                                     <<V8273>>31780000
                                                               <<V8273>>31790000
                                                               <<V8273>>31800000
                                                               <<V8273>>31810000
   IF SYSTEM'TYPE <> 2 THEN                                    <<V8273>>31820000
      BEGIN     << MPE 4 TO MPE 5 >>                           <<V8273>>31830000
                                                               <<V8273>>31840000
      VOL := LDEVTOVTAB( 1 ); << VTAB INX OF LDEV 1 >>         <<V8616>>31850000
      MFDS( VMSIZE, 29, VOL*14+10, 2);                         <<V8616>>31860000
      IF VMSIZE < 4096D THEN                                   <<V8616>>31870000
         BEGIN                                                 <<V8616>>31880000
         MOVE BLINE := ("*WARNING -- MPE V REQUIRES AT ",     <<V8616>>31890000
            "LEAST 4 KILOSECTORS OF VIRTUAL MEMORY");          <<V8616>>31900000
         PRINTLINE;                                            <<V8616>>31910000
         MOVE BLINE := "   ON LDEV 1";                         <<V8616>>31920000
         PRINTLINE;                                            <<V8616>>31930000
         PRINTLINE;                                            <<V8616>>31940000
         FAILED := TRUE;                                       <<V8616>>31950000
         END;                                                  <<V8616>>31960000
                                                               <<V8616>>31970000
      <<  IF SERIES/44 WE ASSUME AT THE CUSTOMER >>            <<V8273>>31980000
      <<  DOESN'T HAVE CST EXPANSION FIRMWARE    >>            <<V8273>>31990000
                                                               <<V8273>>32000000
      CORELOC := IF THISCPU <= 4 THEN                          <<V8273>>32010000
         INBANK0  << MUST BE IN BANK 0 >>                      <<V8273>>32020000
      ELSE                                                     <<V8273>>32030000
         ANYWHERE; << TABLE MAY BE PLACED ANYWHERE >>          <<V8273>>32040000
                                                               <<V8273>>32050000
      GETSPACE(32,1,INBANK0,NOTB32);          << LOW CORE >>   <<V8273>>32060000
      GETSPACE(HDRT/8*8,4,INBANK0,NOTB32);       << DRT >>     <<V8426>>32070000
         << FIRMWARE, SYSGLOB, SYSGLOB EXT >>                  <<V8273>>32080000
      GETSPACE(%340+256+128,1,ABOVE,B32);                      <<V8273>>32090000
      GETSPACE(CTAB(1),4,ABOVE,B32);             << DST >>     <<V8273>>32100000
      ENTRIES := IF SYSTEM'TYPE=0 THEN CTAB(0)+192             <<V8426>>32110000
         ELSE CTAB(0);                                         <<V8426>>32120000
      GETSPACE(ENTRIES,4,ABOVE,B32);             << CST >>     <<V8426>>32130000
      GETSPACE(CTAB(5),4,ABOVE,B32);             << CSTX >>    <<V8273>>32140000
      GETSPACE(CTAB(6)+64,1,ABOVE,B32);          << ICS >>     <<V8273>>32150000
      IF CKIOTABLES( HLDEV, HDRT, NRTERMS) THEN << IOTAB >>    <<V8273>>32160000
         FAILED := TRUE;                                       <<V8273>>32170000
      IF NRTERMS > 0 THEN                                      <<V8426>>32180000
         BEGIN                                                 <<V8426>>32190000
         << HARDRES - READCHAR/WRITECHAR BUFFER >>             <<V8426>>32200000
         GETSPACE(%56,1,ABOVE,NOTB32);                         <<V8426>>32210000
         << INITIALIZATION CHANNEL PGM FOR ADCC >>             <<V8426>>32220000
         GETSPACE(%264,1,ABOVE,NOTB32);                        <<V8426>>32230000
         END;                                                  <<V8426>>32240000
      GETSPACE(DSTSIZE(DLTDST),1,INBANK0,B32);   << DLT >>     <<V8273>>32250000
      GETSPACE(DSTSIZE(IORESDST),1,INBANK0,NOTB32);<<IORES>>   <<V8273>>32260000
      GETSPACE(CTAB(13)+11+CTAB(13)/16,1,INBANK0,B32);<<CSTBK>><<V8273>>32270000
      GETSPACE(1,80,INBANK0,B32);                <<MEASINFO>>  <<V8273>>32280000
      GETSPACE(DSTSIZE(VDSMDST),1,INBANK0,B32);   << VDSM >>   <<V8273>>32290000
      SIZE := (CTAB(40)+CTAB(41)+15)/16+4;                     <<V8273>>32300000
      GETSPACE(SIZE,1,INBANK0,B32);              << JPCNT >>   <<V8273>>32310000
      GETSPACE(PORTSIZE,1,CORELOC,NOTB32);      << PORTS >>    <<V8273>>32320000
      GETSPACE(CTAB(2)+1,21,CORELOC,B32);       << PCB >>      <<V8273>>32330000
      ENTRIES := IF CTAB(47) < CTAB(2)*2 THEN                  <<C8456>>32340000
         CTAB(2)*2 ELSE CTAB(47);                              <<C8456>>32350000
      GETSPACE(ENTRIES+3,6,CORELOC,B32);        << SWAP >>     <<C8456>>32360000
      ENTRIES := IF CTAB(45) < HLDEV+CTAB(2) THEN              <<V8273>>32370000
         CTAB(2)+HLDEV ELSE CTAB(45);                          <<C8456>>32380000
      GETSPACE(ENTRIES+3,6,CORELOC,B32);        << SPEC REQ >><<<V8273>>32390000
      ENTRIES := CTAB(40)+CTAB(41);                            <<V8273>>32400000
      GETSPACE(ENTRIES+2,3,CORELOC,B32);        << JCUT >>     <<V8273>>32410000
      GETSPACE(CTAB(9)+1,4,CORELOC,B32);        << TRL >>      <<V8273>>32420000
      GETSPACE(CTAB(12)*129+12,1,CORELOC,B32);  << SBUF >>     <<V8273>>32430000
         << NO TBUF'S IN MPE V >>                              <<V8273>>32440000
      GETSPACE(HLDEV+1,4,CORELOC,B32);          << LPDT >>     <<V8273>>32450000
      GETSPACE(CTAB(3)*12+12,1,CORELOC,B32);    << IOQ >>      <<V8273>>32460000
      GETSPACE(CTAB(44)+1,17,CORELOC,B32);      << DRQ >>      <<V8273>>32470000
      ENTRIES := CTAB(40) + CTAB(41);                          <<V8273>>32480000
      GETSPACE(ENTRIES+43,4,CORELOC,B32);       << SIR >>      <<V8273>>32490000
      GETSPACE(1024,1,CORELOC,B32);             << MON BUF >>  <<V8273>>32500000
      END                                                      <<V8273>>32510000
   ELSE                                                        <<V8273>>32520000
      BEGIN    << MPE 5 TO MPE 4 >>                            <<V8273>>32530000
      GETSPACE(32,1,INBANK0,NOTB32);          << LOW CORE >>   <<V8273>>32540000
      GETSPACE(HDRT/8*8,4,INBANK0,NOTB32);       << DRT >>     <<V8426>>32550000
         << FIRMWARE, SYSGLOB, SYSGLOB EXT >>                  <<V8273>>32560000
      GETSPACE(%340+256+128,1,ABOVE,NOTB32);                   <<V8273>>32570000
      GETSPACE(CTAB(1),4,ABOVE,NOTB32);          << DST >>     <<V8273>>32580000
      GETSPACE(CTAB(0),4,ABOVE,NOTB32);          << CST >>     <<V8273>>32590000
      GETSPACE(CTAB(5),4,ABOVE,NOTB32);          << CSTX >>    <<V8273>>32600000
      GETSPACE(CTAB(6)+64,1,ABOVE,NOTB32);       << ICS >>     <<V8273>>32610000
      IF CKIOTABLES( HLDEV, HDRT, NRTERMS) THEN << IOTAB >>    <<V8273>>32620000
         FAILED := TRUE;                                       <<V8273>>32630000
      IF NRTERMS > 0 THEN                                      <<V8426>>32640000
         BEGIN                                                 <<V8426>>32650000
         << HARDRES - READCHAR/WRITECHAR BUFFER >>             <<V8426>>32660000
         GETSPACE(%56,1,ABOVE,NOTB32);                         <<V8426>>32670000
         << INITIALIZATION CHANNEL PGM FOR ADCC >>             <<V8426>>32680000
         GETSPACE(%325,1,ABOVE,NOTB32);                        <<V8426>>32690000
         END;                                                  <<V8426>>32700000
      GETSPACE(DSTSIZE(DLTDST),1,INBANK0,NOTB32);   << DLT >>  <<V8273>>32710000
      GETSPACE(DSTSIZE(IORESDST),1,INBANK0,NOTB32);<<IORES>>   <<V8273>>32720000
      GETSPACE(CTAB(13)+11+CTAB(13)/16,1,INBANK0,NOTB32);<<CSTB<<V8273>>32730000
      GETSPACE(1,80,INBANK0,NOTB32);             <<MEASINFO>>  <<V8273>>32740000
      GETSPACE(DSTSIZE(VDSMDST),1,INBANK0,NOTB32);<< VDSM >>   <<V8273>>32750000
      SIZE := (CTAB(40)+CTAB(41)+15)/16+4;                     <<V8273>>32760000
      GETSPACE(SIZE,1,INBANK0,NOTB32);           << JPCNT >>   <<V8273>>32770000
      GETSPACE(CTAB(2)+1,16,INBANK0,NOTB32);    << PCB >>      <<V8273>>32780000
      GETSPACE(CTAB(47)+3,5,INBANK0,NOTB32);    << SWAP >>     <<V8273>>32790000
      GETSPACE(CTAB(45)+3,5,INBANK0,NOTB32);     << SPEC REQ >><<V8273>>32800000
      GETSPACE(CTAB(2),5,INBANK0,NOTB32);       << MSG HBR >>  <<V8273>>32810000
      GETSPACE(CTAB(46),5,INBANK0,NOTB32);      << PRI MSG >>  <<V8273>>32820000
      GETSPACE(CTAB(48),5,INBANK0,NOTB32);      << SEC MSG >>  <<V8273>>32830000
      ENTRIES := CTAB(40)+CTAB(41);                            <<V8273>>32840000
      GETSPACE(ENTRIES+2,3,INBANK0,NOTB32);     << JCUT >>     <<V8273>>32850000
      GETSPACE(CTAB(9)+1,4,INBANK0,NOTB32);     << TRL >>      <<V8273>>32860000
      GETSPACE(CTAB(12)*129+8,1,INBANK0,NOTB32);<< SBUF >>     <<V8273>>32870000
      ENTRIES := NRTERMS * CTAB(4);                            <<V8273>>32880000
      IF ENTRIES > 255 THEN                                    <<V8273>>32890000
         ENTRIES := 255;                                       <<V8273>>32900000
      IF ENTRIES < 10 THEN                                     <<C8456>>32910000
         ENTRIES := 10;                                        <<C8456>>32920000
      GETSPACE(ENTRIES,32,INBANK0,NOTB32);                     <<C8456>>32930000
      GETSPACE(33,1,INBANK0,NOTB32);            << ARSBM >>    <<V8273>>32940000
      GETSPACE(1026,1,INBANK0,NOTB32);          << ARLD >>     <<V8273>>32950000
      GETSPACE(HLDEV+1,2,INBANK0,NOTB32);       << LPDT >>     <<V8273>>32960000
      GETSPACE(CTAB(3)*11+8,1,INBANK0,NOTB32);  << IOQ >>      <<V8273>>32970000
      GETSPACE(CTAB(44)+1,16,INBANK0,NOTB32);   << DRQ >>      <<V8273>>32980000
      ENTRIES := CTAB(40) + CTAB(41);                          <<V8273>>32990000
      GETSPACE(ENTRIES+43,2,INBANK0,NOTB32);    << SIR >>      <<V8273>>33000000
      GETSPACE(1024,1,INBANK0,NOTB32);          << MON BUF >>  <<V8273>>33010000
      END;                                                     <<V8273>>33020000
                                                               <<V8273>>33030000
   IF AMTMEMNEEDED <> 0D THEN                                  <<V8273>>33040000
      BEGIN                                                    <<V8273>>33050000
      MOVE BLINE := ("*WARNING -- NOT ENOUGH MEMORY TO",      <<V8273>>33060000
         " PERFORM AN UPDATE");                                <<V8273>>33070000
      PRINTLINE;                                               <<V8273>>33080000
      SIZE := DASCII( AMTMEMNEEDED, 10, BLINE(3));             <<V8273>>33090000
      MOVE BLINE(SIZE+4) := ("TOTAL ADDITIONAL",               <<V8273>>33100000
         " WORDS NEEDED");                                     <<V8273>>33110000
      PRINTLINE;                                               <<V8273>>33120000
      SIZE := DASCII( BANK0NEEDED, 10, BLINE(3));              <<V8273>>33130000
      MOVE BLINE(SIZE+4) := ("ADDITIONAL WORDS ",              <<V8273>>33140000
         "OF BANK0 REQUIRED");                                 <<V8273>>33150000
      PRINTLINE;                                               <<V8273>>33160000
      PRINTLINE;                                               <<V8273>>33170000
      FAILED := TRUE;                                          <<V8273>>33180000
      END;                                                     <<V8273>>33190000
END;                                                           <<V8273>>33200000
LOGICAL PROCEDURE VERIFYING;                                   <<V8273>>33210000
BEGIN                                                          <<V8273>>33220000
   LOGICAL                                                     <<V8426>>33230000
      FAILED = VERIFYING;                                      <<V8273>>33240000
                                                               <<V8273>>33250000
   CONFFNUM := FOPEN( CONFFILE, 1, %324); << OPEN CONFDATA >>  <<V8273>>33260000
   IF <> THEN                                                  <<V8273>>33270000
      BEGIN                                                    <<V8273>>33280000
      FERROR( CONFFNUM, CONFFILE);                             <<V8273>>33290000
      TERMINATE;                                               <<V8273>>33300000
      END;                                                     <<V8273>>33310000
                                                               <<V8273>>33320000
   IF SYSTEM'TYPE <> 2 THEN                                    <<V8273>>33330000
      IF CHKMEMSIZE THEN FAILED := TRUE;                       <<V8273>>33340000
                                                               <<V8273>>33350000
   IF SYSTEM'TYPE = 2 THEN                                     <<V8273>>33360000
      IF CHKMPE4MAX THEN FAILED := TRUE;                       <<V8273>>33370000
                                                               <<V8273>>33380000
   IF SYSTEM'TYPE <> 2 THEN                                    <<V8273>>33390000
      IF CHKDISCUTIL THEN FAILED := TRUE;                      <<V8273>>33400000
                                                               <<V8273>>33410000
   IF CHKMEMUTIL THEN FAILED := TRUE;                          <<V8273>>33420000
                                                               <<V8273>>33430000
   IF NOT FAILED THEN                                          <<V8426>>33440000
      BEGIN                                                    <<V8426>>33450000
      MOVE BLINE := "SUCCESSFUL VERIFICATION";                 <<V8426>>33460000
      PRINTLINE;                                               <<V8426>>33470000
      PRINTLINE;                                               <<V8426>>33480000
      END;                                                     <<V8426>>33490000
                                                               <<V8426>>33500000
   FCLOSE( CONFFNUM, 0, 0);                                    <<V8273>>33510000
END;                                                           <<V8273>>33520000
$CONTROL SEGMENT=MPEV'CONVERSION                                        33530000
                                                                        33540000
$PAGE "     M A I N    P R O G R A M"                                   33550000
   <<    M A I N    P R O G R A M     >>                                33560000
                                                                        33570000
           << DEFAULT ENTRY POINT >>                                    33580000
                                                                        33590000
   OPTION'TAKEN:=0;                                                     33600000
                                                                        33610000
   IF FALSE THEN                                                        33620000
                                                                        33630000
VERIFY:                                                                 33640000
                                                                        33650000
      OPTION'TAKEN:=1;                                                  33660000
                                                                        33670000
   IF FALSE THEN                                                        33680000
                                                                        33690000
CONVERT:                                                                33700000
                                                                        33710000
     OPTION'TAKEN:=2;                                                   33720000
                                                                        33730000
   IF FALSE THEN                                                        33740000
                                                                        33750000
FORWD:                                                                  33760000
                                                                        33770000
      OPTION'TAKEN:=3;                                                  33780000
                                                                        33790000
   IF FALSE THEN                                                        33800000
                                                                        33810000
BACKWD:                                                                 33820000
                                                                        33830000
                                                                        33840000
      OPTION'TAKEN:=4;                                                  33850000
                                                                        33860000
   IF FALSE THEN                                                        33870000
                                                                        33880000
HELP:                                                                   33890000
                                                                        33900000
      OPTION'TAKEN:=5;                                                  33910000
                                                                        33920000
                                                                        33930000
   PUSH(STATUS); TOS.(2:1):=0; SET(STATUS); << DISABLE TRAPS >><<V8273>>33940000
                                                               <<V8273>>33950000
   CLEARLINE;  << INITIALIZE PRINT BUFFER >>                            33960000
                                                                        33970000
   MOVE BLINE := HEADING;                                               33980000
   PRINTLINE;                                                           33990000
   PRINTLINE;                                                           34000000
                                                                        34010000
  << PUT AWAY THE ;PARM= FOR LATER USE >>                               34020000
                                                                        34030000
   PARM := IF QM4 = 0 THEN -1 ELSE QM4;                                 34040000
                                                                        34050000
   TERMFNUM := FOPEN(,%54); << OPEN $STDINX >>                 <<V8273>>34060000
   IF <> THEN                                                  <<V8273>>34070000
      BEGIN                                                    <<V8273>>34080000
      MOVE BLINE := "FAILURE TO OPEN $STDINX";                 <<V8273>>34090000
      PRINTLINE;                                               <<V8273>>34100000
      TERMINATE;                                               <<V8273>>34110000
      END;                                                     <<V8273>>34120000
                                                               <<V8273>>34130000
  <<  CALL THE "MAIN" ROUTINES >>                                       34140000
                                                                        34150000
  CASE OPTION'TAKEN OF                                                  34160000
    BEGIN                                                               34170000
                                                                        34180000
<<0>> BEGIN   << VERIFY THEN CONVERT >>                                 34190000
      CHECK'ACCESS;                                                     34200000
      SYSTEM'TYPE:=GET'SYSTEM'TYPE;                                     34210000
      IF SYSTEM'TYPE<0 THEN                                             34220000
        BEGIN                                                           34230000
        MOVE BLINE:="THIS CONVERSION IS TERMINATED";                    34240000
        PRINTLINE;                                                      34250000
        TERMINATE;                                                      34260000
        END;                                                            34270000
      IF VERIFYING THEN                                        <<V8273>>34280000
         BEGIN                                                 <<V8273>>34290000
         MOVE BLINE :="The verification of your system failed";<<V8273>>34300000
         PRINTLINE;                                            <<V8273>>34310000
         MOVE BLINE := (" thus the conversion will not be",    <<V8273>>34320000
            " attempted.");                                    <<V8273>>34330000
         PRINTLINE;                                            <<V8273>>34340000
         END                                                   <<V8273>>34350000
      ELSE                                                     <<V8273>>34360000
         CONVERTING;                                           <<V8273>>34370000
      END;                                                              34380000
                                                                        34390000
<<1>> BEGIN       << JUST VERIFYING >>                                  34400000
      SYSTEM'TYPE:=GET'SYSTEM'TYPE;                                     34410000
      VERIFYING;                                               <<V8273>>34420000
      END;                                                              34430000
                                                                        34440000
<<2>> BEGIN       << JUST CONVERTING >>                                 34450000
      CHECK'ACCESS;                                                     34460000
      SYSTEM'TYPE:=GET'SYSTEM'TYPE;                                     34470000
      IF SYSTEM'TYPE<0 THEN                                             34480000
        BEGIN                                                           34490000
        MOVE BLINE:="THIS CONVERSION IS TERMINATED";                    34500000
        PRINTLINE;                                                      34510000
        TERMINATE;                                                      34520000
        END;                                                            34530000
      CONVERTING;                                                       34540000
      END;                                                              34550000
                                                                        34560000
<<3>> BEGIN       << FORCE CONVERT FORWARD >>                           34570000
      CHECK'ACCESS;                                                     34580000
      SYSTEM'TYPE:=IF GET'SYSTEM'TYPE=0 THEN 0 ELSE 1;                  34590000
      CONVERTING;                                                       34600000
      END;                                                              34610000
                                                                        34620000
<<4>> BEGIN       << FORCE CONVERT BACKWARD >>                          34630000
      CHECK'ACCESS;                                                     34640000
      SYSTEM'TYPE:=2;                                                   34650000
      CONVERTING;                                                       34660000
      END;                                                              34670000
                                                                        34680000
<<5>> HELP'FACILITY;  << JUST HELP >>                          <<V8273>>34690000
                                                                        34700000
    END;                                                                34710000
                                                                        34720000
                                                                        34730000
                                                                        34740000
END.                                                                    34750000
