COMPILATION LISTING OF SEGMENT disk_rebuild_caller Compiled by: Multics PL/I Compiler, Release 32f, of October 9, 1989 Compiled at: Bull HN, Phoenix AZ, System-M Compiled on: 11/11/89 1018.9 mst Sat Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1984 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 13 /****^ HISTORY COMMENTS: 14* 1) change(86-01-16,Fawcett), approve(86-04-11,MCR7383), 15* audit(86-05-14,LJAdams), install(86-07-17,MR12.0-1097): 16* Add support for subvolumes, and 512_WORD_IO, 3380 and 3390. 17* END HISTORY COMMENTS */ 18 19 20 disk_rebuild_caller: proc (a_dtp, apvtx1, apvtx2, opt_bits); 21 22 /* Written by Kobziar from init_disk_pack_. */ 23 /* Reworked for fill_vol_extents_, BSG 08/31/76 */ 24 /* Modified for countervalidate_label_ BSG 12/1/76 */ 25 /* Modified for to allow rebuild to larger disk, 7/23/81 M.R. Jordan */ 26 /* Modified for new volume format, and to allow reduction in number 27* of VTOCEs, March 1982, J. Bongiovanni */ 28 /* Modified '83 KPL for fix to error message about rebuild */ 29 30 dcl opt_bits bit (36) aligned, 31 (pvtx1, pvtx2) fixed bin, /* Physical Volume Table Indexes */ 32 tpsp fixed bin, /* total partition space */ 33 a_dtp ptr, 34 (apvtx1, apvtx2) fixed bin, /* drive args */ 35 (dev_type1, dev_type2) fixed bin, /* drive types index */ 36 code fixed bin (35); /* error code */ 37 38 39 40 dcl num_pages fixed bin, /* Number of records in paging area on this volume */ 41 baseadd fixed bin, 42 i fixed bin, 43 interlace fixed bin init (2), /* use alternate address assignment in copying */ 44 old_n_vtoce fixed bin, 45 n_vtoce fixed bin; /* number of VTOC entries in VTOC */ 46 47 dcl buffer (512) fixed bin (71); 48 49 dcl (addr, clock) builtin; 50 51 dcl com_err_ entry options (variable); 52 dcl countervalidate_label_$query entry (ptr, char (*), char (*), char (*)) returns (bit (1)); 53 dcl fill_vol_extents_ entry (ptr, fixed bin, fixed bin, fixed bin, fixed bin, bit (1) aligned, fixed bin (17), fixed bin (35)); 54 dcl initializer_gate_$disk_rebuild entry (fixed bin, fixed bin, ptr, bit (36) aligned, fixed bin, fixed bin (35)); 55 dcl initializer_gate_$read_disk entry (fixed bin, fixed bin, ptr, fixed bin (35)); 56 dcl ioa_ entry options (variable); 57 58 labelp = addr (buffer); 59 60 dtp = a_dtp; 61 pvtx1 = apvtx1; 62 pvtx2 = apvtx2; 63 dev_type1 = dt.array (pvtx1).device_type; 64 dev_type2 = dt.array (pvtx2).device_type; 65 66 call ioa_ ("rebuild_disk: volume ^a from ^a onto ^a", dt.array (pvtx1).pvname, 67 dt.array (pvtx1).drive_name, dt.array (pvtx2).drive_name); 68 69 call initializer_gate_$read_disk (pvtx2, LABEL_ADDR, labelp, code); 70 if code ^= 0 then go to ERR; 71 72 if ^countervalidate_label_$query (labelp, (dt.array (pvtx1).pvname), "disk_rebuild", 73 (dt.array (pvtx2).drive_name)) then return; 74 75 call initializer_gate_$read_disk (pvtx1, LABEL_ADDR, labelp, code); 76 if code ^= 0 then go to ERR; 77 if ^dt.array (pvtx1).used /* Must be in use for rin-0 to work */ 78 then do; 79 call ioa_ ("rebuild_disk: Volume ^a must be mounted before rebuilding", dt.array (pvtx1).drive_name); 80 return; 81 end; 82 83 84 label.time_map_updated, label.time_unmounted, label.time_salvaged = clock (); 85 label.shutdown_state = 0; /* If you believe this... */ 86 label.esd_state = 0; 87 88 interlace = 2; /* Default, triggers f_v_e that this is rebuild */ 89 90 91 tpsp = 0; 92 93 call ioa_ ("^/ Current disk parameters:^/"); 94 95 do i = 1 to label.nparts; 96 call ioa_ ("part ^a ^d ^d", label.parts (i).part, label.parts (i).frec, label.parts (i).nrec); 97 tpsp = tpsp + label.parts (i).nrec; 98 end; 99 100 old_n_vtoce = (label.vtoc_size - VTOC_ORIGIN) * VTOCES_PER_RECORD (dev_type1); 101 call ioa_ ("Vtoc size is ^d, ave. seg length = ^.3f", 102 label.vtoc_size, ((label.vol_size - tpsp - VTOC_ORIGIN) / (label.vtoc_size - VTOC_ORIGIN)) / VTOCES_PER_RECORD (dev_type1)); 103 call ioa_ ("Current number of VTOCEs = ^d", old_n_vtoce); 104 call ioa_ (""); 105 106 107 call ioa_ ("^/New starting parameters (no partitions defined):"); 108 109 if dt.array (pvtx2).is_sub_vol then do; 110 dtep = addr (dt.array (pvtx2)); 111 label.vol_size = rec_per_sv (dte.device_type); 112 label.number_of_sv = dte.num_of_sv; 113 label.this_sv = dte.sv_num; 114 label.sub_vol_name = valid_sv_array (dte.sv_num); 115 end; 116 else do; 117 label.vol_size = rec_per_dev (dt.array (pvtx2).device_type); 118 label.number_of_sv = 0; 119 label.this_sv = 0; 120 end; 121 comloop: call fill_vol_extents_ (labelp, interlace, n_vtoce, baseadd, num_pages, "0"b, (dev_type2), code); 122 if code ^= 0 then return; 123 124 call initializer_gate_$disk_rebuild (pvtx1, pvtx2, labelp, opt_bits, interlace, code); 125 return; 126 127 ERR: call com_err_ (code, "rebuild_disk", "Error in rebuild of volume ^a.", dt.array (pvtx1).pvname); 128 return; 129 130 /* BEGIN INCLUDE FILE...disk_pack.incl.pl1 Last Modified January 1982 for new volume map */ 1 2 1 3 1 4 1 5 1 6 /****^ HISTORY COMMENTS: 1 7* 1) change(86-01-14,Fawcett), approve(86-05-13,MCR7383), 1 8* audit(86-05-14,LJAdams), install(86-07-18,MR12.0-1098): 1 9* Add vars PAGE_SIZE and VTOCE_SIZE, Also change the SECTORS_PER_VTOCE and 1 10* VTOCES_PER_RECORD form fixed bin constants to arrays of fixed bin 1 11* constants indexed by device type as defined in fs_dev_types.incl.pl1. 1 12* This was done for support of the 3380, and 3390 devices for 512_WORD_IO. 1 13* 2) change(86-10-21,Fawcett), approve(86-10-21,MCR7533), 1 14* audit(86-10-21,Farley), install(86-10-22,MR12.0-1193): 1 15* Change PAGE_SIZE and VTOCE_SIZE from automatic to static constants. 1 16* END HISTORY COMMENTS */ 1 17 1 18 1 19 /* 1 20* All disk packs have the standard layout described below: 1 21* 1 22* Record 0 : contains the label, as declared in fs_vol_label.incl.pl1. 1 23* Record 1 to 3 : contains the volume map, as declared in vol_map.incl.pl1 1 24* Record 4 to 5 : contains the dumper bit map, as declared in dumper_bit_map.incl.pl1 1 25* Record 6 : contains the vtoc map, as declared in vtoc_map.incl.pl1 1 26* Record 7 : formerly contained bad track list; no longer used. 1 27* Records 8 to n-1 : contain the array of vtoc entries; ( n is specified in the label) 1 28* each record contains 5 192-word vtoc entries. The last 64 words are unused. 1 29* Records n to N-1 : contain the pages of the Multics segments. ( N is specified in the label) 1 30* 1 31* Sundry partitions may exist within the region n to N-1, withdrawn or not as befits the meaning 1 32* of the particular partition. 1 33* 1 34* 1 35* 1 36* A conceptual declaration for a disk pack could be: 1 37* 1 38* dcl 1 disk_pack, 1 39* 2 label_record (0 : 0) bit(36 * 1024), 1 40* 2 volume_map_record (1 : 3) bit(36 * 1024), 1 41* 2 dumper_bit_map_record (4 : 5) bit(36 * 1024), 1 42* 2 vtoc_map_record (6 : 6) bit(36 * 1024), 1 43* 2 spare_record (7 : 7) bit(36 * 1024), 1 44* 2 vtoc_array_records (8 : n-1), 1 45* 3 vtoc_entry ( 5 ) bit(36 * 192), 1 46* 3 unused bit(36 * 64), 1 47* 2 Multics_pages_records (n : N-1) bit(36 * 1024); 1 48* 1 49* 1 50* 1 51* 1 52**/ 1 53 1 54 dcl (LABEL_ADDR init (0), /* Address of Volume Label */ 1 55 VOLMAP_ADDR init (1), /* Address of first Volume Map record */ 1 56 DUMPER_BIT_MAP_ADDR init (4), /* For initial release compaitiblity */ 1 57 VTOC_MAP_ADDR init (6), /* Address of first VTOC Map Record */ 1 58 VTOC_ORIGIN init (8), /* Address of first record of VTOC */ 1 59 DEFAULT_HCPART_SIZE init (1000), /* Size of Hardcore Partition */ 1 60 MAX_VTOCE_PER_PACK init (31774)) /* Limited by size of VTOC Map */ 1 61 fixed bin (17) int static options (constant); 1 62 1 63 /* SECTORS_PER_VTOCE & VTOCES_PER_RECORD are indexed via device type as */ 1 64 /* defined by fs_dev_types and extracted form the disk_table entry (dte) */ 1 65 /* or the physical volume table entry (pvte) device type. */ 1 66 1 67 dcl PAGE_SIZE fixed bin (17) init (1024) static options (constant); 1 68 dcl VTOCE_SIZE fixed bin (17) init (192) static options (constant); 1 69 1 70 dcl SECTORS_PER_VTOCE (9) fixed bin static options (constant) init 1 71 (0, 3, 3, 3, 3, 3, 3, 1, 1); 1 72 dcl VTOCES_PER_RECORD (9) fixed bin static options (constant) init 1 73 (0, 5, 5, 5, 5, 5, 5, 2, 2); 1 74 dcl SECTORS_PER_RECORD (9) fixed bin static options (constant) init 1 75 (0, 16, 16, 16, 16, 16, 16, 2, 2); 1 76 1 77 /* END INCLUDE FILE...disk_pack.incl.pl1 */ 130 131 /* BEGIN INCLUDE FILE ... disk_table.incl.pl1 ... Created Oct 75 for NSS */ 2 2 2 3 2 4 /****^ HISTORY COMMENTS: 2 5* 1) change(86-01-14,Fawcett), approve(86-05-13,MCR7383), 2 6* audit(86-05-14,LJAdams), install(86-07-18,MR12.0-1098): 2 7* Add support for subvolumes. 2 8* END HISTORY COMMENTS */ 2 9 2 10 2 11 /* Modified July 1977 by T. Casey to add pdirs_ok switch in lve */ 2 12 /* Modified April 1981 by J. Bongiovanni to add shared_spindle_flip */ 2 13 /* Modified 831122 by E. A. Ranzenbach to add vacate_pdirs bit to lve. */ 2 14 2 15 /* The disk table lives in ring 1. Its entries parallel the PVT */ 2 16 2 17 dcl dtp ptr, 2 18 dtep ptr, 2 19 lvep ptr; 2 20 2 21 2 22 2 23 dcl 1 dt based (dtp) aligned, 2 24 2 25 2 n_entries fixed bin (17), /* number of disk table entries */ 2 26 2 max_n_entries fixed bin (17), /* max number of disk table entries */ 2 27 2 n_in_use fixed bin (17), /* number of disk table entries in use */ 2 28 2 rpvx fixed bin, /* index (pvtx, too) of the RPV */ 2 29 2 version fixed bin init (1), 2 30 2 n_lv_entries fixed bin, /* Number of LV entries */ 2 31 2 pad (2) bit (36), 2 32 2 array (0 refer (dt.max_n_entries)) like dte, 2 33 2 lv_array (0 refer (dt.max_n_entries)) like lve; 2 34 2 35 dcl 1 dte based (dtep) aligned, 2 36 2 drive_name char (8), /* device name */ 2 37 (2 device_type fixed bin (8), /* device type */ 2 38 2 used bit (1), /* TRUE if this entry is used for paging */ 2 39 2 known bit (1), /* TRUE if label has been read and checked */ 2 40 2 storage_system bit (1), /* TRUE for storage system (vs io disk) */ 2 41 2 permanent bit (1), /* TRUE if cannot be demounted */ 2 42 2 deleted bit (1), /* TRUE if deleted by "deld" */ 2 43 2 rpv bit (1), /* TRUE if the root physical volume */ 2 44 2 demounted bit (1), /* TRUE if was here or was assumed here */ 2 45 2 need_salvage bit (1), /* TRUE if this vol was volsalv'd automatic */ 2 46 2 hc_accepted bit (1), /* TRUE if vol accepted by ring 0 init */ 2 47 2 shared_spindle_flip bit (1), /* used by ring-4 for shared spindle allocation */ 2 48 2 is_sub_vol bit (1), 2 49 2 pad bit (3), 2 50 2 lvx fixed bin (11), /* index in lv_array of lve */ 2 51 2 pre_accepted bit (1)) unaligned, /* TRUE if was used in previous bootload */ 2 52 2 sv_num fixed bin unal, /* this sv number */ 2 53 2 num_of_sv fixed bin unal, /* number of sv for this pv */ 2 54 2 sv_name char (2) aligned, 2 55 2 pvid bit (36), /* physical volume ID */ 2 56 2 pvname char (32); /* Physical volume name. */ 2 57 2 58 dcl 1 lve based (lvep) aligned, 2 59 2 lvid bit (36), /* logical volume ID */ 2 60 (2 used bit (1), /* TRUE if entry used */ 2 61 2 hv_mounted bit (1), /* TRUE if hvol is really OK */ 2 62 2 public bit (1), /* TRUE for public vol */ 2 63 2 mounting bit (1), /* TRUE if mhv is in progress */ 2 64 2 demounting bit (1), /* TRUE if dhv is in progress */ 2 65 2 good_candidate bit (1) unal, /* used for auto dhv */ 2 66 2 demounted_only bit (1) unal, /* lve here only to warm demounted pve's */ 2 67 2 pdirs_ok bit (1) unal, /* TRUE if process directory segments can be on this lv */ 2 68 2 prev_bootload bit (1) unal, /* TRUE if can auto-accept pvs */ 2 69 2 vacate_pdirs bit (1) unal, /* if TRUE we will demand move all perprocess segs */ 2 70 2 pad bit (26)) unal, 2 71 2 lvname char (32), /* Logical volume name */ 2 72 2 min_access_class bit (72), /* Security stuff */ 2 73 2 max_access_class bit (72); /* .. */ 2 74 2 75 /* END INCLUDE FILE ...disk_table.incl.pl1 */ 131 132 /* BEGIN INCLUDE FILE ... fs_vol_label.incl.pl1 .. last modified January 1982 for new volume map format */ 3 2 3 3 /****^ HISTORY COMMENTS: 3 4* 1) change(86-04-10,Fawcett), approve(86-04-10,MCR7383), 3 5* audit(86-05-12,Coppola), install(86-07-18,MR12.0-1098): 3 6* Add the subvolume info. 3 7* 2) change(88-05-27,GWMay), approve(88-05-27,MCR7883), 3 8* audit(88-06-14,Beattie), install(88-07-19,MR12.2-1061): 3 9* Added inconsistent_dbm bit used to determine consistency of volume 3 10* dumper bit maps. 3 11* END HISTORY COMMENTS */ 3 12 3 13 /* This is the label at fixed location of each physical volume. Length 1 page */ 3 14 /* Note: fsout_vol clears pad fields before writing the label */ 3 15 3 16 dcl labelp ptr; 3 17 3 18 dcl 1 label based (labelp) aligned, 3 19 3 20 /* First comes data not used by Multics.. for compatibility with GCOS */ 3 21 3 22 2 gcos (5*64) fixed bin, 3 23 3 24 /* Now we have the Multics label */ 3 25 3 26 2 Multics char (32) init ("Multics Storage System Volume"), /* Identifier */ 3 27 2 version fixed bin, /* Version 1 */ 3 28 2 mfg_serial char (32), /* Manufacturer's serial number */ 3 29 2 pv_name char (32), /* Physical volume name. */ 3 30 2 lv_name char (32), /* Name of logical volume for pack */ 3 31 2 pvid bit (36), /* Unique ID of this pack */ 3 32 2 lvid bit (36), /* unique ID of its logical vol */ 3 33 2 root_pvid bit (36), /* unique ID of the pack containing the root. everybody must agree. */ 3 34 2 time_registered fixed bin (71), /* time imported to system */ 3 35 2 n_pv_in_lv fixed bin, /* # phys volumes in logical */ 3 36 2 vol_size fixed bin, /* total size of volume, in records */ 3 37 2 vtoc_size fixed bin, /* number of recs in fixed area + vtoc */ 3 38 2 not_used bit (1) unal, /* used to be multiple_class */ 3 39 2 private bit (1) unal, /* TRUE if was registered as private */ 3 40 2 inconsistent_dbm bit (1) unal, /* TRUE if ESD-less crash */ 3 41 2 flagpad bit (33) unal, 3 42 2 max_access_class bit (72), /* Maximum access class for stuff on volume */ 3 43 2 min_access_class bit (72), /* Minimum access class for stuff on volume */ 3 44 2 password bit (72), /* not yet used */ 3 45 2 number_of_sv fixed bin, /* if = 0 not a subvolume else the number of svs */ 3 46 2 this_sv fixed bin, /* what subvolume number it is */ 3 47 2 sub_vol_name char (1), /* what subvolume name (a b c d) it is */ 3 48 2 pad1 (13) fixed bin, 3 49 2 time_mounted fixed bin (71), /* time mounted */ 3 50 2 time_map_updated fixed bin (71), /* time vmap known good */ 3 51 3 52 /* The next two words overlay time_unmounted on pre-MR10 systems. This 3 53* forces a salvage if an MR10 pack is mounted on an earlier system. 3 54* */ 3 55 2 volmap_version fixed bin, /* version of volume map (currently 1) */ 3 56 2 pad6 fixed bin, 3 57 3 58 2 time_salvaged fixed bin (71), /* time salvaged */ 3 59 2 time_of_boot fixed bin (71), /* time of last bootload */ 3 60 2 time_unmounted fixed bin (71), /* time unmounted cleanly */ 3 61 2 last_pvtx fixed bin, /* pvtx in that PDMAP */ 3 62 2 pad1a (2) fixed bin, 3 63 2 err_hist_size fixed bin, /* size of pack error history */ 3 64 2 time_last_dmp (3) fixed bin (71), /* time last completed dump pass started */ 3 65 2 time_last_reloaded fixed bin (71), /* what it says */ 3 66 2 pad2 (40) fixed bin, 3 67 2 root, 3 68 3 here bit (1), /* TRUE if the root is on this pack */ 3 69 3 root_vtocx fixed bin (35), /* VTOC index of root, if it is here */ 3 70 3 shutdown_state fixed bin, /* Status of hierarchy */ 3 71 3 pad7 bit (1) aligned, 3 72 3 disk_table_vtocx fixed bin, /* VTOC index of disk table on RPV */ 3 73 3 disk_table_uid bit (36) aligned, /* UID of disk table */ 3 74 3 esd_state fixed bin, /* State of esd */ 3 75 2 volmap_record fixed bin, /* Begin record of volume map */ 3 76 2 size_of_volmap fixed bin, /* Number of records in volume map */ 3 77 2 vtoc_map_record fixed bin, /* Begin record of VTOC map */ 3 78 2 size_of_vtoc_map fixed bin, /* Number of records in VTOC map */ 3 79 2 volmap_unit_size fixed bin, /* Number of words per volume map section */ 3 80 2 vtoc_origin_record fixed bin, /* Begin record of VTOC */ 3 81 2 dumper_bit_map_record fixed bin, /* Begin record of dumper bit-map */ 3 82 2 vol_trouble_count fixed bin, /* Count of inconsistencies found since salvage */ 3 83 2 pad3 (52) fixed bin, 3 84 2 nparts fixed bin, /* Number of special partitions on pack */ 3 85 2 parts (47), 3 86 3 part char (4), /* Name of partition */ 3 87 3 frec fixed bin, /* First record */ 3 88 3 nrec fixed bin, /* Number of records */ 3 89 3 pad5 fixed bin, 3 90 2 pad4 (5*64) fixed bin; 3 91 3 92 dcl Multics_ID_String char (32) init ("Multics Storage System Volume") static; 3 93 3 94 /* END INCLUDE FILE fs_vol_label.incl.pl1 */ 132 133 /* Begin include file ...... fs_dev_types.incl.pl1 */ 4 2 4 3 /****^ HISTORY COMMENTS: 4 4* 1) change(85-09-09,Farley), approve(85-09-09,MCR6979), 4 5* audit(86-01-17,CLJones), install(86-03-21,MR12.0-1033): 4 6* Add support for FIPS 4 7* 3380. 4 8* 2) change(86-04-21,Fawcett), approve(86-04-21,MCR7383), 4 9* audit(86-05-15,Coppola), install(86-07-18,MR12.0-1098): 4 10* Add the support for subvolumes for the MSU3380 and MSU3390. 4 11* 3) change(86-10-02,Fawcett), approve(86-10-02,PBF7383), 4 12* audit(86-10-23,Farley), install(86-10-28,MR12.0-1200): 4 13* Changed 3390 to 3381, "d338" to "3380" & "d339" to "3381". 4 14* END HISTORY COMMENTS */ 4 15 4 16 /* Modified 5/19/76 by N. I. Morris */ 4 17 /* Modified 12/27/78 by Michael R. Jordan to correct MSS0500 information */ 4 18 /* Modified 4/79 by R.J.C. Kissel to add msu0501 information. */ 4 19 /* Modified '82 by BIM for needs_alt_part */ 4 20 /* Modified 4/84 by Chris Jones for FIPS disks */ 4 21 /* Modified 12/84 by Paul Farley for FIPS disks formatted for 512wd sectors */ 4 22 /* Modified 1/85 by Paul Farley to decrease the size of the 3380, until the 4 23* volmap and record stock can be expanded. */ 4 24 4 25 /* 4 26******************************************************************************** 4 27** * 4 28** WARNING: * 4 29** * 4 30** There exists fs_dev_types.incl.alm that must me updated when a new device * 4 31** type is added. * 4 32** * 4 33** There are other include files that contain arrays indexed by the device * 4 34** index obtained by references to MODELX or MODELN in this include file. * 4 35** These must be modified when a new device type is added: * 4 36** disk_pack.incl.pl1 * 4 37** fs_dev_types_sector.incl.pl1 (included in this include) * 4 38** * 4 39******************************************************************************** 4 40**/ 4 41 4 42 4 43 dcl (maxdevt init (9), /* maximum legal devt */ 4 44 bulkdevt init (1), /* bulk store devt */ 4 45 msu0500devt init (2), /* MSU0500 device type */ 4 46 msu0451devt init (3), /* MSU0451 device type */ 4 47 msu0450devt init (3), /* MSU0450 device type */ 4 48 msu0400devt init (4), /* MSU0400 device type */ 4 49 dsu191devt init (4), /* DSU191 device type */ 4 50 dsu190devt init (5), /* DSU190 device type */ 4 51 dsu181devt init (6), /* DSU181 device type */ 4 52 msu0501devt init (7), /* MSU0501 device type */ 4 53 fips3380devt init (8), /* 3380D FIPS device type */ 4 54 fips3381devt init (9) /* 3380E FIPS device type */ 4 55 ) fixed bin (4) static options (constant); 4 56 4 57 dcl MODEL (12) fixed bin static options (constant) init /* Known device model numbers */ 4 58 (0, 500, 451, 450, 400, 402, 191, 190, 181, 501, 3380, 3381); 4 59 4 60 dcl MODELX (12) fixed bin static options (constant) init /* translation from model number to device type */ 4 61 (1, 2, 3, 3, 4, 4, 4, 5, 6, 7, 8, 9); 4 62 4 63 dcl MODELN (9) fixed bin static options (constant) init /* translation from device type to model number */ 4 64 (0, 500, 451, 400, 190, 181, 501, 3380, 3381); 4 65 4 66 dcl device_names (9) char (4) aligned static options (constant) init /* device names indexed by device type */ 4 67 ("bulk", "d500", "d451", "d400", "d190", "d181", "d501", "3380", "3381"); 4 68 4 69 dcl first_dev_number (9) fixed bin (17) static options (constant) init /* First valid device_number */ 4 70 (1, 1, 1, 1, 1, 1, 1, 0, 0); 4 71 4 72 dcl fips_type_disk (9) bit (1) unal static options (constant) init /* ON => FIPS disk */ 4 73 ("0"b,"0"b,"0"b,"0"b,"0"b,"0"b,"0"b,"1"b,"1"b); 4 74 4 75 dcl media_removable (9) bit (1) static options (constant) init /* ON => demountable pack on device */ 4 76 ("0"b, "0"b, "1"b, "1"b, "1"b, "1"b, "0"b, "0"b, "0"b); 4 77 4 78 dcl shared_spindle (9) bit (1) static options (constant) init /* ON => 2 devices per spindle */ 4 79 ("0"b, "1"b, "0"b, "0"b, "0"b, "0"b, "1"b, "0"b, "0"b); 4 80 4 81 dcl needs_alt_part (9) bit (1) static options (constant) init /* ON => needs alternate partition to run alternate tracks */ 4 82 ("0"b, "0"b, "1"b, "1"b, "1"b, "1"b, "0"b, "0"b, "0"b); 4 83 4 84 dcl seek_command (9) bit (6) init /* Seek command: 00 => N/A, 30 => Seek_512, 34 => seek_64 */ 4 85 ("00"b3,"34"b3,"34"b3,"34"b3,"34"b3,"34"b3,"34"b3,"30"b3, "30"b3); 4 86 4 87 dcl rec_per_dev (9) fixed bin (21) static options (constant) init /* table of # of records on each device */ 4 88 (0, 38258, 38258, 19270, 14760, 4444, 67200, 112395, 224790); 4 89 4 90 dcl rec_per_sv (9) fixed bin static options (constant) init /* table of # of records on each subvol */ 4 91 (0, 38258, 38258, 19270, 14760, 4444, 67200, 56134, 74930); 4 92 4 93 dcl number_of_sv (9) fixed bin static options (constant) init /* table of subvolumes */ 4 94 (0, 0, 0, 0, 0, 0, 0, 2, 3); 4 95 4 96 dcl valid_sv_string char (3) static options (constant) init /* string of valid subvolume names */ 4 97 ("abc"); 4 98 4 99 dcl valid_sv_array (0:2) char (1) static options (constant) /* array of valid subvolume names */ 4 100 init ("a","b","c"); 4 101 4 102 dcl cyl_per_dev (9) fixed bin static options (constant) init /* table of # of cylinders on each device */ 4 103 (0, 814, 814, 410, 410, 202, 840, 885, 1770); 4 104 4 105 dcl cyl_per_sv (9) fixed bin static options (constant) init /* table of # of cylinders on each subvolume */ 4 106 (0, 814, 814, 410, 410, 202, 840, 442, 590); 4 107 4 108 dcl rec_per_cyl (9) fixed bin static options (constant) init /* table of # of records per cylinder on each device */ 4 109 (0, 47, 47, 47, 36, 22, 80, 127, 127); 4 110 4 111 dcl tracks_per_cyl (9) fixed bin static options (constant) init /* table of # of tracks per cylinder on each device */ 4 112 (0, 19, 19, 19, 19, 20, 20, 15, 15); 4 113 4 114 4 115 dcl first_rec_num (9) fixed bin static options (constant) init /* table of # of first record on each device */ 4 116 (0, 0, 0, 0, 0, 0, 0, 0, 0); 4 117 4 118 dcl last_rec_num (9) fixed bin (18) static options (constant) init /* table of # of last record on each device */ 4 119 (0, 38257, 38116, 19128, 14651, 4399, 67199, 112394, 224789); 4 120 4 121 dcl last_sv_rec_num (9) fixed bin (18) static options (constant) init /* table of # of last record on each subvolume */ 4 122 (0, 38257, 38116, 19128, 14651, 4399, 67199, 56133, 74929); 4 123 4 124 dcl first_sect_num (9) fixed bin (24) static options (constant) init /* table of # of first sector for each device */ 4 125 (0, 0, 0, 0, 0, 0, 0, 0, 0); 4 126 4 127 dcl last_sect_num (9) fixed bin (24) static options (constant) init /* table of # last sector number for each device */ 4 128 (0, 618639, 616359, 309319, 239722, 71999, 1075199, 225674, 451349); 4 129 4 130 dcl first_alt_sect_num (9) fixed bin (24) static options (constant) init /* table of # of first sector of alt partition */ 4 131 (0, 638400, 616360, 309320, 239723, 72000, 1075200, 225675, 451350); 4 132 4 133 dcl last_alt_sect_num (9) fixed bin (24) static options (constant) init /* table of # of last sector of alt partition */ 4 134 (0, 639919, 618639, 311599, 241489, 72719, 1077759, 225930, 451605); 4 135 4 136 dcl last_physical_sect_num (9) fixed bin (24) static options (constant) init /* table of # of last sector on device (includes T&D cylinders) */ 4 137 (0, 639919, 619399, 312359, 242249, 72359, 1077759, 225674, 451859); 4 138 4 139 dcl dev_time (9) float bin (27) static options (constant) init /* table of average access times for each device */ 4 140 (384e0, 33187e0, 33187e0, 34722e0, 46935e0, 52631e0, 33187e0, 26260e0, 26260e0); 4 141 5 1 /* Begin fs_dev_types_sector.incl.pl1 */ 5 2 5 3 5 4 /****^ HISTORY COMMENTS: 5 5* 1) change(86-04-21,Fawcett), approve(86-04-21,MCR7383), 5 6* audit(86-05-12,Coppola), install(86-07-18,MR12.0-1098): 5 7* Add the sector differance for devices that do 64 word IO and devices that 5 8* do 512 word IO. 5 9* END HISTORY COMMENTS */ 5 10 5 11 /* Created by R. A. Fawcett for 512 word IO. for procedures that do not 5 12* need all the data in fs_dev_types. This is also included in 5 13* fs_dev_types.incl.pl1 */ 5 14 5 15 dcl sect_per_cyl (9) fixed bin static options (constant) init /* table of # of sectors per cylinder on each device */ 5 16 (0, 760, 760, 760, 589, 360, 1280, 255, 255); 5 17 5 18 dcl sect_per_sv (9) fixed bin (24) static options (constant) init /* table of # of sectors per cylinder on each subvolume */ 5 19 (0, 0, 0, 0, 0, 0, 0, 112710, 150450); 5 20 5 21 dcl sect_per_rec (9) fixed bin static options (constant) init 5 22 /* table of # of sectors per record on each device */ 5 23 /* coresponding array in disk_pack.incl.pl1 called SECTORS_PER_RECORD */ 5 24 (0, 16, 16, 16, 16, 16, 16, 2, 2); 5 25 5 26 dcl sect_per_vtoc (9) fixed bin static options (constant) init 5 27 (0, 3, 3, 3, 3, 3, 3, 1, 1); 5 28 5 29 dcl vtoc_per_rec (9) fixed bin static options (constant) init 5 30 /* corespending array in disk_pack.incl.pl1 named VTOCES_PER_RECORD */ 5 31 (0, 5, 5, 5, 5, 5, 5, 2, 2); 5 32 5 33 dcl sect_per_track (9) fixed bin static options (constant) init /* table of # of sectors per track on each device */ 5 34 (0, 40, 40, 40, 31, 18, 64, 17, 17); 5 35 5 36 dcl words_per_sect (9) fixed bin static options (constant) init /* table of # of words per sector on each device */ 5 37 (0, 64, 64, 64, 64, 64, 64, 512, 512); 5 38 5 39 /* End fs_dev_types_sector.incl.pl1 */ 5 40 4 142 4 143 4 144 /* End of include file ...... fs_dev_types.incl.pl1 */ 133 134 135 /* BEGIN MESSAGE DOCUMENTATION 136* 137* Message: 138* rebuild_disk: volume PVNAME from DSKA_XX onto DSKA_YY 139* .br 140* Current disk parameters: 141* .br 142* part NAME FREC NREC 143* .br 144* Vtoc size is XX, ave. seg length = Y.ZZZ 145* .br 146* Current number of VTOCEs = XX 147* 148* S: $initializer_io 149* 150* T: $response 151* 152* M: This is the response to the operator command "rebuild_disk" issued in ring 1. 153* 154* A: $ignore 155* 156* 157* Message: 158* rebuild_disk: Volume PVNAME must be mounted before rebuilding 159* 160* S: $initializer_io 161* 162* T: $response 163* 164* M: The rebuild_disk command was invoked on an mounted volume. 165* Only volumes which are mounted may be rebuilt. 166* No action was taken. 167* 168* A: Salvage the volume first, 169* and then reissue the rebuild_disk command. 170* 171* 172* Message: 173* New starting parameters (no partitions defined): 174* 175* S: $initializer_io 176* 177* T: $response 178* 179* M: This message requests the input of new disk parameters. 180* 181* A: Input the new disk parameters. Use the "end" request when done. 182* 183* 184* Message: 185* Cannot shrink VTOC from XX to YY VTOCEs. Respecify parameters. 186* 187* S: $initializer_io 188* 189* T: $response 190* 191* M: An attempt has been made to shrink the VTOC, which is illegal. 192* 193* A: Respecify the parameters. 194* 195* 196* Message: 197* rebuild_disk: Error XX in rebuild of volume PVNAME. 198* 199* S: $initializer_io 200* 201* T: $response 202* 203* M: An error has occurred trying to rebuild the disk. 204* The new copy should not be used. 205* 206* A: If the problem can be repaired, 207* repair it and try again. 208* $inform 209* 210* 211* 212* END MESSAGE DOCUMENTATION */ 213 214 end disk_rebuild_caller; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0802.8 disk_rebuild_caller.pl1 >spec>install>1111>disk_rebuild_caller.pl1 130 1 10/22/86 1450.1 disk_pack.incl.pl1 >ldd>include>disk_pack.incl.pl1 131 2 07/24/86 2051.9 disk_table.incl.pl1 >ldd>include>disk_table.incl.pl1 132 3 07/21/88 2036.0 fs_vol_label.incl.pl1 >ldd>include>fs_vol_label.incl.pl1 133 4 10/30/86 2010.5 fs_dev_types.incl.pl1 >ldd>include>fs_dev_types.incl.pl1 4-142 5 07/24/86 2051.8 fs_dev_types_sector.incl.pl1 >ldd>include>fs_dev_types_sector.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. LABEL_ADDR 000051 constant fixed bin(17,0) initial dcl 1-54 set ref 69* 75* VTOCES_PER_RECORD 000023 constant fixed bin(17,0) initial array dcl 1-72 ref 100 101 VTOC_ORIGIN constant fixed bin(17,0) initial dcl 1-54 ref 100 101 101 a_dtp parameter pointer dcl 30 ref 20 60 addr builtin function dcl 49 ref 58 110 apvtx1 parameter fixed bin(17,0) dcl 30 ref 20 61 apvtx2 parameter fixed bin(17,0) dcl 30 ref 20 62 array 10 based structure array level 2 dcl 2-23 set ref 110 baseadd 000107 automatic fixed bin(17,0) dcl 40 set ref 121* buffer 000114 automatic fixed bin(71,0) array dcl 47 set ref 58 clock builtin function dcl 49 ref 84 code 000105 automatic fixed bin(35,0) dcl 30 set ref 69* 70 75* 76 121* 122 124* 127* com_err_ 000010 constant entry external dcl 51 ref 127 countervalidate_label_$query 000012 constant entry external dcl 52 ref 72 dev_type1 000103 automatic fixed bin(17,0) dcl 30 set ref 63* 100 101 dev_type2 000104 automatic fixed bin(17,0) dcl 30 set ref 64* 121 device_type 2 based fixed bin(8,0) level 2 in structure "dte" packed packed unaligned dcl 2-35 in procedure "disk_rebuild_caller" ref 111 device_type 12 based fixed bin(8,0) array level 3 in structure "dt" packed packed unaligned dcl 2-23 in procedure "disk_rebuild_caller" set ref 63 64 117 drive_name 10 based char(8) array level 3 dcl 2-23 set ref 66* 66* 72 79* dt based structure level 1 dcl 2-23 dte based structure level 1 dcl 2-35 dtep 002116 automatic pointer dcl 2-17 set ref 110* 111 112 113 114 dtp 002114 automatic pointer dcl 2-17 set ref 60* 63 64 66 66 66 72 72 77 79 109 110 117 127 esd_state 706 based fixed bin(17,0) level 3 dcl 3-18 set ref 86* fill_vol_extents_ 000014 constant entry external dcl 53 ref 121 frec 1005 based fixed bin(17,0) array level 3 dcl 3-18 set ref 96* i 000110 automatic fixed bin(17,0) dcl 40 set ref 95* 96 96 96 97* initializer_gate_$disk_rebuild 000016 constant entry external dcl 54 ref 124 initializer_gate_$read_disk 000020 constant entry external dcl 55 ref 69 75 interlace 000111 automatic fixed bin(17,0) initial dcl 40 set ref 40* 88* 121* 124* ioa_ 000022 constant entry external dcl 56 ref 66 79 93 96 101 103 104 107 is_sub_vol 12(19) based bit(1) array level 3 packed packed unaligned dcl 2-23 set ref 109 label based structure level 1 dcl 3-18 labelp 002120 automatic pointer dcl 3-16 set ref 58* 69* 72* 75* 84 84 84 85 86 95 96 96 96 97 100 101 101 101 111 112 113 114 117 118 119 121* 124* lve based structure level 1 dcl 2-58 n_vtoce 000113 automatic fixed bin(17,0) dcl 40 set ref 121* nparts 1003 based fixed bin(17,0) level 2 dcl 3-18 ref 95 nrec 1006 based fixed bin(17,0) array level 3 dcl 3-18 set ref 96* 97 num_of_sv 3(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 2-35 ref 112 num_pages 000106 automatic fixed bin(17,0) dcl 40 set ref 121* number_of_sv 560 based fixed bin(17,0) level 2 dcl 3-18 set ref 112* 118* old_n_vtoce 000112 automatic fixed bin(17,0) dcl 40 set ref 100* 103* opt_bits parameter bit(36) dcl 30 set ref 20 124* part 1004 based char(4) array level 3 dcl 3-18 set ref 96* parts 1004 based structure array level 2 dcl 3-18 pvname 16 based char(32) array level 3 dcl 2-23 set ref 66* 72 127* pvtx1 000100 automatic fixed bin(17,0) dcl 30 set ref 61* 63 66 66 72 75* 77 79 124* 127 pvtx2 000101 automatic fixed bin(17,0) dcl 30 set ref 62* 64 66 69* 72 109 110 117 124* rec_per_dev 000012 constant fixed bin(21,0) initial array dcl 4-87 ref 117 rec_per_sv 000001 constant fixed bin(17,0) initial array dcl 4-90 ref 111 root 700 based structure level 2 dcl 3-18 seek_command 002122 automatic bit(6) initial array packed unaligned dcl 4-84 set ref 4-84* 4-84* 4-84* 4-84* 4-84* 4-84* 4-84* 4-84* 4-84* shutdown_state 702 based fixed bin(17,0) level 3 dcl 3-18 set ref 85* sub_vol_name 562 based char(1) level 2 dcl 3-18 set ref 114* sv_num 3 based fixed bin(17,0) level 2 packed packed unaligned dcl 2-35 ref 113 114 this_sv 561 based fixed bin(17,0) level 2 dcl 3-18 set ref 113* 119* time_map_updated 602 based fixed bin(71,0) level 2 dcl 3-18 set ref 84* time_salvaged 606 based fixed bin(71,0) level 2 dcl 3-18 set ref 84* time_unmounted 612 based fixed bin(71,0) level 2 dcl 3-18 set ref 84* tpsp 000102 automatic fixed bin(17,0) dcl 30 set ref 91* 97* 97 101 used 12(09) based bit(1) array level 3 packed packed unaligned dcl 2-23 set ref 77 valid_sv_array 000000 constant char(1) initial array packed unaligned dcl 4-99 ref 114 vol_size 547 based fixed bin(17,0) level 2 dcl 3-18 set ref 101 111* 117* vtoc_size 550 based fixed bin(17,0) level 2 dcl 3-18 set ref 100 101* 101 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. DEFAULT_HCPART_SIZE internal static fixed bin(17,0) initial dcl 1-54 DUMPER_BIT_MAP_ADDR internal static fixed bin(17,0) initial dcl 1-54 MAX_VTOCE_PER_PACK internal static fixed bin(17,0) initial dcl 1-54 MODEL internal static fixed bin(17,0) initial array dcl 4-57 MODELN internal static fixed bin(17,0) initial array dcl 4-63 MODELX internal static fixed bin(17,0) initial array dcl 4-60 Multics_ID_String internal static char(32) initial packed unaligned dcl 3-92 PAGE_SIZE internal static fixed bin(17,0) initial dcl 1-67 SECTORS_PER_RECORD internal static fixed bin(17,0) initial array dcl 1-74 SECTORS_PER_VTOCE internal static fixed bin(17,0) initial array dcl 1-70 VOLMAP_ADDR internal static fixed bin(17,0) initial dcl 1-54 VTOCE_SIZE internal static fixed bin(17,0) initial dcl 1-68 VTOC_MAP_ADDR internal static fixed bin(17,0) initial dcl 1-54 bulkdevt internal static fixed bin(4,0) initial dcl 4-43 cyl_per_dev internal static fixed bin(17,0) initial array dcl 4-102 cyl_per_sv internal static fixed bin(17,0) initial array dcl 4-105 dev_time internal static float bin(27) initial array dcl 4-139 device_names internal static char(4) initial array dcl 4-66 dsu181devt internal static fixed bin(4,0) initial dcl 4-43 dsu190devt internal static fixed bin(4,0) initial dcl 4-43 dsu191devt internal static fixed bin(4,0) initial dcl 4-43 fips3380devt internal static fixed bin(4,0) initial dcl 4-43 fips3381devt internal static fixed bin(4,0) initial dcl 4-43 fips_type_disk internal static bit(1) initial array packed unaligned dcl 4-72 first_alt_sect_num internal static fixed bin(24,0) initial array dcl 4-130 first_dev_number internal static fixed bin(17,0) initial array dcl 4-69 first_rec_num internal static fixed bin(17,0) initial array dcl 4-115 first_sect_num internal static fixed bin(24,0) initial array dcl 4-124 last_alt_sect_num internal static fixed bin(24,0) initial array dcl 4-133 last_physical_sect_num internal static fixed bin(24,0) initial array dcl 4-136 last_rec_num internal static fixed bin(18,0) initial array dcl 4-118 last_sect_num internal static fixed bin(24,0) initial array dcl 4-127 last_sv_rec_num internal static fixed bin(18,0) initial array dcl 4-121 lvep automatic pointer dcl 2-17 maxdevt internal static fixed bin(4,0) initial dcl 4-43 media_removable internal static bit(1) initial array packed unaligned dcl 4-75 msu0400devt internal static fixed bin(4,0) initial dcl 4-43 msu0450devt internal static fixed bin(4,0) initial dcl 4-43 msu0451devt internal static fixed bin(4,0) initial dcl 4-43 msu0500devt internal static fixed bin(4,0) initial dcl 4-43 msu0501devt internal static fixed bin(4,0) initial dcl 4-43 needs_alt_part internal static bit(1) initial array packed unaligned dcl 4-81 number_of_sv internal static fixed bin(17,0) initial array dcl 4-93 rec_per_cyl internal static fixed bin(17,0) initial array dcl 4-108 sect_per_cyl internal static fixed bin(17,0) initial array dcl 5-15 sect_per_rec internal static fixed bin(17,0) initial array dcl 5-21 sect_per_sv internal static fixed bin(24,0) initial array dcl 5-18 sect_per_track internal static fixed bin(17,0) initial array dcl 5-33 sect_per_vtoc internal static fixed bin(17,0) initial array dcl 5-26 shared_spindle internal static bit(1) initial array packed unaligned dcl 4-78 tracks_per_cyl internal static fixed bin(17,0) initial array dcl 4-111 valid_sv_string internal static char(3) initial packed unaligned dcl 4-96 vtoc_per_rec internal static fixed bin(17,0) initial array dcl 5-29 words_per_sect internal static fixed bin(17,0) initial array dcl 5-36 NAMES DECLARED BY EXPLICIT CONTEXT. ERR 001061 constant label dcl 127 ref 70 76 comloop 001003 constant label dcl 121 disk_rebuild_caller 000202 constant entry external dcl 20 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1234 1260 1125 1244 Length 1546 1125 24 251 106 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME disk_rebuild_caller 1168 external procedure is an external procedure. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME disk_rebuild_caller 000100 pvtx1 disk_rebuild_caller 000101 pvtx2 disk_rebuild_caller 000102 tpsp disk_rebuild_caller 000103 dev_type1 disk_rebuild_caller 000104 dev_type2 disk_rebuild_caller 000105 code disk_rebuild_caller 000106 num_pages disk_rebuild_caller 000107 baseadd disk_rebuild_caller 000110 i disk_rebuild_caller 000111 interlace disk_rebuild_caller 000112 old_n_vtoce disk_rebuild_caller 000113 n_vtoce disk_rebuild_caller 000114 buffer disk_rebuild_caller 002114 dtp disk_rebuild_caller 002116 dtep disk_rebuild_caller 002120 labelp disk_rebuild_caller 002122 seek_command disk_rebuild_caller THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return_mac ext_entry divide_fx1 divide_fx3 clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ countervalidate_label_$query fill_vol_extents_ initializer_gate_$disk_rebuild initializer_gate_$read_disk ioa_ NO EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 20 000175 40 000207 4 84 000211 58 000300 60 000302 61 000306 62 000310 63 000312 64 000320 66 000326 69 000363 70 000400 72 000402 75 000455 76 000472 77 000474 79 000503 80 000526 84 000527 85 000534 86 000535 91 000536 93 000537 95 000553 96 000563 97 000621 98 000625 100 000627 101 000636 103 000674 104 000714 107 000725 109 000741 110 000750 111 000752 112 000757 113 000763 114 000766 115 000773 117 000774 118 001001 119 001002 121 001003 122 001034 124 001036 125 001060 127 001061 128 001122 ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL and BULL HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by BULL HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved