home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / database / nj_map.zip / NJMAP.PRG next >
Text File  |  1988-07-07  |  8KB  |  243 lines

  1. * - BOF - *
  2. *****
  3. * This dBase (or Clipper) program will plot a New Jersey state
  4. * "map" using your data base.  The map will show where each of
  5. * your records is located in the state.  (A sample map is at the end of
  6. * of this program.)
  7. *
  8. * We license ambulance services and related vehicles.  I wrote this program 
  9. * because we needed to "see" where the services and vehicles were located;
  10. * the resulting maps have become valuable tools.
  11. *
  12. * The program uses the grid system which appears on the "New Jersey
  13. * State Map" distributed by the Division of Tourism.
  14. *
  15. * To use this program, you'll have to add the map grid, such as "B12,"
  16. * to each record.  I used two fields:
  17. *
  18. *      map_ltr   character   SPACE(1)
  19. *      This field is for the letters (A thru W) which appear on each side
  20. *      of the state map.
  21. *
  22. *      map_num   character   SPACE(2)
  23. *      This field is for the numbers (1 thru 13) which appear on the top and
  24. *      bottom of the state map.  This program expects the map numbers to NOT
  25. *      have leading zeroes.  (i.e. " 1" or " 2" is good; "01" or "02" is bad.)
  26. *
  27. * After you add the fields, you'll have to type-in the "grid code" for
  28. * each record.
  29. *
  30. * If you need to plot a map, have a -=>LOT<=- of records (with zip codes)
  31. * and you can't add fields, there are other approaches.  Call me.
  32. *
  33. * Ron Hockemeier, 609-292-6789
  34. * EMS Program, NJ Dept. of Health, CN 364, Trenton, NJ 08625-0364
  35. *
  36. *****
  37.  
  38. * Initialize the letters for the grid code.
  39. * (The state map uses the letters A thru W.)
  40. start_ltr=[A]
  41. end_ltr=[W]
  42.  
  43. * Initialize the numbers for the grid code.
  44. * (The state map uses the numbers 1 thru 13.)
  45. start_num=1
  46. end_num=13
  47.  
  48. * Initialize the variables to plot the map on the page.
  49. line=1
  50. start_lin=5
  51. start_col=15
  52. choice=[P53]  && for demo only--should be passed from your calling program
  53.  
  54. * Initialize the "grand total counter."
  55. tot_cnt=0
  56.  
  57. choice=[P53]  && for demo only--should be passed from your calling program
  58.  
  59. * Initialize printer variables.  (Usually in a separate program.)
  60. * These are EPSON LQ 1000 instructions.  They'll probably work with other
  61. * EPSONS and compatibles.
  62. elite=CHR(27)+[M]  && epson 12 cpi
  63. bold_on =CHR(27)+[E]+CHR(27)+[G]
  64. bold_off=CHR(27)+[F]+CHR(27)+[H]
  65. init_prnt=CHR(27)+[@]
  66. tiny_on =CHR(15)
  67. tiny_off=CHR(18)
  68.  
  69. * Index on the grid letters and numbers.
  70.  
  71. * USE <yourfile>
  72.  
  73. CLEA
  74. @ 10,31 say [I'm getting ready.]
  75. INDEX on UPPE(map_ltr)+map_num TO C:njmap
  76. SET INDEX TO C:njmap
  77. @ 10,31 say SPAC(30)
  78. @ 10,28 say [I'm printing the "map."]
  79.  
  80. * Initialize the page header.  "Choice" should be from your calling program
  81. DO CASE
  82.   CASE SUBS(choice,1,3) $[P53]
  83.     page_hdg=[<Your First Heading> "Map"]
  84.   CASE SUBS(choice,1,3) $[P55]
  85.     page_hdg=[<Your Second Heading> "Map"]
  86. ENDC
  87.  
  88. * Print the page header.
  89. SET DEVI TO PRIN
  90. @ line,0 SAY bold_on+[ ]+elite+[ ]
  91. @ line+1,(98-LEN(page_hdg))/2 SAY page_hdg
  92.  
  93. * Print the map numbers at the top of the map.
  94. work_num=start_num
  95. DO WHIL work_num < (end_num+1)
  96.   col=start_col+(work_num*4)
  97.   @ line+3,COL SAY STR(work_num,4)
  98.   work_num=work_num+1
  99. ENDD
  100. SET DEVI TO SCREEN
  101.  
  102. * Start the outside loop.
  103. * The outside loop goes thru the letters (A thru W) and "down" the page.
  104. DO WHIL (start_ltr <= end_ltr)
  105.  
  106.   * Calculate the line we'll print on during this pass thru the loop.
  107.   line=start_lin+((ASC(start_ltr)-64)*2)
  108.  
  109.   * Print the map letter at the left margin.
  110.   SET DEVI TO PRIN
  111.   @ line,(start_col) SAY start_ltr
  112.   SET DEVI TO SCREEN
  113.  
  114.   * Start the middle loop.
  115.   * The middle loop goes thru the numbers (1 thru 13) and "across" the page.)
  116.   work_num=start_num
  117.   DO WHIL (work_num <= end_num)
  118.  
  119.     * Initialize "map_grid" for this pass thru the middle loop.
  120.     * Map_grid is a memory variable which represents each
  121.     * consecutive grid on the state map.  It starts as "A 2."  It ends
  122.     * as "W13."
  123.     map_grid=start_ltr+STR(work_num,2)
  124.  
  125.     * See if there's something at this grid.
  126.     SEEK map_grid
  127.  
  128.     IF found()
  129.       * There's something at this map grid.
  130.  
  131.       * Initialize the counter for the inside loop.
  132.       map_cnt=0
  133.  
  134.       * Start the inside loop.
  135.       * The inside loop moves thru each record which matches "map_grid."
  136.       DO WHIL map_grid=UPPE(map_ltr)+map_num .AND. .NOT. EOF()
  137.  
  138.         * Increment the counters depending on the CASE STATEMENT.
  139.         *    Count each record (by adding +1) or
  140.         *    Add the value of the number field.
  141.         *    ("Choice" should be from your calling program.)
  142.         DO CASE
  143.           CASE SUBS(choice,1,3) $[P53]
  144.             * We're counting the record
  145.             tot_cnt=tot_cnt+1
  146.             map_cnt=map_cnt+1
  147.           CASE SUBS(choice,1,3) $[P55]
  148.             * We're adding the value from your number field.
  149.             * tot_cnt=tot_cnt+<your number field>
  150.             * map_cnt=map_cnt+<your number field>
  151.         ENDC
  152.  
  153.         SKIP
  154.  
  155.       ENDDO WHIL map_grid=UPPE(map_ltr)+map_num .AND. .NOT. EOF()
  156.  
  157.       * We're out of the inside loop.
  158.  
  159.       * Since FOUND() was true; we know at least one record
  160.       * is at this grid.
  161.       * However, if we're adding the value for a number field,
  162.       * map_cnt might equal zero because the number field equals zero.
  163.       IF map_cnt>0
  164.  
  165.         * Calculate the column which represents the map grid.
  166.         col=start_col+(work_num*4)-4
  167.  
  168.         * Print the info out at the "correct spot" on the "map."
  169.         SET DEVI TO PRIN
  170.         @ line,COL SAY STR(map_cnt,4)
  171.         SET DEVI TO SCREEN
  172.  
  173.       ENDIF map_cnt>0
  174.  
  175.     ENDif found()
  176.  
  177.     * Increase the variable for the next pass thru the middle loop.
  178.     work_num=work_num+1
  179.  
  180.   ENDDO WHIL (work_num <= end_num)
  181.  
  182.   * We're out of the middle loop.  Print the map letter at the right margin.
  183.   SET DEVI TO PRIN
  184.   col=start_col+(end_num*4)+10
  185.   @ line,COL SAY start_ltr
  186.   SET DEVI TO SCREEN
  187.  
  188.   * Initialize the variables for the next pass thru the middle loop.
  189.   work_num=start_num
  190.   start_ltr=CHR(ASC(start_ltr)+1)
  191.  
  192. ENDDO WHIL (start_ltr <= end_ltr)
  193.  
  194. * We're out of the outside loop.  Print the map numbers at the bottom.
  195. work_num=start_num
  196. SET DEVI TO PRIN
  197. DO WHIL work_num < (end_num+1)
  198.   col=start_col+(work_num*4)
  199.   @ line+2,COL SAY STR(work_num,4)
  200.   work_num=work_num+1
  201. ENDD
  202.  
  203. * Initialize the footer messages.
  204. foot_msg1=[The grid system on this "map" is based on the New ]+ ;
  205.   [Jersey State Map distributed by the Division of Tourism.]
  206. foot_msg2=[This "map" shows the number of ]
  207. DO CASE
  208.   CASE SUBS(choice,1,3) $[P53]
  209.     foot_msg2=foot_msg2+[<Your first message> in each grid.]
  210.     foot_msg3=[In total, ]+LTRIM(STR(tot_cnt,9))+ ;
  211.        [ <Your word> appear on this "map."]
  212.   CASE SUBS(choice,1,3) $[P55]
  213.     foot_msg2=foot_msg2+[<Your next message> in each grid.]
  214.     foot_msg3=[In total, ]+LTRIM(STR(tot_cnt,9))+ ;
  215.        [ <Your next word> appear on this "map."]
  216. ENDC
  217.  
  218. * Mention the number of records--if any--which were weren't counted.
  219. IF recc()>tot_cnt
  220.   foot_msg3=foot_msg3+[  (]+LTRIM(STR( (RECC()-tot_cnt),9))+ ;
  221.      [ records couldn't be counted.)]
  222. ENDIF recc()>tot_cnt
  223. foot_msg4=[<Your Office Name> -- Printed ]+DTOC(DATE())+[.]
  224.  
  225. * print the footers.
  226. @ line+3,(start_col) SAY bold_off+tiny_on
  227. @ line+4,20 SAY foot_msg1
  228. @ line+5,20 SAY foot_msg2
  229. @ line+6,20 SAY foot_msg3
  230. @ line+7,20 SAY foot_msg4+tiny_off
  231. EJEC
  232.  
  233. * Reset the printer
  234. @ PROW(),1 SAY init_prnt+[ ]
  235. SET DEVI TO SCREE
  236.  
  237. @ 10,27 say SPAC(40)
  238. @ 10,33 say [I'm finished.]
  239.  
  240. RETU
  241. * - EOF - *
  242.  
  243.