home *** CD-ROM | disk | FTP | other *** search
- {================================================================}
- { INITIALIZE FILER FILE }
- {================================================================}
- PROCEDURE INITIALIZE;
-
- BEGIN
- {STARTSTART:}
- REPEAT
- CLRSCR;
- GOTOXY(1,22);
- WRITE('START A LA PASCAL'); { ENTER YOUR REPORT NAME HERE }
- 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;
- DISKRECNOWINMEM := DISKRECORD -1; { ENSURE DISK READ FIRST TIME}
- FILERECCHGD := FALSE; { ENSURE NO WRITE BEFORE FIRST READ }
- LASTRECUSED := 0; { SET LAST RECORD USED TO ZERO }
- NBRDISKRECUSED := DISKRECORD; { ESTABLISH MAX DISK REC NBR }
- RECADDEDTOFILE := FALSE; { FLAG TO INDICATE CHANGE IN FILE SIZE}
- END; { INTIIALIZE PROCEDURE }
- {================================================================}
- { PROCEDURE NEWPAGE }
- {================================================================}
- PROCEDURE NEWPAGE;
- BEGIN
- WRITE(LST,^L); { FORMFEED COMMAND }
- LINE := 1;
- END;
- {================================================================}
- { PROCEDURE PAGE TITLE }
- {================================================================}
- PROCEDURE PAGETITLE;
- BEGIN
- WRITELN(LST,' SAMPLE REPORT TITLE ');
- WRITE(LST,CURRDATE,' ');
- WRITELN(LST,' PAGE ',PAGE);
- WRITELN(LST);
- WRITELN(LST);
- PAGE := PAGE +1;
- LINE := LINE +4; { FOUR LINES IN THIS REPORT TITLE }
- END;
- {================================================================}
- { PROCEDURE DATA HEADING }
- {================================================================}
- PROCEDURE DATAHEADING;
- BEGIN
- WRITELN(LST,' NAME COMPANY ACCOUNT 1 ACCOUNT 2');
- WRITELN(LST,'=================================================================');
- WRITELN(LST);
- LINE := LINE +3; { THREE LINES IN THIS HEADING }
- END;
- {================================================================}
- { PROCEDURE PRINT SUB TOTALS }
- {================================================================}
- PROCEDURE PRINTSUBTOTALS;
- BEGIN
- WRITELN(LST,' ============ ==========');
- WRITE(LST,'SUB TOTAL : ');
- ANS := EDITNBR(SUBTOTAL[9],10,2,'$'); { SUB TOTAL FOR ACCOUNT 1 }
- WRITE (LST,ANS);
- ANS := EDITNBR(SUBTOTAL[10],13,1,' '); { SUB TOTAL FOR ACCOUNT 2 }
- WRITELN(LST,ANS);
- WRITELN(LST);
-
- FOR X := 1 TO 31 DO { ZERO ALL SUBTOTALS }
- SUBTOTAL[X] := 0;
-
- LINE := LINE + 3; { THREE LINES PRINTED IN THIS SUB TOTAL }
-
- IF LINE > PAGEFULLLINECOUNT - 3 THEN
- BEGIN
- NEWPAGE;
- PAGETITLE;
- END;
- END;
- {================================================================}
- { PROCEDURE PRINT GRAND TOTALS }
- {================================================================}
- PROCEDURE PRINTGRANDTOTALS;
- BEGIN
- WRITELN(LST,' ============ ==========');
- WRITE(LST,'GRAND TOTAL : ');
- ANS := EDITNBR(GRANDTOTAL[9],13,2,'$'); { SUB TOTAL FOR ACCOUNT 1 }
- WRITE (LST,ANS);
- ANS := EDITNBR(GRANDTOTAL[10],13,1,' '); { SUB TOTAL FOR ACCOUNT 2 }
- WRITELN(LST,ANS);
- END;
-
-
-
- {================================================================}
- { OUTPUT CODE GOES HERE }
- {================================================================}
- BEGIN
-
- INITIALIZE; { ID AND READ IN FILE PARAMETERS }
-
- PAGE := 1; { INITIALIZE FOR REPORT }
- LINE := 1;
- PAGEFULLLINECOUNT := 60;
- DATARECORD := 1; { SET UP SUB TOTAL TEST }
- MOVERECORDDATATOARRAY;
- PREVCONTENTS := ASCIIFIELD[1];
- FOR X := 1 TO 31 DO { CLEAR SUB & GRAND TOTALS }
- BEGIN
- SUBTOTAL[X] := 0;
- GRANDTOTAL[X] := 0;
- END;
-
- PAGETITLE; { PRINT TITLE ON TOP OF PAGE }
-
- DATAHEADING; { PRINT DATA HEADING }
-
-
- {==============================================================}
- { PROCESS BODY OF REPORT }
- {==============================================================}
-
- FOR DATARECORD := 1 TO NBRRECUSED DO
- BEGIN
- MOVERECORDDATATOARRAY;
- {========================================}
- { CHECK TO SEE IF SUB TOTAL IS REQD }
- {========================================}
- IF ASCIIFIELD[1] <> PREVCONTENTS THEN
- BEGIN
- PREVCONTENTS := ASCIIFIELD[1];
- PRINTSUBTOTALS;
- END;
- {========================================}
- { WRITE LINE OF DATA HERE }
- {========================================}
- WRITE(LST,ASCIIFIELD[1],' ',ASCIIFIELD[2],' ');
- ANS := EDITNBR(NUMFIELD[9],10,2,'$'); { ACCOUNT REC }
- WRITE(LST,ANS);
- ANS := EDITNBR(NUMFIELD[10],13,1,' '); { AMT PAST DUE }
- WRITELN(LST,ANS);
- {=======================================}
- { UPDATE SUB TOTALS & GRAND TOTALS }
- {=======================================}
- FOR X := 1 TO 31 DO
- BEGIN
- SUBTOTAL[X] := SUBTOTAL[X] + NUMFIELD[X];
- GRANDTOTAL[X] := GRANDTOTAL[X] + NUMFIELD[X];
- END;
- {=======================================}
- { INCREMENT LINE AND CHECK FOR EOP }
- {=======================================}
- LINE := LINE + 1;
- IF LINE > PAGEFULLLINECOUNT THEN
- BEGIN
- NEWPAGE;
- PAGETITLE;
- DATAHEADING;
- END;
- END; { FOR DATARECORD := 1 TO }
-
- PRINTSUBTOTALS;
- PRINTGRANDTOTALS;
-
- {================================================================}
- { END PROGRAM }
- {================================================================}
- END.