home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload
/
ShartewareOverload.cdr
/
database
/
db_edit.zip
/
DB_DEMO.PRG
< prev
next >
Wrap
Text File
|
1988-07-19
|
24KB
|
1,061 lines
* Program Name: db_demo.prg *
* Author: Don L. Powells *
* (c) 1988 by D. P. & Associates *
**************************************************************************
* Created: 5/5/1988 at 14:41 *
* main = *
* Revision: ____ Last Revised: __________ @ __:__ *
* Called From: *
* -- Data Base Files -- ---- Index Files ---- ----- Other Files ---- *
* Customer.DBF Cust_no.NTX Last.NTX *
* Serialno.DBF Company.NTX Zip.NTX *
* State.NTX *
*************************** ALL RIGHTS RESERVED **************************
* Routine to demonstrate DBEDIT() with a User-defined function
* Save original DOS screen to restore upon exit
SAVE SCREEN TO dosscrn
CLEAR SCREEN
SET WRAP ON
beep_on = .T. && Turn on Beep function
* Open the database and associated indexes
USE CUSTOMER
SET INDEX TO Company,Cust_no,Last,Zip,State
* Declare and initialize arrays and memory variable parameters
t = 6
l = 1
b = 20
r = 78
DECLARE fields[FCOUNT()-1],pics[FCOUNT()-1],heads[FCOUNT()-1],;
foots[FCOUNT()-1]
* Fill fields array with field names
AFIELDS(fields)
udf = "Db_func"
AFILL(pics,"")
pics[3] = "@R 999-999-9999"
pics[9] = "99999-9999"
pics[11] = "@!"
heads[1] = "Customer No."
heads[2] = "Company Name"
heads[3] = "Phone No."
heads[4] = "Extension"
heads[5] = "Address"
heads[6] = "Address"
heads[7] = "City"
heads[8] = "State"
heads[9] = "Zip code"
heads[10] = "First Name"
heads[11] = "MI"
heads[12] = "Last Name"
headsep = CHR(205) && CHR(205) = '═'
colsep = CHR(179) && CHR(179) = '│'
footsep = CHR(196) && CHR(196) = '─'
foots[1] = "NO EDIT Allowed"
foots[5] = "Line one"
foots[6] = "Line two"
* Incremental seek string for speed scroll
mstring = ""
* Draw screen constants
Saycenter(1,"CLIPPER TRAINING")
Saycenter(2,"DBEDIT() Demo")
@ 3,0 SAY REPLICATE(CHR(196),80)
* Draw box to surround table
@ 5,0 TO 21,79
* Draw Browse menu
Saycenter(22,"<ESC>:Exit <Return>:Edit <F2>:Form Edit <F3>:Order "+;
"<Del>:Del/Recall <F4>:Pack")
* If Empty file force EOF() bang and user function call
IF RECCOUNT() = 0
KEYBOARD CHR(24)
ENDIF
* Call DBEDIT() and start browsing
DBEDIT(t,l,b,r,fields,udf,pics,heads,headsep,colsep,footsep,foots)
CLOSE DATABASES
RESTORE SCREEN FROM dosscrn
RETURN
*****
* Db_func() - User-defined function for DBEDIT().
*
FUNCTION Db_func
PARAMETERS mstatus,fld_ptr
PRIVATE request
* Assume normal return
request = 1
* Save last keystroke
keystroke = LASTKEY()
* Assign current field name to memory variable
curfield = fields[fld_ptr]
* Save current cursor position
mrow = ROW()
mcol = COL()
IF mstatus = 0
* Idle
request = Idlestat()
ELSEIF mstatus = 1
* Beginning-of-file
request = Pasttop()
ELSEIF mstatus = 2
* End-of-file
request = Pastbott(curfield)
ELSEIF mstatus = 3
* Empty database file
request = Emptydbf(curfield,fld_ptr)
ELSEIF mstatus = 4
* Keystroke exception
request = Keyexcep(keystroke,curfield,fld_ptr,mrow,mcol)
ELSE
request = Idlestat()
ENDIF
RETURN(request)
*****
* Idlestat() - Process idle status (0) of DBEDIT().
* Notes: Updates record # and deleted status
*
FUNCTION Idlestat
mrecno = RECNO()
@ 1,60 SAY "Record " + ALLTRIM(TRANSFORM(mrecno,"@Z"))
IF DELETED()
@ 2,60 SAY "** DELETED **"
ELSE
@ 2,60 SAY " "
ENDIF
morder = INDEXORD()
@ 2,5 SAY "Order: " + UPPER(INDEXKEY(morder)) + SPACE(5)
* Draw Incremental Seek Prompt
@ 23,0 SAY "Enter " + TRIM(INDEXKEY(0)) + ": "
@ 4,0
Saycenter(4,"BROWSE MODE")
RETURN(1)
*****
* Pasttop() - Process status (1) of DBEDIT().
*
FUNCTION Pasttop
Beep("NORM")
@ 0,0
@ 0,0 SAY "** Beginning of File **"
INKEY(.5)
@ 0,0
RETURN(1)
*****
* Pastbott() - Process status (2) of DBEDIT().
*
FUNCTION Pastbott
PRIVATE curfield,retval
PARAMETERS curfield
@ 0,0
@ 0,0 SAY "** End of File **"
Beep("NORM")
retval = Apendrec(curfield,fld_ptr)
@ 0,0
RETURN(retval)
*****
* Apendrec() - Append a blank record to the file.
*
FUNCTION Apendrec
PRIVATE curfield,fld_ptr,retval
PARAMETERS curfield, fld_ptr
retval = 1
@ 4,0
Saycenter(4,"BROWSE MODE")
resp = "N"
@ 24,0
@ 24,0 SAY "Do you want to add a new record (Y/N)? ";
GET resp PICTURE "@!"
READ
@ 24,0
IF resp = "Y"
APPEND BLANK
* Get the next unique serial number from the serial number file
currarea = SELECT()
SELECT 0
USE Serialno
mCust_no = Ser_num + 1
REPLACE Ser_num WITH mCust_no
USE
SELECT (currarea)
REPLACE Cust_no WITH mCust_no
Idlestat()
retval = 2
ENDIF
RETURN(retval)
*****
* Emptydbf() - Process status (3) of DBEDIT().
*
FUNCTION Emptydbf
PRIVATE curfield,fld_ptr,retval
PARAMETERS curfield, fld_ptr
* Enter append mode
request = Apendrec(curfield,fld_ptr)
* Display status
Idlestat()
RETURN(retval)
*****
* Keyexcep() - Process keystroke exceptions.
*
FUNCTION Keyexcep
PRIVATE request,keystroke,curfield,fld_ptr,mrow,mcol
PARAMETERS keystroke,curfield,fld_ptr,mrow,mcol
IF keystroke = 27 && <ESC>
* Exit
request = 0
ELSEIF keystroke = 13
* Edit current cell
request = Fld_edit(curfield,fld_ptr)
ELSEIF keystroke = 7 && <Del>
* Delete/Recall current record
request = Delrecall()
ELSEIF keystroke = -1 && <F2>
* Form Edit
request = Formedit(mrow,mcol)
ELSEIF keystroke = -2 && <F3>
* Select index order
request = Pickordr()
ELSEIF keystroke = -3 && <F4>
* Pack the file
request = Fil_pack()
ELSEIF ASC(CHR(keystroke)) >= 32 .AND.;
ASC(CHR(keystroke)) <= 126 && Alphanumerics
* Speed Scroll/Incremental Seek
request = Incseek(curfield,keystroke,fld_ptr)
ELSEIF keystroke = 8 && <Backspace>
* Decremental Seek
request = Decseek()
ELSE
Not_yet()
request = 1
ENDIF
RETURN(request)
*****
* Delrecall() - Delete/Recall records toggle
*
FUNCTION Delrecall
IF DELETED()
RECALL
ELSE
DELETE
ENDIF
* Update Deleted status
Idlestat()
RETURN(1)
*****
* Pickordr() - Select the index order for file
*
FUNCTION Pickordr
PRIVATE retval,ntxcnt,ntxkey,maxntx,subscrpt,tr,lc,br,rc,ordscrn
retval = 1
* Count the number of indexes
ntxcnt = 0
ntxkey = INDEXKEY(ntxcnt)
IF "" != ntxkey
DO WHILE "" != ntxkey
ntxcnt = ntxcnt + 1
ntxkey = INDEXKEY(ntxcnt)
ENDDO
* Display menu of keys
DECLARE ntxarray[ntxcnt]
maxntx = 0
FOR i = 1 TO ntxcnt
ntxarray[i] = INDEXKEY(i)
maxntx = MAX(LEN(ntxarray[i]),maxntx)
NEXT
tr = 8
lc = (80 - maxntx)/2
br = 15
rc = lc + maxntx
ordscrn = SAVESCREEN((tr - 2),(lc - 1),(br + 1), (rc + 1))
@ 4,0
Saycenter(4,"Select Order")
@ (tr - 1),(lc - 1) TO (br + 1), (rc + 1)
SCROLL(tr,lc,br,rc,0)
subscrpt = ACHOICE(tr,lc,br,rc,ntxarray)
IF subscrpt != 0
SET ORDER TO subscrpt
@ 23,0
mstring = ""
ENDIF
RESTSCREEN((tr - 2),(lc - 1),(br + 1), (rc + 1),ordscrn)
retval = 2
ELSE
Beep("BOZO")
Err_msg("No index files are available.")
ENDIF
Idlestat()
RETURN(retval)
*****
* Fil_pack() - Remove deleted records from the file
*
FUNCTION Fil_pack
Beep("NORM")
retval = 1
resp = "N"
@ 0,0
@ 0,0 SAY "Record removal is permanent. Continue?(Y/N) ";
GET resp PICTURE "@!" VALID(resp $ "Y/N")
READ
@ 0,0
IF resp = "Y"
@ 24,0
@ 24,0 SAY "Removing deleted records..."
PACK
retval =2
@ 24,0
Idlestat()
ENDIF
RETURN(retval)
*****
* Fld_edit() - Edit cell contents in table using memory variable
*
FUNCTION Fld_edit
PRIVATE curfield,fld_ptr
PARAMETERS curfield,fld_ptr
@ 4,0
Saycenter(4,"EDIT MODE")
* Assume no screen refresh
retval = 1
ntx_expr = INDEXKEY(0) && Get controlling index key
ntx_eval = &ntx_expr && Expand for comparison after edit
* to determine if screen refresh is needed
SET CURSOR ON && DBEDIT() turns cursor off by default
* Store field contents to memory variable
get_data = &curfield
* Allow up and down arrows to exit READ
READEXIT(.T.)
* Prevent edits on Customer number field
IF curfield != "CUST_NO"
@ mrow,mcol GET get_data PICTURE get_pic(curfield,fld_ptr)
READ
* Turn off up, down arrow key exiting
READEXIT(.F.)
keystroke = LASTKEY() && save exit key
IF keystroke != 27 .AND. UPDATED()
* Store changes to database
REPLACE &curfield WITH get_data
IF !EMPTY(ntx_expr)
* File indexed..check for altered key field
IF ntx_eval != (&ntx_expr)
* key field altered..re-draw screen
retval = 2
ENDIF
ENDIF
IF retval <> 2
* certain keys move cursor after edit if no refresh
IF keystroke = 5
* Up arrow
KEYBOARD CHR(5)
ELSEIF keystroke = 18
* PgUp
KEYBOARD CHR(5)
ELSEIF keystroke = 24
* Down arrow
KEYBOARD CHR(24)
ELSEIF keystroke = 3
* PgDn
KEYBOARD CHR(24)
ELSEIF keystroke = 13 .OR. keystroke > 32
* Return or Typed past end..move right
KEYBOARD CHR(4)
ENDIF
ENDIF
ENDIF
ELSE
@ 0,0
Beep("BOZO")
@ 0,0 SAY "No Edits allowed on this field!"
INKEY(1)
@ 0,0
ENDIF
SET CURSOR OFF
RETURN(retval)
******
* Get_pic() - Return matching picture string for specified field
*
FUNCTION Get_pic
PRIVATE pstring, s,field,fld_ptr
PARAMETERS field,fld_ptr
DO CASE
CASE !EMPTY(pics[fld_ptr])
* Check picture array for a picture string
pstring = pics[fld_ptr]
CASE TYPE(field) = "C"
* character field is bounded by window width
pstring = "@KS" + LTRIM(STR(MIN(LEN(&field), 78)))
CASE TYPE(field) = "N"
* convert to character to help format picture string
s = STR(&field)
IF "." $ s
* decimals in numeric...use the form "9999.99"
pstring = REPLICATE("9", AT(".", s) - 1) + "."
pstring = pstring + REPLICATE("9", LEN(s) - LEN(pstring))
ELSE
* no decimals...only need the correct length
pstring = REPLICATE("9", LEN(s))
ENDIF
OTHERWISE
* no picture
pstring = ""
ENDCASE
RETURN(pstring)
*****
* Formedit() - Edit the current record using a full-screen form
*
FUNCTION Formedit
PRIVATE retval,mrow,mcol
PARAMETERS mrow,mcol
SAVE SCREEN
retval = Editview()
RESTORE SCREEN
RETURN(retval)
*****
* Editview() - Routine to change customer records
*
FUNCTION Editview
SET CURSOR ON && DBEDIT() turns cursor off by default
CLEAR SCREEN
* Draw screen header
Saycenter(1,"CLIPPER TRAINING DEMO")
Saycenter(2,"DBEDIT() FORM EDIT MODE")
@ 3,0 SAY REPLICATE("_",79)
@ 23,0 SAY REPLICATE("_",79)
* Draw screen prompts
Cusprompt()
* Initialize memory variables
retval = 2
FOR i=1 TO FCOUNT()
fieldvar = "m" + FIELDNAME(i)
&fieldvar = .T.
NEXT
* Do editing/viewing until user exits
evexit = .F.
DO WHILE !evexit
BEGIN SEQUENCE
* Update Deleted and record number status
IF DELETED()
@ 1,0 SAY "** DELETED **"
ELSE
@ 1,0 SAY " "
ENDIF
@ 1,60 SAY "Record " + ALLTRIM(TRANSFORM(RECNO(),"@Z"))
@ 2,60 SAY "Cust. # " + ALLTRIM(TRANSFORM(Cust_no,"@Z"))
* Move fields to memory vars
IF RECCOUNT() >= 1
Fld2mem() && Empty the field variables
ELSE
Mempty()
ENDIF
* Display the current record
Sayrec()
* Display edit menu and execute choices
@ 24,0
@ 24,0 PROMPT "Edit"
@ 24,9 PROMPT "Next"
@ 24,17 PROMPT "Previous"
@ 24,29 PROMPT "Find"
@ 24,37 PROMPT "Locate"
@ 24,47 PROMPT "Goto"
@ 24,55 PROMPT "Del"
@ 24,62 PROMPT "Exit-<ESC>"
MENU TO evchoice
IF evchoice = 0 .OR. evchoice = 8
evexit = .T.
ELSEIF evchoice = 1
Cus_gets()
IF LASTKEY() != 27 && <ESC>
Mem2fld()
ENDIF
ELSEIF evchoice = 2
SKIP
IF EOF()
Beep("NORM")
User_msg("End of file...")
SKIP -1
ENDIF
ELSEIF evchoice = 3
SKIP -1
IF BOF()
Beep("NORM")
User_msg("Beginning of file...")
ENDIF
ELSEIF evchoice = 4
Findrec()
ELSEIF evchoice = 5
Loc_rec()
ELSEIF evchoice = 6
Go_rec()
ELSEIF evchoice = 7
Del_rec()
ENDIF
END
* End editing/viewing
ENDDO
@ 24,0
RETURN(2)
*****
* Findrec() - Seek a record by its index key
*
FUNCTION Findrec
BEGIN SEQUENCE
curr_rec = RECNO()
@ 24,0
resp = "C"
@ 24,0 SAY "Find by: Customer <N>o <C>ompany <L>ast Name "+;
"<Z>ip <S>tate <ESC>-Abort";
GET resp PICTURE "@!" VALID resp $ "NCLZS"
READ
* Allow user to <ESC>ape
IF LASTKEY() = 27
BREAK
ENDIF
IF resp = "N"
SET ORDER TO 2
sought = 00001
mprompt = "Customer Number"
ELSEIF resp = "C"
SET ORDER TO 1
sought = SPACE(30)
mprompt = "Company Name"
ELSEIF resp = "L"
SET ORDER TO 3
sought = SPACE(20)
mprompt = "Last Name"
ELSEIF resp = "Z"
SET ORDER TO 4
sought = "00000-0000"
mprompt = "Zip Code"
ELSEIF resp = "S"
SET ORDER TO 5
sought = SPACE(2)
mprompt = "State"
ENDIF
@ 24,0
@ 24,0 SAY "Enter " + mprompt + ": " GET sought
READ
IF TYPE("sought") != "N"
SEEK TRIM(sought)
ELSE
SEEK sought
ENDIF
IF !FOUND()
Beep("BOZO")
Err_msg("Record not found.")
GO curr_rec
ENDIF
END
@ 24,0
RETURN(.T.)
*****
* Loc_rec() - Locate a record using a filter string
*
FUNCTION Loc_rec
curr_rec = RECNO()
SET KEY -9 TO Shofield()
SAVE SCREEN TO loc_scrn
SCROLL(4,0,24,79,0) && Clear specified portion of the screen
locstrng = SPACE(100)
Saycenter(4,"LOCATE BY CRITERIA")
KEYBOARD CHR(27) && Display the fields box
Shofield()
Saycenter(20,"F10: Select Field Name <ESC>: Abort")
Saycenter(22,"Enter a Search Criteria "+;
"(i.e., STATE = 'CA' .AND. COMPANY = 'El Carne Loco')")
@ 24,0 GET locstrng PICTURE "@S79"
READ
IF TYPE(locstrng) != "U" .AND. TYPE(locstrng) != "UE" .AND.;
TYPE(locstrng) != "UI"
LOCATE FOR &locstrng
IF FOUND()
SCROLL(4,0,24,79,0)
Cusprompt()
cont = "Y"
DO WHILE cont = "Y"
Fld2mem()
Sayrec()
@ 24,0
@ 24,0 SAY "Continue (Y/N)? " GET cont PICTURE "@!"
READ
IF cont = "Y"
CONTINUE
IF !FOUND()
Beep("NORM")
User_msg("No further matches found.")
cont = "N"
ENDIF
ENDIF
ENDDO
ELSE
Beep("BOZO")
Err_msg("Record not found.")
ENDIF
ELSE
Beep("BOZO")
Err_msg("There is an error in the search string.")
ENDIF
@ 24,0
RESTORE SCREEN FROM loc_scrn
RETURN(.T.)
*****
* Go_rec() - Go to the top or bottom of file, or a record number
*
FUNCTION Go_rec
@ 24,0
resp = " "
@ 24,0 SAY "<T>op <B>ottom <R>ecord number " GET resp PICTURE "@!";
VALID(resp $ "TBR")
READ
IF resp = "T"
GO TOP
ELSEIF resp = "B"
GO BOTTOM
ELSEIF resp = "R"
@ 24,0
resp = RECCOUNT()
@ 24,0 SAY "Enter Record Number: " GET resp PICTURE "@9";
VALID(resp >= 0)
READ
GO resp
ENDIF
@ 24,0
RETURN(.T.)
*****
* Del_rec() - Mark a record for deletion or recall it
*
FUNCTION Del_rec
IF DELETED()
RECALL
ELSE
DELETE
ENDIF
RETURN(.T.)
*****
* Shofield() - Display a light bar menu of the database fields
*
FUNCTION Shofield
DECLARE farray[FCOUNT()]
AFIELDS(farray)
@ 5,32 TO 19,48
subscrpt = ACHOICE(6,34,18,46,farray)
RETURN(.T.)
*****
* Cusprompt() - Display prompts for Customer.DBF data entry screen
*
FUNCTION Cusprompt
@ 5,0 SAY "Company Name: "
@ 5,47 SAY "Phone Number: "
@ 6,56 SAY "Ext: "
@ 7,6 SAY "Address: "
@ 8,13 SAY ": "
@ 9,9 SAY "City: "
@ 9,42 SAY "State: "
@ 9,53 SAY "Zip: "
Saycenter(12,"Contact Person")
@ 14,3 SAY "First Name: "
@ 14,32 SAY "MI: "
@ 14,39 SAY "Last Name: "
Saycenter(16,"Contact Notes")
@ 17,13 TO 20,61
Saycenter(21,"<F2>: Edit Contact Notes <ESC>: Abort Edits and Exit")
Saycenter(22,"Ctrl-W: Finished Editing")
RETURN(.T.)
*****
* Mempty() - Initialize field variables with empty value
*
FUNCTION Mempty
IF LEN(ALIAS()) !=0
FOR i = 1 TO FCOUNT()
mfield = FIELDNAME(i)
fieldvar = "m" + mfield
IF type("&mfield") = "C"
&fieldvar = SPACE(LEN(&mfield))
ELSEIF type("&mfield") = "N"
&fieldvar = 0
ELSEIF type("&mfield") = "D"
&fieldvar = CTOD(" / / ")
ELSEIF type("&mfield") = "L"
&fieldvar = .F.
ELSEIF type("&mfield") = "M"
&fieldvar = SPACE(512)
ENDIF
NEXT
ELSE
BEEP("BOZO")
Err_msg("No database file is open. ")
BREAK && Abort Add routine
ENDIF
RETURN(.T.)
*****
* Cus_gets() - GET data for customer data entry screen
*
FUNCTION Cus_gets
SET KEY -1 TO Memedit() && F2 assigned to edit mNotes
MEMOEDIT(mNotes,18,14,19,60,.F.,.F.)
@ 5,15 GET mCompany
@ 5,61 GET mPhone PICTURE "@R 999-999-9999"
@ 6,61 GET mExt
@ 7,15 GET mAddress1
@ 8,15 GET mAddress2
@ 9,15 GET mCity
@ 9,49 GET mState PICTURE "@!" VALID Isstate(mState)
@ 9,58 GET mZip PICTURE "@R 99999-9999"
@ 14,15 GET mFirst
@ 14,36 GET mMi PICTURE "@!"
@ 14,50 GET mLast
READ
SET KEY -1 TO && F2 unassigned
RETURN(.T.)
*****
* Mem2fld() - Replace fields with field memory variables
*
FUNCTION Mem2fld
PRIVATE retval
retval = 1
IF LEN(ALIAS()) !=0
FOR i = 1 TO FCOUNT()
mfield = FIELDNAME(i)
fieldvar = "m" + mfield
REPLACE &mfield WITH &fieldvar
NEXT
ELSE
BEEP("BOZO")
Err_msg("No database file is open. ")
ENDIF
RETURN(.T.)
*****
* Isstate() - Verifies that the state entered is really a state
* Usage: Isstate("State name")
* Returns: Logical True (.T.) or False (.T.)
* Notes: The States.DBF file is indexed on State and a Seek will
* find the entered state or it won't.
*
FUNCTION Isstate
PARAMETERS sought
IF !FILE("States.DBF")
Beep("BOZO")
Err_msg("The States.DBF file is missing.")
retval = .T.
ELSE
currarea = SELECT() && Save the current work area #
SELECT 0 && Go to next available work area
USE States
IF !FILE("St_abbre.NTX")
INDEX ON St_abbrev to St_abbre
ELSE
SET INDEX TO St_abbre
ENDIF
SEEK TRIM(sought)
IF FOUND()
retval = .T.
ELSE
Beep("BOZO")
Err_msg("This state isn't in the union yet.")
retval = .F.
ENDIF
USE
SELECT (currarea) && Return to the original work area
ENDIF
RETURN(retval)
*****
* Memedit() - Edits the Notes field of the Customer.DBF
*
FUNCTION Memedit
mNotes = MEMOEDIT(mNotes,18,14,19,60,.T.)
RETURN(.T.)
*****
* Fld2mem() - Assign fields to field memory variables
*
FUNCTION Fld2mem
IF LEN(ALIAS()) !=0
FOR i = 1 TO FCOUNT()
mfield = FIELDNAME(i)
fieldvar = "m" + mfield
&fieldvar = &mfield
NEXT
ELSE
BEEP("BOZO")
Err_msg("No database file is open. ")
ENDIF
RETURN(.T.)
*****
* Sayrec() - Display record contents but allow no edit
*
FUNCTION Sayrec
MEMOEDIT(mNotes,18,14,19,60,.F.,.F.)
@ 5,15 SAY mCompany
@ 5,61 SAY mPhone PICTURE "@R 999-999-9999"
@ 6,61 SAY mExt
@ 7,15 SAY mAddress1
@ 8,15 SAY mAddress2
@ 9,15 SAY mCity
@ 9,49 SAY mState PICTURE "@!"
@ 9,58 SAY mZip
@ 14,15 SAY mFirst
@ 14,36 SAY mMi PICTURE "@!"
@ 14,50 SAY mLast
RETURN(.T.)
*****
* Incseek() - Incremental seek of records
*
FUNCTION Incseek
PRIVATE curfield,retval,keystroke
PARAMETERS curfield,keystroke
old_recnum = recno()
mstring = mstring + chr(keystroke)
@ 23,16
@ 23,16 SAY mstring
IF UPPER(INDEXKEY(0)) != "CUST_NO"
SEEK TRIM(mstring)
ELSE
SEEK VAL(TRIM(mstring))
ENDIF
IF !FOUND()
Beep("BOZO")
Err_msg("Entry does not exist.")
GO old_recnum
ENDIF
RETURN(2)
*****
* Decseek() - Decremental seek when <Backspace> is pressed
*
FUNCTION Decseek
mstring = SUBSTR(mstring,1,(LEN(mstring)-1))
IF UPPER(INDEXKEY(0)) != "CUST_NO"
SEEK TRIM(mstring)
ELSE
SEEK VAL(TRIM(mstring))
ENDIF
@ 23,16
@ 23,16 SAY mstring
RETURN(2)
********************
* Saycenter() - Function to center a string on a given row.
* Usage: Saycenter(row#,expC)
*
FUNCTION Saycenter
PARAMETERS trow,in_string
IF LEN(in_string)>=80
@ trow,0 SAY in_string
ELSE
@ trow,(80 - LEN(in_string))/2 SAY in_string
ENDIF
RETURN (.T.)
*****
* Not_yet() - Prints option not available message
*
FUNCTION Not_yet
@ 0,0
Beep("NORM")
@ 0,0 SAY "This option is not available yet." +;
" Press any key to continue."
INKEY(0)
@ 0,0
RETURN(.T.)
*****
* Beep() - Sounds a tone to get user's attention
* Usage: Beep("NORM") && Informative information or warning
* Beep("BOZO") && Error beep
*
FUNCTION Beep
PARAMETER beeptype
IF beep_on
IF UPPER(beeptype) = "BOZO"
TONE(87.3,1)
TONE(40,3.5)
ELSE
TONE(261.7,1)
TONE(392,3.5)
ENDIF
ENDIF
RETURN(.T.)
*****
* Err_msg() - Prints an error message or warning on row 0
* Usage: Err_msg("Error or warning message")
*
FUNCTION Err_msg
PARAMETER e_msg
@ 0,0
err_scrn = SAVESCREEN(0,0,1,79)
@ 0,0 SAY e_msg + " Press a key to continue."
INKEY(0)
@ 0,0
RESTSCREEN(0,0,1,79,err_scrn)
RETURN(.T.)
*****
* User_msg() - Prints user messages on row 24 and waits for a key press
* Usage: User_msg("Message string")
*
FUNCTION User_msg
PARAMETERS msg
@ 24,0
userscrn = SAVESCREEN(23,0,24,79)
@ 24,0 SAY msg + " Press a key to continue."
INKEY(0)
@ 24,0
RESTSCREEN(23,0,24,79,userscrn)
RETURN(.T.)