home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / clarion / revrstbl.zip / RVRS_TBL.MDL < prev   
Text File  |  1989-10-09  |  11KB  |  260 lines

  1. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  2. ! This model procedure is a modified version to the Standard.mdl table procedure
  3. ! Basically it designed to display a file in reverse key order, for instance if!
  4. ! you have a date as one of your keys, and you wish to display the file in de- !
  5. ! scending order(newest date at the top of the screen) this procedure will do  !
  6. ! the necessary tricks.     I have not checked out the FIND_RECORD routine or the !
  7. ! SAME_PAGE routine.  Probably all you have to do is substitute BOF for EOF and!
  8. ! reverse the PREVIOUS and NEXT statements, also eliminate the SKIP statement. !
  9. !   Submitted for all CLARION users by:                           !
  10. !                                           !
  11. !      James Katz                                   !
  12. !      C/o BMW of Daytona                               !
  13. !      484 S Yonge ST                                   !
  14. !      Ormond Beach, FL 32174                               !
  15. !                                           !
  16. !      Work Phone (904) 677-9511                           !
  17. !      Home Phone (904) 441-4324                           !
  18. !                                           !
  19. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  20. *RVRSTBL***************************************************************************
  21. @PROCNAME    PROCEDURE
  22.  
  23. SCREEN         SCREEN      PRE(SCR),@SCREENOPT
  24.               @PAINTS
  25.               @STRINGS
  26.               @VARIABLES
  27.               ENTRY,USE(?FIRST_FIELD)
  28.               @FIELDS
  29.               @PREPOINT
  30.               REPEAT(@COUNT),EVERY(@PROWS),INDEX(NDX)
  31.           @PLOC        POINT(@PROWS,@COLS),USE(?POINT),ESC(?-1)
  32.                 @SCROLLVARIABLES
  33.          .          .
  34.  
  35. NDX         BYTE                 !REPEAT INDEX FOR POINT FIELD
  36. ROW         BYTE                 !ACTUAL ROW OF SCROLL AREA
  37. COL         BYTE                 !ACTUAL COLUMN OF SCROLL AREA
  38. MAX         LONG                 !LESSER OF COUNT AND RECORDS
  39. COUNT         BYTE(@COUNT)             !NUMBER OF ITEMS TO SCROLL
  40. ROWS         BYTE(@ROWS)             !NUMBER OF ROWS TO SCROLL
  41. COLS         BYTE(@COLS)             !NUMBER OF COLUMNS TO SCROLL
  42. RECORD         GROUP
  43.            BYTE,DIM(SIZE(@PRE:RECORD))
  44.          .
  45.  
  46.   EJECT
  47.   CODE
  48.   ACTION# = ACTION                 !SAVE ACTION
  49.   OPEN(SCREEN)                     !OPEN THE SCREEN
  50.   SETCURSOR                     !TURN OFF ANY CURSOR
  51.   @SETUP                     !CALL SETUP PROCEDURE
  52.   NDX = 1                     !PUT SELECTOR BAR ON TOP ITEM
  53.   ROW = ROW(?POINT)                 !REMEMBER TOP ROW AND
  54.   COL = COL(?POINT)                 !  LEFT COLUMN OF SCROLL AREA
  55.   IF ACTION = 4                     !IF THIS IS A LOOKUP REQUEST
  56.     SET(@KEYNAME,@KEYNAME)             !  FIND IT IN THE FILE
  57.     NEXT(@FILENAME)                 !    AND READ IT
  58.     POINTER# = POINTER(@FILENAME)         !  SAVE POINTER TO CURRENT
  59.     DO SHOW_TABLE                 !  FILL SCROLL AREA
  60.     GET(@FILENAME,POINTER#)             !  AND REFRESH CURRENT RECORD
  61.   ELSE                         !OTHERWISE
  62.     SET(@KEYNAME,RECORDS(@KEYNAME))         !  SET TO LAST RECORD IN FILE
  63.     DO SHOW_TABLE                 !  FILL SCROLL AREA
  64.   .
  65.   RECORDS# = TRUE                 !INITIALIZE RECORDS FLAG
  66.   LOOP                         !LOOP UNTIL USER EXITS
  67.     MAX = RECORDS(@KEYNAME)             !SET LESSER OF FILE RECORD
  68.     IF MAX > COUNT THEN MAX = COUNT.         !  COUNT AND SCROLL ITEM COUNT
  69.     ACTION = ACTION#                 !RESTORE ACTION
  70.     POINTER# = 0                 !CLEAR ADD POINTER
  71.     @LOOKUPS                     !DISPLAY FROM OTHER FILES
  72.     @SHOW                     !DISPLAY STRING VARIABLES
  73.     @COMPUTE                     !DISPLAY COMPUTED FIELDS
  74.     @CONDITIONAL                 !DISPLAY CONDITIONAL FIELDS
  75.     @RESULT                     !MOVE RESULTING VALUES
  76.     IF ~RECORDS(@KEYNAME)             !IF THERE ARE NO RECORDS
  77.       CLEAR(@PRE:RECORD)             !  CLEAR RECORD AREA
  78.       ACTION = 1                 !  SET ACTION TO ADD
  79.       @AUTONUMKEY                 !  AUTO INCREMENT KEY FIELD
  80.       @UPDATE                     !  CALL FORM FOR FIRST RECORD
  81.       IF ~RECORDS(@KEYNAME) THEN BREAK.         !  IF ADD ABORTED THEN EXIT
  82.       SET(@KEYNAME)                 !  SET TO NEW RECORD
  83.       DO SHOW_TABLE                 !  FILL SCROLL AREA
  84.       NDX = 1                     !  PUT SELECTOR BAR ON TOP ITEM
  85.       MAX = 1                     !  MAXIMUM DISPLAYED IS 1
  86.     .                         !
  87.     ALERT                     !RESET ALERTED KEYS
  88.     ALERT(REJECT_KEY)                 !ALERT SCREEN REJECT KEY
  89.     ALERT(ACCEPT_KEY)                 !ALERT SCREEN ACCEPT KEY
  90.     @ALERT                     !ALERT HOT KEY
  91.     ACCEPT                     !READ A FIELD
  92.     @TABLEHOT                     !ON HOT KEY, CALL PROCEDURE
  93.     IF KEYCODE() = REJECT_KEY THEN BREAK.     !RETURN ON SCREEN REJECT KEY
  94.  
  95.     EDIT_RANGE# = FIELD()             !SET ONE FIELD EDIT RANGE
  96.     IF KEYCODE() = ACCEPT_KEY AND |         !ON SCREEN ACCEPT KEY
  97.        EDIT_RANGE# <> ?POINT             ! AND NOT ON THE POINT FIELD
  98.       UPDATE                     !  MOVE ALL FIELDS FROM SCREEN
  99.       EDIT_RANGE# = ?POINT - 1             !  AND EDIT REMAINING FIELDS
  100.       SELECT(?POINT)                 !  IF OK THEN START HERE NEXT
  101.     .                         !
  102.  
  103.     LOOP FIELD# = FIELD() TO EDIT_RANGE#     !EDIT FIELDS IN THE EDIT RANGE
  104.  
  105.       CASE FIELD#                 !JUMP TO FIELD EDIT ROUTINE
  106.       OF ?FIRST_FIELD                 !FROM THE FIRST FIELD
  107.     IF KEYCODE() = ESC_KEY    OR |         !  RETURN ON ESC KEY
  108.        RECORDS# = FALSE             !  OR NO RECORDS
  109.          RETURN
  110.     .
  111.       @EDITS                     !EDIT ROUTINES GO HERE
  112.     RECORDS# = TRUE                 !  ASSUME RECORDS ARE HERE
  113.       @INITLOCATE                 !SHOW CURSOR FOR LOCATOR
  114.       OF ?POINT                     !FROM THE POINT FIELD
  115.     @LOCATE
  116.     CASE KEYCODE()                 !  PROCESS THE KEYSTROKE
  117.     OF INS_KEY                 !INSERT KEY
  118.       DO GET_RECORD
  119.       RECORD = @PRE:RECORD
  120.       CLEAR(@PRE:RECORD)             !  CLEAR RECORD AREA
  121.       ACTION = 1                 !  SET ACTION TO ADD
  122.       @AUTONUMKEY                 !  AUTO INCREMENT KEY FIELD
  123.       @UPDATE                 !  CALL FORM FOR NEW RECORD
  124.       IF ~ACTION                 !  IF A NEW RECORD WAS ADDED
  125.         POINTER# = POINTER(@FILENAME)     !    REMEMBER WHICH RECORD
  126.         SET(@KEYNAME,@KEYNAME)         !    SET TO NEW RECORD AND
  127.         DO SHOW_TABLE             !    DISPLAY THAT PAGE
  128.       ELSE
  129.         @PRE:RECORD = RECORD
  130.         SET(@KEYNAME,@KEYNAME)
  131.         SKIP(@FILENAME,-(MAX-NDX))
  132.       .
  133.     OF ENTER_KEY                 !ENTER KEY OR
  134.     OROF ACCEPT_KEY                 !CTRL ENTER KEY
  135.       DO GET_RECORD                 !  READ THE SELECTED RECORD
  136.       IF ACTION = 4 AND KEYCODE() = ENTER_KEY!  IF THIS IS A LOOKUP REQUEST
  137.         ACTION = 0                 !    SET ACTION TO COMPLETE
  138.         RETURN                 !    AND RETURN TO CALLER
  139.       .                     !
  140.       ACTION = 2                 !  SET ACTION TO CHANGE
  141.       @UPDATE                 !  CALL FORM TO CHANGE RECORD
  142.       IF ~ACTION                 !  IF THE RECORD WAS CHANGED
  143.         POINTER# = POINTER(@FILENAME)     !    REMEMBER WHICH RECORD
  144.         SET(@KEYNAME,@KEYNAME)         !    SET TO CHANGED RECORD
  145.         DO SHOW_TABLE             !    AND DISPLAY THAT PAGE
  146.       ELSE                     !  OTHERWISE
  147.         SKIP(@FILENAME,-(MAX-NDX))         !  SKIP BACK TO SAME PAGE
  148.       .
  149.     OF DEL_KEY                 !DELETE KEY
  150.       DO GET_RECORD                 !  READ THE SELECTED RECORD
  151.       ACTION = 3                 !  SET ACTION TO DELETE
  152.       @UPDATE                 !  CALL FORM TO DELETE RECORD
  153.       IF ~ACTION                 !  IF RECORD WAS DELETED
  154.         SKIP(@FILENAME,NDX)         !    SET NEXT RECORD ON TOP
  155.         DO SHOW_TABLE             !    AND DISPLAY THAT PAGE
  156.       ELSE                     !  OTHERWISE
  157.         SKIP(@FILENAME,-(MAX-NDX))         !  SKIP BACK TO SAME PAGE
  158.       .
  159.     OF DOWN_KEY                 !DOWN ARROW KEY
  160.       IF NOT BOF(@FILENAME)             !  IF THERE ARE MORE RECORDS
  161.         SCROLL(ROW,COL,ROWS,COLS,ROWS(?POINT)) !  SCROLL THE SCREEN UP
  162.         PREVIOUS(@FILENAME)             !    READ THE BOTTOM RECORD
  163.         DO SHOW_RECORD             !    AND DISPLAY IT
  164.       .
  165.     OF PGDN_KEY                 !PAGE DOWN KEY
  166.       IF BOF(@FILENAME)             !  AT THE FIRST PAGE
  167.         NDX = MAX                 !    POINT TO BOTTOM ITEM
  168.       ELSE                     !  OTHERWISE
  169.         SKIP(@FILENAME,-1)
  170.         DO SHOW_TABLE             !    DISPLAY NEXT PAGE
  171.       .
  172.     OF CTRL_PGDN                 !CTRL-PAGE DOWN KEY
  173.       NDX = MAX                 !  POINT TO BOTTOM ITEM
  174.       IF NOT BOF(@FILENAME)             !  ON THE LAST PAGE
  175.         SET(@KEYNAME)             !    SET TO BOTTOM RECORD MINUS
  176.         SKIP(@FILENAME,COUNT)         !    ONE PAGE OF RECORDS
  177.         DO SHOW_TABLE             !    DISPLAY THE LAST PAGE
  178.       .
  179.     OF UP_KEY                 !UP ARROW KEY
  180.       SKIP(@FILENAME,(COUNT-1))         !    SET TO TOP RECORD MINUS 1
  181.       IF NOT EOF(@FILENAME)             !  IF THERE IS A PRIOR RECORD
  182.         NEXT(@FILENAME)             !     READ THE TOP RECORD
  183.         IF NOT ERROR()             !    IF READ A RECORD
  184.           SCROLL(ROW,COL,ROWS,COLS,-(ROWS(?POINT)))! SCROLL THE SCREEN DOWN
  185.           DO SHOW_RECORD             !     AND DISPLAY IT
  186.         ELSIF ERRORCODE() = 33         !    ELSIF RECORD NOT AVAILABLE
  187.           PREVIOUS(@FILENAME)         !     RETRIEVE FIRST ONE
  188.       . .
  189.       SKIP(@FILENAME,-(COUNT-1))         !  SET RECORD FOR NEXT PAGE
  190.  
  191.     OF PGUP_KEY                 !PAGE UP KEY
  192.       SKIP(@FILENAME,(COUNT-1))         !  SET TO TOP RECORD MINUS ONE
  193.       IF EOF(@FILENAME)             !  IF THERE IS NO PRIOR RECORD
  194.         NDX = 1                 !    THEN POINT TO TOP ITEM
  195.         SKIP(@FILENAME,-(COUNT-1))         !    SET RECORD FOR THIS PAGE
  196.       ELSE                     !  OTHERWISE
  197.         SKIP(@FILENAME,(COUNT))         !    SET RECORD FOR PRIOR PAGE
  198.         DO SHOW_TABLE             !    AND DISPLAY THE PAGE
  199.       .
  200.     OF CTRL_PGUP                 !CTRL-PAGE UP KEY
  201.       SET(@KEYNAME,RECORDS(@KEYNAME))     !  SET TO FIRST RECORD
  202.       NDX = 1                 !  POINT TO TOP ITEM
  203.       DO SHOW_TABLE                 !  AND DISPLAY THE PAGE
  204.     .
  205.   . . .
  206.   RETURN                     !RETURN TO CALLER
  207.  
  208. SHOW_TABLE ROUTINE                 !DISPLAY A PAGE OF RECORDS
  209.   SKIP(@FILENAME,-(COUNT-1))             !  SET TO THE BOTTOM RECORD
  210.   IF BOF(@FILENAME)                 !  FOR A PARTIAL PAGE
  211.     SET(@KEYNAME)                 !    SET TO THE LAST RECORD
  212.     SKIP(@FILENAME,(COUNT+1))             !    AND BACK UP ONE PAGE
  213.   ELSIF EOF(@FILENAME)
  214.     SET(@KEYNAME)
  215.     SKIP(@FILENAME,COUNT)
  216.   ELSE                         !  OTHERWISE
  217.     SKIP(@FILENAME,COUNT)             !    SET RECORD FOR THIS PAGE
  218.   .
  219.   NDX# = NDX                     !  SAVE REPEAT INDEX
  220.   LOOP NDX = 1 TO COUNT                 !  LOOP THRU THE SCROLL AREA
  221.     IF BOF(@FILENAME) THEN BREAK.         !    BREAK ON END OF FILE
  222.     PREVIOUS(@FILENAME)                 !    READ THE NEXT RECORD
  223.     DO SHOW_RECORD                 !    AND DISPLAY IT
  224.     IF POINTER(@FILENAME) = POINTER# THEN NDX# = NDX.!POINT TO CORRECT RECORD
  225.   .
  226.   NDX = NDX#                     !  RESTORE REPEAT INDEX
  227.   CLEAR(@PRE:RECORD)                 !  CLEAR RECORD AREA
  228.   IF RECORDS(@KEYNAME) < COUNT             !  IF RECORDS DO NOT FILL
  229.      NDX#= RECORDS(@KEYNAME) * @PROWS         !     GET NUMBER TIMES SIZE
  230.      BLANK(ROW + NDX#,COL,ROWS-NDX#,COLS)     !     BLANK REMAINING AREA
  231.   .
  232.  
  233. SHOW_RECORD ROUTINE                 !DISPLAY A RECORD
  234.   @LOOKUPSCROLL                     !  DISPLAY FROM OTHER FILES
  235.   @SHOWSCROLL                     !  DISPLAY STRING VARIABLES
  236.   @COMPUTESCROLL                 !  DISPLAY COMPUTED FIELDS
  237.   @CONDITIONALSCRL                 !  DISPLAY CONDITIONAL FIELDS
  238.   @RESULTSCROLL                     !  ASSIGN RESULT FIELDS
  239.  
  240. GET_RECORD ROUTINE                 !READ SELECTED RECORD
  241.   SKIP(@FILENAME,(MAX-NDX+1))             !  SET TO SELECTED RECORD
  242.   PREVIOUS(@FILENAME)                 !    AND READ IT
  243.  
  244. FIND_RECORD ROUTINE                 !LOCATE REQUESTED RECORD
  245.   SET(@KEYNAME,@KEYNAME)             !  SET TO REQUESTED RECORD
  246.   IF EOF(@FILENAME)                 !  IF BEYOND END OF FILE
  247.     PREVIOUS(@FILENAME)                 !    GET THE LAST RECORD
  248.   ELSE                         !  ELSE
  249.     NEXT(@FILENAME)                 !    READ THIS RECORD
  250.   .
  251.   POINTER# = POINTER(@FILENAME)             !  SAVE ITS RECORD POINTER
  252.   SKIP(@FILENAME,-1)                 !  MAKE IT THE TOP RECORD
  253.   DO SHOW_TABLE                     !  AND FILL THE SCROLL AREA
  254.  
  255. SAME_PAGE ROUTINE                 !SET TO SAME PAGE ROUTINE
  256.   POINTER# = POINTER(@FILENAME)             !  SAVE ITS RECORD POINTER
  257.   GET(@FILENAME,POINTER#)             !  GET THE RECORD
  258.   SET(@KEYNAME,@KEYNAME)             !  SET TO THE SAME RECORD
  259.   SKIP(@FILENAME,-1)                 !  SKIP TO TOP OF SAME PAGE
  260.