70 F_F$=ID$+I$:GOSUB *FILESIZE_ONLY:IF FSI&=0 THEN 60 ELSE SFS&=FSI&
75 LPF=1:IF O$="!!" THEN O$=LEFT$(I$,INSTR(I$,".")-1)
80 ON ERROR GOTO *L_ERR:OPEN "I",#1,ID$+I$:DUM$=INPUT$(4,1):IF DUM$="YUKI" THEN *PXX ELSE MASK=1:DUM$=INPUT$(26,1):A!=FNB!(INPUT$(4,1)):X=A!:DUM$=INPUT$(8,1):A!=FNB!(INPUT$(4,1)):Y=A!:DUM$=INPUT$(8,1):A!=FNB!(INPUT$(4,1)):BIT=A!:IF CPMC<>0 THEN BIT=1
90 CLOSE #1:PPF=0:IF A!<>4 AND A!<>8 THEN PALM=0:SCM=1:GOTO 130
100 IF A!=4 THEN DL=15:SCM=0 ELSE DL=255:SCM=2
110 ON ERROR GOTO *ERROR:OPEN "I",#2,ID$+LEFT$(I$,INSTR(I$,".")-1)+".plt":ON ERROR GOTO 0
120 A!=CVL(INPUT$(4,2)):CLOSE #2:IF HEX$(A!)="F0000000" THEN GOSUB *PAL_INI ELSE GOSUB *PAL_LOAD
130 SCREEN@ 0:PALETTE:IF BIT=1 THEN SCM=0:DL=1:PALM=0
140 GOSUB *SCREEN_MODE:CLS:LOAD@ ID$+I$:GOSUB *PALETTE_CHANGE:GOSUB *O_OPEN:IF ERF=1 THEN *ERRIVENT
145 GOSUB *MAIN:CLOSE:GOTO *ENDIVENT
150 *O_OPEN:ERF=0:ON ERROR GOTO *O_ERR:OPEN "O",#1,OD$+O$+".PGF":ON ERROR GOTO 0:IF PPM<>0 AND ((NOBJ=1 OR (MASKF AND 128)=0) OR PPF=0) THEN GOSUB *GETPP
160 BITL=LLN\8+SGN(LLN MOD 8):PRINT #1,HEAD$+CHR$(VERN)+MKI$(X)+MKI$(Y)+CHR$(BIT,PALM,MASK,0,0,BITL,0);:IF PALM<>0 THEN GOSUB *PAL_PUT:RETURN ELSE RETURN
170 *MAIN:BITL=LLN\8+SGN(LLN MOD 8):X1=0:X2=X1+X-1:Y1=0:Y2=Y1+Y-1
175 IF PPF>1 THEN ROLL -(PPY0),-(PPX0)
177 FS&=0:YP=Y1-1:A=0:AP=0:IF BIT=1 THEN FOR C=Y1 TO Y2:GET@ (X1,C)-(X2,C),G%,%MGC:GOTO 200
5010 IF PPF=1 THEN GOSUB *SCREEN_MODE:GOSUB *OFF_CALC:PUT@A (0,0)-(X-1,Y-1),FB%,,,,,FBOFF&
5020 MOUSE 0:MOUSE 1,,,1:FCX=PPX0:FCY=PPY0:PPX=PPX1-PPX0+1:PPY=PPY1-PPY0+1:SAF=1:DI=4:GOSUB *FILE:PPX0=FCX:PPY0=FCY:PPX1=FCX+PPX-1:PPY1=FCY+PPY-1:MOUSE 5:IF PCF=0 THEN *PCHG
5030 X=PPX:Y=PPY:GOSUB *CALC_LLN:PPF=PPF+2:RETURN
5500 *OFF_CALC
5510 ON SCM+1 GOTO 5520,5530,5540:RETURN
5520 FBOFF&=19+48:RETURN
5530 FBOFF&=19+224:RETURN
5540 FBOFF&=19+768:RETURN
6000 *FILE
6010 GOSUB *FBOX_CHK:GOSUB 6350:GOSUB 6400:MOUSE 4,0,0,PMAX,PMAY:IF SAF=1 THEN GOSUB 6240
6020 IF MOUSE(2,1) THEN WHILE MOUSE(6,1)=0:WEND:GOTO 6170
6030 IF MOUSE(2,0) THEN A=MOUSE(6,0) ELSE 6020
6040 MMX=MOUSE(0):MMY=MOUSE(1):IF MMX<311 AND MMY>=MCY AND MMY<=MCY+15 THEN 6250
6050 IF SAF=0 THEN 6190 ELSE GOSUB 6240:CMD=0:IF NOT(MMX>FCX-DI AND MMX<FCX+PPX+DI AND MMY<FCY+PPY+DI AND MMY>FCY-DI) THEN 6190
6060 IF ABS(MMX-FCX)<DI THEN CMD=1 ELSE IF ABS(MMX-(FCX+PPX-1))<DI THEN CMD=2
6070 IF ABS(MMY-FCY)<DI THEN CMD=CMD+4 ELSE IF ABS(MMY-(FCY+PPY-1))<DI THEN CMD=CMD+8
6080 IF CMD=0 THEN GOSUB 6320:WHILE MOUSE(6,0)=0:FCX=MOUSE(0)-LNX:FCY=MOUSE(1)-LNY:GOSUB 6240:GOSUB 6390:GOSUB 6240:WEND:GOSUB 6240:SAF=1:MOUSE 4,0,0,PMAX,PMAY:GOTO 6020
6090 LNX=MMX:LNY=MMY:CPX=MMX:CPY=MMY:MMX=FCX+PPX-1:MMY=FCY+PPY-1:IF CMD AND 1 THEN LNX=0:CPX=MMX:MMX=FCX:FCX=CPX ELSE IF CMD AND 2 THEN LNX=FCX:CPX=PMAX
6100 IF CMD AND 4 THEN LNY=0:CPY=MMY:MMY=FCY:FCY=CPY ELSE IF CMD AND 8 THEN LNY=FCY:CPY=PMAY
20060 WHILE K$<>"":K$=INKEY$:WEND:WHILE MOUSE(2,0)=0 AND K$="":K$=INKEY$:WEND:IF K$="" THEN WHILE MOUSE(6,0)=0:WEND:MX=MOUSE(0):MY=MOUSE(1) ELSE IF INSTR(CHR$(13)+CHR$(24),K$)=0 THEN 20060 ELSE IF CHR$(13)=K$ THEN *PARAMSET ELSE RETURN *ENDIVENT
20070 IF MX>74 AND MY>55 AND MX<268 AND MY<74 THEN CPMC=1-SGN(CPMC):GOSUB *MONOMODE:GOTO 20060
20080 IF MX>74 AND MY>93 AND MX<268 AND MY<112 THEN MASKF=1-SGN(MASKF):GOSUB *MASKMODE:GOTO 20060
20085 IF MX>74 AND MY>131 AND MX<268 AND MY<150 THEN PPM=1-SGN(PPM):GOSUB *PPMODE:GOTO 20060
20090 IF MX>314 AND MY>93 AND MX<508 AND MY<112 THEN BACKF=1-SGN(BACKF):GOSUB *BACKMODE:GOTO 20060
20100 IF MX>314 AND MY>55 AND MX<602 AND MY<74 THEN IF CPMC=0 THEN 20060 ELSE GOSUB *MONOCIN:GOSUB *MONOMODE:GOTO 20060
20110 IF NOT(MX>188 AND MY>169 AND MX<390 AND MY<188) THEN 20160
20120 IF MX<248 THEN T$=TAIL$(0):GOSUB *INTAIL:GOTO 20060
20130 IF MX<296 THEN T$=TAIL$(1):GOSUB *INTAIL:GOTO 20060
20140 IF MX<344 THEN T$=TAIL$(2):GOSUB *INTAIL:GOTO 20060
20150 IF MX>343 THEN T$=TAIL$(3):GOSUB *INTAIL:GOTO 20060
20160 IF MX>0 AND MY>188 AND MX<154 AND MY<207 THEN GOSUB *DRIVE_SEL:ID$=D$:GOSUB *INDRIVE:GOTO 20060
20170 IF MX>0 AND MY>264 AND MX<154 AND MY<283 THEN GOSUB *DRIVE_SEL:OD$=D$:GOSUB *OUTDRIVE:GOTO 20060
20180 IF MY>226 AND MY<264 THEN FILE$=F$:FIY=12:GOSUB *FILEIN:F$=FILE$:GOSUB *INFILEVIEW:GOSUB *OUTFILEVIEW:GOTO 20060
20190 IF MY>302 AND MY<340 THEN FILE$=O$:FIY=16:GOSUB *FILEIN:O$=FILE$:IF O$="!!" THEN O$=F$:GOSUB *OUTFILEVIEW:GOTO 20060 ELSE GOSUB *OUTFILEVIEW:GOTO 20060
20200 IF MX>478 AND MY>454 AND MX<537 AND MY<474 THEN RETURN *ENDIVENT
20210 IF MX>550 AND MY>454 AND MX<609 AND MY<474 THEN *PARAMSET
20220 IF MX>6 AND MY>454 AND MX<65 AND MY<474 THEN GOSUB *FILESVIEW:GOTO 20060
21990 BEEP:GOTO 20060
25000 *PARAMSET
25010 IF MASKF=1 AND BACKF=1 THEN MASK=129:GOTO 25040
25020 IF MASKF=1 AND BACKF=0 THEN MASK=128:GOTO 25040