MAILING = RECORD
NAME:ARRAY[1..30] OF CHAR;
STREET_NUMBER:ARRAY[1..6] OF CHAR;
STREET: ARRAY[1..20] OF CHAR;
CITY: ARRAY[1..18] OF CHAR;
STATE:ARRAY[1..10] OF CHAR;
ZIP:ARRAY[1..10] OF CHAR;
ATTENTION:ARRAY[1..30] OF CHAR;
ACCT_NUMBER:ARRAY[1..4] OF CHAR;
END;
ALPHABET = RECORD
START:INTEGER;
FINISH:INTEGER;
END;
FA=FILE OF ALPHABET;
BEGIN
BLANKS:=' ';{40SPACES}
FOR I:= 1 TO NUMBER_OF_LINES DO
BEGIN
WRITE(CHR(27),'=',CHR(STARTING_LINE+31),CHR(32),BLANKS,BLANKS);
STARTING_LINE:=STARTING_LINE + 1;
END
END;
PROCEDURE MOVE_CURSOR (X,Y:INTEGER);
BEGIN
WRITE(CHR(27),'=',CHR(Y+31),CHR(X+31));
END;
VAR
UNDERLINE:STRING 80;
I:INTEGER;
BEGIN
UNDERLINE:='_';
FOR I:= 1 TO LENGTH DO APPEND(UNDERLINE,'_');
IF PROTECTED_FIELD_DESIRED = FALSE THEN
WRITE(CHR(27),'=',CHR(Y+31),CHR(X+31),P,UNDERLINE)
ELSE
WRITE(CHR(27),'=',CHR(Y+31),CHR(X+31),')',P,
UNDERLINE,CHR(27),'(');
END;
FUNCTION INPUT_DATA (X,Y,LEN:INTEGER; ALPHANUMERIC:BOOLEAN;
MAXIMUM_VALUE,MINIMUM_VALUE:REAL):$STRING80;
VAR
DATA,BLANKS:$STRING80;
I:INTEGER;
PROCEDURE CORRECT(X,Y:INTEGER);
VAR
I,A,B:INTEGER;
BEGIN
{********** DETERMINE THE CURRENT NUMBER OF RECORDS *******}
PROCEDURE CALC_ACCT_NO(CURRENT_NUMBER_OF_RECORDS:INTEGER);
VAR
ONES,TENS,HUNDREDS,THOUSANDS:CHAR;
O,T,H,TH:INTEGER;
BEGIN
O:=0;
T:=0;
H:=0;
TH:=0;
WITH INFORMATION DO
BEGIN
IF CURRENT_NUMBER_OF_RECORDS < 10 THEN
BEGIN
ONES:=CHR(CURRENT_NUMBER_OF_RECORDS + 48);
ACCT_NUMBER[1]:='0';
ACCT_NUMBER[2]:='0';
ACCT_NUMBER[3]:='0';
ACCT_NUMBER[4]:=ONES;
END; {IF}
IF CURRENT_NUMBER_OF_RECORDS = 10 THEN ACCT_NUMBER:='0010';
IF CURRENT_NUMBER_OF_RECORDS = 100 THEN ACCT_NUMBER:='0100';
IF CURRENT_NUMBER_OF_RECORDS = 1000 THEN ACCT_NUMBER:='1000';
IF (CURRENT_NUMBER_OF_RECORDS < 100) AND
(CURRENT_NUMBER_OF_RECORDS > 10) THEN
BEGIN
WHILE (CURRENT_NUMBER_OF_RECORDS < 100) AND
(CURRENT_NUMBER_OF_RECORDS > 10) DO {FOR VALUE 1-99}
BEGIN
CURRENT_NUMBER_OF_RECORDS:=CURRENT_NUMBER_OF_RECORDS-10;
T:=T+1;
IF CURRENT_NUMBER_OF_RECORDS < 10 THEN
BEGIN
ONES:= CHR(CURRENT_NUMBER_OF_RECORDS + 48);
TENS:=CHR(T+48);
ACCT_NUMBER[1]:='0';
ACCT_NUMBER[2]:='0';
ACCT_NUMBER[3]:=TENS;
ACCT_NUMBER[4]:=ONES;
END; {IF}
END; {WHILE}
END; {OF IF}
IF (CURRENT_NUMBER_OF_RECORDS < 10000) AND
(CURRENT_NUMBER_OF_RECORDS > 100) THEN
BEGIN
IF CURRENT_NUMBER_OF_RECORDS < 1000 THEN THOUSANDS:='0';
BEGIN
WHILE (CURRENT_NUMBER_OF_RECORDS < 10000) AND
(CURRENT_NUMBER_OF_RECORDS >= 1000) DO
BEGIN
CURRENT_NUMBER_OF_RECORDS:=CURRENT_NUMBER_OF_RECORDS - 1000;
TH:=TH+1;
IF CURRENT_NUMBER_OF_RECORDS < 1000 THEN THOUSANDS:=CHR(TH+48);
END;
IF CURRENT_NUMBER_OF_RECORDS < 100 THEN HUNDREDS:='0';
WHILE (CURRENT_NUMBER_OF_RECORDS < 1000) AND
(CURRENT_NUMBER_OF_RECORDS >= 100) DO
BEGIN
CURRENT_NUMBER_OF_RECORDS:=CURRENT_NUMBER_OF_RECORDS-100;
H:=H+1;
IF CURRENT_NUMBER_OF_RECORDS < 100 THEN HUNDREDS:=CHR(H+48);
END;
IF CURRENT_NUMBER_OF_RECORDS < 10 THEN TENS:='0';
WHILE (CURRENT_NUMBER_OF_RECORDS < 100) AND
(CURRENT_NUMBER_OF_RECORDS >= 10) DO
BEGIN
CURRENT_NUMBER_OF_RECORDS:=CURRENT_NUMBER_OF_RECORDS-10;
T:=T+1;
IF CURRENT_NUMBER_OF_RECORDS < 10 THEN TENS:=CHR(T+48);
END;
IF CURRENT_NUMBER_OF_RECORDS = 10 THEN ACCT_NUMBER:='0010';
IF CURRENT_NUMBER_OF_RECORDS = 100 THEN ACCT_NUMBER:='0100';
IF CURRENT_NUMBER_OF_RECORDS = 1000 THEN ACCT_NUMBER:='1000';
END; {OF IF}
END; {OF WITH INFORMATION DO}
END; {OF PROCEDURE}
{******************** PRINT THE FILE ********************}
PROCEDURE PRINT_FILE(FILENAM:$STRING14);
TYPE
C = FILE OF CHAR;
VAR
CONTINUE,ANSWER:CHAR;
AC,HARDCOPY: BOOLEAN;
FOUT: C;
COUNTER:INTEGER;
BEGIN
CLEAR_SCREEN;
REPEAT
WRITELN;
WRITE ('DO YOU WANT THE ACCOUNT NUMBER INCLUDED IN THE PRINT OUT? Y/N ');
READ(ANSWER);
UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
IF ANSWER = 'Y' THEN AC:=TRUE ELSE AC:=FALSE;
REPEAT
WRITELN;
WRITE ('DO YOU WANT A HARDCOPY OF THE FILE? Y/N ');
READ(ANSWER);
UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
IF ANSWER = 'Y' THEN
BEGIN
HARDCOPY:=TRUE;
REWRITE('LST:',FOUT);
WRITELN('PREPARE PRINTER TO RECEIVE LISTING.');
WRITELN('WHEN READY, TYPE A CARRIAGE RETURN.');
READ(ANSWER);
CLEAR_SCREEN;
WRITELN('FILE IS NOW BEING PRINTED.');
END;
FOR I:= 2 TO NUMBER_OF_RECORDS DO
BEGIN
READ(FIN:I,INFORMATION);
IF NAME <> 'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' THEN {DO'NT PRINT DELETED RECORDS}
BEGIN
IF HARDCOPY = FALSE THEN
BEGIN
WRITELN;
WRITELN (NAME);
WRITELN(STREET_NUMBER,' ',STREET);
WRITELN(CITY,' ',STATE,' ',ZIP);
WRITELN;
COUNTER:=COUNTER+5;
IF ATTENTION <> ' ' THEN
BEGIN
WRITELN('ATT: ',ATTENTION);
COUNTER:=COUNTER+1;
END; {OF THIS IF}
IF AC = TRUE THEN
BEGIN
WRITELN;
WRITELN('ACCOUNT NUMBER: ',ACCT_NUMBER);
COUNTER:=COUNTER+1;
END;
IF COUNTER >= 21 THEN
BEGIN
PROMPT(1,23,0,'ENTER ANY CHARACTER TO CONTINUE',FALSE);
READ(CONTINUE);
ERASE_LINES(23,1);
COUNTER:=0;
END;
END; {FOR HARDCOPY = FALSE}
IF HARDCOPY = TRUE THEN
BEGIN
WRITELN(FOUT,NAME);
WRITELN(FOUT,STREET_NUMBER,' ',STREET);
WRITELN(FOUT,CITY,' ',STATE,' ',ZIP);
WRITELN(FOUT,' ');
IF ATTENTION <> ' ' THEN
WRITELN(FOUT,'ATT: ',ATTENTION);
IF AC = TRUE THEN
BEGIN
WRITELN(FOUT,' ');
WRITELN(FOUT,'ACCOUNT NUMBER: ',ACCT_NUMBER);
WRITELN(FOUT,' ');
END;
IF AC = FALSE THEN WRITELN(FOUT,' ');
WRITELN(FOUT,' ');
END; {FOR HARDCOPY = TRUE}
END; {OF NAME <> ZZZZZZ..}
END; {FOR LOOP}
END; {THIS IS FOR WITH STATEMENTS}
IF HARDCOPY = FALSE THEN
BEGIN
ERASE_LINES(22,2);
MOVE_CURSOR(1,22);
WRITE('ENTER A CARRIAGE RETURN TO CONTINUE PROGRAM');
READ(ANSWER);
END;
END; {OF PROCEDURE}
{***************** CREATING THE FIRST RECORD OF FILE *******}
PROCEDURE CREATE_FIRST_RECORD (ACTNO: TR);
BEGIN
IF (NEWFILE = TRUE) AND (CONTINUE = TRUE) THEN REWRITE(FILENAM,FIN);
WITH INFORMATION DO
BEGIN
NAME:=' ';
STREET_NUMBER:=' ';
STREET:=' ';
CITY:=' ';
STATE:=' ';
ZIP:=' ';
ATTENTION:='FIRST RECORD OF FILE ';
IF (NEWFILE = TRUE) AND (CONTINUE = TRUE) THEN ACCT_NUMBER:='0001';
IF (NEWFILE = TRUE) AND (CONTINUE = FALSE) THEN ACCT_NUMBER:=ACTNO;
IF NEWFILE = FALSE THEN ACCT_NUMBER:= ACTNO;
WRITE(FIN:1,INFORMATION);
END; {WITH LOOP}
END; {OF PROCEDURE}
{************** ENTER THE NAME OF THE FILE *****************}
PROCEDURE ENTER_FILE_NAME;
VAR
ERROR:BOOLEAN;
BEGIN
REPEAT
NEWFILE:=FALSE;
ERROR:=FALSE;
CLEAR_SCREEN;
WRITELN(' ENTER THE FILE NAME AS: DRIVE: NAME. EXTENSION');
WRITELN;
WRITELN(' WHERE DRIVE IS A SINGLE LETTER--EITHER A OR B');
WRITELN(' NAME IS UP TO 8 LETTERS OR SPACES');
WRITELN(' EXTENSION MUST HAVE 3 LETTERS OR SPACES');
WRITELN;
READLN(FILENAM);
RESET(FILENAM,FIN);
IF EOF(FIN) THEN
BEGIN
REPEAT
MOVE_CURSOR(1,10);
WRITE('FILE NOT FOUND. IS THIS A NEW FILE? Y/N');
READ (ANSWER);
UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
IF ANSWER = 'N' THEN ERROR:=TRUE;
IF ANSWER = 'Y' THEN NEWFILE:=TRUE ELSE NEWFILE:=FALSE;
IF NEWFILE = TRUE THEN CREATE_FIRST_RECORD('0001');
END; {OF IF EOF}
UNTIL ERROR = FALSE;
IF NEWFILE = TRUE THEN COUNTER:= 2;
IF NEWFILE = FALSE THEN
BEGIN
NUMBER_RECORDS(FILENAM);
COUNTER:=NUMBER_OF_RECORDS + 1;
END;
END; {OF PROCEDURE}
{*********** PROCEDURE TO CORRECT INCORRECT ENTRY ************}
PROCEDURE MISTAKE;
VAR
WRONG:CHAR;
BEGIN
WITH INFORMATION DO
BEGIN
ERASE_LINES(12,9);
PROMPT(1,12,0,'ENTER NUMBER OF INCORRECT INFORMATION',FALSE);
PROMPT(1,14,0,'1-NAME ',FALSE);
PROMPT(1,15,0,'2-# ',FALSE);
PROMPT(1,16,0,'3-STREET ',FALSE);
PROMPT(1,17,0,'4-CITY ',FALSE);
PROMPT(1,18,0,'5-STATE ',FALSE);
PROMPT(1,19,0,'6-ZIP ',FALSE);
PROMPT(1,20,0,'7-ATTENTION ',FALSE);
PROMPT(1,21,0,'8-ALL INFORMATION IS CORRECT AS DISPLAYED ',FALSE);
REPEAT
MOVE_CURSOR(50,16);
READ(WRONG);
CASE WRONG OF
'1':BEGIN
PROMPT(1,3,30,'NAME',FALSE);
NA:=INPUT_DATA(6,3,30,TRUE,0,0);
FOR I:= 1 TO 30 DO NAME[I]:=NA[I];
END;
'2': BEGIN
PROMPT(1,5,6,'#: ',FALSE);
ST_NO:=INPUT_DATA(4,5,6,TRUE,0,0);
FOR I:= 1 TO 6 DO STREET_NUMBER[I]:=ST_NO[I];
END;
'3': BEGIN
PROMPT(10,5,20,'STREET:',FALSE);
ST:=INPUT_DATA(19,5,20,TRUE,0,0);
FOR I:= 1 TO 20 DO STREET[I]:=ST[I];
END;
'4': BEGIN
PROMPT(1,7,10,'CITY: ',FALSE);
CIT:=INPUT_DATA(7,7,18,TRUE,0,0);
IF (CIT[1] <> '7') AND (CIT[1] <> '8') THEN
FOR I:= 1 TO 18 DO CITY[I]:=CIT[I];
IF CIT[1] = '7' THEN {DEFAULT TO FIRST VALUE, E.G. RICHMOND,VA.}
BEGIN
CITY:=CITY_ONE;
STATE:=STATE_ONE;
PROMPT(7,7,0,CITY_ONE,FALSE);
PROMPT(35,7,0,STATE_ONE,FALSE);
END;
IF CIT[1] = '8' THEN {DEFAULT TO SECOND VALUE}
BEGIN
CITY:=CITY_TWO;
STATE:=STATE_TWO;
PROMPT(7,7,0,CITY_TWO,FALSE);
PROMPT(35,7,0,STATE_TWO,FALSE);
END;
END;
'5': BEGIN
PROMPT(28,7,10,'STATE: ',FALSE);
STA:=INPUT_DATA(35,7,10,TRUE,0,0);
FOR I:= 1 TO 10 DO STATE[I]:=STA[I];
END;
'6': BEGIN
PROMPT(48,7,10,'ZIP: ',FALSE);
ZI:= INPUT_DATA(54,7,10,TRUE,0,0);
FOR I:= 1 TO 10 DO ZIP[I]:=ZI[I];
END;
'7': BEGIN
PROMPT(1,9,30,'ATTENTION: ',FALSE);
ATT:=INPUT_DATA(12,9,30,TRUE,0,0);
FOR I:= 1 TO 30 DO ATTENTION[I]:=ATT[I];
END;
END; {OF CASE}
UNTIL WRONG = '8';
END; {OF WITH INFORMATION}
ERASE_LINES(10,12);
END; {OF PROCEDURE}
{***************** OFFER A LISTING OF THE FILE **************}
PROCEDURE OFFER_LISTING(FILENAM:$STRING14);
BEGIN
REPEAT
ERASE_LINES(20,1);
PROMPT(1,20,1,'DO YOU WANT A LISTING OF THE FILE? Y/N ',FALSE);
MOVE_CURSOR(50,20);
READ(ANSWER);
UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
IF ANSWER = 'Y' THEN PRINT_FILE(FILENAM);
END; {OF PROCEDURE}
{******* PROC TO GET INFORMATION & PUT INFORMATION INTO FILE ******}
MOVE_CURSOR(1,22);
WRITE('ENTERING EXIT FOR THE NAME TERMINATES THIS PROCEDURE');
MOVE_CURSOR(1,23);
WRITE('DEFAULT VALUES FOR CITY AND STATE ARE:');
MOVE_CURSOR(40,23);
WRITE('7 = RICHMOND,VA. 8 = BOSTON,MASS.');
NA:=INPUT_DATA(6,3,30,TRUE,0,0);
FOR I:= 1 TO 30 DO NAME[I]:=NA[I];
IF (CIT[1] <> '7') AND (CIT[1] <> '8') THEN
STA:=INPUT_DATA(35,7,10,TRUE,0,0);
IF CIT[1] = '7' THEN {DEFAULT TO VALUE ONE, E.G. RICHMOND,VA.}
BEGIN
CITY:=CITY_ONE;
STATE:=STATE_ONE;
PROMPT(7,7,0,CITY_ONE,FALSE);
PROMPT(35,7,0,STATE_ONE,FALSE);
END;
IF CIT[1] = '8' THEN {DEFAULT TO VALUE TWO}
BEGIN
CITY:=CITY_TWO;
STATE:=STATE_TWO;
PROMPT(7,7,0,CITY_TWO,FALSE);
PROMPT(35,7,0,STATE_TWO,FALSE);
END;
FOR I:= 1 TO 30 DO NAME[I]:=NA[I];
FOR I:= 1 TO 6 DO STREET_NUMBER[I]:=ST_NO[I];
FOR I:= 1 TO 20 DO STREET[I]:=ST[I];
IF (CIT[1] <> '7') AND (CIT[1] <> '8') THEN
BEGIN
FOR I:= 1 TO 18 DO CITY[I]:=CIT[I];
FOR I:= 1 TO 10 DO STATE[I]:=STA[I];
END;
FOR I:= 1 TO 10 DO ZIP[I]:=ZI[I];
FOR I:= 1 TO 30 DO ATTENTION[I]:=ATT[I];
CALC_ACCT_NO(COUNTER);
REPEAT
PROMPT(1,20,1,'IS INFORMATION CORRECT AS ENTERED? Y/N',FALSE);
MOVE_CURSOR(50,20);
READ(ANSWER);
UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
IF ANSWER = 'N' THEN MISTAKE;
END;{OF IF NOT EQUAL TO 'EXIT'}
IF NAME <> 'EXIT ' THEN
BEGIN
WRITE(FIN:COUNTER,INFORMATION);
COUNTER:=COUNTER+1;
END; {OF IF NAME NOT EQUAL TO 'EXIT'}
END; {OF WITH}
END; {OF PROCEDURE}
{************************* MENU ******************************}
MOVE_CURSOR(12,2);
WRITELN(' SELECT ONE PROCEDURE, AND ENTER CORRESPONDING NUMBER');
WRITELN;
WRITELN('1- CREATE A NEW, OR ADD TO AN EXISTING, NAME & ADDRESS FILE');
WRITELN('2- CHANGE OR CORRECT A RECORD IN AN EXISTING NAME & ADDRESS FILE');
WRITELN('3- DELETE A RECORD FROM AN EXISTING NAME & ADDRESS FILE');
WRITELN('4- DETERMINE IF A PARTICULAR NAME ALREADY EXISTS IN THE FILE');
WRITELN('5- LIST THE NAME & ADDRESS FILE ON EITHER THE CRT OR PRINTER');
WRITELN;
WRITELN;
REPEAT
WRITE('YOUR SELECTION, PLEASE: ');
READ(ANSWER);
UNTIL (ANSWER < 6) AND (ANSWER > 0);
{******************** FIND A NAME IN THE FILE *******************}
PROCEDURE FIND(FILENAM:$STRING14; FLAG:INTEGER);
VAR
FINISHED:BOOLEAN;
I,LINE_COUNTER:INTEGER;
LOCALIZERS:ALPHABET;
LINE_FLAG:BOOLEAN;
FIRST_LETTER:INTEGER;
BEGIN
REPEAT
FINISHED:=TRUE;
REC_NUMBER:=1;
FOUND:=FALSE;
END_OF_FILE:=COUNTER -1; {COUNTER WAS SET = NUMBER_OF_RECORDS + 1
IN THE ENTER_FILE_NAME PROCEDURE}
CLEAR_SCREEN;
MOVE_CURSOR(2,2);
IF FLAG = 1 THEN
WRITELN(' PROCEDURE TO DETERMINE IF A NAME IS PRESENT IN FILE ',
FILENAM)
ELSE IF FLAG = 2 THEN
WRITELN(' PROCEDURE TO FIND AND CHANGE A RECORD')
ELSE IF FLAG = 3 THEN
WRITELN(' PROCEDURE TO FIND AND DELETE A RECORD');
PROMPT(1,4,30,'ENTER THE NAME YOU WISH TO LOCATE',FALSE);
DES_NAM:=INPUT_DATA(35,4,30,TRUE,0,0);
FOR I:= 1 TO 30 DO DESIRED_NAME[I]:=DES_NAM[I];
CLEAR_SCREEN;
PROMPT(2,12,0,'PROGRAM NOW SEARCHING FILE. ONE MOMENT PLEASE.',FALSE);
RESET(FILENAM,FIN);
I:=1;
WHILE FILENAM[I] <> '.' DO
BEGIN
ALPFILE[I]:=FILENAM[I];
I:=I+1;
END;
ALPFILE[I]:='.';
ALPFILE[I+1]:='A';
ALPFILE[I+2]:='L';
ALPFILE[I+3]:='P';
IF (I+4) < 14 THEN
BEGIN
I:=I+4;
FOR N:= I TO 14 DO
ALPFILE[N]:=' ';
END;
RESET(ALPFILE,FALP);
WITH LOCALIZERS DO
BEGIN
FIRST_LETTER:=ORD(DESIRED_NAME[1]) - 64;
READ(FALP:FIRST_LETTER,LOCALIZERS);
WITH INFORMATION DO
BEGIN
I:=START;
REPEAT
READ(FIN:I,INFORMATION);
IF DESIRED_NAME = NAME THEN
BEGIN
FOUND:=TRUE;
REC_NUMBER:=I;
ERASE_LINES(12,1);
PROMPT(1,1,0,'INFORMATION AS FOUND IN FILE: ',FALSE);
PROMPT(1,3,0,'NAME: ',FALSE);
PROMPT(1,5,0,'#: ',FALSE);
PROMPT(10,5,0,'STREET: ',FALSE);
PROMPT(1,7,0,'CITY: ',FALSE);
PROMPT(28,7,0,'STATE: ',FALSE);
PROMPT(48,7,0,'ZIP: ',FALSE);
PROMPT(1,9,0,'ATTENTION: ',FALSE);
MOVE_CURSOR(6,3);
WRITE(NAME);
MOVE_CURSOR(4,5);
WRITE(STREET_NUMBER);
MOVE_CURSOR(19,5);
WRITE(STREET);
MOVE_CURSOR(7,7);
WRITE(CITY);
MOVE_CURSOR(35,7);
WRITE(STATE);
MOVE_CURSOR(54,7);
WRITE(ZIP);
MOVE_CURSOR(12,9);
WRITE(ATTENTION);
END;
I:=I+1;
UNTIL (I > FINISH) OR (FOUND = TRUE);
IF FOUND = FALSE THEN
BEGIN
ERASE_LINES(12,1);
PROMPT(2,12,0,'NAME AS ENTERED NOT FOUND IN FILE.',FALSE);
REPEAT
MOVE_CURSOR(2,14);
WRITE('WOULD YOU LIKE A LIST OF NAMES BEGINNING WITH ',
DESIRED_NAME[1],' ? Y/N');
READ(ANSWER);
UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
IF ANSWER = 'Y' THEN
BEGIN
CLEAR_SCREEN;
LINE_COUNTER:=1;
FOR I:=START TO FINISH DO
BEGIN
READ(FIN:I,INFORMATION);
IF LINE_COUNTER < 15 THEN
BEGIN
MOVE_CURSOR(2,LINE_COUNTER);
WRITE(NAME);
END;
IF (LINE_COUNTER >=15) AND (LINE_COUNTER < 30) THEN
BEGIN
MOVE_CURSOR(45,LINE_COUNTER-14);
WRITE(NAME);
END;
IF LINE_COUNTER >= 30 THEN
BEGIN
PROMPT(2,23,0,'ENTER A CARRIAGE RETURN TO CONTINUE ',FALSE);
READ(ANSWER);
CLEAR_SCREEN;
LINE_COUNTER:=0;
END;
LINE_COUNTER:=LINE_COUNTER + 1;
END; {FOR I = START TO FINISH OF LISTING}
END; {OF IF ANSWER = Y}
ERASE_LINES(22,2);
PROMPT(2,23,0,'ENTER A CARRIAGE RETURN TO CONTINUE',FALSE);
READ(ANSWER);
CLEAR_SCREEN;
END; {OF FOUND = FALSE}
END; {OF WITH INFORMATION}
END; {OF LOCALIZERS}
IF FLAG = 1 THEN
BEGIN
ERASE_LINES(22,1);
REPEAT
MOVE_CURSOR(1,22);
WRITE('DO YOU WISH TO FIND ANOTHER RECORD IN FILE ',FILENAM,' Y/N?');
READ(ANSWER);
UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
IF ANSWER = 'Y' THEN FINISHED:=FALSE ELSE FINISHED:=TRUE;
END; {OF IF FLAG = 1}
UNTIL FINISHED = TRUE;
END; {OF PROCEDURE}
{******************** DELETE A RECORD **************************}
PROCEDURE DELETE(FILENAM:$STRING14);
VAR
FINISH:BOOLEAN;
BEGIN
REPEAT
WITH INFORMATION DO
BEGIN
FIND(FILENAM,3);
IF FOUND = TRUE THEN
BEGIN
RESET(FILENAM,FIN);
REPEAT
MOVE_CURSOR(1,22);
WRITE('IS IT OK TO DELETE THIS RECORD? Y/N');
READ(ANSWER);
UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
IF ANSWER = 'Y' THEN
BEGIN
ERASE_LINES(22,1);
MOVE_CURSOR(1,22);
WRITE('RECORD HAS BEEN DELETED.');
NAME:='ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ';
STREET_NUMBER:=' ';
STREET:=' ';
CITY:=' ';
STATE:=' ';
ZIP:=' ';
ATTENTION:=' ';
ACCT_NUMBER:=' ';
WRITE(FIN:REC_NUMBER,INFORMATION);
END; {OF ANSWER = Y}
END; {OF FOUND = TRUE}
IF FOUND = FALSE THEN
WRITELN('NO DELETION OCCURRED.');
END; {OF WITH INFORMATION}
ERASE_LINES(22,1);
REPEAT
MOVE_CURSOR(1,22);
WRITE('DO YOU WISH TO DELETE ANOTHER RECORD FROM FILE ',FILENAM,' Y/N');
READ(ANSWER)
UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
IF ANSWER = 'Y' THEN FINISH:= FALSE ELSE FINISH:=TRUE;
UNTIL FINISH = TRUE;
END; {OF PROCEDURE}
{****************** PROCEDURE TO CHANGE A RECORD IN FILE ***********}
PROCEDURE CHANGE(FILENAM:$STRING14);
VAR
FINISH:BOOLEAN;
BEGIN
REPEAT
WITH INFORMATION DO
BEGIN
FIND(FILENAM,2);
IF FOUND = TRUE THEN
BEGIN
RESET(FILENAM,FIN);
MISTAKE;
WRITE(FIN:REC_NUMBER,INFORMATION);
MOVE_CURSOR(1,23);
WRITELN('RECORD HAS BEEN MODIFIED AS DESIRED');
END; {OF WITH INFORMATION}
END; {OF IF FOUND = TRUE}
REPEAT
ERASE_LINES(22,1);
MOVE_CURSOR(1,22);
WRITE('DO YOU WISH TO CHANGE ANOTHER RECORD IN FILE ',FILENAM,' Y/N?');
READ(ANSWER);
UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
IF ANSWER = 'Y' THEN FINISH:=FALSE ELSE FINISH:=TRUE;
UNTIL FINISH = TRUE;
END; {OF PROCEDURE}
{*************** OFFER A CHANCE TO GO BACK TO MENU *************}
PROCEDURE AGAIN;
BEGIN
CLEAR_SCREEN;
REPEAT
PROMPT(2,10,0,'WOULD YOU LIKE TO CHOOSE FROM THE MENU, AGAIN? Y/N ',FALSE);
PROMPT(2,12,0,'ENTERING AN N WILL TERMINATE THE PROGRAM.',FALSE);
MOVE_CURSOR(54,10);
READ(ANSWER);
UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
IF ANSWER = 'Y' THEN FINISH:= FALSE ELSE FINISH:=TRUE;
END; {OF PROCEDURE}
{**************** MAIN PROGRAM BEGINS HERE ******************}
BEGIN
FINISH:=FALSE;
REPEAT
MENU;
CONTINUE:=TRUE;
ENTER_FILE_NAME;
IF CHANGE_RECORD = TRUE THEN CHANGE(FILENAM);
IF DELETE_RECORD = TRUE THEN DELETE(FILENAM);
IF FIND_RECORD = TRUE THEN FIND(FILENAM,1);
IF ADD_TO_FILE = TRUE THEN ADD(FILENAM);
IF LISTING = TRUE THEN OFFER_LISTING(FILENAM);
IF (ADD_TO_FILE = TRUE) OR (DELETE_RECORD = TRUE) THEN
BEGIN
CLEAR_SCREEN;
PROMPT(2,10,0,'WHEN THE CP/M PROMPT A> APPEARS, TYPE:',FALSE);
PROMPT(16,12,0,'ALPHABET',FALSE);
PROMPT(2,14,0,'THIS WILL RUN THE PROGRAM TO ALPHABETIZE THE FILE',FALSE);
PROMPT(2,15,0,'AND ESTABLISH THE FILE OF POINTERS. THANK YOU.',FALSE);
FINISH:= TRUE;
END;
IF (ADD_TO_FILE = FALSE) AND (DELETE_RECORD = FALSE) THEN AGAIN;
UNTIL FINISH = TRUE;