BBS: Inland Empire Archive Date: 02-15-94 (13:23) Number: 134 From: HARRY F. HARRISON Refer#: 133 To: JEFFREY ZAPATKA Recvd: NO Subj: .PCX Conf: (2) Quik_Bas
> Can Anyone help me with a routinie or file to give an example on how
> I'd begin (or do it) to view a .PCX file in my QuickBASIC Program?
Orginally posted by Francois Roy on Mon 18 Oct 93 15:27
DECLARE SUB SetPalette (pcxpal$)
DECLARE SUB SelectScreen ()
DECLARE SUB ReadPCXLine (PCXFile%, TotalBytes%, ScanLine%())
DECLARE SUB ReadPCXByte (PCXFile%, value%)
DECLARE SUB OpenPCXFile (PCXName$, xsize%, ysize%, TotalBytes%, pcxpal$)
DEFINT A-Z
TYPE PCXHeaderStruc
Manufacxturer AS STRING * 1
Version AS STRING * 1
Encoding AS STRING * 1
BitsPerPixel AS STRING * 1
xmin AS INTEGER
ymin AS INTEGER
xmax AS INTEGER
ymax AS INTEGER
Hres AS INTEGER
Vres AS INTEGER
ColorMap AS STRING * 48
Reserved1 AS STRING * 1
NumPlanes AS STRING * 1
BytesPerLine AS INTEGER
PaletteType AS INTEGER
HScrSize AS INTEGER
VScrSize AS INTEGER
Resreved2 AS STRING * 54
END TYPE
DIM SHARED PCXheader AS PCXHeaderStruc
DIM SHARED PCXFile
DIM SHARED ScrMode, ScrMaxX, ScrMaxY
DIM SHARED ScrMaxColor, ScrBitsPerPixel
DIM SHARED Byte AS STRING * 1
DIM SHARED MaxScrMode
NoVGA: MaxScrMode = 9
RESUME
SUB OpenPCXFile (PCXName$, xsize, ysize, TotalBytes, pcxpal$)
PCXFile = FREEFILE
OPEN PCXName$ FOR BINARY AS #PCXFile
GET #PCXFile, 1, PCXheader
pcxpal$ = LEFT$(PCXheader.ColorMap + STRING$(768, 0), 768)
IF ASC(PCXheader.Version) = 5 THEN
SEEK #PCXFile, LOF(PCXFile) - 768&
GET #PCXFile, , Byte
IF ASC(Byte) = 12 THEN GET #PCXFile, , pcxpal$
END IF
xsize = PCXheader.xmax - PCXheader.xmin + 1
ysize = PCXheader.ymax - PCXheader.ymin + 1
TotalBytes = ASC(PCXheader.NumPlanes) * PCXheader.BytesPerLine
END SUB
SUB ReadPCXByte (PCXFile, value)
STATIC count, CountValue, BufferLOC, Buffer$
IF count > 0 THEN
value = CountValue
count = count - 1
ELSE
IF BufferLOC > LEN(Buffer$) OR LEN(Buffer$) = 0 THEN
BufferLEN& = LOF(PCXFile) - LOC(PCXFile)
IF BufferLEN& > 15000 THEN
BufferLEN& = 15000
END IF
IF BufferLEN& <= 0 OR EOF(PCXFile) THEN
EXIT SUB
END IF
Buffer$ = SPACE$(BufferLEN&)
GET #PCXFile, , Buffer$
BufferLOC = 1
END IF
value = ASC(MID$(Buffer$, BufferLOC, 1))
BufferLOC = BufferLOC + 1
IF value >= 192 THEN
count = value - 193
IF BufferLOC >= LEN(Buffer$) THEN
BufferLEN& = LOF(PCXFile) - LOC(PCXFile)
IF BufferLEN& > 15000 THEN
BufferLEN& = 15000
END IF
IF BufferLEN& <= 0 OR EOF(PCXFile) THEN
EXIT SUB
END IF
Buffer$ = SPACE$(BufferLEN&)
GET #PCXFile, , Buffer$
BufferLOC = 1
END IF
CountValue = ASC(MID$(Buffer$, BufferLOC, 1))
BufferLOC = BufferLOC + 1
value = CountValue
END IF
END IF
END SUB
---
* Origin: Far Heap Corrupt - Abort, Retry, Ignore or Fail? (1:105/222.5)

Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET