home *** CD-ROM | disk | FTP | other *** search
/ Between Heaven & Hell 2 / BetweenHeavenHell.cdr / 500 / 498 / mail.prg < prev    next >
Text File  |  1986-06-30  |  42KB  |  1,292 lines

  1. * MAIL.PRG (MAIL MONSTER)
  2. * WRITTEN BY PETER T. DYER
  3. * DATE: 9/20/85  REVISED 06/24/86
  4. * PURPOSE OF PROGRAM IS TO PROVIDE A GENERAL MAILING SYSTEM.
  5. * FEATURES INCLUDE ADDING, EDITING, CHECKING FOR DUPLICATION
  6. * REMOVING, AND PRINTING MAILING LABELS BY ALPHA, BY ZIPCODE, AND BY
  7. * CATEGORY OR CATEGORIES.
  8. * DATA BASE IS MAIL.DBF  INDEXES ARE FOUND IN LINES 78, 82, AND 86
  9. CLEAR
  10. SET SAFETY OFF
  11. SET HEADING OFF
  12. SET DELIMITER OFF
  13. SET BELL OFF
  14. SET CONFIRM ON
  15. SET TALK OFF
  16. RESTORE FROM CATLIST ADDITIVE
  17. RESTORE FROM MACHINE ADDITIVE
  18. IF CATMONT = 'C'
  19.    SET COLOR TO GR+/
  20. ENDIF
  21. @ 05,18 SAY "▓▓▓▓ ▓▓▓▓       ▓▓▓▓▓▓▓▓▓▓▓       ▓▓▓▓ ▓▓▓▓"
  22. @ 06,18 SAY " ▓▓▓   ▓▓           ▓▓▓            ▓▓▓   ▓▓"
  23. @ 07,18 SAY " ▓▓▓ ▓▓▓▓           ▓▓▓            ▓▓▓   ▓▓"
  24. @ 08,18 SAY " ▓▓▓                ▓▓▓            ▓▓▓   ▓▓"
  25. @ 09,18 SAY "▓▓▓▓▓              ▓▓▓▓▓          ▓▓▓▓ ▓▓▓▓"
  26. @ 10,18 SAY "da Bes'            dBASE           Software"
  27. @ 12,15 SAY "╔═══════════════════════════════════════════════╗"
  28. @ 13,15 SAY "║     (c) Copyrighted 1986 by Peter T. Dyer     ║"
  29. @ 14,15 SAY "╚═══════════════════════════════════════════════╝"
  30. @ 16,15 SAY "Distributed as PUBLIC DOMAIN software. Permission"
  31. @ 17,15 SAY "to copy and distribute this software is given so"
  32. @ 18,15 SAY "long as full credit is given to the author.  The"
  33. @ 19,15 SAY "software may not be sold, although fees of up to"
  34. @ 20,15 SAY "ten dollars (USA) may be assessed to cover costs."
  35. @ 23,15 SAY "           PRESS [ENTER] TO CONTINUE."
  36. SET CONSOLE OFF
  37. WAIT
  38. SET CONSOLE ON
  39. READ
  40. CLEAR
  41. DO WHILE .T.
  42. CLEAR
  43. USE MAIL
  44. GO BOTTOM
  45. IF MACHINE = 'F' .AND. RECNO() > 350
  46.   SET COLOR TO GR+/
  47.   @ 01,08 SAY "YOU ARE RUNNING OUT OF SPACE ON DISK.  MOVE DATA TO HARD DISK"
  48.   SET COLOR TO 7/0
  49. ENDIF
  50. STORE ' ' TO CHOICE
  51. @ 02,20 SAY "╔══════════════════════════════════════╗"
  52. @ 03,20 SAY "║                                      ║"
  53. @ 04,20 SAY "║        M A I L  M O N S T E R        ║"
  54. @ 05,20 SAY "║         MAILING LABEL SYSTEM         ║"
  55. @ 06,20 SAY "║               * 1.4 *                ║"
  56. @ 07,20 SAY "║         (C) Copyrighted 1986         ║"
  57. @ 08,20 SAY "║           by Peter T. Dyer           ║"
  58. @ 09,20 SAY "║                                      ║"
  59. @ 10,20 SAY "╚══════════════════════════════════════╝"
  60. SET COLOR TO GR+/
  61. @ 04,29 SAY "M A I L  M O N S T E R"
  62. @ 10,36 SAY " M E N U "
  63. SET COLOR TO 7/0
  64. @ 12,20 SAY "A)  ADD NAMES TO MAILING LIST"
  65. @ 13,20 SAY "E)  EDIT NAMES ON MAILING LIST"
  66. @ 14,20 SAY "D)  CHECK AND MARK DUPLICATE MAILING LABELS"
  67. @ 15,20 SAY "P)  PRINT MAILING LABELS BY CATEGORIES"
  68. @ 16,20 SAY "R)  REMOVE DUPLICATE MAILING LABELS"
  69. @ 17,20 SAY "S)  REMOVE SINGLE MAILING LABEL"
  70. @ 18,20 SAY "I)  RESET THE INDEXES ON DATA FILES"
  71. @ 19,20 SAY "C)  CREATE SPECIAL CATEGORIES and SET MONITOR"
  72. @ 20,20 SAY "X)  EXIT TO DISK OPERATING SYSTEM PROMPT"
  73. @ 22,20 SAY "          MAKE SELECTION >>" GET CHOICE
  74. SET COLOR TO GR+/0
  75. @ 12,20 SAY "A"
  76. @ 13,20 SAY "E"
  77. @ 14,20 SAY "D"
  78. @ 15,20 SAY "P"
  79. @ 16,20 SAY "R"
  80. @ 17,20 SAY "S"
  81. @ 18,20 SAY "I"
  82. @ 19,20 SAY "C"
  83. @ 20,20 SAY "X"
  84. SET COLOR TO 7/0
  85. READ
  86. STORE UPPER(CHOICE) TO CHOICE
  87. DO CASE
  88. CASE .NOT. CHOICE $ 'AEDRCSIPX'
  89.   @ 23,20 SAY "WRONG LETTER * PRESS [RETURN] * RE-ENTER"
  90.   SET CONSOLE OFF
  91.   WAIT
  92.   SET CONSOLE ON
  93.   STORE ' ' TO CHOICE
  94.   LOOP
  95. CASE CHOICE = 'X'
  96.   CLEAR
  97.   @ 08,21 SAY "╔══════════════════════════════════════╗"
  98.   @ 09,21 SAY "║           THAT'S ALL FOLKS!          ║"
  99.   @ 10,21 SAY "║                                      ║"
  100.   @ 11,21 SAY "║      PRESS [SPACE BAR] TO FINISH     ║"
  101.   @ 12,21 SAY "╚══════════════════════════════════════╝"
  102.   @ 15,06 SAY "Should you enjoy using MAIL MONSTER and would like  to receive other,"
  103.   @ 16,06 SAY "similarly useful IBM PC PROGRAMS,  simply send a note with your name,"
  104.   @ 17,06 SAY "address, and $10.00 (to encourage good work) to the following:"
  105.   @ 19,33 SAY "Peter T. Dyer"
  106.   @ 20,33 SAY "138 Kuuhale Street"
  107.   @ 21,33 SAY "Kailua, HI  96734"
  108.   @ 23,0 SAY " "
  109.  SET CONSOLE OFF
  110.  WAIT
  111.  SET CONSOLE ON
  112.  CLEAR
  113.  STORE TIME() TO CLOCK
  114.  @ 10,25 SAY " OPERATION COMPLETE.....GOOD-BYE !"
  115.  @ 12,25 SAY "      SIGNING OFF AT "
  116.  @ 12,46 SAY CLOCK
  117.  SET COLOR TO GR+/
  118.  @ 14,25 SAY " A L O H A   F R O M   H A W A I I"
  119.  @ 23,0 SAY " "
  120.  SET COLOR TO 7/0
  121.  STORE 1 TO DELAY
  122.  DO WHILE DELAY < 300
  123.    STORE DELAY + 1 TO DELAY
  124.  ENDDO
  125.  RELEASE DELAY
  126.  CLEAR
  127.  CLOSE DATABASES
  128.  QUIT
  129. * ======= CREATE CATEGORIES FOR GROUPING MAILINGS
  130. CASE CHOICE = 'C'
  131.   CLEAR
  132.   STORE ' ' TO CATMONT
  133.   STORE ' ' TO MACHINE
  134.   STORE SPACE(30) TO CAT1
  135.   STORE SPACE(30) TO CAT2
  136.   STORE SPACE(30) TO CAT3
  137.   STORE SPACE(30) TO CAT4
  138.   STORE SPACE(30) TO CAT5
  139.   STORE SPACE(30) TO CAT6
  140.   STORE SPACE(30) TO CAT7
  141.   STORE SPACE(30) TO CAT8
  142.   STORE SPACE(30) TO CAT9
  143.   STORE SPACE(30) TO CAT10
  144.   STORE SPACE(30) TO CAT11
  145.   STORE SPACE(30) TO CAT12
  146.   STORE SPACE(30) TO CAT13
  147.   STORE SPACE(30) TO CAT14
  148.   STORE SPACE(30) TO CAT15
  149.   STORE SPACE(30) TO CAT16
  150.   RESTORE FROM CATLIST ADDITIVE
  151.   RESTORE FROM MACHINE ADDITIVE
  152.   @ 03,05 SAY "Enter (or edit) the categories you wish to use to indicate"
  153.   @ 04,05 SAY "a special designation or group  to which a  person,  or an"
  154.   @ 05,05 SAY "organization, or a company belongs.  Once you have defined"
  155.   @ 06,05 SAY "the groups, you must also give each one a letter code."
  156.   @ 08,05 SAY "The format is <CODE> = <DESCRIPTION OF GROUP>"
  157.   @ 10,05 SAY "You are LIMITED to 30 CHARACTERS per category."
  158.   @ 12,05 SAY "ENTER (or EDIT) CATEGORIES IN BOXES BELOW:"
  159.   @ 14,05 GET CAT1
  160.   @ 14,42 GET CAT2
  161.   @ 15,05 GET CAT3
  162.   @ 15,42 GET CAT4
  163.   @ 16,05 GET CAT5
  164.   @ 16,42 GET CAT6
  165.   @ 17,05 GET CAT7
  166.   @ 17,42 GET CAT8
  167.   @ 18,05 GET CAT9
  168.   @ 18,42 GET CAT10
  169.   @ 19,05 GET CAT11
  170.   @ 19,42 GET CAT12
  171.   @ 20,05 GET CAT13
  172.   @ 20,42 GET CAT14
  173.   @ 21,05 GET CAT15
  174.   @ 21,42 GET CAT16
  175.   @ 23,25 SAY "PRESS [PgDN] KEY TO CONTINUE."
  176.   READ
  177.   CLEAR
  178.   @ 09,12 SAY "╔══════════════════════════════════════════════════════╗"
  179.   @ 10,12 SAY "║ Type of Monitor (Monochrome or Color) You Are Using. ║"
  180.   @ 11,12 SAY "║                                                      ║"
  181.   @ 12,12 SAY "║                 Enter M or C ==>                     ║"
  182.   @ 13,12 SAY "╚══════════════════════════════════════════════════════╝"
  183.   @ 12,47 GET CATMONT
  184.   READ
  185.   STORE UPPER(CATMONT) TO CATMONT
  186.   CLEAR
  187.   IF CATMONT = 'C'
  188.     SET COLOR TO GR+/
  189.   ENDIF
  190.   IF CATMONT = 'M'
  191.     SET COLOR TO 7/0
  192.   ENDIF
  193.   CLEAR
  194.   @ 09,14 SAY "╔═══════════════════════════════════════════════════╗"
  195.   @ 10,14 SAY "║  Are You Using a Floppy Disk or Hard Disk System. ║"
  196.   @ 11,14 SAY "║                                                   ║"
  197.   @ 12,14 SAY "║                 Enter F or H ==>                  ║"
  198.   @ 13,14 SAY "╚═══════════════════════════════════════════════════╝"
  199.   @ 12,49 GET MACHINE
  200.   READ
  201.   CLEAR
  202.   @ 09,24 SAY "╔═══════════════════════════════╗"
  203.   @ 10,24 SAY "║  UPDATING CONFIGURATION FILE. ║"
  204.   @ 11,24 SAY "╚═══════════════════════════════╝"
  205.   STORE UPPER(MACHINE) TO MACHINE
  206.   SAVE ALL LIKE MACHINE TO MACHINE
  207.   SAVE ALL LIKE CAT????? TO CATLIST
  208.   CLEAR
  209. * ====== STARTING TO REBUILD ALL INDEXES
  210. CASE CHOICE = 'I'
  211.   CLEAR
  212.   @ 05,12 SAY "╔══════════════════════════════════════════════════╗"
  213.   @ 06,12 SAY "║  REINDEXING ALL FILES.  THIS TAKES A LONG WHILE. ║"
  214.   @ 07,12 SAY "║                                                  ║"
  215.   @ 08,12 SAY "║ BEST TO TAKE A BREAK.  HAVE A HOT CUP OF COFFEE! ║"
  216.   @ 09,12 SAY "║                                                  ║"
  217.   @ 10,12 SAY "║   I'LL BEEP AT YOU WHEN DONE WITH THIS CHORE.    ║"
  218.   @ 11,12 SAY "╚══════════════════════════════════════════════════╝"
  219.   @ 14,0 SAY "  "
  220.   CLOSE DATABASES
  221.   USE MAIL
  222.   INDEX ON LAST_NAME+FIRST_NAME TO ALPHNAME
  223.   ?' '
  224.   ?'             ....THE ALPHABETICAL INDEX HAS NOW BEEN RESET....'
  225.   ?' '
  226.   INDEX ON ADDRESS1 TO DUPEADDR
  227.   ?' '
  228.   ?'         ....THE CHECK FOR DUPLICATES INDEX HAS NOW BEEN RESET....'
  229.   ?' '
  230.   INDEX ON ZIPCODE+LAST_NAME TO ZIPNAME
  231.   ?' '
  232.   ?'                ....THE ZIPCODE INDEX HAS NOW BEEN RESET....'
  233.   ?' '
  234.   CLEAR
  235.   @ 12,28 SAY "╔════════════════════════╗"
  236.   @ 13,28 SAY '║  REINDEXING COMPLETE.  ║'
  237.   @ 14,28 SAY "╚════════════════════════╝"
  238.   ? CHR(7)
  239.   ? CHR(7)
  240.   ? CHR(7)
  241.   ? CHR(7)
  242.   ? CHR(7)
  243.   STORE 1 TO DELAY
  244.   DO WHILE DELAY <100
  245.      STORE DELAY + 1 TO DELAY
  246.   ENDDO
  247.   RELEASE DELAY
  248.   STORE DATE() TO LASTSERC
  249.   SAVE ALL LIKE LASTSERC TO DUPEDATE
  250.   STORE DATE() TO LASTINDX
  251.   SAVE ALL LIKE LASTINDX TO INDXDATE
  252.   CLEAR
  253. * ====== ROUTINE TO ADD NEW RECORDS
  254. CASE CHOICE = 'A'
  255.   RESTORE FROM CATLIST ADDITIVE
  256.   CLEAR
  257.   STORE 'Y' TO RUNADD
  258.   DO WHILE RUNADD = 'Y'
  259.   USE MAIL
  260.   SET INDEX TO ALPHNAME
  261.   STORE SPACE(19) TO CHKLNAME
  262.   STORE SPACE(15) TO CHKFNAME
  263.   @ 09,18 SAY "╔═══════════════════════════════════════════════╗"
  264.   @ 10,18 SAY "║                                               ║"
  265.   @ 11,18 SAY "║                                               ║"
  266.   @ 12,18 SAY "║                                               ║"
  267.   @ 13,18 SAY "║                                               ║"
  268.   @ 14,18 SAY "║                                               ║"
  269.   @ 15,18 SAY "║                                               ║"
  270.   @ 16,18 SAY "║                                               ║"
  271.   @ 17,18 SAY "║                                               ║"
  272.   @ 18,18 SAY "║                                               ║"
  273.   @ 19,18 SAY "║                                               ║"
  274.   @ 20,18 SAY "║                                               ║"
  275.   @ 21,18 SAY "╚═══════════════════════════════════════════════╝"
  276.   @ 11,20 SAY "LAST NAME (or name of company/organization)"
  277.   @ 13,33 GET CHKLNAME
  278.   @ 15,20 SAY "FIRST NAME (or more of company/organization)"
  279.   @ 17,33 GET CHKFNAME
  280.   @ 19,20 SAY "     TO ABORT - ENTER [EX] FOR LAST NAME."
  281.   READ
  282.   STORE CHKLNAME + CHKFNAME TO CHKFULL
  283.   IF CHKLNAME = 'EX'
  284.     CLEAR
  285.     EXIT
  286.   ENDIF
  287.   IF CHKFULL = '       '
  288.     STORE "BLANK" TO CHKFULL
  289.   ENDIF
  290.   SEEK CHKFULL
  291.   IF CHKFULL = LAST_NAME+FIRST_NAME
  292.     CLEAR
  293.     @ 09,12 SAY "╔═════════════════════════════════════════════════════╗"
  294.     @ 10,12 SAY "║  PERSON OR COMPANY OR ORGANIZATION ALREADY IN FILE. ║"
  295.     @ 11,12 SAY "║            PRESS [ENTER] TO CONTINUE.               ║"
  296.     @ 12,12 SAY "╚═════════════════════════════════════════════════════╝"
  297.     SET CONSOLE OFF
  298.     WAIT
  299.     SET CONSOLE ON
  300.     CLEAR
  301.     LOOP
  302.   ENDIF
  303.   IF CHKFULL = 'BLANK'
  304.      CLEAR
  305.      @ 10,23 SAY "╔═══════════════════════════════╗"
  306.      @ 11,23 SAY "║ YOU ENTERED BLANKS FOR NAMES  ║"
  307.      @ 12,23 SAY "║ PRESS  [ENTER]  TO CONTINUE.  ║"
  308.      @ 13,23 SAY "╚═══════════════════════════════╝"
  309.      @ 23,0 SAY ' '
  310.      SET CONSOLE OFF
  311.      WAIT
  312.      SET CONSOLE ON
  313.      CLEAR
  314.      LOOP
  315.   ENDIF
  316.   CLEAR
  317.   DO WHILE .T.
  318.   STORE ' ' TO ML1
  319.   STORE ' ' TO ML2
  320.   STORE ' ' TO ML3
  321.   STORE ' ' TO ML4
  322.   STORE ' ' TO ML5
  323.   STORE ' ' TO ML6
  324.   STORE ' ' TO ML7
  325.   STORE ' ' TO ML8
  326.   STORE ' ' TO ML9
  327.   STORE ' ' TO ML10
  328.   @ 02,21 SAY "      ENTER CATEGORY OF LISTING "
  329.   @ 04,21 SAY "CHOOSE FROM AMONG THE FOLLOWING SEVERAL "
  330.   @ 05,21 SAY "COMBINATIONS.  YOU MAY SPECIFY UP TO 10."
  331.   @ 07,21 SAY "CATEGORY 1" GET ML1
  332.   @ 07,47 SAY "CATEGORY 2" GET ML2
  333.   @ 08,21 SAY "CATEGORY 3" GET ML3
  334.   @ 08,47 SAY "CATEGORY 4" GET ML4
  335.   @ 09,21 SAY "CATEGORY 5" GET ML5
  336.   @ 09,47 SAY "CATEGORY 6" GET ML6
  337.   @ 10,21 SAY "CATEGORY 7" GET ML7
  338.   @ 10,47 SAY "CATEGORY 8" GET ML8
  339.   @ 11,21 SAY "CATEGORY 9" GET ML9
  340.   @ 11,46 SAY "CATEGORY 10" GET ML10
  341.   @ 13,21 SAY " WHEN DONE PRESS [PgDn] KEY TO CONTINUE."
  342.   @ 15,16 SAY "LISTED BELOW ARE THE CURRENTLY DEFINED CATEGORIES"
  343.   @ 17,12 SAY CAT1
  344.   @ 17,45 SAY CAT2
  345.   @ 18,12 SAY CAT3
  346.   @ 18,45 SAY CAT4
  347.   @ 19,12 SAY CAT5
  348.   @ 19,45 SAY CAT6
  349.   @ 20,12 SAY CAT7
  350.   @ 20,45 SAY CAT8
  351.   @ 21,12 SAY CAT9
  352.   @ 21,45 SAY CAT10
  353.   @ 22,12 SAY CAT11
  354.   @ 22,45 SAY CAT12
  355.   @ 23,12 SAY CAT13
  356.   @ 23,45 SAY CAT14
  357.   @ 24,12 SAY CAT15
  358.   @ 24,45 SAY CAT16
  359.   READ
  360.   CLEAR
  361.   STORE ML1 + ML2 + ML3 + ML4 + ML5 + ML6 + ML7 + ML8 + ML9 + ML10 TO MLTYPE
  362.   CLEAR
  363.   APPEND BLANK
  364.   REPLACE LAST_NAME WITH CHKLNAME
  365.   REPLACE FIRST_NAME WITH CHKFNAME
  366.   REPLACE CATEGORY WITH MLTYPE
  367.   @ 3,02 SAY "ADD NEW LISTING INFORMATION TO MAIL MONSTER"
  368.   @ 5,02 SAY "MAILING CATEGORIES ARE " GET CATEGORY
  369.   @ 7,2 SAY "LAST NAME"
  370.   @ 7,13 GET LAST_NAME
  371.   @ 9,2 SAY "FIRST NAME"
  372.   @ 9,14 GET FIRST_NAME
  373.   @ 11,2 SAY "STREET ADDRESS"
  374.   @ 11,18 GET ADDRESS1
  375.   @ 12,18 GET ADDRESS2
  376.   @ 14,2 SAY "CITY"
  377.   @ 14,8 GET CITY
  378.   @ 14,35 SAY "STATE"
  379.   @ 14,42 GET STATE
  380.   @ 14,50 SAY "ZIPCODE"
  381.   @ 14,59 GET ZIPCODE PICT '99999-9999'
  382.   @ 16,2 SAY "HOME PHONE"
  383.   @ 16,14 GET PHONE1 PICT '999-999-9999'
  384.   @ 16,35 SAY "BUSINESS PHONE"
  385.   @ 16,51 GET PHONE2 PICT '999-999-9999'
  386.   @ 20,24 SAY "PRESS [PgDn] KEY TO CONTINUE"
  387.   READ
  388.   STORE SPACE(19) TO CHKLNAME
  389.   STORE SPACE(15) TO CHKFNAME
  390.   STORE SPACE(10) TO MLTYPE
  391.   CLEAR
  392.    STORE 'Y' TO AGAIN
  393.    @ 11,18 SAY "╔══════════════════════════════════════════╗"
  394.    @ 12,18 SAY "║ DO YOU WANT TO ADD ANOTHER NAME (Y/N)?   ║"
  395.    @ 13,18 SAY "╚══════════════════════════════════════════╝"
  396.    @ 12,59 GET AGAIN
  397.    READ
  398.    IF AGAIN = 'Y'
  399.      CLEAR
  400.      EXIT
  401.    ELSE
  402.      CLEAR
  403.      STORE 'N' TO RUNADD
  404.      EXIT
  405.    ENDIF
  406.   CLEAR
  407.   ENDDO
  408. CLEAR
  409. ENDDO
  410. *  ===== START OF EDIT RECORD SEGMENT
  411. CASE CHOICE = 'E'
  412.    CLEAR
  413.    RESTORE FROM CATLIST ADDITIVE
  414.    RESTORE FROM INDXDATE ADDITIVE
  415.    STORE ' ' TO ANSWER
  416.    @ 12,23 SAY "YOU LAST INDEXED FILE ON " GET LASTINDX PICT '99/99/99'
  417.    CLEAR GETS
  418.    @ 14,23 SAY "    REINDEX DATA BASE (Y/N)? " GET ANSWER
  419.    READ
  420.    CLEAR
  421.    IF ANSWER = 'Y'
  422.      @ 09,13 SAY "╔══════════════════════════════════════════════════╗"
  423.      @ 10,13 SAY "║       PATIENCE WHILE DATA BASE IS REINDEXED.     ║"
  424.      @ 11,13 SAY "║  THIS COULD TAKE A WHILE.  HAVE A CUP OF COFFEE! ║"
  425.      @ 12,13 SAY "╚══════════════════════════════════════════════════╝"
  426.      @ 23,0 SAY ' '
  427.      USE MAIL
  428.      INDEX ON LAST_NAME+FIRST_NAME TO ALPHNAME
  429.      SET INDEX TO ALPHNAME
  430.      STORE DATE() TO LASTINDX
  431.      SAVE ALL LIKE LASTINDX TO INDXDATE
  432.    ELSE
  433.      USE MAIL
  434.      SET INDEX TO ALPHNAME
  435.    ENDIF
  436.    DO WHILE .T.
  437.    CLEAR
  438.    STORE SPACE(19) TO MLAST
  439.    STORE SPACE(15) TO MFIRST
  440.    @ 09,18 SAY "╔═══════════════════════════════════════════════╗"
  441.    @ 10,18 SAY "║                                               ║"
  442.    @ 11,18 SAY "║                                               ║"
  443.    @ 12,18 SAY "║                                               ║"
  444.    @ 13,18 SAY "║                                               ║"
  445.    @ 14,18 SAY "║                                               ║"
  446.    @ 15,18 SAY "║                                               ║"
  447.    @ 16,18 SAY "║                                               ║"
  448.    @ 17,18 SAY "║                                               ║"
  449.    @ 18,18 SAY "║                                               ║"
  450.    @ 19,18 SAY "║                                               ║"
  451.    @ 20,18 SAY "║                                               ║"
  452.    @ 21,18 SAY "╚═══════════════════════════════════════════════╝"
  453.    @ 11,21 SAY "LAST NAME OF PERSON (or Company) TO EDIT "
  454.    @ 13,34 GET MLAST
  455.    @ 15,21 SAY "FIRST NAME OF PERSON (or Company) TO EDIT "
  456.    @ 17,34 GET MFIRST
  457.    @ 19,21 SAY "     TO ABORT - ENTER [EX] FOR LAST NAME."
  458.    READ
  459.    STORE MLAST + MFIRST TO FULLNAME
  460.    IF MLAST = '    '
  461.      STORE "BLANK" TO FULLNAME
  462.    ENDIF
  463.    IF MLAST = 'EX'
  464.      CLEAR
  465.      EXIT
  466.    ENDIF
  467.    SEEK FULLNAME
  468.    CLEAR
  469.    IF FULLNAME = 'BLANK'
  470.      CLEAR
  471.      @ 10,25 SAY "╔═══════════════════════════════╗"
  472.      @ 11,25 SAY "║ YOU ENTERED BLANKS FOR NAMES  ║"
  473.      @ 12,25 SAY "║ PRESS  [ENTER]  TO CONTINUE.  ║"
  474.      @ 13,25 SAY "╚═══════════════════════════════╝"
  475.      @ 23,0 SAY ' '
  476.      SET CONSOLE OFF
  477.      WAIT
  478.      SET CONSOLE ON
  479.      CLEAR
  480.      LOOP
  481.    ENDIF
  482.    IF EOF()
  483.      CLEAR
  484.      @ 10,20 SAY "╔══════════════════════════════════════════╗"
  485.      @ 11,20 SAY "║   RECORD OF NAME OR COMPANY NOT FOUND    ║"
  486.      @ 12,20 SAY "║        PRESS [ENTER] TO CONTINUE.        ║"
  487.      @ 13,20 SAY "╚══════════════════════════════════════════╝"
  488.      @ 23,0 SAY ' '
  489.      SET CONSOLE OFF
  490.      WAIT
  491.      SET CONSOLE ON
  492.      CLEAR
  493.      LOOP
  494.    ENDIF
  495.    IF FULLNAME = LAST_NAME + FIRST_NAME
  496.    * =====ENTER EDIT SCREEN
  497.      @ 1,02 SAY "EDIT OLD ENTRY YOU HAVE PLACED IN MAIL MONSTER"
  498.      @ 3,02 SAY "CATEGORY CODE(S) ARE " GET CATEGORY
  499.      @ 5,2 SAY "LAST NAME"
  500.      @ 5,13 GET LAST_NAME
  501.      @ 7,2 SAY "FIRST NAME"
  502.      @ 7,14 GET FIRST_NAME
  503.      @ 09,2 SAY "STREET ADDRESS"
  504.      @ 09,18 GET ADDRESS1
  505.      @ 10,18 GET ADDRESS2
  506.      @ 12,2 SAY "CITY"
  507.      @ 12,8 GET CITY
  508.      @ 12,35 SAY "STATE"
  509.      @ 12,42 GET STATE
  510.      @ 12,50 SAY "ZIPCODE"
  511.      @ 12,59 GET ZIPCODE PICT '99999-9999'
  512.      @ 14,2 SAY "HOME PHONE"
  513.      @ 14,14 GET PHONE1 PICT '999-999-9999'
  514.      @ 14,35 SAY "BUSINESS PHONE"
  515.      @ 14,51 GET PHONE2 PICT '999-999-9999'
  516.      @ 16,11 SAY CAT1
  517.      @ 16,43 SAY CAT2
  518.      @ 17,11 SAY CAT3
  519.      @ 17,43 SAY CAT4
  520.      @ 18,11 SAY CAT5
  521.      @ 18,43 SAY CAT6
  522.      @ 19,11 SAY CAT7
  523.      @ 19,43 SAY CAT8
  524.      @ 20,11 SAY CAT9
  525.      @ 20,43 SAY CAT10
  526.      @ 21,11 SAY CAT11
  527.      @ 21,43 SAY CAT12
  528.      @ 22,11 SAY CAT13
  529.      @ 22,43 SAY CAT14
  530.      @ 23,11 SAY CAT15
  531.      @ 23,43 SAY CAT16
  532.      @ 24,24 SAY "PRESS [PgDn] KEY TO CONTINUE"
  533.      READ
  534.      CLEAR
  535.      STORE 'N' TO AGAIN
  536.      @ 11,18 SAY "╔═══════════════════════════════════════════╗"
  537.      @ 12,18 SAY "║ DO YOU WANT TO EDIT ANOTHER NAME (Y/N)?   ║"
  538.      @ 13,18 SAY "╚═══════════════════════════════════════════╝"
  539.      @ 12,60 GET AGAIN
  540.      READ
  541.      IF AGAIN = 'Y'
  542.        CLEAR
  543.        LOOP
  544.      ELSE
  545.        CLEAR
  546.        EXIT
  547.      ENDIF
  548.    ENDIF
  549.    ENDDO
  550.    CLEAR
  551. CASE CHOICE = 'S'
  552.   CLEAR
  553.   RESTORE FROM CATLIST ADDITIVE
  554.   RESTORE FROM INDXDATE ADDITIVE
  555.   STORE ' ' TO ANSWER
  556.    @ 12,23 SAY "YOU LAST INDEXED FILE ON " GET LASTINDX PICT '99/99/99'
  557.    CLEAR GETS
  558.    @ 14,23 SAY "    REINDEX DATA BASE (Y/N)? " GET ANSWER
  559.   READ
  560.   CLEAR
  561.   IF ANSWER = 'Y'
  562.      @ 10,12 SAY "╔══════════════════════════════════════════════════╗"
  563.      @ 11,12 SAY "║       PATIENCE WHILE DATA BASE IS REINDEXED.     ║"
  564.      @ 12,12 SAY "║  THIS COULD TAKE A WHILE.  HAVE A CUP OF COFFEE! ║"
  565.      @ 13,12 SAY "╚══════════════════════════════════════════════════╝"
  566.      @ 23,0 SAY ' '
  567.     USE MAIL
  568.     INDEX ON LAST_NAME + FIRST_NAME TO ALPHNAME
  569.     SET INDEX TO ALPHNAME
  570.     STORE DATE() TO LASTINDX
  571.     SAVE ALL LIKE LASTINDX TO INDXDATE
  572.   ELSE
  573.     USE MAIL
  574.     SET INDEX TO ALPHNAME
  575.   ENDIF
  576.   DO WHILE .T.
  577.   CLEAR
  578.   STORE SPACE(19) TO MLAST
  579.   STORE SPACE(15) TO MFIRST
  580.   @ 09,18 SAY "╔═══════════════════════════════════════════════╗"
  581.   @ 10,18 SAY "║                                               ║"
  582.   @ 11,18 SAY "║                                               ║"
  583.   @ 12,18 SAY "║                                               ║"
  584.   @ 13,18 SAY "║                                               ║"
  585.   @ 14,18 SAY "║                                               ║"
  586.   @ 15,18 SAY "║                                               ║"
  587.   @ 16,18 SAY "║                                               ║"
  588.   @ 17,18 SAY "║                                               ║"
  589.   @ 18,18 SAY "║                                               ║"
  590.   @ 19,18 SAY "║                                               ║"
  591.   @ 20,18 SAY "║                                               ║"
  592.   @ 21,18 SAY "╚═══════════════════════════════════════════════╝"
  593.   @ 11,20 SAY "LAST NAME OF PERSON (or Company) TO DELETE"
  594.   @ 13,33 GET MLAST
  595.   @ 15,20 SAY "FIRST NAME OF PERSON (or Company) TO DELETE"
  596.   @ 17,33 GET MFIRST
  597.   @ 19,20 SAY "   TO ABORT - ENTER [EX] FOR LAST NAME."
  598.   READ
  599.   STORE MLAST+MFIRST TO FULLNAME
  600.   IF MLAST = '    '
  601.     STORE "BLANK" TO FULLNAME
  602.   ENDIF
  603.   IF MLAST = 'EX'
  604.     CLEAR
  605.     EXIT
  606.   ENDIF
  607.   SEEK FULLNAME
  608.   CLEAR
  609.   IF FULLNAME = 'BLANK'
  610.     CLEAR
  611.      @ 10,25 SAY "╔═══════════════════════════════╗"
  612.      @ 11,25 SAY "║ YOU ENTERED BLANKS FOR NAMES  ║"
  613.      @ 12,25 SAY "║ PRESS  [ENTER]  TO CONTINUE.  ║"
  614.      @ 13,25 SAY "╚═══════════════════════════════╝"
  615.      @ 23,0 SAY ' '
  616.     SET CONSOLE OFF
  617.     WAIT
  618.     SET CONSOLE ON
  619.     CLEAR
  620.     LOOP
  621.   ENDIF
  622.   IF EOF()
  623.     CLEAR
  624.      @ 10,20 SAY "╔══════════════════════════════════════════╗"
  625.      @ 11,20 SAY "║   RECORD OF NAME OR COMPANY NOT FOUND    ║"
  626.      @ 12,20 SAY "║        PRESS [ENTER] TO CONTINUE.        ║"
  627.      @ 13,20 SAY "╚══════════════════════════════════════════╝"
  628.      @ 23,0 SAY ' '
  629.     SET CONSOLE OFF
  630.     WAIT
  631.     SET CONSOLE ON
  632.     CLEAR
  633.     LOOP
  634.   ENDIF
  635.   IF FULLNAME = LAST_NAME + FIRST_NAME
  636.   * =====ENTER EDIT SCREEN
  637.     @ 1,02 SAY "CHECK TO SEE IF THIS IS THE RECORD TO DELETE."
  638.     @ 3,02 SAY "CATEGORY CODE(S) ARE " GET CATEGORY
  639.     @ 5,2 SAY "LAST NAME"
  640.     @ 5,13 GET LAST_NAME
  641.     @ 7,2 SAY "FIRST NAME"
  642.     @ 7,14 GET FIRST_NAME
  643.     @ 09,2 SAY "STREET ADDRESS"
  644.     @ 09,18 GET ADDRESS1
  645.     @ 10,18 GET ADDRESS2
  646.     @ 12,2 SAY "CITY"
  647.     @ 12,8 GET CITY
  648.     @ 12,35 SAY "STATE"
  649.     @ 12,42 GET STATE
  650.     @ 12,50 SAY "ZIPCODE"
  651.     @ 12,59 GET ZIPCODE PICT '99999-9999'
  652.     @ 14,2 SAY "HOME PHONE"
  653.     @ 14,14 GET PHONE1 PICT '999-999-9999'
  654.     @ 14,35 SAY "BUSINESS PHONE"
  655.     @ 14,51 GET PHONE2 PICT '999-999-9999'
  656.     @ 16,11 SAY CAT1
  657.     @ 16,43 SAY CAT2
  658.     @ 17,11 SAY CAT3
  659.     @ 17,43 SAY CAT4
  660.     @ 18,11 SAY CAT5
  661.     @ 18,43 SAY CAT6
  662.     @ 19,11 SAY CAT7
  663.     @ 19,43 SAY CAT8
  664.     @ 20,11 SAY CAT9
  665.     @ 20,43 SAY CAT10
  666.     @ 21,11 SAY CAT11
  667.     @ 21,43 SAY CAT12
  668.     @ 22,11 SAY CAT13
  669.     @ 22,43 SAY CAT14
  670.     @ 23,11 SAY CAT15
  671.     @ 23,43 SAY CAT16
  672.     @ 24,26 SAY "PRESS [PgDn] KEY TO CONTINUE"
  673.     READ
  674.     CLEAR
  675.     STORE 'N' TO REMOVE
  676.     @ 11,18 SAY "╔════════════════════════════════════════════╗"
  677.     @ 12,18 SAY "║ DO YOU WANT TO DELETE THIS RECORD (Y/N)?   ║"
  678.     @ 13,18 SAY "╚════════════════════════════════════════════╝"
  679.     @ 12,61 GET REMOVE
  680.     READ
  681.     IF REMOVE = 'Y'
  682.       CLEAR
  683.       DELETE
  684.     ELSE
  685.       CLEAR
  686.       EXIT
  687.     ENDIF
  688.   ENDIF
  689.   ENDDO
  690. CLEAR
  691. *  ===== BEGIN DUPLICATE RECORD CHECK SEGMENT
  692. CASE CHOICE = 'D'
  693.  CLOSE DATABASES
  694.  CLEAR
  695.  SET CONFIRM ON
  696.  SET HEADING OFF
  697.  SET SAFETY OFF
  698.  RESTORE FROM DUPEDATE ADDITIVE
  699.  STORE ' ' TO ANSWER
  700.  @ 12,23 SAY "YOU LAST INDEXED FILE ON " GET LASTSERC PICT '99/99/99'
  701.  CLEAR GETS
  702.  @ 14,23 SAY "    REINDEX DATA BASE (Y/N)? " GET ANSWER
  703.  READ
  704.  CLEAR
  705.  IF ANSWER = 'Y'
  706.    @ 10,13 SAY "╔══════════════════════════════════════════════════╗"
  707.    @ 11,13 SAY "║       PATIENCE WHILE DATA BASE IS REINDEXED.     ║"
  708.    @ 12,13 SAY "║  THIS COULD TAKE A WHILE.  HAVE A CUP OF COFFEE! ║"
  709.    @ 13,13 SAY "╚══════════════════════════════════════════════════╝"
  710.    @ 23,0 SAY ' '
  711.    USE MAIL
  712.    INDEX ON ADDRESS1 TO DUPEADDR
  713.    SET INDEX TO DUPEADDR
  714.    STORE DATE() TO LASTSERC
  715.    SAVE ALL LIKE LASTSERC TO DUPEDATE
  716.  ELSE
  717.    USE MAIL
  718.    SET INDEX TO DUPEADDR
  719.  ENDIF
  720.  CLEAR
  721.  STORE SPACE(20) TO NAME1
  722.  STORE 0 TO CTR
  723.  STORE 0 TO DUPECTR
  724.  DO WHILE .NOT. EOF()
  725.    STORE ADDRESS1 TO NAME1
  726.    SKIP
  727.    STORE CTR + 1 TO CTR
  728.    STORE ADDRESS1 TO NAME2
  729.    IF NAME1 <> NAME2
  730.      @ 10,25 SAY "CHECKING FOR DUPLICATE RECORDS."
  731.      @ 12,25 SAY "       CHECKED SO FAR"
  732.      @ 14,33 SAY CTR
  733.      @ 16,25 SAY "       DELETED SO FAR"
  734.      @ 18,33 SAY DUPECTR
  735.    ENDIF
  736.    IF NAME1 = NAME2
  737.      CLEAR
  738.      ? CHR(7)
  739.      @ 1,21 SAY "***  DUPLICATE RECORD FOUND  ***"
  740.      @ 3,10 SAY "FIRST RECORD"
  741.      @ 4,13 GET FIRST_NAME
  742.      @ 5,13 GET LAST_NAME
  743.      @ 6,13 GET ADDRESS1
  744.      @ 7,13 GET ADDRESS2
  745.      @ 8,13 GET CITY
  746.      @ 9,13 GET PHONE1
  747.      @ 9,28 GET CATEGORY
  748.      @ 10,10 SAY "                                               "
  749.      CLEAR GETS
  750.      SKIP -1
  751.      @ 11,10 SAY "SECOND RECORD"
  752.      @ 12,13 GET FIRST_NAME
  753.      @ 13,13 GET LAST_NAME
  754.      @ 14,13 GET ADDRESS1
  755.      @ 15,13 GET ADDRESS2
  756.      @ 16,13 GET CITY
  757.      @ 17,13 GET PHONE1
  758.      @ 17,28 GET CATEGORY
  759.      @ 19,10 SAY "                                                   "
  760.      CLEAR GETS
  761.      STORE ' ' TO NAME1
  762.      STORE 'N' TO DUPGO
  763.      @ 19,13 SAY "DO YOU WANT TO DELETE SECOND RECORD (Y/N)? " GET DUPGO
  764.      @ 21,14 SAY "     PRESS [PgDn] IN ORDER TO CONTINUE"
  765.      @ 22,14 SAY '          DUPLICATE RECORD SEARCH.                 '
  766.      READ
  767.      IF DUPGO = 'Y'
  768.        STORE DUPECTR + 1 TO DUPECTR
  769.        SKIP
  770.        DELE
  771.        CLEAR
  772.      ELSE
  773.        @ 23,0 SAY ' '
  774.        SKIP
  775.        CLEAR
  776.      ENDIF
  777.    ENDIF
  778.    IF EOF()
  779.      CLEAR
  780.      ? CHR(7)
  781.      ? CHR(7)
  782.      @ 10,21 SAY "╔═══════════════════════════════════════╗"
  783.      @ 11,21 SAY "║  LAST OF THE DUPLICATE RECORDS FOUND. ║"
  784.      @ 12,21 SAY "║           SEARCH IS ENDING.           ║"
  785.      @ 13,21 SAY "╚═══════════════════════════════════════╝"
  786.      @ 22,0 SAY " "
  787.      STORE 0 TO DELAY
  788.      DO WHILE DELAY < 45
  789.         STORE DELAY + 1 TO DELAY
  790.      ENDDO
  791.      STORE 0 TO DELAY
  792.      @ 23,0 SAY CHR(7)
  793.      @ 24,0 SAY CHR(7)
  794.      CLEAR
  795.    ENDIF
  796.  ENDDO
  797. * ===== END DUPLICATE RECORD CHECK RECORD SEGMENT
  798. * ===== BEGIN REMOVING RECORDS MARKED AS DUPLICATE SEGMENT
  799. CASE CHOICE = 'R'
  800.  CLEAR
  801.  CLOSE DATA
  802.  STORE ' ' TO DONE
  803.  @ 10,10 SAY "╔═══════════════════════════════════════════════════════════╗"
  804.  @ 11,10 SAY "║ YOU MUST HAVE FIRST RUN THE CHECK FOR DUPLICATES ROUTINE. ║"
  805.  @ 12,10 SAY "║     IF YOU HAVE RUN THE DUPLICATES CHECK PRESS ENTER.     ║"
  806.  @ 13,10 SAY "║     IF YOU HAVE NOT RUN ROUTINE ENTER [X] ==>             ║"
  807.  @ 14,10 SAY "╚═══════════════════════════════════════════════════════════╝"
  808.  @ 13,59 GET DONE
  809.  READ
  810.  STORE UPPER(DONE) TO DONE
  811.  IF DONE = 'X'
  812.    CLEAR
  813.    LOOP
  814.  ENDIF
  815.  CLEAR
  816.  @ 11,13 SAY "╔═══════════════════════════════════════════════════╗"
  817.  @ 12,13 SAY "║ REMOVING RECORDS MARKED AS DUPLICATE....PATIENCE! ║"
  818.  @ 13,13 SAY "╚═══════════════════════════════════════════════════╝"
  819.  USE MAIL
  820.  PACK
  821.  INDEX ON LAST_NAME + FIRST_NAME TO ALPHNAME
  822.  ?' '
  823.  ?'             ....THE ALPHABETICAL INDEX HAS NOW BEEN RESET....'
  824.  ?' '
  825.  INDEX ON ADDRESS1 TO DUPEADDR
  826.  ?' '
  827.  ?'         ....THE CHECK FOR DUPLICATES INDEX HAS NOW BEEN RESET....'
  828.  ?' '
  829.  INDEX ON ZIPCODE+LAST_NAME TO ZIPNAME
  830.  ?' '
  831.  ?'                ....THE ZIPCODE INDEX HAS NOW BEEN RESET....'
  832.  ?' '
  833.  CLEAR
  834.  @ 10,13 SAY "╔═══════════════════════════════════════════════════╗"
  835.  @ 11,13 SAY "║               REINDEXING COMPLETE.                ║"
  836.  @ 12,13 SAY "║ ALL RECORDS MARKED AS DUPLICATE HAVE BEEN REMOVED.║"
  837.  @ 13,13 SAY "║         PRESS [ENTER] TO RETURN TO MENU.          ║"
  838.  @ 14,13 SAY "╚═══════════════════════════════════════════════════╝"
  839.  ? CHR(7)
  840.  ? CHR(7)
  841.  ? CHR(7)
  842.  ? CHR(7)
  843.  ? CHR(7)
  844.  SET CONSOLE OFF
  845.  WAIT
  846.  SET CONSOLE ON
  847.  CLEAR
  848.  LOOP
  849. CASE CHOICE = 'P'
  850.  CLEAR
  851.  SET DELETED ON
  852.  CLEAR
  853.  STORE ' ' TO MAKE
  854.  STORE '     ' TO MZIP
  855.  STORE ' ' TO CAT
  856.  STORE ' ' TO ORDER
  857.  @ 07,22 SAY "╔═════════════════════════════════════╗"
  858.  @ 08,22 SAY "║                                     ║"
  859.  @ 09,22 SAY "║  ENTER CHOICE OF SORT AND CATEGORY  ║"
  860.  @ 10,22 SAY "║                                     ║"
  861.  @ 11,22 SAY "║        T)  SET-UP LABELS TEST       ║"
  862.  @ 12,22 SAY "║                                     ║"
  863.  @ 13,22 SAY "║        A)  ALPHA LISTING            ║"
  864.  @ 14,22 SAY "║                                     ║"
  865.  @ 15,22 SAY "║        Z)  ZIP CODE LISTING         ║"
  866.  @ 16,22 SAY "║                                     ║"
  867.  @ 17,22 SAY "║        O)  OTHER LISTING            ║"
  868.  @ 18,22 SAY "║                                     ║"
  869.  @ 19,22 SAY "║            SELECT ==>               ║"
  870.  @ 20,22 SAY "║                                     ║"
  871.  @ 21,22 SAY "╚═════════════════════════════════════╝"
  872.  SET COLOR TO GR+/
  873.  @ 11,31 SAY "T"
  874.  @ 13,31 SAY "A"
  875.  @ 15,31 SAY "Z"
  876.  @ 17,31 SAY "O"
  877.  SET COLOR TO 7/0
  878.  @ 19,46 GET MAKE
  879.  READ
  880.  CLEAR
  881.  STORE UPPER(MAKE) TO MAKE
  882.  IF MAKE = 'T'
  883.     CLOSE DATABASES
  884.     USE MAIL
  885.     @ 10,22 SAY "╔═════════════════════════════════╗"
  886.     @ 11,22 SAY "║  BE SURE PRINTER IS TURNED ON.  ║"
  887.     @ 12,22 SAY "║  PRESS [ENTER] KEY WHEN READY.  ║"
  888.     @ 13,22 SAY "╚═════════════════════════════════╝"
  889.     SET CONSOLE OFF
  890.     WAIT
  891.     DO WHILE .T.
  892.     SET PRINT ON
  893.     ?"XX TOP XXXXXXXXXXXXXXXXXX TOP XX"
  894.     ?"XXXXXXXX ALIGN PRINTER XXXXXXXXX"
  895.     ?"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
  896.     ?"XXXXXXXXXX THAT'S IT XXXXXXXXXXX"
  897.     ?"XX BOTTOM XXXXXXXXXXXX BOTTOM XX"
  898.     ? CHR(13)
  899.     SET PRINT OFF
  900.     SET CONSOLE ON
  901.     CLEAR
  902.     STORE 'N' TO ALIGN
  903.     @ 11,13 SAY "╔═════════════════════════════════════════════════════╗"
  904.     @ 12,13 SAY "║ DO YOU WANT TO CHECK LABEL ALIGNMENT AGAIN (Y/N)?   ║"
  905.     @ 13,13 SAY "╚═════════════════════════════════════════════════════╝"
  906.     @ 12,65 GET ALIGN
  907.     READ
  908.     IF ALIGN = 'Y'
  909.       CLEAR
  910.       LOOP
  911.     ELSE
  912.       CLEAR
  913.       EXIT
  914.     ENDIF
  915.     ENDDO
  916.  ENDIF
  917.  IF MAKE = "A"
  918.     CLOSE DATA
  919.     USE MAIL
  920.     CLEAR
  921.     @ 11,14 SAY "╔══════════════════════════════════════════════════╗"
  922.     @ 12,14 SAY "║ INDEXING THE FILES...PATIENCE WITH THIS MACHINE! ║"
  923.     @ 13,14 SAY "╚══════════════════════════════════════════════════╝"
  924.     @ 23,0 SAY " "
  925.     INDEX ON LAST_NAME+FIRST_NAME TO ALPHNAME
  926.     SET INDEX TO ALPHNAME
  927.     CLEAR
  928.     STORE 1 TO UP
  929.     STORE 'N' TO OPTION
  930.     @ 09,18 SAY "╔═══════════════════════════════════════════════╗"
  931.     @ 10,18 SAY "║                                               ║"
  932.     @ 11,18 SAY "║                                               ║"
  933.     @ 12,18 SAY "║                                               ║"
  934.     @ 13,18 SAY "║                                               ║"
  935.     @ 14,18 SAY "║                                               ║"
  936.     @ 15,18 SAY "║                                               ║"
  937.     @ 16,18 SAY "║                                               ║"
  938.     @ 17,18 SAY "║                                               ║"
  939.     @ 18,18 SAY "║                                               ║"
  940.     @ 19,18 SAY "║                                               ║"
  941.     @ 20,18 SAY "║                                               ║"
  942.     @ 21,18 SAY "╚═══════════════════════════════════════════════╝"
  943.     SET COLOR TO GR+/
  944.     @ 11,20 SAY "         BE SURE PRINTER IS TURNED ON!"
  945.     SET COLOR TO 7/0
  946.     @ 13,20 SAY '      USE "OR CURRENT RESIDENT" OPTION? ' GET OPTION PICT 'A'
  947.     @ 15,20 SAY " DO YOU WANT ONE, TWO OR THREE-UP LABELS? " GET UP PICT '#' RANGE 1, 3
  948.     @ 17,20 SAY "              (Enter 1, 2, or 3)"
  949.     @ 19,20 SAY "         PRESS [ENTER] WHEN ALL READY."
  950.     READ
  951.     CLEAR
  952.     IF UP = 1 .AND. OPTION <> 'Y'
  953.        LABEL FORM MAIL_UP1 TO PRINT
  954.        SET PRINT ON
  955.        ? CHR(13)
  956.        SET PRINT OFF
  957.     ENDIF
  958.     IF UP = 2 .AND. OPTION <> 'Y'
  959.        LABEL FORM MAIL_UP2 TO PRINT
  960.        SET PRINT ON
  961.        ? CHR(13)
  962.        SET PRINT OFF
  963.     ENDIF
  964.     IF UP = 3 .AND. OPTION <> 'Y'
  965.        LABEL FORM MAIL_UP3 TO PRINT
  966.        SET PRINT ON
  967.        ? CHR(13)
  968.        SET PRINT OFF
  969.     ENDIF
  970.     IF UP = 1 .AND. OPTION = 'Y'
  971.        LABEL FORM MAILUP1A TO PRINT
  972.        SET PRINT ON
  973.        ? CHR(13)
  974.        SET PRINT OFF
  975.     ENDIF
  976.     IF UP = 2 .AND. OPTION = 'Y'
  977.        LABEL FORM MAILUP2A TO PRINT
  978.        SET PRINT ON
  979.        ? CHR(13)
  980.        SET PRINT OFF
  981.     ENDIF
  982.     IF UP = 3 .AND. OPTION = 'Y'
  983.        LABEL FORM MAILUP3A TO PRINT
  984.        SET PRINT ON
  985.        ? CHR(13)
  986.        SET PRINT OFF
  987.     ENDIF
  988.     CLOSE DATA
  989.  ENDIF
  990.  IF MAKE = "Z"
  991.     CLOSE DATA
  992.     USE MAIL
  993.     CLEAR
  994.     @ 11,14 SAY "╔══════════════════════════════════════════════════╗"
  995.     @ 12,14 SAY "║ INDEXING THE FILES...PATIENCE WITH THIS MACHINE! ║"
  996.     @ 13,14 SAY "╚══════════════════════════════════════════════════╝"
  997.     @ 23,0 SAY " "
  998.     INDEX ON ZIPCODE + FIRST_NAME TO ZIPNAME
  999.     SET INDEX TO ZIPNAME
  1000.     CLEAR
  1001.     STORE 1 TO UP
  1002.     STORE 'N' TO OPTION
  1003.     @ 09,18 SAY "╔═══════════════════════════════════════════════╗"
  1004.     @ 10,18 SAY "║                                               ║"
  1005.     @ 11,18 SAY "║                                               ║"
  1006.     @ 12,18 SAY "║                                               ║"
  1007.     @ 13,18 SAY "║                                               ║"
  1008.     @ 14,18 SAY "║                                               ║"
  1009.     @ 15,18 SAY "║                                               ║"
  1010.     @ 16,18 SAY "║                                               ║"
  1011.     @ 17,18 SAY "║                                               ║"
  1012.     @ 18,18 SAY "║                                               ║"
  1013.     @ 19,18 SAY "║                                               ║"
  1014.     @ 20,18 SAY "║                                               ║"
  1015.     @ 21,18 SAY "╚═══════════════════════════════════════════════╝"
  1016.     SET COLOR TO GR+/
  1017.     @ 11,20 SAY "         BE SURE PRINTER IS TURNED ON!"
  1018.     SET COLOR TO 7/0
  1019.     @ 13,20 SAY '      USE "OR CURRENT RESIDENT" OPTION? ' GET OPTION PICT 'A'
  1020.     @ 15,20 SAY " DO YOU WANT ONE, TWO OR THREE-UP LABELS? " GET UP PICT '#' RANGE 1, 3
  1021.     @ 17,20 SAY "              (Enter 1, 2, or 3)"
  1022.     @ 19,20 SAY "         PRESS [ENTER] WHEN ALL READY."
  1023.     READ
  1024.     CLEAR
  1025.     IF UP = 1 .AND. OPTION <> 'Y'
  1026.        LABEL FORM MAIL_UP1 TO PRINT
  1027.        SET PRINT ON
  1028.        ? CHR(13)
  1029.        SET PRINT OFF
  1030.     ENDIF
  1031.     IF UP = 2 .AND. OPTION <> 'Y'
  1032.        LABEL FORM MAIL_UP2 TO PRINT
  1033.        SET PRINT ON
  1034.        ? CHR(13)
  1035.        SET PRINT OFF
  1036.     ENDIF
  1037.     IF UP = 3 .AND. OPTION <> 'Y'
  1038.        LABEL FORM MAIL_UP3 TO PRINT
  1039.        SET PRINT ON
  1040.        ? CHR(13)
  1041.        SET PRINT OFF
  1042.     ENDIF
  1043.     IF UP = 1 .AND. OPTION = 'Y'
  1044.        LABEL FORM MAILUP1A TO PRINT
  1045.        SET PRINT ON
  1046.        ? CHR(13)
  1047.        SET PRINT OFF
  1048.     ENDIF
  1049.     IF UP = 2 .AND. OPTION = 'Y'
  1050.        LABEL FORM MAILUP2A TO PRINT
  1051.        SET PRINT ON
  1052.        ? CHR(13)
  1053.        SET PRINT OFF
  1054.     ENDIF
  1055.     IF UP = 3 .AND. OPTION = 'Y'
  1056.        LABEL FORM MAILUP3A TO PRINT
  1057.        SET PRINT ON
  1058.        ? CHR(13)
  1059.        SET PRINT OFF
  1060.     ENDIF
  1061.     CLOSE DATA
  1062.  ENDIF
  1063.  IF MAKE = 'O'
  1064.     STORE ' ' TO T1
  1065.     STORE ' ' TO T2
  1066.     STORE ' ' TO T3
  1067.     DO WHILE .T.
  1068.     USE MAIL
  1069.     GO TOP
  1070.     RESTORE FROM CATLIST ADDITIVE
  1071.     STORE ' ' TO ORDER
  1072.     @ 05,15 SAY "ENTER ZIPCODE IF DESIRED " GET MZIP PICT '99999'
  1073.     @ 06,15 SAY "(Leave Blank if not used)"
  1074.     @ 08,15 SAY "ENTER CATEGORIES OF LABELS DESIRED"
  1075.     @ 08,51 GET T1
  1076.     @ 08,54 GET T2
  1077.     @ 08,57 GET T3
  1078.     @ 09,15 SAY "(Choose UP TO THREE from list below)"
  1079.     @ 11,15 SAY "ENTER ORDER OF LABELS (ALPHA OR ZIPCODE) " GET ORDER PICT 'A'
  1080.     @ 12,15 SAY "    (A) for alpha      (Z) for zipcode"
  1081.     @ 14,15 SAY "LISTED BELOW ARE THE CURRENTLY DEFINED CATEGORIES"
  1082.     @ 16,11 SAY CAT1
  1083.     @ 16,43 SAY CAT2
  1084.     @ 17,11 SAY CAT3
  1085.     @ 17,43 SAY CAT4
  1086.     @ 18,11 SAY CAT5
  1087.     @ 18,43 SAY CAT6
  1088.     @ 19,11 SAY CAT7
  1089.     @ 19,43 SAY CAT8
  1090.     @ 20,11 SAY CAT9
  1091.     @ 20,43 SAY CAT10
  1092.     @ 21,11 SAY CAT11
  1093.     @ 21,43 SAY CAT12
  1094.     @ 22,11 SAY CAT13
  1095.     @ 22,43 SAY CAT14
  1096.     @ 23,11 SAY CAT15
  1097.     @ 23,43 SAY CAT16
  1098.     READ
  1099.     CLEAR
  1100.     STORE T1+T2+T3 TO CAT
  1101.     IF T1 = ' '
  1102.       STORE "#" TO T1
  1103.     ENDIF
  1104.     IF T2 = ' '
  1105.       STORE "#" TO T2
  1106.     ENDIF
  1107.     IF T3 = ' '
  1108.       STORE "#" TO T3
  1109.     ENDIF
  1110.     DO CASE
  1111.     CASE CAT <> ' ' .AND. MZIP <> '     '
  1112.       COPY TO TFILE FOR '&T1' $ CATEGORY .OR. '&T2' $ CATEGORY ;
  1113.       .OR. '&T3' $ CATEGORY .AND. ZIPCODE = MZIP
  1114.     CASE MZIP <> '    ' .AND. CAT = ' '
  1115.       COPY TO TFILE FOR ZIPCODE = MZIP
  1116.     CASE MZIP = '    ' .AND. CAT <> ' '
  1117.       COPY TO TFILE FOR '&T1' $ CATEGORY .OR. '&T2' $ CATEGORY ;
  1118.       .OR. '&T3' $ CATEGORY
  1119.     CASE MZIP = '     ' .AND. CAT = ' ' .AND. ORDER <> ' '
  1120.       COPY TO TFILE
  1121.     CASE MZIP = '     ' .AND. CAT = ' ' .AND. ORDER = ' '
  1122.       CLEA
  1123.       @ 10,21 SAY "╔══════════════════════════════════════════╗"
  1124.       @ 11,21 SAY "║  YOU MUST ENTER AT LEAST ONE SORT FIELD. ║"
  1125.       @ 12,21 SAY "║    PRESS [ENTER] AND PROVIDE ONE FIELD.  ║"
  1126.       @ 13,21 SAY "╚══════════════════════════════════════════╝"
  1127.       @ 23,0 SAY " "
  1128.       SET CONSOLE OFF
  1129.       WAIT
  1130.       SET CONSOLE ON
  1131.       STORE ' ' TO T1
  1132.       STORE ' ' TO T2
  1133.       STORE ' ' TO T3
  1134.       CLEA
  1135.       LOOP
  1136.     ENDCASE
  1137.     IF ORDER = 'Z'
  1138.       CLOSE DATABASES
  1139.       USE TFILE
  1140.       CLEAR
  1141.       @ 11,14 SAY "╔══════════════════════════════════════════════════╗"
  1142.       @ 12,14 SAY "║ INDEXING THE FILES...PATIENCE WITH THIS MACHINE! ║"
  1143.       @ 13,14 SAY "╚══════════════════════════════════════════════════╝"
  1144.       INDEX ON ZIPCODE+LAST_NAME TO TEMPINDX
  1145.       SET INDEX TO TEMPINDX
  1146.       CLEAR
  1147.       STORE 1 TO UP
  1148.       STORE 'N' TO OPTION
  1149.       @ 09,18 SAY "╔═══════════════════════════════════════════════╗"
  1150.       @ 10,18 SAY "║                                               ║"
  1151.       @ 11,18 SAY "║                                               ║"
  1152.       @ 12,18 SAY "║                                               ║"
  1153.       @ 13,18 SAY "║                                               ║"
  1154.       @ 14,18 SAY "║                                               ║"
  1155.       @ 15,18 SAY "║                                               ║"
  1156.       @ 16,18 SAY "║                                               ║"
  1157.       @ 17,18 SAY "║                                               ║"
  1158.       @ 18,18 SAY "║                                               ║"
  1159.       @ 19,18 SAY "║                                               ║"
  1160.       @ 20,18 SAY "║                                               ║"
  1161.       @ 21,18 SAY "╚═══════════════════════════════════════════════╝"
  1162.       SET COLOR TO GR+/
  1163.       @ 11,20 SAY "         BE SURE PRINTER IS TURNED ON!"
  1164.       SET COLOR TO 7/0
  1165.       @ 13,20 SAY '      USE "OR CURRENT RESIDENT" OPTION? ' GET OPTION PICT 'A'
  1166.       @ 15,20 SAY " DO YOU WANT ONE, TWO OR THREE-UP LABELS? " GET UP PICT '#' RANGE 1, 3
  1167.       @ 17,20 SAY "              (Enter 1, 2, or 3)"
  1168.       @ 19,20 SAY "         PRESS [ENTER] WHEN ALL READY."
  1169.       READ
  1170.       CLEAR
  1171.       IF UP = 1 .AND. OPTION <> 'Y'
  1172.          LABEL FORM MAIL_UP1 TO PRINT
  1173.          SET PRINT ON
  1174.          ? CHR(13)
  1175.          SET PRINT OFF
  1176.       ENDIF
  1177.       IF UP = 2 .AND. OPTION <> 'Y'
  1178.          LABEL FORM MAIL_UP2 TO PRINT
  1179.          SET PRINT ON
  1180.          ? CHR(13)
  1181.          SET PRINT OFF
  1182.       ENDIF
  1183.       IF UP = 3 .AND. OPTION <> 'Y'
  1184.          LABEL FORM MAIL_UP3 TO PRINT
  1185.          SET PRINT ON
  1186.          ? CHR(13)
  1187.          SET PRINT OFF
  1188.       ENDIF
  1189.       IF UP = 1 .AND. OPTION = 'Y'
  1190.          LABEL FORM MAILUP1A TO PRINT
  1191.          SET PRINT ON
  1192.          ? CHR(13)
  1193.          SET PRINT OFF
  1194.       ENDIF
  1195.       IF UP = 2 .AND. OPTION = 'Y'
  1196.          LABEL FORM MAILUP2A TO PRINT
  1197.          SET PRINT ON
  1198.          ? CHR(13)
  1199.          SET PRINT OFF
  1200.       ENDIF
  1201.       IF UP = 3 .AND. OPTION = 'Y'
  1202.          LABEL FORM MAILUP3A TO PRINT
  1203.          SET PRINT ON
  1204.          ? CHR(13)
  1205.          SET PRINT OFF
  1206.       ENDIF
  1207.       CLOSE DATA
  1208.       DELE FILE TFILE.DBF
  1209.       DELE FILE TEMPINDX.NTX
  1210.       EXIT
  1211.     ELSE
  1212.       CLOSE DATABASES
  1213.       USE TFILE
  1214.       CLEAR
  1215.       @ 11,14 SAY "╔══════════════════════════════════════════════════╗"
  1216.       @ 12,14 SAY "║ INDEXING THE FILES...PATIENCE WITH THIS MACHINE! ║"
  1217.       @ 13,14 SAY "╚══════════════════════════════════════════════════╝"
  1218.       INDEX ON LAST_NAME + FIRST_NAME TO TEMPINDX
  1219.       SET INDEX TO TEMPINDX
  1220.       CLEAR
  1221.       STORE 1 TO UP
  1222.       STORE 'N' TO OPTION
  1223.       @ 09,18 SAY "╔═══════════════════════════════════════════════╗"
  1224.       @ 10,18 SAY "║                                               ║"
  1225.       @ 11,18 SAY "║                                               ║"
  1226.       @ 12,18 SAY "║                                               ║"
  1227.       @ 13,18 SAY "║                                               ║"
  1228.       @ 14,18 SAY "║                                               ║"
  1229.       @ 15,18 SAY "║                                               ║"
  1230.       @ 16,18 SAY "║                                               ║"
  1231.       @ 17,18 SAY "║                                               ║"
  1232.       @ 18,18 SAY "║                                               ║"
  1233.       @ 19,18 SAY "║                                               ║"
  1234.       @ 20,18 SAY "║                                               ║"
  1235.       @ 21,18 SAY "╚═══════════════════════════════════════════════╝"
  1236.       SET COLOR TO GR+/
  1237.       @ 11,20 SAY "         BE SURE PRINTER IS TURNED ON!"
  1238.       SET COLOR TO 7/0
  1239.       @ 13,20 SAY '      USE "OR CURRENT RESIDENT" OPTION? ' GET OPTION PICT 'A'
  1240.       @ 15,20 SAY " DO YOU WANT ONE, TWO OR THREE-UP LABELS? " GET UP PICT '#' RANGE 1, 3
  1241.       @ 17,20 SAY "              (Enter 1, 2, or 3)"
  1242.       @ 19,20 SAY "         PRESS [ENTER] WHEN ALL READY."
  1243.       READ
  1244.       CLEAR
  1245.       IF UP = 1 .AND. OPTION <> 'Y'
  1246.          LABEL FORM MAIL_UP1 TO PRINT
  1247.          SET PRINT ON
  1248.          ? CHR(13)
  1249.          SET PRINT OFF
  1250.       ENDIF
  1251.       IF UP = 2 .AND. OPTION <> 'Y'
  1252.          LABEL FORM MAIL_UP2 TO PRINT
  1253.          SET PRINT ON
  1254.          ? CHR(13)
  1255.          SET PRINT OFF
  1256.       ENDIF
  1257.       IF UP = 3 .AND. OPTION <> 'Y'
  1258.          LABEL FORM MAIL_UP3 TO PRINT
  1259.          SET PRINT ON
  1260.          ? CHR(13)
  1261.          SET PRINT OFF
  1262.       ENDIF
  1263.       IF UP = 1 .AND. OPTION = 'Y'
  1264.          LABEL FORM MAILUP1A TO PRINT
  1265.          SET PRINT ON
  1266.          ? CHR(13)
  1267.          SET PRINT OFF
  1268.       ENDIF
  1269.       IF UP = 2 .AND. OPTION = 'Y'
  1270.          LABEL FORM MAILUP2A TO PRINT
  1271.          SET PRINT ON
  1272.          ? CHR(13)
  1273.          SET PRINT OFF
  1274.       ENDIF
  1275.       IF UP = 3 .AND. OPTION = 'Y'
  1276.          LABEL FORM MAILUP3A TO PRINT
  1277.          SET PRINT ON
  1278.          ? CHR(13)
  1279.          SET PRINT OFF
  1280.       ENDIF
  1281.       CLOSE DATA
  1282.       DELE FILE TFILE.DBF
  1283.       DELE FILE TEMPINDX.NTX
  1284.       EXIT
  1285.     ENDIF
  1286.   ENDDO
  1287.   ENDIF
  1288. SET DELETED OFF
  1289. CLEAR
  1290. ENDCASE
  1291. ENDDO
  1292.