10 REM ******************************* 15 REM * BILDSCHIRMMASKENGENERATOR * 20 REM * MIT INTELLIGENTEN * 25 REM * OPTIMIERUNGSEIGENSCHAFTEN * 30 REM * UND GROESSTMOEGLICHER * 35 REM * SPEICHERPLATZ-ERSPARNIS * 40 REM * VERSION 2.0 * 45 REM * WRITTEN 3/86 BY ROMAN BARTKE* 50 REM * MAX-VON-LAUE-STR.29 * 55 REM * 5630 REMSCHEID 11 * 60 REM * TEL. 02191/63753 * 65 REM * * 70 REM *Z.150 EINZ. V.K.SMOCZYK 12/85* 75 REM ******************************* 80 : 85 : 90 POKE55,255:POKE56,127:CLR:REM BASICRAM-ENDE NACH 32768 95 GOTO755 100 REM PASS 1 105 POKE837,PEEK(53272):POKE53281,G:POKE53280,BO 110 CLR:FORI=704TO704+63:READQ:NEXT 115 DIMC$(15):FORI=0TO15:READC$:C$(I)=C$:NEXT 120 ZA=24:SA=39:R=0:F=16:S=0:M=49155 125 IFPEEK(2023)=32OR(PEEK(2023)=96ANDPEEK(2)=1)THENPOKE834,0:GOTO135 130 POKE832,PEEK(2023):POKE833,PEEK(56295)AND15:POKE834,1 135 FORZ=0TOZA:B=0:FORS=0TOSA 140 X=PEEK(40*Z+S+1024):C=PEEK(40*Z+S+55296)AND15 145 POKE55296+40*Z+S,1:POKE1024+40*Z+S,ASC("*") 150 XX=X+(X>127)*128:W=XX-(XX>-1ANDXX<32ORXX>95)*64-(XX>63ANDXX<96)*32 155 IFPEEK(2)=1ANDW=160THENW=32 160 IFR=0ANDX>127THENR=1:M=M+1:POKEM,ASC(""):B=1:GOTO170 165 IFR=1ANDX<127THENR=0:M=M+1:POKEM,ASC("[146]") 170 IFC=FTHEN190 175 IF(W=32ORW=160)ANDR=0THEN190 180 IFEF=0THENPOKE838,ASC(C$(C)):EF=1:F=C:GOTO190:REM ERSTE FARBE 185 F=C:M=M+1:POKEM,ASC(C$(C)) 190 M=M+1:POKEM,W 195 IFW<>32ORR=1THENB=1:REM FALLS LEERZEILE,DANN FLAG FUER CRSR-DOWN 200 NEXT 205 IFB=1THEN215 210 M=M-39:POKEM,ASC(""):GOTO230 215 M=M+1 220 IF(W=32OR(W=96ANDPEEK(2)=1))ANDR=0THENPOKEM,13:GOTO230 225 POKEM,141 230 IFZ=24ANDB=1THENPOKE839,1 235 NEXT 240 POKE49152,INT(M/256):POKE49153,M-PEEK(49152)*256 245 REM PASS 2 250 CLR 255 DIMZ$(51) 260 M=PEEK(49152)*256+PEEK(49153) 265 FORI=49156TOM 270 IFCHR$(PEEK(I))=""THENR=1 275 IFCHR$(PEEK(I))="[146]"THENR=0 280 IFPEEK(I)=141THEN295 285 IFPEEK(I)=13THENGOSUB375:GOTO295 290 Z$=Z$+CHR$(PEEK(I)):GOTO365 295 REM SPC(X) EINBAUEN (WENN MEHR ALS 7 SPACES) 300 L=0:S=0 305 L=L+1:IFMID$(Z$,L,1)=CHR$(32)ANDR=0THENS=S+1:GOTO305 310 IFS<8THEN320 315 Z$=CHR$(153)+CHR$(166)+RIGHT$(STR$(S),LEN(STR$(S))-1)+")"+CHR$(34)+RIGHT$(Z$,LEN(Z$)-S) 320 IFLEN(Z$)<=65THEN345 325 J=J+1:Z$(J)=LEFT$(Z$,65)+CHR$(34)+";" 330 J=J+1:Z$(J)=RIGHT$(Z$,LEN(Z$)-65) 335 IFPEEK(I)=141THENZ$(J)=Z$(J)+CHR$(34)+";" 340 GOTO360 345 J=J+1 350 IFH=1THENH=0:Z$(J)=Z$:GOTO360 355 IFH=0THENZ$(J)=Z$+CHR$(34)+";" 360 Z$="":Z=0 365 NEXT:GOTO410 370 REM HINTERE SPACES BESEITIGEN 375 IFR=1ORRIGHT$(Z$,1)<>" "THENRETURN 380 D=LEN(Z$) 385 D=D-1 390 IFMID$(Z$,D,1)=CHR$(32)THEN385 395 Z$=LEFT$(Z$,D) 400 H=1:RETURN 405 : 410 REM FOR-NEXT EINBAUEN (AB 3 GLEICHEN ZEILEN) 415 DIMZZ$(55):E=1:Z=1:REM 55=J+4 MAXIMALE ZEILENANZAHL 420 A=E:E=A+1:IFE>J+1THEN510 425 IFZ$(A)=Z$(E)THENE=E+1:GOTO425 430 REM A,E-A,Z$(A) STEHEN HIER BEREIT 435 IFLEFT$(Z$(A),2)=CHR$(153)+CHR$(166)THENSP=1:GOTO445 440 SP=0 445 IF(E-A)<>1THEN460 450 Z=Z+1:IFSP=0THENZZ$(Z)=CHR$(153)+CHR$(34) 455 ZZ$(Z)=ZZ$(Z)+Z$(A):GOTO420 460 IF(E-A)<>2THEN485 465 Z=Z+2:IFSP=0THENZZ$(Z-1)=CHR$(153)+CHR$(34) 470 ZZ$(Z-1)=ZZ$(Z-1)+Z$(A) 475 IFSP=0THENZZ$(Z)=CHR$(153)+CHR$(34) 480 ZZ$(Z)=ZZ$(Z)+Z$(A+1):GOTO420 485 Z=Z+3:ZZ$(Z-2)=CHR$(129)+"I"+CHR$(178)+"1"+CHR$(164) 490 ZZ$(Z-2)=ZZ$(Z-2)+RIGHT$(STR$(E-A),LEN(STR$(E-A))-1) 495 IFSP=0THENZZ$(Z-1)=CHR$(153)+CHR$(34) 500 ZZ$(Z-1)=ZZ$(Z-1)+Z$(A):ZZ$(Z)=CHR$(130) 505 GOTO420 510 REM ERSTE ZEILE GENERIEREN 515 EZ$=CHR$(151)+"53281,"+RIGHT$(STR$(PEEK(49154)),LEN(STR$(PEEK(49154)))-1) 520 EZ$=EZ$+":"+CHR$(151)+"53280," 525 EZ$=EZ$+RIGHT$(STR$(PEEK(49155)),LEN(STR$(PEEK(49155)))-1) 530 EZ$=EZ$+":"+CHR$(151)+"53272,"+RIGHT$(STR$(PEEK(837)),LEN(STR$(PEEK(837)))-1) 535 EZ$=EZ$+":"+CHR$(153)+CHR$(34)+"[147]"+CHR$(PEEK(838))+CHR$(34)+";" 540 ZZ$(1)=EZ$:EZ$="" 545 REM GENERIERUNG DER LETZTEN ZEILE 550 IFPEEK(839)=1ANDPEEK(834)=0ANDZZ$(Z)<>CHR$(130)THENZZ$(Z)=ZZ$(Z)+"":GOTO650 555 REM SCHLEIFE GEHT NICHT BIS ZUR LETZTEN ZEILE 560 IFZZ$(Z)=CHR$(130)ANDPEEK(834)=0THENGOSUB590:ZZ$(Z)=ZZ$(Z)+"":GOTO650 565 REM LETZTES ZEICHEN POKEN, FALLS DAS ZEICHEN NICHT SPACE IST 570 IFPEEK(834)=0THEN650 575 IFZZ$(Z)<>CHR$(130)THEN625 580 GOSUB590:GOTO625 585 REM FOR-NEXT SCHLEIFE UM 1 ERNIEDRIGEN 590 Z$=ZZ$(Z-2):IFVAL(RIGHT$(Z$,2))=0THENAN=1:GOTO600 595 AN=2 600 Z1$=LEFT$(Z$,LEN(Z$)-AN) 605 Z$=STR$(VAL(RIGHT$(Z$,AN))-1):ZA$=RIGHT$(Z$,LEN(Z$)-1):ZZ$(Z-2)=Z1$+ZA$ 610 IFAN=1ANDZA$="2"THENZZ$(Z-2)=ZZ$(Z-1):ZZ$(Z)=ZZ$(Z-1):GOTO620 615 Z=Z+1:ZZ$(Z)=ZZ$(Z-2) 620 RETURN 625 ZZ$(Z)=LEFT$(ZZ$(Z),LEN(ZZ$(Z))-3)+""+RIGHT$(ZZ$(Z),2) 630 Z=Z+1:ZZ$(Z)=CHR$(151)+"2023,"+RIGHT$(STR$(PEEK(832)),LEN(STR$(PEEK(832)))-1) 635 ZZ$(Z)=ZZ$(Z)+":"+CHR$(151)+"56295," 640 ZZ$(Z)=ZZ$(Z)+RIGHT$(STR$(PEEK(833)),LEN(STR$(PEEK(833)))-1) 645 REM MASKE ALS PROGRAMM 650 PRINT"[147][155]";:POKE53281,11:POKE53280,11:POKE53272,21 655 PRINT"STARTZEILE ?" 660 PRINT"SCHRITTWEITE ?[157][145][145]";:INPUTSZ$:PRINT""SPC(16);:INPUTSW$ 665 SZ=VAL(SZ$):SW=VAL(SW$) 670 IF(SZ+Z>63999)OR(Z*SW+SZ-1>63999)ORSW<1THEN655 675 EZ=SZ+Z*SW-1:V=0:KA=32768 680 FORZN=SZTOEZSTEPSW:V=V+1 685 K=KA+LEN(ZZ$(V))+6 690 KA=KA+1:POKEKA,K-INT(K/256)*256:KA=KA+1:POKEKA,INT(K/256) 695 KA=KA+1:POKEKA,ZN-INT(ZN/256)*256:KA=KA+1:POKEKA,INT(ZN/256) 700 FORI=1TOLEN(ZZ$(V)):KA=KA+1:POKEKA,ASC(MID$(ZZ$(V),I,1)):NEXT 705 KA=KA+1:POKEKA,0:NEXT 710 KA=KA+2:POKEKA-1,0:POKEKA,0 715 REM VON 2049 AUF 32769 UMSCHALTEN 720 KA=KA+1:POKE835,KA-INT(KA/256)*256:POKE836,INT(KA/256) 725 PRINT"[147]P[207]32768,0:P[207]43,1:P[207]44,128:P[207]45,P[197](835):POKE46,P[197](836):P[207]55,0:P[207]56,160 730 [153]"CLR 735 PRINT"LIST" 740 POKE631,19:POKE632,13:POKE633,13:POKE634,13:POKE198,4:END 745 : 750 : 755 REM *** BMG/EDITOR *** 760 GOSUB1300 765 XD=16:YD=44:X1=0:Y1=0 770 X=XD:Y=YD:K=0:POKEV+1,Y:Z=(X>255):POKEV,X+(Z*256):POKE53264,Z*(-1) 775 POKEV+2,0:POKEV+3,0:POKEV+21,3 780 GETA$:IFA$=""THEN780 785 A=1*(A$="")+2*(A$="[145]")+3*(A$="")+4*(A$="[157]")+5*(A$="")+6*(A$="[147]"):A=A*-1 790 IFA=1THENY=Y+8:IFY>236THENY=236:GOTO880 795 IFA=2THENY=Y-8:IFY<44THENY=44:GOTO880 800 IFA=3ANDX=328ANDY=236THEN880 805 IFA=3THENX=X+8:IFX>328THENX=16:A=1:GOTO790 810 IFA=4ANDX=16ANDY=44THEN880 815 IFA=4THENX=X-8:IFX<16THENX=328:A=2:GOTO795 820 IFA=5ANDK=0THENPRINT"";:GOTO765 825 IFA=6ANDK=0THENPRINT"[147]";:GOTO765 830 IFA=0ANDK=0THEN930 835 GOTO880 840 REM ZEICHEN SCHREIBEN 845 IFA$=CHR$(13)THEN880 850 IFA$=CHR$(34)THEN780 855 A=ASC(A$):B=A-161-33*(A<255)-64*(A<192)-32*(A<160)+32*(A<96)-64*(A<64) 860 IFRV=1THENB=B+128 865 POKE1024+Y1*40+X1,B 870 POKE55296+Y1*40+X1,PEEK(V+39):A=3:GOTO800 875 REM SPRITES KOORDINIEREN 880 IFK=1THEN905 885 Z=(X>255):POKEV,X+(Z*256):POKE53264,Z*(-1):POKEV+1,Y 890 X1=(X-16)/8:Y1=(Y-44)/8 895 IFLN=1THENK=1 900 GOTO780 905 Z=(X>255):POKEV+2,X+(Z*256):POKE53264,PEEK(53264)AND1OR(Z*(-2)):POKEV+3,Y 910 IFA$=CHR$(13)THENX2=(X-16)/8:Y2=(Y-44)/8:IFX1<>X2ANDY1<>Y2THEN780 915 IFA$=CHR$(13)ANDLN=1THEN1155 920 GOTO780 925 REM ZUSATZFUNKTIONEN 930 A=1*(A$="")+2*(A$="[146]")+3*(A$="")+4*(A$="")+5*(A$="") 935 A=A+6*(A$="[133]")+7*(A$="[134]")+8*(A$="[135]")+9*(A$="[136]")+10*(A$=CHR$(148)) 940 A=A+11*(A$=CHR$(20))+12*(A$=" ")+13*(A$=""):A=A*-1:IFA=0THEN990 945 REM GONG 950 POKE54296,15:POKE54277,0:POKE54278,247:POKE54276,17:POKE54273,20 955 POKE54272,0:FORI=1TO100:NEXT:POKE54276,16 960 IFA=11THENGOSUB1260:A=4:GOTO810 965 IFA=12THEN1150 970 IFA=13THEN1285 975 ONAGOSUB1015,1020,1110,1125,1030,1195,1210,1220,1225,1235 980 GOTO780 985 REM CURSORFARBEN 990 A=1*(A$="[144]")+2*(A$="")+3*(A$="")+4*(A$="[159]")+5*(A$="[156]")+6*(A$="") 995 A=A+7*(A$="")+8*(A$="[158]")+9*(A$="[129]")+10*(A$="[149]")+11*(A$="[150]")+12*(A$="[151]") 1000 A=A+13*(A$="[152]")+14*(A$="[153]")+15*(A$="[154]")+16*(A$="[155]"):A=A*-1 1005 IFA=0THEN845 1010 PRINTCO$(A);:POKEV+39,A-1:POKEV+40,A-1:GOTO780 1015 RV=1:RETURN:REM RVS/ON 1020 RV=0:RETURN:REM RVS/OFF 1025 REM ZEILE ZENTRIEREN 1030 ZE$="":Z=Y1:I=0:C1=0:C2=0:ZZ=0 1035 IFI<40THENCH=PEEK(1024+Z*40+I):IFCH=32ORCH=96THENC1=C1+1:I=I+1:GOTO1035 1040 I=39 1045 IFI>-1THENCH=PEEK(1024+Z*40+I):IFCH=32ORCH=96THENC2=C2+1:I=I-1:GOTO1045 1050 IFC1=C2THEN780 1055 FORI=C1TO40-C2:ZE$=ZE$+CHR$(PEEK(1024+Z*40+I))+CHR$(PEEK(55296+Z*40+I)):NEXT 1060 IFC1>C2THEN1085 1065 C=(C2-C1)/2 1070 GOSUB1110 1075 FORI=C1+CTO40-C2+C:ZZ=ZZ+2:POKE1024+Z*40+I,ASC(MID$(ZE$,ZZ-1,1)) 1080 POKE55296+Z*40+I,ASC(MID$(ZE$,ZZ,1)):NEXT:GOTO1105 1085 C=(C1-C2)/2 1090 GOSUB1110 1095 ZZ=0:FORI=C1-CTO40-C2-C:ZZ=ZZ+2:POKE1024+Z*40+I,ASC(MID$(ZE$,ZZ-1,1)) 1100 POKE55296+Z*40+I,ASC(MID$(ZE$,ZZ,1)):NEXT 1105 RETURN 1110 REM ZEILE LOESCHEN 1115 PRINT"";LEFT$(D$,Y1);S$;"":POKE1024+Y1*40+39,32 1120 RETURN 1125 REM SPALTE LOESCHEN 1130 IFX1=39THENFORI=0TO24:POKE1024+I*40+39,32:NEXT:GOTO1140 1135 PRINT"";SPC(X1);:FORI=1TO24:PRINT" [157]";:NEXT:PRINT"";:POKE1024+24*40+X1,32 1140 RETURN 1145 REM LINIE ZEICHNEN 1150 LN=1:GOTO885 1155 XD=X2*8+16:YD=Y2*8+44:XN=X2:YN=Y2 1160 Z=PEEK(1024+X1+40*Y1):C=PEEK(55296+X1+40*Y1) 1165 IFX1>X2THENX=X1:X1=X2:X2=X:GOTO1175 1170 IFY2>Y1THENY=Y1:Y1=Y2:Y2=Y 1175 IFY1=Y2THENFORI=X1TOX2:POKE1024+40*Y1+I,Z:POKE55296+40*Y1+I,C:NEXT:GOTO1185 1180 FORI=Y2TOY1:POKE55296+40*I+X1,C:POKE1024+40*I+X1,Z:NEXT 1185 X1=XN:Y1=YN:LN=0:K=0:GOTO770 1190 REM GROUND+1 1195 G=PEEK(53281)AND15:IFG<15THENG=G+1:POKE53281,G:RETURN 1200 IFG=15THENG=0:POKE53281,G:RETURN 1205 REM BORDER+1 1210 BO=PEEK(53280)AND15:IFBO<15THENBO=BO+1:POKE53280,BO:RETURN 1215 IFBO=15THENBO=0:POKE53280,BO:RETURN 1220 POKE650,255:RETURN:REM REPEAT/ON 1225 POKE650,0:RETURN:REM REPEAT/OFF 1230 REM INSERT 1235 FORI=39TOX1STEP-1:POKE55296+Y1*40+I,PEEK(55296+Y1*40+I-1) 1240 POKE1024+Y1*40+I,PEEK(1024+Y1*40+I-1):NEXT 1245 POKE1024+Y1*40+X1,32 1250 RETURN 1255 REM DELETE 1260 FORI=X1TO39:POKE55296+Y1*40+I,PEEK(55296+Y1*40+I+1) 1265 POKE1024+Y1*40+I,PEEK(1024+Y1*40+I+1):NEXT 1270 POKE1024+Y1*40+39,32 1275 RETURN 1280 REM EDITOR-ENDE 1285 FORI=15TO0STEP-1:POKE53281,I:POKE53280,I:NEXT:POKE49154,G:POKE49155,BO 1290 POKE53281,G:POKE53280,BO 1295 POKEV+21,0:GOTO105 1300 REM INIT/SPRITE-INIT 1305 GOSUB1365 1310 D$="" 1315 S$=" " 1320 FORI=832TO839:POKEI,0:NEXT 1325 DIMCO$(16):CO$="[144][159][156][158][129][149][150][151][152][153][154][155]":FORI=1TOLEN(CO$):CO$(I)=MID$(CO$,I,1):NEXT 1330 FORI=704TO704+63:READQ:POKEI,Q:NEXT:POKE2040,11:POKE2041,11 1335 V=53248:POKEV+39,15:POKEV+40,15 1340 RETURN 1345 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,255,128,1,0,128,1,0,128,1,0,128 1350 DATA 1,0,128,1,0,128,1,0,128,1,0,128,1,0,128,1,255,128,0,0,0,0,0,0,0 1355 DATA 0,0,0,0,0,0,0,0,0,0,0,0 1360 DATA"[144]","","","[159]","[156]","","","[158]","[129]","[149]","[150]","[151]","[152]","[153]","[154]","[155]" 1365 G=11:BO=G:POKE53281,G:POKE53280,BO 1370 PRINT"[147] [155] [146]  [146]  [146]  [146]" 1375 PRINT"  [144] [155] [144] [155] [146]  [144] [155] [146]  [144] [155] [144] [146] [155] [144] [155] [144] [155] [144] [146]" 1380 PRINT" [155] [144] [155] [144] [146] [155] [144] [146] [155] [144] [146] [155] [144] [146] [155] [144] [146] [155] [144] [155] [144] [146]  [146]" 1385 PRINT" [155] [144] [146] [155] [144] [155] [146] [144] [155] [146]  [144] [146] [155] [144] [155] [144] [155] [146]" 1390 PRINT"  [144] [155] [144] [155] [146]  [144] [155] [146]  [144] [155] [144] [146] [155] [144] [155] [144] [155] [144] [146]" 1395 PRINT" [155] [144] [155] [144] [146] [155] [144] [146] [155] [144] [155] [144] [155] [144] [155] [144] [155] [144] [146] [155] [144] [155] [144] [146]" 1400 PRINT" [155] [144] [146] [155] [144] [146]  [155] [144] [146] [155] [144] [146]" 1405 PRINT"  [146]  [146]  [146]  [146]" 1410 PRINT" B[155]ILDSCHIRM[158]-[144]M[155]ASKEN[158]-[144]G[155]ENERATOR 1415 N$[178][199](82)[170][199](79)[170][199](77)[170][199](65)[170][199](78)[170][199](32)[170][199](66)[170][199](65) 1420 N$[178]N$[170][199](82)[170][199](84)[170][199](75)[170][199](69) 1425 [153]" SYSWRITTEN 3/1986 BY ";N$ 1430 [151]2,0:[153]""[166]8)"LISTSOLLEN 'SHIFT/SPACE' DEN" 1435 [153]" 'SPACE'-ZEICHEN GLEICH SEIN ? JCMDCMDCMD";:[133]A$ 1440 [139]A$[179][177]"N"[167][151]2,1 1445 [142]