“Personal Secretary” is a personal information manager, for use with Zebra’s OS-64 cartridge, combining a graphical monthly calendar, an appointment diary, and a phone-book database, all presented on a split screen. The calendar occupies the left portion of the display, computed using a Julian Day Number algorithm that correctly handles century-year leap-year exceptions; the right panel holds menus and data views simultaneously. Up to 200 appointments and 50 contact records are held in parallel numeric and string arrays and persisted as 15 separately named tape files (labelled “a” through “o”). The phone-book module supports address-label printing via LPRINT in both bulk and single-record modes, and POKE 23658,8 is used to switch the INPUT editor into caps-lock mode for consistent data entry.
Program Analysis
Program Structure
The program is organised as a set of menu-driven modules reached by GO TO from a central main-menu loop. The overall flow is:
- Lines 5–9: Variable and array initialisation.
- Lines 10–145: Screen border drawing (PLOT/DRAW rectangles and horizontal rules) and a system POKE.
- Lines 150–280: Splash screen, month/year input, calendar rendering, and appointment-day flash scan.
- Lines 289–355: Main menu (5 options + hidden “x” to STOP).
- Lines 400–649: Appointment sub-system (enter, view, copy-screen).
- Lines 1000–1060: “New Calendar” mode — clears calendar area and re-runs from line 170.
- Lines 1500–1866: Phone-book sub-system (enter, search by name, scan all, printer utilities).
- Lines 1900–1990: Printer utilities — screen copy and mailing-label generation.
- Lines 2000–2500: Subroutines — LPRINT label output; month/year input and Julian day calculation.
- Lines 3000–3090: Save all 15 data arrays to tape.
- Lines 3500–3799: Load all 15 data arrays from tape.
- Lines 3800–3990: Screen-clearing utility subroutines.
- Lines 4000–4100: Appointment display pager and copyright footer.
- Lines 5200–5510: Confirmation prompt subroutines.
Data Structures
Appointments (up to 200) are stored across six parallel arrays:
| Array | Size | Contents |
|---|---|---|
c(200) | numeric | Month number of appointment |
d(200) | numeric | Year of appointment |
d$(200,2) | string | Day of month (stored as 2-char string) |
t$(200,5) | string | Time (5 chars) |
w$(200,15) | string | Person/subject (15 chars) |
b$(200,24) | string | Description (24 chars) |
Phone contacts (up to 50) are stored across seven parallel arrays: l$ (last name), f$ (first name), v$ (address), c$ (city), s$ (state, 2 chars), z$ (zip, 5 chars), and p$ (phone, 10 chars with area code in positions 1–3 and number in 4–10). The record counts are persisted in the single-element arrays w(1) (appointment count x) and l(1) (contact count j) and saved as the first tape file pair.
Calendar Algorithm
The day-of-week and month-length calculation at lines 2040–2500 uses a modified Julian Day Number formula. For March through December it applies:
f = 365*(q+1) + d + 31*(m-1) - INT(.4*m+2.3) + INT(q/4) - INT(.75*INT(q/100)+1)
For January and February a slightly different formula using q+1 and q-1 terms handles the year-boundary correctly. The formula includes century-year leap-year correction via the INT(.75*INT(q/100)) term, making it accurate across the Gregorian calendar. The day of week dw is extracted as f MOD 7 at line 184. Month length e is determined by calling the formula twice — once for day 1 of the current month (f1) and once for day 1 of the following month — and differencing them (lines 187–192).
The calendar grid is then rendered by a loop (lines 210–260) that accumulates column position n in steps of 3 (for 2-digit day numbers plus a space), wrapping to the next row when n exceeds 22. A correction at line 252 nudges single-digit 9 one column left to maintain alignment — a partial fix that does not handle all two-digit numbers correctly.
Screen Layout
The display is permanently divided into two zones using PLOT/DRAW borders: columns 0–29 hold the calendar (rows 0–9) and appointment/data view (rows 10–19), while columns 30–63 hold all menus and right-panel information. The subroutine at line 3800 clears only columns 30–63 rows 1–7, and line 3900 clears rows 10–17 columns 0–63, allowing the calendar to persist while menus change.
System POKE Usage
POKE 23658,8(lines 479, 1569, 1744): Sets the FLAGS2 system variable bit to force the editor into caps-lock mode, ensuring upper-case entry for names and fields.POKE 23658,0(lines 509, 1605, 1746): Restores normal (lower-case capable) keyboard mode.POKE 65523,167(line 145): Writes to an address in upper RAM (0xFFF3). On the TS2068 this region can contain EXROM/DOCK cartridge data or OS configuration; the exact effect is hardware-specific.
Tape Save/Load Strategy
All data is saved as 15 sequentially named tape files (“a” through “o”) using SAVE "x" DATA array(). This is a straightforward but operationally demanding approach — the user must sit through 15 separate tape writes per save operation. After saving, the program re-initialises by jumping back to GO TO 10 (line 3090), which redraws the screen borders but does not re-dimension the arrays (they are declared only at lines 6–9, which are not re-executed). Loading similarly chains through 15 LOAD statements before restoring the record counts from w(1) and l(1).
Notable Techniques and Idioms
- Split-screen persistence: Selective clearing subroutines (3800, 3900, 3990) erase only specific screen zones, maintaining the calendar while updating menus.
- Appointment day flash: Lines 270–280 scan all appointments and flash each matching day number on screen for about 0.32 seconds (
PAUSE 8) as an agenda preview. - Paged appointment display: Subroutine 4000 uses variable
vas a row counter; when it exceeds 7 it pauses and resets to 1, allowing more than 7 appointments to be paged through. - INPUT into string slices: Lines 1599–1600 use
INPUT ... LINE p$(j,1 TO 3)andINPUT ... LINE p$(j,4 TO 10)to store area code and number into different slices of the same fixed-width string row. - VAL for day matching: Line 275 uses
VAL d$(h)to convert the 2-character day string back to a number for comparison with the loop counterr.
Bugs and Anomalies
- Line 720 unreachable branch:
IF INKEY$="" THEN GO TO 720: GO TO 900— theGO TO 900after the colon is never reached because theIFbranch loops forever when the key is not pressed, and when a key is pressed the line simply falls through to line 900 anyway. TheGO TO 900is redundant dead code. - Validation uses stale variable
d: Line 2014 checksd<1 OR d>31, butdat that point is 1 (set at line 160 or 187), so the day-range check always passes regardless of user input. - Calendar alignment only partially fixed: Line 252 subtracts 1 from
nonly whens=9, but all two-digit dates (10–31) also occupy one extra character. Dates 10 and above will misalign the subsequent column positions. - Phone search case-sensitive and padded: The search at line 1755 compares
l$(k)(a full 15-character fixed-width string, space-padded) toe$(1)(also 15-char, space-padded). An exact length match is required, which works correctly given both are fixed-width arrays, but the user must type the name padded or the trailing spaces will cause a mismatch unless the INPUT fills all 15 characters. - Variable
m1computed but never used: Line 2035 setsm1=((m-1)*3)+1which appears to be a remnant of an earlier implementation; it is not referenced elsewhere in the program. - Save resets to line 10 without re-dimensioning: After saving (line 3090
GO TO 10), arrays are not re-dimensioned since lines 6–9 are skipped. Data survives in memory as intended, but the border graphics are redrawn unnecessarily.
Content
Source Code
5 REM LINE
6 DIM w(1): DIM l(1)
7 LET x=0: LET h=0: LET j=0
8 DIM c(200): DIM d(200): DIM d$(200,2): DIM t$(200,5): DIM w$(200,15): DIM b$(200,24)
9 DIM l$(50,15): DIM f$(50,10): DIM v$(50,20): DIM c$(50,12): DIM s$(50,2): DIM z$(50,5): DIM p$(50,10)
10 PLOT 0,175
20 DRAW 255,0: DRAW 0,-75: DRAW -255,0: DRAW 0,75
30 PLOT 2,173
40 DRAW 109,0: DRAW 0,-71: DRAW -109,0: DRAW 0,71
120 PLOT 0,7: DRAW 255,0
125 PLOT 0,5: DRAW 255,0
130 PLOT 0,24: DRAW 255,0
140 PLOT 0,26: DRAW 255,0
145 POKE 65523,167
150 PRINT AT 19,25;"PERSONAL SECRETARY"
155 GO SUB 4100
160 LET d=1: GO SUB 2010
170 PRINT AT 1,5;a$
179 PRINT AT 1,21;q
180 PRINT AT 2,5;"SU MO TU WE TH FR SA"
184 LET dw=f-7*INT (f/7)
187 LET d=1: GO SUB 2040: LET f1=f
190 LET m=m+1: IF m>12 THEN LET q=q+1: LET m=1
192 GO SUB 2040: LET e=f-f1
195 LET i=0: LET n=0
200 LET p=21+dw*3
205 IF p>24 THEN LET p=p-21
210 FOR s=1 TO e
220 LET n=p+n
221 LET p=3
250 PRINT AT 3+i,n;s
252 IF s=9 THEN LET n=n-1
255 IF n>22 THEN LET i=i+1: LET n=n-21
260 NEXT s
265 PRINT AT 1,32;"APPOINTMENTS FOR THIS MONTH"
268 PRINT AT 3,40;"DAY: "
270 FOR r=1 TO 31
271 FOR h=1 TO x
275 IF c(h)=m AND d(h)=q AND VAL d$(h)=r THEN PRINT AT 3,48;" ": PRINT AT 3,48;r: PAUSE 8
279 NEXT h
280 NEXT r
289 GO SUB 3800
290 PRINT AT 1,37;"** MAIN MENU **"
300 PRINT AT 3,35;"1. Appointment menu"
305 PRINT AT 4,35;"2. Another calendar"
310 PRINT AT 5,35;"3. Phone numbers"
320 PRINT AT 6,35;"4. Save new entries"
325 PRINT AT 7,35;"5. Load your data"
326 BEEP .1,9: BEEP .1,3
330 IF INKEY$="1" THEN GO TO 400
335 IF INKEY$="2" THEN GO TO 1000
340 IF INKEY$="3" THEN GO TO 1500
345 IF INKEY$="4" THEN GO TO 3000
350 IF INKEY$="5" THEN GO TO 3500
352 IF INKEY$="x" THEN STOP
355 GO TO 330
400 GO SUB 3800
405 PRINT AT 1,30;"APPOINTMENT MODE"
410 PRINT AT 2,40;"** MENU **"
415 PRINT AT 4,35;"a. Enter appointments"
420 PRINT AT 5,35;"b. View appointments"
425 PRINT AT 6,35;"c. Copy Screen"
430 PRINT AT 7,35;"d. Main Menu"
435 IF INKEY$="a" THEN GO TO 450
436 IF INKEY$="b" THEN GO TO 650
437 IF INKEY$="c" THEN COPY : GO TO 400
438 IF INKEY$="d" THEN GO SUB 3800: GO SUB 3900: GO TO 290
440 GO TO 435
450 GO SUB 3800
455 PRINT AT 1,30;"Appointment entry"
459 LET x=x+1
460 PRINT AT 3,35;"This is appointment No."
465 PRINT AT 4,46;x
470 IF x>200 THEN PRINT AT 20,15;"You are only allowed 200 appointments": PAUSE 100: GO SUB 3990: GO SUB 4100: GO TO 400
473 GO SUB 475: GO TO 479
475 PRINT AT 10,0;"DAY": PRINT AT 10,10;"TIME": PRINT AT 10,20;"WITH WHOM": PRINT AT 10,40;"DISCRIPTION"
476 PLOT 0,87: DRAW 255,0
477 PLOT 0,85: DRAW 255,0: RETURN
479 POKE 23658,8
480 LET c(x)=m
485 LET d(x)=q
490 INPUT "Day of appointment :"; LINE d$(x)
495 INPUT "Time of appointment :"; LINE t$(x)
500 INPUT "Who is appointment with? "; LINE w$(x)
505 INPUT "Discription of appointment :"; LINE b$(x)
509 POKE 23658,0
510 LET v=0: LET h=x: GO SUB 4000
520 GO SUB 5200
525 IF INKEY$="y" THEN GO SUB 3990: GO SUB 4100: GO TO 550
530 IF INKEY$="n" THEN GO SUB 3900: GO SUB 3990: GO SUB 4100: GO SUB 475: GO TO 479
535 GO TO 525
550 GO SUB 5500
555 IF INKEY$="y" THEN GO SUB 3900: GO SUB 3990: GO SUB 4100: GO TO 459
560 IF INKEY$="n" THEN GO SUB 3900: GO SUB 3990: GO SUB 4100: GO TO 400
565 GO TO 555
649 STOP
650 GO SUB 3900: GO SUB 3800: PRINT AT 1,30;"VIEW APPOINTMENTS"
655 GO SUB 475
658 DIM a$(2,2): LET v=0
660 PRINT AT 3,35;"Which day do you want"
665 INPUT a$(1,1 TO 2)
670 FOR o=1 TO x
680 IF a$(1,1 TO 2)=d$(o,1 TO 2) AND m=c(o) AND q=d(o) THEN LET h=o: GO SUB 4000
690 NEXT o
700 PRINT AT 3,31;"That's all of the appointments"
710 PRINT AT 5,37;"Hit any key for menu"
720 IF INKEY$="" THEN GO TO 720: GO TO 900
900 GO SUB 3800: GO TO 400
999 STOP
1000 GO SUB 3800
1010 PRINT AT 1,30;"NEW CALENDAR MODE"
1020 FOR u=1 TO 8
1030 PRINT AT u,1;" "
1040 NEXT u
1050 GO SUB 2010
1055 GO SUB 3800
1060 GO TO 170
1500 GO SUB 3800
1505 PRINT AT 1,30;"PHONE NUMBERS"
1510 PRINT AT 2,40;"** MENU **"
1515 PRINT AT 4,35;"a. Enter Phone No.'s"
1520 PRINT AT 5,35;"b. View Phone No.'s"
1530 PRINT AT 6,35;"c. Printer Utilities"
1535 PRINT AT 7,35;"d. Main Menu"
1540 IF INKEY$="a" THEN GO SUB 3900: GO TO 1550
1541 IF INKEY$="b" THEN GO TO 1700
1542 IF INKEY$="c" THEN GO TO 1900
1543 IF INKEY$="d" THEN GO SUB 3900: GO SUB 3800: GO TO 290
1549 GO TO 1540
1550 GO SUB 3800
1555 PRINT AT 1,30;"Phone No. Entry"
1560 LET j=j+1
1565 PRINT AT 3,39;"This is Phone No.": PRINT AT 4,47;j
1569 POKE 23658,8
1570 INPUT "Persons Last Name: "; LINE l$(j)
1575 INPUT "Persons First Name: "; LINE f$(j)
1580 INPUT "Persons Address: "; LINE v$(j)
1585 INPUT "Persons City: "; LINE c$(j)
1590 INPUT "Persons State (2 Letters): "; LINE s$(j)
1595 INPUT "Zip Code: "; LINE z$(j)
1599 INPUT "Persons Phone Area Code: "; LINE p$(j,1 TO 3)
1600 INPUT "Phone Number: "; LINE p$(j,4 TO 10)
1605 POKE 23658,0
1610 LET b=j: GO SUB 1850
1620 GO SUB 5200
1625 IF INKEY$="y" THEN GO SUB 3990: GO SUB 4100: GO TO 1630
1626 IF INKEY$="n" THEN GO SUB 3900: GO SUB 3990: GO SUB 4100: GO TO 1565
1629 GO TO 1625
1630 GO SUB 5500
1635 IF INKEY$="y" THEN GO SUB 3900: GO SUB 3990: GO SUB 4100: GO TO 1560
1636 IF INKEY$="n" THEN GO SUB 3900: GO SUB 3990: GO SUB 4100: GO TO 1500
1639 GO TO 1635
1700 GO SUB 3800
1705 PRINT AT 1,30;"VIEW PHONE NO'S"
1710 PRINT AT 3,40;"** MENU **"
1715 PRINT AT 5,35;"a. Search for a number"
1720 PRINT AT 6,35;"b. Scan all numbers"
1723 PRINT AT 7,35;"c. Leave this Mode"
1725 IF INKEY$="a" THEN GO SUB 3900: GO TO 1730
1726 IF INKEY$="b" THEN GO SUB 3900: GO TO 1800
1727 IF INKEY$="c" THEN GO TO 1500
1729 GO TO 1725
1730 GO SUB 3800: GO SUB 3900
1735 PRINT AT 1,30;"Phone No. Search": PRINT AT 4,35;"Hit X to leave"
1740 DIM e$(1,15)
1744 POKE 23658,8
1745 INPUT "Enter Last Name of person : ";e$(1)
1746 POKE 23658,0
1747 IF e$(1)="x" THEN GO TO 1700
1749 LET k=0
1750 LET k=k+1
1755 IF l$(k)=e$(1) THEN LET b=k: GO SUB 1850: GO TO 1700
1760 IF k=j THEN GO TO 1700
1765 GO TO 1750
1800 GO SUB 3800: GO SUB 3900: PRINT AT 1,30;"Total scan of Phone No's": PRINT AT 4,35;"Hit X to leave"
1805 PRINT AT 10,0;"#": PRINT AT 10,5;"NAME": PRINT AT 10,40;"PHONE NO."
1806 PLOT 0,87: DRAW 255,0
1807 PLOT 0,85: DRAW 255,0
1810 LET k=0: LET a=0
1815 LET a=a+1
1818 LET k=k+1
1820 PRINT AT 11+a,0;k: PRINT AT 11+a,5;l$(k);f$(k): PRINT AT 11+a,40;"(";p$(k,1 TO 3);")";p$(k,4 TO 6);"-";p$(k,7 TO 10)
1825 IF a=6 THEN PRINT AT 20,18;"HIT ANY KEY TO GO ON!": IF INKEY$="" THEN GO TO 1825: LET a=0: GO SUB 3990: GO SUB 4100: GO TO 1815
1826 IF INKEY$="x" THEN GO TO 1700
1827 IF k=j THEN GO TO 1700
1835 GO TO 1815
1850 PRINT AT 11,0;"NAME : ";l$(b);f$(b)
1855 PRINT AT 12,0;"ADDRESS : ";v$(b)
1860 PRINT AT 13,0;"CITY : ";c$(b): PRINT AT 13,20;"STATE : ";s$(b): PRINT AT 13,35;"ZIP : ";z$(b)
1865 PRINT AT 15,0;"PHONE NO. : (";p$(b,1 TO 3);")";p$(b,4 TO 6);"-";p$(b,7 TO 10)
1866 RETURN
1900 GO SUB 3800
1905 PRINT AT 1,30;"PRINTER UTILITIES"
1910 PRINT AT 3,40;"** MENU **"
1920 PRINT AT 5,35;"a. Copy Screen"
1925 PRINT AT 6,35;"b. Make labels"
1927 PRINT AT 7,35;"c. Leave this mode"
1928 LET y=0
1930 IF INKEY$="a" THEN COPY : GO SUB 3900: GO TO 1500
1932 IF INKEY$="b" THEN GO TO 1950
1933 IF INKEY$="c" THEN GO TO 1500
1939 GO TO 1930
1950 PRINT AT 20,22;"(A)ll or (J)ust one "
1955 IF INKEY$="a" THEN GO TO 1960
1956 IF INKEY$="j" THEN GO TO 1980
1957 GO TO 1955
1960 LET y=y+1: GO SUB 2000
1965 IF y=j THEN GO SUB 4100: GO TO 1900
1970 GO TO 1960
1980 GO SUB 4100: INPUT "Control number of person for label: ";y
1985 GO SUB 2000
1990 GO TO 1900
2000 LPRINT : LPRINT
2001 LPRINT l$(y);f$(y)
2002 LPRINT v$(y)
2003 LPRINT c$(y);s$(y);" ";z$(y)
2004 LPRINT : LPRINT
2005 RETURN
2010 INPUT "Enter month in the form (MM): ";m
2012 INPUT "Enter year in the form (YYYY): ";q
2014 IF m>12 OR m<1 OR d<1 OR d>31 THEN PRINT AT 20,0;" There are only 12 months in a year. Try again! ": FLASH 0: PAUSE 60: GO TO 2010
2015 DIM a$(10)
2020 IF m=1 THEN LET a$="January"
2021 IF m=2 THEN LET a$="February"
2022 IF m=3 THEN LET a$="March"
2023 IF m=4 THEN LET a$="April"
2024 IF m=5 THEN LET a$="May"
2025 IF m=6 THEN LET a$="June"
2026 IF m=7 THEN LET a$="July"
2027 IF m=8 THEN LET a$="August"
2028 IF m=9 THEN LET a$="September"
2029 IF m=10 THEN LET a$="October"
2030 IF m=11 THEN LET a$="November"
2031 IF m=12 THEN LET a$="December"
2035 LET m1=((m-1)*3)+1
2040 IF m<3 THEN LET f=365*(q+1)+d+31*(m-1)+INT ((q-1)/4)-INT (.75*(INT ((q-1)/100))+1): RETURN
2050 LET f=365*(q+1)+d+31*(m-1)-INT (.4*m+2.3)+INT (q/4)-INT (.75*INT (q/100)+1)
2500 RETURN
3000 CLS : GO SUB 3800
3003 LET w(1)=x: LET l(1)=j
3005 PRINT AT 1,30;"SAVING DATA"
3010 SAVE "a" DATA w()
3020 SAVE "b" DATA l()
3025 SAVE "c" DATA c()
3030 SAVE "d" DATA d()
3035 SAVE "e" DATA d$()
3040 SAVE "f" DATA t$()
3045 SAVE "g" DATA w$()
3050 SAVE "h" DATA b$()
3055 SAVE "i" DATA l$()
3060 SAVE "j" DATA f$()
3065 SAVE "k" DATA v$()
3070 SAVE "l" DATA c$()
3075 SAVE "m" DATA s$()
3080 SAVE "n" DATA z$()
3085 SAVE "o" DATA p$()
3087 GO SUB 3800
3090 GO TO 10
3500 CLS : GO SUB 3800: PRINT AT 1,30;"LOADING DATA"
3503 LOAD "a" DATA w()
3505 LOAD "b" DATA l()
3507 LOAD "c" DATA c()
3510 LOAD "d" DATA d()
3515 LOAD "e" DATA d$()
3520 LOAD "f" DATA t$()
3525 LOAD "g" DATA w$()
3530 LOAD "h" DATA b$()
3535 LOAD "i" DATA l$()
3540 LOAD "j" DATA f$()
3545 LOAD "k" DATA v$()
3550 LOAD "l" DATA c$()
3555 LOAD "m" DATA s$()
3560 LOAD "n" DATA z$()
3565 LOAD "o" DATA p$()
3568 LET x=w(1): LET j=l(1)
3570 GO SUB 3800
3799 GO TO 10
3800 FOR u=1 TO 7
3810 PRINT AT u,30;" "
3820 NEXT u
3830 RETURN
3900 FOR y=10 TO 17
3910 PRINT AT y,0;" "
3920 NEXT y
3930 RETURN
3990 PRINT AT 20,0;" ": RETURN
4000 LET v=v+1
4005 IF v>7 THEN PRINT AT 20,17;"Hit any key to see the rest": GO SUB 3990: GO SUB 4100: LET v=1
4010 PRINT AT 11+v,0;d$(h): PRINT AT 11+v,10;t$(h): PRINT AT 11+v,20;w$(h): PRINT AT 11+v,40;b$(h)
4020 RETURN
4100 PRINT AT 20,22;"© 1985 J&A Software ": RETURN
5200 BEEP .1,9: BEEP .1,3: PRINT AT 20,15;"IS THIS ENTRY CORRECT? (Y)ES OR (N)O"
5210 RETURN
5500 BEEP .1,9: BEEP .1,3: PRINT AT 20,15;"DO YOU HAVE ANYMORE ENTRIES?(Y)ES OR (N)O"
5510 RETURN
5 REM LINE
6 DIM w(1): DIM l(1)
7 LET x=0: LET h=0: LET j=0
8 DIM c(200): DIM d(200): DIM d$(200,2): DIM t$(200,5): DIM w$(200,15): DIM b$(200,24)
9 DIM l$(50,15): DIM f$(50,10): DIM v$(50,20): DIM c$(50,12): DIM s$(50,2): DIM z$(50,5): DIM p$(50,10)
10 PLOT 0,175
20 DRAW 255,0: DRAW 0,-75: DRAW -255,0: DRAW 0,75
30 PLOT 2,173
40 DRAW 109,0: DRAW 0,-71: DRAW -109,0: DRAW 0,71
120 PLOT 0,7: DRAW 255,0
125 PLOT 0,5: DRAW 255,0
130 PLOT 0,24: DRAW 255,0
140 PLOT 0,26: DRAW 255,0
145 POKE 65523,167
150 PRINT AT 19,25;"PERSONAL SECRETARY"
155 GO SUB 4100
160 LET d=1: GO SUB 2010
170 PRINT AT 1,5;a$
179 PRINT AT 1,21;q
180 PRINT AT 2,5;"SU MO TU WE TH FR SA"
184 LET dw=f-7*INT (f/7)
187 LET d=1: GO SUB 2040: LET f1=f
190 LET m=m+1: IF m>12 THEN LET q=q+1: LET m=1
192 GO SUB 2040: LET e=f-f1
195 LET i=0: LET n=0
200 LET p=21+dw*3
205 IF p>24 THEN LET p=p-21
210 FOR s=1 TO e
220 LET n=p+n
221 LET p=3
250 PRINT AT 3+i,n;s
252 IF s=9 THEN LET n=n-1
255 IF n>22 THEN LET i=i+1: LET n=n-21
260 NEXT s
265 PRINT AT 1,32;"APPOINTMENTS FOR THIS MONTH"
268 PRINT AT 3,40;"DAY: "
270 FOR r=1 TO 31
271 FOR h=1 TO x
275 IF c(h)=m AND d(h)=q AND VAL d$(h)=r THEN PRINT AT 3,48;" ": PRINT AT 3,48;r: PAUSE 8
279 NEXT h
280 NEXT r
289 GO SUB 3800
290 PRINT AT 1,37;"** MAIN MENU **"
300 PRINT AT 3,35;"1. Appointment menu"
305 PRINT AT 4,35;"2. Another calendar"
310 PRINT AT 5,35;"3. Phone numbers"
320 PRINT AT 6,35;"4. Save new entries"
325 PRINT AT 7,35;"5. Load your data"
326 BEEP .1,9: BEEP .1,3
330 IF INKEY$="1" THEN GO TO 400
335 IF INKEY$="2" THEN GO TO 1000
340 IF INKEY$="3" THEN GO TO 1500
345 IF INKEY$="4" THEN GO TO 3000
350 IF INKEY$="5" THEN GO TO 3500
352 IF INKEY$="x" THEN STOP
355 GO TO 330
400 GO SUB 3800
405 PRINT AT 1,30;"APPOINTMENT MODE"
410 PRINT AT 2,40;"** MENU **"
415 PRINT AT 4,35;"a. Enter appointments"
420 PRINT AT 5,35;"b. View appointments"
425 PRINT AT 6,35;"c. Copy Screen"
430 PRINT AT 7,35;"d. Main Menu"
435 IF INKEY$="a" THEN GO TO 450
436 IF INKEY$="b" THEN GO TO 650
437 IF INKEY$="c" THEN COPY : GO TO 400
438 IF INKEY$="d" THEN GO SUB 3800: GO SUB 3900: GO TO 290
440 GO TO 435
450 GO SUB 3800
455 PRINT AT 1,30;"Appointment entry"
459 LET x=x+1
460 PRINT AT 3,35;"This is appointment No."
465 PRINT AT 4,46;x
470 IF x>200 THEN PRINT AT 20,15;"You are only allowed 200 appointments": PAUSE 100: GO SUB 3990: GO SUB 4100: GO TO 400
473 GO SUB 475: GO TO 479
475 PRINT AT 10,0;"DAY": PRINT AT 10,10;"TIME": PRINT AT 10,20;"WITH WHOM": PRINT AT 10,40;"DISCRIPTION"
476 PLOT 0,87: DRAW 255,0
477 PLOT 0,85: DRAW 255,0: RETURN
479 POKE 23658,8
480 LET c(x)=m
485 LET d(x)=q
490 INPUT "Day of appointment :"; LINE d$(x)
495 INPUT "Time of appointment :"; LINE t$(x)
500 INPUT "Who is appointment with? "; LINE w$(x)
505 INPUT "Discription of appointment :"; LINE b$(x)
509 POKE 23658,0
510 LET v=0: LET h=x: GO SUB 4000
520 GO SUB 5200
525 IF INKEY$="y" THEN GO SUB 3990: GO SUB 4100: GO TO 550
530 IF INKEY$="n" THEN GO SUB 3900: GO SUB 3990: GO SUB 4100: GO SUB 475: GO TO 479
535 GO TO 525
550 GO SUB 5500
555 IF INKEY$="y" THEN GO SUB 3900: GO SUB 3990: GO SUB 4100: GO TO 459
560 IF INKEY$="n" THEN GO SUB 3900: GO SUB 3990: GO SUB 4100: GO TO 400
565 GO TO 555
649 STOP
650 GO SUB 3900: GO SUB 3800: PRINT AT 1,30;"VIEW APPOINTMENTS"
655 GO SUB 475
658 DIM a$(2,2): LET v=0
660 PRINT AT 3,35;"Which day do you want"
665 INPUT a$(1,1 TO 2)
670 FOR o=1 TO x
680 IF a$(1,1 TO 2)=d$(o,1 TO 2) AND m=c(o) AND q=d(o) THEN LET h=o: GO SUB 4000
690 NEXT o
700 PRINT AT 3,31;"That's all of the appointments"
710 PRINT AT 5,37;"Hit any key for menu"
720 IF INKEY$="" THEN GO TO 720: GO TO 900
900 GO SUB 3800: GO TO 400
999 STOP
1000 GO SUB 3800
1010 PRINT AT 1,30;"NEW CALENDAR MODE"
1020 FOR u=1 TO 8
1030 PRINT AT u,1;" "
1040 NEXT u
1050 GO SUB 2010
1055 GO SUB 3800
1060 GO TO 170
1500 GO SUB 3800
1505 PRINT AT 1,30;"PHONE NUMBERS"
1510 PRINT AT 2,40;"** MENU **"
1515 PRINT AT 4,35;"a. Enter Phone No.'s"
1520 PRINT AT 5,35;"b. View Phone No.'s"
1530 PRINT AT 6,35;"c. Printer Utilities"
1535 PRINT AT 7,35;"d. Main Menu"
1540 IF INKEY$="a" THEN GO SUB 3900: GO TO 1550
1541 IF INKEY$="b" THEN GO TO 1700
1542 IF INKEY$="c" THEN GO TO 1900
1543 IF INKEY$="d" THEN GO SUB 3900: GO SUB 3800: GO TO 290
1549 GO TO 1540
1550 GO SUB 3800
1555 PRINT AT 1,30;"Phone No. Entry"
1560 LET j=j+1
1565 PRINT AT 3,39;"This is Phone No.": PRINT AT 4,47;j
1569 POKE 23658,8
1570 INPUT "Persons Last Name: "; LINE l$(j)
1575 INPUT "Persons First Name: "; LINE f$(j)
1580 INPUT "Persons Address: "; LINE v$(j)
1585 INPUT "Persons City: "; LINE c$(j)
1590 INPUT "Persons State (2 Letters): "; LINE s$(j)
1595 INPUT "Zip Code: "; LINE z$(j)
1599 INPUT "Persons Phone Area Code: "; LINE p$(j,1 TO 3)
1600 INPUT "Phone Number: "; LINE p$(j,4 TO 10)
1605 POKE 23658,0
1610 LET b=j: GO SUB 1850
1620 GO SUB 5200
1625 IF INKEY$="y" THEN GO SUB 3990: GO SUB 4100: GO TO 1630
1626 IF INKEY$="n" THEN GO SUB 3900: GO SUB 3990: GO SUB 4100: GO TO 1565
1629 GO TO 1625
1630 GO SUB 5500
1635 IF INKEY$="y" THEN GO SUB 3900: GO SUB 3990: GO SUB 4100: GO TO 1560
1636 IF INKEY$="n" THEN GO SUB 3900: GO SUB 3990: GO SUB 4100: GO TO 1500
1639 GO TO 1635
1700 GO SUB 3800
1705 PRINT AT 1,30;"VIEW PHONE NO'S"
1710 PRINT AT 3,40;"** MENU **"
1715 PRINT AT 5,35;"a. Search for a number"
1720 PRINT AT 6,35;"b. Scan all numbers"
1723 PRINT AT 7,35;"c. Leave this Mode"
1725 IF INKEY$="a" THEN GO SUB 3900: GO TO 1730
1726 IF INKEY$="b" THEN GO SUB 3900: GO TO 1800
1727 IF INKEY$="c" THEN GO TO 1500
1729 GO TO 1725
1730 GO SUB 3800: GO SUB 3900
1735 PRINT AT 1,30;"Phone No. Search": PRINT AT 4,35;"Hit X to leave"
1740 DIM e$(1,15)
1744 POKE 23658,8
1745 INPUT "Enter Last Name of person : ";e$(1)
1746 POKE 23658,0
1747 IF e$(1)="x" THEN GO TO 1700
1749 LET k=0
1750 LET k=k+1
1755 IF l$(k)=e$(1) THEN LET b=k: GO SUB 1850: GO TO 1700
1760 IF k=j THEN GO TO 1700
1765 GO TO 1750
1800 GO SUB 3800: GO SUB 3900: PRINT AT 1,30;"Total scan of Phone No's": PRINT AT 4,35;"Hit X to leave"
1805 PRINT AT 10,0;"#": PRINT AT 10,5;"NAME": PRINT AT 10,40;"PHONE NO."
1806 PLOT 0,87: DRAW 255,0
1807 PLOT 0,85: DRAW 255,0
1810 LET k=0: LET a=0
1815 LET a=a+1
1818 LET k=k+1
1820 PRINT AT 11+a,0;k: PRINT AT 11+a,5;l$(k);f$(k): PRINT AT 11+a,40;"(";p$(k,1 TO 3);")";p$(k,4 TO 6);"-";p$(k,7 TO 10)
1825 IF a=6 THEN PRINT AT 20,18;"HIT ANY KEY TO GO ON!": IF INKEY$="" THEN GO TO 1825: LET a=0: GO SUB 3990: GO SUB 4100: GO TO 1815
1826 IF INKEY$="x" THEN GO TO 1700
1827 IF k=j THEN GO TO 1700
1835 GO TO 1815
1850 PRINT AT 11,0;"NAME : ";l$(b);f$(b)
1855 PRINT AT 12,0;"ADDRESS : ";v$(b)
1860 PRINT AT 13,0;"CITY : ";c$(b): PRINT AT 13,20;"STATE : ";s$(b): PRINT AT 13,35;"ZIP : ";z$(b)
1865 PRINT AT 15,0;"PHONE NO. : (";p$(b,1 TO 3);")";p$(b,4 TO 6);"-";p$(b,7 TO 10)
1866 RETURN
1900 GO SUB 3800
1905 PRINT AT 1,30;"PRINTER UTILITIES"
1910 PRINT AT 3,40;"** MENU **"
1920 PRINT AT 5,35;"a. Copy Screen"
1925 PRINT AT 6,35;"b. Make labels"
1927 PRINT AT 7,35;"c. Leave this mode"
1928 LET y=0
1930 IF INKEY$="a" THEN COPY : GO SUB 3900: GO TO 1500
1932 IF INKEY$="b" THEN GO TO 1950
1933 IF INKEY$="c" THEN GO TO 1500
1939 GO TO 1930
1950 PRINT AT 20,22;"(A)ll or (J)ust one "
1955 IF INKEY$="a" THEN GO TO 1960
1956 IF INKEY$="j" THEN GO TO 1980
1957 GO TO 1955
1960 LET y=y+1: GO SUB 2000
1965 IF y=j THEN GO SUB 4100: GO TO 1900
1970 GO TO 1960
1980 GO SUB 4100: INPUT "Control number of person for label: ";y
1985 GO SUB 2000
1990 GO TO 1900
2000 LPRINT : LPRINT
2001 LPRINT l$(y);f$(y)
2002 LPRINT v$(y)
2003 LPRINT c$(y);s$(y);" ";z$(y)
2004 LPRINT : LPRINT
2005 RETURN
2010 INPUT "Enter month in the form (MM): ";m
2012 INPUT "Enter year in the form (YYYY): ";q
2014 IF m>12 OR m<1 OR d<1 OR d>31 THEN PRINT AT 20,0;" There are only 12 months in a year. Try again! ": FLASH 0: PAUSE 60: GO TO 2010
2015 DIM a$(10)
2020 IF m=1 THEN LET a$="January"
2021 IF m=2 THEN LET a$="February"
2022 IF m=3 THEN LET a$="March"
2023 IF m=4 THEN LET a$="April"
2024 IF m=5 THEN LET a$="May"
2025 IF m=6 THEN LET a$="June"
2026 IF m=7 THEN LET a$="July"
2027 IF m=8 THEN LET a$="August"
2028 IF m=9 THEN LET a$="September"
2029 IF m=10 THEN LET a$="October"
2030 IF m=11 THEN LET a$="November"
2031 IF m=12 THEN LET a$="December"
2035 LET m1=((m-1)*3)+1
2040 IF m<3 THEN LET f=365*(q+1)+d+31*(m-1)+INT ((q-1)/4)-INT (.75*(INT ((q-1)/100))+1): RETURN
2050 LET f=365*(q+1)+d+31*(m-1)-INT (.4*m+2.3)+INT (q/4)-INT (.75*INT (q/100)+1)
2500 RETURN
3000 CLS : GO SUB 3800
3003 LET w(1)=x: LET l(1)=j
3005 PRINT AT 1,30;"SAVING DATA"
3010 SAVE "a" DATA w()
3020 SAVE "b" DATA l()
3025 SAVE "c" DATA c()
3030 SAVE "d" DATA d()
3035 SAVE "e" DATA d$()
3040 SAVE "f" DATA t$()
3045 SAVE "g" DATA w$()
3050 SAVE "h" DATA b$()
3055 SAVE "i" DATA l$()
3060 SAVE "j" DATA f$()
3065 SAVE "k" DATA v$()
3070 SAVE "l" DATA c$()
3075 SAVE "m" DATA s$()
3080 SAVE "n" DATA z$()
3085 SAVE "o" DATA p$()
3087 GO SUB 3800
3090 GO TO 10
3500 CLS : GO SUB 3800: PRINT AT 1,30;"LOADING DATA"
3503 LOAD "a" DATA w()
3505 LOAD "b" DATA l()
3507 LOAD "c" DATA c()
3510 LOAD "d" DATA d()
3515 LOAD "e" DATA d$()
3520 LOAD "f" DATA t$()
3525 LOAD "g" DATA w$()
3530 LOAD "h" DATA b$()
3535 LOAD "i" DATA l$()
3540 LOAD "j" DATA f$()
3545 LOAD "k" DATA v$()
3550 LOAD "l" DATA c$()
3555 LOAD "m" DATA s$()
3560 LOAD "n" DATA z$()
3565 LOAD "o" DATA p$()
3568 LET x=w(1): LET j=l(1)
3570 GO SUB 3800
3799 GO TO 10
3800 FOR u=1 TO 7
3810 PRINT AT u,30;" "
3820 NEXT u
3830 RETURN
3900 FOR y=10 TO 17
3910 PRINT AT y,0;" "
3920 NEXT y
3930 RETURN
3990 PRINT AT 20,0;" ": RETURN
4000 LET v=v+1
4005 IF v>7 THEN PRINT AT 20,17;"Hit any key to see the rest": GO SUB 3990: GO SUB 4100: LET v=1
4010 PRINT AT 11+v,0;d$(h): PRINT AT 11+v,10;t$(h): PRINT AT 11+v,20;w$(h): PRINT AT 11+v,40;b$(h)
4020 RETURN
4100 PRINT AT 20,22;"© 1985 J&A Software ": RETURN
5200 BEEP .1,9: BEEP .1,3: PRINT AT 20,15;"IS THIS ENTRY CORRECT? (Y)ES OR (N)O"
5210 RETURN
5500 BEEP .1,9: BEEP .1,3: PRINT AT 20,15;"DO YOU HAVE ANYMORE ENTRIES?(Y)ES OR (N)O"
5510 RETURN
5 REM LINE
6 DIM w(1): DIM l(1)
7 LET x=0: LET h=0: LET j=0
8 DIM c(200): DIM d(200): DIM d$(200,2): DIM t$(200,5): DIM w$(200,15): DIM b$(200,24)
9 DIM l$(50,15): DIM f$(50,10): DIM v$(50,20): DIM c$(50,12): DIM s$(50,2): DIM z$(50,5): DIM p$(50,10)
10 PLOT 0,175
20 DRAW 255,0: DRAW 0,-75: DRAW -255,0: DRAW 0,75
30 PLOT 2,173
40 DRAW 109,0: DRAW 0,-71: DRAW -109,0: DRAW 0,71
120 PLOT 0,7: DRAW 255,0
125 PLOT 0,5: DRAW 255,0
130 PLOT 0,24: DRAW 255,0
140 PLOT 0,26: DRAW 255,0
145 POKE 65523,167
150 PRINT AT 19,25;"PERSONAL SECRETARY"
155 GO SUB 4100
160 LET d=1: GO SUB 2010
170 PRINT AT 1,5;a$
179 PRINT AT 1,21;q
180 PRINT AT 2,5;"SU MO TU WE TH FR SA"
184 LET dw=f-7*INT (f/7)
187 LET d=1: GO SUB 2040: LET f1=f
190 LET m=m+1: IF m>12 THEN LET q=q+1: LET m=1
192 GO SUB 2040: LET e=f-f1
195 LET i=0: LET n=0
200 LET p=21+dw*3
205 IF p>24 THEN LET p=p-21
210 FOR s=1 TO e
220 LET n=p+n
221 LET p=3
250 PRINT AT 3+i,n;s
252 IF s=9 THEN LET n=n-1
255 IF n>22 THEN LET i=i+1: LET n=n-21
260 NEXT s
265 PRINT AT 1,32;"APPOINTMENTS FOR THIS MONTH"
268 PRINT AT 3,40;"DAY: "
270 FOR r=1 TO 31
271 FOR h=1 TO x
275 IF c(h)=m AND d(h)=q AND VAL d$(h)=r THEN PRINT AT 3,48;" ": PRINT AT 3,48;r: PAUSE 8
279 NEXT h
280 NEXT r
289 GO SUB 3800
290 PRINT AT 1,37;"** MAIN MENU **"
300 PRINT AT 3,35;"1. Appointment menu"
305 PRINT AT 4,35;"2. Another calendar"
310 PRINT AT 5,35;"3. Phone numbers"
320 PRINT AT 6,35;"4. Save new entries"
325 PRINT AT 7,35;"5. Load your data"
326 BEEP .1,9: BEEP .1,3
330 IF INKEY$="1" THEN GO TO 400
335 IF INKEY$="2" THEN GO TO 1000
340 IF INKEY$="3" THEN GO TO 1500
345 IF INKEY$="4" THEN GO TO 3000
350 IF INKEY$="5" THEN GO TO 3500
352 IF INKEY$="x" THEN STOP
355 GO TO 330
400 GO SUB 3800
405 PRINT AT 1,30;"APPOINTMENT MODE"
410 PRINT AT 2,40;"** MENU **"
415 PRINT AT 4,35;"a. Enter appointments"
420 PRINT AT 5,35;"b. View appointments"
425 PRINT AT 6,35;"c. Copy Screen"
430 PRINT AT 7,35;"d. Main Menu"
435 IF INKEY$="a" THEN GO TO 450
436 IF INKEY$="b" THEN GO TO 650
437 IF INKEY$="c" THEN COPY : GO TO 400
438 IF INKEY$="d" THEN GO SUB 3800: GO SUB 3900: GO TO 290
440 GO TO 435
450 GO SUB 3800
455 PRINT AT 1,30;"Appointment entry"
459 LET x=x+1
460 PRINT AT 3,35;"This is appointment No."
465 PRINT AT 4,46;x
470 IF x>200 THEN PRINT AT 20,15;"You are only allowed 200 appointments": PAUSE 100: GO SUB 3990: GO SUB 4100: GO TO 400
473 GO SUB 475: GO TO 479
475 PRINT AT 10,0;"DAY": PRINT AT 10,10;"TIME": PRINT AT 10,20;"WITH WHOM": PRINT AT 10,40;"DISCRIPTION"
476 PLOT 0,87: DRAW 255,0
477 PLOT 0,85: DRAW 255,0: RETURN
479 POKE 23658,8
480 LET c(x)=m
485 LET d(x)=q
490 INPUT "Day of appointment :"; LINE d$(x)
495 INPUT "Time of appointment :"; LINE t$(x)
500 INPUT "Who is appointment with? "; LINE w$(x)
505 INPUT "Discription of appointment :"; LINE b$(x)
509 POKE 23658,0
510 LET v=0: LET h=x: GO SUB 4000
520 GO SUB 5200
525 IF INKEY$="y" THEN GO SUB 3990: GO SUB 4100: GO TO 550
530 IF INKEY$="n" THEN GO SUB 3900: GO SUB 3990: GO SUB 4100: GO SUB 475: GO TO 479
535 GO TO 525
550 GO SUB 5500
555 IF INKEY$="y" THEN GO SUB 3900: GO SUB 3990: GO SUB 4100: GO TO 459
560 IF INKEY$="n" THEN GO SUB 3900: GO SUB 3990: GO SUB 4100: GO TO 400
565 GO TO 555
649 STOP
650 GO SUB 3900: GO SUB 3800: PRINT AT 1,30;"VIEW APPOINTMENTS"
655 GO SUB 475
658 DIM a$(2,2): LET v=0
660 PRINT AT 3,35;"Which day do you want"
665 INPUT a$(1,1 TO 2)
670 FOR o=1 TO x
680 IF a$(1,1 TO 2)=d$(o,1 TO 2) AND m=c(o) AND q=d(o) THEN LET h=o: GO SUB 4000
690 NEXT o
700 PRINT AT 3,31;"That's all of the appointments"
710 PRINT AT 5,37;"Hit any key for menu"
720 IF INKEY$="" THEN GO TO 720: GO TO 900
900 GO SUB 3800: GO TO 400
999 STOP
1000 GO SUB 3800
1010 PRINT AT 1,30;"NEW CALENDAR MODE"
1020 FOR u=1 TO 8
1030 PRINT AT u,1;" "
1040 NEXT u
1050 GO SUB 2010
1055 GO SUB 3800
1060 GO TO 170
1500 GO SUB 3800
1505 PRINT AT 1,30;"PHONE NUMBERS"
1510 PRINT AT 2,40;"** MENU **"
1515 PRINT AT 4,35;"a. Enter Phone No.'s"
1520 PRINT AT 5,35;"b. View Phone No.'s"
1530 PRINT AT 6,35;"c. Printer Utilities"
1535 PRINT AT 7,35;"d. Main Menu"
1540 IF INKEY$="a" THEN GO SUB 3900: GO TO 1550
1541 IF INKEY$="b" THEN GO TO 1700
1542 IF INKEY$="c" THEN GO TO 1900
1543 IF INKEY$="d" THEN GO SUB 3900: GO SUB 3800: GO TO 290
1549 GO TO 1540
1550 GO SUB 3800
1555 PRINT AT 1,30;"Phone No. Entry"
1560 LET j=j+1
1565 PRINT AT 3,39;"This is Phone No.": PRINT AT 4,47;j
1569 POKE 23658,8
1570 INPUT "Persons Last Name: "; LINE l$(j)
1575 INPUT "Persons First Name: "; LINE f$(j)
1580 INPUT "Persons Address: "; LINE v$(j)
1585 INPUT "Persons City: "; LINE c$(j)
1590 INPUT "Persons State (2 Letters): "; LINE s$(j)
1595 INPUT "Zip Code: "; LINE z$(j)
1599 INPUT "Persons Phone Area Code: "; LINE p$(j,1 TO 3)
1600 INPUT "Phone Number: "; LINE p$(j,4 TO 10)
1605 POKE 23658,0
1610 LET b=j: GO SUB 1850
1620 GO SUB 5200
1625 IF INKEY$="y" THEN GO SUB 3990: GO SUB 4100: GO TO 1630
1626 IF INKEY$="n" THEN GO SUB 3900: GO SUB 3990: GO SUB 4100: GO TO 1565
1629 GO TO 1625
1630 GO SUB 5500
1635 IF INKEY$="y" THEN GO SUB 3900: GO SUB 3990: GO SUB 4100: GO TO 1560
1636 IF INKEY$="n" THEN GO SUB 3900: GO SUB 3990: GO SUB 4100: GO TO 1500
1639 GO TO 1635
1700 GO SUB 3800
1705 PRINT AT 1,30;"VIEW PHONE NO'S"
1710 PRINT AT 3,40;"** MENU **"
1715 PRINT AT 5,35;"a. Search for a number"
1720 PRINT AT 6,35;"b. Scan all numbers"
1723 PRINT AT 7,35;"c. Leave this Mode"
1725 IF INKEY$="a" THEN GO SUB 3900: GO TO 1730
1726 IF INKEY$="b" THEN GO SUB 3900: GO TO 1800
1727 IF INKEY$="c" THEN GO TO 1500
1729 GO TO 1725
1730 GO SUB 3800: GO SUB 3900
1735 PRINT AT 1,30;"Phone No. Search": PRINT AT 4,35;"Hit X to leave"
1740 DIM e$(1,15)
1744 POKE 23658,8
1745 INPUT "Enter Last Name of person : ";e$(1)
1746 POKE 23658,0
1747 IF e$(1)="x" THEN GO TO 1700
1749 LET k=0
1750 LET k=k+1
1755 IF l$(k)=e$(1) THEN LET b=k: GO SUB 1850: GO TO 1700
1760 IF k=j THEN GO TO 1700
1765 GO TO 1750
1800 GO SUB 3800: GO SUB 3900: PRINT AT 1,30;"Total scan of Phone No's": PRINT AT 4,35;"Hit X to leave"
1805 PRINT AT 10,0;"#": PRINT AT 10,5;"NAME": PRINT AT 10,40;"PHONE NO."
1806 PLOT 0,87: DRAW 255,0
1807 PLOT 0,85: DRAW 255,0
1810 LET k=0: LET a=0
1815 LET a=a+1
1818 LET k=k+1
1820 PRINT AT 11+a,0;k: PRINT AT 11+a,5;l$(k);f$(k): PRINT AT 11+a,40;"(";p$(k,1 TO 3);")";p$(k,4 TO 6);"-";p$(k,7 TO 10)
1825 IF a=6 THEN PRINT AT 20,18;"HIT ANY KEY TO GO ON!": IF INKEY$="" THEN GO TO 1825: LET a=0: GO SUB 3990: GO SUB 4100: GO TO 1815
1826 IF INKEY$="x" THEN GO TO 1700
1827 IF k=j THEN GO TO 1700
1835 GO TO 1815
1850 PRINT AT 11,0;"NAME : ";l$(b);f$(b)
1855 PRINT AT 12,0;"ADDRESS : ";v$(b)
1860 PRINT AT 13,0;"CITY : ";c$(b): PRINT AT 13,20;"STATE : ";s$(b): PRINT AT 13,35;"ZIP : ";z$(b)
1865 PRINT AT 15,0;"PHONE NO. : (";p$(b,1 TO 3);")";p$(b,4 TO 6);"-";p$(b,7 TO 10)
1866 RETURN
1900 GO SUB 3800
1905 PRINT AT 1,30;"PRINTER UTILITIES"
1910 PRINT AT 3,40;"** MENU **"
1920 PRINT AT 5,35;"a. Copy Screen"
1925 PRINT AT 6,35;"b. Make labels"
1927 PRINT AT 7,35;"c. Leave this mode"
1928 LET y=0
1930 IF INKEY$="a" THEN COPY : GO SUB 3900: GO TO 1500
1932 IF INKEY$="b" THEN GO TO 1950
1933 IF INKEY$="c" THEN GO TO 1500
1939 GO TO 1930
1950 PRINT AT 20,22;"(A)ll or (J)ust one "
1955 IF INKEY$="a" THEN GO TO 1960
1956 IF INKEY$="j" THEN GO TO 1980
1957 GO TO 1955
1960 LET y=y+1: GO SUB 2000
1965 IF y=j THEN GO SUB 4100: GO TO 1900
1970 GO TO 1960
1980 GO SUB 4100: INPUT "Control number of person for label: ";y
1985 GO SUB 2000
1990 GO TO 1900
2000 LPRINT : LPRINT
2001 LPRINT l$(y);f$(y)
2002 LPRINT v$(y)
2003 LPRINT c$(y);s$(y);" ";z$(y)
2004 LPRINT : LPRINT
2005 RETURN
2010 INPUT "Enter month in the form (MM): ";m
2012 INPUT "Enter year in the form (YYYY): ";q
2014 IF m>12 OR m<1 OR d<1 OR d>31 THEN PRINT AT 20,0;" There are only 12 months in a year. Try again! ": FLASH 0: PAUSE 60: GO TO 2010
2015 DIM a$(10)
2020 IF m=1 THEN LET a$="January"
2021 IF m=2 THEN LET a$="February"
2022 IF m=3 THEN LET a$="March"
2023 IF m=4 THEN LET a$="April"
2024 IF m=5 THEN LET a$="May"
2025 IF m=6 THEN LET a$="June"
2026 IF m=7 THEN LET a$="July"
2027 IF m=8 THEN LET a$="August"
2028 IF m=9 THEN LET a$="September"
2029 IF m=10 THEN LET a$="October"
2030 IF m=11 THEN LET a$="November"
2031 IF m=12 THEN LET a$="December"
2035 LET m1=((m-1)*3)+1
2040 IF m<3 THEN LET f=365*(q+1)+d+31*(m-1)+INT ((q-1)/4)-INT (.75*(INT ((q-1)/100))+1): RETURN
2050 LET f=365*(q+1)+d+31*(m-1)-INT (.4*m+2.3)+INT (q/4)-INT (.75*INT (q/100)+1)
2500 RETURN
3000 CLS : GO SUB 3800
3003 LET w(1)=x: LET l(1)=j
3005 PRINT AT 1,30;"SAVING DATA"
3010 SAVE "a" DATA w()
3020 SAVE "b" DATA l()
3025 SAVE "c" DATA c()
3030 SAVE "d" DATA d()
3035 SAVE "e" DATA d$()
3040 SAVE "f" DATA t$()
3045 SAVE "g" DATA w$()
3050 SAVE "h" DATA b$()
3055 SAVE "i" DATA l$()
3060 SAVE "j" DATA f$()
3065 SAVE "k" DATA v$()
3070 SAVE "l" DATA c$()
3075 SAVE "m" DATA s$()
3080 SAVE "n" DATA z$()
3085 SAVE "o" DATA p$()
3087 GO SUB 3800
3090 GO TO 10
3500 CLS : GO SUB 3800: PRINT AT 1,30;"LOADING DATA"
3503 LOAD "a" DATA w()
3505 LOAD "b" DATA l()
3507 LOAD "c" DATA c()
3510 LOAD "d" DATA d()
3515 LOAD "e" DATA d$()
3520 LOAD "f" DATA t$()
3525 LOAD "g" DATA w$()
3530 LOAD "h" DATA b$()
3535 LOAD "i" DATA l$()
3540 LOAD "j" DATA f$()
3545 LOAD "k" DATA v$()
3550 LOAD "l" DATA c$()
3555 LOAD "m" DATA s$()
3560 LOAD "n" DATA z$()
3565 LOAD "o" DATA p$()
3568 LET x=w(1): LET j=l(1)
3570 GO SUB 3800
3799 GO TO 10
3800 FOR u=1 TO 7
3810 PRINT AT u,30;" "
3820 NEXT u
3830 RETURN
3900 FOR y=10 TO 17
3910 PRINT AT y,0;" "
3920 NEXT y
3930 RETURN
3990 PRINT AT 20,0;" ": RETURN
4000 LET v=v+1
4005 IF v>7 THEN PRINT AT 20,17;"Hit any key to see the rest": GO SUB 3990: GO SUB 4100: LET v=1
4010 PRINT AT 11+v,0;d$(h): PRINT AT 11+v,10;t$(h): PRINT AT 11+v,20;w$(h): PRINT AT 11+v,40;b$(h)
4020 RETURN
4100 PRINT AT 20,22;"© 1985 J&A Software ": RETURN
5200 BEEP .1,9: BEEP .1,3: PRINT AT 20,15;"IS THIS ENTRY CORRECT? (Y)ES OR (N)O"
5210 RETURN
5500 BEEP .1,9: BEEP .1,3: PRINT AT 20,15;"DO YOU HAVE ANYMORE ENTRIES?(Y)ES OR (N)O"
5510 RETURN
5 REM LINE
6 DIM w(1): DIM l(1)
7 LET x=0: LET h=0: LET j=0
8 DIM c(200): DIM d(200): DIM d$(200,2): DIM t$(200,5): DIM w$(200,15): DIM b$(200,24)
9 DIM l$(50,15): DIM f$(50,10): DIM v$(50,20): DIM c$(50,12): DIM s$(50,2): DIM z$(50,5): DIM p$(50,10)
10 PLOT 0,175
20 DRAW 255,0: DRAW 0,-75: DRAW -255,0: DRAW 0,75
30 PLOT 2,173
40 DRAW 109,0: DRAW 0,-71: DRAW -109,0: DRAW 0,71
120 PLOT 0,7: DRAW 255,0
125 PLOT 0,5: DRAW 255,0
130 PLOT 0,24: DRAW 255,0
140 PLOT 0,26: DRAW 255,0
145 POKE 65523,167
150 PRINT AT 19,25;"PERSONAL SECRETARY"
155 GO SUB 4100
160 LET d=1: GO SUB 2010
170 PRINT AT 1,5;a$
179 PRINT AT 1,21;q
180 PRINT AT 2,5;"SU MO TU WE TH FR SA"
184 LET dw=f-7*INT (f/7)
187 LET d=1: GO SUB 2040: LET f1=f
190 LET m=m+1: IF m>12 THEN LET q=q+1: LET m=1
192 GO SUB 2040: LET e=f-f1
195 LET i=0: LET n=0
200 LET p=21+dw*3
205 IF p>24 THEN LET p=p-21
210 FOR s=1 TO e
220 LET n=p+n
221 LET p=3
250 PRINT AT 3+i,n;s
252 IF s=9 THEN LET n=n-1
255 IF n>22 THEN LET i=i+1: LET n=n-21
260 NEXT s
265 PRINT AT 1,32;"APPOINTMENTS FOR THIS MONTH"
268 PRINT AT 3,40;"DAY: "
270 FOR r=1 TO 31
271 FOR h=1 TO x
275 IF c(h)=m AND d(h)=q AND VAL d$(h)=r THEN PRINT AT 3,48;" ": PRINT AT 3,48;r: PAUSE 8
279 NEXT h
280 NEXT r
289 GO SUB 3800
290 PRINT AT 1,37;"** MAIN MENU **"
300 PRINT AT 3,35;"1. Appointment menu"
305 PRINT AT 4,35;"2. Another calendar"
310 PRINT AT 5,35;"3. Phone numbers"
320 PRINT AT 6,35;"4. Save new entries"
325 PRINT AT 7,35;"5. Load your data"
326 BEEP .1,9: BEEP .1,3
330 IF INKEY$="1" THEN GO TO 400
335 IF INKEY$="2" THEN GO TO 1000
340 IF INKEY$="3" THEN GO TO 1500
345 IF INKEY$="4" THEN GO TO 3000
350 IF INKEY$="5" THEN GO TO 3500
352 IF INKEY$="x" THEN STOP
355 GO TO 330
400 GO SUB 3800
405 PRINT AT 1,30;"APPOINTMENT MODE"
410 PRINT AT 2,40;"** MENU **"
415 PRINT AT 4,35;"a. Enter appointments"
420 PRINT AT 5,35;"b. View appointments"
425 PRINT AT 6,35;"c. Copy Screen"
430 PRINT AT 7,35;"d. Main Menu"
435 IF INKEY$="a" THEN GO TO 450
436 IF INKEY$="b" THEN GO TO 650
437 IF INKEY$="c" THEN COPY : GO TO 400
438 IF INKEY$="d" THEN GO SUB 3800: GO SUB 3900: GO TO 290
440 GO TO 435
450 GO SUB 3800
455 PRINT AT 1,30;"Appointment entry"
459 LET x=x+1
460 PRINT AT 3,35;"This is appointment No."
465 PRINT AT 4,46;x
470 IF x>200 THEN PRINT AT 20,15;"You are only allowed 200 appointments": PAUSE 100: GO SUB 3990: GO SUB 4100: GO TO 400
473 GO SUB 475: GO TO 479
475 PRINT AT 10,0;"DAY": PRINT AT 10,10;"TIME": PRINT AT 10,20;"WITH WHOM": PRINT AT 10,40;"DISCRIPTION"
476 PLOT 0,87: DRAW 255,0
477 PLOT 0,85: DRAW 255,0: RETURN
479 POKE 23658,8
480 LET c(x)=m
485 LET d(x)=q
490 INPUT "Day of appointment :"; LINE d$(x)
495 INPUT "Time of appointment :"; LINE t$(x)
500 INPUT "Who is appointment with? "; LINE w$(x)
505 INPUT "Discription of appointment :"; LINE b$(x)
509 POKE 23658,0
510 LET v=0: LET h=x: GO SUB 4000
520 GO SUB 5200
525 IF INKEY$="y" THEN GO SUB 3990: GO SUB 4100: GO TO 550
530 IF INKEY$="n" THEN GO SUB 3900: GO SUB 3990: GO SUB 4100: GO SUB 475: GO TO 479
535 GO TO 525
550 GO SUB 5500
555 IF INKEY$="y" THEN GO SUB 3900: GO SUB 3990: GO SUB 4100: GO TO 459
560 IF INKEY$="n" THEN GO SUB 3900: GO SUB 3990: GO SUB 4100: GO TO 400
565 GO TO 555
649 STOP
650 GO SUB 3900: GO SUB 3800: PRINT AT 1,30;"VIEW APPOINTMENTS"
655 GO SUB 475
658 DIM a$(2,2): LET v=0
660 PRINT AT 3,35;"Which day do you want"
665 INPUT a$(1,1 TO 2)
670 FOR o=1 TO x
680 IF a$(1,1 TO 2)=d$(o,1 TO 2) AND m=c(o) AND q=d(o) THEN LET h=o: GO SUB 4000
690 NEXT o
700 PRINT AT 3,31;"That's all of the appointments"
710 PRINT AT 5,37;"Hit any key for menu"
720 IF INKEY$="" THEN GO TO 720: GO TO 900
900 GO SUB 3800: GO TO 400
999 STOP
1000 GO SUB 3800
1010 PRINT AT 1,30;"NEW CALENDAR MODE"
1020 FOR u=1 TO 8
1030 PRINT AT u,1;" "
1040 NEXT u
1050 GO SUB 2010
1055 GO SUB 3800
1060 GO TO 170
1500 GO SUB 3800
1505 PRINT AT 1,30;"PHONE NUMBERS"
1510 PRINT AT 2,40;"** MENU **"
1515 PRINT AT 4,35;"a. Enter Phone No.'s"
1520 PRINT AT 5,35;"b. View Phone No.'s"
1530 PRINT AT 6,35;"c. Printer Utilities"
1535 PRINT AT 7,35;"d. Main Menu"
1540 IF INKEY$="a" THEN GO SUB 3900: GO TO 1550
1541 IF INKEY$="b" THEN GO TO 1700
1542 IF INKEY$="c" THEN GO TO 1900
1543 IF INKEY$="d" THEN GO SUB 3900: GO SUB 3800: GO TO 290
1549 GO TO 1540
1550 GO SUB 3800
1555 PRINT AT 1,30;"Phone No. Entry"
1560 LET j=j+1
1565 PRINT AT 3,39;"This is Phone No.": PRINT AT 4,47;j
1569 POKE 23658,8
1570 INPUT "Persons Last Name: "; LINE l$(j)
1575 INPUT "Persons First Name: "; LINE f$(j)
1580 INPUT "Persons Address: "; LINE v$(j)
1585 INPUT "Persons City: "; LINE c$(j)
1590 INPUT "Persons State (2 Letters): "; LINE s$(j)
1595 INPUT "Zip Code: "; LINE z$(j)
1599 INPUT "Persons Phone Area Code: "; LINE p$(j,1 TO 3)
1600 INPUT "Phone Number: "; LINE p$(j,4 TO 10)
1605 POKE 23658,0
1610 LET b=j: GO SUB 1850
1620 GO SUB 5200
1625 IF INKEY$="y" THEN GO SUB 3990: GO SUB 4100: GO TO 1630
1626 IF INKEY$="n" THEN GO SUB 3900: GO SUB 3990: GO SUB 4100: GO TO 1565
1629 GO TO 1625
1630 GO SUB 5500
1635 IF INKEY$="y" THEN GO SUB 3900: GO SUB 3990: GO SUB 4100: GO TO 1560
1636 IF INKEY$="n" THEN GO SUB 3900: GO SUB 3990: GO SUB 4100: GO TO 1500
1639 GO TO 1635
1700 GO SUB 3800
1705 PRINT AT 1,30;"VIEW PHONE NO'S"
1710 PRINT AT 3,40;"** MENU **"
1715 PRINT AT 5,35;"a. Search for a number"
1720 PRINT AT 6,35;"b. Scan all numbers"
1723 PRINT AT 7,35;"c. Leave this Mode"
1725 IF INKEY$="a" THEN GO SUB 3900: GO TO 1730
1726 IF INKEY$="b" THEN GO SUB 3900: GO TO 1800
1727 IF INKEY$="c" THEN GO TO 1500
1729 GO TO 1725
1730 GO SUB 3800: GO SUB 3900
1735 PRINT AT 1,30;"Phone No. Search": PRINT AT 4,35;"Hit X to leave"
1740 DIM e$(1,15)
1744 POKE 23658,8
1745 INPUT "Enter Last Name of person : ";e$(1)
1746 POKE 23658,0
1747 IF e$(1)="x" THEN GO TO 1700
1749 LET k=0
1750 LET k=k+1
1755 IF l$(k)=e$(1) THEN LET b=k: GO SUB 1850: GO TO 1700
1760 IF k=j THEN GO TO 1700
1765 GO TO 1750
1800 GO SUB 3800: GO SUB 3900: PRINT AT 1,30;"Total scan of Phone No's": PRINT AT 4,35;"Hit X to leave"
1805 PRINT AT 10,0;"#": PRINT AT 10,5;"NAME": PRINT AT 10,40;"PHONE NO."
1806 PLOT 0,87: DRAW 255,0
1807 PLOT 0,85: DRAW 255,0
1810 LET k=0: LET a=0
1815 LET a=a+1
1818 LET k=k+1
1820 PRINT AT 11+a,0;k: PRINT AT 11+a,5;l$(k);f$(k): PRINT AT 11+a,40;"(";p$(k,1 TO 3);")";p$(k,4 TO 6);"-";p$(k,7 TO 10)
1825 IF a=6 THEN PRINT AT 20,18;"HIT ANY KEY TO GO ON!": IF INKEY$="" THEN GO TO 1825: LET a=0: GO SUB 3990: GO SUB 4100: GO TO 1815
1826 IF INKEY$="x" THEN GO TO 1700
1827 IF k=j THEN GO TO 1700
1835 GO TO 1815
1850 PRINT AT 11,0;"NAME : ";l$(b);f$(b)
1855 PRINT AT 12,0;"ADDRESS : ";v$(b)
1860 PRINT AT 13,0;"CITY : ";c$(b): PRINT AT 13,20;"STATE : ";s$(b): PRINT AT 13,35;"ZIP : ";z$(b)
1865 PRINT AT 15,0;"PHONE NO. : (";p$(b,1 TO 3);")";p$(b,4 TO 6);"-";p$(b,7 TO 10)
1866 RETURN
1900 GO SUB 3800
1905 PRINT AT 1,30;"PRINTER UTILITIES"
1910 PRINT AT 3,40;"** MENU **"
1920 PRINT AT 5,35;"a. Copy Screen"
1925 PRINT AT 6,35;"b. Make labels"
1927 PRINT AT 7,35;"c. Leave this mode"
1928 LET y=0
1930 IF INKEY$="a" THEN COPY : GO SUB 3900: GO TO 1500
1932 IF INKEY$="b" THEN GO TO 1950
1933 IF INKEY$="c" THEN GO TO 1500
1939 GO TO 1930
1950 PRINT AT 20,22;"(A)ll or (J)ust one "
1955 IF INKEY$="a" THEN GO TO 1960
1956 IF INKEY$="j" THEN GO TO 1980
1957 GO TO 1955
1960 LET y=y+1: GO SUB 2000
1965 IF y=j THEN GO SUB 4100: GO TO 1900
1970 GO TO 1960
1980 GO SUB 4100: INPUT "Control number of person for label: ";y
1985 GO SUB 2000
1990 GO TO 1900
2000 LPRINT : LPRINT
2001 LPRINT l$(y);f$(y)
2002 LPRINT v$(y)
2003 LPRINT c$(y);s$(y);" ";z$(y)
2004 LPRINT : LPRINT
2005 RETURN
2010 INPUT "Enter month in the form (MM): ";m
2012 INPUT "Enter year in the form (YYYY): ";q
2014 IF m>12 OR m<1 OR d<1 OR d>31 THEN PRINT AT 20,0;" There are only 12 months in a year. Try again! ": FLASH 0: PAUSE 60: GO TO 2010
2015 DIM a$(10)
2020 IF m=1 THEN LET a$="January"
2021 IF m=2 THEN LET a$="February"
2022 IF m=3 THEN LET a$="March"
2023 IF m=4 THEN LET a$="April"
2024 IF m=5 THEN LET a$="May"
2025 IF m=6 THEN LET a$="June"
2026 IF m=7 THEN LET a$="July"
2027 IF m=8 THEN LET a$="August"
2028 IF m=9 THEN LET a$="September"
2029 IF m=10 THEN LET a$="October"
2030 IF m=11 THEN LET a$="November"
2031 IF m=12 THEN LET a$="December"
2035 LET m1=((m-1)*3)+1
2040 IF m<3 THEN LET f=365*(q+1)+d+31*(m-1)+INT ((q-1)/4)-INT (.75*(INT ((q-1)/100))+1): RETURN
2050 LET f=365*(q+1)+d+31*(m-1)-INT (.4*m+2.3)+INT (q/4)-INT (.75*INT (q/100)+1)
2500 RETURN
3000 CLS : GO SUB 3800
3003 LET w(1)=x: LET l(1)=j
3005 PRINT AT 1,30;"SAVING DATA"
3010 SAVE "a" DATA w()
3020 SAVE "b" DATA l()
3025 SAVE "c" DATA c()
3030 SAVE "d" DATA d()
3035 SAVE "e" DATA d$()
3040 SAVE "f" DATA t$()
3045 SAVE "g" DATA w$()
3050 SAVE "h" DATA b$()
3055 SAVE "i" DATA l$()
3060 SAVE "j" DATA f$()
3065 SAVE "k" DATA v$()
3070 SAVE "l" DATA c$()
3075 SAVE "m" DATA s$()
3080 SAVE "n" DATA z$()
3085 SAVE "o" DATA p$()
3087 GO SUB 3800
3090 GO TO 10
3500 CLS : GO SUB 3800: PRINT AT 1,30;"LOADING DATA"
3503 LOAD "a" DATA w()
3505 LOAD "b" DATA l()
3507 LOAD "c" DATA c()
3510 LOAD "d" DATA d()
3515 LOAD "e" DATA d$()
3520 LOAD "f" DATA t$()
3525 LOAD "g" DATA w$()
3530 LOAD "h" DATA b$()
3535 LOAD "i" DATA l$()
3540 LOAD "j" DATA f$()
3545 LOAD "k" DATA v$()
3550 LOAD "l" DATA c$()
3555 LOAD "m" DATA s$()
3560 LOAD "n" DATA z$()
3565 LOAD "o" DATA p$()
3568 LET x=w(1): LET j=l(1)
3570 GO SUB 3800
3799 GO TO 10
3800 FOR u=1 TO 7
3810 PRINT AT u,30;" "
3820 NEXT u
3830 RETURN
3900 FOR y=10 TO 17
3910 PRINT AT y,0;" "
3920 NEXT y
3930 RETURN
3990 PRINT AT 20,0;" ": RETURN
4000 LET v=v+1
4005 IF v>7 THEN PRINT AT 20,17;"Hit any key to see the rest": GO SUB 3990: GO SUB 4100: LET v=1
4010 PRINT AT 11+v,0;d$(h): PRINT AT 11+v,10;t$(h): PRINT AT 11+v,20;w$(h): PRINT AT 11+v,40;b$(h)
4020 RETURN
4100 PRINT AT 20,22;"© 1985 J&A Software ": RETURN
5200 BEEP .1,9: BEEP .1,3: PRINT AT 20,15;"IS THIS ENTRY CORRECT? (Y)ES OR (N)O"
5210 RETURN
5500 BEEP .1,9: BEEP .1,3: PRINT AT 20,15;"DO YOU HAVE ANYMORE ENTRIES?(Y)ES OR (N)O"
5510 RETURN
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

