0100 ' The lines numbered 0100 thru 0166 MUST NOT BE ALTERED OR REMOVED! 0102 ' Enjoy this most useful little software offering! This program is 0104 ' copyrighted, but it may be distributed in any media, provided that: 0106 ' 0108 ' 1. You do not alter or remove the REM statements out of the 0110 ' source code or alter the documentation in any way. 0112 ' That you include BOTH answer2.bas + answer2.doc in whatever 0114 ' media is chosen for distribution. 0116 ' 0118 ' 2. You do not DISTRIBUTE a modified version of this code. If you MUST 0120 ' modify the software,... use the accepted practice of creating a 0122 ' MERGE file to contain your changes. In this way... any bugs which 0124 ' are fixed or new feature which are to be included can be done in a 0126 ' reasonably maintainable fashion. 0128 ' 0130 ' 3. Charge no fees for the distribution of this software beyond the 0132 ' minimal charge ($4 maximum) for a distribution diskette. 0134 ' If other programs are included on the diskette, do not charge 0136 ' more than once for the distribution diskette. 0138 ' 0140 ' 0142 ' If you would like to receive free updates of the program, 0144 ' send a donation ($20 is suggested for private use, $20 minimum for 0146 ' commercial or corporate usage is mandatory) to: 0148 ' 0150 ' Mike Sirmans 0152 ' 4022 Tanglewood Rd. 0154 ' Snellville, GA 30278 0156 ' Call: ZAP!-BBS (404) 972-3458 0158 ' Supporting ASCII & XMODEM downloads 0160 ' at 2400/1200/300 baud 24-hrs/day 0162 ' 0164 ' (C) Copyright 1985 by Mike Sirmans, ALL RIGHTS RESERVED. 0166 ' 1000 CLEAR:CLS:DEFINT A-Z:DEF SEG 1020 SYS$="MIKE":NM$="ZAP!-BBS":CP$="COM1":BA$="300":PW$="PASSWRD" 1021 REM 1022 REM CHANGE THE DATA IN THE LINE ABOVE TO SUIT YOUR TASTES ... 1023 REM 1024 REM SYS$ = System operator's FIRST name. 1025 REM NM$ = Name of this system. (printed as: WELCOME TO ....... ) 1026 REM CP$ = Communications port. Must be COM1 or COM2 1027 REM BA$ = Open the communication port at this baud rate. 1028 REM PW$ = Your REMOTE password list your messages (must be UPPER-case) 1029 REM 1030 SD$="ATM0Q1S2=255S10=30S0=0" 1040 CLS:KEY OFF:PR=1:LCL=0:UPD=1:UC=0:LOCATE ,,0 1060 ON ERROR GOTO 6080 1080 LOCATE 5,24:PRINT "ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ" 1100 LOCATE 6,24:PRINT "Ý Þ" 1120 LOCATE 7,24:PRINT "Ý °±²²² the ELECTRONIC ²²²±° Þ" 1140 LOCATE 8,24:PRINT "Ý °±²²² ANSWERING MACHINE ²²²±° Þ" 1160 LOCATE 9,24:PRINT "Ý Þ" 1180 LOCATE 10,24:PRINT "Ý Original concept by: Sean Nolan Þ" 1200 LOCATE 11,24:PRINT "Ý Þ" 1220 LOCATE 12,24:PRINT "Ý Re-written by Mike Sirmans Þ" 1240 LOCATE 13,24:PRINT "Ý Sysop: ZAP!-BBS Atlanta, GA Þ" 1260 LOCATE 14,24:PRINT "Ý (404) 972-3458 24-hrs/day Þ" 1280 LOCATE 15,24:PRINT "Ý Þ" 1300 LOCATE 16,24:PRINT "ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß" 1310 LOCATE 22,13:PRINT "(C) Copyright 1985 by Mike Sirmans, ALL RIGHTS RESERVED." 1320 DEF FNTI!=CSNG(FIX((VAL(MID$(TIME$,1,2))*60*60)+(VAL(MID$(TIME$,4,2))*60)+(VAL(MID$(TIME$,7,2))*1))):DEF FNBL$="BLK"+RIGHT$("0000"+RIGHT$(STR$(BLK),LEN(STR$(BLK))-1),5) 1340 DEF FNS$(A1$,A)=A1$+SPACE$(A-LEN(A1$)) 1360 BK$=CHR$(8)+CHR$(32)+CHR$(8):BK1$=CHR$(29)+CHR$(32)+CHR$(29) 1380 IF CP$="COM2" THEN LSB=&H2F8:MSB=&H2F9:LCR=&H2FB:MCR=&H2FC:LSR=&H2FD:MSR=&H2FE ELSE LSB=&H3F8:MSB=&H3F9:LCR=&H3FB:MCR=&H3FC:LSR=&H3FD:MSR=&H3FE 1400 OPEN "I",2,"ANSWER.DEF":INPUT #2,BP$,CH$,NUM,MUN:CLOSE #2 1420 KEY 1,"":KEY (1) ON:ON KEY(1) GOSUB 6200 1440 KEY 2,"":KEY (2) ON:ON KEY(2) GOSUB 6300 1460 KEY 3,"":KEY (3) ON:ON KEY(3) GOSUB 6260 1480 KEY 4,"":KEY (4) ON:ON KEY(4) GOSUB 6280 1500 DIM LI$(100):M$=CHR$(10)+CHR$(13) 1540 REM 1560 REM ------------------- BEGINNING OF PROGRAM LOGIC -------------------- 1580 REM 1600 IF INP(MSR)<128 THEN OUT MCR,&H4:GOSUB 6460:OUT MCR,&H0 1620 CLOSE:OPEN CP$+":"+BA$+",N,8,1,RS,CD,DS" AS #3 1640 PR=0:A$="ATZ":GOSUB 6500:GOSUB 6460:A$=SD$:GOSUB 6500:PR=1 1660 CLS 1680 LOCATE 17,24:PRINT "°±²²² the ELECTRONIC ²²²±°" 1700 LOCATE 18,24:PRINT "°±²²² ANSWERING MACHINE ²²²±°" 1720 LOCATE 22,13:PRINT "(C) Copyright 1985 by Mike Sirmans, ALL RIGHTS RESERVED." 1740 LOCATE 3,24 1760 PRINT "STANDBY..."; 1780 UPD=0:GOSUB 6660:UPD=1 1788 LOCATE 3,24 1790 PRINT "Ready at ";TIME$;" on ";DATE$; 1800 WE$=INKEY$ 1820 IF WE$="X" OR WE$="x" THEN LOCATE 22,13:PRINT " PROGRAM TERMINATED... ":SYSTEM:END 1840 IF WE$="L" OR WE$="l" THEN 2000 1850 IF WE$="R" OR WE$="r" THEN GOSUB 6350 1860 IF(INP(MSR)AND &H40)=0 THEN GOTO 1800 1880 REM ----------------------------------------------------------------- 1900 PR=0:A$="ATQ0X1V1A":GOSUB 6500:TCC!=FNTI!+30:DF$="":PR=1 1920 IF INP(MSR)<128 AND FNTI!0 THEN DF$=DF$+INPUT$(LOC(3),3) ELSE 1965 1960 IF INSTR(DF$,"CONNECT") THEN QQ=VAL(MID$(DF$,INSTR(DF$,"CONNECT")+8,4)):GOTO 2020 1965 IF FNTI!=>TCC! THEN 2740 ELSE 1920 1980 REM ----------------------------------------------------------------- 2000 PR=0:A$="ATQ1E1H1M0":GOSUB 6500:CLOSE #3:PR=1:LCL=1:GOTO 2040 2020 GOSUB 21280:IF QQ=0 OR QQ=300 THEN Q=&H180:BPS=-1:GOSUB 11654 ELSE IF QQ=1200 OR QQ=2400 THEN BPS=-2-(QQ/1200):Q=48*(BPS+5):GOSUB 11654 ELSE 1940 2040 CLS:CNCT=1 2060 A$="WELCOME TO "+NM$+CHR$(10)+CHR$(13):GOSUB 6500 2070 M$=CHR$(13) 2080 IF LCL=1 THEN 2220 2090 MUN=MUN+1:GOSUB 6970 2100 GOSUB 6340:GOSUB 6460 2120 PRINT "Do you need linefeeds (Y/N) ? "; 2140 PRINT #3,"Do you need linefeeds (Y/N) ? "; 2160 GOSUB 5720 2180 IF LEFT$(B$,1)="n" OR LEFT$(B$,1)="N" THEN 2201 2200 M$=CHR$(10)+CHR$(13) 2201 PRINT M$+"Enter your REAL First Name: "; 2202 PRINT #3,M$+"Enter your REAL First Name: "; 2203 UC=1:GOSUB 5720:UC=0:FR1$=B$ 2204 PRINT "Enter your REAL Last Name: "; 2205 PRINT #3,"Enter your REAL Last Name: "; 2206 UC=1:GOSUB 5720:UC=0:FR2$=B$ 2207 PRINT M$+"Your name is - ";FR1$;" ";FR2$;" ...right ? "; 2208 PRINT #3,M$+"Your name is - ";FR1$;" ";FR2$;" ...right ? "; 2209 GOSUB 5720 2210 IF LEFT$(B$,1)="y" OR LEFT$(B$,1)="Y" THEN 2212 2211 A$=M$+M$:GOSUB 6500:GOTO 2201 2212 OPEN "MESSAGES" FOR APPEND AS #2 2213 PRINT #2, STRING$(50,"-");CHR$(13);CHR$(10); 2214 PRINT #2, DATE$;" ";TIME$;" Caller #";MUN;" ... "FR1$;" ";FR2$;CHR$(13);CHR$(10); 2215 CLOSE #2 2220 A$=M$:GOSUB 6500 2240 OPEN "OUTMSG" FOR INPUT AS #2 2260 WHILE NOT EOF(2) 2280 A$=INPUT$(1,#2) 2300 IF A$=CHR$(8) THEN GOSUB 3340:GOTO 2380 2320 IF A$=CHR$(10) THEN 2380 2340 IF A$=CHR$(13) THEN PRINT:IF LCL=0 THEN PRINT #3,M$;:GOTO 2380 ELSE GOTO 2380 2360 PRINT A$;:IF LCL=0 THEN PRINT #3,A$; 2380 WEND 2400 CLOSE #2 2420 A$=M$:GOSUB 6500 2440 A$="Main functions":GOSUB 6500 2460 PRINT "E)nter msg O)perator page G)oodbye ?)Help : "; 2480 IF LCL=0 THEN PRINT #3,"E)nter msg O)perator page G)oodbye ?)Help : "; 2500 GOSUB 5720 2520 C$=LEFT$(B$,1) 2540 IF C$="E" OR C$="e" THEN 3580 2560 IF C$="O" OR C$="o" THEN 2820 2580 IF C$="G" OR C$="g" THEN 2680 2600 IF C$="~" THEN 4920 2620 IF C$="?" THEN 3460 2640 A$="Invalid command!":GOSUB 6500 2660 GOTO 2420 2680 CLOSE #2 2685 A$=M$:GOSUB 6500 2690 OPEN "BYEMSG" FOR INPUT AS #2 2695 WHILE NOT EOF(2) 2700 A$=INPUT$(1,#2) 2705 IF A$=CHR$(8) THEN GOSUB 3340:GOTO 2725 2710 IF A$=CHR$(10) THEN 2725 2715 IF A$=CHR$(13) THEN PRINT:IF LCL=0 THEN PRINT #3,M$;:GOTO 2725 ELSE GOTO 2725 2720 PRINT A$;:IF LCL=0 THEN PRINT #3,A$; 2725 WEND 2730 CLOSE #2:FOR I=1 TO 2:GOSUB 6460:NEXT I 2740 CLOSE #3:GOTO 1000 2750 ' 2820 IF CH$="ON " THEN 2880 2840 A$=M$+"Sorry, "+SYS$+" isn't around right now. Try again later...":GOSUB 6500 2860 GOTO 2420 2880 A$=M$+"Please, stand by.":GOSUB 6500 2900 PRINT "Paging SYSOP ";:IF LCL=0 THEN PRINT #3,"Paging SYSOP "; 2920 A$="." 2940 FOR E=1 TO 30 2960 PRINT A$;:IF LCL=0 THEN PRINT #3,A$; 2980 IF BP$="ON " THEN BEEP 3000 GOSUB 6460 3020 NEXT E 3040 A$=M$+"Sorry, "+SYS$+" just doesn't seem to be around at the moment...":GOSUB 6500 3060 A$="Until then, just leave a message if you will..."+M$:GOSUB 6500 3080 GOTO 2420 3100 IF LCL=1 THEN PRINT M$+"CHAT is not supported in LOCAL-mode !":GOSUB 6460:GOTO 2420 3110 A$=M$+"*** ATTENTION *** Sysop is ONLINE !"+M$:GOSUB 6500 3120 LOCATE ,,1 3121 REM 3122 REM ------------- CHAT SUPPORT ROUTINE --------------- 3123 REM 3130 WHILE EOF(3) 3131 IF POS(0)>79 THEN PRINT:PRINT #3,M$;:GOTO 3130 3132 A$=INKEY$:IF LEN(A$)>1 THEN GOSUB 6340:GOTO 3130 3138 IF A$=CHR$(8) OR A$=CHR$(7) OR A$=CHR$(26) OR A$=CHR$(227) OR A$=CHR$(127) THEN 3200 ELSE IF A$=CHR$(27) THEN 3400 3140 IF A$=CHR$(13) AND LCL=0 THEN PRINT:PRINT#3,M$;:GOTO 3130 3150 IF A$<>"" THEN 3190 3160 WEND 3180 A$=INPUT$(1,3):IF A$=CHR$(8) OR A$=CHR$(7) OR A$=CHR$(26) OR A$=CHR$(227) THEN 3200 3185 IF A$=CHR$(13) THEN PRINT:PRINT #3,M$;:GOTO 3130 3190 PRINT A$;:PRINT #3,A$;:GOTO 3130 3200 GOSUB 3340:GOTO 3130 3290 REM 3291 REM ------------- END OF CHAT ROUTINE ---------------- 3292 REM 3340 IF POS(0)>1 THEN PRINT BK1$;:IF LCL=0 THEN PRINT#3,BK$; 3360 RETURN 3400 A$=M$+M$+"CHAT terminated...":GOSUB 6500 3420 LOCATE ,,0 3440 GOTO 2420 3460 A$=M$+"Help !!!"+M$:GOSUB 6500 3480 A$="E)nter ........... You can enter a message to operator":GOSUB 6500 3500 A$="O)perator page ... See if "+SYS$+"'s available to CHAT":GOSUB 6500 3520 A$="G)oodbye ......... Logoff system":GOSUB 6500 3540 A$="?)Help ........... This help file":GOSUB 6500 3560 GOTO 2420 3580 A$=M$+"Enter a message to Sysop"+M$:GOSUB 6500 3600 FOR I=1 TO 60 3620 LI$(I)="" 'clear out dim-array 3640 NEXT 3760 A$=M$+"Enter YOUR message here... you are limited to a maximum of 60 lines.":GOSUB 6500 3780 A$="IMPORTANT! Enter a NULL (blank) line to END-message entry."+M$:GOSUB 6500 3800 L=1:UC=0 3820 IF L=60 THEN LI$(L)="***END***":GOTO 3940 3840 PRINT ">";:IF LCL=0 THEN PRINT #3,">"; 3860 GOSUB 5720 3880 IF B$="" THEN LI$(L)="***END***":GOTO 3940 3900 LI$(L)=B$ 3920 L=L+1:GOTO 3820 3940 A$=M$+"Editing Subfunction":GOSUB 6500 3960 PRINT "E)dit, L)ist, C)ontinue, N)ew, A)bort, S)ave, ?)Help : "; 3980 IF LCL=0 THEN PRINT #3, "E)dit, L)ist, C)ontinue, N)ew, A)bort, S)ave, ?)Help : "; 4000 GOSUB 5720 4020 C$=LEFT$(B$,1) 4060 IF C$="E" OR C$="e" THEN 4720 4080 IF C$="L" OR C$="l" THEN 4580 4100 IF C$="C" OR C$="c" THEN 3820 4120 IF C$="N" OR C$="n" THEN 3580 4140 IF C$="A" OR C$="a" THEN 2420 4160 IF C$="S" OR C$="s" THEN 4380 4170 IF C$="?" THEN 4200 4180 A$="Invalid command!":GOSUB 6500 4190 GOTO 3940 4200 A$=M$+"Help (again) !!!"+M$:GOSUB 6500 4220 A$="E)dit ....... Allows you to make changes & fix message":GOSUB 6500 4240 A$="L)ist ....... Print message back to you so you can REVIEW it":GOSUB 6500 4260 A$="C)ontinue ... Allows you to continue to add lines to message":GOSUB 6500 4280 A$="N)ew ........ Start over":GOSUB 6500 4300 A$="A)bort ...... Zap message & quit":GOSUB 6500 4320 A$="S)ave ....... write message to file for SYSOP":GOSUB 6500 4340 A$="?)Help ...... This file"+M$:GOSUB 6500 4360 GOTO 3940 4380 L=1 4400 OPEN "MESSAGES" FOR APPEND AS #2 4420 PRINT #2, CHR$(13);CHR$(10); 4440 IF LI$(L)="***END***" THEN 4500 4460 PRINT #2, LI$(L);CHR$(13);CHR$(10); 4480 L=L+1:GOTO 4440 4500 CLOSE #2 4520 A$=M$+"Message saved":GOSUB 6500 4540 NUM=NUM+1:GOSUB 6970 4560 GOTO 2420 4580 L=1 4600 IF LI$(L)="***END***" THEN 4680 4620 FM$=STR$(L) 4640 A$=FM$+":"+LI$(L):GOSUB 6500 4660 L=L+1:GOTO 4600 4680 A$=M$:GOSUB 6500 4700 GOTO 3940 4720 PRINT M$+"Enter line number to EDIT or... Q to quit : "; 4740 IF LCL=0 THEN PRINT #3,M$+"Enter line number to EDIT or... Q to quit : "; 4760 GOSUB 5720 4780 IF LEFT$(B$,1)="Q" OR LEFT$(B$,1)="q" THEN 3940 4800 PL=VAL(B$) 4820 A$=">"+LI$(PL):GOSUB 6500 4840 PRINT ">";:IF LCL=0 THEN PRINT #3,">"; 4860 GOSUB 5720 4880 LI$(PL)=B$ 4900 GOTO 4720 4920 A$=M$+"---------------------":GOSUB 6500 4940 A$= " LIST MESSAGE FILE ":GOSUB 6500 4960 A$= "---------------------"+M$:GOSUB 6500 4980 PRINT"Enter YOUR access code: ";:IF LCL=0 THEN PRINT #3,"Enter YOUR access code: "; 5000 UC=-1:GOSUB 5720:UC=0 5020 IF B$=PW$ THEN 5060 5040 A$="AUTHORIZATION FAILURE"+M$:GOSUB 6500:GOTO 2420 5060 OPEN "MESSAGES" FOR INPUT AS #2:GOTO 5200 5080 A$=M$+"Sorry, no MESSAGES at this time.":GOSUB 6500:GOTO 2420 5200 A$=M$+"Press to stop/start, to quit"+M$:GOSUB 6500:PA=1 5210 TCC!=FNTI!+180 5220 WHILE NOT EOF(2) 5240 IF LCL=1 THEN 5300 5250 IF EOF(3) THEN 5300 5260 UU$=LEFT$(INPUT$(LOC(3),#3),1) 5280 IF UU$=" " THEN GOSUB 5699:GOTO 5240 5290 IF UU$=CHR$(27) THEN 5660 5300 YY$=INKEY$ 5320 IF YY$=" " THEN GOSUB 5699:GOTO 5240 5340 IF YY$=CHR$(27) THEN 5660 5400 IF PA=0 THEN 5440 5420 IF FNTI!"+M$:GOSUB 6500:GOTO 2420 5699 TCC!=FNTI!+180:IF PA=0 THEN PA=1:RETURN ELSE PA=0:RETURN 5700 REM 5710 REM ---------- FETCH RESPONSE (TIMES OUT IN 3-MINUTES) ---------- 5712 REM 5720 B$="":TCC!=FNTI!+180:LOCATE ,,1 5725 IF LCL=1 THEN 5740 5730 IF EOF(3) THEN 5740 5735 A$=INPUT$(LOC(3),3):GOSUB 6440:GOTO 5730 5740 A$="" 5760 IF LCL=1 THEN 5800 5762 IF(INP(MSR)AND &H80)=0 THEN 1000 5770 IF EOF(3) THEN 5800 5780 IF LOC(3)<>0 THEN A$=INPUT$(1,#3) 5800 Y$=INKEY$:IF Y$<>"" THEN A$=Y$ 5810 IF A$="" THEN 5980 5812 TCC!=FNTI!+180 5820 IF A$=CHR$(8) AND LEN(B$)=0 THEN 5980 5840 IF A$=CHR$(8) THEN B$=LEFT$(B$,LEN(B$)-1):GOSUB 3340:GOTO 5980 5860 IF A$=CHR$(10) THEN 5980 5880 IF A$=CHR$(13) THEN 6020 5900 IF UC<>0 THEN IF (ASC(A$)>96) AND (ASC(A$)<123) THEN A$=CHR$(ASC(A$)-32) 5920 IF LEN(B$)>77 AND LCL=0 THEN PRINT #3,CHR$(7);:GOTO 5980 5940 B$=B$+A$ 5960 IF UC=-1 THEN A$="." 5970 PRINT A$;:IF LCL=0 THEN PRINT #3,A$; 5980 IF FNTI! to toggle CHAT... chat is ";CH$ 6700 LOCATE 6,24 6720 PRINT " to toggle BEEP... beep is ";BP$ 6740 LOCATE 7,24 6760 PRINT " at any time to BREAK into CHAT" 6780 LOCATE 8,24 6800 PRINT " at any time to disconnect user" 6820 LOCATE 9,24 6840 PRINT " to end program" 6860 LOCATE 10,24 6880 PRINT " to enter LOCAL mode processing" 6890 LOCATE 11,24 6892 PRINT " to RESET number of msgs/callers" 6900 LOCATE 13,24 6920 PRINT "Number of Messages.... ";NUM 6940 LOCATE 14,24 6960 PRINT "Number of Calls....... ";MUN 6970 IF UPD=0 THEN RETURN 6980 OPEN "O",2,"ANSWER.DEF" 6990 WRITE #2,BP$,CH$,NUM,MUN:CLOSE #2 7000 RETURN 8000 REM 8001 REM ---------- CHANGE MSR & LCR TO ADAPT TO CALLERS COMM SETTINGS -------- 8002 REM 11654 R1=INP(LCR):DF=INP(MSB):OUT MSB,0:OUT LCR,R1 OR 128:IF Q=384 THEN OUT LSB,&H80:OUT MSB,&H1:GOTO 11684 11662 IF Q=256 THEN OUT LSB,&H0:OUT MSB,&H1:GOTO 11684 11664 IF Q=96 THEN OUT LSB,&H60:OUT MSB,&H0:GOTO 11684 11666 IF Q=48 THEN OUT LSB,&H30:OUT MSB,&H0 11684 OUT LCR,R1:OUT MSB,DF:RETURN 21280 WHILE NOT EOF(3):DF$=INPUT$(LOC(3),3):WEND:RETURN