home *** CD-ROM | disk | FTP | other *** search
- /*
- **
- ** CHECKBOOK.REXX CheckBook Balancing in AREXX
- ** By: James M. Cates (16.03.91)
- **
- */
-
- SIGNAL ON BREAK_C
- SIGNAL ON SYNTAX
- SIGNAL ON IOERR
- TRACE OFF
-
- VERSION = '$VERS1.0 (16.03.91)'
- AUTHOR = 'By: James M. Cates'
- TRUE = '1'
- FALSE = '0'
- B = '1B'X'[1m'
- D = '1B'X'[0m'
- R = '1B'X'[33m'
- CLS = '0C'X
- LF = '0A'X
- ENT1 = 'Enter ('R'W'D')ithdraw,('R'D'D')eposit,'
- ENT2 = '('R'N'D')ew Book,('R'S'D
- ENT3 = ')ave,('R'O'D')pen, ('R'K'D')ill or ('R'Q'D')uit'
-
- IF ~EXISTS('libs:rexxsupport.library') THEN DO
- SAY 'RexxSupport.library not in Libs: ... Aborting'
- EXIT 10
- END
-
- IF ~SHOW('L','rexxsupport.library') THEN
- CALL ADDLIB('rexxsupport.library',0,-30)
-
- INSTRUCT:
- SAY
- SAY B||R'CHECKBOOK.REXX 'D||VERSION
- SAY AUTHOR
- SAY
- SAY ENT1||ENT2||ENT3
- SAY 'after prompt W, D, N, S, O, K or Q: '
- SAY
- SAY 'Enter a positive number after the prompt AMOUNT: '
- SAY
- SAY 'Begin by entering a UserName.'
-
- ENTER_NAME:
- SAY 'You MUST enter a UserName if you wish to save/retrieve files.'
- SAY 'UserName should be '||B||'ONE'||D||' word '||R||'12 CHAR LIMIT'||D
- SAY
- PullName = WRITECH('STDOUT',B'USERNAME : 'D)
- PULL UNAME
- IF (LENGTH(UNAME) > 12) THEN DO
- SAY LF||R||'TRY AGAIN...TOO LONG'||D
- CALL ENTER_NAME
- END
- SAY
- SAY 'Now enter a Starting balance.'
- SAY
- PullStart = WRITECH('STDOUT',B'AMOUNT : 'D)
- PULL STARTBAL
- IF STARTBAL = '' THEN (STARTBAL = '0')
-
- NUMCHECK = '0'
- NUMDEP = '0'
- CURBAL = STARTBAL
-
- MAIN:
- DO BALANCE = 1
- READT = READTRANS(TRANTYPE, AMOUNT)
- UPDAT = UPDATE(TRANTYPE, AMOUNT, CURBAL, NUMCHECK, NUMDEP)
- END
-
- PROCESS:
- NUM = '0'
- STARTBAL = '0'
- CURBAL = '0'
- NUMCHECK = '0'
- NUMDEP = '0'
- AMOUNT = '0'
- UNAME = ''
- RETURN 0
-
- READTRANS:
- OPT1 = '['||R||'W'||D||']ithdraw,['||R||'D'||D||']eposit,['||R||'N'||D||']ew User,'
- OPT2 = '['||R||'S'||D||']ave, ['||R||'O'||D||']pen, '
- OPT3 = '['||R||'K'||D||']Ill Entry or ['||R||'Q'||D||']uit:'
- OPT_PROMT = OPT1||OPT2||OPT3
- SAY
- PULLTRAN = WRITECH('STDOUT',OPT_PROMT)
- PULL TRANTYPE
- IF TRANTYPE = 'W'|TRANTYPE = 'D' THEN DO
- SAY
- PULLAMT = WRITECH('STDOUT',B'AMOUNT : 'D)
- PULL AMOUNT
- END
- ELSE DO
- NOP
- END
- SAY CLS
- SAY
- RETURN 0
-
- UPDATE:
- SELECT
- WHEN TRANTYPE = 'D' THEN
- DO
- CURBAL = (CURBAL + AMOUNT)
- NUMDEP = (NUMDEP + 1)
- SAY
- SAY 'Depositing $ ' AMOUNT
- SAY 'Balance of $ ' CURBAL
- END
- WHEN TRANTYPE = 'W' THEN
- DO
- CURBAL = (CURBAL - AMOUNT)
- NUMCHECK = (NUMCHECK + 1)
- SAY
- SAY 'Check for $ ' AMOUNT
- SAY 'Balance of $ ' CURBAL
- if (CURBAL < 0) then
- SAY(B'WARNING! You are overdrawn.'D)
- END
- WHEN TRANTYPE = 'N' THEN
- DO
- SIGNAL REPORT
- END
- WHEN TRANTYPE = 'S' THEN
- DO
- NUM = '0'
- SIGNAL CHECK_SAVE_BAL
- END
- WHEN TRANTYPE = 'O' THEN
- DO
- SIGNAL OPEN_SAVED
- END
- WHEN TRANTYPE = 'K' THEN
- DO
- SIGNAL KILL_ENTRY
- END
- WHEN TRANTYPE = 'Q' THEN
- DO
- SIGNAL ENDIT
- END
- OTHERWISE
- DO
- SAY B'Invalid transaction type ' TRANTYPE '..transaction ignored'D
- END
- END
- RETURN 0
-
- REPORT:
- SAY CLS||LF
- SAY 'LAST USER WAS '||B||UNAME||D||'.'
- SAY 'STATS FOR '||B||UNAME||D||':'||LF
- SAY
- SAY 'Starting balance was: $ ' STARTBAL
- SAY 'Final balance is: $ ' CURBAL
- SAY 'Number of checks written : ' NUMCHECK
- SAY 'Number of deposits made : ' NUMDEP
- SAY
- SAY 'NEW BOOK REQUESTED....SETTING UP....CLEARING TABLES'
- PROC = PROCESS(STARTBAL, CURBAL, NUMCHECK, NUMDEP)
- INST = INSTRUCT(STARTBAL)
- RETURN 0
-
- CHECK_SAVE_BAL:
- SAY CLS
- SAY
- SAY 'FILE WILL BE SAVED AS REXX:CheckBook/'||R||'UserName-Number.JulianDate.CBRX'||D
- SAY
- NUM = NUM
- FILENAME = 'REXX:checkbook/'UNAME'-'NUM'.'||DATE(J)||'.CBRX'
- CREAT_DIR = MAKEDIR('REXX:CheckBook')
- TEST_NAME = EXISTS(FILENAME)
- IF TEST_NAME THEN DO
- NUM = (NUM + 1)
- FILENAME = 'REXX:checkbook/'UNAME'-'NUM'.'||DATE(J)||'.CBRX'
- SIGNAL CHECK_SAVE_BAL
- END
- ELSE SIGNAL OPEN_WRITE
-
- OPEN_WRITE:
- RC_OPEN = OPEN('SAVE_FILE',FILENAME,'W')
- IF ~RC_OPEN THEN DO
- SAY 'A PROBLEM OCCURED IN OPENING THE SAVE FILE'
- SAY 'RETURNING TO MAIN PROGRAM...'
- CALL MAIN
- END
- SIGNAL WRITE_DATA
-
- WRITE_DATA:
- ASC.1 = '**@@**CHECKBOOK.REXX 'VERSION' JMC'
- ASC.2 = '**@@**SAVED.DATA.FILE'
- ASC.3 = '**@@**DATE.SAVED+++++++'DATE(E)
- ASC.4 = '**@@**FILE.NAME++++++++'UNAME||DATE(J)'.CBRX'
- ASC.5 = '**@@**UNAME++++++++++++'UNAME
- ASC.6 = '**@@**CURBAL+++++++++++'CURBAL
- ASC.7 = '**@@**NUMCHECK+++++++++'NUMCHECK
- ASC.8 = '**@@**NUMDEP+++++++++++'NUMDEP
- ASC.9 = '**@@**END.DATA'
-
- DO LIN = 1 TO 8
- HEX.LIN = C2X(ASC.LIN)
- LPUT_ASC = WRITELN('SAVE_FILE',HEX.LIN)
- END
- PUT_ASC = WRITECH('SAVE_FILE',ASC.9)
- RC_CLOSE = CLOSE('SAVE_FILE')
- IF ~RC_CLOSE THEN
- SAY 'A PROBLEM OCCURED IN CLOSING '||R||FILENAME||D||' CHECK THE FILE...'
- ELSE
- SAY 'DATA SUCCESSFULLY SAVED AS '||B||FILENAME||D
- CALL MAIN
-
- OPEN_SAVED:
- SAY 'DIRECTORY LISTING OF '||R||'REXX:CHECKBOOK'||D
- SAY
- SAY SHOWDIR('REXX:CHECKBOOK','F',LF)
- SAY 'ENTER FILENAME '||R||'WITHOUT'||D||' .CBRX SUFFIX'
- GET_FILE = WRITECH('STDOUT','OPEN WHICH FILE ? ')
- PULL TEST_FILENAME
- SAY
- D_FILENAME = 'REXX:CHECKBOOK/'||TEST_FILENAME||'.CBRX'
- RS_OPEN = OPEN('DATA_FILE',D_FILENAME,'R')
- IF RS_OPEN = FALSE THEN DO
- SAY 'A PROBLEM OCCURED OPENING 'D_FILENAME
- SAY 'RETURNING TO PROGRAM...'
- CALL OPEN_SAVED
- END
-
- TEST_STRING = '2A2A40402A2A434845434B424F4F4B2E52455858'
- COMP_STRING = READCH('DATA_FILE',40)
- IF COMP_STRING ~= TEST_STRING THEN DO
- SAY 'THAT IS NOT A VALID CHECKBOOK DATA FILE...SORRY.'
- CALL OPEN_SAVED
- END
- SIGNAL GET_DATA
-
- GET_DATA:
- DO DAT = 1 TO 8
- DATA.DAT = READLN('DATA_FILE')
- END
-
- D_DAY = RIGHT(X2C(DATA.3),8)
- UNAME = STRIP(RIGHT(X2C(DATA.5),12),'L','+')
- CURBAL = STRIP(RIGHT(X2C(DATA.6),12),'L','+')
- NUMCHECK = STRIP(RIGHT(X2C(DATA.7),9),'L','+')
- NUMDEP = STRIP(RIGHT(X2C(DATA.8),10),'L','+')
-
- SAY 'DATE DATA FILE SAVED : 'D_DAY
- SAY 'DATA FILE BELONGS TO : 'UNAME
- SAY 'CURRENT BALANCE IS : $'CURBAL
- SAY 'NUMBER OF CHECKS DRAWN : 'NUMCHECK
- SAY 'NUMBER OF DEPOSITS MADE : 'NUMDEP
- SAY
- SAY 'FILENAME WILL BE UPDATED IF SAVED AGAIN.'
- SAY 'PRESS ANY KEY TO CONTINUE...'
- PULL ANYCHAR
- SAY
- RS_CLOSE = CLOSE('DATA_FILE')
- CALL MAIN
-
- KILL_ENTRY:
- SAY 'DIRECTORY LISTING OF '||R||'REXX:CHECKBOOK'||D
- SAY
- SAY SHOWDIR('REXX:CHECKBOOK','F',LF)
- SAY 'ENTER FILENAME '||R||'WITHOUT'||D||' .CBRX SUFFIX'
- GET_FILE = WRITECH('STDOUT','OPEN WHICH FILE ? ')
- PULL TEST_KILLFILE
- SAY
- K_FILENAME = 'REXX:CHECKBOOK/'||TEST_KILLFILE||'.CBRX'
- KILLIT = DELETE(K_FILENAME)
- IF ~KILLIT THEN DO
- SAY 'UNABLE TO DELETE ENTRY '||R||K_FILENAME||D||' !'
- SAY 'LET''S TRY AGAIN'
- SIGNAL KILL_ENTRY
- END
- SAY ''||R||K_FILENAME||D||' SUCCESSFULLY DELETED'||LF
- KILL_AGAIN = WRITECH('STDOUT','DELETE ANOTHER FILE (Y/N) ? ')
- PULL KILL_QUERY
- IF KILL_QUERY = UPPER('y') THEN DO
- CALL KILL_ENTRY
- END
- SAY 'RETURNING TO MAIN...'
- CALL MAIN
-
- BREAK_C:
- SAY
- SAY B'PROGRAM ABORTED...'D
- SAY
- EXIT 10
-
- SYNTAX:
- SAY CLS||LF
- SYN1 = 'ERROR CODE 'RC' MEANING ('
- SYN2 = R||B||ERRORTEXT(RC)||D
- SYN3 = ') WAS RETURNED AFTER LINE '||SIGL||' WAS EXECUTED'
- SAY SYN1||SYN2||SYN3
- SAY
- SAY 'EXECUTION HALTED.'
- SAY
- EXIT 5
-
- IOERR:
- SAY CLS||LF
- SAY 'A I/O ERROR OCCURED...IT WAS NOT FATAL'
- SAY 'RETURNING TO MAIN...TRY AGAIN'
- SIGNAL MAIN
-
- ENDIT:
- SAY
- SAY 'LAST USER WAS '||B||UNAME||D||'.'
- SAY 'STATS FOR '||B||UNAME||D||':'||LF
- SAY 'Starting balance was: $ ' STARTBAL
- SAY 'Final balance is: $ ' CURBAL
- SAY 'Number of checks written: ' NUMCHECK
- SAY 'Number of deposits made : ' NUMDEP
- SAY
- EXIT 0
-