|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 11264 (0x2c00) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Mac_Files, seg_0255f0
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─⟦cfc2e13cd⟧ »Space Info Vol 2« └─⟦this⟧
with Bit_Ops; with Errors; with Files; with Mac_Path; with Mac_Text; with Mac_Types; with System; with Unchecked_Conversion; package body Mac_Files is Home_Directory_Name : Mac_Types.Str255 := (others => Mac_Types.Nul); function As_Stringptr is new Unchecked_Conversion (Source => System.Address, Target => Mac_Types.Stringptr); function As_Varlongint is new Unchecked_Conversion (Source => System.Address, Target => Mac_Types.Varlongint); function As_Wdpbptr is new Unchecked_Conversion (Source => System.Address, Target => Files.Wdpbptr); function As_Cinfopbptr is new Unchecked_Conversion (Source => System.Address, Target => Files.Cinfopbptr); procedure Set_User_Home (Name : Mac_Types.Str255) is begin Home_Directory_Name := Name; end Set_User_Home; procedure Set_Current_User_Home is Err : Mac_Types.Oserr; S : Mac_Types.Str255 := Home_Directory_Name; begin Err := Files.Hsetvol (As_Stringptr (S'Address), 0, 0); end Set_Current_User_Home; function Create_Sub_Directories (Name : Mac_Text.Text) return Mac_Types.Oserr is S : Mac_Types.Str255; Exists : Boolean; Err : Mac_Types.Oserr; Parent_Dir_Id : Mac_Types.Longint; A_Wdpbrec : Files.Wdpbrec; begin Mac_Path.Get_Mac_Root_Directory (Name, S, Exists); if Exists then Err := Files.Setvol (As_Stringptr (S'Address), 0); if Err /= Mac_Types.Noerr then return Err; end if; end if; A_Wdpbrec.Iocompletion := null; A_Wdpbrec.Ionameptr := null; Err := Files.Pbhgetvol (Paramblock => As_Wdpbptr (A_Wdpbrec'Address), Async => False); if Err /= Mac_Types.Noerr then return Err; end if; Parent_Dir_Id := A_Wdpbrec.Iowddirid; for Sub_Dir in Mac_Path.Index loop Mac_Path.Get_Mac_Sub_Directory (Name, Sub_Dir, S, Exists); exit when not Exists; Err := Files.Setvol (As_Stringptr (S'Address), 0); if Err /= Mac_Types.Noerr then Err := Files.Dircreate (Vrefnum => 0, Parentdirid => Parent_Dir_Id, Directoryname => S, Createddirid => As_Varlongint (Parent_Dir_Id'Address)); if Err /= Mac_Types.Noerr then return Err; end if; end if; Err := Files.Setvol (As_Stringptr (S'Address), 0); if Err /= Mac_Types.Noerr then return Err; end if; end loop; return Mac_Types.Noerr; end Create_Sub_Directories; function Create_Directory (Name : Mac_Text.Text) return Mac_Types.Oserr is S : Mac_Types.Str255; Exists : Boolean; Err : Mac_Types.Oserr; Parent_Dir_Id : Mac_Types.Longint; A_Wdpbrec : Files.Wdpbrec; begin A_Wdpbrec.Iocompletion := null; A_Wdpbrec.Ionameptr := null; Err := Files.Pbhgetvol (Paramblock => As_Wdpbptr (A_Wdpbrec'Address), Async => False); if Err /= Mac_Types.Noerr then return Err; end if; Parent_Dir_Id := A_Wdpbrec.Iowddirid; Mac_Path.Get_Mac_Name (Name, S, Exists); if not Exists then return Errors.Bdnamerr; end if; return Files.Dircreate (0, Parent_Dir_Id, S, As_Varlongint (Parent_Dir_Id'Address)); end Create_Directory; function Create_File (Name : Mac_Text.Text) return Mac_Types.Oserr is S : Mac_Types.Str255; Exists : Boolean; Err : Mac_Types.Oserr; Parent_Dir_Id : Mac_Types.Longint; A_Wdpbrec : Files.Wdpbrec; begin A_Wdpbrec.Iocompletion := null; A_Wdpbrec.Ionameptr := null; Err := Files.Pbhgetvol (Paramblock => As_Wdpbptr (A_Wdpbrec'Address), Async => False); if Err /= Mac_Types.Noerr then return Err; end if; Parent_Dir_Id := A_Wdpbrec.Iowddirid; Mac_Path.Get_Mac_Name (Name, S, Exists); if not Exists then return Errors.Bdnamerr; end if; return Files.Hcreate (0, Parent_Dir_Id, S, Creator => 16#44544941#, -- DTIA Filetype => 16#54455854# -- TEXT ); end Create_File; function Delete_File (Name : Mac_Text.Text; Recursive : Boolean) return Mac_Types.Oserr is type Dircinfopbptr is access Files.Dircinfopbrec; type Hfilecinfopbptr is access Files.Hfilecinfopbrec; function As_Hfilecinfopbptr is new Unchecked_Conversion (Source => System.Address, Target => Hfilecinfopbptr); function As_Dircinfopbptr is new Unchecked_Conversion (Source => System.Address, Target => Dircinfopbptr); Err, Err2 : Mac_Types.Oserr := Mac_Types.Noerr; S : Mac_Types.Str255 := Mac_Text.Value (Name); Pb : Files.Cinfopbrec; Filepb : Hfilecinfopbptr := As_Hfilecinfopbptr (Pb'Address); Dirpb : Dircinfopbptr := As_Dircinfopbptr (Pb'Address); procedure Enumerate_Catalog (Dirid : Mac_Types.Longint) is Folder_Bit : constant Byte_Integer := 2#00001000#; Index : Mac_Types.Integer; Parent_Dir_Id : Mac_Types.Longint; Dir_Name : Mac_Types.Str255; begin Index := 1; loop Pb.Iofdirindex := Index; Dirpb.Iodrdirid := Dirid; Err := Files.Pbgetcatinfo (As_Cinfopbptr (Pb'Address), False); if Err = Mac_Types.Noerr then if Bit_Ops."and" (Byte_Integer (Pb.Ioflattrib), Folder_Bit) /= 0 then Dir_Name := S; Parent_Dir_Id := Dirpb.Iodrparid; if Recursive then Enumerate_Catalog (Dirid => Dirpb.Iodrdirid); end if; Err2 := Files.Hdelete (Vrefnum => Pb.Iovrefnum, Dirid => Parent_Dir_Id, Filename => Dir_Name); else Err2 := Files.Hdelete (Vrefnum => Pb.Iovrefnum, Dirid => Filepb.Ioflparid, Filename => S); end if; end if; Index := Index + 1; exit when Err /= Mac_Types.Noerr or Err2 /= Mac_Types.Noerr; end loop; end Enumerate_Catalog; begin Pb.Iocompletion := null; Pb.Ionameptr := As_Stringptr (S'Address); Pb.Iovrefnum := 0; Enumerate_Catalog (0); return Err2; end Delete_File; end Mac_Files;
nblk1=a nid=0 hdr6=14 [0x00] rec0=1b rec1=00 rec2=01 rec3=01c [0x01] rec0=1d rec1=00 rec2=08 rec3=014 [0x02] rec0=00 rec1=00 rec2=03 rec3=056 [0x03] rec0=17 rec1=00 rec2=02 rec3=044 [0x04] rec0=1d rec1=00 rec2=05 rec3=06a [0x05] rec0=1a rec1=00 rec2=04 rec3=040 [0x06] rec0=17 rec1=00 rec2=07 rec3=03a [0x07] rec0=00 rec1=00 rec2=06 rec3=026 [0x08] rec0=14 rec1=00 rec2=09 rec3=080 [0x09] rec0=15 rec1=00 rec2=0a rec3=000 tail 0x217204c3083a2665f19ad 0x42a00088462060003