home *** CD-ROM | disk | FTP | other *** search
/ Hall of Fame / HallofFameCDROM.cdr / misc3 / easymail.lzh / MAILLIST.BAS < prev    next >
Encoding:
BASIC Source File  |  1982-07-27  |  7.8 KB  |  174 lines

  1. 100 '   MAILLIST        by Bob Noble
  2. 110 '                   IBM Personal Computer BASIC
  3. 120 '
  4. 130 '           Submitted to the Philadelphia IBM PC Users Club 6-30-82
  5. 140 '
  6. 150 '           This program creates, appends, edits, displays, and deletes
  7. 160 '           variable length records of 10 variable length fields in
  8. 170 '           "Mailling List" type files named by the user.
  9. 180 '
  10. 190 '           The biggest deficiency is the lack of an LPRINT routine for
  11. 200 '           printing hard copy. This is because I don't yet have a print-
  12. 210 '           er myself. I leave the addition of this function to other
  13. 220 '           programers, or until I get a printer.
  14. 230 '
  15. 240 '   Variables Used
  16. 250 '     FILE$ = Name of data file used
  17. 260 '     L$ = Name (Last Name of person)
  18. 270 '     F$ = First Name of person
  19. 280 '     A$ = 1st Next Line
  20. 290 '     B$ = 2nd Next Line (optional)
  21. 300 '     D$ = 3rd Next Line (optional)
  22. 310 '     E$ = 4th Next Line (optional)
  23. 320 '     G$ = 5th Next Line (optional)
  24. 330 '     C$ = City
  25. 340 '     S$ = State
  26. 350 '     Z$ = Zip Code
  27. 360 '
  28. 370 CLS: KEY OFF: LINE INPUT "Enter name of file to be used: ", FILE$
  29. 380 '
  30. 390 '   Main menu
  31. 400 '
  32. 410 CLS: PRINT "MAILLIST * * * MAIN MENU     File Open: "; FILE$
  33. 420 PRINT: PRINT "  1. Add Record(s)"
  34. 430 PRINT "  2. Edit Record(s)"
  35. 440 PRINT "  3. Display Record(s)"
  36. 450 PRINT "  4. Delete Record(s)"
  37. 460 PRINT "  5. Task Completed - Return to BASIC"
  38. 470 PRINT: INPUT "Make Selection (1-5): ", Q
  39. 480 IF Q=5 THEN CLOSE: CLS: KEY ON: END
  40. 490 ON Q GOTO 520, 990, 760, 1220
  41. 500 '
  42. 510 ' * * * * * Data Entry Module
  43. 520 OPEN FILE$ FOR APPEND AS #1
  44. 530 CLS: PRINT "MAILLIST *** DATA ENTRY     File Open: "; FILE$
  45. 540 LOCATE 19,10: PRINT "Note: If name is not a person, enter as last name and
  46. 550 PRINT "               press <ENTER> when `first name' prompt appears."
  47. 560 LOCATE 3,1: LINE INPUT "                   Last Name: ", L$
  48. 570 LINE INPUT "                  First Name: ", F$
  49. 580 LOCATE 22,10: PRINT "Note: Press `%' at `Next Line' prompt when ready to enter `city'."
  50. 590 LOCATE 5,1: LINE INPUT "                   Next Line: ", A$
  51. 600 LINE INPUT "                   Next Line: ", B$
  52. 610 IF B$ = "%" THEN D$ = "%": E$ = "%": G$ = "%": GOTO 670
  53. 620 LINE INPUT "                   Next Line: ", D$
  54. 630 IF D$ = "%" THEN E$ = "%": G$ = "%": GOTO 670
  55. 640 LINE INPUT "                   Next Line: ", E$
  56. 650 IF E$ = "%" THEN G$ = "%": GOTO 670
  57. 660 LINE INPUT "                   Next Line: ", G$
  58. 670 LINE INPUT "                        City: ", C$
  59. 680 LINE INPUT "                       State: ", S$
  60. 690 LINE INPUT "                         Zip: ", Z$
  61. 700 WRITE#1, L$,F$,A$,B$,D$,E$,G$,C$,S$,Z$
  62. 710 '
  63. 720 PRINT: LINE INPUT "Do you want to enter more data? (Y/N) ", Q$
  64. 730 IF LEFT$(Q$,1)="Y" OR LEFT$(Q$,1)="y" THEN 530 ELSE CLOSE: GOTO 410
  65. 740 '
  66. 750 ' * * * * * Display File
  67. 760 CLS: OPEN "I", 1, FILE$
  68. 770 PRINT "MAILLIST * * * Display Routine     File Open: "; FILE$
  69. 780 PRINT: PRINT "1. Display one record at a time."
  70. 790 PRINT "2. Scroll file."
  71. 800 PRINT: LINE INPUT "Make Selection (1 or 2): ", Q$
  72. 810 CLS
  73. 820 LOCATE 25: PRINT "Press <ENTER> to continue.": LOCATE 1
  74. 830 IF EOF(1) THEN 950
  75. 840 INPUT#1, L$,F$,A$,B$,D$,E$,G$,C$,S$,Z$
  76. 850 IF F$="" THEN PRINT L$: GOTO 870
  77. 860 PRINT F$ + " " + L$
  78. 870 PRINT A$
  79. 880 IF B$ <> "%" THEN PRINT B$
  80. 890 IF D$ <> "%" THEN PRINT D$
  81. 900 IF E$ <> "%" THEN PRINT E$
  82. 910 IF G$ <> "%" THEN PRINT G$
  83. 920 PRINT C$ + ", " + S$ + " " + Z$
  84. 930 IF Q$="2" THEN PRINT: GOTO 830
  85. 940 INPUT "",Q$: GOTO 830
  86. 950 PRINT "END OF FILE ": LOCATE 25,18: INPUT "return to main menu ",Q$
  87. 960 CLOSE: GOTO 410
  88. 970 '
  89. 980 ' * * * * * Edit File
  90. 990 CLS: OPEN "I", 1, FILE$
  91. 1000 OPEN "O", 2, "TEMPFIL"
  92. 1010 PRINT "MAILLIST * * * Edit Routine     File Open: "; FILE$
  93. 1020 PRINT: LINE INPUT "Enter last name of record to edit: ", L$
  94. 1030 IF LEN(L$) = 0 THEN PRINT "Something must be entered.": GOTO 1020
  95. 1040 '
  96. 1050 GOSUB 1630: ' * * * Search Subroutine
  97. 1060 '
  98. 1070 CLS: PRINT "MAILLIST * * * Edit Routine     File Open: "; FILE$
  99. 1080 GOSUB 1540: ' * * * Display record for field to edit
  100. 1090 PRINT: INPUT "Enter selection (0-10): ", Q
  101. 1100 IF Q=0 THEN WRITE #2, L1$,F$,A$,B$,D$,E$,G$,C$,S$,Z$: GOTO 1140
  102. 1110 LOCATE 17: PRINT "Make changes and move cursor to end of line, then press <ENTER>.": LOCATE 1
  103. 1120 ON Q GOSUB 1420,1430,1440,1450,1460,1470,1480,1490,1500,1510
  104. 1130 '
  105. 1140 GOSUB 1720: ' * * Subroutine to read-write remainder of file to TEMPFIL
  106. 1150 '
  107. 1160 GOSUB 1770: ' * Subroutine to initialize and copy TEMPFIL back to file
  108. 1170 '
  109. 1180 ' * * * * * Querry user for more editing
  110. 1190 LOCATE 19: LINE INPUT "Do you want to do more editing? (Y/N) ", Q$
  111. 1200 IF LEFT$(Q$,1)="Y" OR LEFT$(Q$,1)="y" THEN 990 ELSE 410
  112. 1210 '
  113. 1220 ' * * * * * Delete Record Routine
  114. 1230 CLS: PRINT "MAILLIST * * * Delete Record Routine     File Open: "; FILE$
  115. 1240 PRINT: LINE INPUT "Enter last name of record to delete: ", L$
  116. 1250 OPEN "I", 1, FILE$: OPEN "O", 2, "TEMPFIL"
  117. 1260 '
  118. 1270 GOSUB 1630: ' * * * Search subroutine
  119. 1280 '
  120. 1290 CLS: PRINT "MAILLIST * * * Delete Record Routine     File Open: "; FILE$
  121. 1300 GOSUB 1540: ' * Subroutine to display record
  122. 1310 PRINT: LINE INPUT "Enter `0' to delete record, or `1' to save: ", Q$
  123. 1320 IF Q$ = "0" THEN GOSUB 1720: ' * * * Write rest of FILE$ to TEMPFIL
  124. 1330 IF Q$="1" THEN WRITE #2,L$,F$,A$,B$,D$,E$,G$,C$,S$,Z$: GOSUB 1720: 'ditto
  125. 1340 GOSUB 1770: ' * * * Write TEMPFIL back to FILE$
  126. 1350 '
  127. 1360 ' * * * * * Querry user for more deletions
  128. 1370 PRINT: LINE INPUT "Do you want to delete another? ", Q$
  129. 1380 IF LEFT$(Q$,1) = "Y" OR LEFT$(Q$,1) = "y" THEN 1230 ELSE 410
  130. 1390 '
  131. 1400 ' * * * * * Subroutines to edit fields
  132. 1410 '
  133. 1420 LOCATE 4,5: LINE INPUT L$: GOSUB 1600: RETURN: ' *** Last Name
  134. 1430 LOCATE 5,5: LINE INPUT F$: GOSUB 1600: RETURN: ' *** First Name
  135. 1440 LOCATE 6,5: LINE INPUT A$: GOSUB 1600: RETURN: ' *** 1st `Next Line'
  136. 1450 LOCATE 7,5: LINE INPUT B$: GOSUB 1600: RETURN: ' *** 2nd `Next Line'
  137. 1460 LOCATE 8,5: LINE INPUT D$: GOSUB 1600: RETURN: ' *** 3rd `Next Line'
  138. 1470 LOCATE 9,5: LINE INPUT E$: GOSUB 1600: RETURN: ' *** 4th `Next Line'
  139. 1480 LOCATE 10,5: LINE INPUT G$: GOSUB 1600: RETURN: ' *** 5th `Next Line'
  140. 1490 LOCATE 11,5: LINE INPUT C$: GOSUB 1600: RETURN: ' *** City
  141. 1500 LOCATE 12,5: LINE INPUT S$: GOSUB 1600: RETURN: ' *** State
  142. 1510 LOCATE 13,5: LINE INPUT Q$: GOSUB 1600: RETURN: ' *** Zip Code
  143. 1520 '
  144. 1530 ' * * * * * Subroutine to Display Field Menu
  145. 1540 PRINT: PRINT " 0 = No Changes"
  146. 1550 PRINT " 1. "; L$: PRINT " 2. "; F$: PRINT " 3. "; A$: PRINT " 4. "; B$
  147. 1560 PRINT " 5. "; D$: PRINT " 6. "; E$: PRINT " 7. "; G$: PRINT " 8. "; C$
  148. 1570 PRINT " 9. "; S$: PRINT "10. "; Z$
  149. 1580 '
  150. 1590 ' * * * * * Subroutine to write edited record to file
  151. 1600 WRITE #2, L$, F$, A$, B$, D$, E$, G$, C$, S$, Z$: RETURN
  152. 1610 '
  153. 1620 ' * * * * * File Search Subroutine
  154. 1630 IF EOF(1) THEN 1670
  155. 1640 INPUT #1, L1$, F$, A$, B$, D$, E$, G$, C$, S$, Z$
  156. 1650 IF L$ = L1$ THEN RETURN
  157. 1660 WRITE #2, L1$, F$, A$, B$, D$, E$, G$, C$, S$, Z$: GOTO 1630
  158. 1670 PRINT: PRINT "ERROR Message. "; V$; " not found in "; FILE$
  159. 1680 PRINT: LINE INPUT "Press <ENTER> to return to main menu. ", Q$
  160. 1690 CLOSE: GOTO 410
  161. 1700 '
  162. 1710 ' * * * * * Subroutine to read-write remainder of file to TEMPFIL
  163. 1720 IF EOF(1) THEN CLOSE: RETURN
  164. 1730 INPUT #1, L$, F$, A$, B$, D$, E$, G$, C$, S$, Z$
  165. 1740 WRITE #2, L$, F$, A$, B$, D$, E$, G$, C$, S$, Z$: GOTO 1720
  166. 1750 '
  167. 1760 ' * * * * * Subrountine to initialize and copy TEMPFIL back to file
  168. 1770 OPEN "I", 1, "TEMPFIL": OPEN "O", 2, FILE$
  169. 1780 IF EOF(1) THEN CLOSE: KILL "TEMPFIL": RETURN
  170. 1790 INPUT #1, L$, F$, A$, B$, D$, E$, G$, C$, S$, Z$
  171. 1800 WRITE #2, L$, F$, A$, B$, D$, E$, G$, C$, S$, Z$: GOTO 1780
  172. TURN
  173. 1790 INPUT #1, L$, F$, A$, B$, D$, E$, G$, C$, S$, Z$
  174. 1800 WRITE #2, L$, F$, A$, B$,