'=========================================================================== ' Subject: EGA PCX VIEWER Date: Unknown Date (00:00:00) ' Author: G.C.Harder Code: QB, QBasic, PDS ' Keys: EGA,PCX,VIEWER Packet: EGAVGA.ABC '=========================================================================== 'PCX SAVE & PCX LOAD FOR EGA SCREEN 9 (640 x 350, 16 COLOR) 'BY G.C.HARDER, RE-ENGINEERED FROM C SOURCE IN ' "FRACTAL PROGRAMMING IN C" DEFINT A-Z DECLARE SUB PCXSave (File$, Pal.Array%()) DECLARE SUB PCXLoad (File$, Pal.Array%()) FileName$ = "Demo4.PCX" SCREEN 9, 0, 1, 0 DIM Pal.Array%(15) FOR I% = 0 TO 15: READ Pal.Array%(I%): NEXT CLS LOCATE 25, 30: PRINT "Loading " + FileName$; PCXLoad FileName$, Pal.Array%() 'default Palette Colors DATA 0,1,2,3,4,5,20,7,56,57,58,59,60,61,62,63 SUB PCXLoad (File$, Pal.Array%()) STATIC SCREEN 9, 0, 0, 0: OPEN File$ FOR BINARY AS #1: SEEK #1, 17 DIM Byte AS STRING * 1 FOR I% = 0 TO 15 GET #1, , Byte: red% = ASC(Byte) / 85 GET #1, , Byte: green% = ASC(Byte) / 85 GET #1, , Byte: Blue% = ASC(Byte) / 85 red% = ((red% AND 1) * 32) OR ((red% AND 2) * 2) green% = ((green% AND 1) * 16) OR (green% AND 2) Blue% = ((Blue% AND 1) * 8) OR ((Blue% AND 2) \ 2) Hue% = red% OR green% OR Blue%: Pal.Array%(I%) = Hue% NEXT PALETTE USING Pal.Array%(0): SEEK #1, 129: DEF SEG = &HA000 FOR k% = 0 TO 349 A$ = INKEY$: IF A$ = CHR$(27) THEN END Addr% = 80 * k%: Line.end% = Addr% + 80: J% = 1 DO WHILE J% <= 4 B% = J% IF J% = 3 THEN B% = 4 IF J% = 4 THEN B% = 8 OUT &H3C4, 2: OUT &H3C5, B% GET #1, , Byte: Byte.1% = ASC(Byte) IF (Byte.1% AND 192) <> 192 THEN POKE Addr%, Byte.1%: Addr% = Addr% + 1 IF Addr% >= Line.end% THEN Addr% = 80 * k%: J% = J% + 1 ELSE Byte.1% = Byte.1% AND 63 GET #1, , Byte: Byte.2% = ASC(Byte) FOR M% = 1 TO Byte.1% B% = J% IF J% = 3 THEN B% = 4 IF J% = 4 THEN B% = 8 OUT &H3C4, 2: OUT &H3C5, B%: POKE Addr%, Byte.2% Addr% = Addr% + 1 IF Addr% >= Line.end% THEN Addr% = 80 * k%: J% = J% + 1 NEXT END IF LOOP NEXT OUT &H3C4, 2: OUT &H3C5, &HF: DEF SEG ': CLOSE #1 END SUB