
(*This is a short and rather unoptomized and well to be honest SLOPPY     *)
(*representation of hex viewing (not editing) what this program WILL      *)
(*do however is go in and suck out the readable text in an exe dat com    *)
(*or other hex file so you can take a look see at whats in em :)          *)
(* This is VERY basic and is just to show the basic concept..             *)

(*This code was written by George Slaterpryce A.K.A. Illogical Error      *)
(*you can use it freely i dont really care what you do with it            *)
(*but if you use the concept behind it or the code itself just drop me a  *)
(*line or two at rapter@aug.com i would appreciate it....    also         *)
(**)
(*The author of this code (George Slaterpryce) is not responsible for what*)
(*it does to software/hardware on your computer you use it at your own risk*)
(**)
(*p.s. but it works fine on my 386, 486, and p133 *)


program ReadFile;
uses crt;
var
  F: file of string;
  f2 : file of char;
  f3 : file of integer;
  f4 : text;
  strng: string;
  ch   : char;
  num, count  : integer;
  didit : boolean;

(*Do all my error notices*)
(****************************************************************************)
procedure notice (var didit : boolean);
   begin
   clrscr;
   writeln;
   writeln;
   writeln('P.G.T.F.R.U. ReadFile.exe');
   Writeln('Pascal Genorated Typed File Reader Utility by George Slaterpryce');
   writeln('(C) 1996 George Slaterpryce A.K.A. Illogical Error');
   Writeln('This utility is Freeware.');
   Writeln;
   writeln('Usage ReadFile /[S,C,#,T,?] <filename.dat>');
   textcolor(blue);write('               option');textcolor(green);write('      file name');
   writeln('');
   textcolor(7);
   writeln;
   writeln('Command line Parameters');
   writeln('/S   Reads file of strings');
   writeln('/C   Reads file of chars');
   writeln('/#   Reads file of Integers');
   writeln('/T   Reads Text Files');
   writeln('/?   This Help Screen');
   didit := true;
   end;


procedure notice1(var didit : boolean);
   begin
   clrscr;
   writeln;
   writeln;
   writeln('P.G.T.F.R.U. ReadFile.exe');
   Writeln('Pascal Genorated Typed File Reader Utility by George Slaterpryce');
   writeln('(C) 1996 George Slaterpryce A.K.A. Illogical Error');
   Writeln('This utility is Freeware.');
   Writeln;
   writeln('Usage ReadFile /[S,C,#,T,?] <filename.dat>');
   textcolor(17);write('               option');textcolor(green);write('      file name');
   writeln('');
   textcolor(7);
   writeln;
   writeln('Command line Parameters');
   writeln('/S   Reads file of strings');
   writeln('/C   Reads file of chars');
   writeln('/#   Reads file of Integers');
   writeln('/T   Reads Text Files');
   writeln('/?   This help screen');
   didit := true;
   end;

procedure notice2(var didit : boolean);
   begin
   clrscr;
   writeln;
   writeln;
   writeln('P.G.T.F.R.U. ReadFile.exe');
   Writeln('Pascal Genorated Typed File Reader Utility by George Slaterpryce');
   writeln('(C) 1996 George Slaterpryce A.K.A. Illogical Error');
   Writeln('This utility is Freeware.');
   Writeln;
   writeln('Usage ReadFile /[S,C,#,T,?] <filename.dat>');
   textcolor(blue);write('               option');textcolor(18);write('      file name');
   writeln('');
   textcolor(7);
   writeln;
   writeln('Command line Parameters');
   writeln('/S   Reads file of strings');
   writeln('/C   Reads file of chars');
   writeln('/#   Reads file of Integers');
   writeln('/T   Reads Text Files');
   writeln('/?   This Help Screen');
   didit := (true);
   end;

procedure notice3;
   begin
   clrscr;
   writeln;
   writeln;
   writeln('P.G.T.F.R.U. ReadFile.exe');
   Writeln('Pascal Genorated Typed File Reader Utility by George Slaterpryce');
   writeln('(C) 1996 George Slaterpryce A.K.A. Illogical Error');
   Writeln('This utility is Freeware.');
   Writeln;
   writeln('Usage ReadFile /[S,C,#,T,?] <filename.dat>');
   textcolor(17);write('               option');textcolor(green);write('      file name');
   writeln('');
   textcolor(7);
   writeln;
   writeln('Command line Parameters');
   writeln('/S   Reads file of strings');
   writeln('/C   Reads file of chars');
   writeln('/#   Reads file of Integers');
   writeln('/T   Reads Text Files');
   writeln('/?   This help screen');
   end;

(***************************************************************************)


