[Back to TEXTFILE SWAG index] [Back to Main SWAG index] [Original]

    {
    > hi, I've got a question how can I read the textfile in Binary
    > mode using Blockread....I am trying to write a multinode program
    > and I have to read the textfile in binary mode because SHARE only
    > support Binay mode...so If you know how please post me an example....

    here is a unit and a conversion prog to convert a text file over
    to a binary file that I use for online help in my programs

    (I replaced my popupwindows with the crt window)
    }

    unit display;
    interface
    uses crt,dos;
    Type
       String80 = String[80];
       String65=String[65];
       trecs = record
      fString : String65;
    end;
    var
    helpfile : file of trecs;
    trec : trecs;
    help_fore, help_back, n,b : Integer;
    procedure help(pos:Integer);
    function Exist(Filename:String80):boolean;
    procedure fwrite(col,row,attrib:byte;str:String80);
    { Write directly to video memory }

    implementation
    procedure fwrite(col,row,attrib:byte;str:String80);
    begin
    inline
    ($1E/$1E/$8A/$86/row/$B3/$50/$F6/$E3/$2B/$DB/$8A/$9E/col/
     $03/$C3/$03/$C0/$8B/$F8/$be/$00/$00/$8A/$BE/attrib/
     $8a/$8e/str/$22/$c9/$74/$3e/$2b/$c0/$8E/$D8/$A0/$49/$04/
     $1F/$2C/$07/$74/$22/$BA/$00/$B8/$8E/$DA/$BA/$DA/$03/$46/
     $8a/$9A/str/$EC/$A8/$01/$75/$FB/$FA/$EC/$A8/$01/$74/$FB/
     $89/$1D/$47/$47/$E2/$Ea/$2A/$C0/$74/$10/$BA/$00/$B0/
     $8E/$DA/$46/$8a/$9A/str/$89/$1D/$47/$47/$E2/$F5/$1F);
    end;
    function Exist(Filename:String80):boolean;
    VAR infile:text;

    Begin                        { Find out if the file exists }
       Assign(Infile,Filename);
       {$I-}
       Reset(infile);
       close(infile);
       {$I+}
       Exist := (IOresult = 0);
    end;
    procedure help(pos:Integer);
    { Read and display help }
    const
       filename = 'Demo.hlp'; {this is the name of my help file}

    var
       ch : char;
       i  : Integer;
    begin
       if not exist(filename) then
       begin
          window(20,10,60,14);
          textcolor(7);
          clrscr;
          writeln('    Help file ''Demo.hlp'' not found.');
          write('        Press any key...');
          Ch := ReadKey;
       end else
       begin
          help_back:=cyan;
          window(5,4,73,19);
          textbackground(3);
          clrscr;
          i := 1;
          assign(helpfile,filename);
          reset(helpfile);
          while not eof(helpfile) do
          begin
             seek(helpfile,pos-1);
             read(helpfile,trec);
                fwrite(7,i+3,help_back*16+help_fore,trec.fString);
             i := succ(i);
             pos := succ(pos);
             if i > 12 then
             begin
                i := 1;
                writeln;
        fwrite(21,17,help_back*16+4,'  Page Up/Page Down or ESC to exit...');
                gotoxy(47,18);
                repeat
                   Ch := ReadKey;
                until ch in [#73,#81,#27];
                clrscr;
                if ch = #73 then pos := pos - 30;
                if pos < 1 then pos := 1;
                if ch = #27 then
                begin
                   close(helpfile);
                   textbackground(b);
                   exit
                end;
                clrscr;
             end;
          end;
             fwrite(10,17,help_back*16+4,'Press any key to exit help...');
          gotoxy(35,18);
          Ch := ReadKey;
          close(helpfile);
          textbackground(b);
       end;
    end;
    end.

    {
    this will take a regular ascii text file and convert it to a binary
    file,Note: the text file cannot have any more than 65 columns,you can
    change this simply by replacing 65 with 80 if this is inconvenient,
    I use this so that my help file display fits nicely in a window
    }
    program convert;
    Uses
       Crt;
    { Converts 65 char per line help file over to a file of records
     so it can be presented in a window.
    }
    type
       string65 = string[65];
       recs = record
          line : string65;
       end;

    const
       filenameout = 'DEMO.HLP';

    var
       diskfilein : text;
       rec : recs;
       diskfileout : file of recs;
       filenamein : string65;
       line : string65;

    function Exist(Filename:string65):boolean;
    VAR infile:text;
    Begin                        { Find out if the file exists }
       Assign(Infile,Filename);
       {$I-}
       Reset(infile);
       {$I+}
       Exist := (IOresult = 0);
       close(infile)
    end;

    function uppercase(line:String65):String65;
    var
       i : integer;
       ch : char;
       temp : string65;

    begin
       temp := '';
       for i := 1 to length(line) do
       begin
          ch  := line[i];
          ch := upcase(ch);
          temp := concat(temp,ch);
       end;
       uppercase := temp
    end;

    begin { Convert }
       clrscr;
       gotoxy(20,10);
       write('Filename to convert ? '); {any text file}
       readln(filenamein);
       if not exist(filenamein) then
       begin
          gotoxy(20,12);
          write('Filename ',filenamein,' not found.');
          halt
       end;
       filenamein := uppercase(filenamein);
          if filenamein = filenameout then
          begin
             gotoxy(20,12); clreol;
             write(#7,'Both filenames can''t have the same name.');
             halt
          end;
       assign(diskfilein,filenamein);
       reset(diskfilein);
       assign(diskfileout,filenameout);
       rewrite(diskfileout);
       while not eof(diskfilein) do
       begin
          readln(diskfilein,line);
          rec.line := line;
          write(diskfileout,rec)
       end;
       close(diskfilein);
       close(diskfileout);
       gotoxy(20,15);
       write(filenameout,' has been created.');
    end.

    {
    this is a little test program to read the binary help file that was
    created with Convert.exe included in the previous message.
    you can use this in any of your programs that you wish to add online
    help to by simply calling HELP(x) ,where x is the line in the file.
    ie: help(1) is the first line, help(62) is line 62.

    this is probably more than you asked for but I'm sure you can find some
    useful stuff here.  :^)
    }

    program test_help;
    uses crt,display;
    begin;
    textbackground(1);
    clrscr;
    help(1); {starts displaying the file at line 1
     and allows pg/up/dn to browse}
    end.

[Back to TEXTFILE SWAG index] [Back to Main SWAG index] [Original]