home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Party 1994: Try This At Home
/
disk_image.bin
/
source
/
gallery
/
subdirs.exe
/
COLOR
/
PAL2.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1994-06-15
|
4KB
|
191 lines
uses dos;
type
HLSREGISTER = record
HUE, LIGHTNESS, SATURATION : real
end;
RGBregister = record
red, green, blue : byte
end;
function MAXIMUM (A, B, C : REAL): real;
begin
if A > B then
if A > C then
MAXIMUM := A
else
MAXIMUM := C
else
if B > C then
MAXIMUM := B
else
MAXIMUM := C
end;
function MINIMUM (A, B, C : REAL): real;
begin
if A < B then
if A < C then
MINIMUM := A
else
MINIMUM := C
else
if B < C then
MINIMUM := B
else
MINIMUM := C
end;
const ProHead : array[0..7] of byte = (8,3,0,0,$23,$b1,0,0);
const SpecialColor : array[0..15] of RGBregister =
((red: 0; green: 0; blue: 0),
(red: 0; green: 0; blue: 0),
(red: 0; green: 0; blue: 0),
(red: 0; green: 0; blue: 0),
(red: 0; green: 0; blue: 0),
(red: 0; green: 0; blue: 0),
(red: 0; green: 0; blue: 0),
(red: 0; green: 0; blue: 0),
(red: 0; green: 0; blue: 0),
(red: 0; green: 0; blue: 0),
(red: 0; green: 0; blue: 0),
(red: 0; green: 0; blue: 0),
(red: 0; green: 0; blue: 0),
(red: 0; green: 0; blue: 0),
(red: 0; green: 0; blue: 0),
(red: 0; green: 0; blue: 0) );
var
N : String;
I : Text;
F1: File;
F2: Text;
Palette : array[0..15,0..15] of RGBRegister;
k,j : integer;
RGBr : RGBregister;
HLSr : HLSregister;
s,r,g,b : real;
AAPro : Boolean;
Max64 : Boolean;
procedure ParseParms;
var i : integer;
s : string;
begin
if ParamCount=0 then exit;
for i := 1 to ParamCount do begin
s := ParamStr(i);
if (s = '/p') or ((N<>'') and (s='p')) then
AAPro := True
else
if (s = '/v') or ((N<>'') and (s='v')) then
Max64 := True
else
if N='' then N := s;
end;
end;
begin
writeln('PALETTE creator // A.R-M. 7/93.');
N := '';
Max64 := False;
AAPro := False;
ParseParms;
if not AAPro then
writeln('Use /p to create Animator Pro 1.0 version .COL files.');
if not Max64 then
writeln('Use /v to create 0..3f palette (default 0..ff).');
writeln;
if N='' then begin
write ('Input file name: '); readln( N );
writeln;
end;{ else N := ParamStr(1);}
assign(I, N); reset(I);
writeln('Reading "',N,'"...'); writeln;
for k := 0 to 15 do begin
readln(I, r,g,b);
writeln(' color ',k:2,', r=',r:7:4,' g=',g:7:4,' b=',b:7:4 );
s := MAXIMUM(r,g,b); if s=0 then s := 1;
with RGBr do begin
red := round(r/s*63);
green := round(g/s*63);
blue := round(b/s*63);
end;
Palette[k,0] := SpecialColor[k];
for j := 1 to 15 do with Palette[k,j] do begin
s := {sqr}((j-1)/14);
red := round(RGBr.red*s);
green := round(RGBr.green*s);
blue := round(RGBr.blue*s);
end;
end;
close(I);
assign(F2,'PALETTE.INC'); rewrite(F2);
writeln(F2,'; Palette created from "',N,'"');
writeln(F2,'; Use RADIX 10');
writeln(F2);
for k := 0 to 255 do begin
with Palette[k div 16, k mod 16] do
write(F2,' DB ',red:3,',',green:3,',',blue:3);
if (k mod 16)=0 then writeln(F2,' ; color ',k div 16) else writeln(F2);
end;
close(F2);
if not Max64 then
begin
asm
mov cx,3*256
mov si, offset Palette
@1:
mov al,[si]
shl al,1
shl al,1
mov [si],al
inc si
loop @1
end;
end;
assign(F1,'PALETTE.COL'); rewrite(F1,1);
if AAPro then blockwrite(F1, ProHead, SizeOf(ProHead) );
blockwrite(F1, Palette, SizeOf(Palette) );
close(F1);
writeln;
writeln('PALETTE.COL and PALETTE.INC files successfully created.');
end.