begin
count := 0; (*initialize all variables*)
clrscr;
didit := false;
clrscr;


(*Start our Hex viewing or Binary viewing*)
    IF paramstr(1) = '/h' then
        begin
      if paramstr(2) = '' then notice2(didit);   (*See if the user typed*)
      if paramstr(2) <> '' then           (*a file name if and they didnt*)
      begin                               (*tell them*)
      Assign(F2, paramstr(2));            (*if they did go on with the *)
      Reset(F2);                          (*function*)
      writeln;
      writeln;
      while not Eof(F2) do
      begin
      Read(F2, ch);
      if ch > char(31) then          (*throw out all the "trash" chars*)
      begin                          (* (the higher ended ascii codes and*)
      if ch < char(127) then         (* some of the lower ones to make it*)
                                     (*into more readable code*)
      begin
      IF count = 1500 then (*this is how many characters we can show on a *)
      begin;               (*screen at one time well actually you can show*)
      writeln;             (*2000 characters at a time(on a 80x25 standard*)
      writeln;             (*screen but 1500 gives you a little play room *)
      writeln('pause');
      readkey;
      writeln;
      writeln;
      clrscr;
      end;
      count := count + 1;
      Write(Ch);
      end;
      end;
    end;
    close(F2);
    didit := true;
  end;
  end;

(*end of hex/binary viewing*)
(***************************************************************************)


(*From here on down i added on some features that you could use to make*)
(*a more specialized view simple crup really :) but hey what the hell *)


    (* this little function here is to eleminate a rather stupid bug i had
    when the user typed nothing after fileread *)
    IF paramstr(1) = '' then
    begin
    assign(F, 'Error.txt');
    rewrite(F);
    close(F);
    notice3;
    end;
    (*******************************************)

    IF paramstr(1) = '/S' then
    begin
    if paramstr(2) = '' then notice2(didit);
    if paramstr(2) <> '' then
    begin
    Assign(F, paramstr(2));
    Reset(F);
    while not Eof(F) do
    begin
      Read(F, strng);
      Write(strng);
      writeln;
    end;
    close(F);
   end;
   didit := true;
   end;

  IF paramstr(1) = '/s' then
  begin
  if paramstr(2) = '' then notice2(didit);
  if paramstr(2) <> '' then
  begin
    Assign(F, paramstr(2));
    Reset(F);
    while not Eof(F) do
    begin
      Read(F, strng);
      Write(strng);
      writeln;
    end;
    close(F);
    didit := true;
  end;
  end;

   IF paramstr(1) = '/C' then
    begin
    if paramstr(2) = '' then notice2(didit);
    if paramstr(2) <> '' then
    begin
    Assign(F2, paramstr(2));
    Reset(F2);
    while not Eof(F2) do
    begin
      Read(F2, ch);
       if ch = char(7) then ch := char(255);
      Write(Ch);
      end;
    close(F2);
    didit := true;
   end;
   end;

    IF paramstr(1) = '/c' then
     begin
     if paramstr(2) = '' then notice2(didit);
     if paramstr(2) <> '' then
    begin
    Assign(F2, paramstr(2));
    Reset(F2);
    while not Eof(F2) do
    begin
      Read(F2, ch);
      if ch = char(7) then ch := char(255);
      Write(Ch);
    end;
    close(F2);
    didit := true;
  end;
  end;

IF paramstr(1) = '/#' then
    begin
    if paramstr(2) = '' then notice2(didit);
    if paramstr(2) <> ''  then
    begin
    Assign(F3, paramstr(2));
    Reset(F3);
    while not Eof(F3) do
    begin
      Read(F3, num);
      Write(num);
      writeln;
      end;
  close(f3);
    didit := true;
  end;
  end;

IF paramstr(1) = '/T' then
    begin
    if paramstr(2) = '' then notice2(didit);
    if paramstr(2) <> '' then
    begin
    Assign(F4, paramstr(2));
    Reset(F4);
    while not Eof(F4) do
    begin
      Readln(F4, strng);
      Writeln(strng);
   end;
    close(F4);
  end;
  didit := true;
  end;

IF paramstr(1) = '/t' then
    begin
    if paramstr(2) = '' then notice2(didit);
    if paramstr(2) <> '' then
    begin
    Assign(F4, paramstr(2));
    Reset(F4);
    while not Eof(F4) do
    begin
      Readln(F4, strng);
      Writeln(strng);
   end;
    close(F4);
  end;
  didit := true;
  end;




IF didit = false then notice3;
IF paramstr(1) = '/?' then notice3;


Writeln;
textcolor(red);
writeln('operation done');
textcolor(7);
writeln('');


end.



