5748368 [rkeene@sledge /home/rkeene/devel/archive/quickbasic]$ cat -n bmpshowf.bas
   1: DECLARE SUB MakeBmp (f$, x!, y!, c!)
   2: DECLARE FUNCTION Max! (num!, mx!)
   3: DECLARE FUNCTION Rever$ (num!)
   4: DECLARE SUB PaletteBar ()
   5: DECLARE SUB MakeGrid (Acuracy!)
   6: DECLARE SUB Solarize (r!, g!, B!)
   7: DECLARE SUB Negative ()
   8: DECLARE SUB Mosaic (sz!)
   9: DECLARE SUB ChangePal (Red%, Green%, Blue%, syscolor%)
  10: DECLARE SUB ShowBitmap (f$, mde!)
  11: DECLARE FUNCTION FillIn$ (t$, num!)
  12: DECLARE SUB ReadPal (Red%, Green%, Blue%)
  13: DECLARE FUNCTION Exist! (fle$)
  14: CLS
  15: PALETTE 0, 23
  16: COLOR 1, 0
  17: PRINT "Press any key to begin the sequence"
  18: DO WHILE INKEY$ = ""
  19: FOR q = 0 TO 4
  20: PALETTE 0, 63
  21: NEXT q
  22: FOR q = 0 TO 3
  23: PALETTE 0, 0
  24: NEXT q
  25: LOOP
  26: CLEAR , , 15000
  27: '==== All variables set above this line are ignored ====
  28: CONST mx = 20
  29: CONST Bmp$ = "Q:\LOGO.SYS"
  30: ShowBitmap Bmp$, 2
  31: FOR q = 1 TO mx + 1
  32: d$ = "TEMP" + LTRIM$(RTRIM$(STR$(q - 1))) + ".BSV"
  33: IF Exist(d$) THEN xx = 1
  34: IF Lstxx = 0 THEN ShowBitmap Bmp$, 3
  35: IF xx = 0 THEN Mosaic q
  36: DEF SEG = &HA000
  37: IF xx = 0 THEN BSAVE d$, 0, 64000
  38: Lstxx = xx
  39: NEXT q
  40: 
  41: CLEAR , , 1000
  42: Negative
  43: DO WHILE INKEY$ = ""
  44: DEF SEG = &HA000
  45: d = TIMER
  46: FOR a = mx TO 0 STEP -1
  47: d$ = "TEMP" + LTRIM$(RTRIM$(STR$(a))) + ".BSV"
  48: BLOAD d$, 0
  49: NEXT a
  50: s = TIMER
  51: 'PaletteBar
  52: 'LOCATE 1, 1: PRINT CINT(mx / (s - d)); " frames per second": SLEEP 1
  53: Negative
  54: SLEEP 1
  55: FOR a = 0 TO mx STEP 1
  56: d$ = "TEMP" + LTRIM$(RTRIM$(STR$(a))) + ".BSV"
  57: BLOAD d$, 0
  58: NEXT a
  59: SLEEP 1
  60: Negative
  61: LOOP
  62: Negative
  63: KILL "TEMP?.BSV"
  64: KILL "TEMP??.BSV"
  65: KILL "TEMP???.BSV"
  66: CLEAR , , 15000
  67: 
  68: SUB ChangePal (Red%, Green%, Blue%, syscolor%)
  69: palmask = &H3C6
  70: palregrd = &H3CF
  71: palregwr = &H3C8
  72: paldata = &H3C9
  73: OUT palmask, &HFF
  74: OUT palregwr, syscolor%
  75: OUT paldata, Red%
  76: OUT paldata, Green%
  77: OUT paldata, Blue%
  78: END SUB
  79: 
  80: FUNCTION Exist (fle$)
  81: OPEN fle$ FOR BINARY AS #4
  82: IF LOF(4) = 0 THEN Exist = 0 ELSE Exist = 1
  83: CLOSE 4
  84: END FUNCTION
  85: 
  86: FUNCTION FillIn$ (t$, num)
  87: FillIn$ = STRING$(num - LEN(t$), ASC("0")) + t$
  88: END FUNCTION
  89: 
  90: SUB MakeBmp (f$, x, y, c)
  91: DIM Red AS STRING * 1
  92: DIM Green AS STRING * 1
  93: DIM Blue AS STRING * 1
  94: OPEN f$ FOR BINARY AS #1
  95: IF LOF(1) <> 0 THEN CLOSE 1: KILL f$ ELSE CLOSE 1
  96: Header$ = "BM6" + CHR$(254) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(54)
  97: Header$ = Header$ + CHR$(4) + CHR$(0) + CHR$(0) + CHR$(40) + CHR$(0) + CHR$(0) + CHR$(0) + Rever$(x)
  98: Header$ = Header$ + CHR$(0) + CHR$(0) + Rever$(y) + CHR$(0) + CHR$(0) + Rever$(c) + CHR$(8) + CHR$(0)
  99: Header$ = Header$ + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(250) + CHR$(0) + CHR$(0)
 100: Header$ = Header$ + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0)
 101: Header$ = Header$ + CHR$(1) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(1) + CHR$(0) + CHR$(0)
 102: OPEN f$ FOR BINARY AS #1
 103: PUT #1, 1, Header$
 104: FOR i% = 0 TO c - 1
 105:         ReadPal CCHex3%, CCHex2%, CCHex1%
 106:         Red = CHR$(Max((CCHex3%) * 8, 255))
 107:         Green = CHR$(Max((CCHex2%) * 8, 255))
 108:         Blue = CHR$(Max((CCHex1%) * 8, 255))
 109:         PUT #1, 55 + (i% * 4), Red
 110:         PUT #1, 55 + (i% * 4) + 1, Green
 111:         PUT #1, 55 + (i% * 4) + 2, Blue
 112: NEXT i%
 113: 
 114: 
 115: 
 116: 
 117: DEF SEG = &HA000
 118: DIM v AS STRING * 10000
 119: DIM seven AS STRING * 7
 120: Inc = 10000
 121: IF c = 16 THEN n = 2 ELSE n = 1
 122: FOR q = 55 + (i% * 4) TO INT((x * y) / n) STEP Inc
 123: BSAVE "1.Tmp", x1, Inc
 124: OPEN "1.TMP" FOR BINARY AS #3
 125: GET #3, 1, seven
 126: GET #3, , v
 127: CLOSE #3
 128: KILL "1.Tmp"
 129: PUT #1, q, v
 130: x1 = x1 + Inc
 131: NEXT q
 132: CLOSE 1, 3
 133: END SUB
 134: 
 135: SUB MakeGrid (Acuracy)
 136: sz = Acuracy
 137: FOR x = 0 TO 320 STEP sz
 138: FOR y = 0 TO 200 STEP sz
 139: c = POINT(x + sz, y)
 140: LINE (x, y)-(x + sz - 1, y + sz - 1), c, B
 141: NEXT y
 142: NEXT x
 143: END SUB
 144: 
 145: FUNCTION Max (num, mx)
 146: IF num > mx THEN Max = mx ELSE Max = num
 147: END FUNCTION
 148: 
 149: SUB Mosaic (sz)
 150: IF sz <= 1 THEN EXIT SUB
 151: FOR x = 0 TO 320 STEP sz
 152: FOR y = 0 TO 200 STEP sz
 153: c = POINT(x, y)
 154: LINE (x, y)-(x + sz - 1, y + sz - 1), c, BF
 155: NEXT y
 156: NEXT x
 157: END SUB
 158: 
 159: SUB Negative
 160: Solarize 255, 255, 255
 161: END SUB
 162: 
 163: SUB PaletteBar
 164: FOR q = 0 TO 255
 165: LINE (q, 0)-(q, 8), q
 166: NEXT q
 167: END SUB
 168: 
 169: SUB ReadPal (Red%, Green%, Blue%)
 170: palmask = &H3C6
 171: paldata = &H3C9
 172: IF INT(Colr% / 2) = Colr% / 2 THEN Red% = INP(paldata): Green% = INP(paldata): Blue% = INP(paldata)
 173: Red% = INP(paldata)
 174: Green% = INP(paldata)
 175: Blue% = INP(paldata)
 176: END SUB
 177: 
 178: FUNCTION Rever$ (num)
 179: f$ = HEX$(num)
 180: f$ = STRING$(4 - LEN(f$), ASC("0")) + f$
 181: Rever$ = CHR$(VAL("&H" + MID$(f$, 3, 2))) + CHR$(VAL("&H" + MID$(f$, 1, 2)))
 182: END FUNCTION
 183: 
 184: SUB ShowBitmap (f$, mde)
 185: DIM Red AS STRING * 1
 186: DIM Green AS STRING * 1
 187: DIM Blue AS STRING * 1
 188: DIM PicType AS STRING * 1
 189: OPEN f$ FOR BINARY AS #1
 190:   GET #1, 29, PicType
 191: mxcol = ASC(PicType)
 192: SCREEN 13
 193: IF mde = 2 THEN
 194:         FOR i% = 0 TO 255
 195:         GET #1, 55 + (i% * 4), Red
 196:         GET #1, 55 + (i% * 4) + 1, Green
 197:         GET #1, 55 + (i% * 4) + 2, Blue
 198:         CCHex1% = INT(ASC(Red)) / 8
 199:         CCHex2% = INT(ASC(Green)) / 8
 200:         CCHex3% = INT(ASC(Blue)) / 8
 201:         ChangePal CCHex3%, CCHex2%, CCHex1%, i%
 202:         NEXT i%
 203: END IF
 204: DEF SEG = &HA000
 205: DIM v AS STRING * 10000
 206: Inc = 10000
 207: pt1$ = CHR$(253) + CHR$(0) + CHR$(160)
 208: pt2$ = CHR$(VAL("&H" + MID$(FillIn$(HEX$(Inc), 4), 3, 2))) + CHR$(VAL("&H" + MID$(FillIn$(HEX$(Inc), 4), 1, 2)))
 209: FOR q = 1079 TO 64000 STEP Inc
 210: GET #1, q, v
 211: OPEN "1.TMP" FOR BINARY AS #3
 212: pt3$ = CHR$(VAL("&H" + MID$(FillIn$(HEX$(x1), 4), 3, 2))) + CHR$(VAL("&H" + MID$(FillIn$(HEX$(x1), 4), 1, 2)))
 213: PUT #3, , pt1$
 214: PUT #3, , pt3$
 215: PUT #3, , pt2$
 216: PUT #3, , v
 217: CLOSE 3
 218: BLOAD "1.TMP", x1
 219: KILL "1.TMP"
 220: x1 = x1 + Inc
 221: NEXT q
 222: IF mde = 1 THEN
 223:         FOR i% = 0 TO 255
 224:         GET #1, 55 + (i% * 4), Red
 225:         GET #1, 55 + (i% * 4) + 1, Green
 226:         GET #1, 55 + (i% * 4) + 2, Blue
 227:         CCHex1% = INT(ASC(Red)) / 8
 228:         CCHex2% = INT(ASC(Green)) / 8
 229:         CCHex3% = INT(ASC(Blue)) / 8
 230:         ChangePal CCHex3%, CCHex2%, CCHex1%, i%
 231:         NEXT i%
 232: END IF
 233: CLOSE 1, 2, 3
 234: END SUB
 235: 
 236: SUB Solarize (r, g, B)
 237:         FOR i% = 0 TO 255
 238:         ReadPal CCHex3%, CCHex2%, CCHex1%
 239:         ChangePal ABS(CCHex3% - r), ABS(CCHex2% - g), ABS(CCHex1% - B), i%
 240:         NEXT i%
 241: END SUB
 242: 
5748369 [rkeene@sledge /home/rkeene/devel/archive/quickbasic]$

Click here to go back to the directory listing.
Click here to download this file.
last modified: 2000-05-09 21:00:29