home *** CD-ROM | disk | FTP | other *** search
- {===============================================================}
- { FUNCTION EXIST }
- {===============================================================}
- FUNCTION EXIST(FILENAME : NAMESTR) : BOOLEAN;
- VAR
- FIL : FILE;
- BEGIN
- ASSIGN(FIL,FILENAME);
- {$I-}
- RESET(FIL);
- {$I+}
- EXIST := (IORESULT = 0)
- END;
- {================================================================}
- { IDENTIFY DATA RECORD PROCEDURE }
- {================================================================}
- PROCEDURE IDRECORD;
- BEGIN
- GOTOXY(1,24);
- WRITE('ENTER RECORD NUMBER : ');
- READ(DATARECORD);
- IF DATARECORD> NBRRECUSED THEN DATARECORD := NBRRECUSED;
- IF DATARECORD< 1 THEN DATARECORD := 1;
- LASTRECUSED := DATARECORD+1; { FORCE DISPLAY AFTER MENU }
- TEXTMODE(C80);
- REGVIDEO;
- CLRSCR;
- END;
- {================================================================}
- { ADD / ENTER RECORDS PROCEDURE }
- {================================================================}
- PROCEDURE ADDNEWRECORD;
- BEGIN
- TEXTMODE(C80);
- REGVIDEO;
- REPEAT
- NBRRECUSED := NBRRECUSED + 1;
- DATARECORD := NBRRECUSED;
- GETDATAREC;
- DISPLAYREC;
- GOTOXY(1,24);
- WRITE('ADD/ENTER RECORD MODE [ USE WORDSTAR EDIT ');
- WRITE('COMMANDS ] F1 KEY TO END');
- REPEAT
- ENTERFIELD;
- GOTOXY(1,24);
- CLREOL;
- WRITE('DATA RECORD OK? (Y/N/<F1>) ');
- WRITE(' ');
- TEXTCOLOR(WHITE+BLINK);
- TEXTBACKGROUND(RED);
- WRITE('<F1> KEY FOR MENU');
- REGVIDEO;
- GOTOXY(28,24);
- READ(KBD,CH);
- IF CH = #27 THEN READ(KBD,CH1) ELSE CH1 := #0;
- UNTIL CH <> 'N';
- UNTIL CH1 = #59;
- FILERECCHGD := TRUE;
- RECADDEDTOFILE := TRUE;
- LASTRECUSED := DATARECORD;
- DATARECORD := 0; { A READ OF DATA RECORD 0 }
- GETDATAREC; { WILL WRITE LAST RECORD }
- END;
- {================================================================}
- { DISPLAY RECORDS TO END PROCEDURE }
- {================================================================}
- PROCEDURE DISPLAYRECORDS;
- BEGIN
- IDRECORD;
- REPEAT
- CALCULATE;
- GETDATAREC;
- IF LASTRECUSED <> DATARECORD THEN
- BEGIN
- LASTRECUSED := DATARECORD;
- DISPLAYREC;
- END;
- GOTOXY(1,24);
- WRITE('RETURN TO CONTINUE : [ F2 TO ENTER DATA ] ');
- WRITE(' F1 = RETURN TO MENU');
- GOTOXY(22,24);
- READ(KBD,CH);
- IF CH <> #27 THEN
- BEGIN
- CASE CH OF
- ^D,^F,^M : IF DATARECORD <NBRRECUSED+1 THEN { RETURN KEY }
- DATARECORD := DATARECORD +1;
-
- ^H : DELETEREC; { DELETE KEY }
-
- ^A,^S : IF DATARECORD > 1 THEN { F9 = LEFT ARROW }
- DATARECORD := DATARECORD -1;
-
- ^E,^C,^R,^X : { WORDSTAR'S UP FIELD COMMAND }
- BEGIN
- FIELDDATAMSG;
- ENTERFIELD;
- END;
-
- END; { CASE CH OF }
- END
- ELSE
- BEGIN
- READ(KBD,CH1);
- CASE CH1 OF
-
- #68 : IF DATARECORD < NBRRECUSED+1 THEN { F10 = RIGHT ARROW }
- DATARECORD := DATARECORD +1;
-
- #59 : DATARECORD := NBRRECUSED +1 ; { F1 = HOME KEY }
-
- #67 : IF DATARECORD > 1 THEN { F9 = LEFT ARROW }
- DATARECORD := DATARECORD -1;
-
- #60,#65,#66 :
- BEGIN { LINE FEED }
- FIELDDATAMSG;
- ENTERFIELD;
- END;
- END; { CASE CH OF }
- END; { ELSE BEGIN }
- UNTIL DATARECORD > NBRRECUSED;
- END;
- {================================================================}
- { CORRECT RECORD PROCEDURE }
- {================================================================}
- PROCEDURE CORRECTRECORD;
- BEGIN
- IDRECORD;
- CALCULATE;
- GETDATAREC;
- DISPLAYREC;
- FIELDDATAMSG;
- REPEAT
- ENTERFIELD;
- GOTOXY(1,24);
- WRITE('DATA RECORD OK? (Y/N) ');
- CLREOL;
- READ(KBD,CH);
- FIELDDATAMSG;
- UNTIL CH <> 'N';
- END;
-
- {################################################################}
- { }
- { MAIN PROGRAM }
- { ============ }
- {################################################################}
-
-
- BEGIN
- FILERSTART:
- REPEAT
- TEXTMODE(C40);
- REGVIDEO;
- CLRSCR;
- GOTOXY(1,22);
- WRITE('FILER A LA PASCAL');
- GOTOXY(1,23);
- WRITE('ENTER SOURCE FILE NAME : ');
- READLN(SOURCENAME);
- X := POS('.',SOURCENAME);
- IF X <> 0 THEN SOURCENAME := COPY(SOURCENAME,1,X-1);
- SOURCENAME := SOURCENAME + '.DAT';
- FILEEXISTS := EXIST(SOURCENAME);
- UNTIL FILEEXISTS = TRUE;
- WRITE('ENTER CURRENT DATE (MM/DD/YY) : ');
- READLN( CURRDATE );
- IF LENGTH(CURRDATE) = 0 THEN CURRDATE := ' / / ';
- ASSIGN( SOURCE, SOURCENAME );
- RESET( SOURCE );
- SEEK(SOURCE,1);
- BLOCKREAD( SOURCE,GETDATA,1 );
- BLOCKREAD( SOURCE,LBL,3 );
- FILENAME := 'XXXXXX';
- FOR X := 1 TO 6 DO
- FILENAME[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;
- {================================================================}
- { INITIALIZE VARIABLES FOR ENTRY INTO FILER }
- {================================================================}
- DATARECORD := NBRRECUSED;
- CALCULATE;
- ABORTCHAR := FALSE; { FLAG TO INDICATE ABORT OF SEARCH }
- CHANGEDATE := FALSE; { FLAG TO INDICATE THAT DATA HAS CHANGED }
- DISKRECNOWINMEM := DISKRECORD -1; { ENSURE DISK READ FIRST TIME}
- FILERECCHGD := FALSE; { ENSURE NO WRITE BEFORE FIRST READ }
- LASTRECUSED := 0; { SET LAST RECORD USED TO ZERO }
- LASTTARGET := ''; { ENSURE THERE IS A TARGET TO SEARCH FOR }
- NBRDISKRECUSED := DISKRECORD; { ESTABLISH MAX DISK REC NBR }
- RECADDEDTOFILE := FALSE; { FLAG TO INDICATE CHANGE IN FILE SIZE}
- {================================================================}
- { MASTER MENU }
- {================================================================}
-
- REPEAT
- TEXTMODE(C40);
- REGVIDEO;
- CLRSCR;
- GOTOXY(1,10);
- WRITELN ('FILER MASTER MENU');
- WRITELN ('=================');
- WRITELN ('FILE : ',FILENAME);
- WRITELN ('LAST CHANGE : ',FILEDATE);
- WRITELN('ACTIVE RECORDS : ',NBRRECUSED);
- WRITELN('LAST RECORD : ',LASTRECUSED);
- WRITELN;
- WRITELN ('1. ADD/ENTER RECORDS');
- WRITELN ('2. DISPLAY RECORDS');
- WRITELN ('3. CORRECT RECORDS');
- WRITELN ('4. DELETE RECORD');
- WRITELN ('5. END FILER PROGRAM');
- WRITELN;
- WRITE ('ENTER OPTION : ');
- READ(OPTION);
- CASE OPTION OF
- '1' : ADDNEWRECORD;
- '2' : IF NBRRECUSED > 0 THEN DISPLAYRECORDS;
- '3' : IF NBRRECUSED > 0 THEN CORRECTRECORD;
- '4' : IF NBRRECUSED > 0 THEN
- BEGIN
- IDRECORD;
- GETDATAREC;
- DISPLAYREC;
- DELETEREC;
- END;
- END;
- UNTIL OPTION IN ['5','9'];
- {================================================================}
- { END PROGRAM }
- {================================================================}
- IF FILERECCHGD = TRUE THEN
- BEGIN { WRITE LAST CHANGED RECORD }
- SEEK(SOURCE,DISKRECNOWINMEM);
- BLOCKWRITE(SOURCE,GETDATA,2);
- CHANGEDATE := TRUE;
- END;
-
- IF RECADDEDTOFILE = TRUE THEN
- BEGIN
- SEEK(SOURCE,0); { UPDATE BASIC/Z BLOCK 0 }
- BLOCKREAD(SOURCE,GETDATA,1);
- X := (NBRRECUSED+BLOCKINGFACTOR-1) DIV BLOCKINGFACTOR +3;
- GETDATA[3] := CHR(X-((X DIV 256)*256));
- GETDATA[4] := CHR(X DIV 256);
- SEEK(SOURCE,0);
- BLOCKWRITE(SOURCE,GETDATA,1);
- END;
-
- SEEK(SOURCE,1); { UPDATE FILER HEADER RECORD }
- BLOCKREAD(SOURCE,GETDATA,1);
- STR(NBRRECUSED:4,ANS);
- MOVE(ANS[1],GETDATA[11],4);
- IF CHANGEDATE = TRUE THEN MOVE(CURRDATE[1],GETDATA[22],8);
- FILEDATE := CURRDATE;
- SEEK(SOURCE,1);
- BLOCKWRITE(SOURCE,GETDATA,1);
- CLOSE(SOURCE);
- TEXTMODE(C80);
- IF OPTION = '9' THEN GOTO FILERSTART;
- GOTOXY(1,22);
- WRITELN;
- WRITELN('THANK YOU FOR USING FILER');
- WRITELN;
- WRITELN('HAVE A GREAT DAY!');
-
- {================================================================}