home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Media Share 9
/
MEDIASHARE_09.ISO
/
clarion
/
control.zip
/
CONTROL5.CLA
< prev
next >
Wrap
Text File
|
1988-08-13
|
3KB
|
77 lines
MEMBER('CONTROLS')
SCROLLIT PROCEDURE(SCROLL_PAR)
SCROLL_PAR EXTERNAL !SCROLL GROUP IN CALLER
SCROLL_GRP GROUP
FLD BYTE !FIELD NUMBER OF ?POINT
PTR LONG !POINTER() OF TOP RECORD
NEW_PTR LONG !POINTER() OF NEW RECORD
NDX BYTE !REPEAT INDEX
FIRST_NDX BYTE !FIRST ROW TO BE DISPLAYED
LAST_NDX BYTE !LAST ROW TO BE DISPLAYED
ROWS BYTE !NUMBER OF ROWS TO SCROLL
COLS BYTE !NUMBER OF COLUMNS TO SCROLL
RECS LONG !RECORDS() IN FILE
.
SAVE_PTR LONG !SAVE AREA FOR PTR
ROW BYTE !TOP ROW OF SCROLL AREA
COL BYTE !LEFT COLUMN OF SCROLL AREA
CODE
SCROLL_GRP = SCROLL_PAR !MOVE THE SCROLL GROUP
SAVE_PTR = PTR !SAVE THE RECORD POINTER
ROW = ROW(FLD) - NDX + 1 !SET TOP ROW OF SCROLL AREA
COL = COL(FLD) !SET LEFT COLUMN OF SCROLL AREA
FIRST_NDX = 1 !ASSUME DISPLAY OF ALL RECORDS
LAST_NDX = ROWS !
IF ROWS > RECS !ADJUST FOR PARTIAL PAGE
LAST_NDX = RECS ! SET TO LAST RECORD
BLANK(ROW+RECS,COL,ROWS-RECS,COLS) ! CLEAR EXTRA AREA
IF RECS AND NDX > RECS THEN NDX = RECS. ! STOP AT LAST RECORD
.
CASE KEYCODE() !PROCESS THE KEY
OF DOWN_KEY !DOWN ARROW
IF PTR <= RECS-LAST_NDX !IF THERE ARE MORE RECORDS
PTR += 1 ! POINT TO NEXT RECORD
SCROLL(ROW,COL,ROWS,COLS,1) ! SCROLL RECORDS UP
FIRST_NDX = ROWS ! DISPLAY BOTTOM RECORD
.
OF PGDN_KEY !PAGE DOWN
IF PTR = RECS-LAST_NDX+1 THEN NDX = LAST_NDX. !IF LAST PAGE POINT TO BOTTOM
PTR += ROWS ! SCROLL DOWN ONE PAGE
OF CTRL_PGDN !CTRL PAGE DOWN
PTR = RECS - LAST_NDX + 1 !SCROLL TO LAST PAGE
NDX = LAST_NDX !SET INDEX TO BOTTOM RECORD
OF UP_KEY !UP ARROW
IF PTR > 1 !IF THERE ARE MORE RECORDS
PTR -= 1 ! POINT TO PREVIOUS RECORD
SCROLL(ROW,COL,ROWS,COLS,-1) ! SCROLL RECORDS DOWN
LAST_NDX = 1 ! DISPLAY TOP RECORD
.
OF PGUP_KEY !PAGE UP
IF PTR = 1 THEN NDX = 1. !IF FIRST PAGE POINT TO TOP
PTR -= ROWS ! SCROLL UP ONE PAGE
OF CTRL_PGUP !CTRL PAGE UP
PTR = 1 !SCROLL TO FIRST PAGE
NDX = 1 !SET INDEX TO TOP RECORD
ELSE !MUST BE SOME OTHER KEY
SAVE_PTR = 0 !FORCE DISPLAY OF ALL RECORDS
IF NEW_PTR AND NEW_PTR <> PTR+NDX-1 !IF A RECORD WAS ADDED OR MOVED
PTR = NEW_PTR - (LAST_NDX/2-1) ! CENTER THE RECORD
. .
IF PTR > RECS-ROWS+1 THEN PTR = RECS-ROWS+1. !CORRECT OVERSHOOT
IF PTR < 1 THEN PTR = 1. !CORRECT UNDERSHOOT
IF NEW_PTR THEN NDX = NEW_PTR-PTR+1. ! SET INDEX AT NEW RECORD
IF PTR = SAVE_PTR THEN LAST_NDX = 0. !NO REDISPLAY FOR SAME RECORDS
NEW_PTR = 0 !CLEAR NEW RECORD POINTER
SCROLL_PAR = SCROLL_GRP !SEND THE SCROLL GROUP
RETURN ! AND RETURN