home *** CD-ROM | disk | FTP | other *** search
- (***************************************************************)
- (* *)
- (* FILER A LA PASCAL DATA BASE SOURCE CODE FILE *)
- (* *)
- (* (C) 1985 by John M. Harlan *)
- (* 24000 Telegraph *)
- (* Southfield, MI. 48034 *)
- (* *)
- (* The FILER GROUP of programs is released on a "FREE *)
- (* SOFTWARE" basis. The recipient is free to examine *)
- (* and use the software with the understanding that if *)
- (* the FILER GROUP of programs prove to be of use and *)
- (* value, a contribution to the author is encouraged. *)
- (* *)
- (* While reasonable effort has been made to ensure the *)
- (* reliability of the FILER GROUP of programs, no war- *)
- (* ranty is given. The recipient uses the programs at *)
- (* his own risk and in no event shall the author be *)
- (* liable for damages arising from their use. *)
- (* *)
- (* *)
- (***************************************************************)
-
-
- program dattopic; { ONE OF THE FILER GROUP OF PROGRAMS }
- { CONVERTS A FILER DAT FILE TO A PIC FILE }
- { DATTOPIC.PAS VERSION 2.0 }
- { MAY 20, 1985 }
-
- { Formatted 2/7/86 by Doug Stevens using Pformat and the Turbo
- editors global search/replace. Original version was 100%
- upper case and very hard to read. }
-
- label QUIT;
-
- type
- Range = array[1..256] of char;
- String79 = string[79];
- NameStr = string[12];
- var
-
- ch,option : char;
-
- filenme : string[6];
- filedate : string[8];
- filename : string[12];
- ans : String79;
- mess : String79;
-
- v,w,x,z,
- maxnbrrec, nbrrecused, rcdlen,
- blockingfactor, fieldperrecord,
- ascii, decptr : integer;
-
- fileexists : boolean;
-
-
- labellength, datalen, dataform,
- labelposn, dataposn, row,
- column, fieldnbr : array[1..32] of integer;
- lbl : array[1..384] of char;
- line : array[1..30] of String79;
- getdata : Range;
-
- source : file;
- dattopic : text;
-
- {================================================================}
- { BINARY CODED DECIMAL TO INTEGER FUNCTION }
- {================================================================}
- function BcdToInt (cha : char) : integer;
- begin
- BcdToInt := ord(cha) - trunc(ord(cha)/16)*6;
- end;
- {================================================================}
- { CHARACTER TO INTEGER FUNCTION }
- {================================================================}
- function ChrToInt(var charray : Range; start, len : integer) : integer;
- var
- code, result : integer;
- workstring : string[10];
- begin
- workstring := '';
- for result := 0 to len-1 do
- begin
- if charray[start + result ] = ' ' then
- workstring := workstring + '0'
- else workstring := workstring + charray[start+result];
- end;
- val(workstring,result,code);
- ChrToInt := result;
- end;
- {===============================================================}
- { FUNCTION EXIST }
- {===============================================================}
- function Exist(filename : NameStr) : boolean;
- var
- fil : file;
- status : integer;
-
- begin
- Assign(fil,filename);
- {$I-}
- reset(fil);
- {$I+}
- Exist := (IOResult = 0);
- {$I-} Close(fil); status := IOResult; {$I+}
- end;
-
- {################################################################}
- { }
- { MAIN PROGRAM }
- { ============ }
- {################################################################}
-
-
- begin
- repeat
- ClrScr;
- GotoXY(1,24);
- writeln('"DATTOPIC" CONVERTS FILES FROM XXX.DAT TO XXX.PIC');
- writeln;
- write('ENTER FILENAME OF PICTURE FILE : ');
- readln(filename);
- x := pos('.',filename);
- if x <> 0 then filename := copy(filename,1,x-1);
- if filename = 'END' then goto QUIT; { Quick and dirty exit. }
- filename := filename + '.DAT';
- writeln(filename);
- fileexists := Exist(filename);
- until fileexists = true;
- Assign( source, filename );
- reset( source );
- Seek(source,1);
- blockread( source,getdata,1 );
- blockread( source,lbl,3 );
- filenme := 'XXXXXX';
- for x := 1 to 6 do
- filenme[x] := getdata[x];
- maxnbrrec := ChrToInt(getdata,7,4);
- nbrrecused := ChrToInt(getdata,11,4);
- rcdlen := ChrToInt(getdata,15,3);
- blockingfactor := ChrToInt(getdata,18,2);
- fieldperrecord := ChrToInt(getdata,20,2);
-
- filedate := ' ';
- Move(getdata[22],filedate[1],8);
-
- {================================================================}
- { GET LABEL LENGTH, DATA LENGTH & DATA FORM INFO }
- {================================================================}
-
- labelposn[1] := 1;
- dataposn[1] := 1;
-
- for x := 1 to fieldperrecord do
- begin
- labellength[x] := BcdToInt(getdata[32+x]);
- datalen[x] := BcdToInt(getdata[64+x]);
- dataform[x] := ord(getdata[96+x])-48;
- labelposn[x+1] := labelposn[x] + labellength[x];
- dataposn[x+1] := dataposn[x] + datalen[x];
- end;
-
- {================================================================}
- { TRANSLATE REPORT STRUCTURE }
- {================================================================}
-
- blockread(source,getdata,1); { SCREEN INFORMATION }
- { ESTABLISH VALUE OF DATAFORM[Z] FOR ASCII INFORMATION }
- if getdata[1] = 'S' then ascii := 9 else ascii := 15;
- for x := 1 to fieldperrecord do
- begin
- w := x*4+1;
- row[x] := BcdToInt(getdata[w]);
- column[x] := BcdToInt(getdata[w+1])*10+trunc(BcdToInt(getdata[w+2])/10);
- {FIELDNBR[X] := BCDTOIN(GETDATA[W+3]);} { not implemented }
- end;
-
- {================================================================}
- { BUILD PICTURE IN LINE ARRAY }
- {================================================================}
-
- for z := 1 to 30 do
- begin
- for x := 0 to 79 do
- line[z][x] := ' ';
- line[z][0] := chr(79);
- end;
- for z := 1 to fieldperrecord do
- begin
- v := column[z];
- for x := labelposn[z] to labelposn[z+1]-1 do
- begin
- line[row[z]][v] := lbl[x];
- v := v+1;
- end;
- line[row[z]][v+1] := ':';
- v := v +3;
-
- mess := '';
- if dataform[z] = ascii then
- begin
- for x := 1 to datalen[z] do
- mess := mess + 'A';
- end
- else
- begin
- mess := '';
- for x := 1 to datalen[z]-1 do
- mess := mess + '_';
- if dataform[z] = 0 then
- mess := mess + '_'
- else
- insert('.',mess,(length(mess)-dataform[z]+1));
- if dataform[z] = 0 then decptr := datalen[z]-2
- else
- decptr := datalen[z] - dataform[z] - 3;
- while decptr >1 do
- begin
- insert(',',mess,decptr);
- decptr := decptr -3;
- end;
- end;
-
- for w := 1 to length(mess) do
- begin
- line[row[z]][v] := mess[w];
- v := v+1;
- end;
- line[row[z]] := copy(line[row[z]],1,79);
- close(source)
- end;
- ClrScr;
- for x := 1 to 22 do
- begin
- line[x] := copy(line[x],1,79);
- writeln(line[x]);
- end;
- x := pos('.',filename);
- if x <> 0 then filename := copy(filename,1,x-1);
- filename := filename + '.PIC';
- Assign (dattopic,filename);
- rewrite(dattopic);
- for x := 1 to 24 do
- begin
- line[x] := copy(line[x],1,79);
- writeln(dattopic,line[x]);
- end;
- close(dattopic);
- GotoXY(1,24);
- writeln(filename,' CREATED');
- QUIT:
- end.