         << LINES .001/.009 ARE RESERVED FOR SYSTEMS INTEGRATION >>     00000001
    DUNIT     = 10,        << DIT I/O TYPE AND UNIT # >>       <<*9913>>00236000
    TMAGTAPE  = 24,        <<MAG TAPE TYPE>>                   <<D9109>>00387000
$PAGE "SOFTDUMP INITIALIZATION DEFINES AND EQUATES"            <<D9932>>00775010
<<@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@>><<D9932>>00775050
<<@@                                                       @@>><<D9932>>00775100
<<@@     SOFTDUMP INITIALIZATION DEFINES AND EQUATES       @@>><<D9932>>00775150
<<@@                                                       @@>><<D9932>>00775200
<<@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@>><<D9932>>00775250
                                                               <<L1194>>00775270
                <<* * * CONFIGURATION TABLE * * *>>            <<L1194>>00775280
                                                               <<L1194>>00775290
                                                               <<D9932>>00775300
<<                                                                      00775301
                                                                        00775303
           0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15   DOUBLE WORD 00775304
         |--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|              00775305
Word 0   |                  CTCHECKSUM                   |  Word 0      00775306
         |-----------------------------------------------|              00775307
Word 1   |                 CTNUMBERBANKS                 |              00775308
         |-----------------------------------------------|--            00775309
Word 2   | CTDUMPDEVDRT             | SUBTYPE   | UNIT   |  Word 1      00775310
         |-----------------------------------------------|  (Ctdump-    00775311
Word 3   |                 CTDUMPDEVTYPE                 |  devdesc)    00775312
         |-----------------------------------------------|--            00775313
Word 4   | CTLINEPTRDRT             | SUBTYPE   | UNIT   |  Word 2      00775314
         |-----------------------------------------------|  (Ctline-    00775315
Word 5   |                CTLINEPTRDEVTYPE               |  ptrdesc)    00775316
         |-----------------------------------------------|--            00775317
Word 6   | CTCONSOLEDRT             | SUBTYPE   | UNIT   |  Word 3      00775318
         |-----------------------------------------------|  (Ctconsole- 00775319
Word 7   |                CTCONSOLEDEVTYPE               |  desc)       00775320
         |-----------------------------------------------|--            00775321
Word 8   | CTCOMMANDRT              | SUBTYPE   | UNIT   |  Word 4      00775322
         |-----------------------------------------------|  (Ctcommand- 00775323
Word 9   |                CTCOMMANDEVTYPE                |  desc)       00775324
         |-----------------------------------------------|--            00775325
Word 10  | CTSYSDISCDRT             | SUBTYPE   | UNIT   |  Word 5      00775326
         |-----------------------------------------------|  (Ctsysdisc- 00775327
Word 11  |                CTSYSDISCDEVTYPE               |  desc)       00775328
         |-----------------------------------------------|--            00775329
Word 12  | CTDUMPFILEDRT            | SUBTYPE   | UNIT   |  Word 6      00775330
         |-----------------------------------------------|  (Ctdumpfile-00775331
Word 13  |                CTDUMPFILEDEVTYPE              |  desc)       00775332
         |-----------------------------------------------|--            00775333
Word 14  |                  CTDUMPFILELEN                |  Word 7      00775334
         |-----------------------------------------------|              00775335
Word 15  |                     CTMODE                    |              00775336
         |-----------------------------------------------|--            00775337
Word 16  |                                               |  Word 8      00775338
         |--                CTCOMMANDFILE              --|              00775339
Word 17  |                                               |              00775340
         |-----------------------------------------------|--            00775341
Word 18  |                                               |  Word 9      00775342
         |--                 CTDUMPFILE                --|              00775343
Word 19  |                                               |              00775344
         |-----------------------------------------------|--            00775345
Word 20  |                                               |  Word 10     00775346
         |--              CTOVERLAYSECNUM              --|              00775347
Word 21  |                                               |              00775348
         |-----------------------------------------------|--            00775349
Word 22  |///////////////////////////////////////////////|  Word 11     00775350
         |-----------------------------------------------|              00775351
Word 23  |                CTCOMMANDLENGTH                |              00775352
         |-----------------------------------------------|--            00775353
Word 24  |                CTSDFINITVERSION               |  Word 12     00775354
         |-----------------------------------------------|              00775355
         |   (Format for six word entry for virtual)     |              00775356
         |   (memory access table. There are 16 entries.)|              00775357
         |-----------------------------------------------|              00775358
Word 25  | VMDRT                    | SUBTYPE   | UNIT   |  Word 0      00775359
         |-----------------------------------------------|              00775360
Word 26  |                      TYPE                     |  Word 1      00775361
         |-----------------------------------------------|              00775362
Word 27  | LDEV 3                | HODA OF START DISCVM  |  Word 2      00775363
         |-----------------------------------------------|              00775364
Word 28  |         LODA OF START OF DISC VM AREA         |  Word 3      00775365
         |-----------------------------------------------|              00775366
Word 29  |///////////////////////| HODA OF END DISCVM    |  Word 4      00775367
         |-----------------------------------------------|              00775368
Word 30  |         LODA OF END OF DISC VM AREA           |  Word 5      00775369
         |-----------------------------------------------|              00775370
         |                       o                       |              00775371
         ~                       o                       ~              00775372
         |                       o                       |              00775373
         |-----------------------------------------------|              00775374
Word 121 |                   CTDSTADDR                   |              00775375
         |-----------------------------------------------|--            00775376
Word 122 |                   CTNUMDST'S                  |  Word 61     00775377
         |-----------------------------------------------|              00775378
Word 123 |  (LOADMAP)       CTNUMSECTFILE1               |              00775379
         |-----------------------------------------------|--            00775380
Word 124 |                                               |  Word 62     00775381
         |--               CTDISCADDRFILE1             --|              00775382
Word 125 |                                               |              00775383
         |-----------------------------------------------|--            00775384
Word 126 |                                               |  Word 63     00775385
         |--               CTDISCADDRFILE2             --|              00775386
Word 127 |                                               |              00775387
         |-----------------------------------------------|--            00775388
Word 128 |  (MPECHECK)      CTNUMSECTFILE2               |  Word 64     00775389
         |-----------------------------------------------|              00775390
Word 129 |  (CONFDATA)      CTNUMSECTFILE3               |              00775391
         |-----------------------------------------------|--            00775392
Word 130 |                                               |  Word 65     00775393
         |--               CTDISCADDRFILE3             --|              00775394
Word 131 |                                               |              00775395
         |-----------------------------------------------|--            00775396
Word 132 |                                               |  Word 66     00775397
         |--               CTDISCADDRFILE4             --|              00775398
Word 133 |                                               |              00775399
         |-----------------------------------------------|--            00775400
Word 134 |  (HPPMAP)        CTNUMSECTFILE4               |  Word 67     00775401
         |-----------------------------------------------|              00775402
Word 135 |///////////////////////////////////////////////|              00775403
         |-----------------------------------------------|--            00775404
                                                                        00775405
>>                                                                      00775406
EQUATE                                                         <<D9932>>00775450
   CTCONFIGLEN      = 136;                                     <<L1194>>00775500
                                                               <<D9932>>00775550
