100 ! ******************** 110 ! * * 120 ! * The Mac-TI * 130 ! * Calculator * 140 ! * For Mouse-Lovers * 150 ! * Everywhere * 160 ! * by Chris Bobbitt * 170 ! * Mid-Atlantic 99er* 180 ! * Users Group * 190 ! * Inspired by the * 200 ! * Apple MACINTOSH * 210 ! * 1984 * 220 ! * * 230 ! ******************** 240 ON WARNING NEXT :: ON ERROR 270 :: CALL MAGNIFY(3):: A$="" :: T,A,ONN=0 :: C ALL SETUP 250 CALL INKEY :: CALL CHECK(A$,A,T,ONN):: GOTO 250 260 END 270 RETURN 280 SUB INKEY 290 CALL JOYST(1,X,Y):: CALL KEY(1,K,S):: IF K=18 THEN SUBEXIT ELSE CALL MOTION( #1,-Y*4,X*4) 300 GOTO 290 :: SUBEND 310 SUB CHECK(A$,A,T,ONN):: CALL MOTION(#1,0,0,#3,0,0) 320 CALL POSITION(#1,X,Y):: CALL GCHAR((X+7)/8,(Y+7)/8,CH):: CALL COINC(#1,#3,10 ,CO):: IF CO<>-1 AND CH<64 OR CH>127 THEN SUBEXIT 330 IF CO=-1 THEN CALL ONN1(ONN,A,T,A$):: GOTO 590 340 IF ONN=0 THEN SUBEXIT 350 C=INT((CH-63)/4):: IF C<(CH-63)/4 THEN C=C+1 360 IF C>10 THEN 390 370 IF LEN(A$)=9 THEN SUBEXIT ELSE A$=A$&CHR$(47+C) 380 A=VAL(A$):: CALL DISPL(A$):: CALL SOUND(-100,900,5):: SUBEXIT 390 IF C=15 AND LEN(A$)<9 THEN 560 ELSE IF C=16 THEN 510 ELSE CALL SOUND(-100,70 0,5) 400 IF OP=0 THEN T=A :: OP=C-10 :: A$="" :: CALL DISPL(A$):: GOTO 590 410 OP1=C-10 :: IF OP1<>OP THEN ON OP GOTO 420,430,440,450 ELSE 460 420 OP=OP1 :: T=T+A :: A$="" :: CALL DISPL(A$):: SUBEXIT 430 OP=OP1 :: T=T-A :: A$="" :: CALL DISPL(A$):: SUBEXIT 440 OP=OP1 :: T=T*A :: A$="" :: CALL DISPL(A$):: SUBEXIT 450 OP=OP1 :: T=T/A :: A$="" :: CALL DISPL(A$):: SUBEXIT 460 IF OP<>0 THEN ON OP GOTO 470,480,490,500 470 T=T+A :: A$="" :: CALL DISPL(A$):: SUBEXIT 480 T=T-A :: A$="" :: CALL DISPL(A$):: SUBEXIT 490 T=T*A :: A$="" :: CALL DISPL(A$):: SUBEXIT 500 T=T/A :: A$="" :: CALL DIPSL(A$):: SUBEXIT 510 CALL SOUND(-100,800,5):: IF OP=0 THEN SUBEXIT ELSE ON OP GOTO 520,530,540,55 0 520 T=T+A :: A$=STR$(T):: CALL DISPL(A$):: A$="" :: T,A,OP=0 :: SUBEXIT 530 T=T-A :: A$=STR$(T):: CALL DISPL(A$):: A$="" :: T,A,OP=0 :: SUBEXIT 540 T=T*A :: A$=STR$(T):: CALL DISPL(A$):: A$="" :: T,A,OP=0 :: SUBEXIT 550 T=T/A :: A$=STR$(T):: CALL DISPL(A$):: A$="" :: T,A,OP=0 :: SUBEXIT 560 XX=POS(A$,".",1):: IF XX>0 THEN SUBEXIT ELSE A$=A$&"." 570 IF LEN(A$)=1 THEN CALL DISPL(A$):: CALL SOUND(-100,900,5):: SUBEXIT 580 A=VAL(A$):: CALL DISPL(A$):: CALL SOUND(-100,900,5):: SUBEXIT 590 SUBEND 600 SUB ONN1(ONN,A,T,A$):: IF ONN=0 THEN 610 ELSE 630 610 ONN=1 :: CALL LOCATE(#3,41,65):: CALL SOUND(50,-5,20,1100,27,110,28):: FOR K =1 TO 50 :: NEXT K :: CALL SOUND(100,1200,11) 620 FOR I=1 TO 3 :: A$="........." :: CALL DISPL(A$):: A$="" :: CALL DISPL(A$):: NEXT I :: A$="" :: T=0 :: SUBEXIT 630 ONN=0 :: CALL LOCATE(#3,57,65):: CALL SOUND(50,-5,20,1100,27,110,28):: DISPL AY AT(6,11)SIZE(9):":::::::::" 640 FOR I=1 TO 3 :: CALL SOUND(-1000,1100,I):: FOR K=1 TO 20 :: NEXT K :: NEXT I :: A$="" :: T,A=0 :: SUBEND 650 SUB DISPL(A$) 660 IF LEN(A$)<=9 THEN 670 ELSE IF VAL(A$)>999999999 THEN 690 ELSE 700 670 DISPLAY AT(6,11)SIZE(9):RPT$(":",9-LEN(A$))&SEG$(A$,1,9) 680 GOTO 710 690 DISPLAY AT(6,11)SIZE(9):RPT$(".",9):: GOTO 710 700 DISPLAY AT(6,11)SIZE(9):SEG$(A$,1,9) 710 SUBEND 720 SUB SETUP :: CALL CLEAR :: CALL SCREEN(2) 730 CALL CHAR(36,RPT$("0",48)&"03070F1F3E7C7830") 740 CALL CHAR(64,"C08003040404040505050606030080C00301C06060A0A0A020202020C00001 03") 750 CALL CHAR(68,"C08001030101010101010101030080C0030180808080808080808080C00001 03") 760 CALL CHAR(72,"C08003040000000102040404070080C00301C0202040800000000000E00001 03") 770 CALL CHAR(76,"C08003040000000000000004030080C00301C020202020C020202020C00001 03") 780 CALL CHAR(80,"C08004040404040700000000000080C003014040404040E040404040400001 03") 790 CALL CHAR(84,"C08007040404040700000004030080C00301E000000000C020202020C00001 03") 800 CALL CHAR(88,"C08003040404040704040404030080C00301C020000000C020202020C00001 03") 810 CALL CHAR(92,"C08007000000000000010102020080C00301E0202040408080000000000001 03") 820 CALL CHAR(96,"C08003040404040304040404030080C00301C020202020C020202020C00001 03") 830 CALL CHAR(100,"C08003040404040300000004030080C00301C020202020E020202020C0000 103") 840 CALL CHAR(104,"C08000000101010F0F010101000080C003010000808080F0F080808000000 103") 850 CALL CHAR(108,"C08000000000000F0F000000000080C003010000000000F0F000000000000 103") 860 CALL CHAR(112,"C08000000804020101020408000080C003010000102040808040201000000 103") 870 CALL CHAR(116,"C08000000101000F0F000101000080C003010000808000F0F000808000000 103") 880 CALL CHAR(120,"C08000000000000101000000000080C003010000000000808000000000000 103") 890 CALL CHAR(124,"C0800000000F0F00000F0F00000080C00301000000F0F00000F0F00000000 103") 900 CALL CHAR(128,"C0E0733B1F0F070707070F3F7F70000000006CFCFCFCFEFEFEFEFFFFFF7E1 C08") 910 CALL CHAR(132,"000000000000000000000000000000003F1F3F1F3F1F3F1F3F1F3F1F3F1F3 F1F") 920 CALL CHAR(58,"",59,"0000000000003030") 930 FOR I=1 TO 14 :: CALL COLOR(I,2,2):: NEXT I :: CALL CHAR(136,RPT$("F",16)) 940 CALL CHAR(137,"3F7FFFFFFFFFFFFF",138,"FEFEFFFFFFFFFFFF",139,"FFFFFFFFFFFF7F3 F",140,"FFFFFFFFFFFFFEFC") 950 CALL VCHAR(5,11,136,14):: CALL VCHAR(5,23,136,14):: DISPLAY AT(4,9):CHR$(137 )&RPT$(CHR$(136),11)&CHR$(138) 960 FOR I=5 TO 7 :: CALL HCHAR(I,12,58,11):: NEXT I :: DISPLAY AT(9,10):"DF HJ L N hj ":TAB(10);"EG IK MO ik ": :TAB(10);"PR TV XZ ln ":TAB(9);" QS UW Y[ mo " 970 DISPLAY AT(15,10):"\^ `b df pr ":TAB(10);"]_ ac eg qs ": :TAB(10);"xz @B |~ tv " 980 DISPLAY AT(19,10):"y{ AC }"&CHR$(127)&" uw ":TAB(9);CHR$(139)&RPT$(CHR$(136) ,11)&CHR$(140) 990 FOR I=1 TO 4 :: CALL HCHAR(I*3+5,12,136,11):: NEXT I :: FOR I=11 TO 23 STEP 3 :: CALL VCHAR(8,I,136,12):: NEXT I 1000 CALL VCHAR(5,11,136,12):: CALL VCHAR(5,23,136,14):: CALL COLOR(2,2,15,3,2,1 5,4,2,15,14,16,2):: FOR I=5 TO 13 :: CALL COLOR(I,16,5) 1010 NEXT I :: CALL SPRITE(#1,128,11,100,200,#3,132,12,57,65):: SUBEND