'┌──────────────────────────────────────────────────────────────────┐
'│ BANKEDIT.PPS - Program to access BANK.DBF and edit information │
'│ │
'│ Written by Dan Shore │
'│ │
'└──────────────────────────────────────────────────────────────────┘
' To install:
'
' 1) Edit your CMD.LST file(s) to add this:
'
' Charges Per PPE/MNU File Specification -or-
' Command Sec Minute Use Keystroke Substitution
' ══════════════ ═══ ═════════════════ ═════════════════════════════════
' 1) BANKEDIT 110 0 0 C:\PCB\PPE\BANK\BANKEDIT.PPE
'
' Note: You may have to change the pathname to the PPE.
' Note: You may have to change the security level of the PPE.
'
'
' *** Make sure you have BANKEDIT, BANKPACK, BANK2 & BANK
' all in the SAME directory!!!!!
'─────────────────────────────────────────────────────────────────────────────
'
' Declare our variables
'
STRING main_prompt ' Generic prompt
STRING back_space ' Backspace
STRING key ' User key hit
STRING user_input ' Generic user input
STRING user_input2 ' Generic user input #2
STRING pcb_user_name ' Username
STRING hold ' Generic String Var
STRING hold2 ' Generic String Var
STRING temp ' Generic String Var
STRING last_date ' Last Date used DB
STRING current_char ' Twirly
STRING char1 ' Twirly
STRING char2 ' Twirly
STRING char3 ' Twirly
STRING char4 ' Twirly
STRING bank_txt ' Text file for all user prompts
INT x ' Generic Int
INT line_count ' For display of sequential user list
INT bank_time ' Bank Time
INT dot_number ' Twirly
INTEGER bank_bytes ' Bank Bytes
INTEGER size ' Use for diplaying numerics with commas
FLOAT time_now ' Twirly
FLOAT prev_ti ' Twirly
BOOLEAN partial_search_found ' Flag used when searching partial username
BOOLEAN found_user ' Flag when a user is found in DB
BOOLEAN is_key ' Flag when user hit a key
BOOLEAN first_time ' Flag for first time display
BOOLEAN partial_name ' Flag used when seaching partial
BOOLEAN exact_name ' Flag used when searching exact
BOOLEAN list_names ' Flag used when listing users in DB
BOOLEAN non_stop ' Flag used when in NS mode when listing Users
BOOLEAN did_delete ' Flag when a user is deleted
BOOLEAN add_name ' Flag when adding a user
'────────────────────────────────────────────────────────────────────────────
DECLARE PROCEDURE CHECK_FOR_KEY (VAR BOOLEAN is_key)
DECLARE PROCEDURE ADD_COMMAS (VAR STRING hold2)
*$USEFUNCS
BEGIN
CLS
char1 = "\"
char2 = "|"
char3 = "/"
char4 = "-"
back_space = CHR(8) + CHR(32) + CHR(8)
'
' Define external text file - Support Language Files
'
bank_txt = PPEPATH() + "BANKTXT2" + LANGEXT()
GOSUB OPEN_DATABASE
GOSUB OPEN_INDEX
GOSUB EDIT_FIND_USER
GOTO EXIT_PROG
END
'───────────────────────────────
' Subroutines for BANKEDIT.PPE
'───────────────────────────────
'
' Display userlist from database, and also used for sequential
' searching routines.
'
:SEQ_DISP_USER
is_key = FALSE
IF (DTOP(0) = FALSE) THEN
NEWLINE
SPRINTLN READLINE(bank_txt, 1)
NEWLINE
WAIT
GOTO EXIT_PROG
ELSE
IF (!list_names) PRINT READLINE(bank_txt, 2)
FOR x = 1 to DRECCOUNT(0)
DGO 0, x
hold = TRIM(DGET(0, DNAME(0,1))," ")
IF (!list_names) THEN
GOSUB MARKTIME
IF (INSTR(hold, user_input) > 0) THEN
PRINT back_space
partial_search_found = TRUE
NEWLINE
PRINTLN READLINE(bank_txt, 3), hold
user_input2 = NOCHAR()
main_prompt = READLINE(bank_txt, 4)
INPUTYN main_prompt, user_input2, @X0E
IF (user_input2 = "" || user_input2 = "N" || user_input2 = NOCHAR()) THEN
found_user = TRUE
BREAK
ELSE
NEWLINE
PRINT READLINE(bank_txt, 5)
END IF
ELSE
CHECK_FOR_KEY(is_key)
IF (is_key) BREAK
END IF
ELSE
'
' Print out number and username
'
PRINT SPACE (5-LEN(STRING(x))), "@X0F", x, ". @X03", hold
IF (!(x%2)) THEN
NEWLINE
INC line_count
ELSE
PRINT SPACE(33-LEN(hold))
END IF
'
' If non-stop mode, check for abort (enter key)
'
IF (non_stop) THEN
CHECK_FOR_KEY(is_key)
IF (is_key) THEN
non_stop = FALSE
BREAK
END IF
END IF
IF (line_count > 21 && !non_stop) THEN
main_prompt = READLINE(bank_txt, 6)
user_input2 = YESCHAR()
INPUTSTR main_prompt, user_input2, @X0E, 2, "NSY", UPCASE+ERASELINE
IF (user_input2 = "N" || user_input2 = NOCHAR()) THEN
BREAK
ELSE IF (user_input2 = "NS") THEN
NEWLINE
PRINTLN READLINE(bank_txt, 7)
DELAY 18
NEWLINE
non_stop = TRUE
ELSE
line_count = 0
END IF
END IF
END IF
NEXT
IF (!found_user) DGO 0, 1
PRINT back_space
NEWLINE
END IF
RETURN
'
' Subroutine to find/add username in index
'
:FIND_ADD_USER
'
' Get the current users name
'
DSEEK 0, pcb_user_name
IF (DCHKSTAT(0) = 0) THEN
NEWLINE
PRINTLN READLINE(bank_txt, 8)
NEWLINE
found_user = TRUE
ELSE
IF (!add_name) THEN
NEWLINE
PRINTLN READLINE(bank_txt, 9)
NEWLINE
END IF
found_user = FALSE
DELAY 18
END IF
RETURN
'
'
'
:EDIT_FIND_USER
found_user = FALSE
partial_name = FALSE
exact_name = FALSE
list_names = FALSE
partial_search_found = FALSE
non_stop = FALSE
add_name = FALSE
user_input = ""
NEWLINE
DISPFILE PPEPATH()+"EDMENU", GRAPH+LANG
NEWLINE
main_prompt = READLINE(bank_txt, 10)
INPUTSTR main_prompt, user_input, @X0E, 1, "ABCD", LFAFTER+UPCASE+GUIDE+FIELDLEN
SELECT CASE (user_input)
CASE "A"
partial_name = TRUE
CASE "B"
exact_name = TRUE
CASE "C"
list_names = TRUE
CASE "D"
add_name = TRUE
DEFAULT
GOTO EXIT_PROG
END SELECT
NEWLINE
'
' If not listing all users in database, get input of
' name to search for
'
IF (!list_names && !add_name) THEN
user_input = ""
IF (exact_name) THEN
main_prompt = READLINE(bank_txt, 11)
ELSE IF (partial_name) THEN
main_prompt = READLINE(bank_txt, 12)
END IF
INPUTSTR main_prompt, user_input, @X0E, 25, MASK_ASCII(), LFAFTER+UPCASE+GUIDE+FIELDLEN
IF (user_input = "") THEN
NEWLINE
GOTO EDIT_FIND_USER
END IF
END IF
'
' Start searching for username
'
IF (partial_name) THEN
user_input = TRIM(user_input, " ")
GOSUB SEQ_DISP_USER
ELSE IF (exact_name) THEN
pcb_user_name = user_input + SPACE(25-LEN(user_input))
GOSUB FIND_ADD_USER
IF (!found_user) GOTO EDIT_FIND_USER
ELSE IF (list_names) THEN
STARTDISP FNS
line_count = 0
GOSUB SEQ_DISP_USER
STARTDISP FCL
GOTO EDIT_FIND_USER
ELSE IF (add_name) THEN
GOSUB ADD_NEW_USER
GOTO EDIT_FIND_USER
END IF
'
' See if the search found a username match
'
IF (found_user) THEN
IF (exact_name) THEN
PRINTLN READLINE(bank_txt, 13), pcb_user_name
ELSE IF (!partial_search_found) THEN
PRINTLN READLINE(bank_txt, 13), hold
END IF
user_input = YESCHAR()
main_prompt = READLINE(bank_txt, 14)
INPUTYN main_prompt, user_input, @X0A
IF (user_input = "Y" || user_input = YESCHAR()) THEN
first_time = FALSE
GOTO EDIT_USER_INFO
GOTO EDIT_FIND_USER
ELSE
NEWLINE
GOTO EDIT_FIND_USER
END IF
ELSE
IF (!is_key) THEN
IF (partial_search_found) THEN
NEWLINE
PRINTLN READLINE(bank_txt, 15), user_input
NEWLINE
ELSE
NEWLINE
PRINTLN READLINE(bank_txt, 16), user_input
NEWLINE
END IF
END IF
GOTO EDIT_FIND_USER
END IF
NEWLINE
RETURN
'
'
'
:ADD_NEW_USER
user_input = ""
main_prompt = READLINE(bank_txt, 17)
INPUTSTR main_prompt, user_input, @X0E, 25, MASK_ASCII(), LFAFTER+UPCASE+GUIDE+FIELDLEN
IF (user_input = "") RETURN
pcb_user_name = TRIM(user_input," ")
NEWLINE
PRINT READLINE(bank_txt, 18)
GOSUB FIND_ADD_USER
IF (!found_user) THEN
PRINT CHR(13)
CLREOL
PRINTLN "@X0E", READLINE(bank_txt, 19), MIXED(pcb_user_name)
NEWLINE
PRINT READLINE(bank_txt, 20)
x = DRECCOUNT(0) + 1
DNEW 0
DLOCKR 0, x
'
' Set the "starting" user info and "add" it to the DB
'
DPUT 0, "usr_name", pcb_user_name
DPUT 0, "banktime", 0
DPUT 0, "bankbytes", 0
DPUT 0, "last_d_acc", "00-00-00"
DPUT 0, "bytewddate", "00-00-00"
DPUT 0, "timewddate", "00-00-00"
DPUT 0, "bytewd", 0
DPUT 0, "timewd", 0
DADD 0
FPUTLN 7, "###──> " , READLINE(bank_txt, 19)
DELAY 9
PRINT READLINE(bank_txt, 21)
DELAY 36
NEWLINES 2
ELSE
NEWLINE
PRINT READLINE(bank_txt, 22)
DELAY 36
END IF
RETURN
'
' Close the index file, the database file, and exit program
'
:EXIT_PROG
DNCLOSEALL 0
DCLOSE 0
IF (!EXIST(PPEPATH() + "BANKPACK.PPE")) END
IF (did_delete) THEN
NEWLINE
user_input = NOCHAR()
main_prompt = READLINE(bank_txt, 23)
INPUTYN main_prompt, user_input, @X0E
NEWLINE
IF (user_input = "Y" || user_input = YESCHAR()) THEN
CALL PPEPATH() + "BANKPACK.PPE"
ELSE
NEWLINE
PRINTLN READLINE(bank_txt, 24)
PRINT READLINE(bank_txt, 25)
WHILE (key = "") DO
key = INKEY()
DELAY 3
END WHILE
END IF
END IF
END
'
'
'
:SHOW_INFO
CLS
NEWLINE
PRINT READLINE(bank_txt, 26)
IF (exact_name) THEN
PRINTLN pcb_user_name
ELSE IF (partial_search_found) THEN
PRINTLN hold
END IF
PRINT READLINE(bank_txt, 27)
last_date = DGET (0,"last_d_acc")
IF (last_date = "00-00-00" || last_date = " ") last_date = READLINE(bank_txt, 28)
PRINTLN last_date + SPACE(25-LEN(last_date))
PRINT READLINE(bank_txt, 29)
bank_time = DGET (0,"banktime")
size = bank_time
ADD_COMMAS (hold2)
PRINTLN hold2 + SPACE(20-LEN(hold2))
PRINT READLINE(bank_txt, 30)
PRINTLN DGET (0,"timewddate")
PRINT READLINE(bank_txt, 31)
bank_time = DGET (0,"timewd")
size = bank_time
ADD_COMMAS (hold2)
PRINTLN hold2 + SPACE(20-LEN(hold2))
PRINT READLINE(bank_txt, 32)
bank_bytes = DGET (0,"bankbytes")
size = bank_bytes
ADD_COMMAS (hold2)
PRINTLN hold2 + SPACE(20-LEN(hold2))
PRINT READLINE(bank_txt, 33)
PRINTLN DGET (0,"bytewddate")
PRINT READLINE(bank_txt, 34)
bank_bytes = DGET (0,"bytewd")
size = bank_bytes
ADD_COMMAS (hold2)
PRINTLN hold2 + SPACE(20-LEN(hold2))
IF (!first_time) THEN
GOSUB HELP_INFO
ELSE
ANSIPOS 1, 12
END IF
RETURN
'
' Subroutine to update/edit a record
'
:EDIT_USER_INFO
'
' Show users current bank info
'
GOSUB SHOW_INFO
NEWLINE
WHILE (1) DO
user_input = ""
main_prompt = READLINE(bank_txt, 35)
INPUTSTR main_prompt, user_input, @X07, 2, "ABDHKLTWZ", UPCASE+GUIDE+FIELDLEN+ERASELINE
IF (user_input != "H") BREAK
ANSIPOS 45, 2
PRINT READLINE(bank_txt, 36)
GOSUB HELP_INFO
ANSIPOS 1, 13
END WHILE
SELECT CASE (user_input)
'
' Zero out all user values
'
CASE "Z"
user_input = NOCHAR()
main_prompt = READLINE(bank_txt, 37)
INPUTYN main_prompt, user_input, @X0E
IF (user_input = "N" || user_input = NOCHAR()) GOTO EDIT_USER_INFO
DPUT 0,"banktime", 0
DPUT 0,"bankbytes", 0
DPUT 0,"last_d_acc", "00-00-00"
DPUT 0, "bytewddate", "00-00-00"
DPUT 0, "timewddate", "00-00-00"
DPUT 0, "bytewd", 0
DPUT 0, "timewd", 0
GOTO EDIT_USER_INFO
'
' Delete User
'
CASE "K"
user_input = "N"
main_prompt = READLINE(bank_txt, 38) + MIXED(RTRIM(DGET (0, "usr_name")," ")) + " "
INPUTYN main_prompt, user_input, @X0E
IF (user_input = "N" || user_input = NOCHAR()) GOTO EDIT_USER_INFO
DDELETE 0
did_delete = TRUE
NEWLINE
PRINT READLINE(bank_txt, 39)
WHILE (key = "") DO
key = INKEY()
DELAY 3
END WHILE
GOTO EDIT_USER_INFO
'
' Bank Bytes withdrawn today
'
CASE "BW"
user_input = ""
main_prompt = READLINE(bank_txt, 40)
INPUTSTR main_prompt, user_input, @X0E, 9, "0123456789", LFAFTER+GUIDE+FIELDLEN
IF (user_input != "") DPUT 0, "bytewd", TOINTEGER(user_input)
GOTO EDIT_USER_INFO
'
' Bank Time withdrawn today
'
CASE "TW"
user_input = ""
main_prompt = READLINE(bank_txt, 41)
INPUTSTR main_prompt, user_input, @X0E, 3, "0123456789", LFAFTER+GUIDE+FIELDLEN
IF (user_input != "") DPUT 0, "timewd", TOINT(user_input)
GOTO EDIT_USER_INFO
'
' Last Time Withdraw Date
'
CASE "BD"
WHILE (1) DO
user_input = ""
main_prompt = READLINE(bank_txt, 42)
INPUTSTR main_prompt, user_input, @X0E, 6, "0123456789", LFAFTER+GUIDE+FIELDLEN
IF (user_input != "" && LEN(user_input) = 6) THEN
user_input = MID(user_input,1,2) + "-" + MID(user_input,3,2) + "-" + MID(user_input,5,2)
DPUT 0, "bytewddate", user_input
BREAK
END IF
END WHILE
GOTO EDIT_USER_INFO
'
' Last Time Withdraw Date
'
CASE "TD"
WHILE (1) DO
user_input = ""
main_prompt = READLINE(bank_txt, 43)
INPUTSTR main_prompt, user_input, @X0E, 6, "0123456789", LFAFTER+GUIDE+FIELDLEN
IF (user_input != "" && LEN(user_input) = 6) THEN
user_input = MID(user_input,1,2) + "-" + MID(user_input,3,2) + "-" + MID(user_input,5,2)
DPUT 0, "timewddate", user_input
BREAK
END IF
END WHILE
GOTO EDIT_USER_INFO
'
' Last Access Date
'
CASE "LA"
WHILE (1) DO
user_input = ""
main_prompt = READLINE(bank_txt, 44)
INPUTSTR main_prompt, user_input, @X0E, 6, "0123456789", LFAFTER+GUIDE+FIELDLEN
IF (user_input != "" && LEN(user_input) = 6) THEN
user_input = MID(user_input,1,2) + "-" + MID(user_input,3,2) + "-" + MID(user_input,5,2)
DPUT 0, "last_d_acc", user_input
BREAK
END IF
END WHILE
GOTO EDIT_USER_INFO
'
' Bank Time
'
CASE "BT"
user_input = ""
main_prompt = READLINE(bank_txt, 45)
INPUTSTR main_prompt, user_input, @X0E, 3, "0123456789", LFAFTER+GUIDE+FIELDLEN
IF (user_input != "") THEN
bank_time = TOINT(user_input)
DPUT 0, "banktime", bank_time
END IF
GOTO EDIT_USER_INFO
'
' Bank Bytes
'
CASE "BB"
user_input = ""
main_prompt = READLINE(bank_txt, 46)
INPUTSTR main_prompt, user_input, @X0E, 9, "0123456789", LFAFTER+GUIDE+FIELDLEN
IF (user_input != "") THEN
bank_bytes = TOINTEGER(user_input)
DPUT 0, "bankbytes", bank_bytes
END IF
GOTO EDIT_USER_INFO
END SELECT
CLS
GOTO EDIT_FIND_USER
'
'
'
:HELP_INFO
ANSIPOS 45, 3
PRINT READLINE(bank_txt, 47)
ANSIPOS 45, 4
PRINT READLINE(bank_txt, 48)
ANSIPOS 45, 5
PRINT READLINE(bank_txt, 49)
ANSIPOS 45, 6
PRINT READLINE(bank_txt, 50)
ANSIPOS 45, 7
PRINT READLINE(bank_txt, 51)
ANSIPOS 45, 8
PRINT READLINE(bank_txt, 52)
ANSIPOS 45, 9
PRINT READLINE(bank_txt, 53)
ANSIPOS 45, 10
PRINT READLINE(bank_txt, 54)
ANSIPOS 45, 11
PRINT READLINE(bank_txt, 55)
ANSIPOS 1, 12
first_time = TRUE
RETURN
'
' Open the datebase
'
:OPEN_DATABASE
DOPEN 0, PPEPATH()+"bank", FALSE
RETURN
'
' Subroutine to open the index file
'
:OPEN_INDEX
DNOPEN 0, PPEPATH()+"bank"
RETURN
'
' Add Commas to display of numeric information
'
PROCEDURE ADD_COMMAS (VAR STRING hold2)
temp = TRIM(STRING(size)," ")
x = LEN(temp)
'
' If the number is less than 4 characters in length, no need to add
' any commas to it.
'
IF (x < 4) THEN
hold2 = temp
RETURN
END IF
'
' Left pad the string with spaces (easy to add commas this way)
'
temp = SPACE(9-x) + temp
IF (INSTR(temp,"-")) THEN
'
' String has a negative symbol in it...Do not put a comma after it
'
IF (INSTR(MID(temp,1,3),"-")) THEN
hold2 = MID(temp,1,3) + MID(temp,4,3) + "," + MID(temp,7,3)
ELSE IF (INSTR(MID(temp,4,3),"-")) THEN
hold2 = MID(temp,4,3) + MID(temp,7,3)
END IF
ELSE
'
' Rebuild string with comma(s) in proper places
'
IF (MID(temp,1,3) != " ") THEN
hold2 = MID(temp,1,3) + "," + MID(temp,4,3) + "," + MID(temp,7,3)
ELSE IF (MID(temp,4,3) != " ") THEN
hold2 = MID(temp,4,3) + "," + MID(temp,7,3)
END IF
END IF
'
' Remove the left padded spaces we added above
'
hold2 = LTRIM(hold2," ")
RETURN
ENDPROC
'
' This is the routine to change the twirly or character
' every second and display it to the user. This is done so
' the user knows the program is running (processing).
'
:MARKTIME
time_now = TIME()
IF (time_now - prev_ti < 1 && dot_number != 0) RETURN
prev_ti = time_now
IF (dot_number = 0) PRINT " "
IF (dot_number > 3) dot_number = 0
current_char = back_space + " " + back_space
INC dot_number
SELECT CASE (dot_number)
CASE 1
current_char = current_char + char1
CASE 2
current_char = current_char + char2
CASE 3
current_char = current_char + char3
CASE 4
current_char = current_char + char4
END SELECT
PRINT current_char
current_char = ""
RETURN
'
' Check for user interrupt of searching process
'
PROCEDURE CHECK_FOR_KEY (VAR BOOLEAN is_key)
STRING hold3
hold = MGETBYTE()
hold3 = INKEY()
IF (hold = 13 || hold = CHR(13) || hold3 = 13 || hold3 = CHR(13)) THEN
PRINT back_space + " " + back_space
NEWLINE
is_key = TRUE
DELAY 18
END IF
END PROC