#11 Article 147 Posted at 1987/06/05 23:10:30 by NOZOMU (MAP041) [PRG.NL2]

Subject: NLOADER2+EDITORモドキ

100 'トリアエズ、 アッシュク セーバ ト ローダ ノ セツメイ ノ タメニ カイタ カンイ Editorモドキ
110 '
120 ' Progtammed by NOZOMU / Loaderハ "NLOADER2" ト ヨンデ クダサイ。
130 '
1000 DEFINT A-Z
1010 DIM D(7),D1%(2),D2%(2)
1020 D1(0)=4:D1(1)=2:D2(0)=4:D2(1)=2
1030 D(0)=&H0   :D(1)=&H80:D(2)=&H2080:D(3)=&H20A0
1040 D(4)=&H50A0:D(5)=&H50E0:D(6)=&HB0E0:D(7)=&HFFFF
1050 DEF FNP(POINTER)=POINT((POINTER\96)*4,(POINTER MOD 96)*2)
1060 DEF FNS(WRITE.D)=WRITE.D+32-((WRITE.D>95 )*32)
1065 DEF FNR(READ.D )=READ.D -32+((READ.D >159)*32)
1070 DEF FNX(POINTER)=POINTER \ 96
1080 DEF FNY(POINTER)=POINTER MOD 96
1100 CLS:LOCATE,,0
1110 ON STOP GOSUB 1120:STOP ON:GOTO 1130
1120 LOCATE,,1:STOP
1130 '
1140 A$=INPUT$(1)
1150 P=POINT(X*4+1,Y*2):LINE(X*4,Y*2)-(X*4,Y*2+1),P:LINE(X*4+3,Y*2)-(X*4+3,Y*2+1),P
1160 IF A$=CHR$(28) THEN X=X+1
1170 IF A$=CHR$(29) THEN X=X-1
1180 IF A$=CHR$(30) THEN Y=Y-1
1190 IF A$=CHR$(31) THEN Y=Y+1
1200 IF X<0   THEN X=0
1210 IF X>159 THEN X=159
1220 IF Y<0   THEN Y=0
1230 IF Y>99  THEN Y=99
1240 IF A$="0" THEN LINE(X*4,Y*2)-STEP(3,1),0,BF
1250 IF A$="1" THEN LINE(X*4,Y*2)-STEP(3,1),1,BF
1260 IF A$="2" THEN LINE(X*4,Y*2)-STEP(3,1),2,BF
1270 IF A$="3" THEN LINE(X*4,Y*2)-STEP(3,1),3,BF
1280 IF A$="4" THEN LINE(X*4,Y*2)-STEP(3,1),4,BF
1290 IF A$="5" THEN LINE(X*4,Y*2)-STEP(3,1),5,BF
1300 IF A$="6" THEN LINE(X*4,Y*2)-STEP(3,1),6,BF
1310 IF A$="7" THEN LINE(X*4,Y*2)-STEP(3,1),7,BF
1320 IF A$="l" THEN SCREEN,2:INPUT"load :",F$:CLS:SCREEN,1:GOSUB *LOAD.PIC
1330 IF A$="s" THEN SCREEN,2:INPUT"save :",F$:CLS:SCREEN,1:GOSUB *SAVE.PIC
1331 IF A$="g" THEN GRAY=1
1332 IF A$="t" THEN GRAY=0
1340 P=7-POINT(X*4+1,Y*2):LINE(X*4,Y*2)-(X*4,Y*2+1),P:LINE(X*4+3,Y*2)-(X*4+3,Y*2+1),P
1350 GOTO 1140
1360 '
1370 ' Save module
1380 '
1390 *SAVE.PIC
1400 OPEN F$ FOR OUTPUT AS #1
1410 POINTER=0
1420 WHILE POINTER<15360
1430    COUNTER=1
1440    COLOUR=FNP(POINTER)*8+FNP(POINTER+1)
1450    POINTER=POINTER+2
1460       IF POINTER=15360 THEN 1510
1470       NEXT.COLOUR=FNP(POINTER)*8+FNP(POINTER+1)
1480       IF COLOUR<>NEXT.COLOUR THEN 1510
1490       COUNTER=COUNTER+1
1500    IF COUNTER<161 THEN 1450 ELSE POINTER=POINTER+2
1510    IF COUNTER=1 THEN PRINT #1,CHR$(FNS(COLOUR));:LENGTH=LENGTH+1
1520    IF COUNTER>1 THEN PRINT #1,CHR$(FNS(COLOUR+64));CHR$(FNS(COUNTER-2));:LENGTH=LENGTH+2
1530    IF LENGTH>77 THEN PRINT #1,CHR$(13);CHR$(10);:LENGTH=0
1540 WEND
1550 CLOSE #1
1560 RETURN
1570 '
1580 ' Load module
1590 '
1600 *LOAD.PIC
1610 OPEN F$ FOR INPUT AS #1
1620 POINTER=0
1630 WHILE POINTER<15360
1640    DUMMY=ASC(INPUT$(1,1)):IF DUMMY<32 THEN 1640
1650    COLOUR=FNR(DUMMY)
1660    IF COLOUR<64 THEN COUNTER=1:GOTO 1680
1670    COLOUR=COLOUR-64:COUNTER=FNR(ASC(INPUT$(1,1)))+2
1680    COLOUR1=COLOUR \ 8 : COLOUR2=COLOUR MOD 8
1690    D1(2)=D(COLOUR1):D2(2)=D(COLOUR2)
1700    FOR I=1 TO COUNTER
1710       IF GRAY=1 THEN PUT@(FNX(POINTER)*4,FNY(POINTER)*2  ),D1,PSET                                 : PUT@(FNX(POINTER)*4,FNY(POINTER)*2+2),D2,PSET
1720       IF GRAY=0 THEN LINE(FNX(POINTER)*4,FNY(POINTER)*2  )-STEP(3,1),COLOUR1,BF                    : LINE(FNX(POINTER)*4,FNY(POINTER)*2+2)-STEP(3,1),COLOUR2,BF
1730       POINTER=POINTER+2
1740    NEXT
1750 WEND
1760 CLOSE #1
1770 RETURN