home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / clarion / control.zip / CONTROL5.CLA < prev    next >
Text File  |  1988-08-13  |  3KB  |  77 lines

  1.          MEMBER('CONTROLS')
  2.  
  3. SCROLLIT     PROCEDURE(SCROLL_PAR)
  4. SCROLL_PAR   EXTERNAL                 !SCROLL GROUP IN CALLER
  5.  
  6. SCROLL_GRP   GROUP
  7. FLD           BYTE                 !FIELD NUMBER OF ?POINT
  8. PTR           LONG                 !POINTER() OF TOP RECORD
  9. NEW_PTR           LONG                 !POINTER() OF NEW RECORD
  10. NDX           BYTE                 !REPEAT INDEX
  11. FIRST_NDX      BYTE                 !FIRST ROW TO BE DISPLAYED
  12. LAST_NDX       BYTE                 !LAST ROW TO BE DISPLAYED
  13. ROWS           BYTE                 !NUMBER OF ROWS TO SCROLL
  14. COLS           BYTE                 !NUMBER OF COLUMNS TO SCROLL
  15. RECS           LONG                 !RECORDS() IN FILE
  16.          .
  17. SAVE_PTR     LONG                 !SAVE AREA FOR PTR
  18. ROW         BYTE                 !TOP ROW OF SCROLL AREA
  19. COL         BYTE                 !LEFT COLUMN OF SCROLL AREA
  20.  
  21.   CODE
  22.   SCROLL_GRP = SCROLL_PAR             !MOVE THE SCROLL GROUP
  23.   SAVE_PTR = PTR                 !SAVE THE RECORD POINTER
  24.   ROW = ROW(FLD) - NDX + 1             !SET TOP ROW OF SCROLL AREA
  25.   COL = COL(FLD)                 !SET LEFT COLUMN OF SCROLL AREA
  26.  
  27.   FIRST_NDX = 1                     !ASSUME DISPLAY OF ALL RECORDS
  28.   LAST_NDX = ROWS                 !
  29.   IF ROWS > RECS                 !ADJUST FOR PARTIAL PAGE
  30.     LAST_NDX = RECS                 !  SET TO LAST RECORD
  31.     BLANK(ROW+RECS,COL,ROWS-RECS,COLS)         !  CLEAR EXTRA AREA
  32.     IF RECS AND NDX > RECS THEN NDX = RECS.     ! STOP AT LAST RECORD
  33.   .
  34.   CASE KEYCODE()                 !PROCESS THE KEY
  35.   OF DOWN_KEY                     !DOWN ARROW
  36.     IF PTR <= RECS-LAST_NDX             !IF THERE ARE MORE RECORDS
  37.       PTR += 1                     !  POINT TO NEXT RECORD
  38.       SCROLL(ROW,COL,ROWS,COLS,1)         !  SCROLL RECORDS UP
  39.       FIRST_NDX = ROWS                 !  DISPLAY BOTTOM RECORD
  40.     .
  41.   OF PGDN_KEY                     !PAGE DOWN
  42.     IF PTR = RECS-LAST_NDX+1 THEN NDX = LAST_NDX. !IF LAST PAGE POINT TO BOTTOM
  43.     PTR += ROWS                     !  SCROLL DOWN ONE PAGE
  44.  
  45.   OF CTRL_PGDN                     !CTRL PAGE DOWN
  46.     PTR = RECS - LAST_NDX + 1             !SCROLL TO LAST PAGE
  47.     NDX = LAST_NDX                 !SET INDEX TO BOTTOM RECORD
  48.  
  49.   OF UP_KEY                     !UP ARROW
  50.     IF PTR > 1                     !IF THERE ARE MORE RECORDS
  51.       PTR -= 1                     !  POINT TO PREVIOUS RECORD
  52.       SCROLL(ROW,COL,ROWS,COLS,-1)         !  SCROLL RECORDS DOWN
  53.       LAST_NDX = 1                 !  DISPLAY TOP RECORD
  54.     .
  55.   OF PGUP_KEY                     !PAGE UP
  56.     IF PTR = 1 THEN NDX = 1.             !IF FIRST PAGE POINT TO TOP
  57.     PTR -= ROWS                     !  SCROLL UP ONE PAGE
  58.  
  59.   OF CTRL_PGUP                     !CTRL PAGE UP
  60.     PTR = 1                     !SCROLL TO FIRST PAGE
  61.     NDX = 1                     !SET INDEX TO TOP RECORD
  62.  
  63.   ELSE                         !MUST BE SOME OTHER KEY
  64.     SAVE_PTR = 0                 !FORCE DISPLAY OF ALL RECORDS
  65.     IF NEW_PTR AND NEW_PTR <> PTR+NDX-1         !IF A RECORD WAS ADDED OR MOVED
  66.       PTR = NEW_PTR - (LAST_NDX/2-1)         !  CENTER THE RECORD
  67.   . .
  68.  
  69.   IF PTR > RECS-ROWS+1 THEN PTR = RECS-ROWS+1.     !CORRECT OVERSHOOT
  70.   IF PTR < 1 THEN PTR = 1.             !CORRECT UNDERSHOOT
  71.   IF NEW_PTR THEN NDX = NEW_PTR-PTR+1.         !  SET INDEX AT NEW RECORD
  72.   IF PTR = SAVE_PTR THEN LAST_NDX = 0.         !NO REDISPLAY FOR SAME RECORDS
  73.  
  74.   NEW_PTR = 0                     !CLEAR NEW RECORD POINTER
  75.   SCROLL_PAR = SCROLL_GRP             !SEND THE SCROLL GROUP
  76.   RETURN                     !  AND RETURN
  77.