home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / clarion / tools.zip / SCROLLIT.PRG < prev    next >
Text File  |  1988-10-20  |  6KB  |  116 lines

  1. SCROLLIT     PROCEDURE(SCROLL_PAR)
  2. !---------------------------------------------------------------------!
  3. !  THIS PROCEDURE IS USED TO PERFORM THE SCROLLING OF THE SCREEN.     !
  4. !  IT WAS OBTAINED FROM A SAMPLE CLARION PROGRAM.                     !
  5. !                                                                     !
  6. !  TO CALL THIS PROCEDURE                                             !
  7. !                                                                     !
  8. !     SCROLLIT(SCROLL_PAR)                                            !
  9. !                                                                     !
  10. !  WHERE:                                                             !
  11. !                                                                     !
  12. !        SCROLL_PAR = THE SCROLL GROUP AS FOLLOWS.                    !
  13. !                                                                     !
  14. !           SCROLL_GRP   GROUP                                        !
  15. !           FLD            BYTE       !FIELD NUMBER OF ?POINT         !
  16. !           PTR            LONG       !POINTER() OF TOP RECORD        !
  17. !           NEW_PTR        LONG       !POINTER() OF NEW RECORD        !
  18. !           NDX            BYTE       !REPEAT INDEX                   !
  19. !           FIRST_NDX      BYTE       !FIRST ROW TO BE DISPLAYED      !
  20. !           LAST_NDX       BYTE       !LAST ROW TO BE DISPLAYED       !
  21. !           ROWS           BYTE       !NUMBER OF ROWS TO SCROLL       !
  22. !           COLS           BYTE       !NUMBER OF COLUMNS TO SCROLL    !
  23. !           RECS           LONG       !RECORDS() IN FILE              !
  24. !                        .                                            !
  25. !---------------------------------------------------------------------!
  26. !     COMPILER: CLARION V2.0                                          !
  27. !       SYSTEM: N/A                                                   !
  28. !    PROCEDURE: SCROLLIT                                              !
  29. !  ENVIRONMENT: CALLED HAS A PROCEDURE                                !
  30. !   REFERENCES: SCROLL_PAR                                            !
  31. !---------------------------------------------------------------------!
  32. !  HISTORY:                                                           !
  33. !    WRITTEN   10/20/88 BY DOMINICK G. GALLUCCI                       !
  34. !    MODIFIED  00/00/00                                               !
  35. !---------------------------------------------------------------------!
  36. SCROLL_PAR EXTERNAL            !SCROLL GROUP IN CALLER
  37.  
  38. SCRSC1_GRP GROUP,PRE(SC1)
  39. FLD          BYTE              !FIELD NUMBER OF ?POINT
  40. PTR          LONG              !POINTER() OF TOP RECORD
  41. NEW_PTR      LONG              !POINTER() OF NEW RECORD
  42. NDX          BYTE              !REPEAT INDEX
  43. FIRST_NDX    BYTE              !FIRST ROW TO BE DISPLAYED
  44. LAST_NDX     BYTE              !LAST ROW TO BE DISPLAYED
  45. ROWS         BYTE              !NUMBER OF ROWS TO SCROLL
  46. COLS         BYTE              !NUMBER OF COLUMNS TO SCROLL
  47. RECS         LONG              !RECORDS() IN FILE
  48.            .
  49.  
  50. SCRSC2_GRP GROUP,PRE(SC2)
  51. SAVE_PTR     LONG              !SAVE AREA FOR PTR
  52. ROW          BYTE              !TOP ROW OF SCROLL AREA
  53. COL          BYTE              !LEFT COLUMN OF SCROLL AREA
  54.            .
  55.  
  56.   CODE
  57.  
  58.   SCRSC1_GRP = SCROLL_PAR      !MOVE THE SCROLL GROUP
  59.   SC2:SAVE_PTR = SC1:PTR       !SAVE THE RECORD POINTER
  60.   SC2:ROW = ROW(SC1:FLD) - SC1:NDX + 1  !SET TOP ROW OF SCROLL AREA
  61.   SC2:COL = COL(SC1:FLD)       !SET LEFT COLUMN OF SCROLL AREA
  62.  
  63.   SC1:FIRST_NDX = 1            !ASSUME DISPLAY OF ALL RECORDS
  64.   SC1:LAST_NDX = SC1:ROWS      !
  65.   IF SC1:ROWS > SC1:RECS       !ADJUST FOR PARTIAL PAGE
  66.     SC1:LAST_NDX = SC1:RECS    !SET TO LAST RECORD
  67.     BLANK(SC2:ROW+SC1:RECS,SC2:COL,SC1:ROWS-SC1:RECS,SC1:COLS)
  68.     IF SC1:RECS AND SC1:NDX > SC1:RECS THEN SC1:NDX = SC1:RECS.
  69.   .
  70.  
  71.   CASE KEYCODE()               !PROCESS THE KEY
  72.  
  73.   OF DOWN_KEY                  !DOWN ARROW
  74.     IF SC1:PTR <= SC1:RECS-SC1:LAST_NDX   !IF THERE ARE MORE RECORDS
  75.       SC1:PTR += 1             !POINT TO NEXT RECORD
  76.       SCROLL(SC2:ROW,SC2:COL,SC1:ROWS,SC1:COLS,1) ! SCROLL RECORDS UP
  77.       SC1:FIRST_NDX = SC1:ROWS !DISPLAY BOTTOM RECORD
  78.     .
  79.  
  80.   OF PGDN_KEY                  !PAGE DOWN
  81.     IF SC1:PTR = SC1:RECS-SC1:LAST_NDX+1 THEN SC1:NDX = SC1:LAST_NDX.
  82.     SC1:PTR += SC1:ROWS        !SCROLL DOWN ONE PAGE
  83.  
  84.   OF CTRL_PGDN                 !CTRL PAGE DOWN
  85.     SC1:PTR = SC1:RECS - SC1:LAST_NDX + 1 !SCROLL TO LAST PAGE
  86.     SC1:NDX = SC1:LAST_NDX     !SET INDEX TO BOTTOM RECORD
  87.  
  88.   OF UP_KEY                    !UP ARROW
  89.     IF SC1:PTR > 1             !IF THERE ARE MORE RECORDS
  90.       SC1:PTR -= 1             !POINT TO PREVIOUS RECORD
  91.       SCROLL(SC2:ROW,SC2:COL,SC1:ROWS,SC1:COLS,-1) !SCROLL RECORDS DOWN
  92.       SC1:LAST_NDX = 1         !DISPLAY TOP RECORD
  93.     .
  94.   OF PGUP_KEY                  !PAGE UP
  95.     IF SC1:PTR = 1 THEN SC1:NDX = 1. !IF FIRST PAGE POINT TO TOP
  96.     SC1:PTR -= SC1:ROWS        !SCROLL UP ONE PAGE
  97.  
  98.   OF CTRL_PGUP                 !CTRL PAGE UP
  99.     SC1:PTR = 1                !SCROLL TO FIRST PAGE
  100.     SC1:NDX = 1                !SET INDEX TO TOP RECORD
  101.  
  102.   ELSE                         !MUST BE SOME OTHER KEY
  103.     SC2:SAVE_PTR = 0           !FORCE DISPLAY OF ALL RECORDS
  104.     IF SC1:NEW_PTR AND SC1:NEW_PTR <> SC1:PTR+SC1:NDX-1
  105.       SC1:PTR = SC1:NEW_PTR - (SC1:LAST_NDX/2-1)
  106.   . .
  107.  
  108.   IF SC1:PTR > SC1:RECS-SC1:ROWS+1 THEN SC1:PTR = SC1:RECS-SC1:ROWS+1.
  109.   IF SC1:PTR < 1 THEN SC1:PTR = 1.
  110.   IF SC1:NEW_PTR THEN SC1:NDX = SC1:NEW_PTR-PTR+1.
  111.   IF SC1:PTR = SC2:SAVE_PTR THEN SC1:LAST_NDX = 0.
  112.  
  113.   SC1:NEW_PTR = 0               !CLEAR NEW RECORD POINTER
  114.   SCROLL_PAR = SCRSC1_GRP       !SEND THE SCROLL GROUP
  115.   RETURN                        !AND RETURN
  116.