OK, I've fixed your program. Try this:by Galleon (no login)DEFINT A-Z DIM SHARED FontBOX1(16000) DIM SHARED FontBOX2(16000) DIM SHARED FontBOX3(16000) DIM SHARED FontBOX4(16000) DIM SHARED GothBOX(4800) DIM SHARED Options(4800) DIM SHARED ScreenBOX(160000) DIM SHARED HelpInstructions(1 TO 213000) DIM SHARED HelpFileDetails(1 TO 94000) DIM SHARED HelpAbout(16300) DIM SHARED MenuBOX(1 TO 17000) DIM SHARED BBox(1500) DIM SHARED BGBox(8000) DIM SHARED TeenieBOX(100) DIM SHARED ItemBG(1000) DIM SHARED CEditBOX(24000) DIM SHARED FlipBOX(200) DIM SHARED NumBOX(300) DIM SHARED FChar(1 TO 124) DIM SHARED CopyBOX(119, 89) DIM SHARED PasteBOX(119, 89) DIM SHARED UndoBOX(5500) DIM SHARED RedoBOX(5500) DIM SHARED AniBOX(5500) DIM SHARED BigAniBOX(86500) DIM SHARED FileINPUT(12500) DIM SHARED SavePROMPT(15150) DIM SHARED OhOhBOX(15150) TYPE RecentTYPE PName AS STRING * 32 FName AS STRING * 130 END TYPE DIM SHARED Recent(1 TO 6) AS RecentTYPE OPEN "Recent.DAT" FOR RANDOM AS #1 LEN = LEN(Recent(1)) FOR n = 1 TO 6 GET #1, n, Recent(n) NEXT n CLOSE #1 REDIM SHARED ProjectBOX(6205) REDIM SHARED SwapBOX(6205) DIM SHARED ToolBOX(1 TO 9) FOR n = 1 TO 9: ToolBOX(n) = n * 10: NEXT n DIM SHARED mx, my, mb, mb2, Menu, WorkingTOOL, WorkingCOLOR, Highlighted DIM SHARED Masked, MaskX, MaskY, MaskXX, MaskYY DIM SHARED FrameNUM, NumFRAMES, FileNAME$, PrintNAME$, WorkDONE DIM SHARED Theme&, OhOh&, Tick& Theme& = _SNDOPEN("G256Them.OGG", "SYNC") Tick& = _SNDOPEN("G256Tick.OGG", "SYNC") OhOh& = _SNDOPEN("G256OhOh.OGG", "SYNC") WorkingTOOL = 1: WorkingCOLOR = 0 EXtx = 29: EXty = 208: EXbx1 = 35: Exbx2 = 44 DEF SEG = VARSEG(FontBOX1(0)) BLOAD "G256MSSR.FNT", VARPTR(FontBOX1(0)) DEF SEG = VARSEG(FontBOX2(0)) BLOAD "G256WHTB.FNT", VARPTR(FontBOX2(0)) DEF SEG = VARSEG(GothBOX(0)) BLOAD "G256GOTH.FNT", VARPTR(GothBOX(0)) DEF SEG = VARSEG(FontBOX3(0)) BLOAD "G256BLKB.FNT", VARPTR(FontBOX3(0)) DEF SEG = VARSEG(FontBOX4(0)) BLOAD "G256BLUR.FNT", VARPTR(FontBOX4(0)) DEF SEG = VARSEG(Options(0)) BLOAD "G256opts.BSV", VARPTR(Options(0)) DEF SEG = VARSEG(BBox(0)) BLOAD "G256rbut.BSV", VARPTR(BBox(0)) DEF SEG = VARSEG(MenuBOX(1)) BLOAD "G256menu.BSV", VARPTR(MenuBOX(1)) DEF SEG = VARSEG(NumBOX(0)) BLOAD "G256nums.BSV", VARPTR(NumBOX(0)) DEF SEG = VARSEG(HelpAbout(0)) BLOAD "G256Habt.BSV", VARPTR(HelpAbout(0)) DEF SEG = VARSEG(CEditBOX(0)) BLOAD "G256CEdt.BSV", VARPTR(CEditBOX(0)) DEF SEG = VARSEG(FileINPUT(0)) BLOAD "G256fsav.BSV", VARPTR(FileINPUT(0)) DEF SEG = VARSEG(OhOhBOX(0)) BLOAD "G256OhOh.BSV", VARPTR(OhOhBOX(0)) DEF SEG = VARSEG(SavePROMPT(0)) BLOAD "G256spmt.BSV", VARPTR(SavePROMPT(0)) DEF SEG OPEN "G256Hins.BGF" FOR BINARY AS #1 GET #1, , HelpInstructions() CLOSE #1 OPEN "G256Hfdt.BGF" FOR BINARY AS #1 GET #1, , HelpFileDetails() CLOSE #1 SCREEN _NEWIMAGE(640, 480, 256) _FULLSCREEN OPEN "GFX256.PAL" FOR INPUT AS #1 OUT &H3C8, 0 FOR n = 0 TO 767 INPUT #1, Intensity OUT &H3C9, Intensity NEXT n CLOSE #1 OPEN "G256scrn.BGF" FOR BINARY AS #1 GET #1, , ScreenBOX() CLOSE #1 PUT (0, 0), ScreenBOX(), PSET GET (14, 60)-(133, 149), UndoBOX() GET (14, 60)-(133, 149), RedoBOX() FrameNUM = 1: NumFRAMES = 1 _DELAY 1.5 _SNDPLAY Theme& _MOUSESHOW DO DO WHILE GetMouseInput SELECT CASE my CASE 37 TO 49: MenuBAR 1 CASE 55 TO 430 SELECT CASE mx CASE 0 TO 140 IF Menu THEN MenuBAR 0 ToolBAR CASE 141 TO 639 IF Menu THEN MenuBAR 0 IF my < 425 THEN WorkAREA END SELECT CASE 431 TO 479 ColorSELECTION CASE ELSE MenuBAR 0 END SELECT LOOP LOOP SYSTEM '------------ end of main module ---------------------------------------- SUB MenuBAR (InOUT) STATIC x1, x2, MenuX, OldMx, Iy, OldIy, Index, MenuRIGHT STATIC MenuBOTTOM, Item, OldITEM, Selection, OldSELECT IF InOUT = 0 THEN GOSUB DeLIGHT: EXIT SUB IF Menu > 6 THEN DO IF MouseChange THEN SELECT CASE mx CASE MenuX - 3 TO MenuRIGHT + 3 SELECT CASE my CASE IS < 37: GOSUB CloseMENU: EXIT SUB CASE 37 TO 57 IF mx < x1 OR mx > x2 THEN GOSUB CloseMENU: EXIT SUB CASE 58 TO 71: Iy = 58: Item = 1: GOSUB LightITEM CASE 72 TO 85 IF Menu <> 30 THEN Iy = 72: Item = 2: GOSUB LightITEM END IF CASE 86 TO 99 IF Menu <> 30 AND Menu <> 40 THEN Iy = 86: Item = 3: GOSUB LightITEM END IF CASE 100 TO 113 IF Menu = 10 OR Menu = 20 THEN Iy = 100: Item = 4: GOSUB LightITEM END IF CASE 119 TO 132 IF Menu = 10 THEN Iy = 119: Item = 5: GOSUB LightITEM END IF CASE 133 TO 146 IF Menu = 10 THEN Iy = 133: Item = 6: GOSUB LightITEM END IF CASE 147 TO 160 IF Menu = 10 THEN Iy = 147: Item = 7: GOSUB LightITEM END IF CASE 161 TO 174 IF Menu = 10 THEN Iy = 161: Item = 8: GOSUB LightITEM END IF CASE 183 TO 196 IF Menu = 10 THEN Iy = 183: Item = 9: GOSUB LightITEM END IF END SELECT CASE ELSE: GOSUB CloseMENU: EXIT SUB END SELECT IF my > (MenuBOTTOM + 3) THEN GOSUB CloseMENU: EXIT SUB END IF Selection = Menu + Item IF mb = -1 THEN GOSUB CloseMENU SELECT CASE Selection CASE 11 TO 19: GFXFile Selection - 10 CASE 21 TO 29: GFXEdit Selection - 20 CASE 31 TO 39: GFXColor CASE 41 TO 49: GFXSpecial Selection - 40 CASE 51 TO 59: GFXHelp Selection - 50 END SELECT EXIT SUB END IF MouseChange = GetMouseInput LOOP ELSE SELECT CASE mx CASE 20 TO 50 IF Menu <> 1 THEN GOSUB DeLIGHT x1 = 20: x2 = 50 GOSUB HiLIGHT Menu = 1 END IF CASE 57 TO 87 IF Menu <> 2 THEN GOSUB DeLIGHT x1 = 57: x2 = 87 GOSUB HiLIGHT Menu = 2 END IF CASE 96 TO 132 IF Menu <> 3 THEN GOSUB DeLIGHT x1 = 96: x2 = 132 GOSUB HiLIGHT Menu = 3 END IF CASE 141 TO 188 IF Menu <> 4 THEN GOSUB DeLIGHT x1 = 141: x2 = 188 GOSUB HiLIGHT Menu = 4 END IF CASE 196 TO 230 IF Menu <> 5 THEN GOSUB DeLIGHT x1 = 196: x2 = 230 GOSUB HiLIGHT Menu = 5 END IF CASE 604 TO 624 IF Menu <> 6 THEN GOSUB DeLIGHT x1 = 604: x2 = 624 GOSUB HiLIGHT Menu = 6 END IF CASE ELSE GOSUB DeLIGHT EXIT SUB END SELECT END IF IF mb = -1 THEN IF Menu < 10 THEN SELECT CASE Menu CASE 1: MenuX = 20: Index = 1: GOSUB DropMENU CASE 2: MenuX = 58: Index = 7500: GOSUB DropMENU CASE 3: MenuX = 96: Index = 9500: GOSUB DropMENU CASE 4: MenuX = 132: Index = 10700: GOSUB DropMENU CASE 5: MenuX = 192: Index = 13000: GOSUB DropMENU CASE 6 IF WorkDONE THEN ExitPROMPT = 10 GFXFile ExitPROMPT IF ExitPROMPT = 11 THEN EXIT SUB ELSE SYSTEM END IF END SELECT END IF END IF EXIT SUB HiLIGHT: FOR x = x1 TO x2 FOR y = 37 TO 49 IF POINT(x, y) = 223 THEN PSET (x, y), 224 NEXT y NEXT x RETURN DeLIGHT: IF Menu <> 0 THEN FOR x = x1 TO x2 FOR y = 37 TO 49 IF POINT(x, y) = 224 THEN PSET (x, y), 223 NEXT y NEXT x END IF Menu = 0 RETURN DropMENU: MenuRIGHT = MenuX + MenuBOX(Index) / 8 - 1 MenuBOTTOM = 50 + MenuBOX(Index + 1) - 1 GET (MenuX, 50)-(MenuRIGHT, MenuBOTTOM), BGBox() GET (MenuX, MenuBOTTOM - 1)-(MenuX + 2, MenuBOTTOM), TeenieBOX() PUT (MenuX, 50), MenuBOX(Index), PSET PUT (MenuX, MenuBOTTOM - 1), TeenieBOX(), PSET Menu = Menu * 10 OldMENU = Menu IF Menu = 10 THEN num = 1 FOR y = 121 TO 163 STEP 14 x = 40 Name$ = RTRIM$(Recent(num).PName) FOR n = 1 TO LEN(Name$) Char$ = MID$(Name$, n, 1) PrintSTRING x, y, Char$, 5 IF x > 100 THEN PrintSTRING x, y, "...", 5 EXIT FOR END IF NEXT n num = num + 1 NEXT y END IF RETURN CloseMENU: PUT (MenuX, 50), BGBox(), PSET Iy = 0: OldIy = 0: Item = 0: OldITEM = 0 GOSUB DeLIGHT RETURN LightITEM: IF Item <> OldITEM THEN GOSUB CloseITEM GET (MenuX, Iy)-(MenuRIGHT, Iy + 13), ItemBG() FOR x = MenuX + 2 TO MenuRIGHT - 4 FOR y = Iy TO Iy + 13 IF POINT(x, y) = 252 THEN PSET (x, y), 255 ELSE PSET (x, y), 252 NEXT y NEXT x OldIy = Iy OldMx = MenuX END IF RETURN CloseITEM: IF OldMx = MenuX AND OldIy > 0 THEN PUT (MenuX, OldIy), ItemBG(), PSET END IF RETURN END SUB SUB PaletteDISPLAY (Colr) FOR x = 18 TO 595 STEP 30 FOR y = 434 TO 449 STEP 15 LINE (x, y)-(x + 27, y + 12), Colr, BF Clr$ = LTRIM$(STR$(Colr)) IF LEN(Clr$) = 1 THEN Clr$ = "00" + Clr$ IF LEN(Clr$) = 2 THEN Clr$ = "0" + Clr$ OUT &H3C7, Colr: red = INP(&H3C9): green = INP(&H3C9): blue = INP(&H3C9) IF (red + green + blue) < 72 THEN Fnt = 2 ELSE Fnt = 4 PrintSTRING x + 5, y + 1, Clr$, Fnt Colr = Colr + 1 IF Colr = 256 THEN Colr = 0 NEXT y NEXT x END SUB SUB PrintSTRING (x, y, Prnt$, Font) FOR n = 1 TO LEN(Prnt$) Char$ = MID$(Prnt$, n, 1) IF Char$ = " " OR Char$ = CHR$(255) THEN x = x + 3 ELSE SELECT CASE Font CASE 1 Index = (ASC(Char$) - 33) * FontBOX1(0) + 2 PUT (x, y), FontBOX1(Index + 7520), AND PUT (x, y), FontBOX1(Index) x = x + FontBOX1(Index) / 8 CASE 2 Index = (ASC(Char$) - 33) * FontBOX2(0) + 2 PUT (x, y), FontBOX2(Index + 7520), AND PUT (x, y), FontBOX2(Index) x = x + FontBOX2(Index) / 8 CASE 3 Index = (ASC(Char$) - 33) * GothBOX(0) + 2 PUT (x, y), GothBOX(Index + 2400), AND PUT (x, y), GothBOX(Index) x = x + GothBOX(Index) / 8 CASE 4 Index = (ASC(Char$) - 33) * FontBOX3(0) + 2 PUT (x, y), FontBOX3(Index + 7520), AND PUT (x, y), FontBOX3(Index) x = x + FontBOX2(Index) / 8 CASE 5 Index = (ASC(Char$) - 33) * FontBOX4(0) + 2 PUT (x, y), FontBOX4(Index + 7520), AND PUT (x, y), FontBOX4(Index) x = x + FontBOX4(Index) / 8 END SELECT END IF NEXT n END SUB SUB GFXFile (MenuITEM) SHARED Ky$, OldFILENAME$, OldPRINTNAME$, InitCOLOR STATIC Cancelled OldFILENAME$ = FileNAME$: OldPRINTNAME$ = PrintNAME$ SELECT CASE MenuITEM CASE 1 'New IF WorkDONE THEN SELECT CASE SavePROMPT CASE 0 'x-button/Cancel button EXIT SUB CASE 1 'Yes GOSUB Yes GOSUB NewFILE CASE 2 'No GOSUB NewFILE END SELECT ELSE GOSUB NewFILE END IF CASE 2 'Open IF WorkDONE THEN SELECT CASE SavePROMPT CASE 0 EXIT SUB CASE 1 GOSUB Yes END SELECT END IF Banner = 1 GOSUB GetNAME IF Cancelled = 1 THEN: Cancelled = 0: EXIT SUB GOSUB OpenFILE CASE 3 'Save IF LEN(FileNAME$) = 0 THEN Banner = 2 GOSUB GetNAME IF Cancelled = 1 THEN Cancelled = 0: EXIT SUB GOSUB CheckEXISTING GOSUB SAVEFile LINE (140, 10)-(639, 30), 248, BF PrintSTRING 160, 15, PrintNAME$, 2 WorkDONE = 0 ELSE GOSUB SAVEFile WorkDONE = 0 END IF CASE 4 'Save As Banner = 3 GOSUB GetNAME IF Cancelled = 1 THEN Cancelled = 0: EXIT SUB GOSUB CheckEXISTING GOSUB SAVEFile WorkDONE = 0 LINE (140, 10)-(639, 30), 248, BF PrintSTRING 160, 15, PrintNAME$, 2 SetRECENT 1 CASE 5 TO 8 'Open from recent list OPEN "Recent.DAT" FOR RANDOM AS #1 LEN = LEN(Recent(1)) FOR n = 1 TO 4 GET #1, n, Recent(n) NEXT n CLOSE #1 FileNUMBER = MenuITEM - 4 P$ = RTRIM$(Recent(FileNUMBER).PName) IF LEN(P$) THEN IF WorkDONE THEN SELECT CASE SavePROMPT CASE 0 EXIT SUB CASE 1 GOSUB Yes END SELECT END IF FileNAME$ = RTRIM$(Recent(FileNUMBER).FName) PrintNAME$ = RTRIM$(Recent(FileNUMBER).PName) GOSUB OpenFILE END IF CASE 9, 10 'Exit IF WorkDONE THEN SELECT CASE SavePROMPT CASE 0 IF MenuITEM = 10 THEN MenuITEM = 11 EXIT SUB CASE 1 GOSUB Yes IF MenuITEM = 10 THEN SYSTEM CASE 2 SYSTEM END SELECT ELSE CLOSE #1 SYSTEM END IF END SELECT EXIT SUB GetNAME: GET (158, 72)-(158 + FileINPUT(0) / 8 - 1, 72 + FileINPUT(1) - 1), ScreenBOX() PUT (158, 72), FileINPUT(), PSET SELECT CASE Banner CASE 1: PrintSTRING 204, 88, "Open", 2 CASE 2: PrintSTRING 204, 88, "Save", 2 CASE 3: PrintSTRING 204, 88, "Save As", 2 END SELECT n$ = "": Ky$ = "": PrintX = 174: CharNUM = 1 DO LINE (PrintX + 2, 110)-(PrintX + 2, 120), 253 Ky$ = INKEY$ IF LEN(Ky$) THEN SELECT CASE ASC(Ky$) CASE 8 IF LEN(n$) THEN CharNUM = CharNUM - 1 LINE (FChar(CharNUM), 109)-(PrintX + 2, 121), 255, BF PrintX = FChar(CharNUM) n$ = MID$(n$, 1, LEN(n$) - 1) LINE (PrintX + 2, 110)-(PrintX + 2, 120), 253 END IF CASE 13 PUT (158, 72), ScreenBOX(), PSET GOSUB MakeNAME RETURN CASE 32, 46, 48 TO 58, 65 TO 90, 92, 95, 97 TO 122, 126 IF PrintX < 398 THEN FChar(CharNUM) = PrintX CharNUM = CharNUM + 1 LINE (PrintX + 2, 110)-(PrintX + 2, 120), 255 PrintSTRING PrintX, 110, Ky$, 5 LINE (PrintX + 2, 110)-(PrintX + 2, 120), 253 n$ = n$ + Ky$ END IF END SELECT END IF DO WHILE GetMouseInput SELECT CASE my CASE 87 TO 99 IF mx > 379 AND mx < 401 THEN Highlight IF mb AND Highlighted THEN PUT (158, 72), ScreenBOX(), PSET Cancelled = 1 RETURN END IF ELSE UnHighlight END IF CASE 128 TO 150 SELECT CASE mx CASE 289 TO 346 'OK IF mb THEN _SNDPLAY Tick& PUT (158, 72), ScreenBOX(), PSET GOSUB MakeNAME RETURN END IF CASE 349 TO 406 'CANCEL IF mb THEN _SNDPLAY Tick& PUT (158, 72), ScreenBOX(), PSET Cancelled = 1 RETURN END IF CASE ELSE UnHighlight END SELECT CASE ELSE UnHighlight END SELECT LOOP LOOP RETURN CheckEXISTING: OPEN FileNAME$ FOR BINARY AS #1 IF LOF(1) THEN CLOSE #1 DisplayERROR 2 FileNAME$ = OldFILENAME$ PrintNAME$ = OldPRINTNAME$ EXIT SUB END IF CLOSE #1 RETURN OpenFILE: OPEN FileNAME$ FOR BINARY AS #1 IF LOF(1) THEN GET #1, , Check& IF Check& = 16253175 THEN ArraySIZE& = LOF(1) / 2 - 1 REDIM ProjectBOX(ArraySIZE&) GET #1, 1, ProjectBOX() CLOSE #1 ELSE CLOSE #1 DisplayERROR 3 SetRECENT 2 EXIT SUB END IF ELSE DisplayERROR 1 CLOSE #1 KILL FileNAME$ SetRECENT 2 EXIT SUB END IF OUT &H3C8, 0 FOR n = 34 TO 693 OUT &H3C9, ProjectBOX(n) NEXT n PUT (14, 60), ProjectBOX(803), PSET ScaleUP WorkDONE = 0 PrintNAME$ = "" FOR n = 2 TO 33 Char$ = CHR$(ProjectBOX(n)) PrintNAME$ = PrintNAME$ + Char$ NEXT n LINE (140, 10)-(639, 30), 248, BF PrintSTRING 160, 15, PrintNAME$, 2 GET (14, 60)-(133, 149), UndoBOX() GET (14, 60)-(133, 149), RedoBOX() NumFRAMES = ProjectBOX(802) FrameNUM = 1 SetRECENT 1 PrintNUMS 66, 155, "001" PaletteDISPLAY (InitCOLOR) RETURN SAVEFile: ProjectBOX(0) = 247: ProjectBOX(1) = 248 FOR n = 1 TO 32 Char$ = MID$(PrintNAME$, n, 1) ProjectBOX(n + 1) = ASC(Char$) NEXT n OUT &H3C7, 0 FOR n = 34 TO 801 ProjectBOX(n) = INP(&H3C9) NEXT n ProjectBOX(802) = NumFRAMES GET (14, 60)-(133, 149), ProjectBOX(803 + (FrameNUM - 1) * 5402) OPEN FileNAME$ FOR BINARY AS #1 PUT #1, , ProjectBOX() CLOSE #1 SetRECENT 1 WorkDONE = 0 RETURN NewFILE: LINE (14, 60)-(133, 149), 255, BF ScaleUP GET (14, 60)-(133, 149), UndoBOX() GET (14, 60)-(133, 149), RedoBOX() FrameNUM = 1 FileNAME$ = "" PrintNAME$ = "" LINE (140, 10)-(639, 30), 248, BF PrintSTRING 160, 15, "Untitled", 2 NumFRAMES = 1 OPEN "GFX256.PAL" FOR INPUT AS #1 OUT &H3C8, 0 FOR n = 0 TO 767 INPUT #1, Intensity OUT &H3C9, Intensity NEXT n CLOSE #1 InitCOLOR = 0 PaletteDISPLAY (InitCOLOR) PrintNUMS 66, 155, "001" EXIT SUB RETURN MakeNAME: IF LEN(n$) THEN FOR n = LEN(n$) TO 1 STEP -1 Char$ = MID$(n$, n, 1) IF Char$ = "." THEN Dot = n IF Char$ = "\" THEN Slash = n: EXIT FOR NEXT n IF Dot THEN n$ = MID$(n$, 1, Dot - 1) IF Slash THEN Path$ = MID$(n$, 1, Slash) IF Slash THEN n$ = MID$(n$, Slash + 1, 32) IF LEN(n$) > 32 THEN n$ = LEFT$(n$, 32) Cap$ = UCASE$(MID$(n$, 1, 1)) LC$ = MID$(n$, 2) PrintNAME$ = Cap$ + LC$ + SPACE$(32 - LEN(n$)) FileNAME$ = Path$ + n$ + ".GFX" ELSE Cancelled = 1 PUT (158, 72), ScreenBOX(), PSET END IF RETURN Yes: IF LEN(FileNAME$) THEN GOSUB SAVEFile ELSE Banner = 2 GOSUB GetNAME IF Cancelled THEN Cancelled = 0 IF MenuITEM = 6 THEN MenuITEM = 7 EXIT SUB END IF GOSUB CheckEXISTING GOSUB SAVEFile END IF RETURN END SUB SUB GFXEdit (Item) SHARED Invisible SELECT CASE Item CASE 1 'Undo GET (14, 60)-(133, 149), RedoBOX() PUT (14, 60), UndoBOX(), PSET ScaleUP CASE 2 'Redo GET (14, 60)-(133, 149), UndoBOX() PUT (14, 60), RedoBOX(), PSET ScaleUP CASE 3 'Copy IF Masked = 1 THEN IF MaskX > MaskXX THEN SWAP MaskX, MaskXX IF MaskY > MaskYY THEN SWAP MaskY, MaskYY IF MaskXX > 133 THEN MaskXX = 133 IF MaskX < 14 THEN MaskX = 14 IF MaskY < 60 THEN MaskY = 60 IF MaskYY > 149 THEN MaskYY = 149 FOR x = 0 TO 119 FOR y = 0 TO 89 CopyBOX(x, y) = -1 PasteBOX(x, y) = -1 IF x + 14 >= MaskX AND x + 14 <= MaskXX THEN IF y + 60 >= MaskY AND y + 60 <= MaskYY THEN CopyBOX(x, y) = POINT(x + 14, y + 60) END IF END IF NEXT y NEXT x FOR x = MaskX TO MaskXX FOR y = MaskY TO MaskYY PasteBOX(x - MaskX, y - MaskY) = POINT(x, y) NEXT y NEXT x Masked = 0 ELSE FOR x = 0 TO 119 FOR y = 0 TO 89 CopyBOX(x, y) = POINT(x + 14, y + 60) PasteBOX(x, y) = POINT(x + 14, y + 60) NEXT y NEXT x END IF CASE 4 'Paste GET (14, 60)-(133, 149), UndoBOX() IF Masked THEN IF MaskX > MaskXX THEN SWAP MaskX, MaskXX IF MaskY > MaskYY THEN SWAP MaskY, MaskYY IF MaskXX > 133 THEN MaskXX = 133 IF MaskX < 14 THEN MaskX = 14 IF MaskY < 60 THEN MaskY = 60 IF MaskYY > 149 THEN MaskYY = 149 boxx = 0: boxy = o FOR x = MaskX TO MaskXX boxy = 0 FOR y = MaskY TO MaskYY Colr = PasteBOX(boxx, boxy) IF Invisible AND Colr = 255 THEN Colr = -1 IF Colr <> -1 THEN PSET (x, y), PasteBOX(boxx, boxy) boxy = boxy + 1 NEXT y boxx = boxx + 1 NEXT x Masked = 0 ELSE FOR x = 0 TO 119 FOR y = 0 TO 89 Colr = CopyBOX(x, y) IF Invisible AND Colr = 255 THEN Colr = -1 IF Colr <> -1 THEN PSET (x + 14, y + 60), CopyBOX(x, y) NEXT y NEXT x END IF ScaleUP END SELECT END SUB SUB GFXColor () SHARED InitCOLOR SHARED LastEDIT GET (146, 261)-(146 + (CEditBOX(800) / 8), 261 + CEditBOX(801)), ScreenBOX() PUT (146, 261), CEditBOX(800), PSET ExRx = 163: ExGx = 163: ExBx = 163 IF WorkingCOLOR < 220 THEN MixCOLOR = WorkingCOLOR ELSE MixCOLOR = LastEDIT GOSUB SetMIX DO DO WHILE GetMouseInput SELECT CASE my CASE 277 TO 287 SELECT CASE mx CASE 334 TO 356 IF Light = 0 THEN GOSUB LightX END IF CASE ELSE GOSUB DarkX END SELECT CASE 325 TO 371 SELECT CASE mx CASE 155 TO 310 SELECT CASE my CASE 328 TO 340 'red slider RX = mx - 6 IF mb THEN GOSUB PutSLIDER1 CASE 345 TO 357 'green slider GX = mx - 6 IF mb THEN GOSUB PutSLIDER2 CASE 362 TO 374 'blue slider BX = mx - 6 IF mb THEN GOSUB PutSLIDER3 END SELECT OUT &H3C8, MixCOLOR: OUT &H3C9, MixR: OUT &H3C9, MixG: OUT &H3C9, MixB CASE 328 TO 356 SELECT CASE my CASE 329 TO 349 'Old IF mb THEN OUT &H3C7, 221: R = INP(&H3C9): g = INP(&H3C9): b = INP(&H3C9) OUT &H3C8, MixCOLOR: OUT &H3C9, R: OUT &H3C9, g: OUT &H3C9, b GOSUB NewSLIDERS END IF CASE 354 TO 375 'New IF mb THEN OUT &H3C7, MixCOLOR: R = INP(&H3C9): g = INP(&H3C9): b = INP(&H3C9) OUT &H3C8, 221: OUT &H3C9, R: OUT &H3C9, g: OUT &H3C9, b GOSUB NewSLIDERS WorkDONE = 1 END IF END SELECT END SELECT CASE 411 TO 421 SELECT CASE mx CASE 23 TO 38: Scan = 1: Sx1 = 24: Sx2 = 35 CASE 44 TO 58: Scan = 2: Sx1 = 47: Sx2 = 55 CASE 89 TO 103: Scan = 3: Sx1 = 92: Sx2 = 100 CASE 110 TO 125: Scan = 4: Sx1 = 112: Sx2 = 123 CASE ELSE: EXIT DO END SELECT IF mb AND Scan THEN GOSUB ScanCOLRS CASE 434 TO 447 IF mx > 16 AND mx < 618 THEN Row = 1 ELSE Row = 0 CASE 448 TO 461 IF mx > 16 AND mx < 618 THEN Row = 2 ELSE Row = 0 CASE ELSE GOSUB DarkX EXIT DO END SELECT IF mb AND Light THEN IF CurrCOLOR = 1 THEN OUT &H3C7, 221: R = INP(&H3C9): g = INP(&H3C9): b = INP(&H3C9) OUT &H3C8, MixCOLOR: OUT &H3C9, R: OUT &H3C9, g: OUT &H3C9, b END IF GOSUB DarkX PUT (146, 261), ScreenBOX(), PSET LastEDIT = MixCOLOR mb = 0 EXIT SUB END IF IF mb AND Row THEN IF CurrCOLOR = 1 THEN OUT &H3C7, 221: R = INP(&H3C9): g = INP(&H3C9): b = INP(&H3C9) OUT &H3C8, MixCOLOR: OUT &H3C9, R: OUT &H3C9, g: OUT &H3C9, b END IF Column = (mx - 17) \ 30 + 1 Location = (mx - 17) MOD 30 IF Location > 0 AND Location < 29 THEN MixCOLOR = ((Column - 1) * 2 + Row - 1) + InitCOLOR IF MixCOLOR < 0 THEN MixCOLOR = MixCOLOR + 256 IF MixCOLOR > 256 THEN MixCOLOR = MixCOLOR - 256 IF MixCOLOR = 256 THEN MixCOLOR = 0 IF MixCOLOR < 220 THEN GOSUB SetMIX ELSE MixCOLOR = LastEDIT END IF END IF END IF Row = 0 LOOP LOOP EXIT SUB LightX: IF Light = 0 THEN FOR x = 340 TO 350 FOR y = 278 TO 286 IF POINT(x, y) = 223 THEN PSET (x, y), 224 NEXT y NEXT x Light = 1 END IF RETURN DarkX: IF Light = 1 THEN FOR x = 340 TO 350 FOR y = 278 TO 286 IF POINT(x, y) = 224 THEN PSET (x, y), 223 NEXT y NEXT x Light = 0 END IF RETURN ScanCOLRS: LINE (Sx1, 414)-(Sx2, 418), 224, BF SELECT CASE Scan CASE 1: InitCOLOR = InitCOLOR - 40 CASE 2: InitCOLOR = InitCOLOR - 2 CASE 3: InitCOLOR = InitCOLOR + 2 CASE 4: InitCOLOR = InitCOLOR + 40 END SELECT IF InitCOLOR < 0 THEN InitCOLOR = InitCOLOR + 256 IF InitCOLOR > 255 THEN InitCOLOR = InitCOLOR - 256 IF InitCOLOR = 256 THEN InitCOLOR = 0 PaletteDISPLAY (InitCOLOR) _DELAY .1 LINE (Sx1, 414)-(Sx2, 418), 222, BF Scan = 0: mb = 0 RETURN PutSLIDER1: IF RX < 163 THEN RX = 163 IF RX > 290 THEN RX = 290 PUT (ExRx, 328), CEditBOX(), PSET PUT (RX, 328), CEditBOX(120), PSET ExRx = RX MixR = (RX - 163) \ 2 Tens = MixR \ 10 Ones = MixR MOD 10 TIndex = 480 + Tens * 20 OIndex = 480 + Ones * 20 PUT (315, 331), CEditBOX(TIndex), PSET PUT (319, 331), CEditBOX(OIndex), PSET CurrCOLOR = 1 RETURN PutSLIDER2: IF GX < 163 THEN GX = 163 IF GX > 290 THEN GX = 290 PUT (ExGx, 345), CEditBOX(), PSET PUT (GX, 345), CEditBOX(240), PSET ExGx = GX MixG = (GX - 163) \ 2 Tens = MixG \ 10 Ones = MixG MOD 10 TIndex = 480 + Tens * 20 OIndex = 480 + Ones * 20 PUT (315, 348), CEditBOX(TIndex), PSET PUT (319, 348), CEditBOX(OIndex), PSET CurrCOLOR = 1 RETURN PutSLIDER3: IF BX < 163 THEN BX = 163 IF BX > 290 THEN BX = 290 PUT (ExBx, 362), CEditBOX(), PSET PUT (BX, 362), CEditBOX(360), PSET ExBx = BX MixB = (BX - 163) \ 2 Tens = MixB \ 10 Ones = MixB MOD 10 TIndex = 480 + Tens * 20 OIndex = 480 + Ones * 20 PUT (315, 365), CEditBOX(TIndex), PSET PUT (319, 365), CEditBOX(OIndex), PSET CurrCOLOR = 1 RETURN NewSLIDERS: RX = R * 2 + 163: GOSUB PutSLIDER1 GX = g * 2 + 163: GOSUB PutSLIDER2 BX = b * 2 + 163: GOSUB PutSLIDER3 CurrCOLOR = 0 RETURN SetMIX: Clr$ = LTRIM$(STR$(MixCOLOR)) Clr$ = "000" + Clr$ Clr$ = MID$(Clr$, LEN(Clr$) - 2, 3) LINE (286, 277)-(320, 287), 254, BF PrintSTRING 286, 277, Clr$, 2 LINE (328, 354)-(356, 374), MixCOLOR, BF PUT (336, 360), CEditBOX(750), AND PUT (336, 360), CEditBOX(700) OUT &H3C7, MixCOLOR: R = INP(&H3C9): g = INP(&H3C9): b = INP(&H3C9) OUT &H3C8, 221: OUT &H3C9, R: OUT &H3C9, g: OUT &H3C9, b IF (R + g + b) < 72 THEN FontCOLOR = 255 ELSE FontCOLOR = 254 FOR x = 336 TO 356 FOR y = 360 TO 370 IF POINT(x, y) <> MixCOLOR THEN PSET (x, y), FontCOLOR IF POINT(x, y - 24) <> 221 THEN PSET (x, y - 24), FontCOLOR NEXT y NEXT x GOSUB NewSLIDERS RETURN END SUB SUB GFXSpecial (Item) GET (14, 60)-(133, 149), UndoBOX() SELECT CASE Item CASE 1 'flip vertically FOR y = 60 TO 104 GET (14, y)-(133, y), FlipBOX() GET (14, 209 - y)-(133, 209 - y), FlipBOX(100) PUT (14, y), FlipBOX(100), PSET PUT (14, 209 - y), FlipBOX(), PSET NEXT y ScaleUP CASE 2 'flip horizonatally FOR x = 14 TO 73 GET (x, 60)-(x, 149), FlipBOX() GET (147 - x, 60)-(147 - x, 149), FlipBOX(100) PUT (x, 60), FlipBOX(100), PSET PUT (147 - x, 60), FlipBOX(), PSET NEXT x ScaleUP END SELECT END SUB SUB GFXHelp (Item) SELECT CASE Item CASE 1, 2 Page = 0 IF Item = 1 THEN LastPAGE = 11 GET (158, 72)-(158 + HelpInstructions(1) / 8 - 1, 72 + HelpInstructions(2) - 1), ScreenBOX() PUT (158, 72), HelpInstructions(), PSET ELSE LastPAGE = 4 GET (158, 72)-(158 + HelpFileDetails(1) / 8 - 1, 72 + HelpFileDetails(2) - 1), ScreenBOX() PUT (158, 72), HelpFileDetails(), PSET END IF DO DO WHILE GetMouseInput SELECT CASE my CASE 86 TO 98 SELECT CASE mx CASE 364 TO 386 IF Button <> 1 THEN Bx = 370 GOSUB LightBUTT Button = 1 END IF CASE 387 TO 411 IF Button <> 2 THEN Bx = 393 GOSUB LightBUTT Button = 2 END IF CASE 412 TO 434 IF Button <> 3 THEN Bx = 418 GOSUB LightBUTT Button = 3 END IF CASE ELSE: GOSUB DarkBUTT END SELECT CASE ELSE: GOSUB DarkBUTT END SELECT IF mb AND Button THEN SELECT CASE Button CASE 1 'back Page = Page - 1: GOSUB TurnPAGE CASE 2 'exit GOSUB CloseSHOP CASE 3 'forward Page = Page + 1: GOSUB TurnPAGE END SELECT END IF LOOP LOOP CASE 3 GET (158, 72)-(158 + (HelpAbout(0) / 8), 72 + HelpAbout(1)), ScreenBOX() PUT (158, 72), HelpAbout(), PSET DO DO WHILE GetMouseInput SELECT CASE my CASE 86 TO 98 SELECT CASE mx CASE 370 TO 390 IF Button <> 4 THEN Bx = 376 GOSUB LightBUTT Button = 4 END IF CASE ELSE GOSUB DarkBUTT END SELECT CASE ELSE GOSUB DarkBUTT END SELECT IF Button = 4 AND mb THEN GOSUB CloseSHOP LOOP LOOP END SELECT EXIT SUB DarkBUTT: FOR x = ExBx TO ExBx + 10 FOR y = 88 TO 96 IF POINT(x, y) = 224 THEN PSET (x, y), 223 NEXT y NEXT x Button = 0 RETURN LightBUTT: IF ExBx <> 0 THEN GOSUB DarkBUTT FOR x = Bx TO Bx + 10 FOR y = 88 TO 96 IF POINT(x, y) = 223 THEN PSET (x, y), 224 NEXT y NEXT x ExBx = Bx RETURN TurnPAGE: IF Page = -1 OR Page = LastPAGE + 1 THEN GOSUB CloseSHOP ELSE IF Item = 1 THEN IF Page = 0 THEN PUT (158, 72), HelpInstructions(), PSET ELSE Index! = ((Page - 1) * 17000) + 26000 PUT (169, 105), HelpInstructions(Index!), PSET END IF ELSE IF Page = 0 THEN PUT (158, 72), HelpFileDetails(), PSET ELSE Index! = ((Page - 1) * 17000) + 26000 PUT (169, 105), HelpFileDetails(Index!), PSET END IF END IF END IF RETURN CloseSHOP: PUT (158, 72), ScreenBOX(), PSET EXIT SUB RETURN END SUB SUB ToolBAR () STATIC ExTIndex, CircleTOOL, SquareTOOL, ElipseTOOL SHARED EXtx, EXty, EXbx1, Exbx2, InitCOLOR, Invisible MouseChange = 1 DO IF MouseChange THEN SELECT CASE my CASE 180 TO 196 'run buttons SELECT CASE mx CASE 17 TO 38: Button = 1: bx = 17: BIndex = 0 CASE 40 TO 61: Button = 2: bx = 41: BIndex = 250 CASE 63 TO 85: Button = 3: bx = 63: BIndex = 500 CASE 87 TO 108: Button = 4: bx = 86: BIndex = 750 CASE 110 TO 131: Button = 5: bx = 108: BIndex = 1000 CASE ELSE: EXIT SUB END SELECT IF mb AND Button THEN GOSUB ButtonCLICK: EXIT SUB CASE 205 TO 230 'tool row 1 SELECT CASE mx CASE 27 TO 57: Tool = 1 CASE 59 TO 89: Tool = 2 CASE 91 TO 121: Tool = 3 CASE ELSE: EXIT SUB END SELECT IF mb AND Tool THEN GOSUB toolclick CASE 231 TO 256 'tool row 2 SELECT CASE mx CASE 27 TO 57: Tool = 4 CASE 59 TO 89: Tool = 5 CASE 91 TO 121: Tool = 6 CASE ELSE: EXIT SUB END SELECT IF mb AND Tool THEN GOSUB toolclick CASE 257 TO 282 'tool row 3 SELECT CASE mx CASE 27 TO 57: Tool = 7 CASE 59 TO 89: Tool = 8 CASE 91 TO 121: Tool = 9 CASE ELSE: EXIT SUB END SELECT IF mb AND Tool THEN GOSUB toolclick CASE 290 TO 308 'options buttons SELECT CASE WorkingTOOL CASE 2 SELECT CASE mx CASE 35 TO 44: BrushNUM = 1: bx1 = 35: bx2 = 44 CASE 45 TO 55: BrushNUM = 2: bx1 = 45: bx2 = 55 CASE 56 TO 68: BrushNUM = 3: bx1 = 56: bx2 = 68 CASE 80 TO 92: BrushNUM = 4: bx1 = 80: bx2 = 92 CASE 93 TO 103: BrushNUM = 5: bx1 = 93: bx2 = 103 CASE 104 TO 113: BrushNUM = 6: bx1 = 104: bx2 = 113 CASE ELSE: EXIT SUB END SELECT CASE 4, 5, 7 SELECT CASE mx CASE 48 TO 66: Fill = 1 CASE 82 TO 100: Fill = 2 CASE ELSE: EXIT SUB END SELECT END SELECT IF mb AND (BrushNUM > 0) THEN GOSUB SetBRUSH: EXIT SUB IF mb AND (Fill > 0) THEN GOSUB SetFILL: EXIT SUB CASE 322 TO 342 'Invisible/Visible buttons IF mx > 28 AND mx < 72 THEN IF mb THEN LINE (29, 322)-(71, 342), 224, B 'Mask on LINE (77, 322)-(119, 342), 244, B 'Mask off Invisible = 1 END IF END IF IF mx > 76 AND mx < 120 THEN IF mb THEN LINE (29, 322)-(71, 342), 244, B 'Mask on LINE (77, 322)-(119, 342), 224, B 'Mask off Invisible = 0 END IF END IF CASE 411 TO 421 'color scan arrows SELECT CASE mx CASE 23 TO 38: Scan = 1: Sx1 = 24: Sx2 = 35 CASE 44 TO 58: Scan = 2: Sx1 = 47: Sx2 = 55 CASE 89 TO 103: Scan = 3: Sx1 = 92: Sx2 = 100 CASE 110 TO 125: Scan = 4: Sx1 = 112: Sx2 = 123 CASE ELSE: EXIT SUB END SELECT IF mb AND Scan THEN GOSUB ScanCOLORS: EXIT SUB CASE ELSE: EXIT SUB END SELECT END IF MouseChange = GetMouseInput LOOP EXIT SUB ButtonCLICK: GET (bx, 180)-(bx + 24, 197), BBox(1250) PUT (bx, 180), BBox(BIndex), PSET SELECT CASE Button CASE 1: 'Rewind to beginning IF FrameNUM <> 1 THEN GET (14, 60)-(133, 149), ProjectBOX(803 + (FrameNUM - 1) * 5402) PUT (14, 60), ProjectBOX(803), PSET IF WorkDONE = 1 THEN LessWORK = 1 ELSE LessWORK = 0 ScaleUP WorkDONE = LessWORK PrintNUMS 66, 155, "001" FrameNUM = 1 END IF CASE 2: 'Back one frame IF FrameNUM > 1 THEN GET (14, 60)-(133, 149), ProjectBOX(803 + (FrameNUM - 1) * 5402) FrameNUM = FrameNUM - 1 PUT (14, 60), ProjectBOX(803 + (FrameNUM - 1) * 5402), PSET IF WorkDONE = 1 THEN LessWORK = 1 ELSE LessWORK = 0 ScaleUP WorkDONE = LessWORK Frame$ = "000" + LTRIM$(RTRIM$(STR$(FrameNUM))) Frame$ = RIGHT$(Frame$, 3) PrintNUMS 66, 155, Frame$ END IF CASE 3: 'PLAY IF WorkDONE THEN GET (14, 60)-(133, 149), ProjectBOX(803 + (FrameNUM - 1) * 5402) FOR n& = 0 TO NumFRAMES - 1 Frame$ = "000" + LTRIM$(RTRIM$(STR$(n& + 1))) Frame$ = RIGHT$(Frame$, 3) PrintNUMS 66, 155, Frame$ WAIT &H3DA, 8: WAIT &H3DA, 8, 8 PUT (14, 60), ProjectBOX(n& * 5402 + 803), PSET IF WorkDONE = 1 THEN LessWORK = 1 ELSE LessWORK = 0 ScaleUP _DELAY .05 WorkDONE = LessWORK NEXT n& _DELAY .05 PUT (14, 60), ProjectBOX((FrameNUM - 1) * 5402 + 803), PSET IF WorkDONE = 1 THEN LessWORK = 1 ELSE LessWORK = 0 ScaleUP WorkDONE = LessWORK Frame$ = "000" + LTRIM$(RTRIM$(STR$(FrameNUM))) Frame$ = RIGHT$(Frame$, 3) PrintNUMS 66, 155, Frame$ CASE 4: 'Forward one frame FrameNUM = FrameNUM + 1 Frame$ = "000" + LTRIM$(RTRIM$(STR$(FrameNUM))) Frame$ = RIGHT$(Frame$, 3) PrintNUMS 66, 155, Frame$ IF FrameNUM > NumFRAMES THEN NumFRAMES = NumFRAMES + 1 ArraySIZE& = 802 + NumFRAMES * 5402& REDIM SwapBOX(ArraySIZE&) FOR n& = 0 TO ArraySIZE& - 5402 SwapBOX(n&) = ProjectBOX(n&) NEXT n& REDIM ProjectBOX(ArraySIZE&) FOR n& = 0 TO ArraySIZE& - 5402 ProjectBOX(n&) = SwapBOX(n&) NEXT n& ProjectBOX(802) = NumFRAMES GET (14, 60)-(133, 149), ProjectBOX(803 + (FrameNUM - 2) * 5402) LINE (14, 60)-(133, 149), 255, BF ScaleUP ELSE GET (14, 60)-(133, 149), ProjectBOX(803 + (FrameNUM - 2) * 5402) PUT (14, 60), ProjectBOX(803 + (FrameNUM - 1) * 5402), PSET IF WorkDONE = 1 THEN LessWORK = 1 ELSE LessWORK = 0 ScaleUP WorkDONE = LessWORK END IF CASE 5: 'Forward to end GET (14, 60)-(133, 149), ProjectBOX(803 + (FrameNUM - 1) * 5402) PUT (14, 60), ProjectBOX(803 + (NumFRAMES - 1) * 5402), PSET IF WorkDONE = 1 THEN LessWORK = 1 ELSE LessWORK = 0 ScaleUP WorkDONE = LessWORK Frame$ = "000" + LTRIM$(RTRIM$(STR$(NumFRAMES))) Frame$ = RIGHT$(Frame$, 3) PrintNUMS 66, 155, Frame$ FrameNUM = NumFRAMES END SELECT _DELAY .075 PUT (bx, 180), BBox(1250), PSET RETURN toolclick: TIndex = -1 SELECT CASE Tool CASE 1: tx = 29: ty = 208 CASE 2: tx = 61: ty = 208: TIndex = 0 CASE 3: tx = 93: ty = 208 CASE 4: tx = 29: ty = 234: TIndex = 3600 CASE 5: tx = 61: ty = 234: TIndex = 1200 CASE 6: tx = 93: ty = 234 CASE 7: tx = 29: ty = 260: TIndex = 2400 CASE 8: tx = 61: ty = 260 CASE 9: tx = 93: ty = 260 END SELECT LINE (EXtx, EXty)-STEP(26, 20), 244, B LINE (tx, ty)-STEP(26, 20), 224, B EXtx = tx: EXty = ty IF TIndex > -1 THEN PUT (27, 288), Options(TIndex), PSET ELSE LINE (27, 288)-(121, 310), 243, BF END IF WorkingTOOL = Tool ExTIndex = TIndex RETURN ScanCOLORS: LINE (Sx1, 414)-(Sx2, 418), 224, BF SELECT CASE Scan CASE 1: InitCOLOR = InitCOLOR - 40 CASE 2: InitCOLOR = InitCOLOR - 2 CASE 3: InitCOLOR = InitCOLOR + 2 CASE 4: InitCOLOR = InitCOLOR + 40 END SELECT IF InitCOLOR > 255 THEN InitCOLOR = InitCOLOR - 256 IF InitCOLOR < 0 THEN InitCOLOR = InitCOLOR + 256 IF InitCOLOR = 256 THEN InitCOLOR = 0 PaletteDISPLAY (InitCOLOR) _DELAY .1 LINE (Sx1, 414)-(Sx2, 418), 222, BF RETURN SetBRUSH: FOR x = EXbx1 TO Exbx2 FOR y = 290 TO 308 Colr = POINT(x, y) SELECT CASE Colr CASE 222: Colr = 250 CASE 220: Colr = 225 CASE 224: Colr = 223 END SELECT PSET (x, y), Colr NEXT y NEXT x FOR x = bx1 TO bx2 FOR y = 290 TO 308 Colr = POINT(x, y) SELECT CASE Colr CASE 250: Colr = 222 CASE 225: Colr = 220 CASE 223: Colr = 224 END SELECT PSET (x, y), Colr NEXT y NEXT x EXbx1 = bx1: Exbx2 = bx2: ToolBOX(2) = 20 + (BrushNUM - 1) GET (27, 288)-(121, 310), Options() RETURN SetFILL: IF Fill = 1 THEN d1 = 222: d2 = 250 m1 = 220: m2 = 225 l1 = 224: l2 = 223 ToolBOX(WorkingTOOL) = WorkingTOOL * 10 ELSE d1 = 250: d2 = 222 m1 = 225: m2 = 220 l1 = 223: l2 = 224 ToolBOX(WorkingTOOL) = WorkingTOOL * 10 + 1 END IF FOR x = 48 TO 100 FOR y = 290 TO 308 SELECT CASE x CASE IS > 74 IF POINT(x, y) = d1 THEN PSET (x, y), d2 IF POINT(x, y) = m1 THEN PSET (x, y), m2 IF POINT(x, y) = l1 THEN PSET (x, y), l2 CASE IS < 74 IF POINT(x, y) = d2 THEN PSET (x, y), d1 IF POINT(x, y) = m2 THEN PSET (x, y), m1 IF POINT(x, y) = l2 THEN PSET (x, y), l1 END SELECT NEXT y NEXT x GET (27, 288)-(121, 310), Options(ExTIndex) RETURN END SUB SUB ColorSELECTION () SHARED InitCOLOR, LastEDIT SELECT CASE my CASE 434 TO 447: Row = 1 CASE 448 TO 461: Row = 2 CASE ELSE: EXIT SUB END SELECT IF mb THEN IF mx > 16 AND mx < 618 THEN Column = (mx - 17) \ 30 + 1 Location = (mx - 17) MOD 30 IF Location > 0 AND Location < 29 THEN WorkingCOLOR = ((Column - 1) * 2 + Row - 1) + InitCOLOR IF WorkingCOLOR > 255 THEN WorkingCOLOR = WorkingCOLOR - 256 IF WorkingCOLOR < 0 THEN WorkingCOLOR = WorkingCOLOR + 256 IF WorkingCOLOR = 221 THEN WorkingCOLOR = LastEDIT LINE (64, 410)-(83, 422), WorkingCOLOR, BF END IF END IF END IF END SUB SUB WorkAREA () MouseChange = 1 DO IF MouseChange THEN SELECT CASE mx CASE 140 TO 639 SELECT CASE my CASE 55 TO 430 WorkX = (mx - 146) \ 4 LilX = 14 + WorkX WorkY = (my - 60) \ 4 LilY = WorkY + 60 IF OldLX = 0 THEN OldLX = LilX IF OldLY = 0 THEN OldLY = LilY SELECT CASE WorkingTOOL CASE 1 'freehand tool IF mb THEN IF Action = 0 THEN GOSUB GetUNDO VIEW SCREEN (14, 60)-(133, 149) LINE (OldLX, OldLY)-(LilX, LilY), WorkingCOLOR VIEW ScaleUP Action = 1 END IF CASE 2 'brush tool (0-5) IF mb THEN IF Action = 0 THEN GOSUB GetUNDO VIEW SCREEN (14, 60)-(133, 149) SELECT CASE ToolBOX(WorkingTOOL) MOD 10 CASE 0 CIRCLE (LilX, LilY), 1, WorkingCOLOR 'brush round 1 PSET (LilX, LilY), WorkingCOLOR CASE 1 CIRCLE (LilX, LilY), 2, WorkingCOLOR 'brush size 2 LINE (LilX - 1, LilY - 1)-(LilX + 1, LilY + 1), WorkingCOLOR, BF CASE 2 CIRCLE (LilX, LilY), 3, WorkingCOLOR 'brush size 3 LINE (LilX - 2, LilY - 2)-(LilX + 2, LilY + 2), WorkingCOLOR, BF CASE 3 LINE (LilX - 2, LilY - 2)-(LilX + 3, LilY + 3), WorkingCOLOR, BF 'brush square 3 CASE 4 LINE (LilX - 1, LilY - 1)-(LilX + 2, LilY + 2), WorkingCOLOR, BF 'brush square 2 CASE 5 LINE (LilX, LilY)-(LilX + 1, LilY + 1), WorkingCOLOR, BF 'brush square 1 END SELECT VIEW ScaleUP Action = 1 END IF CASE 3 'line tool IF mb THEN IF Action = 0 THEN GOSUB GetUNDO StartX = LilX: StartY = LilY GET (14, 60)-(133, 149), AniBOX() END IF VIEW SCREEN (14, 60)-(133, 149) PUT (14, 60), AniBOX(), PSET LINE (StartX, StartY)-(LilX, LilY), WorkingCOLOR VIEW ScaleUP Action = 1 END IF CASE 4 'box tool (0/1) IF mb THEN IF Action = 0 THEN GOSUB GetUNDO StartX = LilX: StartY = LilY GET (14, 60)-(133, 149), AniBOX() END IF VIEW SCREEN (14, 60)-(133, 149) PUT (14, 60), AniBOX(), PSET IF ToolBOX(WorkingTOOL) MOD 10 = 1 THEN LINE (StartX, StartY)-(LilX, LilY), WorkingCOLOR, BF ELSE LINE (StartX, StartY)-(LilX, LilY), WorkingCOLOR, B END IF VIEW ScaleUP Action = 1 END IF CASE 5 'circle tool (0/1) IF mb THEN IF Action = 0 THEN GOSUB GetUNDO StartX = LilX: StartY = LilY GET (14, 60)-(133, 149), AniBOX() END IF VIEW SCREEN (14, 60)-(133, 149) PUT (14, 60), AniBOX(), PSET Radius = SQR((LilX - StartX) ^ 2 + (LilY - StartY) ^ 2) IF ToolBOX(WorkingTOOL) MOD 10 = 1 THEN CIRCLE (StartX, StartY), Radius, WorkingCOLOR FOR Radii = 0 TO Radius - 1 CIRCLE (StartX + 1, StartY), Radii, WorkingCOLOR CIRCLE (StartX - 1, StartY), Radii, WorkingCOLOR CIRCLE (StartX, StartY + 1), Radii, WorkingCOLOR CIRCLE (StartX, StartY - 1), Radii, WorkingCOLOR CIRCLE (StartX, StartY), Radii, WorkingCOLOR NEXT Radii ELSE CIRCLE (StartX, StartY), Radius, WorkingCOLOR END IF VIEW ScaleUP Action = 1 END IF CASE 6 'floodfill tool IF mb THEN IF Action = 0 THEN GOSUB GetUNDO VIEW SCREEN (14, 60)-(133, 149) PAINT (LilX, LilY), WorkingCOLOR VIEW ScaleUP Action = 1 ELSEIF mb2 THEN IF Action = 0 THEN GOSUB GetUNDO VIEW SCREEN (14, 60)-(133, 149) max = 120 * 90 REDIM ffX(max * 2), ffY(max * 2) c = POINT(LilX, LilY) base = 0 last = 0 ffX(0) = LilX: ffY(0) = LilY GOTO FFbegin DO oldbase = base OldLast = last IF base = 0 THEN base = max ELSE base = 0 last = base - 1 FFbegin: FOR i = oldbase TO OldLast px = ffX(i) + 1: py = ffY(i): IF POINT(px, py) = c THEN last = last + 1: ffX(last) = px: ffY(last) = py: PSET (px, py), WorkingCOLOR px = ffX(i) - 1: py = ffY(i): IF POINT(px, py) = c THEN last = last + 1: ffX(last) = px: ffY(last) = py: PSET (px, py), WorkingCOLOR px = ffX(i): py = ffY(i) + 1: IF POINT(px, py) = c THEN last = last + 1: ffX(last) = px: ffY(last) = py: PSET (px, py), WorkingCOLOR px = ffX(i): py = ffY(i) - 1: IF POINT(px, py) = c THEN last = last + 1: ffX(last) = px: ffY(last) = py: PSET (px, py), WorkingCOLOR NEXT LOOP UNTIL last = base - 1 VIEW ScaleUP Action = 1 END IF CASE 7 'elipse tool(0/1) IF mb THEN IF Action = 0 THEN GOSUB GetUNDO StartX = LilX: StartY = LilY GET (14, 60)-(133, 149), AniBOX() END IF VIEW SCREEN (14, 60)-(133, 149) PUT (14, 60), AniBOX(), PSET Radius = SQR((LilX - StartX) ^ 2 + (LilY - StartY) ^ 2) IF LilX > StartX THEN Adjacent = LilX - StartX ELSE Adjacent = StartX - LilX END IF IF LilY > StartY THEN Opposite = LilY - StartY ELSE Opposite = StartY - LilY END IF Elipse! = Opposite / (Adjacent + .01) IF ToolBOX(WorkingTOOL) MOD 10 = 1 THEN CIRCLE (StartX, StartY), Radius, WorkingCOLOR, , , Elipse! FOR Radii = 0 TO Radius - 1 CIRCLE (StartX + 1, StartY), Radii, WorkingCOLOR, , , Elipse! CIRCLE (StartX - 1, StartY), Radii, WorkingCOLOR, , , Elipse! CIRCLE (StartX, StartY + 1), Radii, WorkingCOLOR, , , Elipse! CIRCLE (StartX, StartY - 1), Radii, WorkingCOLOR, , , Elipse! CIRCLE (StartX, StartY), Radii, WorkingCOLOR, , , Elipse! NEXT Radii ELSE CIRCLE (StartX, StartY), Radius, WorkingCOLOR, , , Elipse! END IF VIEW ScaleUP Action = 1 END IF CASE 8 'mask tool IF mb THEN IF Action = 0 THEN StartX = ((mx - 146) \ 4) * 4 + 146: StartY = ((my - 60) \ 4) * 4 + 60 Masked = 0 ScaleUP GET (146, 60)-(625, 419), BigAniBOX() END IF PUT (146, 60), BigAniBOX(), PSET ScaleMX = ((mx - 147) \ 4) * 4 + 149: ScaleMY = ((my - 61) \ 4) * 4 + 63 IF StartX < 146 THEN StartX = 146 IF StartX > 625 THEN StartX = 625 IF StartY < 60 THEN StartY = 60 IF StartY > 419 THEN StartY = 419 IF ScaleMX > 625 THEN ScaleMX = 625 IF ScaleMX < 146 THEN ScaleMX = 146 IF ScaleMY > 419 THEN ScaleMY = 419 IF ScaleMY < 60 THEN ScaleMY = 60 LINE (StartX, StartY)-(ScaleMX, ScaleMY), 254, B LINE (StartX, StartY)-(ScaleMX, ScaleMY), 255, B , &HCCCC Action = 1 Mask = 1 END IF IF Action = 0 AND Mask = 1 THEN Masked = 1 Mask = 0 MaskX = (StartX - 146) \ 4 + 14 MaskY = (StartY - 60) \ 4 + 60 MaskXX = (ScaleMX - 146) \ 4 + 14 MaskYY = (ScaleMY - 60) \ 4 + 60 END IF CASE 9 'color swap tool IF mb THEN IF Action = 0 THEN GOSUB GetUNDO SwapCOLOR = POINT(mx, my) VIEW SCREEN (14, 60)-(133, 149) FOR x = 14 TO 133 FOR y = 60 TO 149 IF POINT(x, y) = SwapCOLOR THEN PSET (x, y), WorkingCOLOR NEXT y NEXT x VIEW ScaleUP Action = 1 END IF END SELECT OldLX = LilX: OldLY = LilY GOSUB Coordinates IF _MOUSEBUTTON(2) THEN WorkingCOLOR = POINT(mx, my) LINE (64, 410)-(83, 422), WorkingCOLOR, BF END IF CASE ELSE IF mb = 0 THEN EXIT SUB END SELECT CASE ELSE IF mb = 0 THEN EXIT SUB END SELECT END IF IF mb = 0 THEN Action = 0 MouseChange = GetMouseInput LOOP EXIT SUB Coordinates: IF WorkX <> OldWX THEN WorkX$ = "000" + LTRIM$(STR$(WorkX)) WorkX$ = MID$(WorkX$, LEN(WorkX$) - 2, 3) PrintNUMS 55, 374, WorkX$ END IF IF WorkY <> OldWY THEN IF WorkY < 90 THEN WorkY$ = "00" + LTRIM$(STR$(WorkY)) WorkY$ = MID$(WorkY$, LEN(WorkY$) - 1, 2) PrintNUMS 90, 374, WorkY$ END IF END IF OldWX = WorkX: OldWY = WorkY RETURN GetUNDO: GET (14, 60)-(133, 149), UndoBOX() RETURN END SUB SUB ScaleUP () xx = 90: yy = -180 FOR x = 14 TO 133 FOR y = 60 TO 149 LINE (x * 4 + xx, y * 4 + yy)-(x * 4 + xx + 3, y * 4 + yy + 3), POINT(x, y), BF NEXT y NEXT x WorkDONE = 1 END SUB SUB PrintNUMS (x, y, Num$) FOR n = 1 TO LEN(Num$) Index = VAL(MID$(Num$, n, 1)) * 30 PUT (x, y), NumBOX(Index), PSET x = x + 6 NEXT n END SUB FUNCTION SavePROMPT GET (158, 72)-(158 + SavePROMPT(0) / 8 - 1, 72 + SavePROMPT(1) - 1), ScreenBOX() PUT (158, 72), SavePROMPT(), PSET _SNDPLAY OhOh& DO DO WHILE GetMouseInput SELECT CASE my CASE 87 TO 99 IF mx > 379 AND mx < 401 THEN Highlight IF mb THEN SavePROMPT = 0 PUT (158, 72), ScreenBOX(), PSET EXIT FUNCTION END IF ELSE UnHighlight END IF CASE 152 TO 174 SELECT CASE mx CASE 229 TO 286 'Yes IF mb THEN _SNDPLAY Tick& SavePROMPT = 1 PUT (158, 72), ScreenBOX(), PSET EXIT FUNCTION END IF CASE 289 TO 346 'No IF mb THEN _SNDPLAY Tick& SavePROMPT = 2 PUT (158, 72), ScreenBOX(), PSET EXIT FUNCTION END IF CASE 349 TO 406 'Cancel IF mb = -1 THEN _SNDPLAY Tick& SavePROMPT = 0 PUT (158, 72), ScreenBOX(), PSET EXIT FUNCTION END IF CASE ELSE UnHighlight END SELECT CASE ELSE UnHighlight END SELECT LOOP LOOP END FUNCTION SUB Highlight IF Highlighted = 0 THEN FOR x = 380 TO 400 FOR y = 87 TO 99 IF POINT(x, y) = 223 THEN PSET (x, y), 224 NEXT y NEXT x Highlighted = 1 END IF END SUB SUB UnHighlight IF Highlighted = 1 THEN FOR x = 380 TO 400 FOR y = 87 TO 99 IF POINT(x, y) = 224 THEN PSET (x, y), 223 NEXT y NEXT x Highlighted = 0 END IF END SUB SUB DisplayERROR (ErrorNUM) GET (158, 72)-(158 + OhOhBOX(0) / 8 - 1, 72 + OhOhBOX(1) - 1), ScreenBOX() PUT (158, 72), OhOhBOX(), PSET _SNDPLAY OhOh& SELECT CASE ErrorNUM CASE 1 PrintSTRING 230, 118, "Sorry, your file (or its path) could", 1 PrintSTRING 230, 130, "not be found. Please try again.", 1 CASE 2 PrintSTRING 230, 118, "Sorry, that file name is in use by", 1 PrintSTRING 230, 130, "another project. Please try again.", 1 CASE 3 PrintSTRING 228, 118, "Sorry, the file you want to open is", 1 PrintSTRING 228, 130, "not a .GFX file. Please try again.", 1 END SELECT DO DO WHILE GetMouseInput SELECT CASE my CASE 87 TO 99 IF mx > 379 AND mx < 401 THEN Highlight ELSE UnHighlight END IF IF mb THEN PUT (158, 72), ScreenBOX(), PSET EXIT SUB END IF CASE 152 TO 174 SELECT CASE mx CASE 289 TO 346 'OK IF mb THEN _SNDPLAY Tick& PUT (158, 72), ScreenBOX(), PSET EXIT SUB END IF CASE 349 TO 406 'Cancel IF mb = -1 THEN _SNDPLAY Tick& PUT (158, 72), ScreenBOX(), PSET EXIT SUB END IF END SELECT CASE ELSE UnHighlight END SELECT LOOP LOOP END SUB SUB SetRECENT (Mode) SHARED OldFILENAME$, OldPRINTNAME$ OPEN "Recent.DAT" FOR RANDOM AS #1 LEN = LEN(Recent(1)) FOR n = 1 TO 6 GET #1, n, Recent(n) NEXT n CLOSE #1 IF Mode = 1 THEN FOR n = 6 TO 2 STEP -1 'shift file names down one Recent(n) = Recent(n - 1) NEXT n Recent(1).PName = PrintNAME$ 'add new name to top slot Recent(1).FName = FileNAME$ ELSE 'file to be removed from recent list FOR n = 1 TO 6 IF UCASE$(RTRIM$(Recent(n).FName)) = UCASE$(FileNAME$) THEN Recent(n).PName = SPACE$(32) Recent(n).FName = SPACE$(130) END IF NEXT n FileNAME$ = OldFILENAME$ PrintNAME$ = OldPRINTNAME$ END IF FOR n = 1 TO 5 'replace duplicates with blanks FOR nn = n + 1 TO 6 IF UCASE$(RTRIM$(Recent(nn).PName)) = UCASE$(RTRIM$(Recent(n).PName)) THEN Recent(nn).PName = SPACE$(32) Recent(nn).FName = SPACE$(130) END IF NEXT nn NEXT n FOR n = 1 TO 5 'move all names to top of list, blanks to bottom IF LEN(RTRIM$(Recent(n).PName)) = 0 THEN Hop = 1 DO IF LEN(RTRIM$(Recent(n + Hop).PName)) <> 0 THEN SWAP Recent(n), Recent(n + Hop) EXIT DO END IF Hop = Hop + 1 IF Hop + n > 6 THEN EXIT DO LOOP END IF NEXT n OPEN "Recent.DAT" FOR RANDOM AS #1 LEN = LEN(Recent(1)) FOR n = 1 TO 6 'put new list configuration in file PUT #1, n, Recent(n) NEXT n CLOSE #1 END SUB FUNCTION GetMouseInput GetMouseInput = _MOUSEINPUT mx = _MOUSEX my = _MOUSEY mb = _MOUSEBUTTON(1) mb2 = _MOUSEBUTTON(2) END FUNCTION |