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 FRMTODAT; { ONE OF THE FILER GROUP OF PROGRAMS }
- { PROGRAM TO TRANSLATE FROM .FRM TO .DAT FILE }
- { FRMTODAT.PAS VERSION 2.0 }
- { NOV 15, 1984 }
-
- TYPE
- STRING130 = STRING[130];
- STRING80 = STRING[80];
- NAMESTR = STRING[12];
-
- VAR
- X : INTEGER; { POSITION IN SCREEN DATA LINE }
- Y : INTEGER; { LABEL & DATA ARRAY NUMBER }
- Z : INTEGER; { SCREEN LINE COUNTER }
- W : INTEGER;
- CODE, FIELDPERRECORD,RCDLEN : INTEGER;
- BLOCKINGFACTOR : INTEGER;
-
- FILEEXISTS : BOOLEAN;
-
- LINE : ARRAY [1..30] OF STRING80;
- WORK : ARRAY [1..80] OF CHAR;
- BUFFER : ARRAY [1..128] OF CHAR;
- LBL : ARRAY [1..384] OF CHAR;
- CURRDATE : STRING[8];
- FILENAME : STRING[12];
- INFO : STRING130;
- LABELNAME : STRING130;
- CH : CHAR;
-
- LABELLENGTH, DATALEN,DATAFORM,
- ROW,COLUMN : ARRAY[1..32] OF INTEGER;
- LBLNAME : ARRAY[1..32] OF STRING80;
-
- SCREENFORM : TEXT;
- SOURCE : FILE;
-
- {===============================================================}
- { 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('"FRMTODAT" CONVERTS FILE FROM XXX.FRM TO XXX.DAT');
- WRITELN;
- WRITE('ENTER FILENAME OF SOURCE FILE : ');
- READLN(FILENAME);
- X := POS('.',FILENAME);
- IF X <> 0 THEN FILENAME := COPY(FILENAME,1,X-1);
- FILENAME := FILENAME + '.FRM';
- FILEEXISTS := EXIST(FILENAME);
- UNTIL FILEEXISTS = TRUE;
- ASSIGN (SCREENFORM,FILENAME);
- RESET(SCREENFORM);
- Z := 1;
- WHILE NOT EOF(SCREENFORM) DO
- BEGIN
- READLN(SCREENFORM,LINE[Z]);
- FOR X := 4 TO 32 DO
- IF LINE[Z][X] = ' ' THEN LINE[Z][X] := '0';
-
- Y := POS('ROW',LINE[Z]) + 3;
- INFO := '';
- FOR X := Y TO Y+2 DO
- INFO := INFO + LINE[Z][X];
- VAL(INFO, ROW[Z], CODE);
-
- Y := POS('COL',LINE[Z]) + 3;
- INFO := '';
- FOR X := Y TO Y+2 DO
- INFO := INFO + LINE[Z][X];
- VAL(INFO, COLUMN[Z], CODE);
-
- Y := POS('FORM',LINE[Z]) + 4;
- INFO := '';
- FOR X := Y TO Y+2 DO
- INFO := INFO + LINE[Z][X];
- VAL(INFO, DATAFORM[Z], CODE);
-
- Y := POS('LEN',LINE[Z]) + 3;
- INFO := '';
- FOR X := Y TO Y+3 DO
- INFO := INFO + LINE[Z][X];
- VAL(INFO, DATALEN[Z], CODE);
-
- Y := POS('>',LINE[Z]) + 1;
- W := POS('<',LINE[Z]) - 1;
- LBLNAME[Z] := '';
- FOR X := Y TO W DO
- LBLNAME[Z] := LBLNAME[Z] + LINE[Z][X];
-
- Z := Z+1;
- END;
- FIELDPERRECORD := Z-1;
- FOR Z := 1 TO FIELDPERRECORD DO
- BEGIN
- WRITE('ROW',ROW[Z]:3,', COL',COLUMN[Z]:3);
- WRITE(', FORM',DATAFORM[Z]:3,', LEN',DATALEN[Z]:4);
- WRITELN(', MISC ___, LABEL >',LBLNAME[Z],'<');
- END;
- CLOSE(SCREENFORM);
- WRITELN;
-
- {===============================================================}
- { BUILD NEW FILE HEADER }
- {===============================================================}
- X := POS('.',FILENAME);
- IF X <> 0 THEN FILENAME := COPY(FILENAME,1,X);
- FILENAME := FILENAME + 'DAT';
- WRITE('ENTER CURRENT DATE (MM/DD/YY : ');
- READLN(CURRDATE);
-
- ASSIGN(SOURCE,FILENAME);
- REWRITE(SOURCE);
- FOR X := 1 TO 128 DO
- BUFFER[X] := CHR(0);
- BUFFER[2] := CHR(1);
- BUFFER[3] := CHR(3);
- SEEK(SOURCE,0);
- BLOCKWRITE(SOURCE,BUFFER,1); { WRITE BASIC/Z BLOCK }
-
- FOR X := 1 TO 128 DO { INITIALIZE BUFFER }
- BUFFER[X] := '0';
- FOR X := 1 TO 6 DO
- BUFFER[X] := FILENAME[X]; { FILE NAME }
- RCDLEN := 0;
- FOR X := 1 TO FIELDPERRECORD DO
- RCDLEN := RCDLEN + DATALEN[X];
- STR(RCDLEN:3,INFO);
- FOR X := 15 TO 17 DO
- BUFFER[X] := INFO[X-14]; { RECORD LENGTH }
- BLOCKINGFACTOR := 256 DIV RCDLEN;
- STR(BLOCKINGFACTOR:2,INFO);
- FOR X := 18 TO 19 DO
- BUFFER[X] := INFO[X-17]; { BLOCKING FACTOR }
- STR(FIELDPERRECORD:2,INFO);
- FOR X := 20 TO 21 DO
- BUFFER[X] := INFO[X-19]; { FIELD PER RECORD }
- FOR X := 22 TO 29 DO
- BUFFER[X] := CURRDATE[X-21]; { CURRENT DATE }
- FOR X := 15 TO 29 DO
- IF BUFFER[X] = ' ' THEN BUFFER[X] := '0';
- FOR X := 30 TO 32 DO
- BUFFER[X] := ' ';
-
- FOR X := 1 TO FIELDPERRECORD DO { LABEL LENGTHS }
- BUFFER[32+X] := CHR((LENGTH(LBLNAME[X]) DIV 10)*6 + LENGTH(LBLNAME[X]));
- FOR X := 1 TO FIELDPERRECORD DO { DATA LENGTHS }
- BUFFER[64+X] := CHR((DATALEN[X] DIV 10)*6 + DATALEN[X]);
- FOR X := 1 TO FIELDPERRECORD DO { DATA FORM }
- BUFFER[96+X] := CHR(DATAFORM[X] + 48);
- BLOCKWRITE(SOURCE,BUFFER,1);
-
- FOR X := 1 TO 384 DO
- LBL[X] := CHR(0); { INITIALIZE LABEL BUFFER }
- Z := 1;
- FOR Y := 1 TO FIELDPERRECORD DO
- BEGIN
- FOR X := 1 TO LENGTH(LBLNAME[Y]) DO
- BEGIN
- LBL[Z] := LBLNAME[Y][X];
- Z := Z + 1;
- END;
- END;
- BLOCKWRITE(SOURCE,LBL,3); { WRITE LABELS }
-
- FOR X := 1 TO 128 DO
- BUFFER[X] := CHR(0); { INITIALIZE BUFFER }
- BUFFER[1] := 'V'; { VERSION 2.0 MESSAGE }
- BUFFER[2] := '2';
- BUFFER[3] := '.';
- BUFFER[4] := '0';
- FOR X := 1 TO FIELDPERRECORD DO
- BEGIN { ROW & COL & MISC INFO }
- BUFFER[1+X*4] := CHR(ROW[X]+( ROW[X] DIV 10 )*6);
- BUFFER[2+X*4] := CHR(((COLUMN[X] DIV 10) DIV 10)*6+(COLUMN[X] DIV 10));
- BUFFER[3+X*4] := CHR((COLUMN[X]-((COLUMN[X] DIV 10)*10)) * 16);
- BUFFER[4+X*4] := CHR(255);
- END;
- BLOCKWRITE(SOURCE,BUFFER,1);
- FOR X := 1 TO 128 DO
- BUFFER[X] := ' '; { INITIALIZE BUFFER }
- FOR X := 1 TO 3 DO
- BLOCKWRITE(SOURCE,BUFFER,1);
- CLOSE(SOURCE);
- WRITELN;
- WRITELN(FILENAME,' HAS BEEN CREATED FOR USE WITH FILER PROGRAMS.');
- END.