home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Media Share 9
/
MEDIASHARE_09.ISO
/
clarion
/
revrstbl.zip
/
RVRS_TBL.MDL
< prev
Wrap
Text File
|
1989-10-09
|
11KB
|
260 lines
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! This model procedure is a modified version to the Standard.mdl table procedure
! Basically it designed to display a file in reverse key order, for instance if!
! you have a date as one of your keys, and you wish to display the file in de- !
! scending order(newest date at the top of the screen) this procedure will do !
! the necessary tricks. I have not checked out the FIND_RECORD routine or the !
! SAME_PAGE routine. Probably all you have to do is substitute BOF for EOF and!
! reverse the PREVIOUS and NEXT statements, also eliminate the SKIP statement. !
! Submitted for all CLARION users by: !
! !
! James Katz !
! C/o BMW of Daytona !
! 484 S Yonge ST !
! Ormond Beach, FL 32174 !
! !
! Work Phone (904) 677-9511 !
! Home Phone (904) 441-4324 !
! !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
*RVRSTBL***************************************************************************
@PROCNAME PROCEDURE
SCREEN SCREEN PRE(SCR),@SCREENOPT
@PAINTS
@STRINGS
@VARIABLES
ENTRY,USE(?FIRST_FIELD)
@FIELDS
@PREPOINT
REPEAT(@COUNT),EVERY(@PROWS),INDEX(NDX)
@PLOC POINT(@PROWS,@COLS),USE(?POINT),ESC(?-1)
@SCROLLVARIABLES
. .
NDX BYTE !REPEAT INDEX FOR POINT FIELD
ROW BYTE !ACTUAL ROW OF SCROLL AREA
COL BYTE !ACTUAL COLUMN OF SCROLL AREA
MAX LONG !LESSER OF COUNT AND RECORDS
COUNT BYTE(@COUNT) !NUMBER OF ITEMS TO SCROLL
ROWS BYTE(@ROWS) !NUMBER OF ROWS TO SCROLL
COLS BYTE(@COLS) !NUMBER OF COLUMNS TO SCROLL
RECORD GROUP
BYTE,DIM(SIZE(@PRE:RECORD))
.
EJECT
CODE
ACTION# = ACTION !SAVE ACTION
OPEN(SCREEN) !OPEN THE SCREEN
SETCURSOR !TURN OFF ANY CURSOR
@SETUP !CALL SETUP PROCEDURE
NDX = 1 !PUT SELECTOR BAR ON TOP ITEM
ROW = ROW(?POINT) !REMEMBER TOP ROW AND
COL = COL(?POINT) ! LEFT COLUMN OF SCROLL AREA
IF ACTION = 4 !IF THIS IS A LOOKUP REQUEST
SET(@KEYNAME,@KEYNAME) ! FIND IT IN THE FILE
NEXT(@FILENAME) ! AND READ IT
POINTER# = POINTER(@FILENAME) ! SAVE POINTER TO CURRENT
DO SHOW_TABLE ! FILL SCROLL AREA
GET(@FILENAME,POINTER#) ! AND REFRESH CURRENT RECORD
ELSE !OTHERWISE
SET(@KEYNAME,RECORDS(@KEYNAME)) ! SET TO LAST RECORD IN FILE
DO SHOW_TABLE ! FILL SCROLL AREA
.
RECORDS# = TRUE !INITIALIZE RECORDS FLAG
LOOP !LOOP UNTIL USER EXITS
MAX = RECORDS(@KEYNAME) !SET LESSER OF FILE RECORD
IF MAX > COUNT THEN MAX = COUNT. ! COUNT AND SCROLL ITEM COUNT
ACTION = ACTION# !RESTORE ACTION
POINTER# = 0 !CLEAR ADD POINTER
@LOOKUPS !DISPLAY FROM OTHER FILES
@SHOW !DISPLAY STRING VARIABLES
@COMPUTE !DISPLAY COMPUTED FIELDS
@CONDITIONAL !DISPLAY CONDITIONAL FIELDS
@RESULT !MOVE RESULTING VALUES
IF ~RECORDS(@KEYNAME) !IF THERE ARE NO RECORDS
CLEAR(@PRE:RECORD) ! CLEAR RECORD AREA
ACTION = 1 ! SET ACTION TO ADD
@AUTONUMKEY ! AUTO INCREMENT KEY FIELD
@UPDATE ! CALL FORM FOR FIRST RECORD
IF ~RECORDS(@KEYNAME) THEN BREAK. ! IF ADD ABORTED THEN EXIT
SET(@KEYNAME) ! SET TO NEW RECORD
DO SHOW_TABLE ! FILL SCROLL AREA
NDX = 1 ! PUT SELECTOR BAR ON TOP ITEM
MAX = 1 ! MAXIMUM DISPLAYED IS 1
. !
ALERT !RESET ALERTED KEYS
ALERT(REJECT_KEY) !ALERT SCREEN REJECT KEY
ALERT(ACCEPT_KEY) !ALERT SCREEN ACCEPT KEY
@ALERT !ALERT HOT KEY
ACCEPT !READ A FIELD
@TABLEHOT !ON HOT KEY, CALL PROCEDURE
IF KEYCODE() = REJECT_KEY THEN BREAK. !RETURN ON SCREEN REJECT KEY
EDIT_RANGE# = FIELD() !SET ONE FIELD EDIT RANGE
IF KEYCODE() = ACCEPT_KEY AND | !ON SCREEN ACCEPT KEY
EDIT_RANGE# <> ?POINT ! AND NOT ON THE POINT FIELD
UPDATE ! MOVE ALL FIELDS FROM SCREEN
EDIT_RANGE# = ?POINT - 1 ! AND EDIT REMAINING FIELDS
SELECT(?POINT) ! IF OK THEN START HERE NEXT
. !
LOOP FIELD# = FIELD() TO EDIT_RANGE# !EDIT FIELDS IN THE EDIT RANGE
CASE FIELD# !JUMP TO FIELD EDIT ROUTINE
OF ?FIRST_FIELD !FROM THE FIRST FIELD
IF KEYCODE() = ESC_KEY OR | ! RETURN ON ESC KEY
RECORDS# = FALSE ! OR NO RECORDS
RETURN
.
@EDITS !EDIT ROUTINES GO HERE
RECORDS# = TRUE ! ASSUME RECORDS ARE HERE
@INITLOCATE !SHOW CURSOR FOR LOCATOR
OF ?POINT !FROM THE POINT FIELD
@LOCATE
CASE KEYCODE() ! PROCESS THE KEYSTROKE
OF INS_KEY !INSERT KEY
DO GET_RECORD
RECORD = @PRE:RECORD
CLEAR(@PRE:RECORD) ! CLEAR RECORD AREA
ACTION = 1 ! SET ACTION TO ADD
@AUTONUMKEY ! AUTO INCREMENT KEY FIELD
@UPDATE ! CALL FORM FOR NEW RECORD
IF ~ACTION ! IF A NEW RECORD WAS ADDED
POINTER# = POINTER(@FILENAME) ! REMEMBER WHICH RECORD
SET(@KEYNAME,@KEYNAME) ! SET TO NEW RECORD AND
DO SHOW_TABLE ! DISPLAY THAT PAGE
ELSE
@PRE:RECORD = RECORD
SET(@KEYNAME,@KEYNAME)
SKIP(@FILENAME,-(MAX-NDX))
.
OF ENTER_KEY !ENTER KEY OR
OROF ACCEPT_KEY !CTRL ENTER KEY
DO GET_RECORD ! READ THE SELECTED RECORD
IF ACTION = 4 AND KEYCODE() = ENTER_KEY! IF THIS IS A LOOKUP REQUEST
ACTION = 0 ! SET ACTION TO COMPLETE
RETURN ! AND RETURN TO CALLER
. !
ACTION = 2 ! SET ACTION TO CHANGE
@UPDATE ! CALL FORM TO CHANGE RECORD
IF ~ACTION ! IF THE RECORD WAS CHANGED
POINTER# = POINTER(@FILENAME) ! REMEMBER WHICH RECORD
SET(@KEYNAME,@KEYNAME) ! SET TO CHANGED RECORD
DO SHOW_TABLE ! AND DISPLAY THAT PAGE
ELSE ! OTHERWISE
SKIP(@FILENAME,-(MAX-NDX)) ! SKIP BACK TO SAME PAGE
.
OF DEL_KEY !DELETE KEY
DO GET_RECORD ! READ THE SELECTED RECORD
ACTION = 3 ! SET ACTION TO DELETE
@UPDATE ! CALL FORM TO DELETE RECORD
IF ~ACTION ! IF RECORD WAS DELETED
SKIP(@FILENAME,NDX) ! SET NEXT RECORD ON TOP
DO SHOW_TABLE ! AND DISPLAY THAT PAGE
ELSE ! OTHERWISE
SKIP(@FILENAME,-(MAX-NDX)) ! SKIP BACK TO SAME PAGE
.
OF DOWN_KEY !DOWN ARROW KEY
IF NOT BOF(@FILENAME) ! IF THERE ARE MORE RECORDS
SCROLL(ROW,COL,ROWS,COLS,ROWS(?POINT)) ! SCROLL THE SCREEN UP
PREVIOUS(@FILENAME) ! READ THE BOTTOM RECORD
DO SHOW_RECORD ! AND DISPLAY IT
.
OF PGDN_KEY !PAGE DOWN KEY
IF BOF(@FILENAME) ! AT THE FIRST PAGE
NDX = MAX ! POINT TO BOTTOM ITEM
ELSE ! OTHERWISE
SKIP(@FILENAME,-1)
DO SHOW_TABLE ! DISPLAY NEXT PAGE
.
OF CTRL_PGDN !CTRL-PAGE DOWN KEY
NDX = MAX ! POINT TO BOTTOM ITEM
IF NOT BOF(@FILENAME) ! ON THE LAST PAGE
SET(@KEYNAME) ! SET TO BOTTOM RECORD MINUS
SKIP(@FILENAME,COUNT) ! ONE PAGE OF RECORDS
DO SHOW_TABLE ! DISPLAY THE LAST PAGE
.
OF UP_KEY !UP ARROW KEY
SKIP(@FILENAME,(COUNT-1)) ! SET TO TOP RECORD MINUS 1
IF NOT EOF(@FILENAME) ! IF THERE IS A PRIOR RECORD
NEXT(@FILENAME) ! READ THE TOP RECORD
IF NOT ERROR() ! IF READ A RECORD
SCROLL(ROW,COL,ROWS,COLS,-(ROWS(?POINT)))! SCROLL THE SCREEN DOWN
DO SHOW_RECORD ! AND DISPLAY IT
ELSIF ERRORCODE() = 33 ! ELSIF RECORD NOT AVAILABLE
PREVIOUS(@FILENAME) ! RETRIEVE FIRST ONE
. .
SKIP(@FILENAME,-(COUNT-1)) ! SET RECORD FOR NEXT PAGE
OF PGUP_KEY !PAGE UP KEY
SKIP(@FILENAME,(COUNT-1)) ! SET TO TOP RECORD MINUS ONE
IF EOF(@FILENAME) ! IF THERE IS NO PRIOR RECORD
NDX = 1 ! THEN POINT TO TOP ITEM
SKIP(@FILENAME,-(COUNT-1)) ! SET RECORD FOR THIS PAGE
ELSE ! OTHERWISE
SKIP(@FILENAME,(COUNT)) ! SET RECORD FOR PRIOR PAGE
DO SHOW_TABLE ! AND DISPLAY THE PAGE
.
OF CTRL_PGUP !CTRL-PAGE UP KEY
SET(@KEYNAME,RECORDS(@KEYNAME)) ! SET TO FIRST RECORD
NDX = 1 ! POINT TO TOP ITEM
DO SHOW_TABLE ! AND DISPLAY THE PAGE
.
. . .
RETURN !RETURN TO CALLER
SHOW_TABLE ROUTINE !DISPLAY A PAGE OF RECORDS
SKIP(@FILENAME,-(COUNT-1)) ! SET TO THE BOTTOM RECORD
IF BOF(@FILENAME) ! FOR A PARTIAL PAGE
SET(@KEYNAME) ! SET TO THE LAST RECORD
SKIP(@FILENAME,(COUNT+1)) ! AND BACK UP ONE PAGE
ELSIF EOF(@FILENAME)
SET(@KEYNAME)
SKIP(@FILENAME,COUNT)
ELSE ! OTHERWISE
SKIP(@FILENAME,COUNT) ! SET RECORD FOR THIS PAGE
.
NDX# = NDX ! SAVE REPEAT INDEX
LOOP NDX = 1 TO COUNT ! LOOP THRU THE SCROLL AREA
IF BOF(@FILENAME) THEN BREAK. ! BREAK ON END OF FILE
PREVIOUS(@FILENAME) ! READ THE NEXT RECORD
DO SHOW_RECORD ! AND DISPLAY IT
IF POINTER(@FILENAME) = POINTER# THEN NDX# = NDX.!POINT TO CORRECT RECORD
.
NDX = NDX# ! RESTORE REPEAT INDEX
CLEAR(@PRE:RECORD) ! CLEAR RECORD AREA
IF RECORDS(@KEYNAME) < COUNT ! IF RECORDS DO NOT FILL
NDX#= RECORDS(@KEYNAME) * @PROWS ! GET NUMBER TIMES SIZE
BLANK(ROW + NDX#,COL,ROWS-NDX#,COLS) ! BLANK REMAINING AREA
.
SHOW_RECORD ROUTINE !DISPLAY A RECORD
@LOOKUPSCROLL ! DISPLAY FROM OTHER FILES
@SHOWSCROLL ! DISPLAY STRING VARIABLES
@COMPUTESCROLL ! DISPLAY COMPUTED FIELDS
@CONDITIONALSCRL ! DISPLAY CONDITIONAL FIELDS
@RESULTSCROLL ! ASSIGN RESULT FIELDS
GET_RECORD ROUTINE !READ SELECTED RECORD
SKIP(@FILENAME,(MAX-NDX+1)) ! SET TO SELECTED RECORD
PREVIOUS(@FILENAME) ! AND READ IT
FIND_RECORD ROUTINE !LOCATE REQUESTED RECORD
SET(@KEYNAME,@KEYNAME) ! SET TO REQUESTED RECORD
IF EOF(@FILENAME) ! IF BEYOND END OF FILE
PREVIOUS(@FILENAME) ! GET THE LAST RECORD
ELSE ! ELSE
NEXT(@FILENAME) ! READ THIS RECORD
.
POINTER# = POINTER(@FILENAME) ! SAVE ITS RECORD POINTER
SKIP(@FILENAME,-1) ! MAKE IT THE TOP RECORD
DO SHOW_TABLE ! AND FILL THE SCROLL AREA
SAME_PAGE ROUTINE !SET TO SAME PAGE ROUTINE
POINTER# = POINTER(@FILENAME) ! SAVE ITS RECORD POINTER
GET(@FILENAME,POINTER#) ! GET THE RECORD
SET(@KEYNAME,@KEYNAME) ! SET TO THE SAME RECORD
SKIP(@FILENAME,-1) ! SKIP TO TOP OF SAME PAGE