home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Media Share 9
/
MEDIASHARE_09.ISO
/
clarion
/
tools.zip
/
SCROLLIT.PRG
< prev
next >
Wrap
Text File
|
1988-10-20
|
6KB
|
116 lines
SCROLLIT PROCEDURE(SCROLL_PAR)
!---------------------------------------------------------------------!
! THIS PROCEDURE IS USED TO PERFORM THE SCROLLING OF THE SCREEN. !
! IT WAS OBTAINED FROM A SAMPLE CLARION PROGRAM. !
! !
! TO CALL THIS PROCEDURE !
! !
! SCROLLIT(SCROLL_PAR) !
! !
! WHERE: !
! !
! SCROLL_PAR = THE SCROLL GROUP AS FOLLOWS. !
! !
! 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 !
! . !
!---------------------------------------------------------------------!
! COMPILER: CLARION V2.0 !
! SYSTEM: N/A !
! PROCEDURE: SCROLLIT !
! ENVIRONMENT: CALLED HAS A PROCEDURE !
! REFERENCES: SCROLL_PAR !
!---------------------------------------------------------------------!
! HISTORY: !
! WRITTEN 10/20/88 BY DOMINICK G. GALLUCCI !
! MODIFIED 00/00/00 !
!---------------------------------------------------------------------!
SCROLL_PAR EXTERNAL !SCROLL GROUP IN CALLER
SCRSC1_GRP GROUP,PRE(SC1)
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
.
SCRSC2_GRP GROUP,PRE(SC2)
SAVE_PTR LONG !SAVE AREA FOR PTR
ROW BYTE !TOP ROW OF SCROLL AREA
COL BYTE !LEFT COLUMN OF SCROLL AREA
.
CODE
SCRSC1_GRP = SCROLL_PAR !MOVE THE SCROLL GROUP
SC2:SAVE_PTR = SC1:PTR !SAVE THE RECORD POINTER
SC2:ROW = ROW(SC1:FLD) - SC1:NDX + 1 !SET TOP ROW OF SCROLL AREA
SC2:COL = COL(SC1:FLD) !SET LEFT COLUMN OF SCROLL AREA
SC1:FIRST_NDX = 1 !ASSUME DISPLAY OF ALL RECORDS
SC1:LAST_NDX = SC1:ROWS !
IF SC1:ROWS > SC1:RECS !ADJUST FOR PARTIAL PAGE
SC1:LAST_NDX = SC1:RECS !SET TO LAST RECORD
BLANK(SC2:ROW+SC1:RECS,SC2:COL,SC1:ROWS-SC1:RECS,SC1:COLS)
IF SC1:RECS AND SC1:NDX > SC1:RECS THEN SC1:NDX = SC1:RECS.
.
CASE KEYCODE() !PROCESS THE KEY
OF DOWN_KEY !DOWN ARROW
IF SC1:PTR <= SC1:RECS-SC1:LAST_NDX !IF THERE ARE MORE RECORDS
SC1:PTR += 1 !POINT TO NEXT RECORD
SCROLL(SC2:ROW,SC2:COL,SC1:ROWS,SC1:COLS,1) ! SCROLL RECORDS UP
SC1:FIRST_NDX = SC1:ROWS !DISPLAY BOTTOM RECORD
.
OF PGDN_KEY !PAGE DOWN
IF SC1:PTR = SC1:RECS-SC1:LAST_NDX+1 THEN SC1:NDX = SC1:LAST_NDX.
SC1:PTR += SC1:ROWS !SCROLL DOWN ONE PAGE
OF CTRL_PGDN !CTRL PAGE DOWN
SC1:PTR = SC1:RECS - SC1:LAST_NDX + 1 !SCROLL TO LAST PAGE
SC1:NDX = SC1:LAST_NDX !SET INDEX TO BOTTOM RECORD
OF UP_KEY !UP ARROW
IF SC1:PTR > 1 !IF THERE ARE MORE RECORDS
SC1:PTR -= 1 !POINT TO PREVIOUS RECORD
SCROLL(SC2:ROW,SC2:COL,SC1:ROWS,SC1:COLS,-1) !SCROLL RECORDS DOWN
SC1:LAST_NDX = 1 !DISPLAY TOP RECORD
.
OF PGUP_KEY !PAGE UP
IF SC1:PTR = 1 THEN SC1:NDX = 1. !IF FIRST PAGE POINT TO TOP
SC1:PTR -= SC1:ROWS !SCROLL UP ONE PAGE
OF CTRL_PGUP !CTRL PAGE UP
SC1:PTR = 1 !SCROLL TO FIRST PAGE
SC1:NDX = 1 !SET INDEX TO TOP RECORD
ELSE !MUST BE SOME OTHER KEY
SC2:SAVE_PTR = 0 !FORCE DISPLAY OF ALL RECORDS
IF SC1:NEW_PTR AND SC1:NEW_PTR <> SC1:PTR+SC1:NDX-1
SC1:PTR = SC1:NEW_PTR - (SC1:LAST_NDX/2-1)
. .
IF SC1:PTR > SC1:RECS-SC1:ROWS+1 THEN SC1:PTR = SC1:RECS-SC1:ROWS+1.
IF SC1:PTR < 1 THEN SC1:PTR = 1.
IF SC1:NEW_PTR THEN SC1:NDX = SC1:NEW_PTR-PTR+1.
IF SC1:PTR = SC2:SAVE_PTR THEN SC1:LAST_NDX = 0.
SC1:NEW_PTR = 0 !CLEAR NEW RECORD POINTER
SCROLL_PAR = SCRSC1_GRP !SEND THE SCROLL GROUP
RETURN !AND RETURN