PROGRAM ACCOUNTS_RECEIVABLE; {$P} TYPE MAILING = RECORD NAME:ARRAY[1..30] OF CHAR; STREET_NUMBER: ARRAY[1..6] OF CHAR; STREET: ARRAY[1..20] OF CHAR; CITY: ARRAY[1..10] 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; BLANKS: ARRAY[1..8] OF CHAR; END; ENTRY = RECORD MONTH:ARRAY[1..2] OF CHAR; DAY: ARRAY[1..2] OF CHAR; YEAR: ARRAY[1..2] OF CHAR; INVOICE_NUMBER: ARRAY[1..6] OF CHAR; PURCHASE_ORDER_NUMBER: ARRAY[1..10] OF CHAR; AMOUNT:REAL; END; FI = FILE OF ENTRY; FO = FILE OF CHAR; M = FILE OF MAILING; TR = ARRAY [1..10] OF CHAR; $STRING80 = STRING 80; $STRING0 = STRING 0; $STRING255 = STRING 255; $STRING14 = STRING 14; $STRING30 = STRING 30; $STR2 = STRING 2; $STR4 = STRING 4; VAR FIN: FI; INC,NUMBER_OF_RECORDS,COUNTER,I,N: INTEGER; NAME_AND_ADDRESS: MAILING; NAD:M; INFORMATION: ENTRY; FOUT:FO; COR,ANSWER,CONTINUE:CHAR; ACCOUNT_NAME:$STRING30; FILENAM,FILNAME:$STRING14; ACCTNAME: ARRAY[1..30] OF CHAR; FNAME:ARRAY[1..4] OF CHAR; STATEMENT,CONT,POST_TO_ANOTHER_ACCOUNT,NEWACCOUNT,RECURSIVE,NEWFILE:BOOLEAN; MO,DA,YR,INO,PNO,NA,ST_NO,ST,CIT,STA,ZI,ATT: $STRING80; DRIVE:$STR2; ACN,EXTENSION:$STR4; BALANCE:REAL; PROCEDURE SETLENGTH(VAR X:$STRING0;Y:INTEGER);EXTERNAL; FUNCTION LENGTH(X:$STRING255):INTEGER;EXTERNAL; PROCEDURE CLEAR_SCREEN; BEGIN WRITE(CHR(27),'*',CHR(0),CHR(0),CHR(0),CHR(0)); END; PROCEDURE ERASE_LINES(STARTING_LINE,NUMBER_OF_LINES:INTEGER); VAR I:INTEGER; BLANKS:STRING 80; 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; PROCEDURE PROMPT (X,Y,LENGTH: INTEGER; P:$STRING80; PROTECTED_FIELD_DESIRED:BOOLEAN); 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),CHR(27),')',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 ERASE_LINES (20,2); WRITE (CHR(7)); MOVE_CURSOR (1,20); IF (ALPHANUMERIC = TRUE) AND (LENGTH(DATA) > LEN) THEN WRITE('TERM TOO LONG '); MOVE_CURSOR(X,Y); WRITE (' '); A:=X; B:=Y; FOR I:=1 TO LENGTH(DATA) DO BEGIN MOVE_CURSOR(A,B); WRITE(' '); A:=A+1; END; MOVE_CURSOR(X,Y); WRITE('_'); A:=X; B:=Y; FOR I:= 1 TO (LEN-1) DO BEGIN MOVE_CURSOR(A,B); WRITE('_'); A:=A+1; END; MOVE_CURSOR(X,Y); READ(DATA); ERASE_LINES(20,1); END; BEGIN BLANKS:=' ';{40SPACES} MOVE_CURSOR(X,Y); READ(DATA); WHILE (ALPHANUMERIC = TRUE) AND (LENGTH(DATA) > LEN) DO CORRECT(X,Y); IF LENGTH(DATA) = 0 THEN BEGIN DATA:=' '; FOR I:= 1 TO (LEN-1) DO APPEND (DATA,' '); END; IF LENGTH(DATA) < LEN THEN FOR I:= LENGTH(DATA) TO LEN DO APPEND(DATA,' '); INPUT_DATA:=DATA; END; {************ PROCEDURE TO DETERMINE NUMBER OF RECORDS****} PROCEDURE NUMBER_RECORDS (FILENAM:$STRING14); BEGIN RESET(FILENAM,FIN); WITH INFORMATION DO BEGIN READ(FIN:1,INFORMATION); NUMBER_OF_RECORDS:=(((ORD(PURCHASE_ORDER_NUMBER[1])-48)*1000)+ ((ORD(PURCHASE_ORDER_NUMBER[2])-48)*100)+ ((ORD(PURCHASE_ORDER_NUMBER[3])-48)*10)+ ((ORD(PURCHASE_ORDER_NUMBER[4])-48)*1)); END; {OF WITH} END; {OF PROCEDURE} PROCEDURE PRINT_FILE (FILENAM:$STRING14); {*******************} TYPE C = FILE OF CHAR; VAR SCROLLING:CHAR; ANSWER:CHAR; HARDCOPY:BOOLEAN; FOUT:C; MASK:$STRING80; PAGE,COUNTER:INTEGER; BEGIN {BEGIN PROCEDURE} CLEAR_SCREEN; REPEAT 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); END; IF ANSWER = 'N' THEN HARDCOPY:=FALSE; RESET (FILENAM,FIN); CLEAR_SCREEN; NUMBER_RECORDS(FILENAM); WITH NAME_AND_ADDRESS DO BEGIN IF HARDCOPY = FALSE THEN BEGIN WRITELN(NAME); WRITELN(STREET_NUMBER,' ',STREET); WRITELN(CITY,', ',STATE,' ',ZIP); WRITELN; WRITELN(ATTENTION); END; IF HARDCOPY = TRUE THEN BEGIN WRITELN(FOUT,CHR(12)); WRITELN(FOUT,' '); WRITELN(FOUT,NAME); WRITELN(FOUT,STREET_NUMBER,' ',STREET); WRITELN(FOUT,CITY,', ',STATE,' ',ZIP); WRITELN(FOUT,' '); WRITELN(FOUT,ATTENTION); END; END; {OF WITH NAME AND ADDRESS} WITH INFORMATION DO BEGIN MASK:='DATE INVOICE NO. PURCHASE OR # AMOUNT'; IF HARDCOPY = FALSE THEN WRITELN(MASK); IF HARDCOPY = TRUE THEN WRITELN(FOUT,MASK); COUNTER:=7; PAGE := 1; BALANCE:=0.0; FOR I:= 2 TO NUMBER_OF_RECORDS DO BEGIN READ(FIN:I,INFORMATION); BALANCE:=BALANCE+AMOUNT; IF HARDCOPY = FALSE THEN BEGIN IF COUNTER > 20 THEN BEGIN PROMPT(1,22,0,'ENTER ANY CHARACTER TO CONTINUE',FALSE); READ(SCROLLING); ERASE_LINES(7,15); MOVE_CURSOR(50,2); PAGE:=PAGE + 1; WRITE('PAGE ',PAGE); ERASE_LINES(22,1); MOVE_CURSOR(1,7); COUNTER:=7; END; WRITELN; WRITE(MONTH,'/',DAY,'/',YEAR,' ',INVOICE_NUMBER,' '); IF AMOUNT > 0.00 THEN WRITELN(PURCHASE_ORDER_NUMBER,' ','$',AMOUNT:9:2); IF AMOUNT < 0.00 THEN WRITELN(PURCHASE_ORDER_NUMBER,' ','$',AMOUNT:9:2,' CREDIT'); COUNTER:=COUNTER + 2; END; {FOR HARDCOPY = FALSE} IF HARDCOPY = TRUE THEN BEGIN WRITELN(FOUT,' '); WRITE(FOUT,MONTH,'/',DAY,'/',YEAR,' ',INVOICE_NUMBER,' '); IF AMOUNT > 0.0 THEN WRITELN(FOUT,PURCHASE_ORDER_NUMBER,' ','$',AMOUNT:9:2); IF AMOUNT < 0.0 THEN WRITELN(FOUT,PURCHASE_ORDER_NUMBER,' ','$',AMOUNT:9:2,' CREDIT'); IF COUNTER > 40 THEN BEGIN WRITELN(FOUT,CHR(12)); WRITELN(FOUT,' '); WRITELN(FOUT,' '); WRITELN(FOUT,' PAGE: ',PAGE); COUNTER:=1; PAGE:=PAGE + 1; END; END; {FOR HARDCOPY = TRUE} END; {FOR LOOP} END; {THIS IS FOR WITH STATEMENTS} ERASE_LINES(22,1); IF HARDCOPY = FALSE THEN BEGIN MOVE_CURSOR(1,22); WRITELN('BALANCE DUE: ','$',BALANCE:9:2); END; IF HARDCOPY = TRUE THEN BEGIN WRITELN(FOUT,' '); WRITELN(FOUT,' '); WRITELN(FOUT,'BALANCE DUE: ','$',BALANCE:9:2); END; END; {PROCEDURE} {**********************************************************} PROCEDURE ENTER_FILE_NAME; BEGIN DRIVE:='B:'; EXTENSION:='.INV'; CLEAR_SCREEN; WRITELN(' ACCOUNTS RECEIVABLE'); WRITELN; WRITELN; WRITELN; IF RECURSIVE = TRUE THEN WRITELN('ACCOUNT WAS NOT FOUND IN FILE, PLEASE RE-ENTER'); IF (POST_TO_ANOTHER_ACCOUNT = FALSE) OR (STATEMENT = TRUE) THEN BEGIN WRITE('ENTER NAME & ADDRESS FILE AS DRIVE:NAME.EXT '); SETLENGTH(FILNAME,0); READLN(FILNAME); END; {OF IF POST..} WRITELN; WRITELN; PROMPT(1,8,30,'ENTER NAME OF ACCOUNT ',FALSE); ACCOUNT_NAME:=INPUT_DATA(23,8,30,TRUE,0,0); FOR I:= 1 TO 30 DO ACCTNAME[I]:=ACCOUNT_NAME[I]; WRITELN; WRITELN; REPEAT MOVE_CURSOR (1,10); WRITE('IS THIS A NEW ACCOUNT? Y/N '); READ(ANSWER); UNTIL (ANSWER = 'Y') OR (ANSWER = 'N'); IF ANSWER = 'Y' THEN NEWACCOUNT:= TRUE ELSE NEWACCOUNT:= FALSE; IF NEWACCOUNT = TRUE THEN BEGIN CLEAR_SCREEN; PROMPT(10,12,0,'EXIT THIS PROGRAM AND ENTER ACCOUNT TO NAD FILE',FALSE); END; {OF IF NEWACCOUNT = TRUE} WRITELN; WRITELN; IF STATEMENT = FALSE THEN BEGIN REPEAT MOVE_CURSOR(1,12); WRITE('IS THIS THE FIRST INVOICE EVER POSTED TO THIS ACCOUNT? Y/N '); READ(ANSWER); UNTIL (ANSWER = 'Y') OR (ANSWER = 'N'); IF ANSWER = 'Y' THEN NEWFILE:= TRUE ELSE NEWFILE := FALSE; END; {IF STATEMENT = FALSE} IF NEWACCOUNT = FALSE THEN BEGIN RESET(FILNAME,NAD); WITH NAME_AND_ADDRESS DO BEGIN COUNTER:=2; REPEAT READ(NAD:COUNTER,NAME_AND_ADDRESS); COUNTER:=COUNTER +1; UNTIL (EOF(NAD)) OR (ACCTNAME = NAME); SETLENGTH(ACN,0); FOR I:= 1 TO 4 DO APPEND(ACN,ACCT_NUMBER[I]); IF EOF(NAD) = FALSE THEN BEGIN SETLENGTH(FILENAM,0); APPEND(FILENAM,DRIVE); APPEND(FILENAM,ACN); APPEND(FILENAM,EXTENSION); END; {OF IF} END; {OF WITH NAME..} IF EOF(NAD)=TRUE THEN BEGIN RECURSIVE := TRUE; ENTER_FILE_NAME; END; END; {OF BEGIN FOR IF NEWFILE = FALSE} END; {PROCEDURE} {************** CALCULATE NUMBER OF RECORDS FOR FIRST RECORD***} PROCEDURE CALC_FIRST_RECORD(CURRENT_NUMBER_OF_RECORDS:INTEGER); VAR ONES,TENS,HUNDREDS:CHAR; O,T,H: INTEGER; BEGIN O:=0; T:=0; H:=0; WITH INFORMATION DO BEGIN IF CURRENT_NUMBER_OF_RECORDS < 10 THEN BEGIN ONES:=CHR(CURRENT_NUMBER_OF_RECORDS + 48); PURCHASE_ORDER_NUMBER[1]:='0'; PURCHASE_ORDER_NUMBER[2]:='0'; PURCHASE_ORDER_NUMBER[3]:='0'; PURCHASE_ORDER_NUMBER[4]:=ONES; FOR I:= 5 TO 10 DO PURCHASE_ORDER_NUMBER[I]:=' '; END; {IF} IF CURRENT_NUMBER_OF_RECORDS = 10 THEN PURCHASE_ORDER_NUMBER:='0010 '; IF CURRENT_NUMBER_OF_RECORDS = 100 THEN PURCHASE_ORDER_NUMBER:= '0100 '; 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 {VALUES 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); PURCHASE_ORDER_NUMBER[1]:='0'; PURCHASE_ORDER_NUMBER[2]:='0'; PURCHASE_ORDER_NUMBER[3]:=TENS; PURCHASE_ORDER_NUMBER[4]:=ONES; FOR I:= 5 TO 10 DO PURCHASE_ORDER_NUMBER[I]:=' '; END; {IF} END; {WHILE} END; {IF} END; {OF WITH} END; {OF PROCEDURE} {*********** WRITE THE FIRST RECORD ********************} PROCEDURE CREATE_FIRST_RECORD (ACTNO: TR); BEGIN IF NEWFILE = TRUE THEN REWRITE(FILENAM,FIN); WITH INFORMATION DO BEGIN MONTH:=' '; DAY:=' '; YEAR:=' '; INVOICE_NUMBER:='FIRST '; AMOUNT:=0.0; PURCHASE_ORDER_NUMBER:=ACTNO; WRITE(FIN:1,INFORMATION); END; {WITH LOOP} END; {OF PROCEDURE} {********************** PROCEDURE TO CORRECT INCORRECT ENTRY ***} PROCEDURE MISTAKE; VAR WRONG:CHAR; BEGIN WITH INFORMATION DO BEGIN ERASE_LINES(10,12); PROMPT(1,12,0,'ENTER NUMBER OF INCORRECT INFORMATION',FALSE); PROMPT(1,14,0,'1-MONTH',FALSE); PROMPT(1,15,0,'2-DAY',FALSE); PROMPT(1,16,0,'3-YEAR',FALSE); PROMPT(1,17,0,'4-INVOICE NUMBER',FALSE); PROMPT(1,18,0,'5-PURCHASE ORDER NUMBER',FALSE); PROMPT(1,19,0,'6-AMOUNT',FALSE); PROMPT(1,21,0,'7-ALL INFORMATION IS CORRECT AS DISPLAYED',FALSE); REPEAT MOVE_CURSOR(50,16); READ(WRONG); CASE WRONG OF '1': BEGIN PROMPT(1,N,0,' ',FALSE); MO:=INPUT_DATA(1,N,2,TRUE,0,0); END; '2': BEGIN PROMPT(4,N,0,' ',FALSE); DA:=INPUT_DATA(4,N,2,TRUE,0,0); END; '3': BEGIN PROMPT(7,N,0,' ',FALSE); YR:=INPUT_DATA(7,N,2,TRUE,0,0); END; '4': BEGIN PROMPT(12,N,0,' ',FALSE); INO:=INPUT_DATA(12,N,10,TRUE,0,0); END; '5': BEGIN PROMPT(25,N,0,' ',FALSE); PNO:=INPUT_DATA(25,N,10,TRUE,0,0); END; '6': BEGIN PROMPT(40,N,0,' ',FALSE); REPEAT MOVE_CURSOR(40,N); READ(AMOUNT); UNTIL (AMOUNT < 99999.99) AND (AMOUNT > -99999.99); END; END; {OF CASE} UNTIL WRONG = '7'; END; {OF WITH INFORMATION} ERASE_LINES(10,12); END; { OF PROCEDURE} {********* PROCEDURE TO POST TO ACCOUNT RECEIVABLE **************} PROCEDURE POST; BEGIN POST_TO_ANOTHER_ACCOUNT:=FALSE; REPEAT RECURSIVE:=FALSE; ENTER_FILE_NAME; N:=5; IF NEWFILE = TRUE THEN BEGIN CREATE_FIRST_RECORD('0001 '); COUNTER:=2; END; IF NEWFILE = FALSE THEN BEGIN NUMBER_RECORDS(FILENAM); RESET(FILENAM,FIN); COUNTER:=NUMBER_OF_RECORDS + 1; END; CLEAR_SCREEN; PROMPT(1,3,0,'MO/DY/YR',FALSE); PROMPT(12,3,0,'INV #',FALSE); PROMPT(25,3,0,'P.O.#',FALSE); PROMPT(40,3,0,'AMOUNT',FALSE); PROMPT(70,3,0,'CORRECT',FALSE); WITH INFORMATION DO BEGIN REPEAT MO:=INPUT_DATA(1,N,2,TRUE,0,0); PROMPT(3,N,0,'/',FALSE); DA:=INPUT_DATA(4,N,2,TRUE,0,0); PROMPT(6,N,0,'/',FALSE); YR:=INPUT_DATA(7,N,2,TRUE,0,0); INO:=INPUT_DATA(12,N,10,TRUE,0,0); PNO:=INPUT_DATA(25,N,10,TRUE,0,0); REPEAT MOVE_CURSOR(40,N); READ(AMOUNT); UNTIL (AMOUNT < 99999.99) AND (AMOUNT > -99999.99); REPEAT MOVE_CURSOR(70,N); READ(COR); UNTIL (COR = 'Y') OR (COR = 'N'); IF COR = 'N' THEN MISTAKE; FOR I:= 1 TO 2 DO MONTH[I]:=MO[I]; FOR I:= 1 TO 2 DO DAY[I]:=DA[I]; FOR I:= 1 TO 2 DO YEAR[I]:=YR[I]; FOR I:= 1 TO 6 DO INVOICE_NUMBER[I]:=INO[I]; FOR I:= 1 TO 10 DO PURCHASE_ORDER_NUMBER[I]:=PNO[I]; IF MONTH <> '00' THEN BEGIN WRITE (FIN:COUNTER,INFORMATION); COUNTER:=COUNTER + 1; N:=N + 1; IF N > 12 THEN BEGIN ERASE_LINES(5,20); N:= 5; END; END; {OF IF MONTH NOT 00} UNTIL (MONTH = '00') OR ((COUNTER = 5) AND (NEWFILE = TRUE)); CALC_FIRST_RECORD(COUNTER-1); CREATE_FIRST_RECORD(PURCHASE_ORDER_NUMBER); END; ERASE_LINES(20,1); PROMPT(1,20,1,'DO YOU WANT A LISTING OF THE FILE? Y/N',FALSE); REPEAT MOVE_CURSOR(50,20); READ(ANSWER); UNTIL (ANSWER = 'Y') OR (ANSWER = 'N'); IF ANSWER = 'Y' THEN PRINT_FILE(FILENAM); PROMPT(1,23,1,'DO YOU WISH TO POST TO ANOTHER ACCOUNT? Y/N',FALSE); REPEAT MOVE_CURSOR(60,23); READ(ANSWER); UNTIL (ANSWER = 'Y') OR (ANSWER = 'N'); IF ANSWER = 'Y' THEN POST_TO_ANOTHER_ACCOUNT := TRUE; IF ANSWER = 'N' THEN POST_TO_ANOTHER_ACCOUNT:=FALSE; UNTIL POST_TO_ANOTHER_ACCOUNT = FALSE; END; {OF PROCEDURE POST} {************ GENERATE A MONTHLY STATEMENT ******************} PROCEDURE STATMENT; TYPE $STR4 = STRING 4; $STR2 = STRING 2; VAR COP:FI; MONTH_OF_STATEMENT:$STR4; MS:INTEGER; MO,DA,YR:$STR2; MONTHFIL:$STRING14; BEGIN REPEAT RECURSIVE:=FALSE; ENTER_FILE_NAME; PROMPT(1,19,0,'ENTER,NUMERICALLY, THE DATE OF THIS STATMENT',FALSE); PROMPT(1,20,0,'ENTER A CARRIAGE RETURN AFTER MONTH,DAY AND YEAR',FALSE); READ(MO); READ(DA); READ(YR); MS:=((ORD(MO[1]) - 48)*10)+(ORD(MO[2])-48); CASE MS OF 1:MONTH_OF_STATEMENT:='.JAN'; 2:MONTH_OF_STATEMENT:='.FEB'; 3:MONTH_OF_STATEMENT:='.MAR'; 4:MONTH_OF_STATEMENT:='.APR'; 5:MONTH_OF_STATEMENT:='.MAY'; 6:MONTH_OF_STATEMENT:='.JUN'; 7:MONTH_OF_STATEMENT:='.JUL'; 8:MONTH_OF_STATEMENT:='.AUG'; 9:MONTH_OF_STATEMENT:='.SEP'; 10:MONTH_OF_STATEMENT:='.OCT'; 11:MONTH_OF_STATEMENT:='.NOV'; 12:MONTH_OF_STATEMENT:='.DEC'; END; {OF CASE} PRINT_FILE(FILENAM); SETLENGTH(MONTHFIL,0); APPEND(MONTHFIL,DRIVE); APPEND(MONTHFIL,ACN); APPEND(MONTHFIL,MONTH_OF_STATEMENT); WITH INFORMATION DO BEGIN REWRITE(MONTHFIL,COP); RESET(FILENAM,FIN); FOR I:= 1 TO NUMBER_OF_RECORDS DO BEGIN READ(FIN:I,INFORMATION); WRITE(COP:I,INFORMATION); END; REWRITE(FILENAM,FIN); CREATE_FIRST_RECORD('0002 '); FOR I:= 1 TO 2 DO MONTH[I]:=MO[I]; FOR I:= 1 TO 2 DO DAY[I]:=DA[I]; FOR I:= 1 TO 2 DO YEAR[I]:=YR[I]; INVOICE_NUMBER:='PRIOR '; PURCHASE_ORDER_NUMBER:='BALANCE '; AMOUNT:=BALANCE; WRITE(FIN:2,INFORMATION); END; {OF WITH INFORMATION DO} PROMPT(1,23,1,'DO YOU WISH TO GENERATE ANOTHER STATEMENT? Y/N',FALSE); REPEAT MOVE_CURSOR(60,23); READ(ANSWER); UNTIL (ANSWER = 'Y') OR (ANSWER = 'N'); IF ANSWER = 'Y' THEN STATEMENT:= TRUE ELSE STATEMENT:=FALSE; UNTIL STATEMENT = FALSE; END; {OF PROCEDURE STATMENT} {******************** BEGIN THE MAIN PROGRAM HERE ****************} BEGIN CLEAR_SCREEN; PROMPT(10,5,0,'ACCOUNTS RECEIVABLE PROGRAM PACKAGE',FALSE); PROMPT(10,9,0,'CHOOSE FROM EITHER:',FALSE); PROMPT(10,11,0,'1- POST TO AN ACCOUNT',FALSE); PROMPT(10,12,0,'2- GENERATE A STATEMENT',FALSE); PROMPT(10,14,0,'ENTER THE NUMBER OF YOUR CHOICE ',FALSE); REPEAT READ(I); UNTIL (I=1) OR (I=2); IF I=2 THEN STATEMENT:=TRUE ELSE STATEMENT:=FALSE; POST_TO_ANOTHER_ACCOUNT:=TRUE; WHILE (STATEMENT = FALSE) AND (POST_TO_ANOTHER_ACCOUNT = TRUE) DO POST; WHILE STATEMENT = TRUE DO STATMENT; END. .