1 REM **** HP BASIC PROGRAM LIBRARY ******************************* 2 REM 3 REM MESSAG: INTERTERMINAL COMMUNICATOR 4 REM 5 REM 36284 REV A 6/73 6 REM 7 REM **** CONTRIBUTED PROGRAM ************************************ 10 REM MESSAG - INTERTERMINAL COMMUNICATOR 20 DIM M[127],M$[72],T$[14],F$[14],X$[10],Z$[6],T[127],G$[72] 30 FILES MSFILE 40 DEF FNW(X)=INT((X+3)/2) 50 X$="0123456789" 70 D0=180 80 PRINT "INTERTERMINAL COMMUNICATOR" 90 REM DETERMINE NUMBER OF RECORDS IN FILE 100 IF END #1 THEN 140 110 FOR R0=1 TO 128 120 READ #1,R0 130 NEXT R0 140 R0=R0-1 150 IF R0#1 THEN 180 160 PRINT "FILE TOO SMALL - MUST BE AT LEAST 2 RECORDS" 170 STOP 180 REM DETERMINE NUMBER OF WORDS PER RECORD 190 READ #1,R0 200 IF END #1 THEN 240 210 FOR W0=0 TO 254 STEP 2 220 PRINT #1;0 230 NEXT W0 240 GOSUB 1630 250 F1=0 260 PRINT '10'10"OPTION"; 270 IF F1 THEN 310 280 PRINT "? 0 = STOP, 1 = RECEIVE MESSAGE, 2 = ENTER MESSAGE," 290 PRINT "3 = RECEIVE LIST OF AVAILABLE MESSAGES - "; 300 F1=1 310 INPUT F2 320 IF F2<0 OR F2>3 OR F2#INT(F2) THEN 250 330 GOTO F2+1 OF 1980,340,1020,1520 340 PRINT '10"TYPE THE NUMBER OF THE MESSAGE YOU WANT. - "; 350 INPUT M1 360 F0=0 370 FOR R1=1 TO R0-1 380 READ #1,R1 390 IF TYP(-1)#1 THEN 770 400 READ #1;M0 410 IF M1#M0 THEN 770 420 READ #1,R1 430 IF F0 THEN 730 440 F0=1 450 READ #1;M0,T$,F$,T0,T1,T2,T3,M$ 460 T9=T2 470 PRINT '10'10"FOR: ";T$;" FROM: ";F$;" "; 480 RESTORE 1970 490 FOR T4=1 TO 12 500 READ T5 510 T5=T5+(T4=2 AND T3/4=INT(T3/4)) 520 IF T5 >= T2 THEN 550 530 T2=T2-T5 540 NEXT T4 550 Z0=10000*T4+100*T2+T3 560 GOSUB 1850 570 PRINT Z$[1,Z1-3];"/";Z$[Z1-2,Z1-1];"/";Z$[Z1,Z1+1];" "; 580 Z0=100*(T1-12*INT((T1-1)/12))+T0 590 GOSUB 1850 600 PRINT Z$[1,Z1-1];":";Z$[Z1,Z1+1]; 610 IF T1=0 AND T0=0 THEN 700 620 IF T1=12 AND T0=0 THEN 680 630 IF T1<12 THEN 660 640 PRINT " PM" 650 GOTO 710 660 PRINT " AM" 670 GOTO 710 680 PRINT " NOON" 690 GOTO 710 700 PRINT " MIDNIGHT" 710 PRINT 720 GOTO 750 730 IF TYP(-1)=4 THEN 770 740 READ #1;M0,T0,T1,M$ 750 PRINT M$ 760 GOTO 430 770 NEXT R1 780 IF F0 THEN 840 790 PRINT "THERE IS NO MESSAGE NUMBER";M1 800 PRINT "POSSIBLY IT HAS BEEN REMOVED FROM THE FILE SINCE THE LAST" 810 PRINT "LISTING OF AVAILABLE MESSAGES WAS PRODUCED. OPTION 3 WILL" 820 PRINT "GIVE A LISTINF OF AVAILABLE MESSAGES." 830 GOTO 260 840 T=60*TIM(1)+TIM(0)-60*T1-T0 845 T[M1]=0 850 IF T >= 0 AND T <= 4 AND T9=TIM(2) AND NOT T[M1] THEN 1000 860 PRINT "END OF MESSAGE. DO YOU WANT IT REMOVED FROM THE FILE"; 870 INPUT Y$[1,1] 880 IF Y$="N" THEN 260 890 IF Y$#"Y" THEN 860 900 FOR R1=1 TO R0-1 910 READ #1,R1 920 IF TYP(-1)#1 THEN 960 930 READ #1;M0 940 IF M0#M1 THEN 960 950 PRINT #1,R1 960 NEXT R1 970 T[M1]=0 980 READ #1,R0 990 GOTO 260 1000 PRINT '10"MESSAGE ENTERED RECENTLY - POSSIBLY NOT COMPLETE" 1010 GOTO 260 1020 R2=0 1030 PRINT "THIS MESSAGE IS FOR"; 1040 INPUT T$ 1050 PRINT "AND IS FROM"; 1060 INPUT F$ 1070 PRINT '10"ENTER MESSAGE (ANY NUMBER OF LINES, 3 MINUTE TIME LIMIT PER" 1080 PRINT "LINE). TYPE END FOR LAST LINE TO STOP INPUT." 1090 F3=0 1100 PRINT '10"? "; 1110 ENTER D0,D1,M$ 1120 IF D1#-256 THEN 1150 1130 PRINT '13'10"TIME OUT - INPUT TERMINATED" 1140 GOTO 260 1150 IF M$="END" THEN 260 1160 IF F3 THEN 1360 1170 REM FIND AN AVAILABLE MESSAGE NUMBER 1180 MAT M=ZER 1190 FOR R1=1 TO R0-1 1200 READ #1,R1 1210 IF TYP(-1)#1 THEN 1240 1220 READ #1;M0 1230 M[M0]=1 1240 NEXT R1 1250 FOR M1=1 TO 127 1260 IF NOT M[M1] THEN 1290 1270 NEXT M1 1280 GOTO 1500 1290 GOSUB 1540 1300 IF R2=0 THEN 1500 1310 PRINT #1,R2;M1,T$,F$,TIM(0),TIM(1),TIM(2),TIM(3),M$ 1320 W1=10+FNW(LEN(T$))+FNW(LEN(F$))+FNW(LEN(M$)) 1330 F3=1 1340 T[M1]=1 1350 GOTO 1480 1360 IF W1+6+FNW(LEN(M$)) <= W0 THEN 1400 1370 GOSUB 1540 1380 IF R2=0 THEN 1500 1390 W1=0 1400 READ #1,R2 1410 GOTO TYP(-1) OF 1420,1440,1460,1460 1420 READ #1;G0 1430 GOTO 1410 1440 READ #1;G$ 1450 GOTO 1410 1460 PRINT #1;M1,TIM(0),TIM(1),M$ 1470 W1=W1+6+FNW(LEN(M$)) 1480 READ #1,R0 1490 GOTO 1100 1500 PRINT '10"FILE FULL - LAST LINE LOST - INPUT TERMINATED" 1510 GOTO 260 1520 GOSUB 1630 1530 GOTO 260 1540 REM FIND AN AVAILABLE RECORD 1550 FOR R1=R2+1 TO R0-1 1560 READ #1,R1 1570 IF TYP(-1)#1 THEN 1610 1580 NEXT R1 1590 R2=0 1600 RETURN 1610 R2=R1 1620 RETURN 1630 REM PRINT LISTING OF AVAILABLE MESSAGES 1640 MAT M=ZER 1650 F0=0 1660 FOR R1=1 TO R0-1 1670 READ #1,R1 1680 IF TYP(-1)#1 THEN 1730 1690 READ #1;M0 1700 IF M[M0] THEN 1730 1710 F0=1 1720 M[M0]=R1 1730 NEXT R1 1740 IF F0 THEN 1770 1750 PRINT '10"THERE ARE NO MESSAGES." 1760 RETURN 1770 PRINT '10'10"THERE ARE MESSAGES FOR:"'10 1780 FOR M1=1 TO 127 1790 IF NOT M[M1] THEN 1830 1800 READ #1,M[M1];Z0,M$ 1810 GOSUB 1850 1820 PRINT TAB(3-Z1);Z$;". ";M$ 1830 NEXT M1 1840 RETURN 1850 REM NUMBER FORMAT SUBROUTINE 1860 IF Z0 <= 1 THEN 1890 1870 Z1=INT(LOG(Z0)/LOG(10)) 1880 GOTO 1900 1890 Z1=0 1900 Z$="" 1910 FOR Z2=Z1 TO 0 STEP -1 1920 Z3=INT(Z0/10^Z2) 1930 Z$[LEN(Z$)+1]=X$[Z3+1,Z3+1] 1940 Z0=Z0-Z3*10^Z2 1950 NEXT Z2 1960 RETURN 1970 DATA 31,28,31,30,31,30,31,31,30,31,30,31 1980 END