home *** CD-ROM | disk | FTP | other *** search
Wrap
10 REM ********************* 20 REM * TRANSFORMER * 30 REM * BY JENNY SCHMIDT * 40 REM * COPYRIGHT(C) 1989 * 50 REM * APPLEDISK & * 60 REM * MICROSPARC, INC * 70 REM ********************* 80 PRINT CHR$(21) 90 IF PEEK(104) < >96 THEN POKE 103,01: POKE 104,96: POKE 24576,0: PRINT CHR$(4);"RUN TRANSFORMER" 100 ONERR GOTO 2190 110 HIMEM: 37376:PRODOS = PEEK(48896) = 76:CT$ = "CAT": IF NOT PRODOS THEN CT$ = CT$ +"ALOG" 120 CV = 3.1416/180 130 TRANS = 2048:SZ = 5:DD = 1:SL = 6 140 REM POKE SHAPE TABLE AND ERROR ROUTINE 150 DATA 1,0,4,0,62,96,21,5,0,104,168,104,166,223,154,72,152,72,96 160 FOR I = 768 TO 786: READ J: POKE I,J: NEXT I: POKE 232,0: POKE 233,3 170 PRINT CHR$(4);"BLOAD TRANS" 180 BL = 1 190 REM PRINT MAIN MENU 200 TEXT : HGR 210 ROT= 0: SCALE= 1:JX = 140:JY = 86: XDRAW 1 AT JX,JY 220 HOME : VTAB 23: HTAB 2: PRINT "SOURCE";: HTAB 10: PRINT "DEST";: HTAB 18: PRINT "TRANS";: HTAB 26: PRINT "FILE";: HTAB 34: PRINT "QUIT"; 230 VTAB 22: HTAB 1: PRINT "MAIN MENU:" 240 CX = 1:CY = 23 250 POKE -16368,0 260 HTAB CX: VTAB CY: PRINT "<";: HTAB CX +7: PRINT ">"; 270 IF PEEK( -16384) <128 THEN 270 280 KY = PEEK( -16384): POKE -16368,0: IF KY >224 AND KY <251 THEN KY = KY -32 290 IF KY < >149 THEN 320 300 HTAB CX: VTAB CY: PRINT " ";: HTAB CX +7: PRINT " ";:CX = CX +8: IF CX >34 THEN CX = 1 310 GOTO 260 320 IF KY < >136 THEN 350 330 HTAB CX: VTAB CY:: PRINT " ";: HTAB CX +7: PRINT " ";:CX = CX -8: IF CX <0 THEN CX = 33 340 GOTO 260 350 IF KY = 141 THEN ON (CX -1)/8 +1 GOTO 380,810,1790,1420,860 360 PRINT CHR$(7);: GOTO 260 370 REM SOURCE 380 IF BX AND PN THEN GOSUB 1350 390 IF BX AND NOT PN THEN GOSUB 1240 400 IF BX THEN BX = 0:PN = 1:JX = X1:JY = Y1:HX = X2:HY = Y2:AN = 0 410 IF PN THEN PN = 0: XDRAW 1 AT HX,HY: XDRAW 1 AT JX,HY: XDRAW 1 AT HX,JY 420 HOME : VTAB 22: PRINT "SOURCE: I,J,K,M TO POSTION "; 430 REM SOURCE AND DESTINATION MENUS 440 VTAB 23: HTAB 2: PRINT "INCR";: HTAB 10: PRINT "DECR";: HTAB 18: PRINT "VIEW";: HTAB 26: PRINT "PIN";: HTAB 34: PRINT "MAIN"; 450 VTAB 21: HTAB 1: PRINT "COORDINATE:" 460 IF NOT PN THEN VTAB 22: HTAB 29: PRINT "UPPER-LEFT "; 470 IF PN THEN VTAB 22: HTAB 29: PRINT "LOWER-RIGHT"; 480 VTAB 24: HTAB 1: FOR I = 1 TO SZ: PRINT "*";: NEXT I 490 CX = 1:CY = 23 500 POKE -16368,0 510 HTAB CX: VTAB CY: PRINT "<";: HTAB CX +7: PRINT ">"; 520 IF PEEK( -16384) <128 THEN 520 530 KY = PEEK( -16384): POKE -16368,0: IF KY >224 AND KY <251 THEN KY = KY -32 540 IF KY < >149 THEN 570 550 IF NOT VW THEN HTAB CX: VTAB CY: PRINT " ";: HTAB CX +7: PRINT " ";:CX = CX +8: IF CX >34 THEN CX = 1 560 GOTO 510 570 IF KY < >136 THEN 600 580 IF NOT VW THEN HTAB CX: VTAB CY: PRINT " ";: HTAB CX +7: PRINT " ";:CX = CX -8: IF CX <0 THEN CX = 33 590 GOTO 510 600 IF KY = 141 THEN ON (CX -1)/8 +1 GOTO 680,710,740,770,220 610 IF KY <201 OR KY = 204 OR KY >205 THEN 660 620 GOSUB 1010 630 VTAB 21: HTAB 15: PRINT " ";: HTAB 15: IF NOT PN THEN PRINT INT(JX);","; INT(JY);: REM 20 SPACES 640 IF PN THEN PRINT INT(HX);","; INT(HY); 650 GOTO 510 660 PRINT CHR$(7);: GOTO 510 670 REM INCR 680 IF SZ = 30 THEN 510 690 SZ = SZ +1: VTAB 24: HTAB SZ: PRINT "*";: GOTO 510 700 REM DECR 710 IF SZ = 1 THEN 510 720 VTAB 24: HTAB SZ: PRINT " ";:SZ = SZ -1: GOTO 510 730 REM VIEW 740 IF NOT VW THEN POKE -16302,0:VW = 1: GOTO 510 750 POKE -16301,0:VW = 0: GOTO 510 760 REM PIN 770 IF NOT PN THEN 790 780 GOSUB 1360:PN = 0:AN = 0: VTAB 22: HTAB 29: PRINT "UPPER-LEFT ";: GOTO 510 790 HX = JX:HY = JY:PN = 1: VTAB 22: HTAB 29: PRINT "LOWER-RIGHT";: GOTO 510 800 REM DESTINATION 810 IF NOT BX AND NOT PN THEN VTAB 21: HTAB 1: PRINT "NO SOURCE BOX-- PRESS RETURN";: GET A$: VTAB 21: HTAB 1: PRINT " ";: GOTO 260: REM 30 SPACES 820 HOME : VTAB 22: PRINT "DEST: I,J,K,M TO POSITION "; 830 IF BX THEN GOSUB 1360:AN = 0:PN = 0: GOTO 440 840 BX = 1:PN = 0:X1 = JX:Y1 = JY:X2 = HX:Y2 = HY:JX = INT(HX -JX)/2 +JX:JY = INT(HY -JY)/2 +JY: XDRAW 1 AT JX,JY: GOTO 440 850 REM QUIT 860 HOME : VTAB 22: INPUT "DO YOU WANT TO CONTINUE?";A$: IF LEFT$(A$,1) = "N" OR LEFT$(A$,1) = CHR$( ASC("N") +32) THEN TEXT : END 870 GOTO 220 880 REM ERASE FINAL BOX ENDPOINTS 890 IF RX > -1 AND RX <280 AND RY > -1 AND RY <192 THEN XDRAW 1 AT RX,RY 900 IF SX > -1 AND SX <280 AND SY > -1 AND SY <192 THEN XDRAW 1 AT SX,SY 910 IF TX > -1 AND TX <280 AND TY > -1 AND TY <192 THEN XDRAW 1 AT TX,TY 920 RETURN 930 REM CALCUALTE FINAL BOX ENDPOINTS AND DRAW THEM 940 RX = INT((HX -JX) * COS(AN *CV)) +JX:RY = INT((HX -JX) * SIN(AN *CV)) +JY:TX = INT( -(HY -JY) * SIN(AN *CV)) +JX:TY = INT((HY -JY) * COS(AN *CV)) +JY 950 SX = INT((HX -JX) * COS(AN *CV)) - INT((HY -JY) * SIN(AN *CV)) +JX:SY = INT((HX -JX) * SIN(AN *CV)) + INT((HY -JY) * COS(AN *CV)) +JY 960 IF RX > -1 AND RX <280 AND RY > -1 AND RY <192 THEN XDRAW 1 AT RX,RY 970 IF SX > -1 AND SX <280 AND SY > -1 AND SY <192 THEN XDRAW 1 AT SX,SY 980 IF TX > -1 AND TX <280 AND TY > -1 AND TY <192 THEN XDRAW 1 AT TX,TY 990 RETURN 1000 REM MOVE BOX ENDPOINTS 1010 IF BX THEN 1180 1020 IF PN THEN 1090 1030 XDRAW 1 AT JX,JY 1040 IF KY = 201 THEN JY = JY -SZ: IF JY <0 THEN JY = 0: GOTO 1080 1050 IF KY = 205 THEN JY = JY +SZ: IF JY >191 THEN JY = 191: GOTO 1080 1060 IF KY = 202 THEN JX = JX -SZ: IF JX <0 THEN JX = 0: GOTO 1080 1070 IF KY = 203 THEN JX = JX +SZ: IF JX >279 THEN JX = 279 1080 XDRAW 1 AT JX,JY: RETURN 1090 XDRAW 1 AT JX,JY: IF JX < >HX THEN XDRAW 1 AT HX,JY 1100 IF JY < >HY THEN XDRAW 1 AT JX,HY: IF JX < >HX THEN XDRAW 1 AT HX,HY 1110 IF KY = 201 THEN HY = HY -SZ: IF HY <JY THEN HY = JY: GOTO 1150 1120 IF KY = 205 THEN HY = HY +SZ: IF HY >191 THEN HY = 191: GOTO 1150 1130 IF KY = 202 THEN HX = HX -SZ: IF HX <JX THEN HX = JX: GOTO 1150 1140 IF KY = 203 THEN HX = HX +SZ: IF HX >279 THEN HX = 279 1150 XDRAW 1 AT JX,JY: IF JX < >HX THEN XDRAW 1 AT HX,JY 1160 IF JY < >HY THEN XDRAW 1 AT JX,HY: IF JX < >HX THEN XDRAW 1 AT HX,HY 1170 RETURN 1180 IF PN THEN 1260 1190 IF JX > -1 AND JX <280 AND JY > -1 AND JY <192 THEN XDRAW 1 AT JX,JY 1200 IF KY = 201 THEN JY = JY -SZ: GOTO 1240 1210 IF KY = 205 THEN JY = JY +SZ: GOTO 1240 1220 IF KY = 202 THEN JX = JX -SZ: GOTO 1240 1230 IF KY = 203 THEN JX = JX +SZ 1240 IF JX > -1 AND JX <280 AND JY > -1 AND JY <192 THEN XDRAW 1 AT JX,JY 1250 RETURN 1260 IF JX > -1 AND JX <280 AND JY > -1 AND JY <192 THEN XDRAW 1 AT JX,JY 1270 IF AN >0 THEN GOSUB 890: GOTO 1310 1280 IF JX < >HX AND HX > -1 AND HX <280 AND JY > -1 AND JY <192 THEN XDRAW 1 AT HX,JY 1290 IF JY < >HY AND JX > -1 AND JX <280 AND HY > -1 AND HY <192 THEN XDRAW 1 AT JX,HY 1300 IF JY < >HY AND JX < >HX AND HX > -1 AND HX <280 AND HY > -1 AND HY <192 THEN XDRAW 1 AT HX,HY 1310 IF KY = 201 AND HY -SZ +1 >JY THEN HY = HY -SZ: GOTO 1350 1320 IF KY = 205 THEN HY = HY +SZ: GOTO 1350 1330 IF KY = 202 AND HX -SZ +1 >JX THEN HX = HX -SZ: GOTO 1350 1340 IF KY = 203 THEN HX = HX +SZ 1350 IF JX > -1 AND JX <280 AND JY > -1 AND JY <192 THEN XDRAW 1 AT JX,JY 1360 IF AN >0 THEN GOSUB 940: RETURN 1370 IF JX < >HX AND HX > -1 AND HX <280 AND JY > -1 AND JY <192 THEN XDRAW 1 AT HX,JY 1380 IF JY < >HY AND JX > -1 AND JX <280 AND HY > -1 AND HY <192 THEN XDRAW 1 AT JX,HY 1390 IF JY < >HY AND JX < >HX AND HX > -1 AND HX <280 AND HY > -1 AND HY <192 THEN XDRAW 1 AT HX,HY 1400 RETURN 1410 REM FILE MENU 1420 HOME : VTAB 22: PRINT "FILE:";: VTAB 23: HTAB 2: PRINT "LOAD";: HTAB 10: PRINT "SAVE";: HTAB 18: PRINT "CAT";: HTAB 26: PRINT "SL/DR";: HTAB 34: PRINT "MAIN"; 1430 CX = 1:CY = 23 1440 POKE -16368,0 1450 HTAB CX: VTAB CY: PRINT "<";: HTAB CX +7: PRINT ">"; 1460 IF PEEK( -16384) <128 THEN 1460 1470 KY = PEEK( -16384): POKE -16368,0: IF KY >224 AND KY <251 THEN KY = KY -32 1480 IF KY < >149 THEN 1510 1490 HTAB CX: VTAB CY: PRINT " ";: HTAB CX +7: PRINT " ";:CX = CX +8: IF CX >34 THEN CX = 1 1500 GOTO 1450 1510 IF KY < >136 THEN 1540 1520 HTAB CX: VTAB CY:: PRINT " ";: HTAB CX +7: PRINT " ";:CX = CX -8: IF CX <0 THEN CX = 33 1530 GOTO 1450 1540 IF KY = 141 THEN ON (CX -1)/8 +1 GOTO 1560,1650,1720,1730,220 1550 PRINT CHR$(7);: GOTO 1450 1560 HOME : VTAB 21: PRINT "ENTER FILE NAME-- '?' FOR CATALOG <RET> TO CANCEL:": INPUT "";A$: REM 7 SPACES 1570 IF A$ = "" THEN 1420 1580 IF A$ = "?" OR A$ = "/" THEN 1720 1590 HOME : VTAB 22: INPUT "LOADING WILL ERASE CURRENT PICTURE. DO YOU WANT TO CONTINUE?";B$: IF LEFT$(B$,1) < >"Y" AND LEFT$(B$,1) < > CHR$( ASC("Y") +32) THEN 1420 1600 PRINT CHR$(4);"BLOAD";A$;",A$2000,D";DD 1610 IF BX THEN XDRAW 1 AT X1,Y1: XDRAW 1 AT X1,Y2: XDRAW 1 AT X2,Y1: XDRAW 1 AT X2,Y2: GOSUB 1350 1620 IF NOT BX THEN GOSUB 1080 1630 IF NOT BX AND PN THEN GOSUB 1090 1640 GOTO 1420 1650 HOME : VTAB 21: PRINT "ENTER FILE NAME-- '?' FOR CATALOG <RET> TO CANCEL:": INPUT "";A$: REM 7 SPACES 1660 IF A$ = "" THEN 1420 1670 IF A$ = "?" OR A$ = "/" THEN 1720 1680 IF BX THEN XDRAW 1 AT X1,Y1: XDRAW 1 AT X1,Y2: XDRAW 1 AT X2,Y1: XDRAW 1 AT X2,Y2: GOSUB 1350 1690 IF NOT BX THEN GOSUB 1080 1700 IF NOT BX AND PN THEN GOSUB 1090 1710 PRINT CHR$(4);"BSAVE";A$;",A$2000,L$1FFF,D";DD: GOTO 1420 1720 HOME : TEXT : PRINT : PRINT CHR$(4);CT$;",D";DD;",S"SL: INPUT "PRESS RETURN TO CONTINUE";A$: POKE -16304,0: GOTO 1420 1730 : HOME : VTAB 22: INPUT "ENTER DRIVE NUMBER:";A$: IF VAL(A$) = 0 OR VAL(A$) >2 THEN PRINT CHR$(7): GOTO 1730 1740 DD = VAL(A$) 1750 HOME : VTAB 22: INPUT "ENTER SLOT NUMBER:";A$: IF VAL(A$) <3 OR VAL(A$) >7 THEN PRINT CHR$(7);: GOTO 1750 1760 SL = VAL(A$): IF PRODOS THEN PRINT CHR$(4)"PREFIX,S";SL;",D";DD 1770 GOTO 1420 1780 REM TRANSFORM MENU 1790 IF NOT BX OR NOT PN THEN VTAB 21: HTAB 1: PRINT "NO DESTINATION BOX-- PRESS RETURN";: GET A$: PRINT " ";: GOTO 220: REM 30 SPACES 1800 HOME : VTAB 23: HTAB 2: PRINT "ROTATE";: HTAB 10: PRINT "COPY";: HTAB 18: PRINT "B/W";: HTAB 26: PRINT "EXEC";: HTAB 34: PRINT "MAIN"; 1810 VTAB 22: HTAB 1: PRINT "TRANSFORM:";: HTAB 31: PRINT "ANGLE: ";AN 1820 IF CM THEN VTAB 23: HTAB 10: PRINT "MOVE"; 1830 IF CF THEN VTAB 23: HTAB 18: PRINT "COLOR"; 1840 RX = HX:RY = JY:SX = HX:SY = HY:TX = JX:TY = HY 1850 CX = 1:CY = 23 1860 POKE -16368,0 1870 HTAB CX: VTAB CY: PRINT "<";: HTAB CX +7: PRINT ">"; 1880 IF PEEK( -16384) <128 THEN 1880 1890 KY = PEEK( -16384): POKE -16368,0: IF KY >224 AND KY <251 THEN KY = KY -32 1900 IF KY < >149 THEN 1930 1910 HTAB CX: VTAB CY: PRINT " ";: HTAB CX +7: PRINT " ";:CX = CX +8: IF CX >34 THEN CX = 1 1920 GOTO 1870 1930 IF KY < >136 THEN 1960 1940 HTAB CX: VTAB CY:: PRINT " ";: HTAB CX +7: PRINT " ";:CX = CX -8: IF CX <0 THEN CX = 33 1950 GOTO 1870 1960 IF KY = 141 THEN ON (CX -1)/8 +1 GOTO 2010,2070,2100,2130,220 1970 IF KY <201 OR KY >205 OR KY = 204 THEN PRINT CHR$(7);: GOTO 1870 1980 GOSUB 1010: IF AN = 0 THEN RX = HX:RY = JY:SX = HX:SY = HY:TX = JX:TY = HY 1990 GOTO 1870 2000 REM ROTATE 2010 AN = AN +5: IF AN = 360 THEN AN = 0 2020 VTAB 22: HTAB 38: PRINT " ";: VTAB 22: HTAB 38: PRINT AN;: REM 3 SPACES 2030 GOSUB 890: GOSUB 1360 2040 IF AN = 0 THEN RX = HX:RY = JY:SX = HX:SY = HY:TX = JX:TY = HY 2050 GOTO 1870 2060 REM COPY/MOVE 2070 IF CM THEN VTAB 23: HTAB 10: PRINT "COPY";:CM = 0: GOTO 1870 2080 VTAB 23: HTAB 10: PRINT "MOVE";:CM = 1: GOTO 1870 2090 REM COLOR OR BLACK AND WHITE 2100 IF CF THEN VTAB 23: HTAB 18: PRINT "B/W ";:CF = 0: GOTO 1870 2110 IF NOT CF THEN VTAB 23: HTAB 18: PRINT "COLOR";:CF = 1: GOTO 1870 2120 REM EXECUTE 2130 IF X1 = X2 OR Y1 = Y2 OR JX = HX OR JY = HY THEN VTAB 21: HTAB 1: PRINT "INVALID BOXES-- PRESS RETURN";: GET A$: HTAB 1: PRINT " ";: GOTO 1870: REM 30 SPACES 2140 XDRAW 1 AT X1,Y1: XDRAW 1 AT X1,Y2: XDRAW 1 AT X2,Y1: XDRAW 1 AT X2,Y2: GOSUB 1350 2150 CALL TRANS,X1,Y1,X2,Y2,JX,JY,HX,HY,(X2 -X1)/(HX -JX),(Y2 -Y1)/(HY -JY), COS(AN *CV), SIN(AN *CV),CF *128,CM 2160 XDRAW 1 AT X1,Y1: XDRAW 1 AT X1,Y2: XDRAW 1 AT X2,Y1: XDRAW 1 AT X2,Y2:AN = 0: GOSUB 1350 2170 VTAB 21: HTAB 38: PRINT " ";: HTAB 38: PRINT AN;: REM 3 SPACES 2180 RX = HX:RY = JY:SX = HX:SY = HY:TX = JX:TY = HY: GOTO 1870 2190 IF NOT BL THEN PRINT "TRANS FILE NOT ON DISK-- INSERT DISK AND PRESS RETURN. PRESS <ESC> TO QUIT": GET A$: IF ASC(A$) = 27 THEN END 2200 IF NOT BL THEN PRINT A$: CALL 777: RESUME 2210 IF PEEK(222) = 255 THEN CALL 777: RESUME 2220 IF PEEK(222) = 0 OR PEEK(222) >16 THEN PRINT "ERROR #"; PEEK(222);" IN LINE "; PEEK(218) + PEEK(219) *256: END 2230 HOME : VTAB 23: ON PEEK(222) GOTO 2240,2250,2260,2270,2280,2290,2300,2310,2320,2330,2340,2350,2360,2370,2380,2390 2240 PRINT "ERROR #"; PEEK(222): END 2250 PRINT "ERROR #"; PEEK(222): END 2260 PRINT "ERROR #"; PEEK(222): END 2270 PRINT "DISK IS WRITE PROTECTED": GOTO 2400 2280 PRINT "FILE IS NOT ON DISK": PRINT CHR$(4);"DELETE";A$: GOTO 2400 2290 PRINT "FILE IS NOT ON DISK": GOTO 2400 2300 PRINT "ERROR #"; PEEK(222): END 2310 PRINT "I/O ERROR": GOTO 2400 2320 PRINT "DISK FULL": GOTO 2400 2330 PRINT "FILE IS LOCKED": GOTO 2400 2340 PRINT "INVALID FILE NAME": GOTO 2400 2350 PRINT "ERROR #"; PEEK(222): END 2360 PRINT "ERROR #"; PEEK(222): END 2370 PRINT "ERROR #"; PEEK(222): END 2380 PRINT "ERROR #"; PEEK(222): END 2390 PRINT "INVALID FILE NAME": GOTO 2400 2400 INPUT "PRESS RETURN TO CONTINUE";A$ 2410 CALL 777: GOTO 1420