home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2002 December
/
PCWorld_2002-12_cd.bin
/
Software
/
Komercni
/
Baltik
/
katA.exe
/
katA
/
GRAF
/
graf.sgp
< prev
next >
Wrap
Text File
|
2002-02-14
|
12KB
|
342 lines
SGPC 5.05 034#000000661 2.02.2002 12:29:39
# include <sgpbalt.h>
//////////////////////
// Globální prom╪nné
//
// prom╪nné celoƒíselné:
int gA,gB,gC,gD,gE,gF,gG,gH,gI,gJ, // rozsah -32768..32767
gI¼íslo1,gI¼íslo2,gI¼íslo3,gPàvBarvy;
// gKlávesa je souƒástí knihovny Baltazara
// prom╪nné reálné:
double gD¼íslo1,gD¼íslo2,gD¼íslo3; // rozsah 5.0E-324..1.7E308
// prom╪nná znak:
char gZnak;
// prom╪nná ²et╪zec:
string gⁿet╪zec;
/////////////////////
// Pomocné definice
//
#define NE 0
#define ANO 1
#define ABS(x) ((x)>0?(x):-(x))
#define __CYKLUS(N) __Cyklus(1,N);__Cyklus(0,N); //Hlava cyklu
#define __MPVC_ 100 //Maximální poƒet vno²en∞ch cyklà
int __Cyklus( int Nov∞, int Poƒet )
//Nov∞ > 0: Otev²ení nového cyklu s N opakováními (vƒetn╪ 0)
//Nov∞ = 0: Dalτí pràchod cyklem
//Nov∞ < 0: P²edƒasné ukonƒení cyklu
{ static int I[__MPVC_];
static int i = -1;
if( Nov∞ > 0 )
{ if( ++i >= __MPVC_)
{ TxtPiτⁿet╪zec("P²íliτ mnoho vno²en∞ch cyklà");
while(1) {Tón(1000);};
}else I[i]=Poƒet;
}else if( Nov∞ == 0 )
{ if(--I[i]<0){ i--; return(0);}
else return(1);
}else return(-(i--)); //Vrací zápornou aktuální hloubku vno²ení
} //Cyklus
void ¼ekejNaReakci(void)
//¼eká na sitsk klávesy nebo tlaƒítka myτi
{ VyprázdniFrontuKláves();
MyτVyprázdniFrontuUdálostí();
¼ekej(NaKlávesu|NaMyτ);
VyprázdniFrontuKláves();
MyτVyprázdniFrontuUdálostí();
} //¼ekejNaReakci
long ¥¼ti¼íslo ( char* Text )
{ long Vrátit = 0;
GrNastavPozici(272, 0);
Gr¼tiL¼íslo(Text,Vrátit,8,1,0xe);
GrNastavPozici(272, 0);
GrPiτⁿet╪zec( " " );
return Vrátit;
} //¥¼ti¼íslo
long BaltEmuluj( char* Text )
{ long Vrátit = 0;
int Klávesa;
int Konec = 0;
TypP²edm╪t P²edm╪t=1;
VyprázdniFrontuKláves();
GrNastavBarvy( 0x7 ); GrSmaºOkno();
GrPiτⁿet╪zec( Text );
Tón(1000); ¼ekej(10); VypniTón();
while (!Konec)
{ int p;
GrNastavPozici(0, GrV∞τkaZnaku);
GrPiτⁿet╪zec( "ⁿá: "); GrPiτL¼íslo( PoziceBaltazaraY(), 2 );
GrPiτⁿet╪zec( ", Sl: " ); GrPiτL¼íslo( PoziceBaltazaraX(), 2 );
GrPiτⁿet╪zec( ", Sm: " );
int s=Sm╪rBaltazara();
GrPiτⁿet╪zec( s==V∞chod ? "V∞chod" :
s==Jih ? "Jih " :
s==Západ ? "Západ " :
"Sever " );
GrPiτⁿet╪zec( ", Ba: " ); NastavBarvu¼arování( p=NastavBarvu¼arování(0));
GrPiτL¼íslo( p, 2 );
GrPiτⁿet╪zec( ", Ry: " ); RychlostBaltazara(p = RychlostBaltazara(0));
GrPiτL¼íslo( p, 2 );
switch ¼tiKlávesuZFrontyS¼ekáním()
{ case KlDoleva: VlevoVbok(); break;
case KlDoprava: VpravoVbok(); break;
case KlNahoru: Popojdi(1); break;
case KlDolà: ¼aruj(Baltedit()); break;
case KlIns: Vrátit = ¥¼ti¼íslo( "¼íslo: " ); break;
case 'B':
case 'b': NastavBarvu¼arování( ¥¼ti¼íslo("Barva: ") ); break;
case 'C':
case 'c': ¼aruj(¼tverec); break;
case 'R':
case 'r': RychlostBaltazara( ¥¼ti¼íslo("Rychlost: ") ); break;
case KlEnter: Konec = 1; break;
} //switch
} //while
GrNastavBarvy( 0x77 ); GrSmaºOkno();
return Vrátit;
} //BaltEmuluj
///////////////////
// Globální makra
//
-o1-Globals ----------------------------------------------------------------
0 ;prom╪nné
;globální prom╪nné (jsou definovány v globálních definicích Ctrl+G):
;prom╪nné celoƒíselné: gA,gB,gC,gD,gE,gF,gG,gH,gI,gJ,gKlávesa;
;dalτí p²eddefinované globální prom╪nné mají vºdy p²edponu g..
;a jejich názvy jsou shodné s lokálními prom╪nn∞mi definovan∞mi níºe,
;nap². gD¼íslo1, gⁿet╪zec atd.
;lokální prom╪nné:
;prom╪nné celoƒíselné:
int a,b,c,d,e,f,g,h,i,j,Klávesa, //rozsah -32768..32767
I¼íslo1,I¼íslo2,I¼íslo3,PàvBarvy;
;prom╪nné reálné:
double D¼íslo1,D¼íslo2,D¼íslo3; //rozsah 5.0E-324..1.7E308
;prom╪nná znak:
char Znak;
;prom╪nná ²et╪zec:
string ⁿet╪zec;
[ ;vytvo² Baltazaràv grafick∞ prostor
Vytvo²Prostor(); MyτZaƒátekObsluhy();
] ;zruτ Baltazaràv grafick∞ prostor
MyτKonecObsluhy(); ZruτProstor();
a Klávesa= ¼tiKlávesuZFronty();
b P²epniNaBaltazara();
c ¼aruj(¼tverec);
d Gr¼tiZnak("?",Znak,1,0x07); /* edit ano, ƒerná/sv.τedá*/
╨ return BaltEmuluj("Hodnota?");
e BezObláƒku();
f VyprázdniFrontuKláves();
g Gr¼tiSⁿet╪zec("?",ⁿet╪zec,40,1,0x3f); /*40zn, edit ano, modrá/bílá */
h Gr¼tiI¼íslo("?",I¼íslo1,6,0,0x0e); /* 6zn, edit ne, ƒerná/ºlutá */
i Gr¼tiD¼íslo("?",D¼íslo1,20,1,0x0f); /*20zn, edit ne, ƒerná/bílá */
j GrPiτZnak(Znak);
k Klávesa= ¼tiKlávesuZFrontyS¼ekáním();
l VlevoVbok();
ê BaltEmuluj("STOP");
m ;vypiτ ⁿet╪zec do grafického okénka
PàvBarvy=GrNastavBarvy(Modrá<<4|ªlutá); /*ºlutá na modré */
GrPiτⁿet╪zec(ⁿet╪zec); /*vypíτe obsah prom╪nné ⁿet╪zec*/
GrNastavBarvy(PàvBarvy); /*nastaví pàvodní barvy */
n Neviditeln∞();
o SObláƒkem();
p Popojdi(1);
q GrPiτL¼íslo(I¼íslo1,-1); /* -1 = nejkratτí v∞pis */
r VpravoVbok();
t P²epniNaText();
u GrPiτD¼íslo(D¼íslo1,10,2); /*10 ƒíslic, z toho 2 desetinné*/
v Viditeln∞();
w ;ƒekej na stisk klávesy nebo tlaƒítka myτi
¼ekejNaReakci();
x Skryj();
y Odhal();
z ;ƒelem vzad
VlevoVbok(); VlevoVbok();
B NastavBarvu¼arování /* B:(barva)! 0-15 */
C ¼aruj /* C:(p²edm╪t)! 1-150 */
╤ return BaltEmuluj /* ╤:("Volno")! "Test" */
L NaƒtiScénu /* L:("soubor")! "c:\\pavel\\soubor.s00" */
¥ BaltEmuluj /* ¥:("Text")! "Test" */
N Náhodn╪¼aruj /* N:(p²edm╪t)! 1-150 */
P Popojdi /* P:(poƒet_polí)! 0-14 */
R RychlostBaltazara /* R:(rychlost)! 0-9 */
S UloºScénu /* S:("soubor")! "c:\\pavel\\soubor.s00" */
W ¼ekej /* W:(milisekund)! 0-32000 */
X ¼arujNaPozici /* X:(p²edm╪t,x,y)! 1-150, 1-15, 1-10 */
-c1-Globals ---- (? lze pouºít jako náhrada pouze pro /,*,+) -----------------
?n PràchodnostP²edm╪tuP²edB() Je 0
?p PràchodnostP²edm╪tuP²edB() Je 1
?B Barva¼tverceP²edB() /* Je, Není, <, >, <= ,>= */
?P P²edm╪tP²edB() /* Je, Není, <, >, <= ,>= */
?S Sm╪rBaltazara() /* Je, Není, <, >, <= ,>= */
\b Barva¼tverceP²edB()??
\p P²edm╪tP²edB()??
\s Sm╪rBaltazara()??
\C case
#C ; n-krát #C:(5) 5₧
__CYKLUS
#A ;opakuj vzestupn╪ pro prom╪nnou od,do,krok #A:(i,2,10,2) i=2,4..10
OdDoKrok
#D ;opakuj sestupn╪ pro prom╪nnou od,do,krok #D:(i,10,2,2) i=10,8..2
OdDolàDoKrok
#M ;opakuj n-krát sestupn╪ pro prom╪nnou #M:(i,8) (8x) i=7,6..0
DolàDo0
#N ;opakuj n-krát vzestupn╪ pro prom╪nnou #N:(i,8) (8x) i=0,1..7
Od0
===Globals ------------------------------------------------------------------
/*-hf(*/
/*-hf-*/
void main( void )
/*-hf)*/;
;-h---------------------------------------------------------------------------
void main( void )
-s--Graf~2 ■ 13 -2 6 3
______________________________Graf~2______________________________
P²íprava Jak~m╪²it M╪²ení Uloºení Ukonƒení
0! #C:(1) #N:(a,c) 4! :PiτPort8(0x378,0x00)
:GrNastavMód(GrMódVGA) jak~m╪²it m╪²ení
:MyτZaƒátekObsluhy() 1! 2!
:PiτPort8(0x378,0x80)
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
0 ;p²eddefinované prom╪nné
;globální prom╪nné (jsou definovány v globálních definicích Ctrl+G):
;prom╪nné celoƒíselné: gA,gB,gC,gD,gE,gF,gG,gH,gI,gJ,gKlávesa;
;dalτí p²eddefinované globální prom╪nné mají vºdy p²edponu g..
;a jejich názvy jsou shodné s lokálními prom╪nn∞mi definovan∞mi níºe,
;nap². gD¼íslo1, gⁿet╪zec atd.
;lokální prom╪nné:
;prom╪nné celoƒíselné:
int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,Klávesa, // rozsah -32768..32767
I¼íslo1,I¼íslo2,I¼íslo3,PàvBarvy;
;prom╪nné reálné:
double D¼íslo1,D¼íslo2,D¼íslo3; // rozsah 5.0E-324..1.7E308
;prom╪nná znak:
char Znak;
;prom╪nná ²et╪zec:
string ⁿet╪zec;
;prom╪nná ƒas:
Typ¼as ƒas;
[ ;vytvo² Baltazaràv grafick∞ prostor
Vytvo²Prostor(); MyτZaƒátekObsluhy();
] ;zruτ Baltazaràv grafick∞ prostor
MyτKonecObsluhy(); ZruτProstor();
v Viditeln∞();
w ;ƒekej na stisk klávesy nebo tlaƒítka myτi
¼ekejNaReakci();
R RychlostBaltazara /* R:(rychlost)! 0-9 */
1 ;zjiτt╪ní informací, jak m╪²it
TypSoubor Soubor=SouborOtev²i("*\\graf_nu.grf",SouborP²ístup¼tení|SouborP²ístupTextov∞);
SouborNastavPozici(Soubor,0,SouborPoziceOdZaćtku);
Soubor¼tiI¼íslo(Soubor,q);
Soubor¼tiI¼íslo(Soubor,c);
Soubor¼tiI¼íslo(Soubor,d);
Soubor¼tiI¼íslo(Soubor,e);
Soubor¼tiI¼íslo(Soubor,f);
Soubor¼tiI¼íslo(Soubor,g);
Soubor¼tiI¼íslo(Soubor,h);
Soubor¼tiI¼íslo(Soubor,i);
Soubor¼tiI¼íslo(Soubor,j);
2 ;m╪²ení
if (a == 0) { k=d; PiτPort8(0x378,0x81); }
if (a == 1) { k=e; PiτPort8(0x378,0x82); }
if (a == 2) { k=f; PiτPort8(0x378,0x84); }
if (a == 3) { k=g; PiτPort8(0x378,0x88); }
if (a == 4) { k=h; PiτPort8(0x378,0x90); }
if (a == 5) { k=i; PiτPort8(0x378,0xA0); }
if (a == 6) { k=j; PiτPort8(0x378,0xC0); }
b=0;
StopkyNuluj();
StopkyStart();
Stopky(ƒas);
while ( ƒas.Sekundy < k ) {
Myτ¼tiUdálost(gMyτUdálost);
if ( gMyτUdálost.Typ == MyτUdálostLevéTlDolà ) {
b=b+1;
}
Stopky(ƒas);
}
if (a == 0) (d=b);
if (a == 1) (e=b);
if (a == 2) (f=b);
if (a == 3) (g=b);
if (a == 4) (h=b);
if (a == 5) (i=b);
if (a == 6) (j=b);
4 ;Uloºení nam╪²en∞ch dat do souboru
TypSoubor Soubor=SouborOtev²i("*\\graf_nu.grf",SouborP²ístupZápis|SouborP²ístupTextov∞);
SouborNastavPozici(Soubor,0,SouborPoziceOdKonce);
SouborPiτNov∞ⁿádek(Soubor);
SouborPiτU¼íslo(Soubor,d,-1);
SouborPiτⁿet╪zec(Soubor," ");
SouborPiτU¼íslo(Soubor,e,-1);
SouborPiτⁿet╪zec(Soubor," ");
SouborPiτU¼íslo(Soubor,f,-1);
SouborPiτⁿet╪zec(Soubor," ");
SouborPiτU¼íslo(Soubor,g,-1);
SouborPiτⁿet╪zec(Soubor," ");
SouborPiτU¼íslo(Soubor,h,-1);
SouborPiτⁿet╪zec(Soubor," ");
SouborPiτU¼íslo(Soubor,i,-1);
SouborPiτⁿet╪zec(Soubor," ");
SouborPiτU¼íslo(Soubor,j,-1);
SouborPiτⁿet╪zec(Soubor," ");
TypDatum datum;
Typ¼as hodiny;
SystémovéDatum(datum);
Systémov∞¼as(hodiny);
SouborPiτL¼íslo(Soubor,datum.Den,-1); SouborPiτⁿet╪zec(Soubor," ");
SouborPiτL¼íslo(Soubor,datum.M╪síc,-1); SouborPiτⁿet╪zec(Soubor," ");
SouborPiτL¼íslo(Soubor,datum.Rok,-1); SouborPiτⁿet╪zec(Soubor," ");
SouborPiτL¼íslo(Soubor,hodiny.Hodiny,-1); SouborPiτⁿet╪zec(Soubor," ");
SouborPiτL¼íslo(Soubor,hodiny.Minuty,-1); SouborPiτⁿet╪zec(Soubor," ");
SouborPiτⁿet╪zec(Soubor," ");
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
#C ; n-krát #C:(5) 5₧
__CYKLUS
#N ;opakuj n-krát vzestupn╪ pro prom╪nnou #N:(i,8) (8x) i=0,1..7
Od0
=SP---------------------------------------------------------------------------
//
// Konec souboru
//////////////////