'$DYNAMIC 'setpal library DEFINT A-Z DECLARE SUB rectangle (BYVAL x, BYVAL y, BYVAL w, BYVAL h, BYVAL c, BYVAL p) DECLARE SUB setmodex () DECLARE SUB setpal (pal()) DECLARE SUB setfont (f()) DECLARE SUB printstr (s$, BYVAL x, BYVAL y, BYVAL p) DECLARE SUB textcolor (BYVAL f, BYVAL b) DIM vgapal(767), txt(1024) DEF SEG = VARSEG(vgapal(0)) ON ERROR GOTO 1000 BLOAD "palette.bak", VARPTR(vgapal(0)) ON ERROR GOTO 0 DEF SEG = VARSEG(txt(0)) BLOAD "bobtext.fnt", VARPTR(txt(0)) setfont txt() textcolor 15, 1 setmodex setpal vgapal() rectangle 180, 0, 12, 10, 15, 0 FOR i = 0 TO 14 FOR j = 0 TO 14 rectangle i * 12, j * 10, 12, 10, j * 16 + i, 0 NEXT j NEXT i FOR i = 0 TO 14 rectangle i * 10, 150, 10, 10, 240 + i, 0 NEXT i FOR i = 0 TO 14 rectangle i * 10 + 150, 150, 10, 10, 255 - 16 * i, 0 NEXT i FOR y = 1 TO 15 GOSUB colors NEXT y x = 0 y = 1 GOSUB show pick: a$ = INKEY$ IF a$ = "" GOTO pick IF a$ = CHR$(27) THEN GOTO 1 IF a$ = CHR$(13) THEN GOSUB change GOSUB colors IF a$ = CHR$(0) + CHR$(72) AND y > 1 THEN y = y - 1 IF a$ = CHR$(0) + CHR$(75) THEN x = x - 1 - (x = 0) * 3 IF a$ = CHR$(0) + CHR$(77) THEN x = x + 1 + (x = 2) * 3 IF a$ = CHR$(0) + CHR$(80) AND y < 15 THEN y = y + 1 GOSUB show GOTO pick 1 DEF SEG = VARSEG(vgapal(0)) BSAVE "Palette.bak", VARPTR(vgapal(0)), 1538 SYSTEM colors: textcolor 15, 4 IF y < 15 THEN t = (y * 16 + 14) * 3 ELSE t = 93 t$ = STR$(vgapal((y * 16) * 3)) printstr RIGHT$(t$, LEN(t$) - 1) + STR$(vgapal(t)) + " ", 180, 10 * (y - (y = 15)) + 1, 0 textcolor 15, 2 t$ = STR$(vgapal((y * 16) * 3 + 1)) printstr RIGHT$(t$, LEN(t$) - 1) + STR$(vgapal(t + 1)) + " ", 220, 10 * (y - (y = 15)) + 1, 0 textcolor 15, 1 t$ = STR$(vgapal((y * 16) * 3 + 2)) printstr RIGHT$(t$, LEN(t$) - 1) + STR$(vgapal(t + 2)) + " ", 260, 10 * (y - (y = 15)) + 1, 0 RETURN show: textcolor 14, 2 ^ (2 - x) t$ = STR$(vgapal((y * 16) * 3 + x)): IF y < 15 THEN t = (y * 16 + 14) * 3 ELSE t = 93 printstr RIGHT$(t$, LEN(t$) - 1) + STR$(vgapal(t + x)), 180 + 40 * x, 10 * (y - (y = 15)) + 1, 0 RETURN change: textcolor 15, 0 printstr "?", 100, 190, 0 n$ = "" num: printstr n$, 108, 190, 0 a$ = INPUT$(1) rectangle 108, 190, 16, 8, 0, 0 a = ASC(a$) IF a = 8 AND LEN(n$) > 0 THEN n$ = LEFT$((n$), LEN(n$) - 1) IF a = 13 THEN low = VAL(n$): n$ = "": GOTO num2 IF a < 48 OR a > 57 THEN GOTO num IF VAL(n$ + a$) < 64 THEN n$ = n$ + a$ GOTO num num2: printstr n$, 108, 190, 0 a$ = INPUT$(1) rectangle 108, 190, 16, 8, 0, 0 a = ASC(a$) IF a = 8 AND LEN(n$) > 0 THEN n$ = LEFT$((n$), LEN(n$) - 1) IF a = 13 THEN hi = VAL(n$): n$ = "": GOTO set IF a < 48 OR a > 57 THEN GOTO num2 IF VAL(n$ + a$) < 64 THEN n$ = n$ + a$ GOTO num2 set: IF y < 15 THEN s# = (hi - low) / 14 ELSE s# = (hi - low) / 29 FOR i = 0 TO 14 vgapal((y * 16 + i) * 3 + x) = CINT(low + s# * i) NEXT i IF y = 15 THEN FOR i = 0 TO 14 vgapal((255 - 16 * i) * 3 + x) = CINT(low + s# * (i + 15)) NEXT i END IF setpal vgapal() rectangle 100, 190, 24, 8, 0, 0 RETURN 1000 BLOAD COMMAND$, VARPTR(vgapal(0)) BSAVE "palette.bak", VARPTR(vgapal(0)), 1538 RESUME