home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / DESKTOP / JIMSBOOK.ZIP / BLKBOOK.LST < prev    next >
File List  |  1990-10-28  |  72KB  |  1,076 lines

  1. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  2.  
  3.                                                                         10/27/90 11:52 PM PAGE 1
  4.  
  5.    1       BLKBOOK      PROGRAM
  6.    2   1                INCLUDE('STD_KEYS.CLA')
  7.    3   1                INCLUDE('CTL_KEYS.CLA')
  8.    4   1                INCLUDE('ALT_KEYS.CLA')
  9.    5   1                INCLUDE('SHF_KEYS.CLA')
  10.    6   1   
  11.    7   1   REJECT_KEY   EQUATE(CTRL_ESC)
  12.    8   1   ACCEPT_KEY   EQUATE(CTRL_ENTER)
  13.    9   1   TRUE         EQUATE(1)
  14.   10   1   FALSE        EQUATE(0)
  15.   11       
  16.   12   1                MAP
  17.   13   2                  PROC(G_OPENFILES)
  18.   14   2                  PROC(MAIN_MENU)                   !ADDRESS/PHONE BOOK
  19.   15   2                  PROC(SHO_NAME)                    !Show Blkbook By Name
  20.   16   2                  PROC(SHO_PHONE)                   !Show Blkbook By Phone
  21.   17   2                  PROC(UPD_BLKBOOK)                 !Update Blkbook
  22.   18   2                  PROC(RPT_NAME)                    !Print Blkbook By Name
  23.   19   2                  PROC(RPT_PHONE)                   !Print Blkbook By Phone
  24.   20   2                .
  25. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  26.  
  27. FILE LAYOUTS                                                            10/27/90 11:52 PM PAGE 2
  28.  
  29.   22   1   BLKBOOK      FILE,PRE(BLK),CREATE,RECLAIM
  30.   23   2   BY_NAME        KEY(BLK:NAME),NOCASE,OPT
  31.   24   2   BY_PHONE       KEY(BLK:PHONE),NOCASE,OPT
  32.   25   2   COMMENTS       MEMO(10000)
  33.   26   2   RECORD         RECORD
  34.   27   3   NAME             STRING(25)
  35.   28   3   PHONE            DECIMAL(12,0)
  36.   29   3   STREET           STRING(25)
  37.   30   3   CITY             STRING(25)
  38.   31   3   STATE            STRING(2)
  39.   32   3   ZIP              DECIMAL(5,0)
  40.   33   3                . .
  41.   34   1                GROUP,OVER(BLK:COMMENTS)
  42.   35   2   BLK_MEMO_ROW   STRING(35),DIM(285)
  43.   36   2                .
  44.   37       
  45. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  46.  
  47. GLOBAL MEMORY VARIABLES                                                 10/27/90 11:52 PM PAGE 3
  48.  
  49.   39   1   ACTION       SHORT                               !0 = NO ACTION
  50.   40                                                        !1 = ADD RECORD
  51.   41                                                        !2 = CHANGE RECORD
  52.   42                                                        !3 = DELETE RECORD
  53.   43                                                        !4 = LOOKUP FIELD
  54.   44   1                GROUP,PRE(MEM)
  55.   45   2   MESSAGE        STRING(30)                        !Global Message Area
  56.   46   2   PAGE           DECIMAL(3,0)                      !Report Page Number
  57.   47   2   LINE           DECIMAL(3,0)                      !Report Line Number
  58.   48   2   DEVICE         STRING(30)                        !Report Device Name
  59.   49   2                .
  60.   50       
  61. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  62.  
  63. CODE SECTION                                                            10/27/90 11:52 PM PAGE 4
  64.  
  65.   52   1     CODE
  66.   53   1     SETHUE(7,0)                                    !SET WHITE ON BLACK
  67.   54   1     BLANK                                          !  AND BLANK
  68.   55   1     G_OPENFILES                                    !OPEN OR CREATE FILES
  69.   56   1     SETHUE()                                       !    THE SCREEN
  70.   57   1     MAIN_MENU                                      !ADDRESS/PHONE BOOK
  71.   58   1     RETURN                                         !EXIT TO DOS
  72.   59       
  73.   60   1   G_OPENFILES  PROCEDURE                           !OPEN FILES & CHECK FOR ERROR
  74.   61   1     CODE
  75.   62   1     SHOW(25,1,CENTER('OPENING FILE: ' & 'BLKBOOK',80)) !DISPLAY FILE NAME
  76.   63   1     OPEN(BLKBOOK)                                  !OPEN THE FILE
  77.   64   1     IF ERROR()                                     !OPEN RETURNED AN ERROR
  78.   65   2       CASE ERRORCODE()                             ! CHECK FOR SPECIFIC ERROR
  79.   66   3       OF 46                                        !  KEYS NEED TO BE REQUILT
  80.   67   3         SETHUE(0,7)                                !  BLACK ON WHITE
  81.   68   3         SHOW(25,1,CENTER('REBUILDING KEY FILES FOR BLKBOOK',80)) !INDICATE MSG
  82.   69   3         BUILD(BLKBOOK)                             !  CALL THE BUILD PROCEDURE
  83.   70   3         SETHUE(7,0)                                !  WHITE ON BLACK
  84.   71   3         BLANK(25,1,1,80)                           !  BLANK THE MESSAGE
  85.   72   3       OF 2                                         !IF NOT FOUND,
  86.   73   3         CREATE(BLKBOOK)                            ! CREATE
  87.   74   3       ELSE                                         ! ANY OTHER ERROR
  88.   75   3         LOOP;STOP('BLKBOOK: ' & ERROR()).          !  STOP EXECUTION
  89.   76   3     . .
  90.   77       
  91.   78   1     BLANK                                          !BLANK THE SCREEN
  92.   79       
  93.   80       
  94. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  95.  
  96. ADDRESS/PHONE BOOK                                                      10/27/90 11:52 PM PAGE 5
  97.  
  98.   82   1   MAIN_MENU    PROCEDURE
  99.   83       
  100.   84   1   SCREEN       SCREEN       PRE(SCR),WINDOW(16,30),HUE(15,3)
  101.   85   2                  ROW(1,1)   STRING('╔═{28}╗'),HUE(15,3)
  102.   86   2                  ROW(2,1)   REPEAT(14);STRING('║<0{28}>║'),HUE(15,3) .
  103.   87   2                  ROW(16,1)  STRING('╚═{28}╝'),HUE(15,3)
  104.   88   2                  ROW(2,7)   STRING('ADDRESS/PHONE BOOK')
  105.   89   2   DATE           ROW(4,12)  STRING(@D1),HUE(15,3)
  106.   90   2                             ENTRY,USE(?FIRST_FIELD)
  107.   91   2                             MENU,USE(MENU_FIELD"),REQ
  108.   92   3                  ROW(6,6)     STRING('Show Blkbook By Name'),HUE(1,3),SEL(0,7)
  109.   93   3                  ROW(8,6)     STRING('Show Blkbook By Phone'),HUE(1,3),SEL(0,7)
  110.   94   3                  ROW(10,6)    STRING('Print Blkbook By Name'),HUE(1,3),SEL(0,7)
  111.   95   3                  ROW(12,5)    STRING('Print Blkbook By Phone'),HUE(1,3),SEL(0,7)
  112.   96   3                  ROW(14,14)   STRING('Quit'),HUE(1,3),SEL(0,7)
  113.   97   3                .            .
  114.   98       
  115. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  116.  
  117. ADDRESS/PHONE BOOK                                                      10/27/90 11:52 PM PAGE 6
  118.  
  119.  100   1     CODE
  120.  101   1     OPEN(SCREEN)                                   !OPEN THE MENU SCREEN
  121.  102   1     SETCURSOR                                      !TURN OFF ANY CURSOR
  122.  103   1     LOOP                                           !LOOP UNTIL USER EXITS
  123.  104   2       SCR:DATE = TODAY()
  124.  105   2       ALERT                                        !TURN OFF ALL ALERTED KEYS
  125.  106   2       ALERT(REJECT_KEY)                            !ALERT SCREEN REJECT KEY
  126.  107   2       ALERT(ACCEPT_KEY)                            !ALERT SCREEN ACCEPT KEY
  127.  108   2       ACCEPT                                       !READ A FIELD OR MENU CHOICE
  128.  109   2       IF KEYCODE() = REJECT_KEY THEN RETURN.       !RETURN ON SCREEN REJECT
  129.  110       
  130.  111   2       EDIT_RANGE# = FIELD()                        !SET ONE FIELD EDIT RANGE
  131.  112   2       IF KEYCODE() = ACCEPT_KEY                    !ON SCREEN ACCEPT KEY
  132.  113   3         UPDATE                                     !  MOVE ALL FIELDS FROM SCREEN
  133.  114   3         EDIT_RANGE# = ?MENU_FIELD" - 1             !  AND EDIT REMAINING FIELDS
  134.  115   3         SELECT(?MENU_FIELD")                       !  IF OK THEN START HERE NEXT
  135.  116   3       .                                            !
  136.  117       
  137.  118   2       LOOP FIELD# = FIELD() TO EDIT_RANGE#         !EDIT FIELDS IN THE EDIT RANGE
  138.  119       
  139.  120   3         CASE FIELD#                                !JUMP TO FIELD EDIT ROUTINE
  140.  121   4         OF ?FIRST_FIELD                            !FROM THE FIRST FIELD
  141.  122   4           IF KEYCODE() = ESC_KEY THEN RETURN.      !  RETURN ON ESC KEY
  142.  123       
  143.  124   4         OF ?MENU_FIELD"                            !FROM THE MENU FIELD
  144.  125   4           EXECUTE CHOICE()                         !  CALL THE SELECTED PROCEDURE
  145.  126   5             SHO_NAME                               !  Show Blkbook By Name
  146.  127   5             SHO_PHONE                              !  Show Blkbook By Phone
  147.  128   5             RPT_NAME                               !  Print Blkbook By Name
  148.  129   5             RPT_PHONE                              !  Print Blkbook By Phone
  149.  130   5             RETURN
  150.  131   5     . . . .
  151. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  152.  
  153. Show Blkbook By Name                                                    10/27/90 11:52 PM PAGE 7
  154.  
  155.  133   1   SHO_NAME     PROCEDURE
  156.  134       
  157.  135   1   SCREEN       SCREEN       PRE(SCR),WINDOW(25,75),HUE(15,1)
  158.  136   2                  ROW(6,3)   PAINT(17,71),HUE(0,7)
  159.  137   2                  ROW(1,1)   STRING('╔═{73}╗'),HUE(15,1)
  160.  138   2                  ROW(2,1)   REPEAT(23);STRING('║<0{73}>║'),HUE(15,1) .
  161.  139   2                  ROW(25,1)  STRING('╚═{73}╝'),HUE(15,1)
  162.  140   2                  ROW(2,29)  STRING('Show Blkbook By Name')
  163.  141   2                  ROW(4,22)  STRING('LOCATE:'),HUE(11,1)
  164.  142   2                  ROW(23,12) STRING('Ins to Add'),HUE(11,1)
  165.  143   2                    COL(50)  STRING('Enter to Change'),HUE(11,1)
  166.  144   2                  ROW(24,12) STRING('Del to Delete'),HUE(11,1)
  167.  145   2                    COL(49)  STRING('Ctrl-Esc to Exit'),HUE(11,1)
  168.  146   2   LOCATOR        ROW(4,29)  STRING(25),HUE(11,1)
  169.  147   2                             ENTRY,USE(?FIRST_FIELD)
  170.  148   2                             ENTRY,USE(?PRE_POINT)
  171.  149   2                             REPEAT(17),EVERY(1),INDEX(NDX)
  172.  150   3                  ROW(6,4)     POINT(1,69),USE(?POINT),ESC(?-1)
  173.  151   3   NAME             COL(5)     STRING(25)
  174.  152   3   PHONE            COL(31)    STRING(@P###-###-####P)
  175.  153   3   STREET           COL(44)    STRING(25)
  176.  154   3   STATE            COL(70)    STRING(2)
  177.  155   3                .            .
  178.  156       
  179.  157   1   NDX          BYTE                                !REPEAT INDEX FOR POINT FIELD
  180.  158   1   ROW          BYTE                                !ACTUAL ROW OF SCROLL AREA
  181.  159   1   COL          BYTE                                !ACTUAL COLUMN OF SCROLL AREA
  182.  160   1   MAX          LONG                                !LESSER OF COUNT AND RECORDS
  183.  161   1   COUNT        BYTE(17)                            !NUMBER OF ITEMS TO SCROLL
  184.  162   1   ROWS         BYTE(17)                            !NUMBER OF ROWS TO SCROLL
  185.  163   1   COLS         BYTE(69)                            !NUMBER OF COLUMNS TO SCROLL
  186.  164       
  187.  165       
  188. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  189.  
  190. Show Blkbook By Name                                                    10/27/90 11:52 PM PAGE 8
  191.  
  192.  167   1     CODE
  193.  168   1     ACTION# = ACTION                               !SAVE ACTION
  194.  169   1     OPEN(SCREEN)                                   !OPEN THE SCREEN
  195.  170   1     SETCURSOR                                      !TURN OFF ANY CURSOR
  196.  171   1     NDX = 1                                        !PUT SELECTOR BAR ON TOP ITEM
  197.  172   1     ROW = ROW(?POINT)                              !REMEMBER TOP ROW AND
  198.  173   1     COL = COL(?POINT)                              !  LEFT COLUMN OF SCROLL AREA
  199.  174   1     IF ACTION = 4                                  !IF THIS IS A LOOKUP REQUEST
  200.  175   2       SET(BLK:BY_NAME,BLK:BY_NAME)                 !  FIND IT IN THE FILE
  201.  176   2       NEXT(BLKBOOK)                                !    AND READ IT
  202.  177   2       POINTER# = POINTER(BLKBOOK)                  !  SAVE POINTER TO CURRENT
  203.  178   2       SKIP(BLKBOOK,-1)                             !  MAKE IT THE TOP RECORD
  204.  179   2       DO SHOW_TABLE                                !  FILL SCROLL AREA
  205.  180   2       GET(BLKBOOK,POINTER#)                        !  AND REFRESH CURRENT RECORD
  206.  181   2     ELSE                                           !OTHERWISE
  207.  182   2       SET(BLK:BY_NAME)                             !  SET TO FIRST RECORD IN FILE
  208.  183   2       DO SHOW_TABLE                                !  FILL SCROLL AREA
  209.  184   2     .
  210.  185   1     RECORDS# = TRUE                                !INITIALIZE RECORDS FLAG
  211.  186   1     LOOP                                           !LOOP UNTIL USER EXITS
  212.  187   2       MAX = RECORDS(BLK:BY_NAME)                   !SET LESSER OF FILE RECORD
  213.  188   2       IF MAX > COUNT THEN MAX = COUNT.             !  COUNT AND SCROLL ITEM COUNT
  214.  189   2       ACTION = ACTION#                             !RESTORE ACTION
  215.  190   2       POINTER# = 0                                 !CLEAR ADD POINTER
  216.  191   2       IF ~RECORDS(BLK:BY_NAME)                     !IF THERE ARE NO RECORDS
  217.  192   3         CLEAR(BLK:RECORD)                          !  CLEAR RECORD AREA
  218.  193   3         ACTION = 1                                 !  SET ACTION TO ADD
  219.  194   3         UPD_BLKBOOK                                !  CALL FORM FOR FIRST RECORD
  220.  195   3         IF ~RECORDS(BLK:BY_NAME) THEN BREAK.       !  IF ADD ABORTED THEN EXIT
  221.  196   3         DO SHOW_RECORD
  222.  197   3         SET(BLK:BY_NAME)                           !  SET TO NEW RECORD
  223.  198   3         DO SHOW_TABLE                              !  FILL SCROLL AREA
  224.  199   3         NDX = 1                                    !  PUT SELECTOR BAR ON TOP ITEM
  225.  200   3         MAX = 1                                    !  MAXIMUM DISPLAYED IS 1
  226.  201   3       .                                            !
  227.  202   2       ALERT                                        !RESET ALERTED KEYS
  228.  203   2       ALERT(REJECT_KEY)                            !ALERT SCREEN REJECT KEY
  229.  204   2       ALERT(ACCEPT_KEY)                            !ALERT SCREEN ACCEPT KEY
  230.  205   2       ACCEPT                                       !READ A FIELD
  231.  206   2       IF KEYCODE() = REJECT_KEY THEN BREAK.        !RETURN ON SCREEN REJECT KEY
  232.  207       
  233.  208   2       EDIT_RANGE# = FIELD()                        !SET ONE FIELD EDIT RANGE
  234.  209   2       IF KEYCODE() = ACCEPT_KEY AND |              !ON SCREEN ACCEPT KEY
  235.  210   2          EDIT_RANGE# <> ?POINT                     ! AND NOT ON THE POINT FIELD
  236.  211   3         UPDATE                                     !  MOVE ALL FIELDS FROM SCREEN
  237.  212   3         EDIT_RANGE# = ?POINT - 1                   !  AND EDIT REMAINING FIELDS
  238.  213   3         SELECT(?POINT)                             !  IF OK THEN START HERE NEXT
  239.  214   3       .                                            !
  240.  215       
  241.  216   2       LOOP FIELD# = FIELD() TO EDIT_RANGE#         !EDIT FIELDS IN THE EDIT RANGE
  242.  217       
  243.  218   3         CASE FIELD#                                !JUMP TO FIELD EDIT ROUTINE
  244.  219   4         OF ?FIRST_FIELD                            !FROM THE FIRST FIELD
  245.  220   4           IF KEYCODE() = ESC_KEY  OR |             !  RETURN ON ESC KEY
  246. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  247.  
  248. Show Blkbook By Name                                                    10/27/90 11:52 PM PAGE 9
  249.  
  250.  221   4              RECORDS# = FALSE                      !  OR NO RECORDS
  251.  222   5                RETURN
  252.  223   5           .
  253.  224   4           RECORDS# = TRUE                          !  ASSUME RECORDS ARE HERE
  254.  225   4       OF ?PRE_POINT                                !
  255.  226   4         IF KEYCODE() = ESC_KEY OR |                !  IF GOING UP
  256.  227   4         KEYCODE() = UP_KEY OR |                    !    THE SCREEN
  257.  228   4         RECORDS# = FALSE                           !    OR NO RECORDS ON SCREEN
  258.  229   5           SCR:LOCATOR = ''                         !    CLEAR LOCATOR
  259.  230   5           SELECT(?-1)                              !    AND GO TO PREVIOUS FIELD
  260.  231   5           SETCURSOR                                !      AND TURN CURSOR OFF
  261.  232   5         ELSE                                       !  OTHERWISE, GOING DOWN
  262.  233   5           LEN# = 0                                 !    RESET TO START OF LOCATOR
  263.  234   5           SETCURSOR(ROW(SCR:LOCATOR),COL(SCR:LOCATOR)) !AND TURN CURSOR ON
  264.  235   5         .
  265.  236   4         OF ?POINT                                  !FROM THE POINT FIELD
  266.  237   4         IF KEYCODE() > 31                    |     !THE DISPLAYABLE CHARACTERS
  267.  238   4         AND KEYCODE() < 255                        !ARE USED TO LOCATE RECORDS
  268.  239   5           IF LEN# < SIZE(SCR:LOCATOR)              !  IF THERE IS ROOM LEFT
  269.  240   6             SCR:LOCATOR = SUB(SCR:LOCATOR,1,LEN#) & CHR(KEYCODE())
  270.  241   6             LEN# += 1                              !    INCREMENT THE LENGTH
  271.  242   6           .
  272.  243   5         ELSIF KEYCODE() = BS_KEY                   !BACKSPACE UNTYPES A CHARACTER
  273.  244   5           IF LEN# > 0                              !  IF THERE ARE CHARACTERS LEFT
  274.  245   6             LEN# -= 1                              !    DECREMENT THE LENGTH
  275.  246   6             SCR:LOCATOR = SUB(SCR:LOCATOR,1,LEN#)  !    ERASE THE LAST CHARACTER
  276.  247   6           .
  277.  248   5         ELSE                                       !FOR ANY OTHER CHARACTER
  278.  249   5           LEN# = 0                                 !  ZERO THE LENGTH
  279.  250   5           SCR:LOCATOR = ''                         !  ERASE THE LOCATOR FIELD
  280.  251   5         .
  281.  252   4         SETCURSOR(ROW(SCR:LOCATOR),COL(SCR:LOCATOR)+LEN#) !AND RESET THE CURSOR
  282.  253   4         BLK:NAME = CLIP(SCR:LOCATOR)               !    UPDATE THE KEY FIELD
  283.  254   4         IF KEYBOARD() > 31                   |     !THE DISPLAYABLE CHARACTERS
  284.  255   4         AND KEYBOARD() < 255                 |     !ARE USED TO LOCATE RECORDS
  285.  256   4         OR  KEYBOARD() = BS_KEY                    !INCLUDE BACKSPACE
  286.  257   5           CYCLE
  287.  258   5         .
  288.  259   4         IF LEN# > 0 THEN DO FIND_RECORD.           !    AND FIND THE RECORD
  289.  260   4           CASE KEYCODE()                           !  PROCESS THE KEYSTROKE
  290.  261   5           OF INS_KEY                               !INSERT KEY
  291.  262   5             CLEAR(BLK:RECORD)                      !  CLEAR RECORD AREA
  292.  263   5             ACTION = 1                             !  SET ACTION TO ADD
  293.  264   5             UPD_BLKBOOK                            !  CALL FORM FOR NEW RECORD
  294.  265   5             IF ~ACTION                             !  IF A NEW RECORD WAS ADDED
  295.  266   6               POINTER# = POINTER(BLKBOOK)          !    REMEMBER WHICH RECORD
  296.  267   6               SET(BLK:BY_NAME,BLK:BY_NAME)         !    SET TO NEW RECORD AND
  297.  268   6               SKIP(BLKBOOK,-1)                     !    MAKE IT THE TOP ITEM
  298.  269   6               DO SHOW_TABLE                        !    DISPLAY THAT PAGE
  299.  270   6             .
  300.  271   5           OF ENTER_KEY                             !ENTER KEY OR
  301.  272   5           OROF ACCEPT_KEY                          !CTRL ENTER KEY
  302.  273   5             DO GET_RECORD                          !  READ THE SELECTED RECORD
  303.  274   5             IF ACTION = 4 AND KEYCODE() = ENTER_KEY!  IF THIS IS A LOOKUP REQUEST
  304. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  305.  
  306. Show Blkbook By Name                                                   10/27/90 11:52 PM PAGE 10
  307.  
  308.  275   6               ACTION = 0                           !    SET ACTION TO COMPLETE
  309.  276   6               RETURN                               !    AND RETURN TO CALLER
  310.  277   6             .                                      !
  311.  278   5             ACTION = 2                             !  SET ACTION TO CHANGE
  312.  279   5             UPD_BLKBOOK                            !  CALL FORM TO CHANGE RECORD
  313.  280   5             IF ~ACTION                             !  IF THE RECORD WAS CHANGED
  314.  281   6               POINTER# = POINTER(BLKBOOK)          !    REMEMBER WHICH RECORD
  315.  282   6               SET(BLK:BY_NAME,BLK:BY_NAME)         !    SET TO CHANGED RECORD
  316.  283   6               SKIP(BLKBOOK,-1)                     !    MAKE IT THE TOP ITEM
  317.  284   6               DO SHOW_TABLE                        !    AND DISPLAY THAT PAGE
  318.  285   6             ELSE                                   !  OTHERWISE
  319.  286   6               SKIP(BLKBOOK,(MAX-NDX))              !  SKIP BACK TO SAME PAGE
  320.  287   6             .
  321.  288   5           OF DEL_KEY                               !DELETE KEY
  322.  289   5             DO GET_RECORD                          !  READ THE SELECTED RECORD
  323.  290   5             ACTION = 3                             !  SET ACTION TO DELETE
  324.  291   5             UPD_BLKBOOK                            !  CALL FORM TO DELETE RECORD
  325.  292   5             IF ~ACTION                             !  IF RECORD WAS DELETED
  326.  293   6               SKIP(BLKBOOK,-NDX)                   !    SET NEXT RECORD ON TOP
  327.  294   6               DO SHOW_TABLE                        !    AND DISPLAY THAT PAGE
  328.  295   6             ELSE                                   !  OTHERWISE
  329.  296   6               SKIP(BLKBOOK,(MAX-NDX))              !  SKIP BACK TO SAME PAGE
  330.  297   6             .
  331.  298   5           OF DOWN_KEY                              !DOWN ARROW KEY
  332.  299   5             IF NOT EOF(BLKBOOK)                    !  IF THERE ARE MORE RECORDS
  333.  300   6               SCROLL(ROW,COL,ROWS,COLS,ROWS(?POINT)) !  SCROLL THE SCREEN UP
  334.  301   6               NEXT(BLKBOOK)                        !    READ THE BOTTOM RECORD
  335.  302   6               DO SHOW_RECORD                       !    AND DISPLAY IT
  336.  303   6             .
  337.  304   5           OF PGDN_KEY                              !PAGE DOWN KEY
  338.  305   5             IF EOF(BLKBOOK)                        !  ON THE LAST PAGE
  339.  306   6               NDX = MAX                            !    POINT TO BOTTOM ITEM
  340.  307   6             ELSE                                   !  OTHERWISE
  341.  308   6               DO SHOW_TABLE                        !    DISPLAY NEXT PAGE
  342.  309   6             .
  343.  310   5           OF CTRL_PGDN                             !CTRL-PAGE DOWN KEY
  344.  311   5             NDX = MAX                              !  POINT TO BOTTOM ITEM
  345.  312   5             IF NOT EOF(BLKBOOK)                    !  ON THE LAST PAGE
  346.  313   6               SET(BLK:BY_NAME)                     !    SET TO BOTTOM RECORD MINUS
  347.  314   6               SKIP(BLKBOOK,-COUNT)                 !      ONE PAGE OF RECORDS
  348.  315   6               DO SHOW_TABLE                        !    DISPLAY THE LAST PAGE
  349.  316   6             .
  350.  317   5           OF UP_KEY                                !UP ARROW KEY
  351.  318   5             SKIP(BLKBOOK,-(COUNT-1))               !    SET TO TOP RECORD MINUS 1
  352.  319   5             IF NOT BOF(BLKBOOK)                    !  IF THERE IS A PRIOR RECORD
  353.  320   6               PREVIOUS(BLKBOOK)                    !     READ THE TOP RECORD
  354.  321   6               IF NOT ERROR()                       !    IF READ A RECORD
  355.  322   7                 SCROLL(ROW,COL,ROWS,COLS,-(ROWS(?POINT)))! SCROLL THE SCREEN DOWN
  356.  323   7                 DO SHOW_RECORD                     !       AND DISPLAY IT
  357.  324   7               ELSIF ERRORCODE() = 33               !    ELSIF RECORD NOT AVAILABLE
  358.  325   7                 NEXT(BLKBOOK)                      !       RETRIEVE FIRST ONE
  359.  326   7             . .
  360.  327   5             SKIP(BLKBOOK,COUNT-1)                  !  SET RECORD FOR NEXT PAGE
  361.  328       
  362. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  363.  
  364. Show Blkbook By Name                                                   10/27/90 11:52 PM PAGE 11
  365.  
  366.  329   5           OF PGUP_KEY                              !PAGE UP KEY
  367.  330   5             SKIP(BLKBOOK,-(COUNT-1))               !  SET TO TOP RECORD MINUS ONE
  368.  331   5             IF BOF(BLKBOOK)                        !  IF THERE IS NO PRIOR RECORD
  369.  332   6               NDX = 1                              !    THEN POINT TO TOP ITEM
  370.  333   6               SKIP(BLKBOOK,COUNT-1)                !    SET RECORD FOR THIS PAGE
  371.  334   6             ELSE                                   !  OTHERWISE
  372.  335   6               SKIP(BLKBOOK,-(COUNT+1))             !    SET RECORD FOR PRIOR PAGE
  373.  336   6               DO SHOW_TABLE                        !    AND DISPLAY THE PAGE
  374.  337   6             .
  375.  338   5           OF CTRL_PGUP                             !CTRL-PAGE UP KEY
  376.  339   5             SET(BLK:BY_NAME)                       !  SET TO FIRST RECORD
  377.  340   5             NDX = 1                                !  POINT TO TOP ITEM
  378.  341   5             DO SHOW_TABLE                          !  AND DISPLAY THE PAGE
  379.  342   5           .
  380.  343   4     . . .
  381.  344   1     RETURN                                         !RETURN TO CALLER
  382.  345       
  383.  346   1   SHOW_TABLE ROUTINE                               !DISPLAY A PAGE OF RECORDS
  384.  347   1     SKIP(BLKBOOK,COUNT-1)                          !  SET TO THE BOTTOM RECORD
  385.  348   1     IF EOF(BLKBOOK)                                !  FOR A PARTIAL PAGE
  386.  349   2       SET(BLK:BY_NAME)                             !    SET TO THE LAST RECORD
  387.  350   2       SKIP(BLKBOOK,-COUNT)                         !    AND BACK UP ONE PAGE
  388.  351   2     ELSE                                           !  OTHERWISE
  389.  352   2       SKIP(BLKBOOK,-(COUNT-1))                     !    SET RECORD FOR THIS PAGE
  390.  353   2     .
  391.  354   1     NDX# = NDX                                     !  SAVE REPEAT INDEX
  392.  355   1     LOOP NDX = 1 TO COUNT                          !  LOOP THRU THE SCROLL AREA
  393.  356   2       IF EOF(BLKBOOK) THEN BREAK.                  !    BREAK ON END OF FILE
  394.  357   2       NEXT(BLKBOOK)                                !    READ THE NEXT RECORD
  395.  358   2       DO SHOW_RECORD                               !    AND DISPLAY IT
  396.  359   2       IF POINTER(BLKBOOK) = POINTER#
  397.  360   3         NDX# = NDX                                 !  POINT TO CORRECT RECORD
  398.  361   3     . .
  399.  362   1     NDX = NDX#                                     !  RESTORE REPEAT INDEX
  400.  363   1     CLEAR(BLK:RECORD)                              !  CLEAR RECORD AREA
  401.  364   1     IF RECORDS(BLK:BY_NAME) < COUNT                !  IF RECORDS DO NOT FILL
  402.  365   2        NDX#= RECORDS(BLK:BY_NAME) * 1              !     GET NUMBER TIMES SIZE
  403.  366   2        BLANK(ROW + NDX#,COL,ROWS-NDX#,COLS)        !     BLANK REMAINING AREA
  404.  367   2     .
  405.  368       
  406.  369   1   SHOW_RECORD ROUTINE                              !DISPLAY A RECORD
  407.  370   1     SCR:NAME = BLK:NAME
  408.  371   1     SCR:PHONE = BLK:PHONE
  409.  372   1     SCR:STREET = BLK:STREET
  410.  373   1     SCR:STATE = BLK:STATE
  411.  374       
  412.  375   1   GET_RECORD ROUTINE                               !READ SELECTED RECORD
  413.  376   1     SKIP(BLKBOOK,-(MAX-NDX+1))                     !  SET TO SELECTED RECORD
  414.  377   1     NEXT(BLKBOOK)                                  !    AND READ IT
  415.  378       
  416.  379   1   FIND_RECORD ROUTINE                              !LOCATE REQUESTED RECORD
  417.  380   1     SET(BLK:BY_NAME,BLK:BY_NAME)                   !  SET TO REQUESTED RECORD
  418.  381   1     IF EOF(BLKBOOK)                                !  IF BEYOND END OF FILE
  419.  382   2       PREVIOUS(BLKBOOK)                            !    GET THE LAST RECORD
  420. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  421.  
  422. Show Blkbook By Name                                                   10/27/90 11:52 PM PAGE 12
  423.  
  424.  383   2     ELSE                                           !  ELSE
  425.  384   2       NEXT(BLKBOOK)                                !    READ THIS RECORD
  426.  385   2     .
  427.  386   1     POINTER# = POINTER(BLKBOOK)                    !  SAVE ITS RECORD POINTER
  428.  387   1     SKIP(BLKBOOK,-1)                               !  MAKE IT THE TOP RECORD
  429.  388   1     DO SHOW_TABLE                                  !  AND FILL THE SCROLL AREA
  430.  389       
  431.  390   1   SAME_PAGE ROUTINE                                !SET TO SAME PAGE ROUTINE
  432.  391   1     POINTER# = POINTER(BLKBOOK)                    !  SAVE ITS RECORD POINTER
  433.  392   1     GET(BLKBOOK,POINTER#)                          !  GET THE RECORD
  434.  393   1     SET(BLK:BY_NAME,BLK:BY_NAME)                   !  SET TO THE SAME RECORD
  435.  394   1     SKIP(BLKBOOK,-1)                               !  SKIP TO TOP OF SAME PAGE
  436.  395       
  437. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  438.  
  439. Update Blkbook                                                         10/27/90 11:52 PM PAGE 13
  440.  
  441.  397   1   UPD_BLKBOOK  PROCEDURE
  442.  398       
  443.  399   1   SCREEN       SCREEN       PRE(SCR),WINDOW(15,50),HUE(15,4)
  444.  400   2                  ROW(1,1)   STRING('╔═{48}╗'),HUE(15,4)
  445.  401   2                  ROW(2,1)   REPEAT(13);STRING('║<0{48}>║'),HUE(15,4) .
  446.  402   2                  ROW(15,1)  STRING('╚═{48}╝'),HUE(15,4)
  447.  403   2                  ROW(2,19)  STRING('Update Blkbook')
  448.  404   2                  ROW(4,4)   STRING('NAME    :'),HUE(7,4)
  449.  405   2                  ROW(5,4)   STRING('PHONE   :'),HUE(7,4)
  450.  406   2                  ROW(6,4)   STRING('STREET  :'),HUE(7,4)
  451.  407   2                  ROW(7,4)   STRING('CITY    :'),HUE(7,4)
  452.  408   2                  ROW(8,4)   STRING('STATE   :'),HUE(7,4)
  453.  409   2                  ROW(9,4)   STRING('ZIP {5}:'),HUE(7,4)
  454.  410   2                  ROW(10,4)  STRING('COMMENTS:'),HUE(7,4)
  455.  411   2   MESSAGE        ROW(3,11)  STRING(30),HUE(15,4)
  456.  412   2                             ENTRY,USE(?FIRST_FIELD)
  457.  413   2                  ROW(4,13)  ENTRY(@S25),USE(BLK:NAME),LFT,UPR,INS,HUE(15,4)      |
  458.  414   2                               SEL(0,7)
  459.  415   2                  ROW(5,13)  ENTRY(@P###-###-####P),USE(BLK:PHONE),NUM,INS        |
  460.  416   2                               HUE(15,4),SEL(0,7)
  461.  417   2                  ROW(6,13)  ENTRY(@S25),USE(BLK:STREET),LFT,UPR,INS,HUE(15,4)    |
  462.  418   2                               SEL(0,7)
  463.  419   2                  ROW(7,13)  ENTRY(@S25),USE(BLK:CITY),LFT,UPR,INS,HUE(15,4)      |
  464.  420   2                               SEL(0,7)
  465.  421   2                  ROW(8,13)  ENTRY(@S2),USE(BLK:STATE),UPR,INS,HUE(15,4),SEL(0,7)
  466.  422   2                  ROW(9,13)  ENTRY(@N_5),USE(BLK:ZIP),NUM,INS,HUE(15,4),SEL(0,7)
  467.  423   2                  ROW(10,13) TEXT(4,35),USE(BLK:COMMENTS),LFT,HUE(15,4),SEL(0,7)
  468.  424   2                             ENTRY,USE(?LAST_FIELD)
  469.  425   2                             PAUSE(''),USE(?DELETE_FIELD)
  470.  426   2                .
  471.  427       
  472. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  473.  
  474. Update Blkbook                                                         10/27/90 11:52 PM PAGE 14
  475.  
  476.  429   1     CODE
  477.  430   1     OPEN(SCREEN)                                   !OPEN THE SCREEN
  478.  431   1     SETCURSOR                                      !TURN OFF ANY CURSOR
  479.  432   1     ACTION# = ACTION                               !SAVE ACTION VALUE
  480.  433   1     ACTION = ACTION#                               !RESET ACTION
  481.  434   1     DISPLAY                                        !DISPLAY THE FIELDS
  482.  435   1     EXECUTE ACTION                                 !SET THE CURRENT RECORD POINTER
  483.  436   2       POINTER# = 0                                 !  NO RECORD FOR ADD
  484.  437   2       POINTER# = POINTER(BLKBOOK)                  !  CURRENT RECORD FOR CHANGE
  485.  438   2       POINTER# = POINTER(BLKBOOK)                  !  CURRENT RECORD FOR CHANGE
  486.  439   2     .
  487.  440   1     LOOP                                           !LOOP THRU ALL THE FIELDS
  488.  441   2       MEM:MESSAGE = CENTER(MEM:MESSAGE,SIZE(MEM:MESSAGE)) !DISPLAY ACTION MESSAGE
  489.  442   2       SCR:MESSAGE = MEM:MESSAGE
  490.  443   2       ALERT                                        !RESET ALERTED KEYS
  491.  444   2       ALERT(ACCEPT_KEY)                            !ALERT SCREEN ACCEPT KEY
  492.  445   2       ALERT(REJECT_KEY)                            !ALERT SCREEN REJECT KEY
  493.  446   2       ACCEPT                                       !READ A FIELD
  494.  447   2       IF KEYCODE() = REJECT_KEY THEN RETURN.       !RETURN ON SCREEN REJECT KEY
  495.  448   2       EXECUTE ACTION                               !SET ACTION MESSAGE
  496.  449   3         MEM:MESSAGE = 'Record will be Added'       !
  497.  450   3         MEM:MESSAGE = 'Record will be Changed'     !
  498.  451   3         MEM:MESSAGE = 'Press Enter to Delete'      !
  499.  452   3       .
  500.  453   2       EDIT_RANGE# = FIELD()                        !SET ONE FIELD EDIT RANGE
  501.  454   2       IF KEYCODE() = ACCEPT_KEY                    !ON SCREEN ACCEPT KEY
  502.  455   3         UPDATE                                     !  MOVE ALL FIELDS FROM SCREEN
  503.  456   3         EDIT_RANGE# = FIELDS()                     !  AND EDIT REMAINING FIELDS
  504.  457   3       .                                            !
  505.  458   2       LOOP FIELD# = FIELD() TO EDIT_RANGE#         !EDIT FIELDS IN THE EDIT RANGE
  506.  459   3         CASE FIELD#                                !JUMP TO FIELD EDIT ROUTINE
  507.  460   4         OF ?FIRST_FIELD                            !FROM THE FIRST FIELD
  508.  461   4           IF KEYCODE() = ESC_KEY THEN RETURN.      !  RETURN ON ESC KEY
  509.  462   4           IF ACTION = 3 THEN SELECT(?DELETE_FIELD).!  OR CONFIRM FOR DELETE
  510.  463       
  511.  464   4         OF ?BLK:NAME
  512.  465   4           IF BLK:NAME = ''                         !IF REQUIRED FIELD IS EMPTY
  513.  466   5             BEEP                                   !  SOUND KEYBOARD ALARM
  514.  467   5             SELECT(?BLK:NAME)                      !  AND STAY ON THIS FIELD
  515.  468   5             BREAK                                  !
  516.  469   5           .
  517.  470   4           GET(BLKBOOK,BLK:BY_NAME)                 !READ THE RECORD BY KEY
  518.  471   4           IF NOT ERROR()                           !IF A RECORD IS FOUND
  519.  472   5             IF POINTER(BLKBOOK) <> POINTER#        !  BUT NOT THE SAME RECORD
  520.  473   6               CLEAR(BLK:RECORD)                    !    CLEAR IN CASE OF ADD
  521.  474   6               GET(BLKBOOK,POINTER#)                !    RE-READ THE OLD RECORD
  522.  475   6               UPDATE                               !    RE-UPDATE THE RECORD
  523.  476   6               MEM:MESSAGE = 'CREATES DUPLICATE KEY'!    MOVE AN ERROR MESSAGE
  524.  477   6               SELECT(?BLK:NAME)                    !    STAY ON THE SAME FIELD
  525.  478   6               BEEP                                 !    SOUND THE KEYBOARD ALARM
  526.  479   6               BREAK                                !    AND LOOP AGAIN
  527.  480   6           . .
  528.  481   4           GET(BLKBOOK,POINTER#)                    !  RE-READ THE OLD RECORD
  529.  482   4           UPDATE                                   !  AND RE-UPDATE THE RECORD
  530. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  531.  
  532. Update Blkbook                                                         10/27/90 11:52 PM PAGE 15
  533.  
  534.  483       
  535.  484   4         OF ?BLK:PHONE
  536.  485   4           IF BLK:PHONE = ''                        !IF REQUIRED FIELD IS EMPTY
  537.  486   5             BEEP                                   !  SOUND KEYBOARD ALARM
  538.  487   5             SELECT(?BLK:PHONE)                     !  AND STAY ON THIS FIELD
  539.  488   5             BREAK                                  !
  540.  489   5           .
  541.  490   4           GET(BLKBOOK,BLK:BY_PHONE)                !READ THE RECORD BY KEY
  542.  491   4           IF NOT ERROR()                           !IF A RECORD IS FOUND
  543.  492   5             IF POINTER(BLKBOOK) <> POINTER#        !  BUT NOT THE SAME RECORD
  544.  493   6               CLEAR(BLK:RECORD)                    !    CLEAR IN CASE OF ADD
  545.  494   6               GET(BLKBOOK,POINTER#)                !    RE-READ THE OLD RECORD
  546.  495   6               UPDATE                               !    RE-UPDATE THE RECORD
  547.  496   6               MEM:MESSAGE = 'CREATES DUPLICATE KEY'!    MOVE AN ERROR MESSAGE
  548.  497   6               SELECT(?BLK:PHONE)                   !    STAY ON THE SAME FIELD
  549.  498   6               BEEP                                 !    SOUND THE KEYBOARD ALARM
  550.  499   6               BREAK                                !    AND LOOP AGAIN
  551.  500   6           . .
  552.  501   4           GET(BLKBOOK,POINTER#)                    !  RE-READ THE OLD RECORD
  553.  502   4           UPDATE                                   !  AND RE-UPDATE THE RECORD
  554.  503       
  555.  504   4         OF ?BLK:STREET
  556.  505       
  557.  506   4         OF ?BLK:CITY
  558.  507       
  559.  508   4         OF ?BLK:STATE
  560.  509       
  561.  510   4         OF ?BLK:ZIP
  562.  511       
  563.  512   4         OF ?BLK:COMMENTS
  564.  513       
  565.  514   4         OF ?LAST_FIELD                             !FROM THE LAST FIELD
  566.  515   4           EXECUTE ACTION                           !  UPDATE THE FILE
  567.  516   5             ADD(BLKBOOK)                           !    ADD NEW RECORD
  568.  517   5             PUT(BLKBOOK)                           !    CHANGE EXISTING RECORD
  569.  518   5             DELETE(BLKBOOK)                        !    DELETE EXISTING RECORD
  570.  519   5           .
  571.  520   4           IF ERROR() THEN STOP(ERROR()).           !  CHECK FOR UNEXPECTED ERROR
  572.  521   4           ACTION = 0                               !  SET ACTION TO COMPLETE
  573.  522   4           RETURN                                   !  AND RETURN TO CALLER
  574.  523       
  575.  524   4         OF ?DELETE_FIELD                           !FROM THE DELETE FIELD
  576.  525   4           IF KEYCODE() = ENTER_KEY |               !  ON ENTER KEY
  577.  526   4           OR KEYCODE() = ACCEPT_KEY                !  OR CTRL-ENTER KEY
  578.  527   5             SELECT(?LAST_FIELD)                    !    DELETE THE RECORD
  579.  528   5           ELSE                                     !  OTHERWISE
  580.  529   5             BEEP                                   !    BEEP AND ASK AGAIN
  581.  530   5     . . . .
  582.  531       
  583. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  584.  
  585. Show Blkbook By Phone                                                  10/27/90 11:52 PM PAGE 16
  586.  
  587.  533   1   SHO_PHONE    PROCEDURE
  588.  534       
  589.  535   1   SCREEN       SCREEN       PRE(SCR),WINDOW(25,75),HUE(15,1)
  590.  536   2                  ROW(6,3)   PAINT(17,71),HUE(0,7)
  591.  537   2                  ROW(1,1)   STRING('╔═{73}╗'),HUE(15,1)
  592.  538   2                  ROW(2,1)   REPEAT(23);STRING('║<0{73}>║'),HUE(15,1) .
  593.  539   2                  ROW(25,1)  STRING('╚═{73}╝'),HUE(15,1)
  594.  540   2                  ROW(2,28)  STRING('Show Blkbook By Phone')
  595.  541   2                  ROW(4,29)  STRING('LOCATE:'),HUE(11,1)
  596.  542   2                  ROW(23,12) STRING('Ins to Add'),HUE(11,1)
  597.  543   2                    COL(50)  STRING('Enter to Change'),HUE(11,1)
  598.  544   2                  ROW(24,12) STRING('Del to Delete'),HUE(11,1)
  599.  545   2                    COL(49)  STRING('Ctrl-Esc to Exit'),HUE(11,1)
  600.  546   2   LOCATOR        ROW(4,36)  STRING(@P###-###-####P),HUE(11,1)
  601.  547   2                             ENTRY,USE(?FIRST_FIELD)
  602.  548   2                             ENTRY,USE(?PRE_POINT)
  603.  549   2                             REPEAT(17),EVERY(1),INDEX(NDX)
  604.  550   3                  ROW(6,4)     POINT(1,69),USE(?POINT),ESC(?-1)
  605.  551   3   PHONE            COL(5)     STRING(@P###-###-####P)
  606.  552   3   NAME             COL(18)    STRING(25)
  607.  553   3   STREET           COL(44)    STRING(25)
  608.  554   3   STATE            COL(70)    STRING(2)
  609.  555   3                .            .
  610.  556       
  611.  557   1   NDX          BYTE                                !REPEAT INDEX FOR POINT FIELD
  612.  558   1   ROW          BYTE                                !ACTUAL ROW OF SCROLL AREA
  613.  559   1   COL          BYTE                                !ACTUAL COLUMN OF SCROLL AREA
  614.  560   1   MAX          LONG                                !LESSER OF COUNT AND RECORDS
  615.  561   1   COUNT        BYTE(17)                            !NUMBER OF ITEMS TO SCROLL
  616.  562   1   ROWS         BYTE(17)                            !NUMBER OF ROWS TO SCROLL
  617.  563   1   COLS         BYTE(69)                            !NUMBER OF COLUMNS TO SCROLL
  618.  564       
  619.  565       
  620. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  621.  
  622. Show Blkbook By Phone                                                  10/27/90 11:52 PM PAGE 17
  623.  
  624.  567   1     CODE
  625.  568   1     ACTION# = ACTION                               !SAVE ACTION
  626.  569   1     OPEN(SCREEN)                                   !OPEN THE SCREEN
  627.  570   1     SETCURSOR                                      !TURN OFF ANY CURSOR
  628.  571   1     NDX = 1                                        !PUT SELECTOR BAR ON TOP ITEM
  629.  572   1     ROW = ROW(?POINT)                              !REMEMBER TOP ROW AND
  630.  573   1     COL = COL(?POINT)                              !  LEFT COLUMN OF SCROLL AREA
  631.  574   1     IF ACTION = 4                                  !IF THIS IS A LOOKUP REQUEST
  632.  575   2       SET(BLK:BY_PHONE,BLK:BY_PHONE)               !  FIND IT IN THE FILE
  633.  576   2       NEXT(BLKBOOK)                                !    AND READ IT
  634.  577   2       POINTER# = POINTER(BLKBOOK)                  !  SAVE POINTER TO CURRENT
  635.  578   2       SKIP(BLKBOOK,-1)                             !  MAKE IT THE TOP RECORD
  636.  579   2       DO SHOW_TABLE                                !  FILL SCROLL AREA
  637.  580   2       GET(BLKBOOK,POINTER#)                        !  AND REFRESH CURRENT RECORD
  638.  581   2     ELSE                                           !OTHERWISE
  639.  582   2       SET(BLK:BY_PHONE)                            !  SET TO FIRST RECORD IN FILE
  640.  583   2       DO SHOW_TABLE                                !  FILL SCROLL AREA
  641.  584   2     .
  642.  585   1     RECORDS# = TRUE                                !INITIALIZE RECORDS FLAG
  643.  586   1     LOOP                                           !LOOP UNTIL USER EXITS
  644.  587   2       MAX = RECORDS(BLK:BY_PHONE)                  !SET LESSER OF FILE RECORD
  645.  588   2       IF MAX > COUNT THEN MAX = COUNT.             !  COUNT AND SCROLL ITEM COUNT
  646.  589   2       ACTION = ACTION#                             !RESTORE ACTION
  647.  590   2       POINTER# = 0                                 !CLEAR ADD POINTER
  648.  591   2       IF ~RECORDS(BLK:BY_PHONE)                    !IF THERE ARE NO RECORDS
  649.  592   3         CLEAR(BLK:RECORD)                          !  CLEAR RECORD AREA
  650.  593   3         ACTION = 1                                 !  SET ACTION TO ADD
  651.  594   3         UPD_BLKBOOK                                !  CALL FORM FOR FIRST RECORD
  652.  595   3         IF ~RECORDS(BLK:BY_PHONE) THEN BREAK.      !  IF ADD ABORTED THEN EXIT
  653.  596   3         DO SHOW_RECORD
  654.  597   3         SET(BLK:BY_PHONE)                          !  SET TO NEW RECORD
  655.  598   3         DO SHOW_TABLE                              !  FILL SCROLL AREA
  656.  599   3         NDX = 1                                    !  PUT SELECTOR BAR ON TOP ITEM
  657.  600   3         MAX = 1                                    !  MAXIMUM DISPLAYED IS 1
  658.  601   3       .                                            !
  659.  602   2       ALERT                                        !RESET ALERTED KEYS
  660.  603   2       ALERT(REJECT_KEY)                            !ALERT SCREEN REJECT KEY
  661.  604   2       ALERT(ACCEPT_KEY)                            !ALERT SCREEN ACCEPT KEY
  662.  605   2       ACCEPT                                       !READ A FIELD
  663.  606   2       IF KEYCODE() = REJECT_KEY THEN BREAK.        !RETURN ON SCREEN REJECT KEY
  664.  607       
  665.  608   2       EDIT_RANGE# = FIELD()                        !SET ONE FIELD EDIT RANGE
  666.  609   2       IF KEYCODE() = ACCEPT_KEY AND |              !ON SCREEN ACCEPT KEY
  667.  610   2          EDIT_RANGE# <> ?POINT                     ! AND NOT ON THE POINT FIELD
  668.  611   3         UPDATE                                     !  MOVE ALL FIELDS FROM SCREEN
  669.  612   3         EDIT_RANGE# = ?POINT - 1                   !  AND EDIT REMAINING FIELDS
  670.  613   3         SELECT(?POINT)                             !  IF OK THEN START HERE NEXT
  671.  614   3       .                                            !
  672.  615       
  673.  616   2       LOOP FIELD# = FIELD() TO EDIT_RANGE#         !EDIT FIELDS IN THE EDIT RANGE
  674.  617       
  675.  618   3         CASE FIELD#                                !JUMP TO FIELD EDIT ROUTINE
  676.  619   4         OF ?FIRST_FIELD                            !FROM THE FIRST FIELD
  677.  620   4           IF KEYCODE() = ESC_KEY  OR |             !  RETURN ON ESC KEY
  678. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  679.  
  680. Show Blkbook By Phone                                                  10/27/90 11:52 PM PAGE 18
  681.  
  682.  621   4              RECORDS# = FALSE                      !  OR NO RECORDS
  683.  622   5                RETURN
  684.  623   5           .
  685.  624   4           RECORDS# = TRUE                          !  ASSUME RECORDS ARE HERE
  686.  625   4       OF ?PRE_POINT                                !
  687.  626   4         IF KEYCODE() = ESC_KEY OR |                !  IF GOING UP
  688.  627   4         KEYCODE() = UP_KEY OR |                    !    THE SCREEN
  689.  628   4         RECORDS# = FALSE                           !    OR NO RECORDS ON SCREEN
  690.  629   5           SCR:LOCATOR = ''                         !    CLEAR LOCATOR
  691.  630   5           SELECT(?-1)                              !    AND GO TO PREVIOUS FIELD
  692.  631   5           SETCURSOR                                !      AND TURN CURSOR OFF
  693.  632   5         ELSE                                       !  OTHERWISE, GOING DOWN
  694.  633   5           LEN# = 0                                 !    RESET TO START OF LOCATOR
  695.  634   5           SETCURSOR(ROW(SCR:LOCATOR),COL(SCR:LOCATOR)) !AND TURN CURSOR ON
  696.  635   5         .
  697.  636   4         OF ?POINT                                  !FROM THE POINT FIELD
  698.  637   4         IF KEYCODE() > 31                    |     !THE DISPLAYABLE CHARACTERS
  699.  638   4         AND KEYCODE() < 255                        !ARE USED TO LOCATE RECORDS
  700.  639   5           IF LEN# < SIZE(SCR:LOCATOR)              !  IF THERE IS ROOM LEFT
  701.  640   6             SCR:LOCATOR = SUB(SCR:LOCATOR,1,LEN#) & CHR(KEYCODE())
  702.  641   6             LEN# += 1                              !    INCREMENT THE LENGTH
  703.  642   6           .
  704.  643   5         ELSIF KEYCODE() = BS_KEY                   !BACKSPACE UNTYPES A CHARACTER
  705.  644   5           IF LEN# > 0                              !  IF THERE ARE CHARACTERS LEFT
  706.  645   6             LEN# -= 1                              !    DECREMENT THE LENGTH
  707.  646   6             SCR:LOCATOR = SUB(SCR:LOCATOR,1,LEN#)  !    ERASE THE LAST CHARACTER
  708.  647   6           .
  709.  648   5         ELSE                                       !FOR ANY OTHER CHARACTER
  710.  649   5           LEN# = 0                                 !  ZERO THE LENGTH
  711.  650   5           SCR:LOCATOR = ''                         !  ERASE THE LOCATOR FIELD
  712.  651   5         .
  713.  652   4         SETCURSOR(ROW(SCR:LOCATOR),COL(SCR:LOCATOR)+LEN#) !AND RESET THE CURSOR
  714.  653   4         BLK:PHONE = DEFORMAT(SCR:LOCATOR)          !    UPDATE THE KEY FIELD
  715.  654   4         IF KEYBOARD() > 31                   |     !THE DISPLAYABLE CHARACTERS
  716.  655   4         AND KEYBOARD() < 255                 |     !ARE USED TO LOCATE RECORDS
  717.  656   4         OR  KEYBOARD() = BS_KEY                    !INCLUDE BACKSPACE
  718.  657   5           CYCLE
  719.  658   5         .
  720.  659   4         IF LEN# > 0 THEN DO FIND_RECORD.           !    AND FIND THE RECORD
  721.  660   4           CASE KEYCODE()                           !  PROCESS THE KEYSTROKE
  722.  661   5           OF INS_KEY                               !INSERT KEY
  723.  662   5             CLEAR(BLK:RECORD)                      !  CLEAR RECORD AREA
  724.  663   5             ACTION = 1                             !  SET ACTION TO ADD
  725.  664   5             UPD_BLKBOOK                            !  CALL FORM FOR NEW RECORD
  726.  665   5             IF ~ACTION                             !  IF A NEW RECORD WAS ADDED
  727.  666   6               POINTER# = POINTER(BLKBOOK)          !    REMEMBER WHICH RECORD
  728.  667   6               SET(BLK:BY_PHONE,BLK:BY_PHONE)       !    SET TO NEW RECORD AND
  729.  668   6               SKIP(BLKBOOK,-1)                     !    MAKE IT THE TOP ITEM
  730.  669   6               DO SHOW_TABLE                        !    DISPLAY THAT PAGE
  731.  670   6             .
  732.  671   5           OF ENTER_KEY                             !ENTER KEY OR
  733.  672   5           OROF ACCEPT_KEY                          !CTRL ENTER KEY
  734.  673   5             DO GET_RECORD                          !  READ THE SELECTED RECORD
  735.  674   5             IF ACTION = 4 AND KEYCODE() = ENTER_KEY!  IF THIS IS A LOOKUP REQUEST
  736. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  737.  
  738. Show Blkbook By Phone                                                  10/27/90 11:52 PM PAGE 19
  739.  
  740.  675   6               ACTION = 0                           !    SET ACTION TO COMPLETE
  741.  676   6               RETURN                               !    AND RETURN TO CALLER
  742.  677   6             .                                      !
  743.  678   5             ACTION = 2                             !  SET ACTION TO CHANGE
  744.  679   5             UPD_BLKBOOK                            !  CALL FORM TO CHANGE RECORD
  745.  680   5             IF ~ACTION                             !  IF THE RECORD WAS CHANGED
  746.  681   6               POINTER# = POINTER(BLKBOOK)          !    REMEMBER WHICH RECORD
  747.  682   6               SET(BLK:BY_PHONE,BLK:BY_PHONE)       !    SET TO CHANGED RECORD
  748.  683   6               SKIP(BLKBOOK,-1)                     !    MAKE IT THE TOP ITEM
  749.  684   6               DO SHOW_TABLE                        !    AND DISPLAY THAT PAGE
  750.  685   6             ELSE                                   !  OTHERWISE
  751.  686   6               SKIP(BLKBOOK,(MAX-NDX))              !  SKIP BACK TO SAME PAGE
  752.  687   6             .
  753.  688   5           OF DEL_KEY                               !DELETE KEY
  754.  689   5             DO GET_RECORD                          !  READ THE SELECTED RECORD
  755.  690   5             ACTION = 3                             !  SET ACTION TO DELETE
  756.  691   5             UPD_BLKBOOK                            !  CALL FORM TO DELETE RECORD
  757.  692   5             IF ~ACTION                             !  IF RECORD WAS DELETED
  758.  693   6               SKIP(BLKBOOK,-NDX)                   !    SET NEXT RECORD ON TOP
  759.  694   6               DO SHOW_TABLE                        !    AND DISPLAY THAT PAGE
  760.  695   6             ELSE                                   !  OTHERWISE
  761.  696   6               SKIP(BLKBOOK,(MAX-NDX))              !  SKIP BACK TO SAME PAGE
  762.  697   6             .
  763.  698   5           OF DOWN_KEY                              !DOWN ARROW KEY
  764.  699   5             IF NOT EOF(BLKBOOK)                    !  IF THERE ARE MORE RECORDS
  765.  700   6               SCROLL(ROW,COL,ROWS,COLS,ROWS(?POINT)) !  SCROLL THE SCREEN UP
  766.  701   6               NEXT(BLKBOOK)                        !    READ THE BOTTOM RECORD
  767.  702   6               DO SHOW_RECORD                       !    AND DISPLAY IT
  768.  703   6             .
  769.  704   5           OF PGDN_KEY                              !PAGE DOWN KEY
  770.  705   5             IF EOF(BLKBOOK)                        !  ON THE LAST PAGE
  771.  706   6               NDX = MAX                            !    POINT TO BOTTOM ITEM
  772.  707   6             ELSE                                   !  OTHERWISE
  773.  708   6               DO SHOW_TABLE                        !    DISPLAY NEXT PAGE
  774.  709   6             .
  775.  710   5           OF CTRL_PGDN                             !CTRL-PAGE DOWN KEY
  776.  711   5             NDX = MAX                              !  POINT TO BOTTOM ITEM
  777.  712   5             IF NOT EOF(BLKBOOK)                    !  ON THE LAST PAGE
  778.  713   6               SET(BLK:BY_PHONE)                    !    SET TO BOTTOM RECORD MINUS
  779.  714   6               SKIP(BLKBOOK,-COUNT)                 !      ONE PAGE OF RECORDS
  780.  715   6               DO SHOW_TABLE                        !    DISPLAY THE LAST PAGE
  781.  716   6             .
  782.  717   5           OF UP_KEY                                !UP ARROW KEY
  783.  718   5             SKIP(BLKBOOK,-(COUNT-1))               !    SET TO TOP RECORD MINUS 1
  784.  719   5             IF NOT BOF(BLKBOOK)                    !  IF THERE IS A PRIOR RECORD
  785.  720   6               PREVIOUS(BLKBOOK)                    !     READ THE TOP RECORD
  786.  721   6               IF NOT ERROR()                       !    IF READ A RECORD
  787.  722   7                 SCROLL(ROW,COL,ROWS,COLS,-(ROWS(?POINT)))! SCROLL THE SCREEN DOWN
  788.  723   7                 DO SHOW_RECORD                     !       AND DISPLAY IT
  789.  724   7               ELSIF ERRORCODE() = 33               !    ELSIF RECORD NOT AVAILABLE
  790.  725   7                 NEXT(BLKBOOK)                      !       RETRIEVE FIRST ONE
  791.  726   7             . .
  792.  727   5             SKIP(BLKBOOK,COUNT-1)                  !  SET RECORD FOR NEXT PAGE
  793.  728       
  794. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  795.  
  796. Show Blkbook By Phone                                                  10/27/90 11:52 PM PAGE 20
  797.  
  798.  729   5           OF PGUP_KEY                              !PAGE UP KEY
  799.  730   5             SKIP(BLKBOOK,-(COUNT-1))               !  SET TO TOP RECORD MINUS ONE
  800.  731   5             IF BOF(BLKBOOK)                        !  IF THERE IS NO PRIOR RECORD
  801.  732   6               NDX = 1                              !    THEN POINT TO TOP ITEM
  802.  733   6               SKIP(BLKBOOK,COUNT-1)                !    SET RECORD FOR THIS PAGE
  803.  734   6             ELSE                                   !  OTHERWISE
  804.  735   6               SKIP(BLKBOOK,-(COUNT+1))             !    SET RECORD FOR PRIOR PAGE
  805.  736   6               DO SHOW_TABLE                        !    AND DISPLAY THE PAGE
  806.  737   6             .
  807.  738   5           OF CTRL_PGUP                             !CTRL-PAGE UP KEY
  808.  739   5             SET(BLK:BY_PHONE)                      !  SET TO FIRST RECORD
  809.  740   5             NDX = 1                                !  POINT TO TOP ITEM
  810.  741   5             DO SHOW_TABLE                          !  AND DISPLAY THE PAGE
  811.  742   5           .
  812.  743   4     . . .
  813.  744   1     RETURN                                         !RETURN TO CALLER
  814.  745       
  815.  746   1   SHOW_TABLE ROUTINE                               !DISPLAY A PAGE OF RECORDS
  816.  747   1     SKIP(BLKBOOK,COUNT-1)                          !  SET TO THE BOTTOM RECORD
  817.  748   1     IF EOF(BLKBOOK)                                !  FOR A PARTIAL PAGE
  818.  749   2       SET(BLK:BY_PHONE)                            !    SET TO THE LAST RECORD
  819.  750   2       SKIP(BLKBOOK,-COUNT)                         !    AND BACK UP ONE PAGE
  820.  751   2     ELSE                                           !  OTHERWISE
  821.  752   2       SKIP(BLKBOOK,-(COUNT-1))                     !    SET RECORD FOR THIS PAGE
  822.  753   2     .
  823.  754   1     NDX# = NDX                                     !  SAVE REPEAT INDEX
  824.  755   1     LOOP NDX = 1 TO COUNT                          !  LOOP THRU THE SCROLL AREA
  825.  756   2       IF EOF(BLKBOOK) THEN BREAK.                  !    BREAK ON END OF FILE
  826.  757   2       NEXT(BLKBOOK)                                !    READ THE NEXT RECORD
  827.  758   2       DO SHOW_RECORD                               !    AND DISPLAY IT
  828.  759   2       IF POINTER(BLKBOOK) = POINTER#
  829.  760   3         NDX# = NDX                                 !  POINT TO CORRECT RECORD
  830.  761   3     . .
  831.  762   1     NDX = NDX#                                     !  RESTORE REPEAT INDEX
  832.  763   1     CLEAR(BLK:RECORD)                              !  CLEAR RECORD AREA
  833.  764   1     IF RECORDS(BLK:BY_PHONE) < COUNT               !  IF RECORDS DO NOT FILL
  834.  765   2        NDX#= RECORDS(BLK:BY_PHONE) * 1             !     GET NUMBER TIMES SIZE
  835.  766   2        BLANK(ROW + NDX#,COL,ROWS-NDX#,COLS)        !     BLANK REMAINING AREA
  836.  767   2     .
  837.  768       
  838.  769   1   SHOW_RECORD ROUTINE                              !DISPLAY A RECORD
  839.  770   1     SCR:PHONE = BLK:PHONE
  840.  771   1     SCR:NAME = BLK:NAME
  841.  772   1     SCR:STREET = BLK:STREET
  842.  773   1     SCR:STATE = BLK:STATE
  843.  774       
  844.  775   1   GET_RECORD ROUTINE                               !READ SELECTED RECORD
  845.  776   1     SKIP(BLKBOOK,-(MAX-NDX+1))                     !  SET TO SELECTED RECORD
  846.  777   1     NEXT(BLKBOOK)                                  !    AND READ IT
  847.  778       
  848.  779   1   FIND_RECORD ROUTINE                              !LOCATE REQUESTED RECORD
  849.  780   1     SET(BLK:BY_PHONE,BLK:BY_PHONE)                 !  SET TO REQUESTED RECORD
  850.  781   1     IF EOF(BLKBOOK)                                !  IF BEYOND END OF FILE
  851.  782   2       PREVIOUS(BLKBOOK)                            !    GET THE LAST RECORD
  852. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  853.  
  854. Show Blkbook By Phone                                                  10/27/90 11:52 PM PAGE 21
  855.  
  856.  783   2     ELSE                                           !  ELSE
  857.  784   2       NEXT(BLKBOOK)                                !    READ THIS RECORD
  858.  785   2     .
  859.  786   1     POINTER# = POINTER(BLKBOOK)                    !  SAVE ITS RECORD POINTER
  860.  787   1     SKIP(BLKBOOK,-1)                               !  MAKE IT THE TOP RECORD
  861.  788   1     DO SHOW_TABLE                                  !  AND FILL THE SCROLL AREA
  862.  789       
  863.  790   1   SAME_PAGE ROUTINE                                !SET TO SAME PAGE ROUTINE
  864.  791   1     POINTER# = POINTER(BLKBOOK)                    !  SAVE ITS RECORD POINTER
  865.  792   1     GET(BLKBOOK,POINTER#)                          !  GET THE RECORD
  866.  793   1     SET(BLK:BY_PHONE,BLK:BY_PHONE)                 !  SET TO THE SAME RECORD
  867.  794   1     SKIP(BLKBOOK,-1)                               !  SKIP TO TOP OF SAME PAGE
  868.  795       
  869. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  870.  
  871. Print Blkbook By Name                                                  10/27/90 11:52 PM PAGE 22
  872.  
  873.  797       
  874.  798   1   RPT_NAME     PROCEDURE
  875.  799       
  876.  800   1   TITLE        REPORT       LENGTH(59),WIDTH(143),PRE(TTL)
  877.  801   2   RPT_HEAD                  DETAIL
  878.  802   3                .            .
  879.  803   1   REPORT       REPORT       LENGTH(59),WIDTH(143),PAGE(MEM:PAGE),LINE(MEM:LINE),PRE(RPT)
  880.  804   2   PAGE_HEAD                 HEADER
  881.  805   3                    COL(62)    STRING('Print Blkbook By Name')
  882.  806   3                  ROW(+2,1)    STRING('NAME {29}PHONE STREET {20}CITY {22}STATE ZIP {8}COMMENTS') CTL(@LF2)
  883.  807   3                             .
  884.  808   2   DETAIL                    DETAIL
  885.  809   3                    COL(1)     STRING(25),USE(BLK:NAME)
  886.  810   3                    COL(27)    STRING(@P###-###-####P),USE(BLK:PHONE)
  887.  811   3                    COL(40)    STRING(25),USE(BLK:STREET)
  888.  812   3                    COL(66)    STRING(25),USE(BLK:CITY)
  889.  813   3                    COL(92)    STRING(2),USE(BLK:STATE)
  890.  814   3                    COL(98)    STRING(@N_5),USE(BLK:ZIP)
  891.  815   3                    COL(109)   STRING(35),USE(BLK:COMMENTS) CTL(@LF)
  892.  816   3                             .
  893.  817   2   DETAILA                   DETAIL
  894.  818   3   MEMO_1           COL(109)   STRING(35) CTL(@LF)
  895.  819   3                             .
  896.  820   2   DETAILB                   DETAIL
  897.  821   3                             .
  898.  822   2   RPT_FOOT                  DETAIL
  899.  823   3                             .
  900.  824   2   PAGE_FOOT                 FOOTER
  901.  825   3                  ROW(+1,69)   STRING('PAGE')
  902.  826   3                    COL(74)    STRING(@N3),USE(MEM:PAGE) CTL(@LF)
  903.  827   3                               CTL(@FF)
  904.  828   3                .            .
  905.  829       
  906.  830       
  907.  831   1     CODE
  908.  832   1     DONE# = 0                                      !TURN OFF DONE FLAG
  909.  833   1     CLEAR(BLK:RECORD)                              !MAKE SURE RECORD CLEARED
  910.  834   1     PRINT(TTL:RPT_HEAD)                            !PRINT TITLE PAGE
  911.  835   1     CLOSE(TITLE)                                   !CLOSE TITLE REPORT
  912.  836   1     SET(BLK:BY_NAME)                               !SET TO FIRST RECORD
  913.  837   1     DO NEXT_RECORD                                 !READ FIRST RECORD
  914.  838   1     MEM:DEVICE = '+' & MEM:DEVICE                  !APPEND DISK RPT TO TITLE
  915.  839   1     OPEN(REPORT)                                   !OPEN THE REPORT
  916.  840   1     LOOP UNTIL DONE#                               !READ ALL RECORDS IN FILE
  917.  841   2       SAVE_LINE# = MEM:LINE                        !  SAVE LINE NUMBER
  918.  842   2       LAST_REC# = POINTER(BLKBOOK)
  919.  843   2       PRINT(RPT:DETAIL)                            !  PRINT DETAIL LINES
  920.  844   2       DO CHECK_PAGE                                !  DO PAGE BREAK IF NEEDED
  921.  845   2       LOOP MEMO_1# = 285 TO 2 BY -1                !BACKSCAN THE MEMO FIELD TO
  922.  846   3         IF BLK_MEMO_ROW[MEMO_1#] <> '' THEN BREAK. ! FIND NUMBER OF ROWS USED
  923.  847   3       .                                            ! END OF MEMOLEN
  924.  848   2       J# = 2                                       !START WITH SECOND ROW
  925.  849   2       LOOP                                         !LOOP THRU ALL USED ROWS
  926.  850   3         MEMODONE# = 0                              !  NO MEMOS DONE YET
  927. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  928.  
  929. Print Blkbook By Name                                                  10/27/90 11:52 PM PAGE 23
  930.  
  931.  851   3         IF J# <= MEMO_1#                           !IF IN THE RANGE OF THIS MEMO
  932.  852   4           RPT:MEMO_1 = BLK_MEMO_ROW[J#]            !  MOVE A MEMO FIELD ROW
  933.  853   4           MEMODONE# = 1                            !  MEMO HAS BEEN MOVED
  934.  854   4         ELSE                                       !OTHERWISE
  935.  855   4           RPT:MEMO_1 = ''                          !  NO MEMO TO DO
  936.  856   4         .                                          ! END OF SETMEMO
  937.  857   3         IF MEMODONE# = 0                           !  ALL MEMOS PRINTED
  938.  858   4           DO CHECK_PAGE                            !  DO PAGE BREAK IF NEEDED
  939.  859   4           BREAK                                    !  EXIT MEMO PRINT LOOP
  940.  860   4         .                                          !
  941.  861   3         PRINT(RPT:DETAILA)                         !PRINT THE DETAIL RECORD
  942.  862   3         J# += 1                                    !  INCREMENT COUNTER
  943.  863   3         DO CHECK_PAGE                              !  DO PAGE BREAK IF NEEDED
  944.  864   3       .
  945.  865   2         PRINT(RPT:DETAILB)                         !PRINT THE DETAIL RECORD
  946.  866   2       DO NEXT_RECORD                               !  GET NEXT RECORD
  947.  867   2     .                                              !
  948.  868   1     PRINT(RPT:RPT_FOOT)                            !PRINT GRAND TOTALS
  949.  869   1     DO CHECK_PAGE                                  !  DO PAGE BREAK IF NEEDED
  950.  870   1     CLOSE(REPORT)                                  !CLOSE REPORT
  951.  871   1     MEM:DEVICE = SUB(MEM:DEVICE,2,LEN(MEM:DEVICE)-1) !TURN OFF APPEND REPORT
  952.  872   1     RETURN                                         !RETURN TO CALLER
  953.  873       
  954.  874       
  955.  875   1   NEXT_RECORD ROUTINE                              !GET NEXT RECORD
  956.  876   1     LOOP UNTIL EOF(BLKBOOK)                        !  READ UNTIL END OF FILE
  957.  877   2       NEXT(BLKBOOK)                                !    READ NEXT RECORD
  958.  878   2       EXIT                                         !    EXIT THE ROUTINE
  959.  879   2     .                                              !
  960.  880   1     DONE# = 1                                      !  ON EOF, SET DONE FLAG
  961.  881       
  962.  882   1   CHECK_PAGE ROUTINE                               !CHECK FOR NEW PAGE
  963.  883   1     IF MEM:LINE <= SAVE_LINE#                      !  ON PAGE OVERFLOW
  964.  884   2       SAVE_LINE# = MEM:LINE                        !    RESET LINE NUMBER
  965.  885   2     .
  966.  886   1     LOOP UNTIL NOT KEYBOARD()                      !LOOK FOR KEYSTROKE
  967.  887   2       ASK
  968.  888   2       IF KEYCODE() = REJECT_KEY THEN RETURN.       !ABORT REPORT
  969.  889   2     .
  970.  890       
  971. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  972.  
  973. Print Blkbook By Phone                                                 10/27/90 11:52 PM PAGE 24
  974.  
  975.  892       
  976.  893   1   RPT_PHONE    PROCEDURE
  977.  894       
  978.  895   1   TITLE        REPORT       LENGTH(59),WIDTH(143),PRE(TTL)
  979.  896   2   RPT_HEAD                  DETAIL
  980.  897   3                .            .
  981.  898   1   REPORT       REPORT       LENGTH(59),WIDTH(143),PAGE(MEM:PAGE),LINE(MEM:LINE),PRE(RPT)
  982.  899   2   PAGE_HEAD                 HEADER
  983.  900   3                    COL(64)    STRING('Print Blkbook By Phone')
  984.  901   3                  ROW(+2,1)    STRING('NAME {29}PHONE STREET {20}CITY {22}STATE ZIP {8}COMMENTS') CTL(@LF2)
  985.  902   3                             .
  986.  903   2   DETAIL                    DETAIL
  987.  904   3                    COL(1)     STRING(25),USE(BLK:NAME)
  988.  905   3                    COL(27)    STRING(@P###-###-####P),USE(BLK:PHONE)
  989.  906   3                    COL(40)    STRING(25),USE(BLK:STREET)
  990.  907   3                    COL(66)    STRING(25),USE(BLK:CITY)
  991.  908   3                    COL(92)    STRING(2),USE(BLK:STATE)
  992.  909   3                    COL(98)    STRING(@N_5),USE(BLK:ZIP)
  993.  910   3                    COL(109)   STRING(35),USE(BLK:COMMENTS) CTL(@LF)
  994.  911   3                             .
  995.  912   2   DETAILA                   DETAIL
  996.  913   3   MEMO_1           COL(109)   STRING(35) CTL(@LF)
  997.  914   3                             .
  998.  915   2   DETAILB                   DETAIL
  999.  916   3                             .
  1000.  917   2   RPT_FOOT                  DETAIL
  1001.  918   3                             .
  1002.  919   2   PAGE_FOOT                 FOOTER
  1003.  920   3                  ROW(+1,71)   STRING('PAGE')
  1004.  921   3                    COL(76)    STRING(@N3),USE(MEM:PAGE) CTL(@LF)
  1005.  922   3                               CTL(@FF)
  1006.  923   3                .            .
  1007.  924       
  1008.  925       
  1009.  926   1     CODE
  1010.  927   1     DONE# = 0                                      !TURN OFF DONE FLAG
  1011.  928   1     CLEAR(BLK:RECORD)                              !MAKE SURE RECORD CLEARED
  1012.  929   1     PRINT(TTL:RPT_HEAD)                            !PRINT TITLE PAGE
  1013.  930   1     CLOSE(TITLE)                                   !CLOSE TITLE REPORT
  1014.  931   1     SET(BLK:BY_PHONE)                              !SET TO FIRST RECORD
  1015.  932   1     DO NEXT_RECORD                                 !READ FIRST RECORD
  1016.  933   1     MEM:DEVICE = '+' & MEM:DEVICE                  !APPEND DISK RPT TO TITLE
  1017.  934   1     OPEN(REPORT)                                   !OPEN THE REPORT
  1018.  935   1     LOOP UNTIL DONE#                               !READ ALL RECORDS IN FILE
  1019.  936   2       SAVE_LINE# = MEM:LINE                        !  SAVE LINE NUMBER
  1020.  937   2       LAST_REC# = POINTER(BLKBOOK)
  1021.  938   2       PRINT(RPT:DETAIL)                            !  PRINT DETAIL LINES
  1022.  939   2       DO CHECK_PAGE                                !  DO PAGE BREAK IF NEEDED
  1023.  940   2       LOOP MEMO_1# = 285 TO 2 BY -1                !BACKSCAN THE MEMO FIELD TO
  1024.  941   3         IF BLK_MEMO_ROW[MEMO_1#] <> '' THEN BREAK. ! FIND NUMBER OF ROWS USED
  1025.  942   3       .                                            ! END OF MEMOLEN
  1026.  943   2       J# = 2                                       !START WITH SECOND ROW
  1027.  944   2       LOOP                                         !LOOP THRU ALL USED ROWS
  1028.  945   3         MEMODONE# = 0                              !  NO MEMOS DONE YET
  1029. BLKBOOK.CLA                                                                CLARION COMPILER v2.0
  1030.  
  1031. Print Blkbook By Phone                                                 10/27/90 11:52 PM PAGE 25
  1032.  
  1033.  946   3         IF J# <= MEMO_1#                           !IF IN THE RANGE OF THIS MEMO
  1034.  947   4           RPT:MEMO_1 = BLK_MEMO_ROW[J#]            !  MOVE A MEMO FIELD ROW
  1035.  948   4           MEMODONE# = 1                            !  MEMO HAS BEEN MOVED
  1036.  949   4         ELSE                                       !OTHERWISE
  1037.  950   4           RPT:MEMO_1 = ''                          !  NO MEMO TO DO
  1038.  951   4         .                                          ! END OF SETMEMO
  1039.  952   3         IF MEMODONE# = 0                           !  ALL MEMOS PRINTED
  1040.  953   4           DO CHECK_PAGE                            !  DO PAGE BREAK IF NEEDED
  1041.  954   4           BREAK                                    !  EXIT MEMO PRINT LOOP
  1042.  955   4         .                                          !
  1043.  956   3         PRINT(RPT:DETAILA)                         !PRINT THE DETAIL RECORD
  1044.  957   3         J# += 1                                    !  INCREMENT COUNTER
  1045.  958   3         DO CHECK_PAGE                              !  DO PAGE BREAK IF NEEDED
  1046.  959   3       .
  1047.  960   2         PRINT(RPT:DETAILB)                         !PRINT THE DETAIL RECORD
  1048.  961   2       DO NEXT_RECORD                               !  GET NEXT RECORD
  1049.  962   2     .                                              !
  1050.  963   1     PRINT(RPT:RPT_FOOT)                            !PRINT GRAND TOTALS
  1051.  964   1     DO CHECK_PAGE                                  !  DO PAGE BREAK IF NEEDED
  1052.  965   1     CLOSE(REPORT)                                  !CLOSE REPORT
  1053.  966   1     MEM:DEVICE = SUB(MEM:DEVICE,2,LEN(MEM:DEVICE)-1) !TURN OFF APPEND REPORT
  1054.  967   1     RETURN                                         !RETURN TO CALLER
  1055.  968       
  1056.  969       
  1057.  970   1   NEXT_RECORD ROUTINE                              !GET NEXT RECORD
  1058.  971   1     LOOP UNTIL EOF(BLKBOOK)                        !  READ UNTIL END OF FILE
  1059.  972   2       NEXT(BLKBOOK)                                !    READ NEXT RECORD
  1060.  973   2       EXIT                                         !    EXIT THE ROUTINE
  1061.  974   2     .                                              !
  1062.  975   1     DONE# = 1                                      !  ON EOF, SET DONE FLAG
  1063.  976       
  1064.  977   1   CHECK_PAGE ROUTINE                               !CHECK FOR NEW PAGE
  1065.  978   1     IF MEM:LINE <= SAVE_LINE#                      !  ON PAGE OVERFLOW
  1066.  979   2       SAVE_LINE# = MEM:LINE                        !    RESET LINE NUMBER
  1067.  980   2     .
  1068.  981   1     LOOP UNTIL NOT KEYBOARD()                      !LOOK FOR KEYSTROKE
  1069.  982   2       ASK
  1070.  983   2       IF KEYCODE() = REJECT_KEY THEN RETURN.       !ABORT REPORT
  1071.  984   2     .
  1072.  985       
  1073.  986       
  1074.  
  1075. NO MESSAGES THIS COMPILE
  1076.