home *** CD-ROM | disk | FTP | other *** search
-
-
- {================================================================}
- { STORE DATA IN ARRAY GETDATA PROCEDURE }
- {================================================================}
- PROCEDURE STOREDATAINARRAY2 (Z : INTEGER);
- BEGIN
- FIRST := 1;
- IF DATAFORM2[Z] <> ASCII THEN
- BEGIN
- STRINGTOREAL(ANS,NUMVALUE,CODE);
- STR(NUMVALUE:20:8,ANS);
- ANS := ANS + ' ';
- FIRST := POS('.',ANS) - DATALEN2[Z];
- IF DATAFORM2[Z] <> 0 THEN FIRST := FIRST + DATAFORM2[Z] + 1;
- IF DATAFORM2[Z] = ASCII THEN FIRST := 1;
- END;
- FILLCHAR(GETDATA2[PRECBYTE2+DATAPOSN2[Z]],DATALEN2[Z],' ');
- MOVE(ANS[FIRST],GETDATA2[PRECBYTE2+DATAPOSN2[Z]],DATALEN2[Z]);
- END;
- {================================================================}
- { INITIALIZE FILER FILE }
- {================================================================}
- PROCEDURE INITIALIZE;
-
- BEGIN
- REPEAT
- CLRSCR;
- TEXTMODE(BW40);
- GOTOXY(1,22);
- WRITE('TRANSFER 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);
- SOURCENAMEDAT := SOURCENAME + '.DAT';
- FILEEXISTS := EXIST(SOURCENAMEDAT);
- UNTIL FILEEXISTS = TRUE;
- WRITELN;
- WRITELN;
-
- REPEAT
- GOTOXY(1,23);
- WRITE('ENTER DESTINATION FILE NAME : ');
- READLN(DESTINATIONNAME);
- X := POS('.',DESTINATIONNAME);
- IF X <> 0 THEN DESTINATIONNAME := COPY(DESTINATIONNAME,1,X-1);
- DESTINATIONNAMEDAT := DESTINATIONNAME + '.DAT';
- FILEEXISTS := EXIST(DESTINATIONNAMEDAT);
- UNTIL FILEEXISTS = TRUE;
-
-
- {=======================================}
- { CREATE SOURCE & DESTINATION FILE }
- {=======================================}
- ASSIGN(SOURCE,SOURCENAMEDAT);
- RESET(SOURCE);
-
- ASSIGN(DESTINATION, DESTINATIONNAMEDAT);
- RESET ( DESTINATION );
-
- {=======================================}
- { BUILD HEADER FOR SOURCE }
- {=======================================}
- SEEK(SOURCE,0);
- BLOCKREAD( SOURCE,GETDATA,1 ); { BASIC/Z BLOCK 0 }
- BLOCKREAD( SOURCE,GETDATA,1 ); { FILE PARAMETERS }
- BLOCKREAD( SOURCE,LBL,3 ); { FILER LABELS }
-
-
- {=================================================}
- { READ IN HEADER DATA FOR FILER FILE }
- {=================================================}
- 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;
- BLOCKREAD(SOURCE,GETDATA,2); { REPORT FORMAT INFORMATION (NOT USED) }
-
-
- {============================================}
- { BUILD HEADER FOR DESTINATION }
- {============================================}
- SEEK(DESTINATION,0);
- BLOCKREAD( DESTINATION,GETDATA2,1 ); { BASIC/Z BLOCK 0 }
- BLOCKREAD( DESTINATION,GETDATA2,1 ); { FILE PARAMETERS }
- BLOCKREAD( DESTINATION,LBL2,3 ); { FILER LABELS }
-
-
- {=================================================}
- { READ IN HEADER DATA FOR FILER FILE }
- {=================================================}
- FILENAME := 'XXXXXX';
- FOR X := 1 TO 6 DO
- FILENAME2[X] := GETDATA2[X];
- MAXNBRREC2 := CHTOIN(GETDATA2,7,4);
- NBRRECUSED2 := CHTOIN(GETDATA2,11,4);
- RCDLEN2 := CHTOIN(GETDATA2,15,3);
- BLOCKINGFACTOR2 := CHTOIN(GETDATA2,18,2);
- FIELDPERRECORD2 := CHTOIN(GETDATA2,20,2);
- FILEDATE2 := ' / / ';
- MOVE(GETDATA2[22],FILEDATE2[1],8);
-
- {================================================================}
- { GET LABEL LENGTH, DATA LENGTH & DATA FORM INFO }
- {================================================================}
-
- LABELPOSN2[1] := 1;
- DATAPOSN2[1] := 1;
-
- FOR X := 1 TO FIELDPERRECORD2 DO
- BEGIN
- LABELLENGTH2[X] := BCDTOIN(GETDATA2[32+X]);
- DATALEN2[X] := BCDTOIN(GETDATA2[64+X]);
- DATAFORM2[X] := ORD(GETDATA2[96+X])-48;
- LABELPOSN2[X+1] := LABELPOSN2[X] + LABELLENGTH2[X];
- DATAPOSN2[X+1] := DATAPOSN2[X] + DATALEN2[X];
- END;
-
- {================================================================}
- { TRANSLATE REPORT STRUCTURE }
- {================================================================}
-
- BLOCKREAD(DESTINATION,GETDATA2,1); { SCREEN INFORMATION }
- { ESTABLISH VALUE OF DATAFORM[Z] FOR ASCII INFORMATION }
- IF GETDATA2[1] = 'S' THEN ASCII := 9 ELSE ASCII := 15;
- FOR X := 1 TO FIELDPERRECORD2 DO
- BEGIN
- W := X*4+1;
- ROW2[X] := BCDTOIN(GETDATA2[W]);
- COLUMN2[X] := BCDTOIN(GETDATA2[W+1])*10+TRUNC(BCDTOIN(GETDATA2[W+2])/10);
- {FIELDNBR2[X] := BCDTOIN(GETDATA2[W+3]);} { NOT IMPLEMENTED }
- END;
- BLOCKREAD(DESTINATION,GETDATA2,2); { REPORT FORMAT INFORMATION (NOT USED) }
-
- {================================================================}
- { INITIALIZE VARIABLES FOR ENTRY INTO FILER }
- {================================================================}
- DATARECORD := NBRRECUSED; { SOURCE FILE SET UP }
- 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}
- {================================================================}
- { INITIALIZE VARIABLES FOR ENTRY INTO DESTINATION }
- {================================================================}
- DATARECORD2 := NBRRECUSED2; { DESTINATION FILE SET UP }
- CALCULATE2;
- DISKRECNOWINMEM2 := DISKRECORD2 -1; { ENSURE DISK READ FIRST TIME}
- FILERECCHGD2 := FALSE; { ENSURE NO WRITE BEFORE FIRST READ }
- LASTRECUSED2 := 0; { SET LAST RECORD USED TO ZERO }
- NBRDISKRECUSED2 := DISKRECORD2; { ESTABLISH MAX DISK REC NBR }
- RECADDEDTOFILE2 := FALSE; { FLAG TO INDICATE CHANGE IN FILE SIZE}
-
- END; { INTIIALIZE PROCEDURE }
-
- {================================================================}
- { TRANSFER PROGRAM }
- {================================================================}
-
- BEGIN
- INITIALIZE; { ID AND READ IN FILE PARAMETERS }
- TEXTMODE(BW80);
-
- {======================================}
- { BUILD TRANSLATE ARRAY }
- {======================================}
- REPEAT
- DISPLAYREC2; { DISPLAY DESTINATION FILER FILE }
- FOR X := 1 TO 31 DO
- TRANSARRAY[X] := 0;
- X := 1;
- REPEAT
- GOTOXY(1,22);
- WRITE('NAME OF SOURCE FIELD TO BE TRANSLATED : ');
- CLREOL;
- TEXTCOLOR(YELLOW);
- TEXTBACKGROUND(BLUE);
- FOR W := LABELPOSN[X] TO LABELPOSN[X+1]-1 DO { WRITE LABEL }
- WRITE(LBL[W]);
- TEXTCOLOR(WHITE);
- TEXTBACKGROUND(BLACK);
- GOTOXY(1,23);
- WRITE('ENTER DESTINATION FIELD NUMBER (ABOVE) : ');
- CLREOL;
- ANS := '';
- READ(ANS);
- IF LENGTH(ANS) = 0 THEN
- BEGIN
- ANS := '0';
- END;
- IF (ANS = '-') AND (X>1) THEN X := PRED(X)
- ELSE
- BEGIN
- VAL(ANS,DESTFIELDNBR,CODE);
- IF CODE = 0 THEN
- BEGIN
- TRANSARRAY[X] := DESTFIELDNBR;
- X := SUCC(X);
- END
- ELSE TRANSARRAY[X] := 0;
- END;
- UNTIL X > FIELDPERRECORD;
-
- CLRSCR;
- FOR X := 1 TO FIELDPERRECORD DO
- BEGIN
- WRITE(X:3,' ===>',TRANSARRAY[X]:3,' | ');
- FOR W := LABELPOSN[X] TO LABELPOSN[X+1]-1 DO
- WRITE (LBL[W]);
- WRITE(' ===> ');
- IF TRANSARRAY[X] <> 0 THEN
- BEGIN
- FOR W := LABELPOSN2[TRANSARRAY[X]] TO LABELPOSN2[TRANSARRAY[X]+1]-1 DO
- WRITE(LBL2[W]);
- END;
- WRITELN;
- END;
- WRITELN;
- WRITE('IS TRANSFER TABLE OK (Y/N) : ');
- READLN(CH);
- CH := UPCASE(CH);
- IF CH <> 'N' THEN CH := 'Y';
- UNTIL CH = 'Y';
- WRITELN;
- WRITE('PRINT HARD COPY OF TRANSFER TABLE (Y/N) ? : ');
- READLN(CH);
- CH := UPCASE(CH);
- IF CH = 'Y' THEN
- BEGIN
- WRITELN('ENERGIZE AND SELECT PRINTER FOR HARD COPY');
- WRITELN('DEPRESS ANY KEY WHEN READY.');
- READ(KBD,CH);
- WRITELN;
- WRITELN('..... PRINTING......');
-
- WRITELN(LST,' TRANSLATION TABLE');
- WRITELN(LST);
- WRITELN(LST,'OLD NEW OLD LABEL ==> NEW LABEL');
- WRITELN(LST,'FLD # FLD #');
- WRITELN(LST);
- FOR X := 1 TO FIELDPERRECORD DO
- BEGIN
- WRITE(LST,X:3,' ===>',TRANSARRAY[X]:3,' | ');
- FOR W := LABELPOSN[X] TO LABELPOSN[X+1]-1 DO
- WRITE(LST,LBL[W]);
- WRITE(LST,' ===> ');
- IF TRANSARRAY[X] <> 0 THEN
- BEGIN
- FOR W := LABELPOSN2[TRANSARRAY[X]] TO LABELPOSN2[TRANSARRAY[X]+1]-1 DO
- WRITE(LST,LBL2[W]);
- END;
- WRITELN(LST);
- END;
- WRITELN(LST,^L);
- END;
-
- CLRSCR;
- GOTOXY(1,20);
- WRITELN('TRANSFER A LA PASCAL'); { TRANSFER DATA }
- WRITE('====================');
- FOR DATARECORD := 1 TO NBRRECUSED DO
- BEGIN
- GETDATAREC; { GET SOURCE DATA RECORD }
- DATARECORD2 := DATARECORD;
- GETDATAREC2; { GET DESTINATION DATA RECORD }
- FOR DESTNBR := 1 TO FIELDPERRECORD DO
- BEGIN
- W := TRANSARRAY[DESTNBR];
- IF W <> 0 THEN
- BEGIN
- GETDATAFROMARRAY(ANS,DESTNBR);
- ANS := ANS + ' ';
- STOREDATAINARRAY2(W);
- END;
- FILERECCHGD2 := TRUE;
- END;
- GOTOXY(1,23);
- WRITE(DATARECORD,' OF ',NBRRECUSED,' RECORDS TRANSFERED.');
- END;
-
- {================================================================}
- { END PROGRAM }
- {================================================================}
- IF FILERECCHGD2 = TRUE THEN { ENSURE LAST RECORD IS WRITTEN TO DISK }
- BEGIN
- SEEK(DESTINATION,DISKRECNOWINMEM2);
- BLOCKWRITE(DESTINATION,GETDATA2,2);
- END;
-
- SEEK(DESTINATION,1); { UPDATE NUMBER OF RECORDS }
- BLOCKREAD(DESTINATION,GETDATA2,1);
-
- WRITELN;
- WRITELN;
- WRITELN('HAVE A GREAT DAY!');
-
- STR(NBRRECUSED:4,ANS); { ENTER NUMBER OF RECORDS }
- MOVE(ANS[1],GETDATA2[11],4); { IN FILER FILE HEADER INFO }
- SEEK(DESTINATION,1);
- BLOCKWRITE(DESTINATION,GETDATA2,1);
-
- CLOSE(SOURCE);
- CLOSE(DESTINATION);
- END.