home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_02_09 / 2n09018a < prev    next >
Text File  |  1991-07-31  |  6KB  |  134 lines

  1.   PICK.SECS FUNCTION (ACTION)
  2.   ACTION EXTERNAL
  3.  
  4.       SCREEN, VARIABLES
  5.           EXCLUDED FROM LISTING
  6.       CODE
  7.   ! SET SCREEN COLORS
  8.   SETHUE(STG:COLORS[SCR_SEC_KIND, SCR_TAB_TYPE, 1], |
  9.       STG:COLORS[SCR_SEC_KIND, SCR_TAB_TYPE, 2]) 
  10.   OPEN(SCREEN)                      !OPEN THE SCREEN
  11.   SETCURSOR                         !TURN OFF ANY CURSOR
  12.  
  13.   NDX = 1                           !PUT SELECTOR BAR ON TOP ITEM
  14.   ROW = ROW(?POINT)                 !REMEMBER TOP ROW AND
  15.   COL = COL(?POINT)                 !LEFT COLUMN OF SCROLL AREA
  16.   CLEAR_TAGS()                      !CLEAR TAG TABLE
  17.   SET(SEC:SYMBOL_KEY)
  18.   DO SHOW_TABLE
  19.   MAX = RECORDS(SEC:SYMBOL_KEY)
  20.   LOOP                              !LOOP UNTIL USER EXITS
  21.     IF MAX > COUNT THEN MAX = COUNT.!COUNT AND SCROLL ITEM COUNT
  22.     POINTER# = 0                    !CLEAR POINTER
  23.     ALERT                           !RESET ALERTED KEYS
  24.     ALERT(REJECT_KEY)               !ALERT SCREEN REJECT KEY
  25.     ALERT(ACCEPT_KEY)               !ALERT SCREEN ACCEPT KEY
  26.     ALERT(ESC_KEY)
  27.     ACCEPT                          !READ A FIELD
  28.     IF ~RECORDS(SECURITY)           !IF THERE ARE NO RECORDS
  29.       NO_RECS(ROW(?POINT),COL(?POINT)) ! SHOW MESSAGE
  30.     .
  31.     CASE KEYCODE()                  !PROCESS THE KEYSTROKE
  32.     OF REJECT_KEY
  33.     OROF ESC_KEY
  34.     OROF ACCEPT_KEY
  35.       BREAK                         !END LOOP
  36.     OF ENTER_KEY                    !ENTER KEY OR
  37.       DO GET_RECORD                 !SET TBLPTR
  38.       TAG_IT(POINTER(SECURITY))     !TAG THIS RECORD
  39.       DO SHOW_RECORD
  40.       SKIP(SECURITY,COUNT-NDX)
  41.       IF NDX < COUNT
  42.         NDX += 1                    !AND MOVE DOWN ONE
  43.       ELSE
  44.         IF NOT EOF(SECURITY)        !IF THERE ARE MORE RECORDS
  45.           SCROLL(ROW,COL,ROWS,COLS,ROWS(?POINT)) ! SCROLL UP
  46.           NEXT(SECURITY)            !READ THE BOTTOM RECORD
  47.           DO SHOW_RECORD            !AND DISPLAY IT
  48.       . .
  49.     OF DOWN_KEY                     !DOWN ARROW KEY
  50.       IF NOT EOF(SECURITY)          !IF THERE ARE MORE RECORDS
  51.         SCROLL(ROW,COL,ROWS,COLS,ROWS(?POINT)) !SCROLL UP
  52.         NEXT(SECURITY)                   !READ THE BOTTOM RECORD
  53.         DO SHOW_RECORD                   !AND DISPLAY IT
  54.       .
  55.     OF PGDN_KEY                     !PAGE DOWN KEY
  56.       IF EOF(SECURITY)              !ON THE LAST PAGE
  57.         NDX = MAX                        !POINT TO BOTTOM ITEM
  58.       ELSE                          !OTHERWISE
  59.         DO SHOW_TABLE                    !DISPLAY NEXT PAGE
  60.       .
  61.  
  62.     OF CTRL_PGDN                    !CTRL-PAGE DOWN KEY
  63.       NDX = MAX                     !POINT TO BOTTOM ITEM
  64.       IF NOT EOF(SECURITY)          !ON THE LAST PAGE
  65.         SET(SEC:SYMBOL_KEY)         !SET TO BOTTOM RECORD MINUS
  66.         SKIP(SECURITY,-COUNT)       !ONE PAGE OF RECORDS
  67.         DO SHOW_TABLE                    !DISPLAY THE LAST PAGE
  68.       .
  69.     OF UP_KEY                       !UP ARROW KEY
  70.       SKIP(SECURITY,-(COUNT-1))     !SET TO TOP RECORD MINUS 1
  71.       IF NOT BOF(SECURITY)          !IF THERE IS A PRIOR RECORD
  72.         PREVIOUS(SECURITY)               !READ THE TOP RECORD
  73.         IF NOT ERROR()                   !IF READ A RECORD
  74.           SCROLL(ROW,COL,ROWS,COLS,-(ROWS(?POINT)))!SCROLL DOWN
  75.           DO SHOW_RECORD            !AND DISPLAY IT
  76.       . .
  77.       SKIP(SECURITY,COUNT-1)        !SET RECORD FOR NEXT PAGE
  78.     OF PGUP_KEY                     !PAGE UP KEY
  79.       SKIP(SECURITY,-(COUNT-1))     !SET TO TOP RECORD MINUS ONE
  80.       IF BOF(SECURITY)              !IF THERE IS NO PRIOR RECORD
  81.         NDX = 1                     !THEN POINT TO TOP ITEM
  82.         SKIP(SECURITY,COUNT-1)      !SET RECORD FOR THIS PAGE
  83.       ELSE                          !OTHERWISE
  84.         SKIP(SECURITY,-(COUNT+1))   !SET RECORD FOR PRIOR PAGE
  85.         DO SHOW_TABLE                    !AND DISPLAY THE PAGE
  86.       .
  87.     OF CTRL_PGUP                    !CTRL-PAGE UP
  88.       SET(SEC:SYMBOL_KEY)           !SET TO FIRST RECORD
  89.       NDX = 1                       !POINT TO TOP ITEM
  90.       DO SHOW_TABLE                 !AND DISPLAY THE PAGE
  91.   . .
  92.   SETHUE()                          !RESET COLORS
  93.   IF ANY_TAGS() THEN RETURN(ACT_DONE). !RETURN DONE IF ANY TAGGED
  94.   RETURN(ACTION)                    !NOT DONE IF NONE TAGGED
  95.  
  96. SHOW_TABLE ROUTINE                  !DISPLAY A PAGE OF RECORDS
  97.   SKIP(SECURITY,COUNT-1)            !SET TO THE BOTTOM RECORD
  98.   IF EOF(SECURITY)                  !FOR A PARTIAL PAGE
  99.     SET(SEC:SYMBOL_KEY)             !SET TO THE LAST RECORD
  100.     SKIP(SECURITY,-COUNT)           !AND BACK UP ONE PAGE
  101.   ELSE                              !OTHERWISE
  102.     SKIP(SECURITY,-(COUNT-1))       !SET RECORD FOR THIS PAGE
  103.   .
  104.   NDX# = NDX                        !SAVE REPEAT INDEX
  105.   LOOP NDX = 1 TO COUNT             !LOOP THRU THE SCROLL AREA
  106.     IF EOF(SECURITY) THEN BREAK.    !BREAK ON END OF FILE
  107.     NEXT(SECURITY)                  !READ THE NEXT RECORD
  108.     DO SHOW_RECORD                  !AND DISPLAY IT
  109.   .
  110.   NDX = NDX#
  111.   IF RECORDS(SEC:SYMBOL_KEY) < COUNT !IF RECORDS DO NOT FILL
  112.      NDX#= RECORDS(SEC:SYMBOL_KEY)
  113.      BLANK(ROW + NDX#,COL,ROWS-NDX#,COLS) !BLANK REMAINING AREA
  114.   .
  115.  
  116. SHOW_RECORD  ROUTINE                !DISPLAY SCROLLING LINE
  117.   SCR:SYMBOL = SEC:SYMBOL
  118.   SCR:NAME = SEC:NAME
  119.   IF IS_TAG(POINTER(SECURITY))      !IF RECORD TAGGED,SHOW CHECK
  120.       SCR:TAG = '√'
  121.   ELSE
  122.       SCR:TAG = ' '                 !RECORD NOT TAGGED,SHOW SPACE
  123.   .
  124.  
  125. GET_RECORD ROUTINE                  !READ SELECTED RECORD
  126.   SKIP(SECURITY,-(MAX-NDX+1))       !SET TO SELECTED RECORD
  127.   NEXT(SECURITY)                    !AND READ IT
  128.  
  129. SAME_PAGE ROUTINE                   !SET TO SAME PAGE ROUTINE
  130.   POINTER# = POINTER(SECURITY)      !SAVE ITS RECORD POINTER
  131.   GET(SECURITY,POINTER#)            !GET THE RECORD
  132.   SET(SEC:SYMBOL_KEY,SEC:SYMBOL_KEY) !SET TO THE SAME RECORD
  133.   SKIP(SECURITY,-1)                 !SKIP TO TOP OF SAME PAGE
  134.