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 PICTOFRM; { ONE OF THE FILER GROUP OF PROGRAMS }
- { CONVERTS PICTURE OF DATA BASE SCREEN TO XXX.FRM FILE }
- { PICTOFRM.PAS VERSION 2.0 }
- { MAY 20, 1985 }
-
- TYPE
- NAMESTR = STRING[12];
- STRING79 = STRING[79];
-
- VAR
- X : INTEGER; { POSITION IN SCREEN DATA LINE }
- Y : INTEGER; { LABEL & DATA ARRAY NUMBER }
- Z : INTEGER; { SCREEN LINE COUNTER }
-
- W, POINTER, LABELSTART,
- LABELEND, DATASTART,DATAEND,
- DECPOINTER,WHOLEDIGITS,
- WHOLEEND, COMMAS, LASTLINE,
- ARRAYCOUNT, BLOCKINGFACTOR : INTEGER;
-
- LAB, DATA,
- ASCII, FILEEXISTS : BOOLEAN;
-
- LINE : ARRAY [1..30] OF STRING79;
- WORK : ARRAY [1..79] OF CHAR;
- INFO : STRING79;
- LABELNAME : STRING79;
- FILENAME : STRING[12];
- CH : CHAR;
-
- LABELLENGTH, DATALEN,DATAFORM,
- ROW,COLUMN : ARRAY[1..32] OF INTEGER;
- LBLNAME : ARRAY[1..32] OF STRING79;
-
- SOURCE, SCREENFORM : TEXT;
- {===============================================================}
- { FUNCTION EXIST }
- {===============================================================}
- FUNCTION EXIST(FILENAME : NAMESTR) : BOOLEAN;
- VAR
- FIL : FILE;
- BEGIN
- ASSIGN(FIL,FILENAME);
- {$I-}
- RESET(FIL);
- {$I+}
- EXIST := (IORESULT = 0)
- END;
-
- {===============================================================}
- { STORE LABEL & DATA PROCEDURE }
- {===============================================================}
- PROCEDURE STORELABDAT;
- BEGIN
- DATA := FALSE;
- LAB := FALSE;
- LBLNAME[Y] := LABELNAME; { SAVE LABEL IN ARRAY }
-
- IF DECPOINTER = 0 THEN { NO DECIMAL POINT IN NUMBER }
- BEGIN
- WHOLEEND := DATAEND;
- DECPOINTER := DATAEND ;
- END;
- IF ASCII = TRUE THEN { ASCII DATA FOUND }
- BEGIN
- DATAFORM[Y] := 15;
- COMMAS := 0;
- END
- ELSE
- BEGIN { PROCESS FOR NUMERIC DATA ONLY }
- DATAFORM[Y] := DATAEND-DECPOINTER;
- WHOLEDIGITS := WHOLEEND - DATASTART;
- IF WHOLEDIGITS > 7 THEN COMMAS := 2
- ELSE
- BEGIN
- IF WHOLEDIGITS >3 THEN COMMAS := 1 ELSE COMMAS := 0;
- END;
- END; { IF ASCII...ELSE BEGIN }
- DATALEN[Y] := DATAEND - DATASTART + 1 - COMMAS;
- ROW[Y] := Z;
- COLUMN[Y] := LABELSTART;
- Y := Y + 1; { INCREMENT ARRAY COUNTER }
- DATAEND := 0;
- DATASTART := 0;
- DECPOINTER := 0;
- LABELNAME := '';
- ASCII := FALSE;
- END;
-
- {===============================================================}
- { MAIN PROGRAM }
- {===============================================================}
-
- BEGIN
- REPEAT
- CLRSCR;
- GOTOXY(1,24);
- WRITELN('"PICTOFRM" CONVERTS FILES FROM XXX.PIC TO XXX.FRM');
- WRITELN;
- WRITE('ENTER FILENAME OF PICTURE FILE : ');
- READLN(FILENAME);
- X := POS('.',FILENAME);
- IF X <> 0 THEN FILENAME := COPY(FILENAME,1,X-1);
- FILENAME := FILENAME + '.PIC';
- FILEEXISTS := EXIST(FILENAME);
- UNTIL FILEEXISTS = TRUE;
- ASSIGN (SOURCE,FILENAME);
- RESET(SOURCE);
-
- Z := 1; { LINE NUMBER IN SCREEN }
- CLRSCR;
- WHILE NOT EOF(SOURCE) DO
- BEGIN
- READLN(SOURCE,LINE[Z]);
- WRITELN(LINE[Z]);
- Z := Z+1;
- END;
- LASTLINE := Z-1;
- WRITE('ENTER ANY KEY TO CONTINUE ');
- READ(KBD,CH);
- DELLINE;
- WRITELN;
-
- {===============================================================}
- { TRANSLATE SCREEN DATA }
- {===============================================================}
-
- Y := 1; { ARRAY COUNTER }
- Z := 1; { SCREEN LINE COUNTER }
-
- WHILE Z <= LASTLINE DO
- BEGIN
- DATASTART := 0;
- DATAEND := 0;
- DECPOINTER := 0;
- LAB := FALSE;
- DATA := FALSE;
- LABELNAME := '';
- ASCII := FALSE;
-
- FOR X := 1 TO LENGTH(LINE[Z]) DO
- BEGIN
- IF LAB = FALSE THEN
- BEGIN
- IF LINE[Z][X] <> ' ' THEN
- BEGIN
- LABELSTART := X;
- LAB := TRUE; { FIRST CHAR OF LABEL FOUND }
- LABELNAME := LABELNAME + LINE[Z][X];
- END;
- END
- ELSE
- BEGIN { LAB = TRUE}
- IF DATA = FALSE THEN { PROCESS LABEL INFO }
- BEGIN { LAB = TRUE & DATA = FALSE }
- IF LINE[Z][X] = ':' THEN
- BEGIN
- DATA := TRUE;
- END
- ELSE { WE HAVE ANOTHER CHAR OF LABEL }
- BEGIN
- LABELNAME := LABELNAME + LINE[Z][X];
- END;
- END
- ELSE { LAB = TRUE & DATA = TRUE }
- BEGIN { PROCESS NUMERIC INFORMATION }
- IF DATASTART = 0 THEN
- BEGIN
- IF LINE[Z][X] <> ' ' THEN
-
-
- BEGIN
- DATASTART := X;
- IF UPCASE(LINE[Z][X]) IN ['A'..'Z'] THEN ASCII := TRUE;
- IF LINE[Z][X] = '.' THEN
- BEGIN
- DECPOINTER := X;
- WHOLEEND := X-1;
- END;
- END;
-
-
- END
- ELSE
- BEGIN
- IF X = LENGTH(LINE[Z]) THEN
- BEGIN
- DATAEND := X;
- STORELABDAT; { END OF LINE FOUND }
- END
- ELSE
- BEGIN
- IF LINE[Z][X] = '.' THEN
- BEGIN
- DECPOINTER := X;
- WHOLEEND := X-1;
- END;
- IF LINE[Z][X] = ' ' THEN
- BEGIN
- DATAEND := X-1;
- STORELABDAT; { SPACE AFTER LABEL FOUND }
- END;
- END; { IF X .. ELSE BEGIN }
- END; { IF DATASTART .. ELSE BEGIN }
- END; { IF DATA ... ELSE BEGIN }
- END; { IF LAB ... ELSE BEGIN }
- END; { FOR X ... BEGIN }
- Z := Z + 1;
- END; { WHILE .. BEGIN }
- CLOSE(SOURCE);
-
- X := POS('.',FILENAME);
- IF X <> 0 THEN FILENAME := COPY(FILENAME,1,X-1);
- FILENAME := FILENAME + '.FRM';
- ASSIGN(SCREENFORM,FILENAME);
- REWRITE(SCREENFORM);
- ARRAYCOUNT := Y-1;
-
- FOR X := 1 TO Y-1 DO
- BEGIN
- STR(ROW[X]:3,INFO);
- WRITE (SCREENFORM,'ROW',INFO);
- WRITE ('ROW',INFO);
- STR(COLUMN[X]:3,INFO);
- WRITE (SCREENFORM,', COL',INFO);
- WRITE (', COL',INFO);
- STR(DATAFORM[X]:3,INFO);
- WRITE (SCREENFORM,', FORM',INFO);
- WRITE (', FORM',INFO);
- STR(DATALEN[X]:4,INFO);
- WRITE (SCREENFORM,', LEN',INFO);
- WRITE (', LEN',INFO);
- WRITE (SCREENFORM,', MISC ___');
- WRITE (', MISC ___');
- WRITELN (SCREENFORM,', LABEL >',LBLNAME[X],'<');
- WRITELN (', LABEL >',LBLNAME[X],'<');
- END;
- WRITELN;
- WRITE('ENTER ANY KEY TO CONTINUE ');
- READ(KBD,CH);
- DELLINE;
- WRITELN;
- WRITELN('BEGINNING WITH A PICTURE OF THE FILE, "PICTOFRM" HAS TRANSLATED');
- WRITELN('THIS INFORMATION INTO AN INTERMEDIATE FORM AND STORED IT IN A');
- WRITELN('FILE WITH THE SAME NAME AND THE FILE EXTENSION ".FRM".');
- WRITELN;
- WRITELN('THIS FILE MAY NOW BE EDITED WITH ANY EDITOR SUCH AS WORDSTAR');
- WRITELN('TO REVISE THE ORDER OF THE FIELDS WITHIN THE FILE.');
- WRITELN;
- WRITELN('FINALLY, TO CONVERT THE ".FRM" INTERMEDIATE FILE INTO A ".DAT"');
- WRITELN('FILE THAT CAN BE USED BY THE FILER GROUP OF PROGRAMS, USE THE');
- WRITELN('PROGRAM "FRMTODAT".');
-
- Z := 0;
- FOR X :=1 TO ARRAYCOUNT DO
- Z := Z + DATALEN[X];
- WRITELN;
- WRITELN('RECORD LENGTH : ',Z,' BYTES');
- BLOCKINGFACTOR := 256 DIV Z;
- WRITELN('BLOCKING FACTOR : ',BLOCKINGFACTOR);
- W := 256 DIV (BLOCKINGFACTOR + 1) -Z;
- WRITELN('BYTES LEFT IN BLOCK : ',256-Z*BLOCKINGFACTOR);
- WRITE('CHANGE RECORD LENGTH BY ',W);
- WRITELN(' BYTES TO INCREASE BLOCKING FACTOR');
-
- CLOSE(SCREENFORM);
- END.
-