home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 1996 May
/
PCW596.iso
/
polskie
/
eduk
/
genfast
/
genfast.lzh
/
DEMO_01.PAK
/
DEMO1.DA_
< prev
next >
Wrap
Text File
|
1996-02-08
|
17KB
|
733 lines
; Program demonstracyjny w jæzyku EasyGEN
; (C) 1995,96 RangelSoft Robert Grzegorzewski
[procedure InitDesktop]
@ClrScr;
@SetColors(0,15);
@SetPosition(40,15);
@SetHelpContext(1);
@DisableStatusButton(7);
@DisableStatusButton(8);
@Return;
[procedure ReverseImage]
@if (%C <> 12) then goto:20;
@SetColors(9,12);
@ReverseArea(62,322,109,385);
@SetColors(1,4);
@ReverseArea(62,322,109,385);
@Return;
[20]
@SetColors(4,1);
@ReverseArea(62,322,109,385);
@SetColors(12,9);
@ReverseArea(62,322,109,385);
@Return;
[procedure KasujEkran]
@Clear(0,0,639,289);
@ResetFields;
@DisableKeywords;
@Return;
[procedure Kolory]
@SetColors(0,15);
@Return;
[procedure Gong]
@Sound(100,250);
@Sound(250,250);
@Sound(500,250);
@Return;
[procedure StartScreen]
@Call:KasujEkran;
@SetColors(0,15);
; O₧ pozioma
@Line(50,150,600,150);
@Line(585,140,600,150);
@Line(585,160,600,150);
; O₧ pionowa
@Line(50,250,50,50);
@Line(35,60,50,50);
@Line(65,60,50,50);
; PodziaÆka X
@Line(140,137,140,163);
@Line(230,137,230,163);
@Line(320,137,320,163);
@Line(410,137,410,163);
@Return
[procedure ResetButtons]
; zdefiniowanie dodatkowego obszaru aktywnego
; tzn. niewidocznego przycisku
@SetInvisibleButton(22,292,618,418,900);
; redefiniowanie zwykÆych przycisków
@SetColors(8,15);
@SetButton(150,300,200,350,7,100,'OLOWEK1.rbm','Rysowanie');
@SetButton(150,360,200,410,7,400,'Litcyf.rbm','Dane z pliku');
@SetButton(223,300,273,350,7,700,'OKNODIAL.RBM','Okno dialogowe');
@SetButton(223,360,273,410,7,701,'TEKST.RBM','Wy₧wietlanie tekstu');
@SetButton(295,300,345,350,7,200,'gumka1.rbm','Skasowanie ekranu');
@SetButton(295,360,345,410,7,500,'showgraf.rbm','Wy₧wietlenie .CGV');
@SetButton(368,300,418,350,7,702,'buttons.RBM','Modyfikacja statusu');
@SetButton(368,360,418,410,7,703,'ODCZZAPI.RBM','Zapis/odczyt ekranu');
@SetButton(440,300,490,350,7,300,'Zapis.rbm','Zapis danych na dysku');
@SetButton(440,360,490,410,7,600,'Odczyt.rbm','Odczyt danych do wykresu');
@SetButton(513,300,563,350,7,704,'FLIDEMO.RBM','Animacja .FLI');
@SetButton(513,360,563,410,7,706,'ANIMACJA.RBM','Animacja wewnætrzna');
@Return;
[1!]
; wyÆåczenie wysokopoziomowego sprawdzania
; bÆædów podczas dziaÆañ arytmetycznych
@DisableOverflowChecking;
; zdefiniowanie etykiety (strona 999) do ktorej
; dzialanie zostanie przekazane w momencie nacisniecia
; przycisku powodujacego przejscie do menu (ikona symbolizujaca
; drzwi) lub po nacisnieciu klawisza <Esc>
@DefExitProc(999);
; redefiniowanie dzialania przycisku aktywujacego wydruk ekranu
@DefPrintProc(998);
; zdefiniowanie procedury obslugujacej zdarzenia z klawiatury
@DefKeyboardHandler(995);
; odtworzenie próbki dªwiækowej
;@PlayVOC('ACCESSED.VOC',16000);
;@PlayVOC('ACKNOWLG.VOC',16000);
@Call:InitDesktop;
@UpArea(20,290,620,420,7);
@DownArea(40,310,130,400,7);
; narysowanie niebieskiego wykrzyknika
; Uwaga! Postac na ekranie wyswietlanych plikow .BMP moze roznic sie
; od ich wygladu w standardowych przegladarkach, z tego powodu,
; iz nie jest uwzgledniana paleta zapisana w tychze plikach -
; modyfikacja palety do potrzebnej postaci spowodowalaby negatywne
; efekty wizualne na ekranie i zmiane kolorow juz narysowanych
; elementow...
@SetPosition(62,322);
@Picture('WYKRZYKN.BMP');
; ...dlatego tez, aby dokonac pewnego retuszu wyswietlonego
; rysunku, stosujemy procedure ReverseArea, ktora zamienia
; kolor podany jako pierwszy parametr procedury SetColor
; na kolor podany jako drugi parametr tejze procedury...
@SetColors(7,0);
@ReverseArea(62,322,109,385);
@SetColors(8,7);
@ReverseArea(62,322,109,385);
; wypisanie tekstu na rysunku
@SetPosition(60,340);
@SetColors(14,15);
@FastWrite('OBSZAR');
@SetPosition(57,355);
@FastWrite('AKTYWNY');
; zdefiniowanie dodatkowego obszaru aktywnego
; tzn. niewidocznego przycisku
@SetInvisibleButton(22,292,618,418,900);
; narysowanie przyciskow ekranowych
; Uwaga! procedura SetColors() ustawia kolory cienia przycisku
; (prawy i dolny brzeg) oraz "smugi" (lewy i gorny brzeg)
@SetColors(8,15);
@DrawButton(150,300,200,350,7,100,'olowek1.rbm','Rysowanie');
@DrawButton(150,360,200,410,7,400,'Litcyf.rbm','Dane z pliku');
@DrawButton(223,300,273,350,7,700,'OKNODIAL.RBM','Okno dialogowe');
@DrawButton(223,360,273,410,7,701,'TEKST.RBM','Wy₧wietlanie tekstu');
@DrawButton(295,300,345,350,7,200,'gumka1.rbm','Skasowanie ekranu');
@DrawButton(295,360,345,410,7,500,'showgraf.rbm','Wy₧wietlenie .CGV');
@DrawButton(368,300,418,350,7,702,'BUTTONS.RBM','Modyfikacja statusu');
@DrawButton(368,360,418,410,7,703,'ODCZZAPI.RBM','Zapis/odczyt ekranu');
@DrawButton(440,300,490,350,7,300,'Zapis.rbm','Zapis danych na dysku');
@DrawButton(440,360,490,410,7,600,'Odczyt.rbm','Odczyt danych do wykresu');
@DrawButton(513,300,563,350,7,704,'FLIDEMO.RBM','Animacja .FLI');
@DrawButton(513,360,563,410,7,706,'ANIMACJA.RBM','Animacja wewnætrzna');
; wlaczenie obrazu
@ShowScreen;
[2]
@SetCurrentPage(1);
@CheckEvents
[100]
@C := 12;
@Call:ReverseImage;
@Call:Kolory;
@Call:StartScreen;
; sprawdzenie, czy juz nie jest uaktywnione rysowanie
; (obecnosc pola aktywnego numer 14 na ekranie)
@GetParam;
@if (%F = 14) then goto:101;
@SetInvisibleButton(1,1,638,275,901);
[101]
@SetPosition(50,150);
@A := 0;
@L := 50;
@K := 150;
@Repeat:181;
@B:=(sin(3.14*(%A/90)))*80;
@I := 50 + %A;
@J:=150 - %B;
@Line(%L,%K,%I,%J);
@L:=%I;
@K:=%J;
@A:=%A+2;
@Next;
@Call:Gong;
@K:=0;
@L:=0;
@SetPosition(400,20);
@SetColors(0,15);
@Interline(14);
~Teraz moºesz trochæ~
~porysowaì za pomocå myszy.~
<#32>
@SetColors(4,14);
~S~p~r~ó~b~u~j~...
@goto:2
[200]
@C := 12;
@Call:ReverseImage;
@Call:KasujEkran;
@Call:Kolory;
@GetParam;
@if (%F < 14) then goto:2;
@DeleteButton;
@GoTo:2
[300]
@C := 12;
@Call:ReverseImage;
; utworzenie nowego pliku uzytkownika
; (w okienku uzytkownik musi podac nazwe nowego
; pliku lub wybrac jeden z juz istniejacych, wyswietlonych
; na liscie i pasujacych do maski *.RYS)
@CreateUserFile('Zapis danych','*.RYS');
@GetErrorCode;
@If (%Z<>0) then GoTo:2;
@Delay(500);
; nalezy zapamietac nieco wiekszy obszar,
; gdyz cien pod oknem dialogowym wykracza poza
; obszar podany w wywolaniu procedury DialogBox.
@GetImage(150,100,510,220);
@DialogBox(150,100,490,200,10,'Informacja');
@SetPosition(220,150);
@SetColors(0,15);
@FastWrite('Zapis danych do pliku...');
@A := 1;
@Repeat:37
@B:=(sin(3.14*(%A/180)))*80;
@L:=50+%A;
@K:=150-%B;
@WriteReal(%L);
@WriteReal(%K);
@A:=%A+10;
@Next;
@CloseFile;
@Delay(1000);
@PutImage;
@Call:Gong;
@GoTo:2
[procedure ReadFourWords]
@ReadWord(%A);
@ReadWord(%B);
@ReadWord(%C);
@ReadWord(%D);
@Return
[400]
@C := 9;
@Call:ReverseImage;
@Call:KasujEkran;
@L:=0;
@GetValue(%L,'Podaj liczbæ powtórzeñ (1-5)');
@If (%L<1) Then GoTo:2
@If (%L>5) Then GoTo:2
; Program generujåcy dane do rysowania
@Execute('POKAZ.EXE');
;
@OpenFile('POKAZ.DAT');
@GetErrorCode;
; teraz w zmiennej tylko do odczytu %Z znajduje sie kod bledu
; operacji poprzednio wykonanej (0 oznacza poprawne wykonanie)
@If (%Z<>0) then GoTo:599;
;
@Repeat:%L
@Call:ReadFourWords;
@Rectangle(%A,%B,%C,%D);
@Call:ReadFourWords;
@ReadWord(%K);
@SetColors(%K,%K);
@FillEllipse(%A,%B,%C,%D);
@Next;
@CloseFile;
@Call:Gong;
@Call:Kolory;
@GoTo:2
[500]
@SetHypertextColor(9);
@C := 9;
@Call:ReverseImage;
@D:=1;
@Call:KasujEkran;
@DownArea(20,20,620,40,7);
@SetPosition(30,27);
@FastWrite('Wybierz za pomocå myszy jeden z poniºszych bloków schematu...');
@SetPosition(60,60);
@SetColors(0,15);
@Picture('ARCZ1.CGV');
@A:=1;
@Repeat:8
@AssignField(%A,500+%A);
@A:=%A+1
@Next
@GoTo:2
[procedure HideBlock]
@SetColors(0,15);
@IF (%E = %D) then Return;
@HideBlock(%D)
@Return
[501]
@DownArea(20,20,620,40,7);
; deaktywacja podswietlonych (poprzednio) slow hipertekstu na ekranie
@DisableKeywords;
@SetPosition(30,22);
Mieszacz, dokonujåcy proces przemiany czæstotliwo₧ci
@E:=1;
@Call:HideBlock;
@ShowBlock(1);
@D:=1;
@GoTo:2;
[502]
@DownArea(20,20,620,40,7);
; deaktywacja podswietlonych (poprzednio) slow hipertekstu na ekranie
@DisableKeywords;
@SetPosition(30,22);
Heterdodyna, czyli tzw. generator lokalny
@E:=2;
@Call:HideBlock;
@ShowBlock(2);
@D:=2;
@GoTo:2;
[503]
@DownArea(20,20,620,40,7);
; deaktywacja podswietlonych (poprzednio) slow hipertekstu na ekranie
@DisableKeywords;
@SetPosition(30,22);
Wzmacniacz po₧redniej czæstotliwo₧ci
@E:=3;
@Call:HideBlock;
@ShowBlock(3);
@D:=3;
@GoTo:2;
[504]
@DownArea(20,20,620,40,7);
; deaktywacja podswietlonych (poprzednio) slow hipertekstu na ekranie
@DisableKeywords;
@SetPosition(30,22);
Filtr 38 MHz
@E:=4;
@Call:HideBlock;
@ShowBlock(4);
@D:=4;
@GoTo:2;
[505]
@DownArea(20,20,620,40,7);
; deaktywacja podswietlonych (poprzednio) slow hipertekstu na ekranie
@DisableKeywords;
@SetPosition(30,22);
Ogranicznik amplitudy
@E:=5;
@Call:HideBlock;
@ShowBlock(5);
@D:=5;
@GoTo:2;
[506]
@DownArea(20,20,620,40,7);
; deaktywacja podswietlonych (poprzednio) slow hipertekstu na ekranie
@DisableKeywords;
@SetPosition(30,22);
Dyskryminator czæstotliwo₧ci
@E:=6;
@Call:HideBlock;
@ShowBlock(6);
@D:=6;
@GoTo:2;
[507]
@DownArea(20,20,620,40,7);
; deaktywacja podswietlonych (poprzednio) slow hipertekstu na ekranie
@DisableKeywords;
@SetPosition(30,22);
Wzmacniacz prådu staÆego
@E:=7;
@Call:HideBlock;
@ShowBlock(7);
@D:=7;
@GoTo:2;
[508]
@DownArea(20,20,620,40,7);
; deaktywacja podswietlonych (poprzednio) slow hipertekstu na ekranie
@DisableKeywords;
@SetPosition(30,22);
UkÆad reaktancyjny
@E:=8;
@Call:HideBlock;
@ShowBlock(8);
@D:=8;
@GoTo:2;
[599]
@MessageBox('BÆåd','Brak pliku na dysku.');
@GoTo:2
[600]
@C := 9;
@Call:ReverseImage;
@Call:KasujEkran;
@OpenUserFile('Odczyt danych','*.RYS');
@GetErrorCode;
@If (%Z<>0) then GoTo:599
@Call:StartScreen;
@SetColors(1,1);
@I:=50
@J:=150
@FileSize(%E);
@Repeat:(%E/12);
@ReadReal(%K);
@ReadReal(%L);
@Line(%I,%J,%K,%L);
@Line(%I,%J+1,%K,%L+1);
@I:=%K
@J:=%L
@Next
@CloseFile;
; skasowanie pliku (musi byc wczesniej zamkniety)
@EraseFile;
@Call:Gong
@Call:Kolory
@GoTo:2
[700]
@C := 12;
@Call:ReverseImage;
@GetImage(150,100,510,270);
@DialogBox(150,100,490,250,3,'PrzykÆadowe okno dialogowe');
; deaktywacja przyciskow ekranowych (na czas dzialania okna dialogowego)
; oraz pola aktywnego typu zdefiniowanego przy pomocy
; procedury @SetInvisibleButton
; Uwaga! Deaktywacji wszystkich przyciskow uzytkownika mozna
; dokonac takze za pomoca procedury @DisableUserButtons
@Repeat:14
@DeleteButton;
@Next;
; Uwaga! istnieje takºe moºliwo₧ì deaktywacji wszystkich przycisków
; i pól aktywnych na ekranie poprzez ustalenie duºego pola aktywnego
; (nie reagujåcego na zdarzenia) na obszarze caÆego ekranu
; (moºna w ten sposób zdeaktywowaì na pewien czas takºe przyciski
; w linii statusu, gdy rozmiar tego pola aktywnego bædzie np. taki:
; @SetInvisibleButton(0,0,639,479,999);
; Strona 999 powinna byì zdefiniowana np. w ten sposób:
;
; [999]
; @GoTo:<numer etykiety (strony) przed wywolaniem procedury @CheckEvents>
; odczytanie liczby pol aktywnych do %E (jesli istnieja)
; i deaktywacja tychºe pól w rysunku CGV
@K:=%D;
@GetParam;
@ResetFields;
@SetColors(0,15);
@DrawButton(280,215,360,240,12,800,'OK','');
@SetPosition(170,140);
@SetColors(0,0);
@Interline(14);
Oto przykÆad sposobu utworzenia
wÆasnego okienka dialogowego z
przyciskiem zamykajåcym oraz tekstem
wypisywanym czcionkå uºytkownika...
@SetCurrentPage(799);
; ^ procedura ta powoduje, ze nacisniecie przycisku z reka
; skierowana w prawa strone automatycznie zamknie okno
; poprzez przejscie do strony 800 (jako nastepnej po 799)
@CheckEvents;
[procedure ResetCGV]
; sprawdzenie w zmiennej %E, czy byly strony aktywne (patrz wyzej)
@If (%E = 0) then Return;
@SetPosition(60,60);
@LoadFields('ARCZ1.CGV');
@A:=1
@Repeat:8
@AssignField(%A,500+%A);
@A:=%A+1
@Next
@Return
[800]
@DeleteButton;
@PutImage;
@Call:ResetButtons;
@Call:ResetCGV;
@D:=%K;
@GoTo:2;
[701]
@C := 9;
@Call:ReverseImage;
@Call:KasujEkran;
@LoadFont('COURMAZ.RSF');
@SetPosition(20,20);
To jest duºa
czcionka...
@LoadFont('SYSTEM.RSF');
@SetPosition(30,110);
@A := 8;
@Repeat:10
@SetColors(%A,15);
@Interline(%A);
A to jest czcionka maÆa z róºnym ustawieniem ~interlinii~...
@A:=%A+2;
@Next
@GoTo:2;
[702]
@C := 12;
@Call:ReverseImage;
@A := 1;
@Repeat:8
@DisableStatusButton(%A);
@Delay(1000);
@EnableStatusButton(%A);
@A := %A + 1;
@Next;
@Call:Gong;
@Delay(1000);
@Repeat:2;
@DisableStatusBar;
@Delay(500);
@EnableStatusBar;
@Delay(500);
@Next;
@DisableStatusButton(7);
@DisableStatusButton(8);
@GoTo:2
[703]
@C := 9;
@Call:ReverseImage;
@SaveScreen;
@ClrScr;
@SetPosition(40,50);
@SetColors(0,15);
@Interline(20)
Ekran zostaÆ zapisany na dysku, a nastæpnie
wykasowany poleceniem ~@ClrScr~...
; odstæp (moºna zamiast <#32> wstawiì zwykÆå spacjæ - kod #32)
<#32>
Po ~5 sekundach~ zawarto₧ì ekranu zostanie
przywrócona za pomocå polecenia ~@LoadScreen~
(polecenie to, w przeciwieñstwie do ~@RestoreScreen~,
nie aktywizuje trybu graficznego, tak wiæc, je₧li
tryb graficzny byÆ zmieniany np. przez zewnætrzny
program wywoÆany poleceniem ~@Execute~, to naleºy
uºyì wÆa₧nie procedury ~@RestoreScreen~ zamiast ~@LoadScreen~)
; 6 linii odstæpu
@Repeat:6;
<#32>
@Next;
@SetColors(14,14);
Najedª na powyºszå ramkæ kursorem myszy (ale bez naciskania
przycisku) aby rozpoczåì odliczanie czasu...
@UpArea(100,300,524,330,7);
[714]
@GetMousePosition;
@if (%X < 100) then goto:714;
@if (%X > 524) then goto:714;
@if (%Y < 300) then goto:714;
@if (%Y > 330) then goto:714;
@SetColors(12,15);
@J:=1;
@Repeat:20;
@Bar(81+%J*21,302,102+%J*21,328);
@J := %J + 1;
@Delay(200);
@Next
; odtworzenie ekranu
@LoadScreen;
; ponowne zapisanie ekranu
@SaveScreen;
@MessageBox('Teraz prezentacja @RestoreScreen','Naci₧nij <ENTER>');
; wyswietlenie rysunku .PCX (320x200x256)
@ShowPCX('DEMO256K.PCX');
; wstrzymanie wykonywania kodu na 5 sekund (lub mniej w przypadku
; nacisniecia jakiegos klawisza przez uzytkownika)
@StopAction(5000);
; wyswietlenie rysunku .PCX (640x480x16)
@ShowPCX('DEMO.PCX');
; wstrzymanie wykonywania kodu do momentu nacisniecia jakiegos klawisza
@StopAction(0);
; odtworzenie ekranu
@RestoreScreen;
; warto₧ì standardowa interlinii
@Interline(14);
@SetColors(0,15);
@GoTo:2
[900]
@MessageBox('NacisnåÆe₧ obszar aktywny!','Rysowanie wyÆåczone !!!');
@GetParam;
@if (%F < 14) then goto:2
@DeleteButton;
@GoTo:2
[901]
; w tym miejscu w zmiennych tylko do odczytu %X i %Y så wspóÆrzædne
; ekranowe kursora myszy
@SetColors(15,15);
@if (%K = 0) then goto:902
@Line(%K,%L,%X,%Y);
[902]
@K := %X;
@L := %Y;
@GoTo:2
; animacja
[704]
@C := 12;
@Call:ReverseImage;
@MessageBox('Teraz bædzie animacja!','Spróbuj teº "Alt+A"');
[705]
@SaveScreen;
; jesli drugi parametr procedury ShowFLI bedzie rowny 1, to animacja
; bedzie odbywala sie z maksymalna predkoscia;
; zwiekszanie tego parametru spowolni animacje,
; wartosc 0 oznacza domyslna predkosc zdefiniowana w pliku .FLI
@ShowFLI('DEMO',0,0,3);
@RestoreScreen;
@GoTo:2
[procedure ResetF]
@F := 5;
@Return;
; animacja przy pomocy jezyka EasyGEN
[706]
@C := 9;
@Call:ReverseImage;
@SaveScreen;
@Clear(0,0,639,289);
@SetColors(14,15);
@K:=-1;
@Repeat:16;
@K:=%K+1;
@SetColors(%K,15);
@Bar(%K*40,0,%K*40+40,280);
@Next;
@GetImage(0,61,639,101);
@SetColors(1,15);
@FillEllipse(40,80,20,20);
@J := 8;
@F := 5;
@Repeat:80;
@PutImage;
@GetImage(0,61,639,101);
@F := %F + 2;
@If (%F > 20) then Call:ResetF;
@SetColors(%F,%F+1);
@FillEllipse(32+%J,80,%F,%F);
@J := %J + 8;
@Delay(50);
@Next;
@MessageBox('Informacja','To juº koniec...');
@PutImage;
@LoadScreen;
@GoTo:2
; procedura wywoÆywana po naci₧niæciu dowolnego nieredefiniowanego klawisza
[995]
; teraz w zmiennej %Z znajduje sie kod nacisnietego klawisza
@Sound(200,100);
; Kod $1E00 odpowiada kombinacji klawiszy "Alt+A"
; po nacisnieciu tej kombinacji proces przejdzie do strony 705...
@If (%Z = $1E00) then goto:705;
@Goto:2
; procedura wywoÆywana po naci₧niæciu przycisku
; realizujåcego wydruk ekranu (lub <Alt+D>)
[998]
@MessageBox('Co Ty chcesz drukowaì ?','Drukowanie nieaktywne!');
@GoTo:2
; procedura wywoÆywana po naci₧niæciu przycisku
; realizujåcego powrót do menu (lub <Esc>)
[999]
@Call:Gong;
@Repeat:5;
@HideScreen;
@Delay(200);
@ShowScreen;
@Delay(200);
@Next;
@MessageBox('Uwaga','Powrót do menu...');
; w tym miejscu najlepiej jest skasowaì wszystkie pliki
; buforowe, zamknåì otwarty plik i ewentualnie zapytaì o zgodæ na
; zakoñczenie itp.
@EraseFile('DANE.TST');
; dalej juº nie ma kodu, wiæc naståpi powrót do menu
; - moºna takºe wstawiì tu instrukcjæ np. @Goto:990,
; czyli skok do nieistniejåcej strony, co bædzie miaÆo
; ten sam efekt.