10  REM *** ASKUS VERSION 2.2 ***
20  REM *** WRITTEN BY ERIC R. CLUFF -- SMUHSD NOVEMBER, 1982 ***
30  DIM A$[255],B$[64],B1$[100],C$[100],C1$[72],D$[72]
40  DIM F$[11],F1$[11],I$[255],M$[7],N$[255],S$[255],T$[72]
50  IF  ERROR  THEN 4410
60  F=F4=F5=X=0
70  F$="ZASK.A001"
80  F1$="ASCR00.A001"
90  FILES *,*,*,*
100  ASSIGN F$,1,R, NR 
110  IF R <> 0 THEN 130
120  GOTO 160
130  PRINT '7"Assign Error assigning ";F$;". Code"R
140  STOP 
150  REM *** DETERMINE IF TROLL ***
160  SYSTEM T$,"TIME"
170  IF POS("A0A1X0X1Q3",T$[1,2]) <> 0 THEN 1310
180  IF T$[1,4] <> "M001" THEN 210
190  PRINT "M001 NOT PEMITTED TO USE $ASKUS."
200  END 
210  F1$[5,6]=T$[15,16]
220  PURGE R,F1$
230  IF R=3 OR R=0 THEN 260
240  PRINT '7"Purge Error purging ";F1$;". Code"R
250  END 
260  CREATE R,F1$,5
270  IF R=0 THEN 300
280  PRINT '7"Create Error creating ";F1$;". Code"R
290  END 
300  ASSIGN F1$,2,R, NR 
310  IF R <> 0 THEN 130
320  REM *** PRINT INTRO AND ID-PROMPTS ***
330  IF F4=0 THEN 360
340  PRINT LIN(1);">>> Send Mode <<<"
350  GOTO 520
360  PRINT LIN(1);"*** Askus 2.2 ***"
370  PRINT LIN(1);"Info (Y/N) ? ";
380  LINPUT I$
390  I$=UOS$(I$)
400  IF I$[1,1] <> "Y" THEN 520
410  REM *** PRINT INFORMATION ***
420  PRINT 
430  PRINT "    This program is designed to allow you to leave comments,"
440  PRINT "suggestions, or requests for the system manager.  You will be"
450  PRINT "prompted for your name, and a message subject (optional).  Your"
460  PRINT "account number, port number, date and time will be automatically"
470  PRINT "sent.  Usually, the system operator reads the messages daily, and"
480  PRINT "will send you a response that will be displayed next time you log on."
490  PRINT "Any person caught sending obscene or disruptive messages will be"
500  PRINT "harshly "'7"dealt with."
510  IF F=1 THEN 590
520  PRINT LIN(1);"Please input your name (Up to 20 characters): ";
530  LINPUT N$
540  IF LEN(N$) <= 20 THEN 580
550  PRINT '7"Please limit your name to *20* characters."
560  PRINT "Your Name: ";
570  GOTO 530
580  IF LEN(N$)=0 THEN 1210
590  PRINT LIN(1);"Input message subject (return if none): ";
600  LINPUT S$
610  IF LEN(S$) <= 20 THEN 650
620  PRINT '7"Please limit the subject to *20* characters."
630  PRINT "Subject: ";
640  GOTO 600
650  PRINT LIN(1);"Input your message a line at a time -- when done enter a blank line";LIN(1)
660  READ #2,1
670  L=0
680  PRINT ":";
690  LINPUT A$
700  FOR X=1 TO LEN(A$)
710  IF NUM(A$[X,X])>31 OR NUM(A$[X,X])=7 THEN 730
720  A$[X,X]=CHR$(0)
730  NEXT X
740  IF LEN(A$)=0 THEN 830
750  PRINT #2;A$
760  L=L+1
770  IF L=20 THEN 790
780  GOTO 680
790  PRINT "20 lines maximum -- That's it."
800  GOTO 850
810  GOTO 680
820  REM *** CHECK TO SEE IF THIS IS FIRST LINE ***
830  IF ITM(2)=0 AND REC(2)=1 THEN 1210
840  REM *** write end of text mark to scratch file ***
850  PRINT #2;"[$TERM"
860  REM *** SET UP ID-STRING (B$) ***
870  B1$="                                            00000000000"
880  B1$[1,20]=N$
890  B1$[21,40]=S$
900  B1$[41,44]=T$[1,4]
910  CONVERT TIM(3) TO B1$[45,46]
920  CONVERT TIM(2) TO B1$[47+(TIM(2)<100)+(TIM(2)<10),49]
930  CONVERT TIM(1) TO B1$[50+(TIM(1)<10),51]
940  CONVERT TIM(0) TO B1$[52+(TIM(0)<10),53]
950  B1$[54,55]=T$[15,16]
960  LOCK #1,R
970  IF R <> 0 THEN 960
980  REM *** READ MASTER FILE TO END ***
990  READ #1,1
1000  IF  END #1 THEN 1040
1010  READ #1;A$
1020  GOTO 1010
1030  REM *** WRITE ID-STRING TO MASTER FILE ***
1040  PRINT #1;B1$
1050  REM *** READ TEXT FROM TEXT SCRATCH FILE ***
1060  READ #2,1
1070  IF  END #2 THEN 1120
1080  READ #2;A$
1090  REM *** WRITE TEXT TO MASTER FILE *** 
1100  PRINT #1;A$
1110  GOTO 1080
1120  PRINT #1; END 
1130  IF F4=1 THEN 1220
1140  UNLOCK #1
1150  PRINT "Another (Y/N) ? ";
1160  LINPUT I$
1170  I$=UOS$(I$)
1180  F=1
1190  IF I$[1,1]="Y" THEN 590
1200  REM *** CLOSE FILES, TERMINATE PROGRAM***
1210  IF F4=1 THEN 1230
1220  ASSIGN *,1
1230  ASSIGN *,2
1240  PURGE R,F1$
1250  IF R=0 THEN 1270
1260  PRINT '7"Purge Error purging ";F1$;". Code"R
1270  IF F4=1 THEN 1290
1280  END 
1290  ASSIGN F$,1,R, NR 
1300  GOTO 1500
1310  REM
1320  PRINT "*** Askus 2.2 ***"
1330  ASSIGN F$,1,R, NR 
1340  A=0
1350  LOCK #1,R
1360  IF R <> 0 THEN 1350
1370  IF  END #1 THEN 1430
1380  READ #1;A$
1390  IF A$="[$TERM" THEN 1410
1400  GOTO 1380
1410  A=A+1
1420  GOTO 1380
1430  IF A <> 0 THEN 1460
1440  PRINT LIN(1);"There are no messages.";LIN(1)
1450  GOTO 1500
1460  B$="There are 00 active messages."
1470  CONVERT A TO B$[11+(A<10),12]
1480  PRINT LIN(1);B$
1490  PRINT 
1500  UNLOCK #1
1510  A=BRK(2)
1520  PRINT ">";
1530  A=0
1540  LINPUT C$
1550  READ #1,1
1560  C$=UOS$(C$)
1570  H=POS(C$,"-")
1580  C=POS(C$,",")
1590  IF C$[1,2]="//" THEN 1630
1600  GOTO POS("KLDTA",C$[1,1]) OF 3390,2240,1720,2940,1670
1610  PRINT "Eh??"'7;LIN(1)
1620  GOTO 1500
1630  GOTO POS("CBHS",C$[3,3]) OF 4220,4260,4280,2890
1640  PRINT "Eh??"'7;LIN(1)
1650  GOTO 1500
1660  REM ***  SEND A MESSAGE FROM PRIVLEDGED MODE ***
1670  F4=1
1680  GOTO 210
1690  REM ***                             ***
1700  REM *** PRINT DIRECTORY OF MESSAGES *** 
1710  REM ***                             ***
1720  LOCK #1,R
1730  IF R <> 0 THEN 1720
1740  IF  END #1 THEN 2120
1750  READ #1;A$
1760  GOSUB 1810
1770  IF A$="[$TERM" THEN 1750
1780  READ #1;A$
1790  GOTO 1770
1800  RETURN 
1810  A=A+1
1820  IF F=1 THEN 1890
1830  PRINT LIN(1);"No.  Name";SPA(17);"Subject";SPA(14);"Acct Date"
1840  PRINT "---  -------------------- -------------------- ---- --------"
1850  FOR X=1 TO 60
1860  B$[X,X]=" "
1870  NEXT X
1880  F=1
1890  CONVERT A TO B$[2,3]
1900  CONVERT A$[45,46] TO T3
1910  CONVERT A$[47,49] TO T2
1920  B$[6,25]=A$[1,20]
1930  B$[27,46]=A$[21,40]
1940  B$[48,51]=A$[41,44]
1950  RESTORE 1960
1960  DATA 31,28,31,30,31,30,31,31,30,31,30,31
1970  D$="00/00/00"
1980  D1=(T2+365*T3+INT((T3-1)/4))/7
1990  D1=INT(7*(D1-INT(D1)))+1.5
2000  FOR X=1 TO 12
2010  READ M
2020  M=M+((X=2) MIN (T3/4=INT(T3/4)))
2030  IF T2 <= M THEN 2060
2040  T2=T2-M
2050  NEXT X
2060  CONVERT X TO D$[1+(X<10),2]
2070  CONVERT T2 TO D$[4+(T2<10),5]
2080  CONVERT T3 TO D$[7+(T3<10),8]
2090  B$[53,60]=D$
2100  PRINT B$
2110  RETURN 
2120  IF ITM(1)=0 AND REC(1)=1 THEN 2190
2130  B$="The Message File is 000% full."
2140  L=INT(REC(1)/30*100)
2150  CONVERT L TO B$[21+(L<100)+(L<10),23]
2160  PRINT LIN(1);B$;LIN(1)
2170  F=0
2180  GOTO 1500
2190  PRINT LIN(1);'7"There are no messages.";LIN(1)
2200  GOTO 1500
2210  REM ***                ***
2220  REM *** READ A MESSAGE ***
2230  REM ***                ***
2240  A1=F3=0
2250  LOCK #1,R
2260  IF R <> 0 THEN 2250
2270  IF  END #1 THEN 2860
2280  READ #1;A$
2290  READ #1,1
2300  IF H <> 0 AND H <> LEN(C$) THEN 2360
2310  PRINT "Read which message?";
2320  LINPUT C$
2330  IF LEN(C$)=0 THEN 1500
2340  CONVERT C$ TO A1,3992
2350  GOTO 2370
2360  CONVERT C$[H+1] TO A1,3992
2370  IF  END #1 THEN 2820
2380  READ #1;A$
2390  A=A+1
2400  IF A=A1 THEN 2470
2410  READ #1;A$
2420  IF A$="[$TERM" THEN 2440
2430  GOTO 2410
2440  A=A+1
2450  IF A <> A1 THEN 2410
2460  READ #1;A$
2470  CONVERT A$[45,46] TO T3
2480  CONVERT A$[47,49] TO T2
2490  F3=1
2500  RESTORE 2510
2510  DATA 31,28,31,30,31,30,31,31,30,31,30,31
2520  D$="00/00/00"
2530  D1=(T2+365*T3+INT((T3-1)/4))/7
2540  D1=INT(7*(D1-INT(D1)))+1.5
2550  FOR X=1 TO 12
2560  READ M
2570  M=M+((X=2) MIN (T3/4=INT(T3/4)))
2580  IF T2 <= M THEN 2610
2590  T2=T2-M
2600  NEXT X
2610  CONVERT X TO D$[1+(X<10),2]
2620  CONVERT T2 TO D$[4+(T2<10),5]
2630  CONVERT T3 TO D$[7,8]
2640  B$="#0   From:                        Date:         "
2650  CONVERT A TO B$[2,3]
2660  B$[12,31]=A$[1,20]
2670  B$[41,48]=D$
2680  PRINT LIN(1);B$
2690  B$="     Subject:                     "
2700  B$[15,34]=A$[21,40]
2710  PRINT B$
2720  B$="     Acct: XXXX   Port: 00   Time: 00:00"
2730  B$[12,15]=A$[41,44]
2740  B$[25,26]=A$[54,55]
2750  B$[36,37]=A$[50,51]
2760  B$[39,40]=A$[52,53]
2770  PRINT B$;LIN(1)
2780  READ #1;A$
2790  IF A$="[$TERM" THEN 1490
2800  PRINT A$
2810  GOTO 2780
2820  IF REC(1)=1 AND ITM(1)=0 THEN 2860
2830  IF F3=1 THEN 2850
2840  PRINT '7;LIN(1);"Message not found.";LIN(1)
2850  GOTO 1500
2860  PRINT LIN(1);'7"There are no messages.";LIN(1)
2870  GOTO 1500
2880  REM *** STOP ***
2890  ASSIGN *,1
2900  END 
2910  REM ***                ***
2920  REM *** KEEP A MESSAGE ***
2930  REM ***                ***
2940  LOCK #1,R
2950  IF R <> 0 THEN 2940
2960  IF  END #1 THEN 3300
2970  READ #1;A$
2980  READ #1,1
2990  IF H <> 0 AND H <> LEN(C$) THEN 3050
3000  PRINT "Save which message?";
3010  LINPUT C1$
3020  IF LEN(C1$)=0 THEN 1500
3030  CONVERT C1$ TO A1,4790
3040  GOTO 3060
3050  CONVERT C$[H+1] TO A1,4790
3060  PRINT "Output File: ";
3070  LINPUT C1$
3080  IF POS(C1$,".") OR POS(C1$,"$") OR POS(C1$,"*") THEN 3060
3090  C1$=UOS$(C1$)
3100  IF LEN(C1$)=0 THEN 1500
3110  ASSIGN C1$,4,R, PR 
3120  IF R=0 THEN 3150
3130  PRINT "Assign error";R;".  Reenter output Filename: ";
3140  GOTO 3070
3150  ADVANCE #4;32767,R
3160  A=A+1
3170  READ #1;A$
3180  IF A=A1 THEN 3220
3190  READ #1;A$
3200  IF A$="[$TERM" THEN 3160
3210  GOTO 3190
3220  PRINT #4;A$
3230  READ #1;A$
3240  IF A$="[$TERM" THEN 3270
3250  PRINT #4;A$
3260  GOTO 3230
3270  PRINT #4;"[$TERM"; END 
3280  ASSIGN *,4
3290  GOTO 1500
3300  IF ITM(1)=0 AND REC(1)=1 THEN 3330
3310  PRINT LIN(1);'7"Message not found.";LIN(1)
3320  GOTO 1500
3330  PRINT LIN(1);'7"There are no messages.";LIN(1)
3340  GOTO 1500
3350  REM ***               ***
3360  REM *** ZAP A MESSAGE ***
3370  REM ***               ***
3380  A=BRK(0)
3390  LOCK #1,R
3400  IF R <> 0 THEN 3390
3410  IF  END #1 THEN 4120
3420  READ #1;A$
3430  READ #1,1
3440  IF H <> 0 AND H <> LEN(C$) THEN 3520
3450  PRINT "Zap which message?";
3460  LINPUT C$
3470  C$=UOS$(C$)
3480  IF LEN(C$)=0 THEN 1500
3490  IF C$="ALL" THEN 4010
3500  CONVERT C$ TO Z,5245
3510  GOTO 3540
3520  IF C$[H+1]="ALL" THEN 4010
3530  CONVERT C$[H+1] TO Z,5245
3540  F1$[5,6]=T$[15,16]
3550  PURGE R,F1$
3560  IF R=3 OR R=0 THEN 3590
3570  PRINT '7"Purge Error purging ";F1$;". Code"R
3580  END 
3590  CREATE R,F1$,30
3600  IF R=0 THEN 3630
3610  PRINT "Create Error creating ";F1$;". Code"R
3620  END 
3630  ASSIGN F1$,3,R, NR 
3640  IF R=0 THEN 3670
3650  PRINT '7"Assign Error assigning ";F1$;". Code"R
3660  END 
3670  A=A+1
3680  IF A=Z THEN 3760
3690  READ #1;A$
3700  PRINT #3;A$
3710  IF A$="[$TERM" THEN 3730
3720  GOTO 3690
3730  A=A+1
3740  IF A=Z THEN 3760
3750  GOTO 3690
3760  READ #1;A$
3770  IF A$="[$TERM" THEN 3790
3780  GOTO 3760
3790  IF  END #1 THEN 3830
3800  READ #1;A$
3810  PRINT #3;A$
3820  GOTO 3800
3830  READ #1,1
3840  READ #3,1
3850  IF  END #3 THEN 3890
3860  READ #3;A$
3870  PRINT #1;A$
3880  GOTO 3860
3890  PRINT #1; END 
3900  ASSIGN *,1
3910  ASSIGN F$,1,R, NR 
3920  ASSIGN *,3
3930  PURGE R,F1$
3940  IF R=0 THEN 3970
3950  PRINT '7"Purge Error purging ";F1$;". Code"R
3960  END 
3970  B$="Message #00 Zapped."
3980  CONVERT Z TO B$[10+(Z<10),11]
3990  PRINT LIN(1);B$;LIN(1)
4000  GOTO 1500
4010  PRINT '7'7"*** WARNING This will initialize the ENTIRE file! *** "
4020  PRINT "OKAY? (Y/N -- The Default is no)";
4030  LINPUT C$
4040  C$=UOS$(C$)
4050  IF C$[1,1] <> "Y" THEN 1500
4060  FOR X=1 TO 30
4070  PRINT #1,X; END 
4080  NEXT X
4090  ASSIGN *,1
4100  ASSIGN F$,1,R, NR 
4110  GOTO 1500
4120  IF ITM(1)=0 AND REC(1)=1 THEN 4140
4130  GOTO 4160
4140  PRINT LIN(1);'7"There are no messages.";LIN(1)
4150  GOTO 1500
4160  PRINT LIN(1);'7"Message not found.";LIN(1)
4170  ASSIGN *,3
4180  PURGE R,F1$
4190  GOTO 1500
4200  END 
4210  REM *** CHAIN TO ANOTHER PROGRAM ***
4220  CHAIN R,C$[H+1]
4230  PRINT LIN(1);"Chain Failed."'7LIN(1)
4240  GOTO 1500
4250  REM *** LOGOFF ***
4260  SYSTEM X,"bye"
4270  REM *** HELP ***
4280  PRINT LIN(1);"The following commands are available for use.";LIN(1)
4290  PRINT "[D]irectory - prints a directory of messages."
4300  PRINT "[A]dd       - adds a messae from privileged mode."
4310  PRINT "[L]ist      - lists a message."
4320  PRINT "[T]ransfer  - appends a messge to a specified file."
4330  PRINT "[K]ill      - deletes a message."
4340  PRINT 
4350  PRINT "//[B]ye     - logs account off of system."
4360  PRINT "//[C]hain   - chains to a specified program."
4370  PRINT "//[S]top    - ends program."
4380  PRINT "//[H]elp    - displays these instructions.";LIN(1)
4390  GOTO 1520
4400  END 
4410  REM *** ERROR TRAP ***
4420  PRINT "An Error has Occured.  Error"SYS(0)"in line"SYS(1)
4430  PRINT "Contact system operator for repair."'7'7'7
4440  END 
