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 }
-
-
- 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 BCDTOIN (CHA : CHAR) : INTEGER;
- BEGIN
- BCDTOIN := ORD(CHA) - TRUNC(ORD(CHA)/16)*6;
- END;
- {================================================================}
- { CHARACTER TO INTEGER FUNCTION }
- {================================================================}
- FUNCTION CHTOIN(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);
- CHTOIN := RESULT;
- END;
- {===============================================================}
- { FUNCTION EXIST }
- {===============================================================}
- FUNCTION EXIST(FILENAME : NAMESTR) : BOOLEAN;
- VAR
- FIL : FILE;
- BEGIN
- ASSIGN(FIL,FILENAME);
- {$I-}
- RESET(FIL);
- {$I+}
- EXIST := (IORESULT = 0)
- 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);
- 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 := CHTOIN(GETDATA,7,4);
- NBRRECUSED := CHTOIN(GETDATA,11,4);
- RCDLEN := CHTOIN(GETDATA,15,3);
- BLOCKINGFACTOR := CHTOIN(GETDATA,18,2);
- FIELDPERRECORD := CHTOIN(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] := BCDTOIN(GETDATA[32+X]);
- DATALEN[X] := BCDTOIN(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] := BCDTOIN(GETDATA[W]);
- COLUMN[X] := BCDTOIN(GETDATA[W+1])*10+TRUNC(BCDTOIN(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');
- END.