{ >Does anyone know of any way to display a single screen of Graphics on EGA >640x350 mode *quickly*. It can be VGA as well; I'm just trying to display t >screen *fast* from a disk File. I know, I could have used the GIF or PCX This would restore a .PIC format File, uncompressed, For 320x200x256 mode $13, With a prepended 256*3 Byte palette entry header. It should work- I just wrote this code yesterday to display some unknown .PIC Files. } Program dispic; Const maxpicsize = 320*200; Type pbuf = ^abuf; abuf=Array[1..maxPICSIZE] of Byte; palbuf = ^apalbuf; apalbuf=Array[1..256*3] of Byte; headerbuf=^aheaderbuf; aheaderbuf=Array[1..32] of Byte; Var f : File; i : Byte; buf : pbuf; pal : palbuf; header : headerbuf; hsize,vsize,picsize,headersize,palettesize:Word; _r,_g,_b, cr : Byte; nr,ctr : Word; fs,overflow : LongInt; Filename : String; Procedure setcolreg(p:Pointer;start,num:Word); begin Asm mov ah,10h mov al,12h { seg block of color Registers } mov bx,start mov cx,num mov dx,Word ptr p+2 { get high Word of p (seg) } mov es,dx mov dx,Word ptr p { get low Word of p (ofs) } int $10 end; end; Procedure stop(s:String); begin Writeln(s); halt; end; begin Writeln('DISPIC v0.01á (c)1993 Brian Pape/Jagaer Technologies'+#10#13); Writeln(maxavail,' Bytes available.'); if paramcount < 1 then stop('no .PIC File specified.'); Filename := paramstr(1); assign(f,Filename); {$I-} reset(f,1); {$I+} if ioresult <> 0 then begin Writeln('File '+Filename+' not found.'); halt; end; new(header); Writeln(maxavail,' Bytes available after header allocate.'); palettesize := sizeof(pal^); headersize := sizeof(header^); if Filesize(f) < headersize+palettesize then stop('invalid .pic File.'); blockread(f,header^,headersize,nr); if nr < sizeof(headersize) then stop('insufficient header information.') else Writeln('header: ',nr,' Bytes read.'); hsize := (Word(header^[4]) shl 8) or header^[3]; vsize := (Word(header^[6]) shl 8) or header^[5]; picsize := (Word(header^[14]) shl 8) or header^[13]; Writeln('picsize: ',picsize,' Bytes.'); if picsize > maxpicsize then begin picsize := maxpicsize; Writeln('picture size read overflow. resetting to maxpicsize.'); end; dispose(header); new(pal); Writeln(maxavail,' Bytes available after palette allocate.'); blockread(f,pal^,palettesize,nr); if nr < palettesize then stop('insufficient palette information.') else Writeln('palette: ',nr,' Bytes read.'); new(buf); Writeln(maxavail,' Bytes available after buffer allocate.'); {$I-} blockread(f,buf^,sizeof(buf^),nr); {$I+} if ioresult <> 0 then; Writeln('picture: ',nr,' Bytes read.'); Writeln('hsize: ',hsize); Writeln('vsize: ',vsize); Writeln('press enter.'); readln; close(f); Asm mov ah,00 mov al,$13 int $10 end; move(buf^,ptr($a000,0)^,nr); setcolreg(pal,0,256); dispose(buf); dispose(pal); readln; Asm mov ah,00 mov al,03 int $10 end; end. { > Hello is somebody there that knows how to use pictures that I > made in Deluxe paint (.lbm) First, convert the LBM File to a SCI using For instance VPIC. I assume you are using VGA/MCGA 320x200x256.. In Case you don't, this won't work...: } Uses Crt; Var SCIFile : File; r, g, b : Byte; i : Integer; VideoM : Byte Absolute $A000:0000; begin Asm mov ax,0013h int 10h end; Assign(SCIFile, 'MYSCI.SCI'); { Put your own Filename there } Reset(SCIFile, 1); For i := 0 to 255 do begin Port[$3C8] := i; BlockRead(SCIFile,r,1); BlockRead(SCIFile,g,1); BlockRead(SCIFile,b,1); Port[$3C9] := r; Port[$3C9] := g; Port[$3C9] := b; { Set palette } end; BlockRead(SCIFile,VideoM,64000); Repeat Until Port[$60] = 1; { Wait For ESC } Asm mov ax,0003h int 10h end; end. { > I am looking to create a simple utility to report the size, color, etc > of GIFs. } Program GI; Uses Dos; Procedure ExtractGIFInfo (Name : String); Const ColorRez : Array[1..8] of Byte=(1,3,7,15,31,63,127,255); Type GifSigRec = Array[1..6] of Char; ScreenDiscRec = Record Width, Height:Word; GenInfo:Byte; end; Var F : File; Sig : GIFSigRec; Screen : ScreenDiscRec; Result : Word; Diver, X : Byte; Y : LongInt; DirInfo : SearchRec; Ratio : Byte; Res : Word; RReal : Real; begin Assign(F, Name); Reset(F, 1); BlockRead(F, Sig, SizeOF(Sig), Result); BlockRead(F, Screen, SizeOf(Screen), Result); Close(F); If (Sig[1] + Sig[2] + Sig[3] <> 'GIF') Then begin WriteLn('Not a Valid .GIF File!'); Exit; end; For X := 1 to 6 do Write(Sig[X]); Write(', ', Screen.Width, 'x', Screen.Height, 'x'); Screen.GenInfo := (Screen.GenInfo and 7) + 1; Res := ColorRez[Screen.GenInfo] + 1; WriteLn(Res); end; Var Count : Byte; begin If ParamCount >= 1 then For Count := 1 to ParamCount do ExtractGIFInfo (ParamStr(Count)) else WriteLn(' Use a Filename geek!'); end. Had the PCX info: ZSoft .PCX File HEADER ForMAT Byte Item Size Description/Comments 0 Manufacturer 1 Constant Flag, 10 = ZSoft .pcx 1 Version 1 Version inFormation 0 = Version 2.5 of PC Paintbrush 2 = Version 2.8 w/palette inFormation 3 = Version 2.8 w/o palette inFormation 4 = PC Paintbrush For Windows(Plus For Windows Uses Ver 5) 5 = Version 3.0 and > of PC Paintbrush and PC Paintbrush +, includes Publisher's Paintbrush 2 Encoding 1 1 = .PCX run length encoding 3 BitsPerPixel 1 Number of bits to represent a pixel (per Plane)- 1, 2, 4, or 8 4 Window 8 Image Dimensions: Xmin,Ymin,Xmax,Ymax 12 HDpi 2 Horizontal Resolution of image in DPI* 14 VDpi 2 Vertical Resolution of image in DPI* 16 Colormap 48 Color palette setting, see Text 64 Reserved 1 Should be set to 0. 65 NPlanes 1 Number of color planes 66 BytesPerLine 2 Number of Bytes to allocate For a scanline plane. MUST be an EVEN number. Do not calculate from Xmax-Xmin. 68 PaletteInfo 2 How to interpret palette- 1 = Color/BW, 2 = Grayscale (ignored in PB IV/ IV +) 70 HscreenSize 2 Horizontal screen size in pixels. New field found only in PB IV/IV Plus 72 VscreenSize 2 Vertical screen size in pixels. New field found only in PB IV/IV Plus 74 Filler 54 Blank to fill out 128 Byte header. Set all Bytes to 0 notES: All sizes are measured in ByteS. All Variables of SIZE 2 are Integers. *HDpi and VDpi represent the Horizontal and Vertical resolutions which the image was created (either Printer or scanner); i.e. an image which was scanned might have 300 and 300 in each of these fields. { > Does anyone have the format structure For PCX format? I had it > once but I lost it... It had a header (big surprise), and used > run-length compression (HAHAHAHAHA!!!!), but it seems the easiest major > format to code. Here's the header, I haven't fooled much With coding/decoding PCX but if I remember right (At least For 256c images) the run length-Byte is up to 64 since the most-significant bits signify the end of a line in the image. And in 256c images, the last 768 Bytes should be the palette. } PCXHeader = Record Signature : Char; Version : Char; Encoding : Char; BitsPerPixel : Char; XMin,YMin, XMax,YMax : Integer; HRes,VRes : Integer; Palette : Array [0..47] of Byte; Reserved : Char; Planes : Char; BytesPerLine : Integer; PaletteType : Integer; Filler : Array [0..57] of Byte; end;