DEFINE                                                         <<D9932>>00775600
   CTCHECKSUM       = CONFIG           #,                      <<D9932>>00775650
   CTNUMBERBANKS    = CONFIG(1)        #,                      <<D9932>>00775700
                                                               <<D9932>>00775750
   CTDUMPDEVDESC    = CONFIGD(1)       #,                      <<D9932>>00775800
   CTDUMPDEVDRT     = CONFIG(2).(0:9)  #,                      <<D9932>>00775850
   CTDUMPDEVSUBTYPE = CONFIG(2).(9:4)  #,                      <<D9932>>00775900
   CTDUMPDEVUNIT    = CONFIG(2).(13:3) #,                      <<D9932>>00775950
   CTDUMPDEVTYPE    = CONFIG(3)        #,                      <<D9932>>00776000
                                                               <<D9932>>00776050
   CTLINEPTRDESC    = CONFIGD(2)       #,                      <<D9932>>00776100
   CTLINEPTRDRT     = CONFIG(4).(0:9)  #,                      <<D9932>>00776150
   CTLINEPTRSUBTYPE = CONFIG(4).(9:4)  #,                      <<D9932>>00776200
   CTLINEPTRUNIT    = CONFIG(4).(13:3) #,                      <<D9932>>00776250
   CTLINEPTRDEVTYPE = CONFIG(5)        #,                      <<D9932>>00776300
                                                               <<D9932>>00776350
   CTCONSOLEDESC    = CONFIGD(3)       #,                      <<D9932>>00776400
   CTCONSOLEDRT     = CONFIG(6).(0:9)  #,                      <<D9932>>00776450
   CTCONSOLESUBTYPE = CONFIG(6).(9:4)  #,                      <<D9932>>00776500
   CTCONSOLEUNIT    = CONFIG(6).(13:3) #,                      <<D9932>>00776550
   CTCONSOLEDEVTYPE = CONFIG(7)        #,                      <<D9932>>00776600
                                                               <<D9932>>00776650
   CTCOMMANDESC     = CONFIGD(4)       #,                      <<D9932>>00776700
   CTCOMMANDRT      = CONFIG(8).(0:9)  #,                      <<D9932>>00776750
   CTCOMMANDSUBTYPE = CONFIG(8).(9:4)  #,                      <<D9932>>00776800
   CTCOMMANDUNIT    = CONFIG(8).(13:3) #,                      <<D9932>>00776850
   CTCOMMANDEVTYPE  = CONFIG(9)        #,                      <<D9932>>00776900
                                                               <<D9932>>00776950
   CTSYSDISCDESC    = CONFIGD(5)       #,                      <<D9932>>00777000
   CTSYSDISCDRT     = CONFIG(10).(0:9) #,                      <<D9932>>00777050
   CTSYSDISCSUBTYPE = CONFIG(10).(9:4) #,                      <<D9932>>00777100
   CTSYSDISCUNIT    = CONFIG(10).(13:3)#,                      <<D9932>>00777150
   CTSYSDISCDEVTYPE = CONFIG(11)       #,                      <<D9932>>00777200
                                                               <<D9932>>00777250
   CTDUMPFILEDESC   = CONFIGD(6)       #,                      <<D9932>>00777300
   CTDUMPFILEDRT    = CONFIG(12).(0:9) #,                      <<D9932>>00777350
   CTDUMPFILESUBTYPE= CONFIG(12).(9:4) #,                      <<D9932>>00777400
   CTDUMPFILEUNIT   = CONFIG(12).(13:3)#,                      <<D9932>>00777450
   CTDUMPFILEDEVTYPE= CONFIG(13)       #,                      <<D9932>>00777500
                                                               <<D9932>>00777550
   CTDUMPFILELEN    = CONFIG(14)       #,                      <<D9932>>00777600
   CTMODE           = CONFIG(15)       #,                      <<D9932>>00777650
   CTCOMMANDFILE    = CONFIGD(8)       #,                      <<D9932>>00777700
   CTDUMPFILE       = CONFIGD(9)       #,                      <<D9932>>00777750
   CTOVERLAYSECNUM  = CONFIGD(10)      #,                      <<D9932>>00777800
   CTCOMMANDLENGTH  = CONFIG(23)       #,                      <<D9932>>00777850
   CTSDFINITVERSION = CONFIG(24)       #,                      <<D9932>>00777900
                                                               <<D9932>>00777950
   VMTAB'ENTRY      = 25 + 6*VMINDEX   #,                      <<D9932>>00778000
   CTVMDRT          = CONFIG(VMTAB'ENTRY    ).(0:9)#,          <<D9932>>00778050
   CTVMSUBTYPE      = CONFIG(VMTAB'ENTRY    ).(9:4)#,          <<D9932>>00778100
   CTVMUNIT         = CONFIG(VMTAB'ENTRY    ).(13:3)#,         <<D9932>>00778150
   CTVMTYPE         = CONFIG(VMTAB'ENTRY + 1)      #,          <<D9932>>00778200
   CTVMLDEV         = CONFIG(VMTAB'ENTRY + 2).(0:8)#,          <<D9932>>00778250
   CTVMHODASTART    = CONFIG(VMTAB'ENTRY + 2).(8:8)#,          <<D9932>>00778300
   CTVMLODASTART    = CONFIG(VMTAB'ENTRY + 3)      #,          <<D9932>>00778350
   CTVMHODAEND      = CONFIG(VMTAB'ENTRY + 4).(8:8)#,          <<D9932>>00778400
   CTVMLODAEND      = CONFIG(VMTAB'ENTRY + 5)      #,          <<D9932>>00778450
                                                               <<D9932>>00778500
<< CONFIG (25) THROUGH CONFIG (120) ARE RESERVED FOR THE     >><<D9932>>00778550
<< VIRTUAL MEMORY ACCESS TABLE. THERE ARE 16 ENTRIES WITH    >><<D9932>>00778600
<< 6 WORDS PER ENTRY IN THE FOLLOWING FORMAT:                >><<D9932>>00778650
<<                                                           >><<D9932>>00778700
<<   WORD 0.(0:9)  - DRT                                     >><<D9932>>00778750
<<         .(9:4)  - SUBTYPE                                 >><<D9932>>00778800
<<         .(13:3) - UNIT                                    >><<D9932>>00778850
<<                                                           >><<D9932>>00778900
<<   WORD 1        - TYPE                                    >><<D9932>>00778950
<<                                                           >><<D9932>>00779000
<<   WORD 2.(0:8)  - LDEV #                                  >><<D9932>>00779050
<<         .(8:8)  - HODA OF START OF DISC VM AREA           >><<D9932>>00779100
<<                                                           >><<D9932>>00779150
<<   WORD 3        - LODA OF START OF DISC VM AREA           >><<D9932>>00779200
<<                                                           >><<D9932>>00779250
<<   WORD 4.(0:8)  - UNUSED                                  >><<D9932>>00779300
<<         .(8:8)  - HODA OF END OF DISC VM AREA             >><<D9932>>00779350
<<                                                           >><<D9932>>00779400
<<   WORD 5        - LODA OF END OF DISC VM AREA             >><<D9932>>00779450
                                                               <<L1026>>00779451
   CTDSTADDR        = CONFIG(121)                  #,          <<L1026>>00779452
   CTNUMDST'S       = CONFIG(122)                  #,          <<L1026>>00779453
                                                               <<L1194>>00779461
   CTNUMSECTFILE1   = CONFIG(123)                  #,          <<L1194>>00779463
   CTDISCADDRFILE1  = CONFIGD(62)                  #,          <<L1194>>00779464
   CTDISCADDRFILE2  = CONFIGD(63)                  #,          <<L1194>>00779465
   CTNUMSECTFILE2   = CONFIG(128)                  #,          <<L1194>>00779466
   CTNUMSECTFILE3   = CONFIG(129)                  #,          <<L1194>>00779467
   CTDISCADDRFILE3  = CONFIGD(65)                  #,          <<L1194>>00779468
   CTDISCADDRFILE4  = CONFIGD(66)                  #,          <<L1194>>00779469
   CTNUMSECTFILE4   = CONFIG(134)                  #,          <<L1194>>00779470
                                                               <<D9932>>00779500
   SYSTEM'VOLUME    = VTABENTRY(12).(14:1) = 0     #,          <<D9932>>00779550
   VTAB'LDEV        = VTABENTRY(12).(0:8)          #,          <<D9932>>00779600
   VTAB'HODASTART   = VTABENTRY(8).(8:8)           #,          <<D9932>>00779650
   VTAB'LODASTART   = VTABENTRY(9)                 #;          <<D9932>>00779700
EQUATE                                                         <<D9932>>00779750
   VTABARRAYSIZE    = %15,                                     <<D9932>>00779800
   MAXVMINDEX       = 15;                                      <<D9932>>00779850
                                                               <<D9932>>00779900
<<MESSAGE DATA>>                                               <<L1194>>00780000
                                                               <<L1194>>00780010
DEFINE                                                         <<L1194>>00780020
   SUCCESSFUL       = 0                            #,          <<L1194>>00780030
   UGLYSDFILE       = 1 CAT SDFILENUM(0:8:8)       #,          <<L1194>>00780040
   UGLYSDFOPTIONS   = 2 CAT SDFILENUM(0:8:8)       #,          <<L1194>>00780050
   UGLYSDFRECSIZE   = 3 CAT SDFILENUM(0:8:8)       #,          <<L1194>>00780060
   UGLYSDFLDEV      = 4 CAT SDFILENUM(0:8:8)       #,          <<L1194>>00780070
   UGLYSDFILECODE   = 5 CAT SDFILENUM(0:8:8)       #,          <<L1194>>00780080
   UGLYSDFNUMRECS   = 6 CAT SDFILENUM(0:8:8)       #,          <<L1194>>00780090
   UGLYSDFNUMEXTENT = 7 CAT SDFILENUM(0:8:8)       #,          <<L1194>>00780100
   SDFILERR         = 8 CAT SDFILENUM(0:8:8)       #,          <<L1194>>00780110
   UGLYBACKUPFILE   = 9 CAT BACKUPFILENUM(0:8:8)   #,          <<L1194>>00780120
   BACKUPNOTSERIAL  = 10 CAT BACKUPFILENUM(0:8:8)  #,          <<L1194>>00780130
   BACKUPFILERR     = 11 CAT BACKUPFILENUM(0:8:8)  #,          <<L1194>>00780140
   UGLYCOMMANDFILE  = 12 CAT CMDFILENUM(0:8:8)     #,          <<L1194>>00780150
   UGLYCOMFOPTIONS  = 13 CAT CMDFILENUM(0:8:8)     #,          <<L1194>>00780160
   UGLYCOMRECSIZE   = 14 CAT CMDFILENUM(0:8:8)     #,          <<L1194>>00780170
   UGLYCOMDEV       = 15 CAT CMDFILENUM(0:8:8)     #,          <<L1194>>00780180
   UGLYCOMEXTENTS   = 16 CAT CMDFILENUM(0:8:8)     #,          <<L1194>>00780190
   UGLYDUMPFILE     = 17 CAT DUMPFILENUM(0:8:8)    #,          <<L1194>>00780200
   UGLYDUMPFOPTIONS = 18 CAT DUMPFILENUM(0:8:8)    #,          <<L1194>>00780210
   UGLYDUMPRECSIZE  = 19 CAT DUMPFILENUM(0:8:8)    #,          <<L1194>>00780220
   UGLYDUMPDEV      = 20 CAT DUMPFILENUM(0:8:8)    #,          <<L1194>>00780230
   UGLYDEXTENTS     = 21 CAT DUMPFILENUM(0:8:8)    #,          <<L1194>>00780240
   UGLYBLOCKFACTOR  = 22 CAT CMDFILENUM(0:8:8)     #,          <<L1194>>00780250
   BADDEVICE        = 23 CAT DEVTIPE(0:8:8)        #,          <<L1194>>00780260
   UGLYAPFOPTIONS   = 24 CAT APFILENUM(0:8:8)      #,          <<L1194>>00780270
   UGLYAPLDNUM      = 25 CAT APFILENUM(0:8:8)      #,          <<L1194>>00780280
   UGLYAPNUMEXTENTS = 26 CAT APFILENUM(0:8:8)      #;          <<L1194>>00780290
                                                               <<L1194>>00780600
$PAGE " EXTERNAL PROCEDURE DECLARATIONS    JUNE 28, 1974"      <<L1194>>00780610
                                                               <<D9932>>01660050
integer procedure LDEVTODRT(LDEV);                             <<D9932>>01660100
value LDEV;                                                    <<D9932>>01660150
integer LDEV;                                                  <<D9932>>01660200
option external;                                               <<D9932>>01660250
    INTEGER SUBTYPE;<< DEVICE SUBTYPE >>                       <<F2393>>02015100
      IF DITP(DUNIT).(0:2)=0 THEN  << CHECK I/O TYPE >>        <<*9913>>02075000
                                                               <<F2393>>02130010
        << THE ACTUAL CS80 STATUS NEEDS TO BE READ     >>      <<F2393>>02130020
        << FOR CARTRIDGE TAPES TO REFLECT THE CURRENT  >>      <<F2393>>02130030
        << DEVICE STATUS BEFORE A FUNCTION 15 IS DONE. >>      <<F2393>>02130040
        << THE FUNCTION 15 ONLY USES THE LAST STATUS   >>      <<F2393>>02130050
        << THAT WAS READ FOR THE DEVICE AND STORED IN  >>      <<F2393>>02130060
        << THE DEVICES' DIT. THE FUNCTION 7 WILL READ  >>      <<F2393>>02130070
        << THE CURRENT CS80 STATUS INTO THE DIT SO THE >>      <<F2393>>02130080
        << FUNCTION 15 THAT FOLLOWS WILL READ THE      >>      <<F2393>>02130090
        << CURRENT STATUS FROM THE DIT AREA.           >>      <<F2393>>02130100
                                                               <<F2393>>02130110
        SUBTYPE := LDEVTOSUBTYPE(LDEV);                        <<F2393>>02130120
        IF LDEVTOTYPE(LDEV) = 3 AND                            <<F2393>>02130130
           ( SUBTYPE = 3 OR SUBTYPE = 6 )                      <<F2393>>02130140
        THEN P'ATTACHIO(LDEV,0,0,@DEVST,7,1,0,0,1);            <<F2393>>02130150
                                                               <<F2393>>02130160
         SUBTYPE = 8 OR                                        <<*1327>>02481000
         SUBTYPE = 9 OR                                        <<*1327>>02482000
         SUBTYPE = 10 )                                        <<*1327>>02485000
LOGICAL WAIT'TIL'DONE;                                         << 1561>>04265100
ENTRY ABORTIOX'NOWAIT;                                         << 1561>>04265200
                                                               << 1561>>04265300
  WAIT'TIL'DONE := TRUE;                                       << 1561>>04265400
  GO AROUND;                                                   << 1561>>04265500
                                                               << 1561>>04265600
ABORTIOX'NOWAIT:                                               << 1561>>04265700
  WAIT'TIL'DONE := FALSE;                                      << 1561>>04265800
  RSTATUS.CC := CCE;  << CC only set in ABORTIOX'NOWAIT >>     << 1561>>04265810
                                                               << 1561>>04265900
AROUND:                                                        << 1561>>04266000
                                                               <<n1956>>04471000
                                                               <<n1956>>04472000
   IF WAIT'TIL'DONE THEN                                       << 1561>>04489000
      WAITFORIO(IOQX) << WAIT FOR I/O COMPLETION >>            << 1561>>04490000
   ELSE                                                        << 1561>>04491000
      RSTATUS.CC := CCL;  << abort not completely done >>      << 1561>>04492000
        NO'DST'MSG=147,     <<SYSTEM CATALOG MESSAGE #>>       <<89922>>05381000
        NO'ACK'MSG=148,     <<SYSTEM CATALOG MESSAGE #>>       <<89922>>05381500
        NO'INI'MSG=149,     <<SYSTEM CATALOG MESSAGE #>>       <<89922>>05381600
        SYS'MSG'CAT'SET=1,  <<SYSTEM CATALOG MESSAGE SET #>>   <<D9240>>05382000
   DOUBLE ARRAY D'SEGID(*)=DST;                                <<D9240>>05485000
  IOUNFREEZE'(D'SEGID);                                        <<D9240>>05560000
  SETSYSDB;                                                    <<D9240>>05565000
                                                               <<D9240>>05611000
                                                               <<D9240>>05612000
                                                               <<D9240>>05613000
                                                               <<D9240>>05614000
                                                               <<D9240>>05771000
                                                               <<D9240>>05772000
                                                               <<D9240>>05773000
                                                               <<D9240>>05774000
                                                               <<D9240>>05846000
                                                               <<D9240>>05847000
                                                               <<D9240>>05848000
                                                               <<D9240>>05849000
  << if DST already exists, send message and ignore request>>  <<89922>>05900000
   IF SEGID'(OBJIDNUMFIELD) <> 0 THEN << DST# <> 0? >>         <<89922>>05905000
    BEGIN                                                      <<89922>>05906000
       SETSYSDB;                                               <<89922>>05907000
       IOMESSAGE(SYS'MSG'CAT'SET,NO'ACK'MSG,,,,,,,CONSOLE);    <<89922>>05908000
       RESETDB(-1);                                            <<89922>>05909000
    END                                                        <<89922>>05910000
  ELSE           << DATA SEGMENT DOES NOT EXIST>>              <<89922>>05911000
   BEGIN                                                       <<89922>>05912000
  IF J = 0  THEN << NO DATA SEGMENT WAS OBTAINED>>             <<D9240>>05926000
    BEGIN                                                      <<D9240>>05927000
       IOMESSAGE(SYS'MSG'CAT'SET,NO'DST'MSG,,,,,,,CONSOLE);    <<D9240>>05928000
       RESETDB(-1);                                            <<D9240>>05929000
    END                                                        <<D9240>>05930000
  ELSE           << DATA SEGMENT WAS OBTAINED>>                <<D9240>>05931000
    BEGIN                                                      <<D9240>>05932000
      RESETDB(-1);                                             <<D9240>>05933000
                                                               <<D9240>>05950000
                                                               <<D9240>>05955000
    IOFREEZE'(D'SEGID);                                        <<D9240>>05995000
    BANK := absolute(I+2);                                     <<D9240>>06020000
    end;           << J, DATA SEGMENT, NOT EQUAL 0>>           <<D9240>>06060000
   END;  << IF SEGID'(OBJIDNUMFIELD <> 0 >>                    <<89922>>06061000
   IF SEGID'(OBJIDNUMFIELD) = 0 THEN << DST# = 0? >>           <<89922>>06075100
       << WE DID NOT HAVE A DATA SEG. SET UP FOR THE DCU >>    <<89922>>06075110
       << TO WRITE INTO.  THE DCU MAY HAVE THRASHED MEMORY>>   <<89922>>06075120
    BEGIN                                                      <<89922>>06075200
       SETSYSDB;                                               <<89922>>06075300
       IOMESSAGE(SYS'MSG'CAT'SET,NO'INI'MSG,,,,,,,CONSOLE);    <<89922>>06075400
       RESETDB(-1);                                            <<89922>>06075500
    END                                                        <<89922>>06075600
  ELSE           << DATA SEGMENT EXISTS >>                     <<89922>>06075700
    BEGIN                                                      <<89922>>06075800
    END;    << IF SEGID'(OBJIDNUMFIELD)=0 >>                   <<89922>>06206000
$EDIT VOID=8465000                                             << 1561>>06224000
$PAGE "IOMESSPROC"                                             << 1561>>06224100
procedure IOMESSPROC;                                          << 1561>>06225000
option privileged,uncallable;                                  << 1561>>06230000
begin                                                          << 1561>>06235000
                                                               << 1561>>06240000
<<This routine's sole purpose in life is to route messages>>   << 1561>>06245000
<<between terminals (& critical processes) without using  >>   << 1561>>06250000
<<permanent system resources.  This routine will either   >>   << 1561>>06255000
<<dynamically obtain, or release, extra data segments in  >>   << 1561>>06260000
<<MPE to hold a message until the physical I/O is done.   >>   << 1561>>06265000
                                                               << 1561>>06270000
array BUF'HDR(0:21);           <<Work area for MSG DST hdr >>  << 1561>>06345000
byte array B'BUF'HDR(*)=BUF'HDR;                               << 1561>>06346000
                                                               << 1561>>06355000
<<equates for GENMSG stacked parameters>>                      << 1561>>06360000
equate DITDST         = 42,                                    << 1561>>06365000
       DITDSTI        = DITDST*4+3,                            << 1561>>06370000
       DSTB           = 14;  <<DST parm bit in GENMSG call>>   << 1561>>06375000
EQUATE DIT'REPLY = -3; << INIT. ODD VALUE FOR FLAG>>           << 1561>>06380000
integer BUF           = s-3, <<buffer in GENMSG call>>         << 1561>>06385000
        DSTNUM        = s-2; <<DST number in GENMSG call>>     << 1561>>06390000
logical FLAG;                <<whether REPLY in GENMSG>>       << 1561>>06395000
                                                               << 1561>>06400000
                                                               << 1561>>06405000
integer CURRENT'INDEX,   <<index into I/O arrays>>             << 1561>>06410000
                                                               << 1561>>06415000
        MOVE'LENGTH,     <<length to move in MDS instructions>><< 1561>>06420000
        DSTX,            <<DST number to move from/to>>        << 1561>>06425000
        SAVESIR,         << Save GETSIR information >>         << 1561>>06430000
        SBUFX,           <<System buffer index>>               << 1561>>06435000
        TRLX,            << Index of watchdog timer >>         << 1561>>06440000
        LAST'ENTRY;      <<index of last entry in arrays>>     << 1561>>06445000
                                                               << 1561>>06450000
<< timer declarations >>                                       << 1561>>06455000
double NEW'TIME,           << delta time from LAST'TIME >>     << 1561>>06460000
       DST'DCU'LOG,                                            << 1561>>06465000
       LAST'TIME;          << prior cycle TIME obtained >>     << 1561>>06470000
                                                               << 1561>>06475000
define PAUSE'TIME = 30000D#;  << 30 second watchdog timer >>   << 1561>>06480000
                                                               << 1561>>06485000
<< TABLE RELATIVE INDEX INTO IOQ TABLE >>                      << 1561>>06490000
INTEGER                                                        << 1561>>06495000
   Q'ENTRY'INDEX,                                              << 1561>>06500000
   IOQ'ENTRY'INDEX = Q'ENTRY'INDEX,                            << 1561>>06505000
   DRQ'ENTRY'INDEX = Q'ENTRY'INDEX;                            << 1561>>06510000
                                                               << 1561>>06515000
<< S-relative arguments for RECEIVEMSG >>                      << 1561>>06520000
integer SM0 = s-0,                                             << 1561>>06525000
        SM1 = s-1,                                             << 1561>>06530000
        SM2 = s-2,                                             << 1561>>06535000
        SM3 = s-3;                                             << 1561>>06540000
                                                               << 1561>>06545000
pointer LOG'BUF'PTR;  <<pointer to logging info buffer in stack<< 1561>>06550000
                                                               << 1561>>06555000
<<declarations to fire-off PROGEN if SHUTDOWN requested>>      << 1561>>06560000
integer PROGEN = DB + %141;  <<Sysglob location>>              << 1561>>06565000
define SHUTDOWN = absolute(%1300)#; << Shutdown flag >>        << 1561>>06570000
define THISPIN = (CURPRC)/PCBSIZE#,                            << 1561>>06575000
       CONSCELL   = absolute(%1074)#, << system cons ldev >>   << 1561>>06580000
       IOMSGPROC = absolute(%1152)#;                           << 1561>>06595000
                                                               << 1561>>06600000
equate MSGSIR  = %24,  << MSG SIR number >>                    << 1561>>06605000
       SBUFDST = 8;                                            << 1561>>06610000
                                                               << 1561>>06620000
Start:                                                         << 1561>>06625000
                                                               << 1561>>06630000
if SHUTDOWN.(3:1) then                                         << 1561>>06635000
  begin   <<process stop>>                                     << 1561>>06640000
  SETSYSDB;                                                    << 1561>>06645000
  AWAKE(PROGEN,2<<son>>,0);                                    << 1561>>06650000
  WAIT(0,0);        <<go to sleep forever>>                    << 1561>>06655000
  end;                                                         << 1561>>06665000
                                                               << 1561>>06670000
                                                               << 1561>>06675000
   <<check to see if any IPC messages are waiting>>            << 1561>>06680000
while PORTSTATUS(0) do                                         << 1561>>06685000
   begin  <<there are messages to get & process>>              << 1561>>06690000
   assemble(adds 4); <<return cells>>                          << 1561>>06695000
   RECEIVEMSG(0,4,0); <<read 4 words, port 0, destructive >>   << 1561>>06700000
   if = then                                                   << 1561>>06705000
     begin  <<got message OK>>                                 << 1561>>06710000
     case SM3 of                                               << 1561>>06715000
        begin                                                  << 1561>>06720000
                                                               << 1561>>06725000
<<0>>   begin <<error log sysbuf relative>>                    << 1561>>06730000
        SBUFX := SM2;    <<save system buffer index>>          << 1561>>06735000
        MOVE'LENGTH := SM1; <<save length to log from SYSBUF>> << 1561>>06740000
        tos := 0;        <<beginning of temp buffer>>          << 1561>>06745000
        @LOG'BUF'PTR := @SM0; <<save DB addr of this buffer>>  << 1561>>06750000
        tos := MOVE'LENGTH-1; <<addt'l buffer space>>          << 1561>>06755000
        assemble(adds 0);     <<allocate buffer>>              << 1561>>06760000
                                                               << 1561>>06765000
        <<move in information from system buffer>>             << 1561>>06770000
        tos := @LOG'BUF'PTR;  <<target DB address>>            << 1561>>06775000
        tos := SBUFDST;       <<source DST is SYSBUFS>>        << 1561>>06780000
        tos := SBUFX;     <<location of buf in XDS>>           << 1561>>06785000
        tos := MOVE'LENGTH;   <<length of data in SYSBUF>>     << 1561>>06790000
        assemble(mfds 4);     <<move in data>>                 << 1561>>06795000
                                                               << 1561>>06800000
        <<now, free up system buffer>>                         << 1561>>06805000
        SETSYSDB;                                              << 1561>>06810000
        RETURNSBUF(SBUFX);                                     << 1561>>06815000
        RESETDB(-1);                                           << 1561>>06820000
                                                               << 1561>>06825000
        <<add in logging information>>                         << 1561>>06830000
        tos := MOVE'LENGTH - 15;  <<length of variable info>>  << 1561>>06835000
        tos := 11;                <<log type>>                 << 1561>>06840000
        LOG;                                                   << 1561>>06845000
                                                               << 1561>>06850000
        end;                                                   << 1561>>06855000
                                                               << 1561>>06860000
<<1>>   begin << table-overflow error >>                       << 1561>>06865000
                                                               << 1561>>06870000
        << move table name to array >>                         << 1561>>06875000
        move B'BUF'HDR := "MPE Table ",2;                      << 1561>>06880000
        case SM3 of   << actually s-2, but have stacked parm>> << 1561>>06885000
        begin                                                  << 1561>>06890000
        move * := "TBUF",2;                                    << 1561>>06895000
        move * := "SBUF",2;                                    << 1561>>06900000
        move * := "IOQ",2;                                     << 1561>>06905000
        move * := "DISC REQUEST",2;                            << 1561>>06910000
        move * := "TRL",2;                                     << 1561>>06915000
        end;                                                   << 1561>>06920000
        move * := (" has overflowed!!!",%7,%7<<bell>>),2;      << 1561>>06925000
        MOVE'LENGTH := (tos-@B'BUF'HDR+1)&lsr(1);     << ajk >><< 1561>>06930000
                                                               << 1561>>06935000
        <<get SYSBUF to move it to>>                           << 1561>>06940000
        SETSYSDB;                                              << 1561>>06945000
        @LOG'BUF'PTR := GETSBUF(2);                            << 1561>>06950000
        RESETDB(-1);                                           << 1561>>06955000
        if @LOG'BUF'PTR <> 0 then                              << 1561>>06960000
          begin  << we got one >>                              << 1561>>06965000
          SBUFX := @LOG'BUF'PTR;  <<SBUF index>>               << 1561>>06970000
          << move data to sysbuf >>                            << 1561>>06975000
          tos := SBUFDST;   <<DST of system buffers>>          << 1561>>06980000
          tos := SBUFX;     <<offset into system buffers>>     << 1561>>06985000
          tos := @BUF'HDR;  <<source DB address>>              << 1561>>06990000
          tos := MOVE'LENGTH;                                  << 1561>>06995000
          assemble(mtds 4);                                    << 1561>>07000000
                                                               << 1561>>07005000
          << now, perform ATTACHIO to send to console, ASAP!>> << 1561>>07010000
     tos:=ATTACHIO(CONSCELL,            <<ldev of console>>    << 1561>>07015000
                   0,  <<QMISC>>                               << 1561>>07020000
                   0,  <<DSTX, SYSBUF used>>                   << 1561>>07025000
                   SBUFX,  <<SYSBUF index>>                    << 1561>>07030000
                   1,  <<FUNC, write>>                         << 1561>>07035000
                   MOVE'LENGTH, <<CNT>>                        << 1561>>07040000
                   0,0,<<P1, P2>>                              << 1561>>07045000
                   %217);<<SBUF,no IMPEDE,no PCB,Soft preemp>> << 1561>>07050000
                                                               << 1561>>07055000
          << if doubleword on tos is zero, then failed >>      << 1561>>07060000
          assemble(dtst,ddel);                                 << 1561>>07065000
          if = then                                            << 1561>>07070000
            begin  << must return system buffer >>             << 1561>>07075000
            SETSYSDB;                                          << 1561>>07080000
            RETURNSBUF(@LOG'BUF'PTR);                          << 1561>>07085000
            RESETDB(-1);                                       << 1561>>07090000
            end;                                               << 1561>>07095000
                                                               << 1561>>07100000
          << Now, log message to CONSOLE logging >>            << 1561>>07105000
          LOG15(MOVE'LENGTH*2,@B'BUF'HDR,MOVE'LENGTH*2,15);    << 1561>>07110000
                                                               << 1561>>07115000
          end;                                                 << 1561>>07120000
                                                               << 1561>>07125000
        end;                                                   << 1561>>07130000
                                                               << 1561>>07135000
<<2>>   begin <<IOQ index for sent message>>                   << 1561>>07140000
        << this function now is performed by MESSENGER >>      << 1561>>07141000
        end;                                                   << 1561>>07142000
                                                               << 1561>>07225000
<<3>>   begin <<GENMSG from I/O driver, ICS spawned>>          << 1561>>07230000
        SBUFX := SM2;     <<save sysbuf index>>                << 1561>>07290000
        FLAG := false;    <<reply flag>>                       << 1561>>07295000
        TOS := 0;    << RETURN VALUE FROM GENMSG >>            << 1561>>07300000
        ASSEMBLE( ADDS 14 ); << OPEN BUF OF GENMSG PARMS >>    << 1561>>07305000
        ASSEMBLE( LRA S-13 ); << DB REL DISP OF BUFFER >>      << 1561>>07310000
        TOS := SBH'DST;       << DST NUMBER OF SBUF    >>      << 1561>>07315000
        TOS := SBUFX+1;       << DISP INTO SBUF TABLE  >>      << 1561>>07320000
        TOS := 14;            << NR OF WORDS TO MOVE   >>      << 1561>>07325000
        ASSEMBLE( MFDS 4 );                                    << 1561>>07330000
        DSTX := SBF(SBUFX+12);<< SAVE DITP IN DSTX     >>      << 1561>>07335000
        SETSYSDB;                                              << 1561>>07340000
        <<return system buffer>>                               << 1561>>07345000
        RETURNSBUF(SBUFX);                                     << 1561>>07350000
        assemble(tbc DSTB); <<see if REPLY and no DST>>        << 1561>>07355000
        if <> then                                             << 1561>>07360000
          begin                                                << 1561>>07365000
          if DSTNUM = 0 then                                   << 1561>>07370000
            SUDDENDEATH(271);                                  << 1561>>07375000
          FLAG := DIT'REPLY;                                   << 1561>>07380000
          BUF := BUF+DSTNUM-(DST(DITDSTI)-SYSDB);              << 1561>>07385000
          DSTNUM := DITDST;                                    << 1561>>07390000
          end;                                                 << 1561>>07400000
        RESETDB(-1);  <<DB is back to stack>>                  << 1561>>07405000
        assemble(pcal GENMSG);                                 << 1561>>07410000
        assemble(del);  <<delete return value on tos>>         << 1561>>07415000
        if FLAG then                                           << 1561>>07420000
          begin                                                << 1561>>07425000
          SETSYSDB;                                            << 1561>>07430000
          tos := DSTX;            <<get the DIT pntr>>         << 1561>>07435000
          DISABLE;                                             << 1561>>07440000
          PS0.IAK := 1;   <<set interrupt ack bit>>            << 1561>>07445000
          Q'ENTRY'INDEX := PS0(DIOQP); <<set msg reply in IOQ>><< 1561>>07450000
          if <> then                                           << 1561>>07455000
            IF PS0.(0:2) = 1 << IF DRQ ENTRY >>                << 1561>>07460000
               THEN DRQ'MSGDONE := 1                           << 1561>>07465000
               ELSE IOQ'MSGDONE := 1;                          << 1561>>07470000
          ENABLE;                                              << 1561>>07475000
          assemble(del);  <<delete pointer>>                   << 1561>>07480000
          AWAKEIO(*,NOIMPEDE);                                 << 1561>>07485000
          RESETDB(-1);                                         << 1561>>07490000
          end;                                                 << 1561>>07495000
                                                               << 1561>>07505000
        end;                                                   << 1561>>07520000
                                                               << 1561>>07525000
<<4>>  begin << Process device maintenence request >>          << 1561>>07530000
       PROC'MAINT'REQ(SM2,SM1,SM0);                            << 1561>>07535000
       end;                                                    << 1561>>07540000
                                                               << 1561>>07545000
<<5>>   PROC'DCU'REQUEST(SM2,DST'DCU'LOG); << DCU maintenence>><< 1561>>07550000
                                                               << 1561>>07555000
        end; <<of case on message type>>                       << 1561>>07560000
                                                               << 1561>>07565000
        assemble(subs 4);  <<pop 4 words off tos>>             << 1561>>07570000
        end;  <<of successful receipt of IPC msg>>             << 1561>>07575000
                                                               << 1561>>07580000
                                                               << 1561>>07600000
      end;    <<of check for any IPC message>>                 << 1561>>07605000
<<now, wait for a new message to wake me up>>                  << 1561>>07610000
WAIT(-(%4) <<msgwait>>,0);                                     << 1561>>07615000
go to Start;                                                   << 1561>>07620000
                                                               << 1561>>07625000
end;   <<of process/procedure IOMESSPROC>>                     << 1561>>07630000
$PAGE "PROCEDURES CALLED BY SDFINIT"                           <<D9932>>08470040
<<***********************************************************>><<D9932>>08470050
<<***********************************************************>><<D9932>>08470100
<<*                                                        **>><<D9932>>08470150
<<*              PROCEDURES CALLED BY SDFINIT              **>><<D9932>>08470200
<<*                                                        **>><<D9932>>08470250
<<***********************************************************>><<D9932>>08470300
<<***********************************************************>><<D9932>>08470350
                                                               <<D9932>>08470400
                                                               <<D9932>>08470450
PROCEDURE CONFIGUREVMTABLE(CONFIG);                            <<D9932>>08470500
VALUE   CONFIG;                                                <<D9932>>08470550
POINTER CONFIG;                                                <<D9932>>08470600
BEGIN                                                          <<D9932>>08470650
DOUBLE                                                         <<D9932>>08470700
   VTAB'NUMVMSECTORS,                                          <<D9932>>08470750
   VMSTARTSECTOR,                                              <<D9932>>08470800
   VMENDSECTOR;                                                <<D9932>>08470850
                                                               <<D9932>>08470900
INTEGER POINTER                                                <<D9932>>08470950
   DITP;                                                       <<D9932>>08471000
                                                               <<D9932>>08471050
INTEGER                                                        <<D9932>>08471100
   DRT,                                                        <<D9932>>08471150
   HVOL,                                                       <<D9932>>08471200
   VTABENTRYSIZE,                                              <<D9932>>08471250
   VOLUME,                                                     <<D9932>>08471300
   LDEV,                                                       <<D9932>>08471350
   LPDT'INDEX,                                                 <<D9932>>08471400
   VMSTARTSECTOR1   = VMSTARTSECTOR,                           <<D9932>>08471450
   VMSTARTSECTOR2   = VMSTARTSECTOR + 1,                       <<D9932>>08471500
   VMENDSECTOR1     = VMENDSECTOR,                             <<D9932>>08471550
   VMENDSECTOR2     = VMENDSECTOR + 1,                         <<D9932>>08471600
   VMINDEX         := 0;                                       <<D9932>>08471650
                                                               <<D9932>>08471700
INTEGER ARRAY                                                  <<D9932>>08471750
   VTABENTRY (0:VTABARRAYSIZE);                                <<D9932>>08471800
                                                               <<D9932>>08471850
   << GET VOLUME TABLE SIZE >>                                 <<D9932>>08471900
   TOS := @VTABENTRY; << ADDRESS OF DEST. ARRAY >>             <<D9932>>08471950
   TOS := %35;        << VOLUME TABLE DST# %35  >>             <<D9932>>08472000
   TOS := 0;          << OFFSET 0 IN DST        >>             <<D9932>>08472050
   TOS := 1;          << GET 1 WORD             >>             <<D9932>>08472100
   ASSEMBLE (MFDS 4);                                          <<D9932>>08472150
                                                               <<D9932>>08472200
   HVOL          := VTABENTRY(0).(0:8);                        <<D9932>>08472250
   VTABENTRYSIZE := VTABENTRY(0).(8:8);                        <<D9932>>08472300
                                                               <<D9932>>08472350
   VOLUME := 0;                                                <<D9932>>08472400
   WHILE ((VOLUME := VOLUME + 1) <= HVOL)                      <<D9932>>08472450
     AND (VMINDEX <= MAXVMINDEX) DO                            <<D9932>>08472500
     BEGIN << SCAN VOLUME TABLE ENTRIES >>                     <<D9932>>08472550
       << GET VOLUME TABLE ENTRY >>                            <<D9932>>08472600
       TOS := @VTABENTRY;             << ADDRESS OF DEST.  >>  <<D9932>>08472650
       TOS := %35;                    << VOL. TABLE DST#%35>>  <<D9932>>08472700
       TOS := VOLUME * VTABENTRYSIZE; << OFFSET OF ENTRY   >>  <<D9932>>08472750
       TOS := VTABENTRYSIZE;          << GET 1 ENTRY       >>  <<D9932>>08472800
       ASSEMBLE (MFDS 4);                                      <<D9932>>08472850
                                                               <<D9932>>08472900
       IF VTABENTRY(0) <> 0 THEN                               <<D9932>>08472950
         IF SYSTEM'VOLUME THEN                                 <<D9932>>08473000
           IF VTAB'LDEV <> 0 THEN                              <<D9932>>08473050
             BEGIN  << SET UP CONFIG TABLE ENTRY >>            <<D9932>>08473100
               LDEV     := VTAB'LDEV;                          <<D9932>>08473150
               CTVMLDEV := VTAB'LDEV;                          <<D9932>>08473200
                                                               <<D9932>>08473250
               DRT           := LDEVTODRT     (LDEV);          <<D9932>>08473300
               CTVMDRT       := DRT.(7:9);                     <<D9932>>08473350
               CTVMUNIT      := DRT.(4:3);                     <<D9932>>08473400
               CTVMSUBTYPE   := LDEVTOSUBTYPE (LDEV);          <<D9932>>08473450
               CTVMTYPE      := LDEVTOTYPE    (LDEV);          <<D9932>>08473500
                                                               <<D9932>>08473550
               CTVMHODASTART := VTAB'HODASTART;                <<D9932>>08473600
               CTVMLODASTART := VTAB'LODASTART;                <<D9932>>08473650
                                                               <<D9932>>08473700
               VMSTARTSECTOR1 := CTVMHODASTART;                <<D9932>>08473750
               VMSTARTSECTOR2 := CTVMLODASTART;                <<D9932>>08473800
                                                               <<D9932>>08473850
               TOS := VTABENTRY(10); << GET VM NUM SECTORS >>  <<D9932>>08473900
               TOS := VTABENTRY(11);                           <<D9932>>08473950
               VTAB'NUMVMSECTORS := TOS;                       <<D9932>>08474000
                                                               <<D9932>>08474050
               VMENDSECTOR := VMSTARTSECTOR +                  <<D9932>>08474100
                              VTAB'NUMVMSECTORS - 1 D;         <<D9932>>08474150
                                                               <<D9932>>08474200
               CTVMHODAEND := VMENDSECTOR1;                    <<D9932>>08474250
               CTVMLODAEND := VMENDSECTOR2;                    <<D9932>>08474300
                                                               <<D9932>>08474350
               VMINDEX := VMINDEX + 1;                         <<D9932>>08474400
             END; << SET UP CONFIG TABLE ENTRY >>              <<D9932>>08474450
     END; << WHILE SCAN OF VOLUME TABLE ENTRIES >>             <<D9932>>08474500
END; << PROCEDURE CONFIGUREVMTABLE >>                          <<D9932>>08474550
PROCEDURE MESSAGE(MESSAGENUM);                                 <<L1194>>08475000
VALUE MESSAGENUM;                                              <<L1194>>08475010
INTEGER                                                        <<L1194>>08475020
   MESSAGENUM; <<(0:8) <>0, THEN OFFENDING FILE'S FILE NUMBER>><<L1194>>08475030
               <<(8:8) # OF MESSAGE IN THE MESSAGE ARRAY>>     <<L1194>>08475040
BEGIN                                                          <<L1194>>08475050
INTEGER ARRAY                                                  <<L1194>>08475060
   BUF(0:1024);                                                <<L1194>>08475070
BYTE POINTER                                                   <<L1194>>08475080
   BBUF:=@BUF;                                                 <<L1194>>08475090
                                                               <<L1194>>08475100
INTEGER                                                        <<L1194>>08475110
   MSGSTART,MSGEND;                                            <<L1194>>08475120
BYTE ARRAY MSGARRAY(0:1)=PB:=                                  <<L1194>>08475130
   "#",                                                        <<L1194>>08475140
   "SDF FILE DOES NOT EXIST#",                                 <<L1194>>08475150
   "SDF FILE HAS INVALID FOPTIONS#",                           <<L1194>>08475160
   "SDF FILE HAS INVALID RECORD SIZE#",                        <<L1194>>08475170
   "SDF FILE IS NOT ON THE SYSTEM DISC#",                      <<L1194>>08475180
   "SDF FILE HAS AN INVALID FILE CODE#",                       <<L1194>>08475190
   "SDF FILE HAS AN INSUFFICIENT NUMBER OF RECORDS#",          <<L1194>>08475200
   "SDF FILE HAS MORE THAN ONE EXTENT#",                       <<L1194>>08475210
   "ERROR ENCOUNTERED ACCESSING SDF FILE#",                    <<L1194>>08475220
   "UNABLE TO OPEN BACKUP FILE#",                              <<L1194>>08475230
   "BACKUP FILE NOT A SERIAL DISC#",                           <<L1194>>08475240
   "ERROR ENCOUNTERED WHILE ACCESSING BACKUP FILE#",           <<L1194>>08475250
   "UNABLE TO OPEN COMMAND FILE#",                             <<L1194>>08475260
   "COMMAND FILE HAS INVALID FOPTIONS#",                       <<L1194>>08475270
   "COMMAND FILE HAS INVALID RECORD SIZE#",                    <<L1194>>08475280
   "COMMAND FILE IS NOT ON A DISC#",                           <<L1194>>08475290
   "COMMAND FILE HAS MORE THAN ONE EXTENT#",                   <<L1194>>08475300
   "UNABLE TO OPEN DISC DUMP FILE#",                           <<L1194>>08475310
   "DISC DUMP FILE HAS INVALID FOPTIONS#",                     <<L1194>>08475320
   "DISC DUMP FILE HAS INVALID RECORD SIZE#",                  <<L1194>>08475330
   "DISC DUMP FILE IS NOT ON A DISC#",                         <<L1194>>08475340
   "DUMP FILE HAS MORE THAN ONE EXTENT#",                      <<L1194>>08475350
   "COMMAND FILE BLOCK FACTOR <> 5#",                          <<L1194>>08475360
   "BADDEVICE CAN'T CONFIGURE BOOT #",                         <<L1194>>08475370
   "INVALID FOPTIONS IN APPEND FILE:#",                        <<L1194>>08475380
   "INVALID LOGICAL DEV NUMBER IN APPEND FILE:#",              <<L1194>>08475390
   "MORE THAN ONE EXTENT IN APPEND FILE:#";                    <<L1194>>08475400
                                                               <<L1194>>08475410
   <<WRITE PREAMBLE>>                                          <<L1194>>08475420
   MOVE BBUF:="* * * DUMP FACILITY ERROR * * *",2;             <<L1194>>08475430
   PRINT(BUF,(@BBUF-S0),0); DEL;                               <<L1194>>08475440
                                                               <<L1194>>08475450
   MESSAGENUM:=MESSAGENUM.(8:8);                               <<L1194>>08475460
                                                               <<L1194>>08475470
   <<LOCATE AND PRINT THE MESSAGE>>                            <<L1194>>08475480
   MSGSTART:=0;                                                <<L1194>>08475490
   WHILE (MESSAGENUM:=MESSAGENUM-1) > 0 DO                     <<L1194>>08475500
      <<FLUSH PAST PRECEDING MESSAGES>>                        <<L1194>>08475510
      DO                                                       <<L1194>>08475520
         BEGIN                                                 <<L1194>>08475530
         <<FIND END OF THE MESSAGE>>                           <<L1194>>08475540
         MSGSTART:=MSGSTART+1;                                 <<L1194>>08475550
         MOVE BBUF:=MSGARRAY(MSGSTART),(1);                    <<L1194>>08475560
         END UNTIL BBUF="#";                                   <<L1194>>08475570
   MSGEND:=MSGSTART:=MSGSTART+1;                               <<L1194>>08475580
   DO                                                          <<L1194>>08475590
      BEGIN                                                    <<L1194>>08475600
      <<FIND END OF THE TARGET MESSAGE>>                       <<L1194>>08475610
      MSGEND:=MSGEND+1;                                        <<L1194>>08475620
      MOVE BBUF:=MSGARRAY(MSGEND),(1);                         <<L1194>>08475630
      END UNTIL BBUF="#";                                      <<L1194>>08475640
   MOVE BBUF:=MSGARRAY(MSGSTART),(MSGEND-MSGSTART);            <<L1194>>08475650
   PRINT(BUF,(MSGSTART-MSGEND),0);                             <<L1194>>08475660
   END  <<MESSAGE>>;                                           <<L1194>>08475670
                                                               <<L1194>>08475680
PROCEDURE CONFIGAPPENDFILES(CONFIG);                           <<L1194>>08475690
VALUE   CONFIG;                                                <<L1194>>08475700
POINTER CONFIG;                                                <<L1194>>08475710
BEGIN                                                          <<L1194>>08475720
INTEGER                                                        <<L1194>>08475730
   DEVICETYPE, RECSIZE, FILECODE, NUMEXTENT,                   <<L1352>>08475740
   APFILENUM:=0, FILECOUNT, ACTUALRECSIZE, NUMSECTORS;         <<L1194>>08475750
DOUBLE                                                         <<L1194>>08475760
   NUMREC, LABELADDR;                                          <<L1194>>08475770
DOUBLE POINTER  CONFIGD=CONFIG;                                <<L1194>>08475780
INTEGER ARRAY                                                  <<L1194>>08475790
   APFILEDESIG(0:14);                                          <<L1194>>08475800
BYTE ARRAY                                                     <<L1194>>08475810
   BAPFILEDESIG(*)=APFILEDESIG;                                <<L1194>>08475820
LOGICAL                                                        <<L1194>>08475830
   FOPTIONS, LDNUM, EXTSIZE;                                   <<L1352>>08475840
EQUATE                                                         <<L1194>>08475850
   OLDFILE   = 1,                                              <<L1194>>08475860
   SAVE      = 1;                                              <<L1194>>08475870
DEFINE                                                         <<L1194>>08475880
   NOTFIXEDRECFORMAT  = FOPTIONS.(8:2) <> 0#,                  <<L1194>>08475890
   BINARYFILE         = FOPTIONS.(13:1) = 0#;                  <<L1194>>08475900
                                                               <<L1194>>08475910
   FILECOUNT:=0;                                               <<L1194>>08475920
   FOR FILECOUNT := 0 UNTIL 3 DO                               <<L1194>>08475930
      BEGIN                                                    <<L1194>>08475940
      CASE FILECOUNT OF                                        <<L1194>>08475950
         BEGIN                                                 <<L1194>>08475960
         MOVE BAPFILEDESIG := "LOADMAP.PUB.SYS; ";             <<L1194>>08475970
         MOVE BAPFILEDESIG := "MPECHECK.PUB.SYS;";             <<L1194>>08475980
         MOVE BAPFILEDESIG := "CONFDATA.PUB.SYS;";             <<L1194>>08475990
         MOVE BAPFILEDESIG := "HPPMAP.PUB.SYS;  ";             <<L1194>>08476000
         END;                                                  <<L1194>>08476010
      APFILENUM:=FOPEN(BAPFILEDESIG,OLDFILE);                  <<L1194>>08476020
      IF = THEN                                                <<L1194>>08476030
         BEGIN  <<APPEND FILE OPENED, CHECK ITS VALIDITY>>     <<L1194>>08476040
         FGETINFO(APFILENUM,BAPFILEDESIG,FOPTIONS,,RECSIZE,    <<L1194>>08476050
            DEVICETYPE,LDNUM,,FILECODE,,NUMREC,,,,,EXTSIZE,    <<L1194>>08476060
            NUMEXTENT,,,LABELADDR);                            <<L1194>>08476070
         IF <> THEN                                            <<L1194>>08476080
            BEGIN                                              <<L1194>>08476090
               PRINT(APFILEDESIG,0,0);                         <<L1194>>08476100
               PRINT(APFILEDESIG,-29,0);                       <<L1194>>08476110
               MOVE BAPFILEDESIG := "FGETINFO FAILED";         <<L1194>>08476120
               PRINT(APFILEDESIG,-14,0);                       <<L1194>>08476130
            END                                                <<L1194>>08476140
         ELSE                                                  <<L1194>>08476150
         IF NOTFIXEDRECFORMAT THEN                             <<L1194>>08476160
            BEGIN                                              <<L1194>>08476170
               MESSAGE(UGLYAPFOPTIONS);                        <<L1194>>08476180
               PRINT(APFILEDESIG,-29,0);                       <<L1194>>08476190
               PRINT(APFILEDESIG,0,0);                         <<L1194>>08476200
            END                                                <<L1194>>08476210
         ELSE IF LDNUM <> 1 THEN                               <<L1194>>08476220
            BEGIN                                              <<L1194>>08476230
               MESSAGE(UGLYAPLDNUM);                           <<L1194>>08476240
               PRINT(APFILEDESIG,-29,0);                       <<L1194>>08476250
               PRINT(APFILEDESIG,0,0);                         <<L1194>>08476260
            END                                                <<L1194>>08476270
             ELSE                                              <<L1194>>08476280
                BEGIN                                          <<L1194>>08476290
                IF BINARYFILE THEN                             <<L1194>>08476300
                   ACTUALRECSIZE := RECSIZE * 2                <<L1194>>08476310
                ELSE ACTUALRECSIZE := RECSIZE * (-1);          <<L1194>>08476320
                NUMSECTORS:=INTEGER((NUMREC *                  <<L1194>>08476330
                   DOUBLE(ACTUALRECSIZE))/256D);               <<L1194>>08476331
                IF LOGICAL(NUMSECTORS) > EXTSIZE THEN          <<L1352>>08476340
                 BEGIN                                         <<L1194>>08476350
                    MESSAGE(UGLYAPNUMEXTENTS);                 <<L1194>>08476360
                    PRINT(APFILEDESIG,-29,0);                  <<L1194>>08476370
                    PRINT(APFILEDESIG,0,0);                    <<L1194>>08476380
                 END                                           <<L1194>>08476390
                ELSE                                           <<L1194>>08476400
                CASE FILECOUNT OF                              <<L1194>>08476410
                     BEGIN                                     <<L1194>>08476420
                                                               <<L1194>>08476430
        <<LOADMAP>>     BEGIN                                  <<L1194>>08476440
                        CTNUMSECTFILE1  := NUMSECTORS;         <<L1194>>08476450
                        CTDISCADDRFILE1 := LABELADDR;          <<L1194>>08476460
                        END;                                   <<L1194>>08476470
                                                               <<L1194>>08476480
        <<MPECHECK>>    BEGIN                                  <<L1194>>08476490
                        CTNUMSECTFILE2  := NUMSECTORS;         <<L1194>>08476500
                        CTDISCADDRFILE2 := LABELADDR;          <<L1194>>08476510
                        END;                                   <<L1194>>08476520
                                                               <<L1194>>08476530
        <<CONFDATA>>    BEGIN                                  <<L1194>>08476540
                        CTNUMSECTFILE3  := NUMSECTORS;         <<L1194>>08476550
                        CTDISCADDRFILE3 := LABELADDR;          <<L1194>>08476560
                        END;                                   <<L1194>>08476570
                                                               <<L1194>>08476580
        <<HPPMAP>>      BEGIN                                  <<L1194>>08476590
                        CTNUMSECTFILE4  := NUMSECTORS;         <<L1194>>08476600
                        CTDISCADDRFILE4 := LABELADDR;          <<L1194>>08476610
                        END;                                   <<L1194>>08476620
                                                               <<L1194>>08476630
                     END;  <<INNER CASE>>                      <<L1194>>08476640
                  END;  <<APPEND FILE SAVE>>                   <<L1194>>08476650
         FCLOSE(APFILENUM,SAVE,0);                             <<L1194>>08476660
         END;  <<APPEND FILE VALIDITY CHECK>>                  <<L1194>>08476670
      END;  <<FOR>>                                            <<L1194>>08476680
   END;                                                        <<L1194>>08476690
                                                               <<L1194>>08476700
$PAGE "SDFINIT PROCEDURE - DATA DEFINITIONS"                   <<L1194>>08476710
<<@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@>><<D9109>>08802500
   VERSION = [8/0,8/17];  <<UPDATE - FIX>>                     <<L2103>>08805000
<<@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@>><<D9109>>08807500
   TIOGA            = 7,      << MIGHTY MOUSE FAMILY >>        <<L2103>>08921000
   MICRO            = 8,      << MIGHTY MOUSE FAMILY >>        <<L2103>>08922000
   FN,BLOCKSIZE,LOGDEVICE,DEVICETYPE,RECSIZE,FILECODE,                  10105000
   NUMEXTENT,BLOCKFACTOR;                                               10110000
$EDIT VOID=10450000                                            <<L1194>>10185000
$EDIT VOID=13345000                                            <<D9932>>13090000
$EDIT VOID=13510000                                            <<L1194>>13355000
        OR CPUTYPE=MM OR CPUTYPE=TIOGA OR CPUTYPE=MICRO        <<L2103>>14615000
$EDIT VOID=14640000                                            <<D9109>>14640000
      IF LDTDEVICE.(10:6)=TMAGTAPE THEN                        <<D9109>>14671000
         SP0.(9:4):=DEVINFO(3).(13:3)                          <<D9109>>14672000
      ELSE                                                     <<D9109>>14673000
         SP0.(9:4):=DEVINFO(3).(12:4);                         <<D9109>>14674000
              DEVTIPE,LDNFORGETDEVINFO,,                                14830000
      CONFIGUREVMTABLE(CONFIG);                                <<D9932>>20021000
      CTDSTADDR  := ABSOLUTE (2);                              <<L1026>>20022000
      CTNUMDST'S := ABSOLUTE (ABSOLUTE (2));                   <<L1026>>20023000
      CONFIGAPPENDFILES(CONFIG);                               <<L1194>>20024000
      OR CPUTYPE=MM OR CPUTYPE=TIOGA OR CPUTYPE=MICRO          <<L2103>>20560000
      OR MODE=BACKUPMODE THEN                                  <<L2103>>20563000
