#macro read_full_file( fn ) read_file_start(fn, 0) #endmacro #macro read_file_start(fn, byte_number) #if getc(fn, byte_number) != -1 .db getc(fn, byte_number) read_file_start(fn, eval(byte_number+1)) #endif #endmacro #define getw(fn, n) getc(fn, n) + (getc(fn, n+1) << 8) #macro read_bitmap(fn, bindex, ci, hi) #if hi < bh #if ci < bscan #if getc(fn, bindex) != -1 #if ci >= bx #if ci < bx+bw .db ~getc(fn, bindex) & $FF #endif #endif read_bitmap(fn, eval(bindex+1), eval(ci+1), hi) #else .echo "Line ",__line,": Image specified at (",bx*8,",",by,") is outside of file bounds." #define hi 0 read_bitmap(0, 0, 0, bh) #endif #else read_bitmap(fn, eval(bindex-(bscan*2)), 0, eval(hi+1)) #endif #endif #endmacro #macro bitmap(fn,bx,by,bw,bh) #if getc(fn, 0) = 'B' #if getc(fn, 1) = 'M' #define boffset getw(fn, 10) #define bfw eval(getw(fn, 18)) #define bfh eval(getw(fn, 22)) #if bfw % 8 #define bfw eval(bfw+8) #endif #define bfw eval(bfw>>3) #if bfw % 4 #define bscan 4 #else #define bscan 0 #endif #define bscan eval(bscan + (bfw & !%11)) #define bx eval(bx>>3) #define bw eval(bw>>3) read_bitmap(fn, eval(boffset+(bfh-1*bscan)-(by*bscan)), 0, 0) #endif #endif #endmacro