home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Oakland CPM Archive
/
oakcpm.iso
/
cpmug
/
cpmug044.ark
/
BUDGETCH.BAS
< prev
next >
Wrap
BASIC Source File
|
1984-04-29
|
4KB
|
108 lines
REM BUDGETCH.BAS
REM
REM This program is designed to make changes in erroneous entries
REM made with BUDGET1.BAS. It works with a dual or single disc system
REM and CBASIC, version 2.
REM
PRINT "THIS PROGRAM CORRECTS ENTRIES MADE WITH BUDGET1.BAS."
PRINT:PRINT:PRINT
10 INPUT "Name the file you are accessing:"; LINE RESP$
REM * *we check the file for a reasonable name* *
IF RESP$="" THEN GOTO 10
IF LEN(RESP$)>12 THEN PRINT "TOO LONG.":GOTO 10
TYPE$=RIGHT$(UCASE$(RESP$),4) REM check on last four letters .xxx
DOT$=LEFT$(TYPE$,1)
IF DOT$<>"." THEN PRINT "ERROR IN TYPE.":GOTO 10
FILE.NAME$=UCASE$(RESP$)
REM * *end of checking procedure* *
FALSE%=0
TRUE%=-1
DEF FN.GET.TO.END%(FILE.NOMBRE$,REC.SIZE%,FILE.NUM%,POSITION%)
FN.GET.TO.END%=FALSE%
FILE.SIZE%=SIZE(FILE.NOMBRE$)
IF FILE.SIZE%=0 THEN \ false if no file exists
RETURN \
ELSE FN.GET.TO.END%=TRUE%
IF END # FILE.NUM% THEN 15
POSITION%=INT%(FLOAT(FILE.SIZE%)*128/REC.SIZE%)
PRINT TAB(15); "locating end of file"
READ # FILE.NUM%,POSITION%;
WHILE TRUE%
READ # FILE.NUM%; LINE DUMMY$
POSITION%=POSITION%+1
WEND
15 FN.GET.TO.END%=POSITION%
RETURN
FEND REM * *end of this function* *
POSN%=0
OPEN FILE.NAME$ RECL 64 AS 1 REM we see how big the file is
RECORD.NUMBER%=FN.GET.TO.END%(FILE.NAME$,64,1,POSN%)
M%=RECORD.NUMBER% -1 REM pointer ends one past end of records
CLOSE 1
REM
DIM CAT$(M%,4)
DIM AMT(M%,4)
DIM PAYEE$(M%)
DIM DATE%(M%)
DIM TOTAL(M%)
DIM STATUS%(M%)
20 PRINT "We will now access records one by one and present them for your"
PRINT "inspection."
OPEN FILE.NAME$ RECL 64 AS 1
N%=1 REM index for the read # routine
WHILE TRUE%
IF END # 1 THEN 25
READ # 1,N%;DATE%(N%),PAYEE$(N%),CAT$(N%,1),AMT(N%,1),CAT$(N%,2),AMT(N%,2),CAT$(N%,3),AMT(N%,3),CAT$(N%,4),AMT(N%,4)
PRINT DATE%(N%);PAYEE$(N%);":";CAT$(N%,1);AMT(N%,1);CAT$(N%,2);AMT(N%,2);CAT$(N%,3);AMT(N%,3);CAT$(N%,4);AMT(N%,4)
TOTAL(N%)=0
FOR K%=1 TO 4
TOTAL(N%)=TOTAL(N%)+AMT(N%,K%)
NEXT K%
PRINT TAB(25);"<cr> if this is OK; if not, type 'N':":INPUT LINE OK$
IF OK$="N" THEN STATUS%(N%)=0 ELSE STATUS%(N%)=-1
N%=N%+1 REM index to help us get back to correct record
IF N%>M% THEN GOTO 25
WEND
25 REM We have gotten all records out of the file, now we need to locate
REM the errors and correct them in the memory; then put back the file.
FOR K%=1 TO (N%-1)
WHILE NOT STATUS%(K%)
30 PRINT DATE%(K%);" ";PAYEE$(K%);":"
FOR L%=1 TO 4
PRINT CAT$(K%,L%);" ";"$";AMT(K%,L%)
NEXT L%
PRINT "enter correct data for all 10 fields:"
INPUT "correct date:"; DATE%(K%)
INPUT "correct Payee:"; PAYEE$(K%)
TOT=0
FOR L%=1 TO 4
PRINT "category (";L%;"):":INPUT LINE CAT$(K%,L%)
PRINT "amount (";L%;"):$":INPUT AMT(K%,L%)
TOT=TOT+AMT(K%,L%)
NEXT L%
IF TOT<>TOTAL(K%) THEN PRINT "New total not equal to old."
PRINT "<cr> if no mistakes were made in this entry."
INPUT LINE R$
IF R$<>"" THEN GOTO 30
PRINT "corrected amounts entered into memory."
STATUS%(K%)=-1
WEND
NEXT K%
REM
REM corrected data is now entered back onto the disc
REM
CLOSE 1
CREATE FILE.NAME$ RECL 64 AS 1
FOR K%=1 TO (N%-1)
PRINT # 1;DATE%(K%),PAYEE$(K%),CAT$(K%,1),AMT(K%,1),CAT$(K%,2),AMT(K%,2),CAT$(K%,3),AMT(K%,3),CAT$(K%,4),AMT(K%,4)
PRINT PAYEE$(K%);" information entered onto disc."
NEXT K%
CLOSE 1
PRINT (N%-1);" records have been entered to the disc."
PRINT "Any more files to be corrected? [YES=1,NO=0] :"
INPUT REPEAT%
IF REPEAT% THEN GOTO 10 ELSE PRINT TAB(25);"Adios!"
END
EOF