`L i=L\Ʃx ? N'i  ͭЅ?0ȱ Ѕ?iȱi lԠԠ͠ԠϠŠͮŠ SYSTEM.APPLE   L$JN^ĠuhnAMTOFDEPRE.TEXTun DEBTS.TEXT  STORE.DATA P CASHREG.TEXT âDAILYBUFF.TEXTDAILYBUFF.TEXTPMONEY1 *CHECKBOOK.TEXT*6NEWCARBUY2.TEXTw6>NEWCARBUY2.CODEw>FSHOPNSAVE.TEXTءFPCREDITOPTN.TEXTYPV LOANTERM.TEXT eV\REGPAYMENT.TEXTe\bREMBALANCE.TEXTubhFUTUREVALU.TEXT&꽌ɪɖ'*&%&,E'зЮ꽌ɪФ`+*xH&x'8*7Ixix&&  ') + &п x) ++`FG8`0($ p,&") (jJJ>L+ "?I>  N `  ` x V Nx .x- z `V0^*^*>` aI꽌ɪVɭ&Y&&Y& 꽌ɪ\8`& PROGRAM CHECKBOOK;  !CONST MAXCODE=40; 'MAXNUM=10000; 'FIRSTYR=78; 'LASTYR=99; ! NO='N';YES='Y'; ! BASEYR=79; ! !TYPE SERIALNUMBER=0..MAXNUM; &CODENUMBER=0..MAXCODE; &CHECKMEMO=STRING[16]; &MEMOVECTOR=ARRAY[CODENUMBER] OF CHECKMEM "X[1]:=' MORTGAGE '; "X[2]:=' HOME MAINT. '; "X[3]:=' HOME IMPROVE '; "X[4]:=' UTILITY GAS ';  X[5]:=' ELECTRICITY '; "X[6]:=' GASOLINE '; "X[7]:=' TELEPHONE '; "X[8]:=' LOAN ACCOUNTS '; "X[9]:=' CHARGE ACCNTS '; ETNUMBER(1,12,FMONTH); #WRITELN; #WRITE(' YEAR....'); #THISYEAR:=GETNUMBER(FIRSTYR,LASTYR,FYEAR); #SKIPLINES(3); #WRITELN('ARE THERE CHECKS FROM'); #WRITE('LAST YEAR? (Y/N)-->'); #TWOYRS:=ANSWERYES; "END;    !PROCEDURE PARTTHR; !BEGIN "2ELSE EXIT(PROGRAM); ) END; )END; ! UNTIL NOT IOERROR; " "CLOSE(F,LOCK); "(*$I+*) !END; " !PROCEDURE GETYEAR; "BEGIN #PAGE(OUTPUT); #SKIPLINES(3); #WRITELN('ENTER THE STATEMENT DATE:'); #WRITELN; #WRITE(' MONTH...'); #THISMONTH:=G*IOERROR:=TRUE; *WRITELN(BELL,'CAN''T FIND ',T,'.'); *WRITE('IS THE NAME CORRECT? (Y/N)'); *IF ANSWERYES +THEN BEGIN 1WRITELN; 1WRITELN('CREATE A NEW CHECK BOOK FILE?'); 1WRITE('(Y/N)-->'); 1IF ANSWERYES 2THEN CREATEFILE(T) ; "READLN;SKIPLINES(3); " "REPEAT #PAGE(OUTPUT); #SKIPLINES(5); #IOERROR:=FALSE; #WRITELN('ENTER THE NAME OF YOUR CHECKBOOK'); #WRITELN; #WRITE('-->'); #READLN(T); #U:=CONCAT('CKBOOK:',T,'.FLOWFILE'); #RESET(F,U); #IF IORESULT<>0 $THEN BEGIN %BEGIN &WRITE('.'); &PUT(F); $ END; $WRITELN; $CLOSE(F,LOCK); # EXIT(GETBOOK); #(*$I+*) #END; ! ! !BEGIN "(*$I-*) "PAGE(OUTPUT);SKIPLINES(3); "WRITELN(BELL,'PLEASE INSERT VOLUME CKBOOK: IN DRIVE 2'); "WRITE('AND TYPE TO CONTINUE-->')$WRITELN('SETTING UP ',CONCAT('CKBOOK:',T,'.FLOWFILE')); $REWRITE(F,CONCAT('CKBOOK:',T,'.FLOWFILE')); $SEEK(F,9); $IF IORESULT<>0 %THEN BEGIN +WRITELN(BELL,'I-O ERROR, PROGRAM ABORTED'); +EXIT(PROGRAM); *END; $RESET(F); $F^:=Y; $FOR I:=0 TO 9 DOYEAR:DATAYEARS; # #PROCEDURE CREATEFILE(VAR T:STRING); #VAR I:INTEGER; #BEGIN $(*$I-*) $WHILE LENGTH(T)>7 DO %BEGIN &WRITELN; &WRITELN(BELL,'CHECK BOOK NAME TOO LONG'); &WRITE('7 CHARACTERS ONLY. ENTER NAME-->'); &READLN(T); %END; =['0'..'9']; "BELL:=CHR(7); "ESC:=CHR(27); !END; ! !PROCEDURE PARTTWO; !VAR ROW,COL:INTEGER; !BEGIN "FOR ROW:=-2 TO 12 DO #FOR COL:=0 TO MAXCODE DO $Y[ROW,COL]:=0; !END; ! !PROCEDURE GETBOOK; !VAR U:BOOKTITLE;F:FLOWFILE; %IOERROR:BOOLEAN; %OLEAN;FORWARD;   SEGMENT PROCEDURE GLOBALINITIALIZE(VAR T:BOOKTITLE;VAR X:MEMOVECTOR; CVAR FIRST:CHECKPOINTER; CVAR COUNT:SERIALNUMBER;VAR TOTAL:REAL; CVAR Y:FLOWMATRIX);  !PROCEDURE PARTONE; !BEGIN "FIRST:=NIL; "COUNT:=0; "TOTAL:=0; "DIGITS:$CASHFLOW:FLOWMATRIX; $TWOYRS:BOOLEAN; $DIGITS:CHARSET; $ $   FUNCTION GETNUMBER(LO,HI:INTEGER;TAG:FIELD):INTEGER;  FORWARD;   PROCEDURE FILTERINPUT(OKSET:CHARSET);FORWARD;   PROCEDURE SKIPLINES(X:INTEGER);FORWARD;   FUNCTION ANSWERYES:BO& (  VAR NEWCHECK:CHECK; $CODE:CODENUMBER; $MEMOLIST:MEMOVECTOR; $FIRSTCHECK:CHECKPOINTER; $CH,BELL,ESC:CHAR; $NAMEOFBOOK:BOOKTITLE; $THISYEAR:DATAYEARS; $THISMONTH:1..12; $CHECKCOUNT:SERIALNUMBER; $TOTAL:REAL; $DEPOSITS:REAL; E,FOTHER); &CHECKPOINTER=^CHECKRECORD; & &CHECKRECORD=RECORD (CHECKPART:CHECK; (NEXTCHECK:CHECKPOINTER; (END; & &BOOKTITLE=STRING[30]; & &FLOWMATRIX= (ARRAY[-2..12,0..MAXCODE] OF REAL; & &FLOWFILE=FILE OF FLOWMATRIX; & &CHARSET=SET OF CHAR; O; & &DATAYEARS=FIRSTYR..LASTYR; &DATERECORD=RECORD & MONTH:1..12; (YEAR:DATAYEARS; (END; & &CHECK=RECORD & NUMBER:SERIALNUMBER; (DATE:DATERECORD; (AMOUNT:REAL; (CODE:CODENUMBER; (MEMO:CHECKMEMO; (END; & &FIELD=(FNUM,FMONTH,FYEAR,FMEMOCOD"X[10]:=' SAVINGS '; "X[11]:=' INVESTMENTS '; "X[12]:=' LIFE INSURANCE '; "X[13]:=' TAXES '; "X[15]:=' VEHCL INSURE '; "X[16]:=' VEHCL UPKEEP '; "X[17]:=' FOOD '; "X[18]:=' BEER & WINE '; "X[19]:=' BOOKS,NEWS,ETC '; "X[20]:=' RECORDS, HI-FI '; "X[21]:=' RESTAURANTS '; " !END; ! !PROCEDURE PARTFOUR; !BEGIN "X[23]:=' VACATIONS ';  X[24]:=' TOMS ALLOWANCE '; "X[25]:=' KAYS ALLOWANCE '; "X[26]:=' DOCTOR,DENTIST ';  X[29UE;  WHILE SEARCHING AND (LEADER<>NIL) DO " "WITH LEADER^ DO #IF NEWCHECK.NUMBER'); ,CODE:=GETNUMBER(0,MAXCODE,FMEMOCODE); ,IF CODE=0 -THEN SHOWCODES(CODE); ,MEMO:=MEMOLIST[CODE]; ,COUNT:=COUNT+MONTH.............'); .MONTH:=GETNUMBER(1,12,FMONTH); .IF TWOYRS /THEN BEGIN 5WRITE('YEAR..............'); 5YEAR:=GETNUMBER(FIRSTYR,LASTYR,FYEAR); 4END .ELSE YEAR:=THISYEAR; -END; ,WRITE('AMOUNT............'); ,FILTERINPUT(DIGITS); ); ! WRITELN; #WRITE('NUMBER OR ...'); #FILTERINPUT(DIGITS+[ESC]); #IF INPUT^=ESC $THEN BEGIN *READ(CH);WRITELN; *READINGCHECKS:=FALSE; )END $ELSE BEGIN *WITH X DO +BEGIN ,NUMBER:=GETNUMBER(0,MAXNUM,FNUM); ,WITH DATE DO -BEGIN .WRITE('CKS(VAR X:CHECK;VAR COUNT:SERIALNUMBER;VAR TOTAL:REAL):BOOLEAN;  BEGIN ! #READINGCHECKS:=TRUE; #PAGE(OUTPUT); #SKIPLINES(3); #WRITELN('ENTER A CHECK BEGINNING WITH THE'); #WRITELN('CHECKNUMBER. ENTER IF THERE ARE'); #WRITELN('NO MORE CHECKS.'!PAGE(OUTPUT); !FOR J:=1 TO I DO %BEGIN %K:=I+J; %WRITELN(J:2,MEMOLIST[J],K:2,MEMOLIST[K]);  END; # #SKIPLINES(2); #WRITE('ENTER THE EXPENDITURE CODE-->'); #X:=GETNUMBER(1,MAXCODE,FMEMOCODE);  END;(* SHOWCODES *)    FUNCTION READINGCHE WRITE('ENTER 0 TO REVIEW THE CODES-->'); .END;  END; $ #FILTERINPUT(DIGITS); #READLN(X); # "END; !GETNUMBER:=X;  END; (* GETNUMBER *)    PROCEDURE SHOWCODES(VAR X:CODENUMBER);  VAR I,J,K:CODENUMBER;  BEGIN !I:=MAXCODE DIV 2; OF $FNUM: WRITE('ENTER CHECK NUMBER-->'); $FMONTH: WRITE('ENTER MONTH NUMBER-->');  FYEAR: BEGIN ,WRITELN('ENTER THE LAST TWO'); ,WRITE('DIGITS OF THE YEAR-->'); +END; $FMEMOCODE: BEGIN $ WRITELN('ENTER THE CODE NUMBER.'); $ GIN  !(*$I-*) !REPEAT READLN(X) UNTIL IORESULT=0; !(*$I+*) ! !WHILE ((XHI)) DO ! BEGIN " #PAGE(OUTPUT);SKIPLINES(5); #WRITELN(BELL,'INVALID ENTRY!!'); #SKIPLINES(2); #WRITELN('VALUES BETWEEN ',LO,' AND ',HI,' ONLY!'); # #CASE TAG   PROCEDURE SKIPLINES;  VAR L:INTEGER;  BEGIN !FOR L:=1 TO X DO WRITELN;  END;   FUNCTION ANSWERYES;  VAR CH:CHAR;  BEGIN !FILTERINPUT([YES,NO]); !READ(CH); !WRITELN; !ANSWERYES:=CH=YES;  END;   FUNCTION GETNUMBER;  VAR X:INTEGER;  BE!GETYEAR; !PARTTHR;  PARTFOUR;  END; " "  PROCEDURE FILTERINPUT;  BEGIN !REPEAT "GET(INPUT); "IF NOT (INPUT^ IN OKSET) #THEN BEGIN )WRITE(CHR(8)); )WRITE(' '); )WRITE(CHR(8)); )WRITE(BELL); ! END; !UNTIL INPUT^ IN OKSET;  END; "X[33]:=' FURNISHINGS '; "X[34]:=' CLOTHING '; "X[36]:=' '; "X[37]:=' '; "X[38]:=' '; "X[39]:=' '; "X[40]:=' CASH UNKNOWN '; !END; "   BEGIN !PARTONE; !PARTTWO; !GETBOOK; ]:=' JOURNALS, DUES '; "X[30]:=' MEETINGS,TRIPS '; "X[27]:=' LAWYER '; "X[28]:=' OTHER SERVICES '; "X[35]:=' MERCHANDISE '; "X[32]:=' COMPUTING '; "X[22]:=' BALLET,THEATER '; "X[14]:=' CONTRIBUTIONS '; "X[31]:=' BOOKS & EQPT. '; CK; #NEXTCHECK:=LEADER; "END; " !IF LEADER=FIRST "THEN FIRST:=NEWENTRY "ELSE FOLLOWER^.NEXTCHECK:=NEWENTRY; "  END;(* SORTBYNUMBER *)      PROCEDURE REVIEWCHECKS(VAR FIRSTCHECK:CHECKPOINTER;CHECKCOUNT:SERIALNUMBER; 7VAR TOTAL:REAL);  TYPE ERRORLINK=^ERRORLIST; %ERRORLIST=RECORD 0NUMBER:SERIALNUMBER; 0NEXTNUM:ERRORLINK; 0END; 0  VAR LISTHEAD:CHECKPOINTER;  FIRSTERROR:ERRORLINK; $ERRORSNOTED,DONELISTING:BOOLEAN;  "PROCEDURE LISTSOMECHECKS(VAR LISTHEAD:CHECKPOINTER;VAR DO; .END; &END;(* DELETE *) & $ $BEGIN(* GETCORRECTIONS *) $ &WRITELN; &WRITE(BELL,BELL,'DELETE THIS CHECK? (Y/N)-->'); &IF ANSWERYES 'THEN DELETE(BADCHECK,FIRSTCHECK,CHECKCOUNT,TOTAL) & ELSE REPAIR(BADCHECK^.CHECKPART,TOTAL); ( $END; , ,EN FIRST:=X^.NEXTCHECK 1ELSE BEGIN 6JUMPER:=FIRST; 6WHILE JUMPER^.NEXTCHECK<>X DO 7JUMPER:=JUMPER^.NEXTCHECK; 6JUMPER^.NEXTCHECK:=X^.NEXTCHECK; 6END; /WITH X^.CHECKPART DO 0BEGIN 1TOTAL:=TOTAL-AMOUNT; 1WRITELN('CHECK',NUMBER:5,' DELETED.'); 0END&PROCEDURE DELETE(X:CHECKPOINTER;VAR FIRST:CHECKPOINTER; 7VAR CHECKCOUNT:SERIALNUMBER;TOTAL:REAL); &VAR JUMPER:CHECKPOINTER; &BEGIN 'WRITELN; 'WRITE('PLEASE CONFIRM (Y/N)-->'); 'IF ANSWERYES )THEN BEGIN /CHECKCOUNT:=CHECKCOUNT-1; /IF X=FIRST 1TH.TOTAL:=TOTAL+AMOUNT; -END; 'IF FIXFIELD('EXPENDITURE CODE') (THEN BEGIN .WRITELN('ENTER 0 TO REVIEW-->'); .CODE:=GETNUMBER(0,MAXCODE,FMEMOCODE); .IF CODE=0 THEN SHOWCODES(CODE); .MEMO:=MEMOLIST[CODE]; -END; $ END; $END;(* REPAIR *) & & WITH DATE DO .BEGIN /WRITELN; /WRITE('MONTH...'); /MONTH:=GETNUMBER(1,12,FMONTH); /WRITE('YEAR....'); /YEAR:=GETNUMBER(FIRSTYR,LASTYR,FYEAR); .END; 'IF FIXFIELD('AMOUNT') (THEN BEGIN .TOTAL:=TOTAL-AMOUNT; .FILTERINPUT(DIGITS); .READLN(AMOUNT); 'CORRECT THE ',S,'? (Y/N)'); 'IF ANSWERYES (THEN BEGIN .FIXFIELD:=TRUE; .WRITELN; .WRITE('ENTER THE ',S,'-->'); -END; &END; # $BEGIN %WITH X DO &BEGIN 'IF FIXFIELD('NUMBER') (THEN NUMBER:=GETNUMBER(0,MAXNUM,FNUM); 'IF FIXFIELD('DATE') (THEN $PROCEDURE GETCORRECTIONS(BADCHECK:CHECKPOINTER;VAR FIRSTCHECK:CHECKPOINTER; =VAR CHECKCOUNT:SERIALNUMBER;VAR TOTAL:REAL); $ $ $PROCEDURE REPAIR(VAR X:CHECK;VAR TOTAL:REAL); # &FUNCTION FIXFIELD(S:STRING):BOOLEAN; &BEGIN 'FIXFIELD:=FALSE; 'WRITE(ECKPOINTER; 7VAR CHECKCOUNT:SERIALNUMBER;VAR TOTAL:REAL);  VAR NEXTERROR:ERRORLINK; $STARTCHK,NEXTCHK:CHECKPOINTER; $CHECKNOTFOUND,DONESHOWING:BOOLEAN; $BADNUMBER:SERIALNUMBER; $POINTOBADCHECK:CHECKPOINTER; $ SC; #END(* FLAGBYNUMBER *); $  BEGIN(* FLAGERRORS *) !SKIPLINES(2); !WRITELN('ANY CORRECTIONS'); !WRITE('TO THIS LIST? (Y/N)-->'); !IF ANSWERYES "THEN FLAGBYNUMBER;  END;    PROCEDURE CORRECTERRORS(VAR FIRSTERROR:ERRORLINK;VAR FIRSTCHECK:CHN(NEWNUM); -NEW(NEWERROR); -WITH NEWERROR^ DO .BEGIN /NUMBER:=NEWNUM; /NEXTNUM:=FIRSTERROR; .END; -FIRSTERROR:=NEWERROR; , ERRORSNOTED:=TRUE; , WRITE(' -->'); ,END 'ELSE BEGIN -READ(CH);WRITELN; -EXIT(FLAGERRORS); ,END; $UNTIL INPUT^=E%WRITELN('ENTER, BY NUMBER, THE CHECKS TO BE'); %WRITELN('CORRECTED. ENTER A NEW NUMBER IF YOU'); %WRITELN('FORGOT ANY CHECKS, WHEN YOU ARE'); %WRITE('THROUGH-->'); %REPEAT &FILTERINPUT(DIGITS+[ESC]); &IF INPUT^ IN DIGITS 'THEN BEGIN -READLNGTH) OR (LISTHEAD=NIL)); #DONELISTING:=LISTHEAD=NIL; "END; " !  PROCEDURE FLAGERRORS(VAR ERRORSNOTED:BOOLEAN;VAR FIRSTERROR:ERRORLINK); " $PROCEDURE FLAGBYNUMBER; $VAR NEWERROR:ERRORLINK; $ NEWNUM:SERIALNUMBER; $BEGIN %SKIPLINES(2); '); #WRITELN('----------------------------------------'); # #REPEAT %WITH LISTHEAD^.CHECKPART DO &WITH DATE DO 'WRITELN(NUMBER:4,MONTH:3,'/',YEAR,CODE:3,MEMO,AMOUNT:8:2); %COUNTER:=COUNTER+1; %LISTHEAD:=LISTHEAD^.NEXTCHECK; #UNTIL ((COUNTER=LISTLENELISTING:BOOLEAN); "CONST LISTLENGTH=8; "VAR COUNTER:0..LISTLENGTH; "BEGIN(* LISTSOMECHECKS *) #COUNTER:=0; #PAGE(OUTPUT); #WRITELN('COUNTED-->',CHECKCOUNT:5,' CHECKS FOR-->',TOTAL:9:2); #WRITELN; #WRITELN('NUM. DATE CHECK MEMO AMOUNT # #  PROCEDURE SHOWABADCHECK(VAR NEXTERROR:ERRORLINK;VAR CHECKNOTFOUND:BOOLEAN; 8VAR POINTOBADCHECK:CHECKPOINTER; 8VAR DONESHOWING:BOOLEAN; 8VAR BADNUMBER:SERIALNUMBER);  VAR NEXTCHECK:CHECKPOINTER;  BEGIN !NEXTCHECK:=FIRSTCHECK; !BADNUMBER:=NEXTERROR^.NUMBER; !CHECKNOTFOUND:=TRUE; !REPEAT "IF NEXTCHECK^.CHECKPART.NUMBER=NEXTERROR^.NUMBER #THEN BEGIN )CHECKNOTFOUND:=FALSE; )POINTOBADCHECK:=NEXTCHECK; )PAGE(OUTPUT); )SKIPLINES(3); )WITH NEXTCHECK^.CHECKPART DO *BEGIN +WRODE DIV 2; !FOR I:=1 TO K DO "BEGIN #J:=I+K; #WRITELN(I:3,MEMOLIST[I],COLTOTS[I]:10:2,COLPCNTS[I]:8:1, +J:6,MEMOLIST[J],COLTOTS[J]:10:2,COLPCNTS[J]:8:1); "END; ! !WRITELN('DEPOSITS= ',DEPOSITS:10:2); !WRITE(' SPLITS, CONTINUES'); !ROR I:=1 TO MAXCODE DO #BEGIN $FOR J:=-2 TO 12 DO %COLTOTS[I]:=COLTOTS[I]+FLOW[J,I]; ! WRITE('.'); ! END;  WRITELN; ! !FOR I:=1 TO MAXCODE DO "COLPCNTS[I]:=100*COLTOTS[I]/DEPOSITS; !PAGE(OUTPUT); !WRITELN(S1,S1); !WRITELN(S2,S2); ! !K:=MAXC VAR COLPCNTS,COLTOTS:ARRAY[1..MAXCODE] OF REAL;  I,J,K:INTEGER;  S1,S2:STRING[40];  BEGIN !S1:=' CHECK % OF '; !S2:=' CATEGORY AMOUNT DEPOSITS '; ! !FOR I:=1 TO MAXCODE DO #COLTOTS[I]:=0.0; ! !FFOR ROW:=-2 TO 12 DO "BEGIN #WRITE('.'); #FOR COL:=0 TO MAXCODE DO %F^[ROW,COL]:=F^[ROW,COL]+X[ROW,COL]; "END; !SEEK(F,(THISYEAR-BASEYR)); !PUT(F); !CLOSE(F,LOCK);  END;    PROCEDURE DISPLAYFLOW(FLOW:FLOWMATRIX); !  PROCEDURE UPDATEFLOWFILE(X:FLOWMATRIX;T:BOOKTITLE);  VAR F:FLOWFILE; $ROW,COL:INTEGER;  BEGIN !PAGE(OUTPUT); !SKIPLINES(5); !WRITE('UPDATING CASH FLOW FILE'); !RESET(F,CONCAT('CKBOOK:',T,'.FLOWFILE')); !SEEK(F,(THISYEAR-BASEYR)); !GET(F); !FIRST; !REPEAT "WITH NEXT^.CHECKPART DO $WITH DATE DO %BEGIN &MM:=MONTH; &IF YEAR'); "WRITELN; "WRITELN(' DEPOSITS= ',X:10:2); "WRITELN; "WRITE('Y/N? -->'); LISTING); #FLAGERRORS(ERRORSNOTED,FIRSTERROR); "UNTIL DONELISTING; "IF ERRORSNOTED #THEN CORRECTERRORS(FIRSTERROR,FIRSTCHECK,CHECKCOUNT,TOTAL); !UNTIL NOT ERRORSNOTED;  END;    FUNCTION DOLLARS:REAL;  VAR X:REAL;  BEGIN !REPEAT; "PAGE(OUTPUTCHECKCOUNT,TOTAL) #ELSE GETCORRECTIONS(POINTOBADCHECK,FIRSTCHECK,CHECKCOUNT,TOTAL); !UNTIL DONESHOWING;  END;    BEGIN(*REVIEWCHECKS*) !REPEAT "LISTHEAD:=FIRSTCHECK; "ERRORSNOTED:=FALSE; "FIRSTERROR:=NIL; "REPEAT #LISTSOMECHECKS(LISTHEAD,DONE+SORTBYNUMBER(NEWCHECK,FIRSTCHECK); *END; #END;   BEGIN(* CORRECTERRORS *) !NEXTERROR:=FIRSTERROR; !REPEAT "SHOWABADCHECK(NEXTERROR,CHECKNOTFOUND,POINTOBADCHECK,DONESHOWING,BADNUMBER); "IF CHECKNOTFOUND #THEN ASKFORNEWCHECK(BADNUMBER,FIRSTCHECK,N $PAGE(OUTPUT); $SKIPLINES(3); $WRITELN(BELL,'COULDNT FIND-->',NUMBER:5); $WRITELN('DO YOU WANT TO ENTER'); $WRITE('A NEW CHECK? (Y/N)-->'); $IF ANSWERYES %THEN BEGIN +SEARCHING:=READINGCHECKS(NEWCHECK,CHECKCOUNT,TOTAL); ); !NEXTERROR:=NEXTERROR^.NEXTNUM;  DONESHOWING:=NEXTERROR=NIL;  END;  , #PROCEDURE ASKFORNEWCHECK(NUMBER:SERIALNUMBER;VAR FIRSTCHECK:CHECKPOINTER;  TO CONTINUE. TO ABORT.'); #READ (KEYBOARD, CH); #IF (CH=CHR(27)) TH#V := TV -V; #WRITELN;WRITELN  ('SAVINGS ON CAR + FUEL PER MO.',V:8:2);  END; (*ADVANTAGE*)    PROCEDURE START;  BEGIN #PAGE (OUTPUT); #GOTOXY (0, 10); #WRITELN  ('A COMPARISON OF FUEL ECONOMY OF TWO CARS'); #WRITELN;WRITELN;WRITELN  (' EN#WRITELN;WRITELN  ('ADVANTAGE OF CAR B OVER CAR A':35); #WRITELN  ('.............................':35); #Y := TY - Y; #WRITELN;WRITELN  ('FUEL SAVINGS PER YEAR',Y:16:2); #CFM := TCFM -CFM; #WRITELN;WRITELN  ('FUEL SAVINGS PER MO.(AV)',CFM:13:2); := ((Y * 2) + L) / 24; #CFM := (Y * 2) / 24;  END; (*CALCULATE*)   (*HOLDS INITIAL CALCULATIONS TEMPORARILY*)  PROCEDURE TEMPHOLD;  BEGIN #TY := Y; #TV := V; #TCFM := CFM;  END; (*TEMP*)  $(*SAVINGS*)  PROCEDURE ADVANTAGE;  BEGIN :2);  END; (*BCARCOSTS*) #  PROCEDURE CALCULATE;  VAR #L :INTEGER; (*DEPRECIATED VALUE*) #G, (*TOTAL GALLONS USED*) #T (*AVE.MILES/GAL-CITY & HWY*) :REAL;  BEGIN #T := ((C * P) + (H * (100-P))) / 100; #G := M / T; #Y := G * F; #L := X - Z; #VT) THEN #Z := INT;  END; (*BCARDATA*)  (*$V+*) (*RESTORE STRING LEN CHECKING*)   (*OPERATING COSTS 2ND.CAR*)  PROCEDURE BCARCOSTS;  BEGIN #GOTOXY (33,17); #WRITELN (Y:6:2); #GOTOXY (33, 19); #WRITELN (CFM:6:2); #GOTOXY (33, 21); #WRITELN (V:6#IF STRINT (INPUT, INT) THEN #P := INT; #GOTOXY (35, 11); #READLN (INPUT); #IF STRINT (INPUT, INT) THEN #X := INT; #GOTOXY (35, 13); #READLN (INPUT); #IF STRFP (INPUT, FP) THEN #F := FP; #GOTOXY (35, 15); #READLN (INPUT); #IF STRINT (INPUT, ININT (INPUT, INT) THEN #M := INT; #GOTOXY (35, 5); #READLN (INPUT); #IF STRINT (INPUT, INT) THEN #C := INT; #GOTOXY (35, 7); #READLN (INPUT); #IF STRINT (INPUT, INT) THEN #H := INT; #GOTOXY (35, 9); #READLN (INPUT); #WRITELN; WRITELN  ('COST CAR + FUEL PER MO.',V:8:2);  END; (*ACARCOSTS*) # #(*DATA FOR 2ND.CAR*)  PROCEDURE BCARDATA;  BEGIN #GOTOXY (35, 0); #WRITELN ('CAR-B'); #GOTOXY (34, 1); #WRITELN ('======='); #GOTOXY (35, 3); #READLN (INPUT); #IF STRREADLN (INPUT); #IF STRINT (INPUT, INT) THEN #Z := INT;  END; (*ACARDATA*) # #(*COST OPERATING FIRST CAR*)  PROCEDURE ACARCOSTS;  BEGIN #WRITELN;WRITELN  ('COST FUEL PER YR. ',Y:6:2); #WRITELN;WRITELN  ('COST FUEL PER MO. ',CFM:8:2); ZB d1! x ȡݛ1!1Kɡ 0 1ڼL ڼ 犃0  M    卡 ڳ? ~+evUM8  "$&(*,.024X8:<>@BDFHJLNPRTVXZ\^`bdfhjlnprtT xN^ȡءEL PER MO.9b  צ(A COMPARISON OF FUEL ECONOMY OF TWO CARSצ( ENTER DATA ON MORE EXPENSIVE CAR FIRSTצ&BUT IF PRICES ARE CLOSE,THEN ENTER THEצ"GAS GUZZLER" FIRST.צ'PRESS TO CONTINUE. TO ABORT.CCáb  (28.R$ SAVINGS ON CAR + FUEL PER MO.9b  צ(A COMPARISON OF FUEL ECONOMY OF TWO CARSצ( ENTER DATA ON MORE EXPENSIVE CAR FIRSTצ&BUT IF PRICES ARE CLOSE,THEN ENTER THEצ.............................#A?AצFUEL SAVINGS PER YEARA=;=צFUEL SAVINGS PER MO.(AV)= 979SAVINGS ON CAR + FU!=!9Z312d1d4A50/9A؊=A \?A79;= ADVANTAGE OF CAR B OVER CAR A#,,3#P,,2# P,,1# P,,0# P-5-#P,,/\!AצCOST FUEL PER MO. =COST CAR + FUEL PER MO.9#צCAR-B"צ=======#P,,4#P,0צPRICE FUEL PER GAL.? P-5-EST.VALUE CAR IN 2 YRS? P,,/COST FUEL PER YR. A,,3NO.MILES PER GAL(HWY)? P,,2צ% CITY MILES DRIVEN? P,,1COST OF CAR WANTED? P,  INPUT DATAצCAR-A צ!=================================NO.MILES PER YR.? P,,4צNO.MILES PER GAL(CITY)? P . vF  x ȡݛ1!1Kɡ 0 1ڼL ڼ 犃0 PROGRAM SHOPNSAVE;  (*A SHOPPING AID,CALCULATING SAVINGS ON  DISCOUNTED ITEMS.BY MAX J.NAREFF,S.F.8/80*) # #VAR &X,Y:INTEGER; (*DISPLAY TABS*) &ANYCHAR:CHAR; (*REPEAT SIGNAL*) &LINE:INTEGER; (*FOR SCREEN CONTROL*) ®PRICE, &PCNTOFF, (* % *) &SN^Y& EGIN (*MAIN*) #INFORMATION; #INITIALIZE; #REPEAT &DATAENTRY; &CALCULATION; #UNTIL (ANYCHAR<>'Y'); #WRITELN  ('----------------------------------------'); #WRITELN  ('TOTAL COST=':14,TOTALCOST:6:2,' SAVINGS=',TOTALSAVE:6:2);  END. (*PROGRAM*) &IF (ANYCHAR=CHR(27)) THEN (EXIT (PROGRAM) &ELSE (WRITELN (CHR(12)); (HEADINGS(0,1); #END; (*INFORMATION*) # #PROCEDURE INITIALIZE; (*VARS & TABS*) #BEGIN &TOTALCOST:= 0; &TOTALSAVE:= 0; &X:= 0; &Y:= 3; &LINE:= 4; #END; (*INITIALIZE*) #  BOF SALES WITH THE RUBRIC'); &WRITELN ('"-% OFF".'); &WRITELN  (' HERES A SIMPLE PROGRAM TO COMPUTE'); &WRITELN  ('TOTAL COST AND SAVINGS.'); &GOTOXY(0,16); &WRITELN  ('PRESS TO CONTINUE: TO LEAVE'); &READ(KEYBOARD,ANYCHAR); VE+TOTALDSCNT; &DISPLAY; #END; (*CALCULATION*) # #PROCEDURE INFORMATION; #BEGIN &WRITELN (CHR(12)); (*CLEARS SCREEN*) &GOTOXY(12,7); &WRITELN('SHOP AND SAVE'); &WRITELN  ('ON A SUNDAY MORNING,NEWSPAPER ADS ANN-':40); &WRITELN  ('OUNCE A SERIES TDSCNT:= 0;SALEPRICE:= 0; &TOTALDSCNT:= 0; &PCNTOFF:= PCNTOFF/100; (*% AS DECIMAL**) &UNITDSCNT:= REGPRICE*PCNTOFF; &TOTALDSCNT:= UNITDSCNT*QUANTITY; &SALEPRICE:= REGPRICE-UNITDSCNT; & &TOTALCOST:= TOTALCOST+SALEPRICE*QUANTITY; &TOTALSAVE:= TOTALSA&CLEARFROM; #END; (*ONCEMORE*) # #PROCEDURE DISPLAY; (*RESULTS*) #BEGIN &GOTOXY(X,Y); &WRITE  (REGPRICE:7:2,SALEPRICE:14:2,QUANTITY:7); &WRITELN (TOTALDSCNT:11:2); &Y:= Y+1; &ONCEMORE; #END; (*DISPLAY*) # #PROCEDURE CALCULATION; #BEGIN &UNI); &READLN(REGPRICE); &WRITE ('# ITEMS PURCHASED:':30); &READLN(QUANTITY); &WRITE ('PERCENT OFF:':30); &READLN(PCNTOFF); #END; (*DATAENTRY*) # #PROCEDURE ONCEMORE; #BEGIN &WRITELN('ANOTHER ENTRY:(Y/N)?':30); &READ(KEYBOARD,ANYCHAR); ND; (*CLEARFROM*)  #PROCEDURE HEADINGS(X,Y:INTEGER); #BEGIN &GOTOXY(X,Y); &WRITELN  ('REG.PRICE':9,'SALE PRICE':14,'QTY':6,'DISCOUNT':11);  END; (*HEADINGS*)   PROCEDURE DATAENTRY; #BEGIN &GOTOXY(0,16); &WRITE ('ENTER REGULAR PRICE:':30ALEPRICE, &UNITDSCNT, (*DISCOUNT*) &TOTALDSCNT, &TOTALCOST, &TOTALSAVE :REAL; &QUANTITY:INTEGER;  #PROCEDURE CLEARFROM; (*CLEARS SCREEN*) #BEGIN &GOTOXY(0,LINE); &WRITELN(CHR(11)); (*FROM CURSOR TO*) &LINE:= LINE+1; (*TO END OF SCREEN*) #EPROGRAM CREDITOPTN; !(*COMPUTES FINANCE CHARGES & MONTHLY PAYMENTS !ON A CREDIT CARD PURCHASE-VISA RATES !BY MAX J.NAREFF,SAN FRANCISCO,CA.9/80*) ! #VAR %MONTH,COUNT:INTEGER;(*COUNTERS*) %INTEREST, (*MONTHLY FINANCE CHARGE*) %TOTINTEREST, (*ACCUMULSA)':37); %WRITELN  ('1.WHEN UNPD BALANCE IS >$250,PAY 4% OF AMT./MO'); %WRITELN  ('2.WHEN UNPD BALANCE (= OR >$10),PAY $10/MO'); %WRITELN;WRITELN  (' [B] SELECT OWN FIXED MONTHLY PAYMENT.'); %WRITELN;WRITELN %('WHICH OPTION-A? OR B?:':31); %READYMENT:'); %READLN (FIXEDPAYMENT); %BANKER; #END; (*REGPAYMENTS*) ' #PROCEDURE PAYOPTIONS; %VAR CH:CHAR; #BEGIN %PAGE (OUTPUT); %GOTOXY (3,8); %WRITELN  ('TWO PAYMENT OPTIONS ARE AVAILABLE'); %WRITELN;WRITELN  ('[A] MINIMUM MONTHLY PAYMENTS (VI%LINELIMIT(18); (*FOR NEW PAGE*) % $UNTIL (MINPAYMENT= UNPDBALANCE); $WRITELN  ('TOTAL INTEREST PAID=':26,TOTINTEREST:6:2); "END; (*(BANKER*) " #PROCEDURE REGPAYMENTS; #BEGIN %PAGE (OUTPUT); %GOTOXY (3,12); %WRITE "('ENTER AMOUNT OF MONTHLY PALSE +IF (FIXEDPAYMENT >= MINPAYMENT) THEN -MINPAYMENT:= FIXEDPAYMENT; ) ,(*UPDATED BALANCE*) %BALANCE:= UNPDBALANCE-MINPAYMENT; ) %TOTINTEREST:= TOTINTEREST+INTEREST; (*ACCUM.INT.*) % %STATEMENT; (*WRITES OUTPUT*) AYMENT:= UNPDBALANCE*0.04 (*REQUIRED MIN.PAYMENT*) %ELSE 'BEGIN )IF(UNPDBALANCE >=10) THEN +MINPAYMENT:= 10 )ELSE +MINPAYMENT:= UNPDBALANCE; 'END; (*ELSE*) *(*TEST FOR OVERPAYMENT*) 'IF(FIXEDPAYMENT>UNPDBALANCE) THEN +MINPAYMENT:= UNPDBALANCE 'EROM FINANCE CHARGE*) %INTEREST:= BALANCE*0.015; (*VISA ANN.RATE=18% *)  (*MONTHLY RATE=1.5%*) * /(*NEW BALANCE*) %UNPDBALANCE:= INTEREST+BALANCE; % &(*COMPUTES EITHER MIN- OR FIXED PAYMENTS*) %IF (UNPDBALANCE>250) THEN 'MINP%IF (COUNT=X) THEN 'BEGIN )WRITELN ('PRESS TO CONTINUE':31); )READ (CH); )CLEARFROM(2); 'END; %IF (COUNT>X) THEN 'COUNT:= 1; "END; (*LINELIMIT*) ' "PROCEDURE BANKER; "BEGIN $HEADING; $REPEAT %MONTH:= MONTH+1; % &(*COMPUTES INTEREST FLSE 'WRITELN; 'STARTER; #END; (*PROLOGUE*) % #PROCEDURE CLEARFROM(LINE:INTEGER); #BEGIN %GOTOXY(0,LINE); %WRITELN (CHR(11)); #END; (*CLEARFROM*) # #PROCEDURE LINELIMIT(X:INTEGER); %VAR CH:CHAR; #BEGIN %COUNT:= COUNT+1; (*FOR PAGE LENGTH*) ' TO COMPUTE THE PAYMENTS AND COST OF'); %WRITELN  ('SEQUENTIAL PURCHASES,THE PROGRAM WILL RE-'); %WRITELN ('QUIRE ADJUSTMENTS.'); %WRITELN;WRITELN  ('PRESS TO CONTINUE: TO LEAVE'); %READ (CH); %IF (CH=CHR(27)) THEN 'EXIT (PROGRAM) %EOGRAM COMPUTES INTEREST AND'); %WRITELN  ('EITHER MINIMUM OR FIXED MONTHLY PAYMENTS'); %WRITELN  ('ON A SINGLE CREDIT CARD PURCHASE,BASED'); %WRITELN  ('ON VISA RATES.INTEREST COMPARISONS CAN'); %WRITELN  ('READILY BE MADE.'); %WRITELN;WRITELN  (%GOTOXY (6,12); %WRITE %('ENTER PURCHASE AMT(BALANCE):'); %READLN(BALANCE); %INITIALIZE; #END; (*STARTER*) " #PROCEDURE PROLOGUE; %VAR CH:CHAR; #BEGIN %PAGE (OUTPUT); %GOTOXY(0,4); %WRITELN('CREDIT CARD':25); %WRITELN;WRITELN  (' THIS PRPAYMENT':9, ,'BALANCE':8); #END; (*HEADING*)  #PROCEDURE STATEMENT; #BEGIN %WRITE(MONTH:2,INTEREST:6:2,TOTINTEREST:7:2,UNPDBALANCE:8:2); %WRITELN(MINPAYMENT:8:2,BALANCE:9:2); #END; (*STATEMENT*) # #PROCEDURE STARTER; #BEGIN %PAGE (OUTPUT); ST:= 0;TOTINTEREST:= 0; %UNPDBALANCE:= 0;MINPAYMENT:= 0;FIXEDPAYMENT:= 0; %MONTH:= 0;COUNT:= 0; #END; (*INIT*) # #PROCEDURE HEADING; #BEGIN %PAGE (OUTPUT); %WRITELN %('TOTAL':14,'UNPD':8,'MIN':8); %WRITELN  ('MO':2,'INT':5,'INT':6,'BALANCE':10,'ATED INT.*) %BALANCE, (*ORIG.PURCHASE-NEW BALANCE AFTER /MIN.MONTHLY PAYMENTS*) %UNPDBALANCE, (*BALANCE+FINANCE CHARGE*) %FIXEDPAYMENT, (*FIXED SUM PAYMENT OPTION*) %MINPAYMENT:REAL; (*MIN.MONTHLY PAYMENTS*)  #PROCEDURE INITIALIZE; #BEGIN %INTERE (KEYBOARD,CH);  IF (CH= 'A') THEN (BANKER %ELSE (REGPAYMENTS; #END; (*PAYOPTIONS*) #  BEGIN (*MAIN*) "PROLOGUE; "PAYOPTIONS; "WRITELN ('THE END':23);  END. N^eeN^Ӡe ('REPAYMENT COMPLETE IN':25,TERM(R,P,I,N):3:1,' YEARS'); %WRITELN; %WRITELN  ('ANOTHER CALCULATION?:-->Y/N':33); %READ(KEYBOARD,CH); $UNTIL (CH='N'); $WRITELN('THE END':23);  END. (*PROGRAM*) EAL;N:INTEGER):REAL; 'BEGIN )(*CONVERT INTEREST TO DECIMAL*) ,I := I/100; *(*CALCULATION*)  TERM := -(LOG(1-((P*I)/(N*R)))/(LOG(1+I/N)*N)); 'END;(*TERM*) '  BEGIN (*MAIN*) $CH :=('Y'); $REPEAT %DATAENTRY; %WRITELN ->(AMOUNT OF LOAN):':30); *READLN(P); *WRITE  ('ENTER AMT OF REGULAR PAYMENTS:':30); *READLN(R); *WRITE *('ANNUAL INTEREST RATE:':30); *READLN(I); *WRITE '('HOW MANY PAYMENTS/YEAR?:':30); *READLN(N); 'END;(*DATAENTRY*) ' $FUNCTION TERM(R,P,I:RR*) :INTEGER; 'CH (*FOR REPEAT CONTROL*) :CHAR; '  PROCEDURE DATAENTRY; 'BEGIN *WRITELN(CHR(12)); (*CLEARS SCREEN*) *GOTOXY(3,5); ,P:=0;I:=0;R:=0;N:=0; *WRITELN  ('COMPUTATION OF THE TERM OF A LOAN'); *WRITELN; *WRITE *('PRINCIPAL(*COMPUTES THE TERM OF A LOAN.BY MAX J.NAREFF  SAN FRANCISCO,CA.5/80*)   PROGRAM LOANTERM; $USES TRANSCEND;(*CALLS UP LIBRARY FUNCTION (LOG)*) $VAR 'P,(*PRINCIPAL OR LOAN*) 'I,(*ANNUAL INT.RATE*) 'R (*AMT.REGULAR PAYMENTS*) :REAL; 'N (*PAYMENTS/Y  PROGRAM REGPAYMENT;(*$I-*)(*COMPILER OPTION I*)  (*COMPUTES AMOUNT OF EACH REGULAR PAYMENT DUE  ON A LOAN OF'N'YEARS DURATION,FROM THE ANNUAL  INTEREST RATE AND THE NUMBER OF PAYMENTS PER  YEAR.BY MAX J.NAREFF,SAN FRANCISCO,CA.5/80*)  #USES TRAN= 0;ANNINTRATE := 0; .NUMPAYSPERYR:= 0; .WRITE  ('ENTER PRINCIPAL->AMOUNT OF LOAN:':32); .READLN(PRINCIPAL); .WRITE "('ENTER AMT.OF REGULAR PAYMENTS:':32); .READLN(REGPAYMENT); .WRITE #('NUMBER OF PAYMENTS PER YEAR?:':32); .READLN(NUMPAYSPERYR); SPERYR, 'TOTNUMPAYS, 'J (*LOOP ID*) :INTEGER; 'CH (*REPEAT LOOP CONTROL*):CHAR; ' $PROCEDURE DATAENTRY; )BEGIN - PAGE(OUTPUT); .GOTOXY(7,4); .WRITELN '('REMAINING BALANCE ON A LOAN'); .WRITELN; .PRINCIPAL := 0;REGPAYMENT := 0; .TOTNUMPAYS:(*COMPUTES REMAINING BALANCE ON A LOAN  .BY MAX J.NAREFF,SAN FRANCISCO,CA.5/80*)   PROGRAM REMBALANCE; $VAR (*VARIABLES DEFINED BELOW*) 'REGPAYMENT, 'PRINCIPAL, 'ANNINTRATE, 'REMAINBALANCE, 'INTPDWITHEAPAY, 'AMTAMORTEAPAY :REAL; 'NUMPAYN^3u ('$',REGPAY(P,N):6:2,' IN',N:3:1,' REGULAR PAYMENTS/YR FOR'); %WRITELN(Y:17:1,' YEARS'); %WRITELN; %WRITELN('THE END':23);  END. -N*Y)*LN(I/N+1)); )REGPAY := (I*(P/N))/(1-E); &END;(*REPAY*)   BEGIN (*MAIN BODY*) %PAGE(OUTPUT); %GOTOXY(0,8); %WRITELN (*HEADING*)  ('COMPUTES AMT OF REG.PAYMENTS ON A LOAN'); %DATA; %WRITELN EST RATE?: ':32); )READLN(I); )WRITE "('NUMBER OF PAYMENTS PER YEAR?: ':32); )READLN(N); )WRITELN; &END;(*DATA*) # #FUNCTION REGPAY(P,N:REAL):REAL; &(*CALCULATES AMT OF PAYMENT*) &VAR E :REAL; &BEGIN )I := I/100;(*% TO DECIMAL*) )E := EXP((SCEND; #VAR &P,Y,I,N :REAL;(*VARIABLES DEFINED BELOW*) $ #PROCEDURE DATA;(*ENTRIES*) &BEGIN )WRITELN; )WRITE "('ENTER ORIGINAL AMOUNT OF LOAN: ':32); )READLN(P); )WRITE $('ENTER TERM OF LOAN (YEARS): ':32); )READLN(Y); )WRITE '('ANNUAL INTER.WRITE '('ANNUAL INTEREST RATE?:':32); .READLN(ANNINTRATE); .WRITE #('TOTAL NUMBER OF PAYMENTS?:':32); .READLN(TOTNUMPAYS); )END;(*DATAENTRY*) ) %PROCEDURE CALCULATE; )BEGIN +(*CONVERT FROM % TO DECIMAL*) ,ANNINTRATE :=ANNINTRATE/100; 1(*INITIALIZE*) ,REMAINBALANCE := PRINCIPAL; ,INTPDWITHEAPAY:= 0; ,AMTAMORTEAPAY := 0; 1(*LOOP FOR CALCULATIONS*) ,FOR J := 1 TO TOTNUMPAYS DO .BEGIN /(*INTEREST PD WITH EACH PAYMENT*)  INTPDWITHEAPAY := REMAINBALANCE*ANNINTRATE/NUMPAYSPERYR; /(*$WRITELN; $WRITELN('THE END':23);  END. )/I); (END;(*TOTALVALUE*) (  BEGIN(*MAIN BODY*) $PAGE(OUTPUT); $GOTOXY(4,5); $WRITELN $('FUTURE VALUE OF REGULAR DEPOSITS'); $WRITELN('----------':25); $DATAENTRY; $WRITELN $('FUTURE VALUE IN ',Y:2:1,' YEARS=$',TOTALVALUE(R,Y,I,N):8:2); ('NUMBER OF YEARS?:':32); ,READLN(Y); ,WRITE (('NOMINAL INTEREST RATE?:':32); ,READLN(I); (END;(*DATAENTRY*) ( $FUNCTION TOTALVALUE(R,Y,I:REAL;N:INTEGER):REAL; (BEGIN ,I :=(I/N)/100;(*CONVERT % TO DECIMAL*) ,TOTALVALUE := R*((EXP((N*Y)*LN(1+I))-1*) $VAR (R,Y,I :REAL;(*VARIABLES DEFINED BELOW*) (N :INTEGER; ( ( $PROCEDURE DATAENTRY; (BEGIN ,WRITELN; ,WRITE "('ENTER AMT OF REGULAR DEPOSITS:':32); ,READLN(R); ,WRITE "('NUMBER OF DEPOSITS/YEAR?:':32); ,READLN(N); ,WRITE .  PROGRAM FUTUREVALUE;  (*COMPUTES FUTURE VALUE OF AN ACCOUNT WHEN REGULAR DEPOSITS ARE MADE  OVER A GIVEN NUMBER OF YEARS AT A KNOWN INTEREST RATE.  BY MAX J.NAREFF,SAN FRANCISCO,CA.5/80*)  $USES TRANSCEND;(*CALLS UP LIBRARY FUNCTIONS (EXP) & (LN)N^uHE END':23)  END. T 'DATAENTRY; 'CALCULATE; 'WRITELN  ('REMAINING BALANCE AFTER',TOTNUMPAYS:3,' PAYMENTS='); 'WRITELN +('$':16,REMAINBALANCE:10:2); 'WRITELN; 'WRITELN  ('ANOTHER CALCULATION?-->Y/N':33); 'READ(KEYBOARD,CH); %UNTIL (CH='N'); %WRITELN; %WRITELN('TAMT AMORTIZED EACH PAYMENT*)  AMTAMORTEAPAY := REGPAYMENT-INTPDWITHEAPAY;  (*REMAINING BALANCE ON PRINCIPAL*)  REMAINBALANCE := REMAINBALANCE-AMTAMORTEAPAY; .END;(*LOOP*) )END;(*CALCULATE*) +  BEGIN(*MAIN BODY*) %CH := ('Y'); %REPEAN^u1 2 G M E R C L Xc$2)?^IN -WRITELN  ('YEAR ',Y,' AMOUNT OF DEPRECIATION=$':26,AMTDEPREC(P,D,Y):8:2); -LINELIMIT(20); +END;(*LOOP*) -WRITELN; -WRITELN ('ANOTHER CALCULATION?-->Y/N':33); -READ(KEYBOARD,CH); %UNTIL (CH='N'); %WRITELN('THE END':23);  END. BEGIN 0WRITELN 0('PRESS TO CONTINUE':31); 0READ(CH); 0PAGE(OUTPUT); .END *ELSE .IF (COUNT>X) THEN 0COUNT := 0; (END;(*LINELIMIT*) #  BEGIN (*MAIN BODY*) %COUNT := 0;CH := 'Y'; %REPEAT (DATA; (FOR Y := 1 TO N DO(*LOOP FOR YEARS*) +BEG (*EQUATION:AMTDEPREC=P(RICE)*D(EP.RATE)*(1-D(EP.RATE)^(Y(EAR-1)*) % #AMTDEPREC := P*D*(EXP((Y-1)*LN(1-D))); (END;(*AMTDEPREC*) # %PROCEDURE LINELIMIT(X:INTEGER); (VAR CH :CHAR; (BEGIN *COUNT :=COUNT+1;(*FOR PAGE LENGTH*) *IF (COUNT=X) THEN . *READLN(D); *WRITE  ('NUMBER YRS OF DEPRECIATION?:':30); *READLN(N); *WRITELN; (END;(*DATA*) ( %FUNCTION AMTDEPREC(P,D:REAL;Y:INTEGER):REAL; *(*COMPUTATION OF AMOUNT*) (BEGIN *D := D/100;(*% TO DECIMAL*) ) ATA; (BEGIN *PAGE(OUTPUT); *WRITELN  ('THIS PROGRAM CALCULATES THE AMOUNT OF':39); *WRITELN %('DEPRECIATION OF AN ASSET.':32); *WRITELN('----------':25); *WRITE *('ENTER ORIGINAL VALUE:':30); *READLN(P); *WRITE '('ENTER DEPRECIATION RATE:':30); UP LIBRARY FUNCTIONS (EXP) & (LN)*) %VAR (P,(*ORIGINAL VALUE*) (D (*DEPRECIATION RATE*) :REAL; (N,(*YR OF DEPRECIATION*) (Y (*INDEX LOOP VARIABLE*) :INTEGER; (CH (*REPEAT CONTROL*) :CHAR; ' COUNT (*LINE COUNTER*) :INTEGER; ( %PROCEDURE D  (*PROGRAM CALCULATES AMOUNT OF DEPRECIATION WITHIN A PERIOD OF TIME,  FROM THE ORIGINAL VALUE,THE DEPRECIATION RATE AND THE YEAR OF  DEPRECIATION.PREPARED BY MAX J.NAREFF,SAN FRANCISCO,CA.5/80*)   PROGRAM AMTOFDEPRECIATION; %USES TRANSCEND;(*CALLSPROGRAM DEBTS;  {KEEPS TRACK OF ALL REVOLVING DEBTS ON DISK FILE}  {DISK FILE NAME IS STORE.DATA}   CONST (*CHANGED FOR APPLE PASCAL*) !CLERSCRN=12; !CLEREOL=29; !CLEREOS=11; !FIRSTLINE=3; !FIRSTYR=70; !LASTYR=99; !  TYPE !MNTH=1..12; !DAY=1END; {WITH} " CLRTO(FIRSTLINE); "END; {ADD} !  PROCEDURE INFORM; !BEGIN  WRITELN(' THIS PROGRAM KEEPS PERMANENT RECORDS OF YOUR');  WRITELN('DEBTS TO STORES, ETC, THAT REQUIRE MONTHLY PAYMENTS');  WRITELN('THE DATA IS KEPT ON A FILE NAMED - STOREIF X=0 THEN X:=BALANCE/10.0; #MINPAYMENT:=X; #WRITE(' HOW MUCH WAS THE LAST PAYMENT? '); #READLN(LASTPAYMENT); #WRITE(' WHAT IS THE CARRYING CHARGE IN PERCENT? '); #READLN(CARRYCHARGE); #MONTHLYCOST:=BALANCE*CARRYCHARGE/100.0; #TOTALCARRY:=0; ! #WRITELN(' ENTER DATE OF LAST PAYMENT'); #DATERROR:=TRUE; #WHILE DATERROR DO GETDATE(LASTPAID); #WRITE(' WHAT IS THE CURRENT BALANCE? '); #READLN(BALANCE); #WRITELN(' IF YOU KNOW MIN. PAYMENT, ENTER IT'); #WRITE(' ELSE ENTER 0 '); #READLN(X); #" !PROCEDURE ADD; "VAR C :CHAR; &X :REAL; "BEGIN #CLRSCRN; #LAST:=LAST+1; #INDEX:=LAST; # WITH STORES[INDEX] DO %BEGIN #WRITELN; #WRITELN(' ':10,'ADDING A NEW RECORD - -'); #WRITELN; #WRITE(' ENTER STORE/CREDITOR NAME-> '); #READLN(NAME); DATERROR THEN #BEGIN $WITH ADAY DO %BEGIN &MM:=M; &DD:=D; &YY:=Y; &WRITELN(' ':20,MM:2,'/',DD:2,'/',YY); %END; #END {NOT ERROR} "ELSE #BEGIN " WRITELN(' ??? DATE DD/MM/YY = ',D,M,Y); $WRITELN(' PLEASE TRY AGAIN'); #END; "END; {GETDATE} R ADAY:DATE); !VAR M,D,Y:INTEGER; !BEGIN "DATERROR:=FALSE; "WRITE(' Enter date as MM DD YY -> '); "READLN(M,D,Y); "IF (M<1) OR (M>12) THEN DATERROR:=TRUE; "IF (D<1) OR (D>31) THEN DATERROR:=TRUE; "IF (Y<20) OR (Y>99) THEN DATERROR:=TRUE; "IF NOT WRITELN(' ':4,'**NOTE: FIRST COMMAND SHOULD BE -D- FOR DATE');  END; {SHOWMENU}   PROCEDURE CHOOSE; !BEGIN "WRITE(' ':5,'Choose an item from the Menu->');  REPEAT $READ(REPLY); #UNTIL REPLY IN CHOICE !END; {CHOOSE}   PROCEDURE GETDATE(VA info');  WRITELN('F)':6,' Figure minimum payment');  WRITELN('R)':6,' Remove a creditor');  WRITELN('T)':6,' Total all debts');  WRITELN('Q)':6,' Quit');  IF DATEISCURRENT THEN SHOWDATE "ELSE 6,' todays Date');  WRITELN('G)':6,' Global list of creditors');  WRITELN('P)':6,' Pay a creditor');  WRITELN('C)':6,' Correct a record');  WRITELN('A)':6,' Add a creditor');  WRITELN('L)':6,' list Late payments');  WRITELN('E)':6,' Expanded creditorTO LINE-1 DO #BEGIN $GOTOXY(0,I); $CLREOL(I); #END; {DO} !END; !  PROCEDURE SHOWDATE; !BEGIN "WRITE(' ':14); "WRITELN('TODAY IS: ',TODAY.MM,'/',TODAY.DD,'/',TODAY.YY); !END; !  PROCEDURE SHOWMENU; !BEGIN  CLRFROM(FIRSTLINE);  WRITELN('D)': PROCEDURE CLRFROM(LINE:INTEGER); !BEGIN "GOTOXY(0,LINE); "WRITE(CHR(CLEREOS)); !END;   PROCEDURE CLREOL(LINE:INTEGER); !BEGIN "GOTOXY(0,LINE); "WRITE(CHR(CLEREOL)); !END; !  PROCEDURE CLRTO(LINE:INTEGER); !VAR I:INTEGER; !BEGIN "FOR I:=0 RAL :FILE OF STORECARD; !DATEISCURRENT :BOOLEAN; !CHOICE :CHOICESET; !REPLY :CHAR; !DATERROR :BOOLEAN; !   PROCEDURE CLRSCRN; !BEGIN "WRITE(CHR(CLERSCRN)); !END; ! RRY:REAL; "END; !  VAR !LAST,INDEX :INTEGER; !EXISTS,DONE :BOOLEAN;  TODAY :DATE; !THISPAYMENT :REAL; !STORE :STORECARD; !STORES :ARRAY[1..30] OF STORECARD; !STO..31; !CHOICESET=SET OF CHAR; !DATE= "RECORD #YY:INTEGER; #MM:INTEGER; #DD:INTEGER; "END;  STORECARD= "RECORD #NAME:STRING; #LASTPAID:DATE; #BALANCE:REAL; #LASTPAYMENT:REAL; #MINPAYMENT:REAL; #CARRYCHARGE:REAL; #MONTHLYCOST:REAL; #TOTALCA.DATA ');  WRITELN; !END; {INFORM} !  PROCEDURE OPENFILE; !VAR C:CHAR;  BEGIN !REWRITE(STORAL,'STORE.DATA'); !WRITELN; !WRITELN('** NEW FILE - STORE.DATA - WAS CREATED'); !INDEX:=0; !LAST:=0;  END; !  PROCEDURE REOPEN; !BEGIN "RESET(STORAL,'STORE.DATA'); "INDEX:=1; "STORES[INDEX]:=STORAL^; !WHILE NOT EOF(STORAL) DO "BEGIN #INDEX:=INDEX+1; #GET(STORAL); #STORES[INDEX]:=STORAL^; "END; {WHILE} ! INDEX:=INDEX-1; "LAST:=INDEX; !END; {REOPEN} !  PROCEDURE CLOSEFILE; !BIF ANSWER='N' THEN %BEGIN &GOTOXY(10,0); &WRITE(' USE ''C'' TO CORRECT IT'); $ END; {IF} $END {IF} "ELSE #BEGIN $GOTOXY(6,0); $WRITE('THAT NUMBER IS NOT IN THE LIST !'); #END; {IF} "END; {PAY}   {START A GROUP OF DUMMY PROCS HERE} !  PROCEDy how much ? '); $READLN(THISPAYMENT); $WITH STORES[I] DO %BEGIN &BALANCE:=BALANCE-THISPAYMENT; &LASTPAYMENT:=THISPAYMENT; &LASTPAID:=TODAY; %END; {WITH} $SHOWALL(I); $WRITELN; $WRITE(' ':10,'ALL O.K. ? '); $READ(ANSWER); # CLRTO(FIRSTLINE); $ WRITELN; #END; {WITH} !END; {SHOWALL}   PROCEDURE PAY; !VAR I:INTEGER; %ANSWER:CHAR; !BEGIN "CLRSCRN; "GLOBALS; "GOTOXY(5,0); "WRITE('Pay who ? '); "READLN(I); "IF (I<=LAST) AND (I>0) THEN #BEGIN $SHOWALL(I); $WRITELN; $WRITE(' ':10,'PaTELN('Monthly carrying charge: %..... ',CARRYCHARGE:8:2);  WRITELN('Monthly finance charge = $..... ',MONTHLYCOST:8:2);  WRITELN('Total charges to date = $..... ',TOTALCARRY:8:2);  WRITELN('Minimum payment = $............ ',MINPAYMENT:8:2); NAME);  WRITELN;  WRITE('Date of last payment :............ ');  WITH LASTPAID DO WRITELN(MM:2,'/',DD:2,'/',YY:2);  WRITELN;  WRITELN('Total balance due = $.......... ',BALANCE:8:2);  WRITELN('Amount of last payment = $..... ',LASTPAYMENT:8:2);  WRI "CLRTO(FIRSTLINE); "GOTOXY(0,0); "DATERROR:=TRUE; "WHILE DATERROR DO GETDATE(TODAY); "DATEISCURRENT:=TRUE;  END;  #  PROCEDURE SHOWALL(I:INTEGER); !VAR C:CHAR; #BEGIN $WITH STORES[I] DO %BEGIN &CLRSCRN; &GOTOXY(10,0);  WRITELN(I:2,') ',!WRITELN('-----------------------------------------------'); !IF REPLY='G' THEN ! BEGIN #CLREOL(0); #GOTOXY(9,0); #WRITE(' Hit a key to continue'); #READ(C);  CLRTO(FIRSTLINE); "END; {REPLY='G'}  END; {GLOBALS}   PROCEDURE GETTODAY; !BEGIN1; #WRITE(INDEX:3,'. '); #WRITE(NAME); #GOTOXY(18,LIN); #WRITE(BALANCE:8:2); #WITH LASTPAID DO WRITE(MM:6,'/',DD:2,'/',YY:2); #WRITE(LASTPAYMENT:8:2); #WRITELN; $END; {WITH} "END; {DO} C2); $IF C2='Y' THEN CLOSEFILE; #END; {IF C1='Y'} !END; {QUIT} !  PROCEDURE GLOBALS; !VAR C:CHAR;  LIN:INTEGER; !BEGIN "CLRSCRN; "GOTOXY(0,FIRSTLINE); "FOR INDEX:=1 TO LAST DO #BEGIN # WITH STORES[INDEX] DO %BEGIN #LIN:=FIRSTLINE+INDEX-{INIT}   PROCEDURE QUIT; !VAR C1,C2:CHAR; !BEGIN "CLRTO(FIRSTLINE); "GOTOXY(5,0); "WRITE(' DO YOU WANT TO QUIT (Y/N)? '); "READ(C1); "IF C1='Y' THEN #BEGIN $DONE:=TRUE; $WRITELN; $WRITE(' DO YOU WANT THIS TO BE THE NEW FILE (Y/N)? '); $READ($WRITELN(' ANY EXISTING FILE WILL BE CLOBBERED!!'); " WRITE(' DO YOU WANT TO START A NEW ONE ? '); $READ(C2); $IF C2<>'Y' THEN C:='Y'; #END; "EXISTS:=FALSE; "IF C='Y' THEN EXISTS:=TRUE; "IF EXISTS THEN REOPEN #ELSE OPENFILE;  CLRSCRN;  END; FILE DOES NOT EXIST'); "WRITELN(' (it wont on the very first run)'); "WRITELN('YOU MUST CREATE ONE BY USING THE'); "WRITELN(' A (ADD) COMMAND');  WRITE('DOES A DATA FILE EXIST (Y/N)? '); "READ(C); "IF C<>'Y' THEN #BEGIN $WRITELN; ERMANENT ON DIR.} "DONE:=TRUE; !END; {CLOSEFILE} !  PROCEDURE INIT; !VAR C,C2:CHAR; !BEGIN "CLRSCRN; "INFORM; "DATEISCURRENT:=FALSE; "DONE:=FALSE; "CHOICE:=['D','G','P','C','A','L','E','F','R','T','Q']; "WRITELN; "WRITELN('WARNING - IF A DATA EGIN "CLOSE(STORAL,LOCK); {CLOSE EXISTING FILE} "REWRITE(STORAL,'STORE.DATA'); {OPEN A NEW ONE} "FOR INDEX:=1 TO LAST DO #BEGIN $STORAL^:=STORES[INDEX]; $PUT(STORAL); #END; {OF INDEXING} "CLOSE(STORAL,LOCK); {MAKE IT PURE LATE; !BEGIN END; !  PROCEDURE EXPOSE; !VAR I:INTEGER; ! C:CHAR; !BEGIN "CLRSCRN; "GLOBALS; "GOTOXY(5,0); "WRITE('Expand which one (number) ? '); "READLN(I); "IF (I>0) AND (I<=LAST) THEN #BEGIN $SHOWALL(I); $WRITE(' - - Hit a key to cont. '); $READ(C); ! CLRTO(FIRSTLINE); #END !ELSE "BEGIN #GOTOXY(6,1); #WRITE('THAT CHOICE IS NOT IN THE LIST'); "END; {ELSE}  END; {EXPOSE} !  PROCEDURE EXPAND; !VAR C:CHAR; " I:INTEGER; "BEGIN #CLRTO(FIRSTECT; !'A':ADD; !'L':LATE; !'E':EXPAND; !'F':FIGUREMIN; !'R':REMOVE1; !'T':TOTALALL; !'Q':QUIT; #END; {CASE} !END; {SERVE}   BEGIN {MAIN PROG} !INIT; "REPEAT #SHOWMENU; #CHOOSE; #SERVE; "UNTIL DONE  END.  &UNTIL WHAT='Q'; % CLRTO(FIRSTLINE); %END {IF} #ELSE $BEGIN %GOTOXY(6,1); %WRITE('THAT NUMBER IS NOT IN THE RECORDS'); $END; {ELSE} "END; {CORRECT} )  PROCEDURE SERVE;  BEGIN #CASE REPLY OF !'D':GETTODAY; !'G':GLOBALS; !'P':PAY; !'C':CORRent monthly carry charge ? '); )READLN(CARRYCHARGE); )END; $'C':BEGIN )WRITE('Cost per month ? '); )READLN(MONTHLYCOST); )END; $'T':BEGIN )WRITE('Total carry charge to date ? '); )READLN(TOTALCARRY); )END; $'Q':; ) END; {CASE} )END; $'D':BEGIN )DATERROR:=TRUE; )WHILE DATERROR DO GETDATE(LASTPAID); )END; $'L':BEGIN )WRITE('amount of Last payment'); )READLN(LASTPAYMENT); )END; $'M':BEGIN )WRITE('Minumum payment ? '); )READLN(MINPAYMENT); )END; $'P':BEGIN )WRITE('Perc,C)ost/mnth,T)otal charge,Q)uit'); %REPEAT &READ(KEYBOARD,WHAT) %UNTIL WHAT IN WHATSIT;  WITH STORES[I] DO &CASE WHAT OF $'N':BEGIN )WRITE('New Name? ');  READLN(NAME); )END; $'B':BEGIN )WRITE('New Balance= '); )READLN(BALANCE); "GOTOXY(5,0); "WRITE('Correct which record (number) ? ');  READLN(I);  IF (I>0) AND (I<=LAST) THEN " BEGIN $REPEAT %SHOWALL(I); %WRITELN('CORRECT one of the following:'); %WRITELN('N)ame,B)alance,D)ate,L)astpmnt,M)inpmnt'); %WRITELN('P)ercentT IN THE LIST!!'); $END; {ELSE) "END; {IF} !END; {REMOVE1} !  {END OF DUMMY PROCS}   PROCEDURE CORRECT; !VAR WHAT:CHAR; %WHATSIT:SET OF CHAR; %I:INTEGER; !BEGIN "WHATSIT:=['N','B','D','L','M','P','C','T','Q']; "CLRSCRN; "GLOBALS; WRITE(' Remove ',NAME,' ? '); #READ(C); #IF C='Y' THEN ! BEGIN %LAST:=LAST-1; %FOR INDEX:=I TO LAST DO &STORES[INDEX]:=STORES[INDEX+1]; %END; {C='Y'} ! END {IN LIST} #ELSE {NOT IN LIST} $BEGIN %CLREOL(1); ! WRITE(' THAT NUMBER IS NOIRSTLINE); !END; {TOTALALL} "  PROCEDURE REMOVE1; !VAR I:INTEGER; %C:CHAR; !BEGIN "CLRSCRN; "GLOBALS; "CLRTO(FIRSTLINE); "GOTOXY(5,0); "WRITE('Remove which one (number) ? '); "READLN(I); "IF (I>0) AND (I<=LAST) THEN #BEGIN #WITH STORES[I] DO"WRITELN(' $',TOTALBALANCE:8:2); "WRITELN; "WRITELN(' And the total carrying charge per month is'); "WRITELN(' $',TOTALMONTH:7:2); "WRITELN; "WRITELN(' When you''ve seen enough'); $WRITE(' press a key.... '); "READ(C); ! CLRTO(F; "FOR I:=1 TO LAST DO #WITH STORES[I] DO $BEGIN %TOTALBALANCE:=TOTALBALANCE+BALANCE; %TOTALMONTH:=TOTALMONTH+MONTHLYCOST; $END; {FOR-WITH} "WRITELN; "WRITELN; "WRITELN(' Your Total balance is an incredible'); ND; {EXPAND}   PROCEDURE FIGUREMIN; !BEGIN END; !  PROCEDURE TOTALALL; !VAR "I :INTEGER; "TOTALMONTH,TOTALBALANCE :REAL; "C :CHAR; !BEGIN "CLRSCRN; "TOTALMONTH:=0; "TOTALBALANCE:=0LINE); #GOTOXY(5,0); #WRITE('Do you want to step through all ? '); #READ(C); #IF C='Y' THEN $BEGIN %FOR I:=1 TO LAST DO &BEGIN 'SHOWALL(I); 'WRITE(' - - Hit a key to cont. '); 'READ(C); $ CLRSCRN; &END; {FOR} $END {'Y'} "ELSE #EXPOSE  ESEARS   K ^ ^$)PA@ACROCKER ^Ǖá^^ál۟ˡP@EzC AzC JOE'S MEAT^Ǖ2ELSE WRITELN(HALVES:5,' HALF DOLLARS');*) &QUARTERS := QUARTERS + 2*HALVES; $END; "IF QUARTERS>0 THEN $BEGIN &IF LINE<23 THEN LINE:=LINE+1; &IF QUARTERS=1 THEN WRITELN(' 1 QUARTER') & ELSE WRITELN(QUARTERS:5,' QUARTERS'); $END; "* could be ONE DOLLAR BILL') *) 0ELSE WRITELN(ONES:5,' SUSAN B. ANTHONY DOLLARS'); 3(* could be ONE DOLLAR BILLS'); *) $END; "IF HALVES>0 THEN $BEGIN &(* could be IF LINE<23 THEN LINE:=LINE+1; &IF HALVES=1 THEN WRITELN(' 1 HALF DOLLAR') &IF LINE<23 THEN LINE:=LINE+1; &IF FIVES=1 THEN WRITELN(' 1 FIVE DOLLAR BILL') 1ELSE WRITELN(FIVES:5,' FIVE DOLLAR BILLS'); $END; "IF ONES>0 THEN $BEGIN &IF LINE<23 THEN LINE:=LINE+1; &IF ONES=1 THEN WRITELN(' 1 SUSAN B. ANTHONY DOLLAR') 3(OLLAR BILL') 4ELSE WRITELN(TWENTIES:5,' TWENTY DOLLAR BILLS'); $END; "IF TENS>0 THEN $BEGIN &IF LINE<23 THEN LINE:=LINE+1; &IF TENS=1 THEN WRITELN(' 1 TEN DOLLAR BILL') 0ELSE WRITELN(TENS:5,' TEN DOLLAR BILLS'); $END;  IF FIVES>0 THEN $BEGIN$BEGIN &IF LINE<23 THEN LINE:=LINE+1; &IF FIFTIES=1 THEN WRITELN(' 1 FIFTY DOLLAR BILL') 3ELSE WRITELN(FIFTIES:5,' FIFTY DOLLAR BILLS'); $END; "IF TWENTIES>0 THEN $BEGIN &IF LINE<23 THEN LINE:=LINE+1; &IF TWENTIES=1 THEN WRITELN(' 1 TWENTY DGE(AMT:INTEGER;VAR MONEY:INTEGER);  "BEGIN $MONEY:=0; $WHILE CHANGE>=AMT DO &BEGIN CHANGE:=CHANGE-AMT;MONEY:=MONEY+1;END; "END; " "  PROCEDURE DISPLAY;   BEGIN  IF LINE<23 THEN LINE:=LINE+1; "WRITELN('YOUR CHANGE IS:'); "IF FIFTIES>0 THEN $BEGIN &WRITE('>');READ(ITEM); &IF LINE<23 THEN LINE:=LINE+1; &PRICE:=ITEM/100; &GOTOXY( 0,LINE);WRITE ('>',ITEM,' '); &GOTOXY(20,LINE);WRITELN('$',(PRICE):6:2); &SUM:=SUM+ITEM; $END;  UNTIL EOLN; "WRITELN;  END;    PROCEDURE MAKECHANVAR LINE,SUM,AMTTEND,CHANGE:INTEGER;  AMTPAID,TOTAL:REAL;  FIFTIES,TWENTIES,TENS,FIVES,ONES:INTEGER;  HALVES,QUARTERS,DIMES,NICKELS,PENNIES:INTEGER;    PROCEDURE ENTER;   VAR PRICE:REAL;  ITEM:INTEGER;  BEGIN "SUM:=0; "REPEAT  { Program from Gary Boudreaux - Dallas Apple Corps }  { February 1981 }  { A couple of changes by Lee Meador (Susie B & no }  { half dollars) March 1981 }    PROGRAM CASHREGISTER;   N^âá^^ál۟ˡP ;EC@CIF DIMES>0 THEN $BEGIN &IF LINE<23 THEN LINE:=LINE+1; &IF DIMES=1 THEN WRITELN(' 1 DIME') 1ELSE WRITELN(DIMES:5,' DIMES'); $END;  IF NICKELS>0 THEN $BEGIN &IF LINE<23 THEN LINE:=LINE+1; &IF NICKELS=1 THEN WRITELN(' 1 NICKEL') 3ELSE WRITELN(NICKELS:5,' NICKELS'); $END; "IF PENNIES>0 THEN $BEGIN &IF LINE<23 THEN LINE:=LINE+1; &IF PENNIES=1 THEN WRITELN(' 1 PENNY') 3ELSE WRITELN(PENNIES:5,' PENNIES'); $END;  END;    BEGIN (* MAIN PROGRAM *) "PAGE(OUTPUT); "GOTOXY(13,0);WRITE0 0.00000 1.75720E11 9.00000E1-3.53348E31-3.68459E31 1.00000E2 1.50000E1-1.31553E4 N^ES); "MAKECHANGE(50,HALVES); "MAKECHANGE(25,QUARTERS); "MAKECHANGE(10,DIMES); "MAKECHANGE(5,NICKELS); "MAKECHANGE(1,PENNIES); "DISPLAY; "END.  2,LINE) ELSE GOTOXY(22,(LINE-1));  WRITELN('$',AMTPAID:6:2); "IF LINE<23 THEN LINE:=LINE+1; "WRITELN; "CHANGE:=AMTTEND-SUM; "MAKECHANGE(5000,FIFTIES); "MAKECHANGE(2000,TWENTIES); "MAKECHANGE(1000,TENS); "MAKECHANGE(500,FIVES); "MAKECHANGE(100,ON"IF LINE<23 THEN LINE:=LINE+1; "GOTOXY(20,LINE);WRITELN('$',(TOTAL):6:2); "IF LINE<23 THEN LINE:=LINE+1; "WRITELN;  IF LINE<23 THEN LINE:=LINE+1; "WRITE('AMOUNT TENDERED ');READLN(AMTTEND);  AMTPAID:=AMTTEND/100; "IF LINE<23 THEN GOTOXY(2LN('CASH REGISTER'); "WRITELN; "WRITELN('USE SPACE BAR TO ENTER ITEMS'); "WRITELN('USE INSTEAD OF SPACE BAR FOR LAST ITEM'); "LINE:=4; "WRITELN; "ENTER; "IF LINE<23 THEN LINE:=LINE+1; "GOTOXY(20,LINE);WRITELN('-------'); "TOTAL:=SUM/100;