with CharAK ; use CharAK; with ConsAK ; use ConsAK; with ErroAK ; use ErroAK; with InteAK ; with StriAK ; use StriAK; with Text_IO; use Text_IO; package body FileAK is ---------------------------------------------------------------------- -- Copyright (C) 1994 David Wallace Croft. All rights reserved. ---------------------------------------------------------------------- procedure Demo is ---------------------------------------------------------------------- begin Put_Line ( FileAK.Copyright ); New_Line; Put_Line ( "Text input/output to a file." ); New_Line; declare File_Name : string ( 1..12 ) := "AdaKit.Doc "; For_String : string ( 1..79 ) := ( others => ASCII.Nul ); Scan_Position : long_integer; Case_Sensitive : boolean := true; begin Put_Line ( "Demonstration of Scan function." ); New_Line; Ask ( File_Name, "File to scan ", File_Name ); For_String ( 1..5 ) := "Croft"; Ask ( For_String, "String to search for ", For_String ); Ask ( Case_Sensitive, "Case Sensitive ", Case_Sensitive ); Scan_Position := Scan ( File_Name, Trim_White_Space ( For_String ), Case_Sensitive ); Put_Line ( long_integer'image ( Scan_Position ) ); end; -- Put_Line ( "No demonstration is currently available." ); Pause; end Demo; ---------------------------------------------------------------------- -- File I/O ---------------------------------------------------------------------- procedure Copy ( From : in string; To : in string ) is ---------------------------------------------------------------------- -- Limited by length of Line_Type ---------------------------------------------------------------------- Last : natural; Line : Line_Type; Copied : File_Type; Copy : File_Type; begin Open ( Copied, In_File , From ); Create ( Copy , Out_File, To ); loop exit when End_Of_File ( Copied ); Get_Line ( Copied, Line, Last ); Put_Line ( Copy , Line ( 1..Last ) ); end loop; Close ( Copied ); Close ( Copy ); end Copy; procedure Delete ( File_Name : in string ) is ---------------------------------------------------------------------- File : File_Type; begin Open ( File, Out_File, File_Name ); Delete ( File ); end Delete; procedure Read ( Path_File_Name : in string ) is ---------------------------------------------------------------------- Char : character; File : File_Type; begin Open ( File, In_File, Path_File_Name ); loop exit when End_Of_File ( File ); Get ( Char ); Put ( Char ); end loop; Close ( File ); exception when others => Close ( File ); raise; end Read; function Scan ( File_Name : string; For_String : string; Case_Sensitive : boolean := true ) return long_integer is ---------------------------------------------------------------------- Temp : long_integer := 0; Window : string ( For_String'range ) := ( others => ASCII.Nul ); For_String_Cased : string ( For_String'range ) := For_String; Position : long_integer := 0; File : File_Type; begin if not Case_Sensitive then For_String_Cased := Upcase ( For_String ); end if; Open ( File, In_File, Trim_White_Space ( File_Name ) ); loop exit when End_Of_File ( File ); Position := Position + 1; begin Get ( File, Window ( Window'last ) ); exception -- Does not detect End_Of_File when last character is ASCII.FF??? when End_Error => exit; end; if not Case_Sensitive then Window ( Window'last ) := Upcase ( Window ( Window'last ) ); end if; if ( Window = For_String_Cased ) and then ( Position > For_String'length ) then Temp := Position - Window'length + 1; exit; end if; Window := Shift ( Window, Left => +1 ); end loop; Close ( File ); return Temp; exception when others => return -1; end Scan; ---------------------------------------------------------------------- ---------------------------------------------------------------------- end FileAK;