home *** CD-ROM | disk | FTP | other *** search
- *** New Note ***
-
- I didn't really expect this thing to go over so well! As a result I have
- found myself fine tuning it due to a number of performance questions raised.
-
- I guess I better start with the version numbers!
-
- Um, lets call this one 2.5. What the hell.
-
- *** End Note ***
-
- The purpose of STATWIN is to display a "percentage processed," or "status"
- window, complete with visual indicator bar. I applaud Jim Schaffner for
- implementing this idea using Clipper.
-
- However, as is usually the case when I stumble across good code, I found some
- elements aesthetically lacking. With apologies to Jim, I have hacked up the
- code a bit to help satisfy my desire to produce a more beautiful and robust
- utility.
-
- There are many enhancements to the original, but I will spare you the details.
- Just try it out. If you have used the original, the differences will be
- readily apparent. The gist of the code is still Jim's, though.
-
- I have also included a better TEST program, which shows all the features
- available from STATWIN.
-
- Compile both TEST.PRG and STATWIN.PRG, then link. Have fun! I hope you
- enjoy this great little utility! If you have any other ideas to improve
- the code (either functionally or aesthetically) I'd be glad to hear from you.
-
- Cai Campbell
- Compuserve ID 72622,1771
-
- *
- * One problem inherent in a utility such as StatWin is its inability to
- * report progress on "internal" processes such as indexing or appending.
- *
- * The following code demonstrates a method I have included to circumvent
- * this problem. However, since it utilizes a couple of public variables,
- * purists may frown on this approach.
- *
- * The philosophy behind this approach may be applied to a number of other
- * situations where "internal" processes are being used.
- *
-
- *
- * Procedure: ShowIndex
- *
- * Demonstrates the method needed to use StatWin to display percent bar while
- * a large DBF file is being indexed or reindexed.
- *
-
- PROCEDURE ShowIndex
-
- USE BigFile NEW // Open the DBF file
- StatInit ( 8, 25 ) // Initialize the Status Window
-
- cStatMsg := "Indexing:" // Public variable to store Status Window Message
- // (optional)
-
- INDEX ON INDEXKEY + StatWin ( LASTREC(), nStatCounter, cStatMsg ) TO IndexFile
-
- // The above index command is the key to making the status bar work.
- // StatWin is tied directly to your index. As such, every time BigFile is
- // reindexed (or processed in any way, for that matter), the Status
- // Window will be displayed (If you forget to reinitialize the Status
- // Window with StatInit, the resulting window will be less than pleasing.)
- // You can stop display of the Status Window by explicitly reindexing the
- // file without making StatWin part of the index.
- //
- // nStatCounter is a Public variable definded in STATWIN.PRG. It keeps
- // track of the current state of the process.
-
- StatExit()
-
- StatInit ( 8, 25 ) // This section is similar to that above, but shows
- cStatMsg := "Reindexed:" // how you would go about reindexing the file while
- REINDEX // showing the Status Window. This assumes that the
- StatExit() // the file has been indexed once before using the
- // process outlined above. Note that cStatMsg can
- // be changed to display a different message every
- // time you reindex the file.
- CLOSE BigFile
-
- RETURN
-
- *
- * Procedure: ShowAppend
- *
- * Demonstrates the method needed to display a Status Window while appending
- * from a large file.
- *
-
- LOCAL nFileSize // Size of source file (in number of records)
-
- cStatMsg := "Appending:" // Public variable declared in STATWIN.PRG
-
- USE TargFile NEW // Open the DBF file
- ZAP // Assuming you want to clear the target file
- StatInit ( 8, 25 ) // Initialize the Status Window
-
- nFileSize := // If appending from an ASCII SDF file, nFileSize equals the
- // size of file (in bytes) divided by line length (including
- // carriage return and linefeed.) This gives the total number
- // of records to be appended.
- //
- // If appending from an ASCII delimited file, nFileSize will be
- // more difficult to compute. One solution is to search the
- // source file for the total # of carriage return/linefeeds,
- // thus giving you the total number of records to be appended.
- // (See accompanying LINCOUNT.PRG)
- //
- // If appending from another DBF file, nFilSize simply
- // equals the number of records in the source file.
-
- INDEX ON StatWin ( nFileSize, nStatCounter, cStatMsg ) TO IndexFil
-
- // The above index command is the key to making the status bar work. The
- // function StatWin is directly tied to the index.
- //
- // Here, IndexFile is temporary and is used only to allow displaying of the
- // Status Window.
-
- APPEND FROM ( "SOURCE.TXT" ) SDF // assuming ASCII System Data Format
-
- StatExit()
-
- CLOSE TargFile INDEXES // close the temporary index
-
- FERASE ( "INDEXFIL.NTX" ) // erase the temporary index
-
- CLOSE TargFile
-
-