home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Hráč 1997 December
/
Hrac_16_1997-12_cd.bin
/
PCMANIAK.5
/
DATA
/
PCMANIAK.ORG
/
ZDRAJAKY
/
J_SVGA3.PAS
< prev
Wrap
Pascal/Delphi Source File
|
1997-11-09
|
16KB
|
589 lines
{$I-}
Unit J_SVGA3;
Interface
uses Graph, mouse, dos;
Procedure InitSVGA;
Procedure downSVGA;
Procedure SetFarba(CisloFarby,RC,GC,BC:byte);
procedure loadpcx(nazov:string; x,y:integer; farby: boolean);
procedure loadpcx_FromLeft(nazov:string; x,y:integer; farby: boolean);
procedure loadpcx_FromRight(nazov:string; x,y:integer; farby: boolean);
procedure loadpcx_FromDown(nazov:string; x,y:integer; farby: boolean);
Procedure LoadFont(meno: string; var error: boolean);
Procedure WriteText(x,y:word;Str : String);
procedure set_mouse;
Procedure loadmouse;
procedure mouse_put;
Procedure NastavAktualFarba(f: byte);
Procedure Put_cas(x,y: word);
Procedure Vysviet(x,y, x2,y2: word; farba1, farba2: byte);
Procedure Put_Strana(x,y: word;AK_STR,POCET_STR:byte);
Procedure cistaobrazovka;
Procedure aktualizuj_mouse;
Procedure Put_iFObrazky(x,y: word;cislo:byte);
var fdata : array [0..255,0..15] of byte;
Otext: array[1..200] of string;
podklad, mys: pointer;
button, horiz, vert: Word;
horiz2, vert2: Word;
JE_MYS: boolean;
Z_mys: boolean;
First_Time: boolean;
mys_cursorEnable: boolean;
CENTRALIZE: boolean;
implementation
procedure VESA256driver; external;
{$L VESA256.OBJ}
procedure InitSVGA;
var VESA256, gm : integer;
begin
asm
mov ah,0
mov al,13h
int 10h
end;
VESA256 := InstallUserDriver('VESA256', @VESA256driver);
RegisterBGIdriver(@vesa256driver);
Gm:= 2;
InitGraph(VESA256, GM, 'data');
if GraphResult <> grOk then
begin
asm
mov ah,0
mov al,13h
int 3h
end;
Write('Chyba pri inicializacii grafiky');
Halt(1);
end;
end;
Procedure WriteText(x,y:word;Str : String);
Procedure PisChr(Charr : Char);
var I : Byte;
begin
For I:=0 to 15 do begin
SetLineStyle(UserBitLn,FData[Ord(Charr),I],0);
Line(GetX,GetY+I,GetX+16,GetY+I);
end;
SetLineStyle(SolidLn,0,0);
end;
var I : Byte;
begin
MoveTo(X-7,Y);
For I := 1 to Length(Str) do begin
PisChr(Str[I]);
MoveTo(GetX+9,GetY);
end;
end;
Procedure downSVGA;
begin
closegraph;
asm
mov ah, 0
mov al, 3
int 10h
end;
end;
Procedure SetFarba(CisloFarby,RC,GC,BC:byte);assembler;
{nastavi jednu farbu}
asm
mov dx,03c8h
mov al,CisloFarby
out dx,al
mov dx,03c9h
mov al,RC
out dx,al
mov al,GC
out dx,al
mov al,BC
out dx,al
end;
procedure loadpcx(nazov:string; x,y:integer; farby: boolean);
var PCX: file;
buffer: array[0..128] of byte;
n,pomocna2,pomocna3: integer;
sirka,vyska, i,j: integer;
Xsirka, Yvyska: integer;
RGB: array[1..3] of byte;
begin
Z_mys:=true;
putimage(horiz,vert,podklad^,normalput);
assign(PCX,nazov);
if farby then begin
reset(PCX,1);
seek(PCX, filesize(PCX)-768);
for pomocna2:=0 to 255 do begin
for pomocna3:=1 to 3 do blockread(PCX,RGB[pomocna3],1);
setfarba(pomocna2,RGB[1] div 4,RGB[2] div 4,RGB[3] div 4);
end;
close(PCX);
end;
reset(PCX, 128);
if ioresult<>0 then begin
downSVGA;
writeln('Chyba pri otvarani suboru ',nazov);
halt(2);
end;
blockread(PCX,buffer,1,n);
sirka:=buffer[8]+buffer[9]*256-(buffer[4]+buffer[5]*256);
vyska:=buffer[10]+buffer[11]*256-(buffer[6]+buffer[7]*256);
Xsirka:=0; Yvyska:=0;
iF CENTRALIZE then
begin
x:=(799-sirka) div 2;
y:=(599-vyska) div 2;
end;
repeat
blockread(PCX,buffer,1,n);
for i:=0 to 127 do
begin
if Xsirka=sirka+1 then
begin
inc(Yvyska);
Xsirka:=0;
if Yvyska=vyska+1 then
begin
getimage(horiz,vert,horiz+10,vert+15,podklad^);
Close(pcx);
exit;
end;
end;
if buffer[i]<$C1 then begin
putpixel(Xsirka+x, Yvyska+y, buffer[i]);
inc(Xsirka);
end else begin
pomocna2:=buffer[i]-$C1;
inc(i);
if i=128 then begin
blockread(PCX,buffer,1,n);
i:=0;
end;
for j:=0 to pomocna2 do putpixel(Xsirka+x+j, Yvyska+y, buffer[i]);
inc(Xsirka,j+1);
end;
end;
until n=0;
Z_mys:=true;
close(PCX);
getimage(horiz,vert,horiz+10,vert+15,podklad^);
end;
procedure loadpcx_FromLeft(nazov:string; x,y:integer; farby: boolean);
var PCX: file;
buffer: array[0..128] of byte;
n,pomocna2,pomocna3: integer;
sirka,vyska, i,j, k: integer;
Xsirka, Yvyska: integer;
RGB: array[1..3] of byte;
label EXIT;
begin
putimage(horiz,vert,podklad^,normalput);
Z_mys:=true;
assign(PCX,nazov);
if farby then begin
reset(PCX,1);
seek(PCX, filesize(PCX)-768);
for pomocna2:=0 to 255 do begin
for pomocna3:=1 to 3 do blockread(PCX,RGB[pomocna3],1);
setfarba(pomocna2,RGB[1] div 4,RGB[2] div 4,RGB[3] div 4);
end;
close(PCX);
end;
reset(PCX, 128);
if ioresult<>0 then begin
downSVGA;
writeln('Chyba pri otvarani suboru ',nazov);
halt(2);
end;
blockread(PCX,buffer,1,n);
sirka:=buffer[8]+buffer[9]*256-(buffer[4]+buffer[5]*256);
vyska:=buffer[10]+buffer[11]*256-(buffer[6]+buffer[7]*256);
for k:=sirka downto 0 do
begin
close(pcx);
reset(PCX, 128);
blockread(PCX,buffer,1,n);
Xsirka:=0; Yvyska:=0;
k:=k-6;
if k<1 then k:=0;
repeat
blockread(PCX,buffer,1,n);
for i:=0 to 127 do
begin
if Xsirka=sirka+1 then
begin
Yvyska:=Yvyska+1;
Xsirka:=0;
if Yvyska=vyska+1 then begin n:=0; goto exit; end;
end;
if buffer[i]<$C1 then begin
if (Xsirka>=k-Xsirka) and (Xsirka-k>=0) then putpixel(Xsirka+x-k, Yvyska+y, buffer[i]);
inc(Xsirka);
end;
if buffer[i]>$C0 then begin
pomocna2:=buffer[i]-$C1;
inc(i);
if i=128 then begin
blockread(PCX,buffer,1,n);
i:=0;
end;
for j:=0 to pomocna2 do
if (Xsirka+j>=k-Xsirka) and (Xsirka+j-k>=0) then putpixel(Xsirka+x+j-k, Yvyska+y, buffer[i]);
Xsirka:=Xsirka+j+1;
end;
end;
until n=0;
EXIT:
end;
close(PCX);
getimage(horiz,vert,horiz+10,vert+15,podklad^);
end;
procedure loadpcx_FromRight(nazov:string; x,y:integer; farby: boolean);
var PCX: file;
buffer: array[0..128] of byte;
n,pomocna2,pomocna3: integer;
sirka,vyska, i,j, k: integer;
Xsirka, Yvyska: integer;
RGB: array[1..3] of byte;
label EXIT;
begin
putimage(horiz,vert,podklad^,normalput);
Z_mys:=true;
assign(PCX,nazov);
if farby then begin
reset(PCX,1);
seek(PCX, filesize(PCX)-768);
for pomocna2:=0 to 255 do begin
for pomocna3:=1 to 3 do blockread(PCX,RGB[pomocna3],1);
setfarba(pomocna2,RGB[1] div 4,RGB[2] div 4,RGB[3] div 4);
end;
close(PCX);
end;
reset(PCX, 128);
if ioresult<>0 then begin
downSVGA;
writeln('Chyba pri otvarani suboru ',nazov);
halt(2);
end;
blockread(PCX,buffer,1,n);
sirka:=buffer[8]+buffer[9]*256-(buffer[4]+buffer[5]*256);
vyska:=buffer[10]+buffer[11]*256-(buffer[6]+buffer[7]*256);
Xsirka:=0; Yvyska:=0;
for k:=x downto x-sirka do
begin
k:=k-6;
if k<x-sirka then k:=x-sirka;
close(pcx);
reset(PCX, 128);
blockread(PCX,buffer,1,n);
Xsirka:=0; Yvyska:=0;
repeat
blockread(PCX,buffer,1,n);
for i:=0 to 127 do
begin
if Xsirka=sirka+1 then
begin
inc(Yvyska);
Xsirka:=0;
if Yvyska=vyska+1 then
begin
goto exit;
end;
end;
if buffer[i]<$C1 then begin
if k+xsirka<X then putpixel(Xsirka+k, Yvyska+y, buffer[i]);
inc(Xsirka);
end else begin
pomocna2:=buffer[i]-$C1;
inc(i);
if i=128 then begin
blockread(PCX,buffer,1,n);
i:=0;
end;
for j:=0 to pomocna2 do if k+xsirka+j<X then putpixel(Xsirka+k+j, Yvyska+y, buffer[i]);
inc(Xsirka,j+1);
end;
end;
until n=0;
EXIT:
end;
close(PCX);
getimage(horiz,vert,horiz+10,vert+15,podklad^);
end;
procedure loadpcx_FromDown(nazov:string; x,y:integer; farby: boolean);
var PCX: file;
buffer: array[0..128] of byte;
n,pomocna2,pomocna3: integer;
sirka,vyska, i,j, k: integer;
Xsirka, Yvyska: integer;
RGB: array[1..3] of byte;
label EXIT;
begin
putimage(horiz,vert,podklad^,normalput);
Z_mys:=true;
assign(PCX,nazov);
if farby then begin
reset(PCX,1);
seek(PCX, filesize(PCX)-768);
for pomocna2:=0 to 255 do begin
for pomocna3:=1 to 3 do blockread(PCX,RGB[pomocna3],1);
setfarba(pomocna2,RGB[1] div 4,RGB[2] div 4,RGB[3] div 4);
end;
close(PCX);
end;
reset(PCX, 128);
if ioresult<>0 then begin
downSVGA;
writeln('Chyba pri otvarani suboru ',nazov);
halt(2);
end;
blockread(PCX,buffer,1,n);
sirka:=buffer[8]+buffer[9]*256-(buffer[4]+buffer[5]*256);
vyska:=buffer[10]+buffer[11]*256-(buffer[6]+buffer[7]*256);
Xsirka:=0; Yvyska:=0;
x:=(800-sirka) div 2;
for k:=0 to vyska do
begin
k:=k+6;
if k>vyska then k:=vyska;
close(pcx);
reset(PCX, 128);
blockread(PCX,buffer,1,n);
Xsirka:=0; Yvyska:=0;
repeat
blockread(PCX,buffer,1,n);
for i:=0 to 127 do
begin
if Xsirka=sirka+1 then
begin
inc(Yvyska);
Xsirka:=0;
if Yvyska=vyska+1 then
begin
goto exit;
end;
end;
if buffer[i]<$C1 then begin
if Yvyska+y-k<y then putpixel(Xsirka+x, Yvyska+y-k, buffer[i]);
inc(Xsirka);
end else begin
pomocna2:=buffer[i]-$C1;
inc(i);
if i=128 then begin
blockread(PCX,buffer,1,n);
i:=0;
end;
for j:=0 to pomocna2 do if Yvyska+y-k<y then putpixel(Xsirka+x+j, Yvyska+y-k, buffer[i]);
inc(Xsirka,j+1);
end;
end;
until n=0;
EXIT:
end;
close(PCX);
getimage(horiz,vert,horiz+10,vert+15,podklad^);
end;
Procedure LoadFont(meno: string; var error: boolean);
var i,j: byte;
f: file;
readed: word;
begin
Assign(f,meno);
Reset(f,1);
error:=true;
if ioresult=0 then
begin
blockread(f,FData[0,0],filesize(f),readed);
Close(f);
if readed=4096 then error:=false;
end;
end;
Procedure loadmouse;
var si: integer;
begin
setcolor(255);
si:=imagesize(0,0,8,15);
getmem(podklad,si);
getmem(mys,si);
{sprosty kurzor mysi --- ALA FUCK JoJo}
line(0,100,0,113);
line(1,101,1,112);
line(2,102,2,111);
line(3,103,3,112);
line(4,104,4,114);
line(5,105,5,115);
line(6,106,6,109);
line(6,112,6,115);
line(7,107,7,108);
line(8,108,8,108);
line(7,115,7,115);
{koniec SPROSTEHO KURZORA mysi - .... like a monkey }
getimage(0,100,8,115,mys^);
clearviewport;
end;
procedure set_mouse;
begin
MouseEnable;
CursorDisable;
horizrozsah(789*2,0);
vertrozsah(599*2,0);
NastavSour(399, 299);
Sensimouse(4,4);
end;
procedure mouse_put;
begin
horiz2:=horiz; vert2:=vert;
CtiStav(button, horiz, vert);
if (horiz<>horiz2) or (vert<>vert2) or Z_mys then
begin
if not Z_mys then putimage(horiz2,vert2,podklad^,normalput);
getimage(horiz,vert,horiz+10,vert+15,podklad^);
putimage(horiz,vert,mys^,orput);
if Z_mys then Z_mys:=false;
end;
end;
Procedure aktualizuj_mouse;
begin
CtiStav(button, horiz, vert);
getimage(horiz,vert,horiz+10,vert+15,podklad^);
end;
Procedure NastavAktualFarba(f: byte);
begin
setcolor(f);
end;
Function ByteString(cislo: byte): string;
var x: string;
begin
x:='';
if cislo div 100 <> 0 Then
begin
x:=chr(cislo div 100 + 48);
cislo:=cislo - (cislo div 100)*100;
end;
if cislo div 10 <> 0 then
begin
x:=x+chr(cislo div 10 + 48);
cislo:=cislo - (cislo div 10)*10;
end;
x:=x+chr(cislo + 48);
ByteString:=x;
end;
Procedure Put_Cas(x,y: word);
var sec100, sec, min,hod: word;
xx,cas: string;
i: integer;
a,b: integer;
begin
gettime(hod, min, sec, sec100);
if (first_time) then
begin
first_time:=false;
cas:=ByteString(hod)+':'+ByteString(min);
if length(ByteString(hod))=1 then cas:=' '+cas;
if length(ByteString(min))=1 then
begin
xx:=cas;
cas:='';
for i:=1 to length(xx) do
if i=length(xx) then
cas:=cas+'0'+xx[i]
else cas:=cas+xx[i];
end;
for a:=x to x+47 do for b:=y+2 to y+14 do putpixel(a,b,0);
setcolor(255);
WriteText(x,y,cas);
WriteText(x+1,y,cas);
end;
if (sec=0) then
begin
cas:=ByteString(hod)+':'+ByteString(min);
if length(ByteString(hod))=1 then cas:=' '+cas;
if length(ByteString(min))=1 then
begin
xx:=cas;
cas:='';
for i:=1 to length(xx) do
if i=length(xx) then
cas:=cas+'0'+xx[i]
else cas:=cas+xx[i];
end;
for a:=x to x+47 do for b:=y+2 to y+14 do putpixel(a,b,0);
setcolor(255);
WriteText(x,y,cas);
WriteText(x+1,y,cas);
end;
end;
Procedure Vysviet(x,y, x2,y2: word; farba1, farba2: byte);
var a,b: integer;
begin
putimage(horiz,vert,podklad^,normalput);
if farba1=1 then
for a:=x to x2 do
for b:=y to y2 do
if getpixel(a,b)=0 then else putpixel(a,b,farba2)
else
for a:=x to x2 do
for b:=y to y2 do
if getpixel(a,b)=farba1 then putpixel(a,b,farba2);
getimage(horiz,vert,horiz+10,vert+15,podklad^);
end;
Procedure Put_Strana(x,y: word;AK_STR,POCET_STR:byte);
var strany:string;
begin
strany:=chr(ak_str+49)+'-'+chr(pocet_str+49);
setcolor(255);
WriteText(x,y,strany);
WriteText(x+1,y,strany);
end;
Procedure Put_iFObrazky(x,y: word;cislo:byte);
var strany:string;
begin
setcolor(255);
WriteText(x,y,chr(cislo+48));
WriteText(x+1,y,chr(cislo+48));
end;
Procedure CistaObrazovka;
begin
clearviewport;
end;
begin
mys_cursorEnable:= true;
Je_mys:=existmouse;
First_time:=true;
Z_mys:=false;
CENTRALIZE:=FALSE;
end.