home *** CD-ROM | disk | FTP | other *** search
- The arrival of dBASE 2.4 was a welcome event
- at our office. We run a variety of different
- databases and 2.4 enabled us to significantly
- improve our programs.
-
- In one area, however, 2.4 produced some real
- problems. We use a number of dual data bases where
- we transition between them in various parts of the
- program. Under 2.3 we would run into a `TOO MANY
- FILES` error every so often and awaited 2.4
- eagerly to solve that problem. As it turned out,
- 2.4 is more insistent upon a proper `RETURN`
- statement than 2.3 and it forced us to think
- through the problem.
-
- We did not necessarily want to return to the
- module that called the module we were running, so
- we created an `invisible box.` This box contains
- the `forever loop` for the program and is used for
- all transfers between the data bases.
-
- With the box we can go from any point in the
- program modules for a data base to any point in
- the program modules of any other data base. As
- long as we have no more than two data bases on
- line at a time, we can use the box to transition
- between any number of data bases. Before we enter
- the box in a transition between data bases we also
- save the common variable. When we enter the new
- data base from the box we do a `FIND` for the
- common variable to bring up the proper record.
-
- There is, of course, a time penalty, but a
- rather minor one in terms of what the box does.
-
-
- * dBOX.BOX by Steve Leon (201) 886-1658
- * dBOX is a program to switch between data bases
- * designed for dBASE 2.4
-
- * prior to entry the initilization program has
- * poked the drive number into memory via the
- * command `POKE 063,(64+@(dr,`AB`))`
-
- * set up forever loop for program
- STORE t TO keepitup
- DO WHILE keepitup
-
- * set up alternateive routes
- * the initialization program stores 0 to box
- * moveit is used in this data base to find the
- * proper file in the other data base via a
- * `SAVE`, `RESTORE` and `FIND`
- * first is used to bring on a fixed screen
- * matrix for the module
-
- DO CASE
-
- CASE box = 0
- STORE f TO moveit
- STORE t TO first
- STORE chr(peek (063)) TO dr
- USE &dr.:cpb INDEX &dr.:file
- DO main.cpb
-
- CASE box = 1
- RELEASE ALL
- STORE t TO keepitup
- STORE chr(peek (063)) TO dr
- USE &dr.:cpb INDEX &dr.:file
- STORE t TO moveit
- STORE t TO first
- DO main.cpb
-
- CASE box = 2
- RELEASE ALL
- STORE t TO keepitup
- STORE chr(peek (063)) TO dr
- USE &dr.:cpb1 INDEX &dr.:file1
- STORE t TO moveit
- STORE t TO first
- DO main.ind
-
- CASE box = 3
- RELEASE ALL
- STORE t TO keepitup
- STORE chr(peek (063)) TO dr
- USE &dr.:cpb INDEX &dr.:file
- STORE t TO moveit
- STORE t TO first
- DO search.cpb
- CASE box = 4
- RELEASE ALL
- STORE t TO keepitup
- STORE chr(peek (063)) TO dr
- USE &dr.:cpb1 INDEX &dr.:file1
- STORE t TO moveit
- STORE t TO first
- DO search.ind
-
- CASE box = 5
- STORE f TO moveit
- STORE t TO keepitup
- DO search.cpb
-
- CASE box = 6
- STORE f TO moveit
- STORE t TO keepitup
- DO search.ind
-
- CASE box = 7
- STORE f TO keepitup
-
- ENDCASE
- ENDDO
- * when we quit eliminate sign-off message
- ERASE
- SET CONSOLE OFF
- QUIT
-
- The transition from the various modules to
- the BOX is:
-
- To quit:
- CASE command = `Q`
- * prevent sign-off message
- STORE t TO keepitup
- STORE 7 TO box
- RETURN
-
- To transition to other data base:
- CASE command = `I`
- STORE !(fl:no) TO linker
- SAVE to move
- STORE 2 TO box
- RETURN
-
- There are other transitions in the program,
- but the above should be sufficient to enable you
- to write your own `box.` If you come up with a
- better way, or have some thoughts, we would
- appreciate them.
-
-
-
-
-
-