Jan Bielecki Piotr Micha³kiewicz Turbo Pascal 7.0 OCopyri*ht: Piotr Michaˆ*iewicz i Ireneuaz —wituazak, Warszawa 1993 Pnujekt okdadki: Artur J. Praczyk, Lynx-SFT* Redàkcja techniczna, korektà i skdàd: Zespóˆ wydawnictwa Lynx-SFT'* Redakcjà merytoryczna: Autorzy Druk ksiѾki i okdadki: Drukarnia A-Z Druk, Raazyn, ul. Lotnicza 5 tel. 56.06.55 Oprawà: Introligatornia Dariuaza Truazczyäshiego Raazyn-Rybie, ul. Cicha 45, tel. 23.69.37 Znaki towàrowe: Turbo Paacal* 7.0 jest znahiem towarowym firmy Borland Inc. ç USA i do niej nale¾Ñ wazel*ie prawa do tego produktu. NAZWY WSZYSTKICH FIRM I ICH PRODUKTY WYMIENIONE W NINIEJSZEJ PUBLIKACJI ZOSTA�Y U½YTE JEDYNIE W CELU IDENTYFIKACJI ! Adres korespondencyjny wydawnictwà: 02-642 Warazawa, ul. Maklakiewieza 11/44 tel. (0-22) 48.30.04 Adres biura: 02-088 Warazawa, ul. Batorego 16 p.l33 tel./fax (0-22) 25.61.22, fax (0-22) 49.07.21 Niniejaza kaiѾkajeat *II pozycjÑ wydawnictwa Lynx-SFT* WSTl*P —RODOWISKO...... MENU. FILE..... EDIT SEARGH RUN...... COMPILE... . DEBUG. TOOLS.. OPTIONS........ WINDOW HELP.... EDYâOR........ DYREKTYWY KOMPá*ATORA. Dyrektywy przeˆÑcznikowe. . . Dyrektywy parametryczne... Dyrektywy warunkowe. . . . . . . . Poçoataˆe dyrektywy warunkowe.... KOMPILATOR ZEWNl*TRZ Opcje odpowiadajÑce dyrektywom kompilatora... Opcje trybu praey kompilatora........ Opcje trybu pracy debuggera Opcje katalogowe....... Plik TPC.CFG. STRUKTURA PROGRAMU BLOKI... PROGRAMY MODU�Y ZALE½NO—GI MI*DZY MODU�AMI I PROGRAMEM. ELEMENTY PODSTAWOWE SYMBOLE PODSTAWOWE. IDENTYFIKATORY. . ù LICZBY. ETYKIETY �AãCUCHY... KOMENTARZE TYPY DANYCH ISBN 83-85455-33-7 TYP RZECZYWISTY.. TYP �AãCUCHOWY.. TYP PROCEDURALNY TYP WYLICZENIOWY TYP OKROJONY 108 109 110 110 111 TYP LOGICZNY .. ..111 TYP ZNAKOWY. ..112 TYP WSKAæNIKOWY. ..112 TYP TABLICOWY ..114 TYP REKORDOWY . .117 TYP OBIEKTOWY . .119 TYP ZBIOROWY ..122 TYP PLIKOWY ..122 ZGODNO—¥ TYPáW.... ..123 STA�E I ZMIENNE.... ..125 STA�E..... ..125 ZMIENNE ..126 STA�E INICJOWANE.. ..127 WYRA½ENIA..... ..131 OPERATORY ARYTMETYCZNE. ... .. . . .131 OPERATORY BITOWE ..131 OPERATORYLOGICZNE....... ..132 OPERATORY �AãCUCHOWE ..132 OPERATORYZNAKOWO-WSKAæNIKOWE ..132 OPERATORY MNOGO —CIOWE ..133 OPERATORY RELACYJNE.... ..133 OPERATOR WSKAZANIA... ..134 ZMIANA TYPU WYRA¾ENIA ..134 INSTRUKCJE.... 1R5 INSTRUKCJE PROSTE ..135 Instrukcja prçypisania. . . . .135 Instrukcja procedury.... . ..135 Instrukcja skoku. ..136 Instrukcja pusta.. ..136 INSTRUKCJE STRUKTURALNE.... ..137 Instrukcja zˆo¾ona ..137 Instrukcja warunkowa... ..141 Instrukcja iteracyjna. . . . . . . .145 Instrukcja wiѾÑca . .148 Instrukcja kodu. . . . .151 Instrukcj a asemblerowa. . .153 PROCEDURY I FUNKCJE.... ..154 Dyrektywa Near i Far.... ..1* Dyrektywa Interrupt...... ..1* Dyrektywa Forward. . . . . . . . l E Dyrektywa External... ... ..1; Dyrektywa Aasembler.... ..1* Dyrektywa Inline ..1* FUNKCJE .. l E PARAMETRY... ..1* PARAMETRY OTWARTE.. . .. IE MODUˆ.Y .. l E MODUˆ. SYSTEM .. lE STA�E INICdOWANE. .. lE ZMIENNE ..1 * PROCEDURY I FUNKCJE..... ..1 * Procedury sterujÑce wykonan.iem kodu ..1 * Funkcje przeksztaˆcenia typu... ..1 * Funkcje arytmetyczne.. .. . .1 i Procedury i funkcje porzÑdkowe ..1ä Proce�ury i funkeje ˆaäcuchowe ..1ä Proeedury wejŒcia i wyjŒcia..... . .. lt Dynamicznego przydziaˆu pami©ci....... .. 2E Funkcje wska«nikowe i adresowe........ .. 2C Inne procedury i funkcje .. 2E MODU� CRT.... . .. 2l STA�E... . .. 2* ZMIENNE . . 2 l PROCEDURY I FUNKCJE..... .. 2* MODU� PRINTER...... .. 2* MODU� DOS... .. 2* STA�E..... .. 2* ZMIENNE .. 2* TYPY.... ... .. 2* PROCEDURY I FUNKCJE.... .. 2* Procedury zwiÑzane z czasem... .. 2* Procedury obsˆugi przerwaä..... .. 2* Funkcje statusu dysków. .. 2* Funkcje i procedury obróbki plików..... .. 2* Procedury i funkcje çarzÑdzania katalogami. .. 2i Funkcje obróbki otoczenia procesora komend .. 2* Inne procedury i funkcje .. 2; MODU�WINDOS....... .. 2* STA�E..... .. 2ä 4 utvuui*i*u..... .. Typy", .. 238 PROCEDURY I FUNKCJE.. . .. 240 Procedury zwiÑzane z czaaem ... 240 Procedury obaˆugi przerwaä.. ... 243 Funkcje statuau dyaków ... 244 Funkcje i procedury obróbki plików.. .... 244 Procedury i funkcje zarçÑdzania katalogami... .......... 247 Funkcje obróbki otoczenia procesora komend... ........ 248 Inne procedury i funkcje.... .. ..... 249 MODU� STRING... ... .. .. 251 MODU� GRAPH....... ..... 257 STA�E... ..... 257 ZMIENNE....... ..... 266 Typy", .. 266 PROCEDURY I FUNKCJE GRAFICZNE.. ..... 268 MODU� OVERLAY.. ..... 300 STA�E... . .. 300 ZMIENNE... ... ..... 300 PROCEDURY I FUNKCJE OVERLAY... . .. .. 30* PROGRAMY NARZ*DZIOWE.. .... 305 TEMC - kompilator makrodefinieji edytora systemowego............. 305 STRUKTURA SKRYPTU.... ..... 305 DEKI.ARACJA MAKR . . . . . 306 DEKLARACJA KLAWISZY.. . . . . . 306 KOMENDY J*ZYKA TEML. . . .. . 307 TOUCH - program ustawiajÑcy dat© i czas zaˆo¾enia pliku........ .. 317 GREP - progranç wyszukiwania ciÑgów znaków.. ..... 317 PRZE�ñCZNIKI . . . . . 317 WYáA¾ENIA REGULARNE . .. 319 BINOBJ - program konweraji plików binarnych na pliki.OBJ...... 320 TPTJMOVER - program do aktualiçacji bibliotek ..... 321 NIAKE - program do kompilacji zˆo¾onych programów.. .. ... 321 OPCJE PROGRAMU MAKE . .... 322 TWORZENIE PLIKáW ftOBOCZYCH MAKE . . .. 328 KOMENTARZE ..... 323 REGU�Y JAWNE... . ... .. 324 REGU�Y NIEJAWNE ..... 325 LISTA POLECEã...... MAKRODEFINICJE.. ...... 328 DYREKTYWY . . . . .. 330 B�*DY WYKAZYWANE PRZEZ NIAKE . . . . . . 332 WYKAZ B�*DáW 335 6 vv* * *r J©çyk Turbo Paacal 7.0 jest przeznaczony dla tych wazygtkich, kt, chcÑ tworçy¹ aplikacje pracujÑce w Œrodowisku systemu operacyjç DOS. Jeat onjednym z najbardziej popularnychj©zyków programowa które*o zalety w zaacznynç stopniu poçwalajÑ na wykorzystanie gc nauki programowania. KsiѾka ta ma za çadanie zapoznaä u¾ytkowr ç elementami j©zyka Turbo Paacal 7.0 oraz przedstawi¹ çintegrow Œrodowiako pracy doat©pne dla programisty. J©çyk Turbo Paacal 7.0 jeat nast©pcÑ wersji Turbo Pascala 6.0, k1 zostaˆa wzbogacona o nowe mo¾liwoŒci. Najwa¾niejazÑ z nieh jest mc woŒ¹ praey w dwóch zintegrowanyeh Œrodowiskach pracy. Pierwaçe, typowym nast©pcÑ ‚rodowiska 7'urbo Pascala 6.0, zaŒ drugie jest pc bne wizualnie, ale pozwala na wykorzystanie przez to Œrodowisko paz ci extended. Poçà tym rozazerzono mo¾liwoŒci Œrodowiska o nast©pu= pozycje: / elementy programu, np. sˆowa kluczowe, identyfikatory, komei rze lub inne, mogÑ by¹ wyŒwietlane w ró¾nych kolorach, co çn; nie zwi©ksza cçytelnoŒ¹ programu; / obiekt ObjectBrowser, sˆu¾Ñcy do przeglÑdania wyat©pujÑcycl programie elementów, np. moduˆów lub obiektów oraz okreŒlaj ich budow© i wszelkie odwoˆania do tych elementów w progran / menu lokalne, pozwalajÑce na ustawienie odpowiednich par* trów Œrodowiska tylko dla danego okienka; / menu programów narz©*çiowych Tools, pozwalajÑce na doˆÑcze do menu gˆównego innych programów uaˆugowych, a naat©pnie wywoˆywanie ich beç wychodzenia z systemu oraz wyŒwietle komunikatów zwracanych przez te programy w specyalnym oki ku Measages; / doˆÑczenie do syatemu wˆasnych plików pomocy (help); / mo¾liwoŒ¹ wycofania ostatniej operaeji edytorskiej i grupy oper edytorskich (Undo), a nawet wykonanie cofni©cia wycofania ( do); / doˆÑczono nowe dyrektywy kompilatora poçwalajÑce na konti zmiennych waka«nikowych zwracanych prçez operator O {g generowanie kodu kontrolujÑcego wystÑpienie przepeˆnienia wyniku wykonania operacyi arytmetycznej {$Q}, u¾ycie ˆaäcuch Programowanie w Turbo Pascal T.0 otwartych ($P}, generowançe çnçormac*ç u*à **=Gã*æ * waer; Ponadto zwi©kaçono efektywnoŒä generowanego kodu. W stosunku do Turbo Pascala 6.0 w obecnej wersji j©zyka dodano nast©pujÑce pozycje: / parametry staˆe i otwartejako parametry formalne procedur i funkcji; / dyrektyw© Public, umo¾liwiajÑcÑ widocznoŒ¹ deklarowanego elementu obiektu poza moduˆem, w którym ten obiekt zoataˆ zadeklarowany; / sˆowo kluczowe Inherited, pozwalajÑee na wywoˆanie metody przodka bez podawania jego nazwy; / tablice metod dynamicznych pozwalajÑce w stoaunku do dotych- czas u¾ywanych tablic metod wirtualnych na zmniejazenie potrzeb- nej dla danego obiektu pami©ci; / moduˆ Strings dostarczajÑcy procedur i funkcji operujÑcych na zmiennych typu PChar, czyli ˆaäcuchach znaków zakoäczonych znakiem #0, których makaymalna dˆugoŒä wynosi 64 KB; / moduˆ WinDoa jest odpowiednikiem moduˆu Dos, ale wszystkie operacje wykonywane aÑ na ˆaäcuchach zakoäczonych znakiem #0. Dodano naat©pujÑce procedury i funkcje do moduˆu System: / Aaaigned / Break / Continue / Include / Exclude / High / Low oraz wzbogacono bibliotek© Turbo Vision o procedury kontroli danych i nowe obiekty. Wszystkie powy¾aze nowoŒci, poza bibliotekÑ Turbo Vision, zostaˆy opisane w tej publikacji. Pomini©cie Biblioteki Turbo Vision zoataˆo podyktowane zbyt obszernym tematem jak na tego rodzaju publikacj©. weraji j©zyka Turbo Paseal, jak i dla u¾ytkowników programujÑcyel innych j©zykach, którzy chcieliby zapozna¹ si© z mo¾liwoŒeiami obec weraji Turbo Pascala 7.0. Caˆy materiaˆ podzielony zoataˆ na rozdziaˆy opisujÑce Œrodowisko pr programiaty, j©zyk programowania, opis moduˆów atandardowych, F gramy narz©dziowe dostarczane ˆÑcznie z systemem oraz wykaz bˆ©¹ i tabel© znaków kodu ASCII. g P. Michaˆkiewicz, I. —wituszak Programowanie w Turbo Pascal 7.0 5 I'* V V V Vl/ I * I't V Po zainatalowaniu pakietu mamy mo¾liwoŒ¹ wyboru pracy w dve zintegrowanych Œrodowiskach pracy (Z—P). —rodowiaka te uruchamiane aÑ ç ró¾nych plików. Plik TURBO.ä powoduje uruchomienie Z—P w trybie rçeezywistym, które b©dzii nazywali „rodowiakiem TURBO, za„ plik TPX.EXE powoduje urw mienie Z—P w trybie chronionyçn (wirtualnym), okreŒlanymjako „r, wisko TPX. Nale¾y pami©ta¹, ¾e prçy pracy w trybie chronionym w katalogu którym znajduje ai© plik TPX.EXE, muazÑ by¹ umiesçezone * DPMll6BI.OVL i RTM.EXE. Czym rë¾ni* sig te Œrodowiska? Oprócz ró¾nicy w opcjach dost©pnych w tych Œrodowiskach zasadn ró¾nicÑ jest mo¾liwoŒ¹ adresaeji pami©ci. Mikroprocesory 8086 i & pozwalaˆy na adresowanie pami©ci operacyjnej do 1 MB, zaŒ nast© czyli mikroproceaory 80286, 80386 oraz 80486, pozwalajÑ na przekro nie tej granicy i adresowanie pami©ci operacyjnej do 16 MB dla 802 4 GB dla 80386, 80486. Mimo mo¾liwoŒci adreaowania wi©kszego obsç pami©ci, mikroproeeaory te atandardowo pracujÑ w trybie rçeczywiat czyli w trybie na„ladujÑcym tryb praey mikroproeesorów 8086 i 8I Poniewa¾ obazar pami©ci powy¾ej 1 MB nie jest doat©pny w tr; rzeczywiatym mikroproceaorów 80x86, a tylko w trybie chronionym, * w celu jego wykorzyatania atoauje ai© programy obslugi pami©ci roz rzonej, np. HIMEM.SYS. Aby udoat©pni¹ mo¾liwoŒ¹ tworzenia duç programów, „rodowisko TPX pracuje wˆaŒnie w trybie chronionym. Podezas uruchamiania dowolnego Œrodowiska mo¾emy u¾y¹ odpow nich parametrów. Nale¾y w takim wypadku uçy¹ nast©pujÑcej skˆ* polecenia: T U R Bo (/opeja)[nazwa pliku] lub TPX (/opcja)(nazwa pliku] P. Michaˆkiewicz, I. —wituszak gdzie parametr /opeja okreŒla apoaób uruchomienia Z—P, zaŒ nazwaku okreŒla nazw© programu, który cheemy umie„ci¹ w edytorze ay mowym. Znak + lub apacja po nazwie opeji powoduje jej wlÑczenie, znak - jej wyˆÑczenie. Programowanie w Turbo Pascal 7.0 Doat©pne aÑ nast©pu*Ñce opc*e: umozuwça oaçworzençe pa*ety kolorów w /Cnazwa*pliku - umo¾liwia podezas uruchomienia Z—P wezyta- cie EGA,gdy program u¾ytkownika spowt nie pliku konfiguraeyjnego,okx'eŒlonego przez jej zmian©. u¾ytkownika za pomoeÑ nazwa*pliku; mi©dzy - umo¾liwia zapami©tanie,po wyjŒciu z s literÑ C i ãàçwÑ pliku nie mo¾e wyatÑpi¹ od- mu,bie¾Ñcego katalogu,który at anie si© 1 at©p. logiem bie¾Ñcym po ponownym uruchomi syatemu; osiÑgni©cie tego efektu b©dzie çz - umo¾liwia rac Z—P tzw.dualn co oznacza, we dopiero po ustawieniu opeji Auto Sav ¾e ayatem mo¾e wapólpracowaä jednoczeŒnie z dwoma kartami graficznymi; je¾eli w ayatemie pola Deaktop. komputerowym nie wyst©pujÑ dwie karty,to /S - umo¾liwia,w przypadku braku pami©ci opeja ta zostanie zignorowana. expand.ed,okreŒlenie Œcie¾ki dost©pu do ol umo¾liwia zmian© rozmiaru sterty edytora i. ru wymiany,np.do RAM dyaku. jest d ost©pna tylko dla Œródowiska TURBO; - ˆaduje plik TUftBO.TPL w momeneie at atandardowo uatawionajeat wartoŒ¹ minimal- systemu; je¾eli opeja jest wyˆÑczona,to n* na 28KB; wartoŒ¹ makaymalna wynoai 128 za pomocÑ programu TPUMOVER wyodr© KB;parametrpoprawiawydajnoŒ¹,je¾eliprze- modul SYSTEM.TPU z biblioteki T twarzany plik znajduje ai© na dyaku twardynç. BO.TPL. - umo¾liwia zmian© rozmiaru pami©ci przezna- - umo¾liwia zmian© rozmiaru aterty prze czonej dla pliku wymiany obslugiwanego przez nej na okno i jeat doat©pna tylko zê¹ dla Œrod program RTM.EXE i est dost©pna tylko w ska TURBO; mo¾e ona zawieraä si© w gç Œrodowiaku TPX; wielkoŒ¹ tego pliku mo¾e za- cach od 24do 64KB,zaŒ atandardowo usta wiera¹ si© w granicach od 1024do 1638KB. najes t na wartoŒ¹ 32KB. - umo¾liwia zarezerwowanie 8KB pami©ei na - umo¾liwia zwi©kszenie wydajnoŒci Z—P p pami©¹ ekranu przy uruchomianiu programów umieszezenie kodu nakˆadek,danych ed5 pracujÑcych na kartach EGA,VGA i MCGA za nych i innych zaaobów ayatemu w pan* pomocÑ programu uruchomieniowego (ang.de- EMS; atandardowo jeat wlÑczona. bbuger). umo¾liwia zapami©tanie informaeji o ayn parametr powinien by¹ u¾yty podezas pracy z lach pomi©dzy kolejnymi kompilacjami. ekranem LCD. okreŒla,czy przy pracy z kartÑ CGA ma wystÑ- pi¹ Œnie¾enie. umo¾liwia zmian© ro«miaru aterty przeznaczo- nej na nakladki; mo¾e ona zawieraä ai© w granicach od 64do 256KB,zaŒ atandardowo uatawianajeat na wartoŒ¹ 112KB. 12 P. Michaˆkiewicz, I. —wituszak Programowanie w Turbo Pascal 7.0 ,vi c iv v Wmenu aystemu Turbo Paacal mo¾emy wyró¾ni¹ nast©pujÑce opcje: Edit, ùSearch, Run, Compile, Debug, Toola, Options, Window, Hel* celu przej„cia do linii menu nale¾y przycisnѹ klawisz . Po * wszym przyciŒni©ciu zoatanie podŒwietlona opcja File, zaŒ przy kolej* ostatnio podŒwietlona. Po pod„wietleniu interesujÑcej naa opeji naci my klawiaz , co apowoduje wyŒwietlenie komend dost©pnyi danej opcji. Innym aposobem dost©pu do komend danej opcji jes1 bezpoŒrednie wyŒwietlenie przez naciŒnigcie klawisza +pier* litera nazwy opcji. Niektóre ç komend majÑ mo¾liwoŒ¹ uruchomienia odpowiedniej kon dy, bez wywoˆywania menu, za pomocÑ odpowiedniej kombinacji kL szy. Klawisze te sÑ umieazezone z prawej strony nazwy komendy w o* menu. Cz©Œ¹ nazw komend zakoäcçona jest trzema kropeczkami, co ozna ¾e po wybraniu danej komendy zoatanie wyŒwietlone dodatkowe okie* sˆu¾Ñce do wyŒwietlenia lub wpiaania dodatkowych danych. Stt ardowymi przyciskami dost©pnymi w takich okienkach aÑ prçyciski Cancel - odwoˆanie komendy i powrót do aktywç okienka edycyjnego. Help - wyŒwietlenie dodatkowych informacji doty* cych u¾ytkowania okienka. Pozoataˆe przyciaki doat©pne w poazczególnych okienkach sÑ przed wione w opisie komend wyŒwietlajÑcych dane okienka. Niektóre z komend dotyczÑ tylko Œrodowiska TPX lub Turbo i oznacz sÑ w opisie menu napiaem "tylko TPX" lub "tylko Turbo". 76 P. Michaˆkiewicz, I. —wituszak Oprócz menu opiaanego wy¾ej mamy mo¾liwoŒ¹ uruchomienia mt lokalnego dla bie¾Ñcego okienka. Jakie komendy wyst©pujÑ w tym mt zale¾y od danego okienka, ale nale¾y pami©ta¹, ¾e ka¾de wywoˆa komendy z menu lokalnego oddziaˆywuje tylko na okienko, do któr nale¾y dane menu lokalne. Menu lokalne wywoˆujemy çà pomocÑ kla szy + lub prçez klikni©cie okienka prawym prçyciski myazki. Programowanie w Turbo Pascal 7.0 FILE Komenda ta powoduje otwarcie nowego okienka edycyjn‚go o nazwie NONAMExx.PAS. Znaki xx oznaczajÑ liczb© caˆkowitÑ ç zakresu od 0 do 99. Ka¾de kolejno otwarte ohno ma t© wartoŒ¹ zwi©hszonÑ ojeden. Nazwa tajestjednocze„nie tymezasowÑ nazwÑ pliku edytowanego w tynç ohienhu. W momencie zapisywania tego pliku na dysk system wyŒwietli okienko dialogowe, w którym b©dziemy mogli poda¹ wˆaŒciwÑ nazw©, pod którÑ plih zostanie zapisany. F3 âlãàã Komenda ta wcçytuje plik do nowego ok.ienka edycyjnego lub do okienka aktywnego, po usuni©ciu çnajdujÑcego ai© w nim pliku. Po wybraniu tej komendy aystem wyŒwietla okienko dialogowe o nazwie "Open a File", htóre umo¾liwia nast©pujÑce operaeje: O*en - wcçytanie wybranego pliku do nowego okienha edycyjnego. Replace - wcçytanie wybranego pliku do aktywnego okienka po usuni©ciu znajdujÑcego si© w nim pliku. Komenda çapiauje na dysku plik z aktywnego okienka edycyjnego. Je: plik w aktywnynç okienku ma standardowÑ nazw© NONANIExx.PAS zoatanie wyŒwietlone okienko dialogowe, jakie jest wyŒwietlane po * braniu opcji Save as... Save as. . . Komenda pozwala na zmian© nazwy pliku z ahtywnego okienha pr; jego zapisaniem na dysku. Po jej wybraniu jest wy„wietlane okieç dialogowe o nazwie "Saue File As", w którym mo¾emy oprócz zmi* nazwy pliku zmieni¹ tak¾e nazw© atacji oraç katalogu. RYSUNEK 4 Je¾eli na dyaku iatnieje ju¾ plik o podanej nazwie, to jego rozszerzeç çoatanie zmienione na BAK. Po wybraniu prçyciaku OK zoatanie wyl nany zapia pliku zgodnie z ustawionynçi w okienhu wartoŒciami. Save all Komenda powoduje zapisanie na dyaku wszystkich plihów z wszystki okieneh edycyjnych, htóre ulegˆy modyfihacji od ostatniego zapiaania i na dysku. HYS UNEK 3 18 P. Michaˆkiewicz, I. —wituszak Programowanie w Turbo Pascal 7.0 Ii Change dir Komenda pozwala na zmian© bie¾Ñcego katalogçç oraz stacji. Po jej wybraniu zostanie wyŒwietlone okienko dialogowe o nazwie "Change I)irectory", w którym mo¾emy dokona¹ zmiany zarówno katalogu, jak i stacji. Wybranie komendy powoduje wy„wietlenie na ekranie okien ka dial wego o nazwie "Printer Setup". RYSUNEK 6 RYSUNEK 5 W okienku mo¾liwe sÑ nast©pujÑce operacje: OK - zaakceptowanie ustawionych w okienku wartoŒci. Chdir - wy*wietlenie wszystkich podkatalogów dla katalogu, który jest aktualnie wybrany. Revert - przywrócenie poprzedniej çawarto‚ci o*ienka dialoù gowego. Print Komenda pozwala na wydrukowanie pliku znajdujÑcego si© w aktywnyn* ohienku edycyjnym zgodnie z parametrami ustawionymi w Printer se* tup. 20 P. Michaˆkiewicz, I. —wituszak W polu Filter Path mo¾emy okreŒli¹ Œcie¾k© dost©pu do filtru druka którym atandardowo jest plik PRNFLTR. Pole Command Line okrf parametry linii komendy dla drukarki i domy*lnie ustawione jest wartoŒ¹ $NOSWAP/EPSON. Pole ostatnie okreŒla, czy Z—P zawi sekwenc*© kodów pozwalajÑcych na wydruk typu bold, italic czy un¹ line. Komenda Printer setup pozwala na okreŒlenie nast©pujÑcych dzÑjów drukarek: Epson, HP LaserJet i PostScript przez naat©puj linie komend: standardowo - $NOSWAä'/ASCII Epson - $NOSWAP/EPSON HP LaserJet - $NOSWAP/HP PostScript - * $NOSWAP/PS oraz na okreŒlenie nast©pujÑcych opc*i dodatkowych: - - liczba linii na stron© (standardowo 55) Programowanie w Turbo Pascal 7.0 /O[nazwa*pliku] - plik lub urzÑdzenie wyjŒciowe,do kt,órego na- Komenda ta pozwala na cofnigcie ostatnio wykonanej operacji Undo : atÑpi wydruk (standardowo LPTl) efektywna bezpoŒrednio po Undo. Cut przeç niÑ akceptowane. *à rv*wà*à **à uåu****c*G z nxLyWêegO oxçenxa eaycy*nego za cçonego bloku tekatu i umieazezenie go w buforze Clipboard.Tekst z DOS shell bufora mo¾emy weçyta¹ w inne miejsca w tekŒeie,w dowolnym okie edyeyjnyçn,za pomocÑ komendy Paste. Komenda pozwala na tymezasowe opuszezenie Z—Pj©çyka Turbo Paseal i przejŒcie do ayatemu DOS,wykonanie komendy DOS i powrót do Z—P. CopY Ctrl+Ins Powrót nast©puje po wydaniu komendy EXIT w syatemie DOS. Komenda pozwala na skopiowanie z aktywnego okienka edyeyjz Alt+X z*naczonego bloku tekstu i umieszezenie go w buforze Clipboard.Tt Exit z tego bufora mo¾emy wezyta¹ w inne miejsca w tekŒcie,w dowolç Komenda powoduje çakoäezenie pracy w Z—P jgzyka Turbo Pascal okienku edycyjnym,za pomocÑ komendy Paste. i przejŒcie do ayatemu DOS.W przypadku gdy plik po oatatniej modyfç- Paste kacji nie zostaˆ zapiaany na dysku,to przed çakoäezeniem pracy system Shih+Ins zapyta aig,czy go zapisa¹.Po wybraniu zapisu na ekranie pojawi si© Komenda pozwala na akopiowanie tekatu znajdujÑcego sig w bufc okienko dialogowe "Save File As". Clipboard do aktywnego okienka edycyjnego.Kopiowny tekstjeat un azezany w tym okienku,zaezynajÑc od aktualnego poˆo¾enia kursor* E D IT Clear Ctrl + Del Undo Alt+BackSpace Komenda pozwala na usuni©eie z aktywnego okienka edycyjnego çaz: Komenda pozwala na cofnigcie ostatnio wykonanej operacji edycyjnej, Clipboard ku tekstu.Usunigty tekst nie çoatanie umieszeçony w bufo Powtórne jej u¾ycie powoduje,¾e edytor bgdzie kontynuowa¹ cofanie poprzednich operacji edycyjnych.Undo wstawia dowolne znaki,które ù Show clipboard skaaowaˆeŒ,kaauje çnaki,które wstawiˆeŒ,odtwarza te,które zostaˆy nadpisane oraz ustawia kursor w poprzednim miejscu.Mo¾liwe jest Komenda powoduje wyŒwietlenie okienka z zawartoŒciÑ bufora Clipl tak¾e eofnigcie operacji wykonanej na bloku tekstu. *'d.Ostatni blok któr zostaˆ umieazezony w tym buforze,jeat wyn niony.W okienku tym mo¾emy dokonywa¹ operacji edytorshich,pod, Po ustawieniu o cji Group Undo w okienku dialogowym "Editor Op* nie jak w normalnych okienkach ed c *n ch. tiona",które jeat dostgpne po wybraniu komendy Options I Environ* ment I Editor,mo¾emy wykonywa¹ tzw.cofni©eia grupowe.Mo¾emy wyù * ` SEARCH I ' nie odrgbni¹ naatgpujÑce grupy komend edycyjnych: wstawçançe,kasowa * n mie sca kursora.Oznacza to ¾e w isan ciÑg I ii ij'" nadpiaywanie,zmia a j Find... znaków mo¾e zoata¹ anulowanyjednÑ komendÑ Undo,a nie po kolejnym anulowaniupojedynezychznaków. *,;j Komenda pozwala na wyazukanie w tekŒcie znajdujÑeym si© w akty nynç okienku edycyjnym okreŒlonego ciÑgu çnaków.Po wybraniu kome d na e y krançe wyŒwietlane jest okienko dialogowe "Find",w który 22 P.Michaˆkiewicz,I.—wituszak Programowanie w Turbo Pascal 7.0 r ~ r - rametrów wyszukiwania. Je¾eli w chwili wywolania komendy kursor umieazczony byˆ na dãwolnym sˆowie w tekŒcie, slowo to çostanie wyŒwietlone w polu 'Text to Find'. W pole to wpiaujemy szukany ciÑg znaków. W okienku "Find" mo¾em okreŒli¹ nast©pujÑce grupy parametrów wyazukiwania zadanego ciÑgçç: 1. Optiona - pozwala na wˆÑczenie lub wylÑczenie nast©pujÑcych opcji: êç ouivzn i ù Casesenaitiue - wˆÑczenie powoduje rozró¾nianie du* ¾ych i malych liter. * Whole worda only - wlÑczenie powoduje, ¾e podczaa wyszukiwania brane b©dÑ pod uwag© tylko sˆowa, to jest ciÑgi znaków ograniczona , apacjami lub znakami interpunkcyjny* mi. ù ftegular expreasion - wlÑczenie powoduje, ¾e podczaa wyszu* j*, ;* kiwania rozpoznawane aÑ tak zwane * * znaki uniwersalne: ^,$,.,*,+,(),\. 24 P. Michaˆkiewicz, I. —wituszak jrvu n ài* ii* VäJI;J Vllëlêá Wy/*rajlçe kçerunku szukt od miejaea okreŒlonego w opcji Origin: * Forward - w kierunku koäca pliku. ' Backward - w kierunku poczÑtku pliku. 3. Scope - pozwala na opcjonalne wybranie zakresu poszuki nia: ù Global - przeszukiwanie caˆego pliku. ' Selected text - przeazukiwanie zaznaczonego bloku kstu. 4. Origin - pozwala na opcjonalne wybranie poczÑtku, od kt„ go nastÑpi wyszukiwanie: ù From curaor - od bie¾Ñcej pozycji kuraora. ù Entire scope - w calym tekŒcie lub zaznaczonym b ku. Replace. . . Komenda pozwala na wyazukanie w tekŒcie znajdujÑcym si© w akty nym okienku edycyjnym okreŒlonego ciÑgu znaków i zamian© go na in: ciÑgznaków. Po wybraniu komendy na ekranie wyŒwietlanejest okien dialogowe "Replace", w którym wpisujemy azukany oraz nowy ci znaków oraz mamy mo¾liwoŒ¹ uatawienia parametrów wyszukiwania ê * * viv*n * ù Programowanie w Turbo Pascal 7.0 2; ¾ Je¾eli w chwili wywoˆania komendy *uraor umçGrr****==.r *.r nym sˆowie w tekŒcie aˆowo to zostanie wyŒwietlone w polu 'Text to Find'. W ole to wpisujemy azukany ciÑg zn*ów. W pole 'New text' wpisujemy nowy ciÑg znaków, który ma zastÑpiä wyszukiwany. Przycisk OK roçpo- yna wyazukiwanie pierwazego wyatÑpienia zadanego ciÑgu znaków, przycisk Change all wyazukuje wazystkie wyatÑpienia zadanego ciÑ* znaków, zaŒ przy<*ak Cancel anuluje wykonanie komendy. W okienku "Replac‚ ' mo¾emy okreŒli¹ pat'ametry wyszukiwania zada- nego ciÑgu znaków, takie aamejak w okienku komendy Find. Dodatkowo w Optiona wyst©puje opcja Prompt on replace, która po wˆÑczeniu powoduje po ka¾dym wyazukaniu szukanego ciÑgu znaków wyŒwietlenie zapytania potwierdzajÑcego wymian© jednego ciÑgu znaków na dru*. H. Y* UN*x y Search again Komenda powoduje powtórçenie ostatnio wykonanej komendy Find lub Replace, pami©ta parametry uatawione w tych komendach. Go to line number... Komenda pozwala na przejŒeie do okreŒlonego wiersza tekatu znajduj cego ai© w aktywnym okienku edycyjnym. Po wybraniu komendy RYSU N Ef* 10 26 P. Michaˆkiewicz, I. —wituszak wyŒw‹etlone zostanie okienko dialogowe "Go to Line Number', wpisujemy numer azukanego wiersza. Show last compiler error Programowanie w Turbo Pascal 7.0 Komenda wyŒwietla oatatni komunikat o bˆ©dzie, który zdarzyˆ si* czaaie ostatniej kompilacji, umieszczajÑc kursor w okolicach tego bˆ© Finc1 error Komenda wyŒwietla ohienko dialogowe "Find Error ', za pomocÑ którego mo¾esz zlokalizowaä miejsce, w któç'ym wys*piˆ bˆÑd uruchomienia. PracujÑc w obydwóch Œrodowiskach Turbo Pascala, bˆÑd uruchomienia powoduje, ¾e kursor automatycçnie zostanie uatawiony w miejscu jego wystÑpienia. Przy bˆ©dzie powstaˆym podczas pracy w systemie DOS nale¾y çapami©taä zwracany przez DOS adres wystÑpienia tego bˆ©du i wykorzystaä okienko "Find Error', w celu znalezieniajego wystÑpienia. Adres wpisywany w okienku ma format Seg:Ofs, gdzie Seg okreŒla adres segmentu, zaŒ Ofs przesuni©cie wzgl©dem poczÑtku segmentu i jest. okreŒlony w postaci szesnastkowej. Przy korzystaniu ç tej komendy musi byä wˆÑczona opcja Integrated w komendzie Option I Debuger. Find orocedure... Komenda pozwala na odszukanie definicji procedury lub funkcji w aktywnym okienku edycyjnynç. Wybranie komendy powoduje wyŒwietlenie okienka dialogowego "Find Procedure", w którynç wpisujemy nazw© szukanej procedury lub funkcji. Komenda jest dost©pna po uruchomieniu programu lub podczas jego krokowego uruchamiania. tt YJ UNGn Iz iyircu Komenda powoduje wyŒwietlenie oatatniego okienka u¾ywanego po¹ przeglÑdania obiektów, moduˆów, symboli wyst©pujÑcych w progr; za pomocÑ obiektu ObjectBrowser. Obiekt ten aktywowanyjest za pi cÑ komend Objects, Units, Globals i Symbol dost©pnych w menu Se* Objects tylko TPX Komenda powoduje wyŒwietlenie okienka "Brnwse:Object", wyŒwiet cego liat© obiektów wyst©pujÑcych w programie oraz przedstawia z; noŒci mi©dzy nimi na çasadzie drzewa. Je¾eli drzewo jest mocno ro ˆ©zione i mamy trudnoŒci w jego analizie, to mo¾emy wyˆÑezy¹ wyŒ* lanie potomków danego obiektu za pomocÑ klawisza <->, zaŒ wˆ* ponownie klawiszem <+>. Aby wykona¹ t© operacj© za pomocÑ çay; nale¾y kliknÑä na lini© dochodzÑcÑ z lewej strony do nazwy obiektu ChcÑc dowiedçieä si© co dany obiekt çawiera, nale¾y go wyró: i nacisnÑä klawiaz mo¾emy wyŒwietli¹ okienko za rajÑce list© odwoˆaä do danego elementu w programie. W okienkach mamy mo¾liwoŒ¹ wyboru, o ile aktualnie b©dÑ dost©; opeji S, I, R przez klikni©cie na nich myszkÑ lub çà pomocÑ klaw odpowiednio , i . Opcje te oznaczajÑ: - wyŒwietlenie zawartoŒci obiektu. - wyŒwietlenie drçewa, ç które*o pochodzi d obiekt. R - wyŒwietlenie listy odwoˆaä do danego eleçz tu w programie. Prçed u¾yciem tej komendy program musi zosta¹ skompilowany * ustawionych wszystkich opcjach pola Debugging w menu Option I C piler. Units tylko TPX Komenda powoduje wyŒwietlenie okienka "Browse:Units" wyŒwietl cego list© moduˆów, z których korçysta program. 2g P. Michaˆkiewicz, l. —wituszak Programowanie w Turbo Pascal 7.0 RYSUNEK 13 ChcÑc dowiedzie¹ si© co dany modul zawiera, nale¾y go wyró¾ni‚ i nacisnѹ klawisç lub wykona¹ podwójne klikni©cie myszkÑ na tym module. Wynikiem tej operacji b©dzie okienko zawierajÑce list© wszyatkich aymboli wyat©pujÑcych w danym module. Identyfikatory symboli poprzedzone sÑ ieh okreŒleniami: type - identyfikator typu eonst - stala zmienna lub stala inicjowana func - funkeja proc ù procedura Przez wybranie elementu z tej listy i wciŒni©cie klawisza , i . Opcje te oznaezajÑ: - wy„wietlenie zawartoŒci obiektu. tt Y J UNLùK 14 Globals tylko TPX Komenda powoduje wyŒwietlenie okienka "Browse Globals", wyŒw lajÑcego liat© aymboli wyat©pujÑcych w programie. Poprzez wyró¾nit i naciŒni©cie klawisza lub podwójne klikni©cie myazkÑ interf jÑcego nas elementu mo¾emy uzyska¹ o nim dokˆadniejsze dane, je jeat on elementem zˆo¾onym, np. rekord lub liat© odwolaä do dan elementu w programie. W okienkach mamy mo¾liwoŒ¹, o ile aktual b©dÑ dost©pne, wyboru opeji S, I, R przez klikni©cie na nich myszkÑ za pomocÑ klawiszy odpowiednio , i . O1 te oznaczajÑ: - vryŒwietlenie drzewa, z którego pochodzi dany obiekt. - wyŒwietlenie listy odwolaä do danego elemen* tu w programie. - wyŒwietlenie zawartoŒei obiektu. - wyŒwietlenie drzewa, z którego pochodzi d* obiekt. - wyŒwietlenie liaty odwolaä do danego elem, tu w progrançie. 30 P. Michaˆkiewicz, I. —wituszak ù Programowanie w Turbo Pascal 7.0 ; r=*slà* *u** zuscac sxompç*owany uatawionych wszystkich opejach pola Debugging w menu Option I i piler. rrzea uzycçem uG* n** uatawionych wazyatkich opcjach pola Debugging w menu Option I Compiler. Cvmhnl. . * tylko TPX Komenda powoduje wyŒwietlenie okienka "Browse Symbol", za pomocÑ którego mo¾emy wyszuka¹ odwoˆania w programie do okreŒlonego synçb i** H Y5 UNätt ! 5 Jeçeli kursor zostal ustawiony na intereaujÑcym nas symbolu w edytArze, to po wywoˆaniu tej komendy symbol ten zostanie wstawiony do lin� edycyjnej okienka "Browae Symbol". W okienkach mamy mo¾liwoŒ¹, o ile aktualnie b©dÑ dost©pne, wyboru opcji S, I, ft przez klikni©cie na nieb myszkÑ lub za pomocÑ klawiszy odpowiednio , i . Opcje te oznaczajÑ: - wyŒwietlenie zawartoŒci obiektu. - wyŒwietlenie drzewa, z którego pochodzi dany obiekt. - wyŒwietlenie listy odwolaçi do danego elemen* tu w programie. Przed u¾yciem tej komendy program musi zosta¹ skompilowany przy ustawionych wszystkich opcjach pola Debugging w menu Option I Com piler. Run Ctrl+F9 Komenda uruchamia program znajdujÑcy ai© w aktywnym o*e edycyjnym. Za pomocÑ komendy Parameters mo¾emy przekaça, uruchamianego programu parametry. W przypadku gdy od ostatn uruchomienia program zoataˆ zmodyfikowany, to automatycznie ze nie wykonana kompilacja. Step over F8 Komenda pozwala na krokowe uruchomienie programu, to znaczy, ¾* wybraniu tej komendy zostanie wykonana jedna instrukcja progra* Gdy wykonywanÑ inatrukcjÑ jest wywoˆanie procedury, to procedur; jeat traktowana jako pojedyncza inatrukcja i zoatanie wykonan* je*ym kroku. Trace into F7 , Komenda pozwala na krokowe uruchomienie programu, to znaczy, ¾e wybraniu tej komendy zoatanie wykonana jedna instrukcja progran Gdy wykonywanÑ ina*k*Ñjeat wywoˆanie procedury, to naatÑpi pr* „cie do jej pierwszej inatrukcji. Procedura nie jest traktowana j* pojedyncza instrukcja i zostanie wykonana w aekwencji kroków. Go to cursor F4 Komenda powoduje wykonanie programu a¾ do miejsca w okien: edycyjnym, w którym znajduje ai© kuraor. Je¾eli kursor znajduje si© lin�, w której nie wyat©puje ¾adna inatrukcja, to zostanie wyŒwietlo: komunikat. Punktem rozpocz©cia wykonywania programu mó¾e 15 miejace oatatniego zatrzymania je_go praey, zaŒ punktem zakoäczen uatawiony punkt przerwania. Program reset Ctrl + F2 Komenda powoduje zakoäczenie bie¾Ñcej aesji debuggera çjednoczesny , zwolnieniem przydzielonej pami©ci oraz z zamkni©ciem otwartych przi progranç plików. ' P M* h ˆk* *c I —wituszak 32 ic a iewi z, . Programowanie w Turbo Pascal 7.0 Parameters... Komenda wyŒwietla okienko "Program Parameters", w którym wpiauje. my parametry przeayˆane do programu w chwili jego uruchomienia. W systemie DOS parametry te w chwili wywoˆywania programu sÑ umie sçczane po jego nazwie. Komenda wykonuje kompilacj© wszyatkich plików zwiÑzanych z k lowanym programem podstawowym, które ulegˆy modyfikaeji od niej kompilacji, tworzÑc plik wynikowy.EXE lub moduˆ.TPU. Je¾ pomocÑ komendy Compile I Primary file çostaˆ okreŒlony plik pods wy, to zoat,anie on akompilowany; w prçeciwnym wypadku jakc podatawowy traktowanyjest plik z aktywnego okienka edycyjnego Build Komenda wykonuje kompilacy© wazystkich plików zwiÑçanych z kc lowanym programem podstawowym, niezale¾nie od tego cçy ulegˆ* modyfikacyi od oat,atniej kompilacji, cçy te¾ nie, tworzÑc plik wynil .EXE lub moduˆ.TPU. Destination Disk tvlko Turbo Komenda aˆu¾y do okreŒlenia docelowego miejsca umieazcçenia F wynikowego powŒ*aˆego w wyniku kompilac*i. Je¾eli ustawimy parai Disk, to plik wynikowy çostanie zapiaany na dyaku, zaŒ gdy usta* parametr Memory, to plik wynikowy zapami©tywany jest w pami traeony po opuszcçeniu aystemu Turbo Paacal. Wybrany parametr wyŒwietlany obok nazwy komendy w menu. RYSUNEK 16 COMPILE Compile Alt+ F9 Komenda wykonuje kompilac*© programu çnajdujÑcego si© w aktywnyt okienku edycyjnym. Podczas tego procesu na ekranie wyŒwietlane jes okienko, które informuje nas o stupniu zaawanaowania kompilacji ora jej reçultaeie. Po zakoäcçeniu kompilacji okienko to nale¾y usunÑi naciskajÑc dowolny klawiaç. Komunikat o ewentualnym bˆ©dçie zosta* wyŒwietlony u góry ekranu. W çale¾noŒci od ustawienia parametru* komendzie Compile I Destination plik wynikowy.EXE b©dzie zapisyw* ny na dysku lub w pami©ci operacyjnej. W przypadku kompilacji na dyŒ plik b©dzie zapami©tany w tym samym katalogu co plik «ródˆowy lub* katalogu, który zostaˆ okreŒlony za pomocÑ komendy Compile I Direcb ries. 34 P. Michaˆkiewicz, I. —wituszak Primary file... Komenda sˆu¾y do ustawienia t,ak zwanego pliku podstawowego, k, jako pierwsçy zostanie akompilowany w wyniku wykonania kome: Make lub Build. Plik ten okreŒlamy w okienku dialogowym "prim File"; ajego nazwa çoatanie wyŒwietlona obok naçwy komendy w me Programowanie w Turbo Pascal 7.0 Komenda powoduje wy„wietlenie okienka "Infornçation", w któryçz stem informuje o przel5iegu ostatniej kompilacji. DEBUG Breakpoints... Komenda powoduje wy„wietlenie okienka dialogowego "Breakpoir sˆu¾Ñcego do ustawiania, kasowania oraç poprawiania punktów p rwania wykonywanego programu. Rv* IINEK 17 tt Y,5 UNLK ly Clear primary file zostaˆ ustawiony za pomocÑ komendy Compile I Primary hle. 36 P. Michaˆkiewicz, I. .—wituszak W okienku tym umieazczone jest podokienko, w którym wypisant wszystkie ustawione punkty przerwania. W okienku mo¾emy wyl nast©pujÑce przyciski: OK - zatwierdzenie ustawionych punktów przerwa i zamkni©cie okieççka. Delete - usuni©cie punktu przerwania wyró¾nionego na li‚ r--. - -- -- r- r -- ---r- ---ny jest wyró¾niony na liŒcie punkt przerwania. Clear all - kasuje wszystkie ustawione punkty przerwania. Programowanie w Turbo Pascal 7.0 Edit - powoduje wyŒwietlenie kolejnego okienka dialogowego "Edit Breakpoint", w którym mo¾emy ustawi¹ nowy lub zmodyfikowa¹ wyró¾niony na liŒcie w poprzednim okienku punkt przerwania; w polu Condition okreŒlamy warunek, po speˆnieniu którego ma wystÑpiä w danyçn punkcie programu prçerwanie, zaŒ w polu Pass count wpisujemy liezb© okreŒlajÑcÑ ile raçy dany punkt przerwania ma by¹ pomini©ty, aby takie przerwanie çaszˆo; pole File name i Line number okreŒlajÑ nazw© pliku i numer wiersza dla danego punktu przerwania; przycisk Modify sˆu¾y do modyfikacji, zaŒ przycisk New do ustawienia nowego punktu przerwania. RYSU NEl*21 Aktualnie wywoˆana procedura lub funkcja wyŒwietlana jest u okienka, zaŒ sˆowo PROGRAM lub nazwa programu umieszczon sˆowie program w kodzie «ródˆowym u doˆu okienka. Ka¾da procei lub funkcjajest wyŒwietlana razem z wartoŒciami parametrów wyvr nia. Register Komenda wyŒwietla okiexçko "CPU" i uaktywnia je. W okienku çno¾emy obserwowa¹ wartnŒci rejeatrów i flag. içi uvi*zii *v Call stack Ctrl+ F3 Komenda powoduje otwarcie okienka "Call stack", za pomocÑ które* mo¾emy çobaczy¹ sekwencj© wywoˆaä procedur lub funkcji, a¾ do osi* ni©cia procedury lub funkcji bie¾Ñcej podcças u¾ywania komendy Run I Trace into. 38 P. M*chaˆkiewicz, I. —wituszak Watch Komenda wyŒwietla okienko "Watches", którego zadaniemjest wyŒ* lenie wartoŒci ustawionych w nim wyra¾eä po ka¾dym uruchomie programu i ustawiajejako aktywne. Programowanie w Turbo Pascal 7.0 RYSUNEK22 Uruchomienie mo¾e by¹ tak¾e wykonane za pomocÑ komend St,ep over i Trace int,o z menu ftun. KorzystajÑc z tych komend mo¾emy Œledzi¹ , çmiany wartoŒci ustawionych w o*ienku wyra¾eä. *ç. r * vivzn z* 40 P. Michaˆkiewicz, I. —wituszak ':;crç; RYSUNEK24 Output Komenda wy„wietla okienko "Output" i ustawiajejako aktywne. Oki ko pozwala na podglÑd ekranu wyjŒciowego dla uruchamianego pro* mu w ramach çintegrowanego „rodowiska pracy. Mimo ¾e okienk* wyglÑda jak oliienko edycyjne, to nie mo¾na na nim wykona¹ ¾ad operacji edycyjnej. User screen Alt+F5 Komenda poçwàlà ãà podglÑd caˆego ehranu wyjŒciowego dla uruel mianego programu. Aby powróci¹ do zint,egrowanego Œrodowiska pra nale¾y nacianѹ dowolny hlawisz hlawiatury lub mysç*i. Evaluate/modify... Ctrl+F4 Komenda wyŒwietla oliienko "Evaluate and Modify ', którego zadanie jest wyŒwietlenie wartoŒci us*wionych w nim çmiennych lub wyra¾e a *¾e umo¾liwia nadanie nowych wartoŒci okreŒlonej zmiennej. Programowanie w Turbo Pascal 7.0 RYSUNEK25 t*Y SUNEK26 W przypadku gdy p u my w*d **nie *n umie* ne p )* W przypad entyfikatorze lub ku gdy pracujemy w ed to rze i kursor ustawiony jest *=u =**ou**.*à æv*vc4æwà *v ew vaiue mozemy poaczas uruchamianiç *' ""***llc w potu ed* p d E * iennej nowÑ wartoŒ¹.W okienku mo¾emy wybra¹ nast©pujÑà * * Add breakpoint... II Evaluate - powodu e obliczenie i wyŒwietleni * Komenda powoduje wyŒwi J e warto‚ci ustawia ' aˆu¾Ñcego do d etlenie ohienka dialogowego "Add Break* nych w polu Expression. int ' odania i modyfikacji punktów przerwania wykon w*ego programu,które wyŒwietlane s w Modify - ohre„la nowÑ warto„¹ dla zmiennej ustawionej w poh *kienko to wyglÑdem odpowi o*e*u Breakpointç Expression. otrzymujemypo wybr ada okienku "Edit Breakpoint",któ hu wyst©pujÑ na *lu opcji Edit w okienku "Breakpoint,s".W okie: st©pujÑce pola: Add watch... Ctrl+F7 Condition o speˆnieniu którego ma wyst - okreŒla warunek,p Komenda wyŒwietla okienko "Add Watch ',za pomocÑ którego mo¾e* *a :Œ w danym pun**e programu przerwanie. Ñp wpisaä do okienka "Watches" wyra¾enie lub nazw© çmiennej,któã ù *rç*id-; pass _ warto„¹ ma zostaä wypisana w ohienku "Watches" podczas uruchomieni count wpisujemy liczb© okreŒlajÑcÑ ile razy dany punk programu. z zˆ a ma by¹ pomini©ty,aby takie przerwani, a* File name, - okreŒlajÑ n*w© Z.ine number punktu przerw*pliku i numer wiersza dla daneg* :IR* *!l ; * az nast©pujÑce przycçs*; 42 P.Michaˆkiewicz,I.—wituszak Programowanie w Turbo Pascal 7.0 43 iviomçy New TOOLS Messages powoduje uatawienia nowego punktu przerwania. Komenda powoduje wyŒwietlenie okienka "Messagea", aˆu¾Ñcego do wy. Œwietlania komunikatów zwracanych przez programy zewn©trzne, np, program Grep. wiednio opiaanym wy¾ej klawiazom Ctrl+Ente epacji. Go to next Alt+ F8 Komenda po jej pierwszym wybraniu powoduje prçejŒcie do naat pozycji w liatach wyŒwietlanych przez okienka Messages i Browst P*y ka¾dym nast©pnym wyborze t,ej komendy zostanie wy szukan lejne wystÑpienie okreŒlonego w liŒcie symbolu w tekŒcie «ródˆo programu. Wyazukiwanie odbywa ai© w kierunku koäca programu Go to previous Alt+F7 Komenda po jej pierwszym wybraniu powoduje przejŒcie do poprze¹ pozycyi w listach wy y P*y ka¾dym nast©pnymtl ch rzez okienka Mesaa ea i Browse, lejne wystÑPieni wyborze tej komendy zoatanie wyazukane e okreŒlonego w liŒcie symbolu w tekŒcie «ródˆov programu. Wyazukiwanie odbywa ai© w kierunku poczÑtku progran Grep ù Shift+F2 Komen¹la powoduje wywoˆanie programu narz©dziowego Grep, k*ry* doatarczany razem z j©zykiem Turbo Paacal. Jeat on opiaany w rozdzi "Programy narzgdziowe". RY— UN*K 27 Doat©pne aÑ naat©pujÑce komendy: Ctrl+Enter - powoduje przejŒcie do tekatu «ródˆowego oraz * mkni©cie okienka Meaaagea, je¾eli opcja Cloae on g to aource w menu Options I Enviro- nment I Prefer* ces jeat wˆÑczona. Space * - powoduje pod*wietlenie wieraza w tekŒci (klawiaz apac*i) «ródˆowym programu, który zawiera aymbol ç ahb alnie wybranej linii komunikatów okienka Messa* Alt+F10 - powoduje wyŒwietlenie menu lokalnego dla okie* Mesaagea, gdzie Clear powoduje wyczyszeçefl okçenka, zaŒ pozoataˆe dwçe opc*e odpowçada*Ñ oP P. Michaˆkiewicz, i. —wituszak y 5 . ,tGI -lfiâ. : *,* *ù; ' * **bs* i*5(git* ' 8 *jâi;, ù,ù ** *Œ* ' '*q. „**, Programowanie w Turbo Pascal 7.0 allowed *** ' ë*' 6* ny kod moduˆu ma by¹ nakˆadkÑ. Opeja odpow Compiler... dyrektywie przeˆÑcznikowej kompilatora {$O). Komenda powoduje wy„wietlenie okienka '*Compiler Optiona'*, sˆu¾Ñceg do ustalenia parametrów dziaˆania kompilatora. Word align - opcja powoduje zapami©tanie danych w pan data prçeç ich wyrównanie do granicy sˆowa masçyno, lub bajtu. Je¾eli opejajest wˆÑczona, to çmienne 1 wyrównywane do granicy sˆowa masçynowego, e efektem jeat azybsçy dost©p do tych zmiennyc pami©ei. Opeja ta dotyczy procesorów typu 80x86 nie daje efektu prçy procesorze 8088. Opeja odpo* da dyrektywie przeˆÑcznikowej kompilatora {$A 286 - opeja powoduje uatawienie rodzaju generowaç inatruetiona kodu w çale¾noŒci od procesora. Je¾eli opeja wyˆÑczona, to generowany jest kod dla proce, 8086. Dla opeji wˆÑczonej, w celu optymalizacji k generowanego programu, kompilator u¾ywa do* kowo inatrukeji proceaora 80286. Nale¾y pami©* ¾e wygenerowanie kodu dla proceaora 80286 uniei ¾liwia uruchomienie danego programu przy koç ataniu z komputerów opartych o proceaory 8I i 8086. Opeja odpowiada dyrektywie przeˆÑczniko* kompilatora {$G}. RYSUNEK 28 Runiime errorg Wazyatkie parametry zoataˆy podçielone na grupy umieazezone w osob nych polach. Pole wˆÑczone zaznaeçone jeat znakiem X. Pole mo¾em* "**** - wˆÑczeççie opeji powoduje, ¾e wygenerowany kod 1 wˆÑczy¹ i wyˆÑczy¹ çà pomocÑ klawisza spacji. Mo¾emy wyró¾ni¹ nas* .** * checking dzie podlegaˆ kontroli zgodnoŒci indekaów tab pç*jÑce grupy parametrów: *4**i*** * i ˆaäcuchów z wartoŒciami zadeklarowanymi, Je¾ naatÑpi takie przekroczenie zakreau, to program : Code generation atanie zatrzymany i zoatanie wy„wietlony komunil3 Force far - okre„la rodzaj odwoˆania do procedur i funkeji. Jeç* * * j*'*'' o *©dzie. Opeja odpowiada dyrektywie przeˆÑczni* calla opejajest wˆÑcçona, to waçystkie odwoˆania aÑ odwo '*'**'*' wej kompilatora {$R}. ù*:t ), w przeciwnym wypadkua ** ** Stack ˆaniami dalekimi (FAR - wˆÑczenie opeji powoduje automatyczne generowan to odwoˆania bliakie (NEAR). Je¾eli opeja jeat wyˆ!,* j* * * checking kodu, który podezaa wywoˆania procedury lub funk czona, a procedura lub funkeja zadeklarowanajest* powoduje kontol© doat©pnej pami©ci na zmienne 1 cz©Œci opiaowej moduˆu (interface), to kompila* kalne. Je¾eli wyatÑpi brak takiej pami©ci lub obsz; mimo wyˆÑeçenia opcji traktuje odwoˆania do m* ****, jej jeat çà maˆy, to program zoataççie zatrzymaç jako dalekie. W prçypadku u¾ywania nakˆadek oP9 *:t*,t . ç..: i zoatarçie wy„wietlony komunikat o bˆ©dzie. Op¹ nale¾y wˆÑcçy‚. Opeja odpowiada dyrektywie p* - * ne* * odpowiada dyrektywie przeˆÑcçnikowej kompilato* ˆÑcznikowej kompilatora {$F). ****;*= - {$S}. :, *;; 46 P. Michaˆkiewicz, I. —wituszak ' Programowanie w Turbo Pascal 7.0 Œcia/wyj*cçaprogramzoaçançe zacrzy*a*ly 1 wyaw.*uli ai© komunikat o bˆ©dzie. W przeciwnym wypadku nale¾y aamemu zapewni¹ kontrol© bˆ©dów za pomocÑ funkeji IOR.eault. Opcja odpowiada dyrektywçe przeˆÑcznikowej kompilatora {$I}. Overflow - gdy opejajest wˆÑczona, to dla nast©pujÑeych operacji checking arytmetycznych wystÑpi kontrola przepeˆnienia: +, -, *, Aba, Sqr, Succ, Pred. W przypadku wyatÑpienia przepeˆnienia nastÑpi zakoäezenie programu i zostaù nie wyŒwietlony komunikat o bˆ©dzie. Opeja odpowiada dyrektywie przeˆÑcznikowej kompilatora {$Q), Syntaac options Strict var- - wˆÑczenie opcji powoduje ŒcisˆÑ kontrol© zadeklaù atrings rowanego i aktualnego ˆaäcucha, powodujÑc przy wi©kszej dˆugoŒci ˆaäcucha aktualnego wyatÑpienie bˆ©du. Przy opeji wyˆÑczonej kontrola ta nie wyat©puù je. Opeja odpowiada dyrektywie przeˆÑcznikowej kompilatora {$V}. Complet,e - opeja powoduje optymaliza*© generowanego kodu boolean eval dla wyra¾eä logicznych, zawierajÑcych operatory la giczne and i or. Je¾eli opcja jest wˆÑczona, to anali zowane jest caˆe wyra¾enie logiczne, nawetje¾eli po analizie cz©Œci tego wyra¾enia znanyjestjego wynik , Przy opcji wyˆÑczonej obliczanie wyra¾enia koäeçy ai© z chwilÑ uatalenia wartoŒci wyra¾enia. Opeja odpowiada dyrektywie przeˆÑcznikowej kompilatora {$B}. Extended - wˆÑczenie opeji powoduje uatawienie zgodnoŒci po ayntax mi©dzy typem PChar i tablieami znaków zaczynÑj* cymi si© od indeksu zerowego oraz pozwala na tre ktowanie funkeji jako procedur, powodujÑc zignom wanie ich wyników. Opeja odpowiada dyrektyw* przeˆÑcznikowej kompilatora {$X}. da dyrektywie przeˆÑeznikowej kompilatora {$T Open - wˆÑczenie opeji powoduje, ¾e u¾ycie aˆowa St parametera b©dçie oznaczaˆo tzw. ˆaäcuch otwarty, zaŒ gdy o jest wyˆÑczona, to sˆowo String zaclçowuje znacz z poprzednich weraji j©zyka Turbo Paseal. O odpowiada dyrektywie przeˆÑcznikowej kompil„ {$P}. Debugging Debug - wˆÑczenie opeji powoduje generowanie inforxna* information wyat©pujÑcych bˆ©dach i umieszczenie ich w plik .EXE i.TPU. Umo¾liwia to lokalizacj© bˆ©dów pomocÑ komendy Find Error. Uatawienie takie zwala na krokowe uruchamianie programu i u: wianie punktów przerwania dziaˆaççia prograç Opcja odpowiada dyrektywie przeˆÑcznikowej k* pilatora {$D}. - wˆÑczenie opeji powoduje automatyczne generowa aymbola kodu zawierajÑcego infornçacje o nazwach i typ; wazyathich zmiennych i ata.ˆych, które wyat©puj* cz©„ci implementacyjnej moduˆów oraz w funkcj* i procedurach. Pozwala to podczaa uruchamia* programu na kontrol© i modyfikacj© wartuŒci zmi* nej. Opcja odpowiada dyrektywie przeˆÑczniko* kompilatora {$L}. Symbol - wˆÑczenie opeji powoduje, ¾e kompilator genen infornçation informaçje o aymbolach wyatgpujÑcyeh w progran (tylko TPX) oraz odwoˆania do tych aymboli. Dane te wykorzys* wane aÑ prçez obiekt ObjectBrowser, uruchamia za pomocÑ komend Object, Unita, Globals i Symbo opeji menu Search. Nun*eric processing 8087/80287 - wˆÑczenie opeji powoduje, ¾e program b©dzie wyh rzyatywaˆ koprocesor arytmetyczny do wykonywan operacji na liczbach zmiennoprzecinkowych we wsz atkich doat©pnych typach rzeczywiatych: WyˆÑczen opeji apowoduje, ¾e do wykonania tych operacji u¾y zoatanie biblioteka, która bgdzie emulowaˆa kopr Typed - opcja okreŒla rodzaj waka«nika generowanego p** çs*t*. operat,or operator *. Je¾eli opejajeat wyˆÑczona, tu rezultate ,*,*"*.* u¾ycia operatora * jeat typ Pointer, który jeat ka* patybilny ze wazyatkimi typami waka«nikowy* Gdy opeja jest wˆÑczona, to wynikiem jeat wska«* 48 P. Michaˆkiewicz, I. —wituszak Programowanie w Turbo Pascal 7.0 4 -'-J ** przeˆÑcznihowej hompilatora ($N). Emulation - wˆÑczenie opcji powoduje, ¾e w przypadku braku koproceaora aryt*etycznego zoatanie doˆÑczona bibù lioteka, która go emuluje. Opcja odpowiada dyrektyù wie przeˆÑcçnikowej kompilatora ($E}. Coãditional de*ines Pole to aˆu¾y do wprowadzania definicji aymboli, które odnoszÑ ai© do warunkowych dyrektyw kompilatora. Nazwy te muazÑ byä oddzielone „rednikami. Memory sizes. . . Komenda powoduje otwarcie ohienka dialogowego "Memory Sizes", * którym mo¾emy okç'e„liä rozmiar pami©ci przeznaczonej dla aegmentu átnn,i nraz BteY'tv. !t Y J V*v Gn z* W okienku znajdujÑ ai© nast©pujÑce pola: Stack size - okz'e„la rozmiar aegmentu stosu w bajtach, sta* makaymalny rozmiar wynoai 65536 bajtów. **o.* *u=**à***y ruzmçar aterty w bajtach, limit atandardowo wynoai 0 bajtów, High heap - okre„la makaymalny rozmiar sterty w bajtach, : limit atandardowo wynosi 655360 bajtów. Nale¾y p* taä, ¾e nie mo¾e byä on mniejszy od minimal roznçiaru aterty. Linker... Komenda powoduje otwarcie okienka dialogowego "Linker ', w kti mo¾emy okre„liä parametry majÑce wpˆyw na dziaˆanie systemo* programu ˆÑczÑcego. iç r * uNL*K 30 W okienku tym wyró¾niamy naat*pujÑce opcje: Map file - okre„la, ezy zbiór o rozazerzeniu.MAP b©dzie utrç rçony, a je¾eli tak, t4 j*e informacje b©dzie zaw raˆ. Opcja ta ma naat©pujÑce pola, z których tyl: jedno mo¾e byä wˆÑczone: plik nie b©dzie tworzony. *egmençs - plik b©dzie zawieraˆ list© segmentów, adr* poczÑtkowy programu oraz komunikaty bˆ dów powstaˆych podczaa ˆÑczenia. 50 P. Michaˆkiewicz, I. —wituszak Programowanie w Turbo Pascal T.0 na alfabetycçnie. Detailed - jak opcja Public plus dokˆadny opis aegmentów zawierajÑcy nazw© aegmentu, jego dˆugoŒ¹ w bajtach. Opcja dziaˆa poprawnie, gdy wˆÑczona jeat opcya Optiona I Compiler I Debug infornça. tion. Link - okreŒla, cçy buforem podcças ˆÑczenia ma by¹ pami©* buffer czy dyak. Memory - jako bufor wykorçyatywana jest pami©¹. Disk - jako bufor wykorzystywany jest dyak. Wykoù rzyatanie pami©ci na bufor przyspiesza proces kompilowania programu, ale çajmuje pami©¹, Debugger... Komenda powoduje otwarcie o*ienka dialogowego "Debugge¾ " dla Œrodoù wiaka Turbo lub o*ienka "Debugging/Browaing" dla „rodowiaka Tpx, w kt”rych mo¾emy okç'e„liä parametry majÑce wpˆyw na dziaˆanie progra* mu wyaçu*iwania i poprawiania bˆ©dów w programie (tzw. debugger). RYSUNEK 31 52 P. Michaˆkiewicz, I. —wituszak w oxçeççku tym wyró¾niamy nast©pujÑce opcje: Debugging- opcja posiada nast©pujÑce pola: Integrated - opcjajest atandardowo wˆÑczona i pozwa u¾ycie debuggera zarówno wbudowane „rodowiako,jak i çewn©trçnego, np. Turb* buggera. Opcja dziaˆa poprawnie, gdy wˆ; na jeat opcja Options I Compiler I Debug i: mation opcja jest atandardowo wˆÑcçona. Standalone - wˆÑczenie opcji pozwala na u¾ywanie tylk, buggera zewn©trznego, np. Turbo Debu Opcj a dççaˆa poprawnie, gdy wˆÑcçona jest cja Optiona I Compiler I Debug infoççnatioç W Œrodowiaku Tpx opcje te majÑ nast©pu,jÑce nazwy; Integrated deˆ ging/browaing, Standalone debugging. Diaplay awapping - opcja okreŒlajÑca tryby przeˆÑcçania pomi© e*'anem edytora a ekranem u¾ytkownika podc dziaˆania debuggera. Opcja posiada naat©puj; pola: None - ekran u¾ytkownika niejeat wyŒwietlany, Smart ekran u¾ytkownika jeat wyŒwietlany y t 1 podczas wykonywania p*eç program opera wyj„cia. e** *ytkownika jest wyŒwietlany p " *4f*;. Always - odcz; wykonywania ka¾dej instrukeji. **"*"' Po u¾yciu podczaa uruchomiania a atemu Turbo Paacala rzeˆÑczni* * '** * mo¾emy pracow àä z dwoma monitorami. Najednym monitorze widz my e*an ed*,* y te o te¾ ra a stemowe o zaŒ na dru m ekran u¾ytkownika. g powodu opcja Display awappingjest w tym trybie pracy pomij* *ç**fã * *il*; =****:, DireGtories. . . ãs**; atyw*e podcças pracy * *tórych zapami©tane sÑ pliki wykorzyù systemie Turbo Paecala. Programowanie w Turbo Pascal 7.0 tów wyŒwietlanych w bie¾Ñeynç okienku "Brn. wae" spowoduje otwarcie nowego okienka: New browser - otwarcie nowego okienka. Replace - wymiana zawartoŒci bie¾Ñcego okienka. current Preferred pane - ohreŒlenie rodzaju wyŒwietlanej infornçacji: Scope - informacje o zasi©gu. Reference - informacje o odwolaniaeh. Display - okreŒla, jakie informacje majÑ byä wyŒwietlane: â*ualified - nazwy symboli dziedziczonych wyŒwietlane b©. synçbols dÑ z kwalifikatorami ich obiektów, pod warunkiem, ¾e w grupie Symbols wlÑezona b©dzie opcja Inherited. Sortalways - wˆÑcça alfabetyczne wyŒwietlanie symboli; standardowo symbole wyŒwietlane sÑ w kolejnoŒci ich deklarowania. Tools... Komenda powoduje otwarcie okienka dialogowego "Tools", za pomocÑ którego mo¾emy dodaä do menu Tools dodatkowe programy narz©dziowe, które b©dÑ wywolywane z poziomu systemu Turbo Pascala. I I 56 P. Michaˆkiewicz, I. —wituszak --' r-*'o*~ * * vucuuio u* pnych w menu Tools oraz mi©dzy innymi przyciski Edit, New, Del pozwalajÑce na operaeie odpowiednio edycji pozycji z listy progran dodania nowego programu do listy oraz skasowania programu z li Wybranie prçycisku Edit lub New, ewentualnie wciŒni©cie klaw , gdy jesteŒmy w polu listy, spowoduje przejŒcie do okie "Modify/New Tool", w którym okreŒlamy: Title - opis programu (nazwa), który çostanie wyŒwie na w menu Tools. Je¾elijednÑ z liter w tym op umieŒcimy mi©dzy çnakami ~, np. ~D~rukuj Za~p~isz, to w menu Tools zostanie ona wypis grubszÑ czcionkÑ i w innym kolorze, a jednoc; nie b©dziemy'mogli dany program uruchomii wejŒciu do menu Tools, przez wciŒni©cie tej liti Progranà path - naçw© programu oraz opcjonalnie Œeie¾k© do; pu. Je¾eli nie okreŒlimy Œcie¾ki dost©pu, to * gram b©dçie poszukiwany w bie¾Ñcym katali oraz w katalogach ustawionych za pomocÑ polf nia PATH systemu operacyjnego DOS. Command line - paraçnetry lub makra, które majÑ by¹ przesˆ; do progrançu podczas jego uruchomienia. Mal zawsze muszÑ zaczyna¹ si© znakiem dolara $. Hot keys - klawisze, za pomocÑ których mo¾na b©dzie u chomiä dany program bezpoŒrednio z edytora,1 wywolywania opcji z menu. Programowanie w Turbo Pasca! 7.0 Powoduje otwarcie ohienka dialogowego "Preferences", çà pomoc* rego mo¾emy okreŒli¹ wyglÑd oraz zachowanie ai© sya*mu po, praey. W oliienku mo¾emy wyró¾ni¹ naat©pujÑce grupy parametrów: Screen aiçea - uatawienie wymiarów ekranu: 25 linea - uatawienie trybu ekranu wyŒrvietlajÑce* wierazy i 80 kolumn. 43/50 lines - uatawienie trybu ekranu wyŒwietlajÑeeg 43 wieraze i 80 kolumn dla karty EGA 50 wierazy i 80 kolumn dla karty VGA. RYSUNEK 35 Environment Wybranie komendy powoduje rozwini©cie nast©pnego podmenu zawi* rajÑcego opcje okreŒlajÑce prac© systemu Turbo Pascala: ni u vivzn ao P. Michaˆkiewicz, I. —wituszak Source tracking okre„lenie okienka, do którego b©dzie wczyty* dodatkowy plik, wykorçystywany przez prog podczaa krokowego uruchomienia programu podczaa pracy z o*ienkiem Measagea. New window - otwarcie nowego okienka. Current - zapiaanie do o*ienka bie¾Ñcego po uprçed window skasowaniu jego zawartoŒci. Auto aave - opcje pozwalajÑce na automatyczny çapis nast©p* cych elementów syatemu: . Editor files - wˆÑcçenie tej opcji powoduje automatyc zapia çawartoŒci edytora podczas uruchon nia programu lub przejŒcia z aystemu Tu Paacala do aystemu operacyjnego DOS za mocÑ komendy File I DOS shell, je¾eli ço* oã zmodyfikowany od czaau ostatniego za au. Environment - wˆÑczenie tej opcji powoduje automatyc2 zapis przy wyjŒciu ç systemu bie¾Ñcej koç guracji ustawionej w danej sesji. Dane te zapisywane w pliku TURBO.TP. Deaktop - wˆÑcçenie tej opcji powoduje automatycz zapis prçy wyjŒciu z systemu bie¾Ñcych olii i ich çawaxtoŒci do pliku TURBO.DSK. Px ponownym uruchomieniu syatemu na podsl wie tego pliku çostanie odtworzony poprzed stan okien z ich zawartoŒciÑ. Plik ten je Programowanie w Turbo Pascal 7.0 tworzony tyrxo wçeay, gay uçworzony*esç æuh TllRBO.TP. Options - opeje ustawiajÑee operacje zwiÑzane z u¾ywaniem okienka Messages oraz ustawianie katalogu bie¾Ñce. go: Auto track - je¾eli opeja jest wˆÑczona, to podezas u¾ywa. aource nia okienka Messages (lub obiektu Object. Browser ze „rodowiska TPX) wiersz w tekŒcie «ródˆowym, zawierajÑcy synçbol wskazywany przez to okienko, b©dzie podŒwietlony. Close on go - je¾eli opeja jest wˆÑezona, to podezas u¾ywa, to source nia okienka Messages (lub obiektu Object, Browser ze Œrodowiaka TPX) u¾ycie klawiszy + spowoduje przejŒcie do tekstu çródˆowego oraz zamknç©eie okienka Measages. Change dir - wˆÑczenie opeji powoduje, ¾e po u¾yciu kuon open mendy File I Open naatÑpi zmiana katalogu bie¾Ñcego na katalog zawierajÑcy otwierany plik. t*dçtor Powoduje otwarcie okienka dialogowego "Editor Optiona", za po; którego mo¾emy okre„li¹ tryby pracy sysZemowego edytora Turbo P la. ä*YSUNEä* 37 Desktop file - okreŒla, gdzie ma by¹ zapisany plik TURBO.DSK, W okienku mo¾emy wyró¾ni¹ nast©pujÑce grupy parametrów: zawierajÑcy informacje o poˆo¾eniu i zawartoŒci okien, punkty przerwania programu i inne syste- Editor optiona - - uatawiajÑ opeje dziaˆania edytora: mowe infoççnacje dotyczÑce platformy. Create backup - po wˆÑezeniu opcji ka¾dy zapis pliku na * Current - zapis w bie¾Ñcym katalogu. fçles poprzedza utworzenie z jego poprzednio z direetory aanej wersji pliku o rozszerzeniu.BAK. Config file - zapis w katalogu systemowym zawierajÑcym directory plik TURBO.PL. Iççsert mode - po wˆÑczeniu tej opeji ka¾dy wpisany tek edytorze spowoduje przesuni©cie istniejÑ, Desktop file - (tylko TPX) okreŒla, czy infornçacje aymboliczne, tekstu w prawÑ stron©. Podezas pracy w, optiona b©dÑce wynikiem oatatniej kompilacji, majÑ by¹ torze stan taki mo¾e zosta¹ zmieniony za zapisane w pliku synçbolicznym o rozszerzeniu moeÑ klawiaza , ale nie b©dzie on za .PSM w czaaie zapisywania pliku TURBO.DSK. mi©tany. Desktop only - zapia tylko pliku TURBO.DSK. Auto indent - wˆÑczenie opeji powoduje, ¾e po naciŒni Deaktop and - zapis pliku TURBO.DSK i pliku aymboliczneù mode klawisza kursor zawsze ustawi a: aymbols go. nowej lin� pod pierwazym znakiem linii przedniej. 60 P. Michaˆkiewicz, I. —wituszak Programowanie w Turbo Pascal T.0 Use tab - wiÑczençe opc*ç powoau*e,ze po uzycçu *awi. ..iJ*'oà*'uë"uë" **'eZ*. vr J' çrvr*vuuJ*, *.o otc*oiiuy 1 charactera aza zostanie wprowadzony znak tabula- programu b©dÑ wyst©powaˆy w ró¾nych I eji o kodzie ASCII 9,zaŒ gdy opeja jeat wyˆÑ. rach,w przypadk� kart graficznych um czona,to zamiast znaku tabulacji wprowadza- wiajÑcyeh u¾ywanie kolorów lub b©dÑ n ne sÑ spacje,któryeh iloŒ¹ okreŒla parametr ró¾ne atrybuty przy kartach monochroma* Tab aize. nych. Optimal fill - wˆÑczenie opeji powoduje optymalizacj© liczby Block inaert - wˆÑczenie opeji powoduje przeˆÑczenie gra u¾ytych znaków tabulacji i spacji na poczÑtku cursor nej reprezentacji kuraora.Oznaeza to,¾e ka¾dej linii (zamiaat okreŒlonej liczby spacji, aor przy trybie wpiaywania (inaert) b©dzie która jest okreŒlona przez parançetr Tab size, wyglÑdjak przy trybie nadpisywania (ovex zostanie umieszezony znak tabulacji). te) i odwrotnie. Backspace - je¾eli opeja jeat wˆÑczona i kuraor znajduje si© Find text - wˆÑczenie opcji powoduje,¾e przy u¾yciu unindents w puatej lin� lub na pozycji pierwazego znaku at cursor mend Search I Find oraz Search I Repla* w linii,tu po naciŒni©ciu klawiaza zoatanie on przesuni©ty razem z tekstem, aˆowo,na którym aktualnie znajduje si© je¾eli on wyat©puje,do pozycji odpowiadajÑcej sor; przy wyˆÑczonej opeji komendy te I pozycji pierwszego znaku w poprzedniej linii. pami©taˆy poprzednio wpisany tekat. Cursor through - wyˆÑczenie opeji sprawia,¾e u¾ycie strzaˆek Tab size - parametr ten okreŒla o ile znaków ma przesunÑ poziomych w miejscach u¾yeia znaków tabula- kuraor po naciŒni©ciu klawiaza .Standard cji powoduje przeskok do naat©pnego znaku jest ustawiona wartuŒ¹ 8,ale zakres parametru tabulacji. nosi od 2do 16znaków.OkreŒlenie nowej wan spowoduje uatawienie jej we wszystkich miejs* Group Undo - po wˆÑczeniu opeji mo¾emy wykonywa¹ tzw. u¾ycia klawisza w tekŒcie. cofni©cia grupowe za pomocÑ komendy Edit I Undo. Highlight - opeja pozwala na okre„lenie,które pliki b©dÑ exteçiaions Œwietlane przy u¾yciu kolorów lub atrybutów. Persistent - wˆÑczenie opeji umo¾liwia po zaznaczeniu blo* bloeks ku przesuniecie kuraora,zaŒ gdy opeja jest wyˆÑczona,przeauni©cie kursora powoduje za- nçechançe operacji zaznaczania bloku. Mouae Overwrite wˆÑczenie tej opeji przy wyˆÑczonej opeji Per* Powoduje otwarcie okienka dialogowego "Mouae options",za pon blocks sistent blocks powoduje,¾e po zaznaczeniu którego mo¾emy okreŒli¹ parametry pracy myszki w systemie Ti bloku u¾ycie klawiszy oraz Pascala. powoduje uauni©cie bloku z tekatu,gdy :*T * zaŒ naciŒniemy dowolnÑ lçter© lub wezytamy Y zawarto„¹ bufora Clipboard,tu po usuni©eiu bloku zostanie ona zapisana na pozycji poczÑt* ,*" kowej bloku. I I - *ç" 62 P.Michaˆkiewicz,I.—wituszak Programowanie w Turbo Pascal 7.0 r-~-- r r*~r --***, **.. . rvu**v Jii* nu*yyl**;lc. *wlU ustawiamy za pomocÑ przesuni©cia wska«nik poziomym auwaku. Zwˆoka bgdzie nÑjmniejaza waka«nik znÑjdzie sig z lewej strony suwaka (F nÑjwigksza z prawej atrony suwaka (Slow). Reverae mouse buttons - wˆÑczenie parametru powoduje, ¾e aktyw klawiszem myszki staje ai© klawisz prawy. Startup Powoduje otwarcie okienka dialogowego "Startup options", za poi którego mo¾emy okre„liä parametry uruchomienia systemu Turbc scala. RY,SUNEK 38 Wùokienku mo¾emy wyró¾ni¹ nastgpujÑce grupy parametrów: Ctrl+Rightmouse button- opcje tego pola sˆu¾Ñ do okreŒlenia reakcji aystemu na naciŒni©cie klawiszy +prawy klawisz myszki. Je¾eli wˆÑczony jest parametr Mouae double click, opcje te odnosiä sig b©dÑ do przyciŒnigcia klawisça +lewy klawisç myszki, Nothing - brak reakc*i. Topic search - odpowiada komendçie Help I Topic search. - Go to cursor - odpowiada komendzie Run I Go to cursor. Breakpoint - odpowiada komendzie Debug I Toggle breakpoint. ,sx**. Evaluate - odpowiada komendzie Debug I Evaluate. Add watch - odpowiada komendçie Debug I Add watch. Browse - odpowiada komendçie Search I Symbol (tylko synçbol TPX). Móuse double elick - parametr ten sˆu¾y do ustawienia zwˆoki cçasowej migdzy dwoma kolejnymi klikni©ciami. Je¾eli czas migdzy dwoma klikni©c'iami mieŒci si© w ustawionej zwˆoce, to dwa oddzielne kliknigcia traktowane a* 64 P. Michaˆkiewicz, I. —wituszak i*i uvir*n ay Parametry te odpowiadajÑ przeˆÑcznikom u¾ywanym podczas inicja nia syatemu i tam zostaˆy opisan‚. Ustawione parametry dadçÑ efek powtórnym uruchomieniu systemu. Dual monitor - odpowiada przeˆÑcznikowi /D support Graphics screen - odpowiada przeˆÑcznikowi /G save EGANGA - odpowiada przeˆÑcznikowi /P palette aave Programowanie w Turbo Pascal 7.0 checking LCD color aet - odpowiada przeˆÑcznikowi /L Load - odpowiada przeˆÑcçnikowi /T TURBO.TPL Uae expanded - odpowiada przeˆÑczççikowi /X (tylko Turbo) memory Return to - odpowiada przeˆÑcznikowi /R laat dir Preaerve - odpowiada przeˆÑcçnikowi lY (tylko TPX) aymbola Window heap - odpowiada prçeˆÑcznikowi /W (tylko Turbo) eize Editor heapaize Overlay heapsize Swap filedireatory Colors odpowiada przeˆÑcznikowi âE (tylko Turbo) odpowiada przeˆÑeznikowi /0 (tylkã Turbo) odpowiada przeˆÑcznikowi /S Powoduje otwarcie okienka dialogowego "Colors", za pomocÑ którego mo¾emy okreŒli¹ kolory poszczególnych elementów „rodowiska Turbo Pascala. W zale¾noŒci od typu karty gr*çcznej dost©pne sÑ naat©pujÑce pola: ' karta monochromatyeçna: Group, Item, Color, pole kontrolne; ' karta kolorowa: Group, Item, Foreground, Background, pole kon* trolne. '*¹**4" " **. 7* „ * *i Group Item Color NormalHighlight Underline Inuerae ForegroççndBackgroundpole kontrolne Open... RYSUNEK 40 pole zawierajÑce list© wszyatkich nazw grup elem tów doat©pnych w ayatemie, którym mo¾emy zmie kolory. pole çawierajÑce liat© dost©pnych elementów w, branej w polu Group grupie. mo¾emy uatawi¹ dla kart monochromatycznych : st©pujÑce atrybuty: - tekat normalny - tekat rozja„niony - tekat podkre„lony - tekat w inwersie okienko aˆu¾Ñce do wyboru koloru tekatu okienko aˆu¾Ñce do wyboru koloru tˆa pokazuje aktualne ustawienie kolorów lub atrybut Po wybraniu tej komendy ayatem wy„wietla okienko dialogowe o naz, "Open Optiona", które umo¾liwia nam wczytanie pliku konfiguraeyjn* z dyaku. 66 P. Michaˆkiewicz, I. —wituszak Programowanie w Turbo Pascal T.0 RYSUNEK 41 ê 1 O Vl V*ê g* Standardowo odàytywany jeat plik TURBO.TP, ale je¾eli zapiaali„my awojÑ konfiguracj© w innym pliku, to mo¾emy okreŒliäjego nazw© w polu W Optiona file name lub wybraä z pola Filea. Save TURBO.TP tylko Turbo Komenda zapiauje na dyahu plih TURBO.TP, zawierÑjÑcy m.in. wszy* atkie parametry uatawione za pomocÑ komend w menu Options, w komendach Compile I Primary file oraz Search I Find i Search I Repla* Jednoàe‚nie zapiaywany jeat plik TITRBO.DSK, zawierajÑcy dane * temat aktualnie u¾ywanej platformy, m.in. polo¾enie i zawartoŒä okiet4 punkty przerwania programu. Save TPX.TP tylko TPX Jak Saue TURBO.TP, ale dotyày pliku TPX.TP Œrodowiaka TPX. Save as... Komenda pozwala na zapiaanie aktualnej konfiguracji w pliku o inni nazwie ni¾ TURBO.TP i TlTRBO.DSK. Po jej wybraniu wyŒwietla * okienho dialogowe o nazwie "Save Optiona As", w którym mo¾emy op* çmiany naçwy pliku zmieniä tak¾e nazw© atacji oraz katalogu. 68 P. Michaˆkiewicz, I. —wituszak Tile Komenda powoduje takie uatawienie ohien, aby ¾adne z nich nie zak waˆo innego okna. .r*w.,;r Cascade Komenda powoduje takie uatawienie ohien, aby tylkojedno bylo w caˆc widoàne na ehranie. Z pozoataˆych olden widoàne aÑ tylko linie tytu -*ù.;. we z numerem i nazwÑ ohienka. Close all *~-- Komenda powoduje zamkni©cie wazyatkich o*ien znajdujÑcych ai© ehranie. Refresh display ":** ; Komenda odŒwie¾a ekran „rodowiaka Turbo Paacala. Programowanie w Turbo Pascal 7.0 t III RYSUNEK 41 Standardowo odczytywany jeat plih TURBO.TP, ale je¾eli zapiaali„my awojÑ hoçç*guracj© w innym plihu, to mo¾emy ohreŒli¹jego nazw© w poçu WI N DOW Optiona file name lub wybra¹ z pola Filea. Save TURBO.TP tylko Turbo Komenda zapiauje na dyahu plih TURBO.TP, zawierÑjÑcy m.in. wszyù athie parametry uatawione za pomocÑ homend w menu Options, w homendach Compile I Primary file oraz Search I Find i Search I Replace, JednoczeŒnie zapiaywany jeat plih TllR,B0.DSK, zawierajÑcy dane na temat ahtualnie u¾ywanej platformy, m.in. poˆo¾enie i çawaçtoŒ¹ okien, punhty przerwania programu. Save TPX.TP tylko TPX Jah Save TLTRBO.TP, ale dotyczy plihu TPX.TP Œrndowiaha TPX. Save as... Komenda pozwala na zapiaanie ahtualnej honfiguracji w plihu o irm* nazwie ni¾ TURBO.TP i TURBO.DSK. Po jej wybraniu wyŒwietla *8 ohienho dialogowe o nazwie "Save Optiona Aa", w htórym mo¾emy opró* zmiany nazwy plihu zmieni¹ tah¾e nazw© atacji oraz hatalogu. 68 P. Michaˆkiewicz, l. —wituszak :Œ*.*. ,+* *ù RYSUNEK 42 Tile Komenda powoduje tahie uatawienie ohien, aby ¾adne z nich nie zal waˆo innego ohna. Cascade Komenda powoduje tahie uatawienie ohien, aby tylhojedno byˆo w caˆ* widoczne na ehranie. Z pozoataˆych ohien widoczne aÑ tylho linie tyti we z numerem i nazwÑ ohienha. Close all Komenda powoduje zamhni©cie wazyathich ohien znajdujÑcych ai© ehranie. Refresh display Komenda od„wie¾a ehran „rodowiaha Turbo Paacala. Programowanie w Turbo Pascal T.0 Komenda pozwala na çmian© rozmiarów i poˆo¾enia okienka na ekranie, W celu zmiany poˆo¾enia nale¾y u¾y¹ lilawiazy strçaˆek, zaŒ do zmiany rozmiarów nale¾y u¾y¹ kombinacji *lawiaza i atrzaˆek. Te same operacje mo¾na wykona¹ przy u¾yciu myazki. Zmiany poˆo¾enia wyko. nujemy przez ustawienie kursora myazki na linii tytuˆowej okienk.a, wciŒni©ciu lewego przycisku i prçeauni©ciu tak çˆapanego okienka do nowego poˆo¾enia. W celu çmiany rozmiaru nale¾y çˆapa¹ prawy dolny róg okienka i rozciÑgnÑä o*ienko do odpowiednich rozmiarów. 2oom F5 Komenda powoduje powi©ksçenie aktywnego okienka do rozmiaru ma. kaymalnego lub zmniejszenie do poprzedniego roçmiaru,je¾eli wczeŒniej wykonaliŒmy ju¾ t© komend©. T© samÑ operacj© mo¾emy wykona¹ za ponçocÑ myszki. W tym celu nale¾y dwukrotnie hliknÑä na linii tytuˆowej lub klikççÑä na polu zmiany roçmiaru, umieszcçonym w nawiasacb kwadratowych w prawym górnym rogu o*ienka. Next F6 Komenda powoduje zmian© aktywnego okienka. Okienkiem aktywnym zostaje o*ienko nast©pne pod wzgl©dem numeracji. Previous Shift+ F6 Komenda powoduje zmian© aktywnego okienka. Okienkiem aktywnym zoataje o*ienko poprçednie pod wzgl©dem numeracyi. Close Alt+ F3 Komenda powoduje zamkni©cie aktywnego o*ienka. List... Alt+0 Komenda wyŒwietla o*ienko dialogowe "Window List", za pomocÑ k* rego mo¾emy wybraä nowe o*ienko aktywne. 70 P. Michaˆkiewicz, I. —wituszak HELP Contents r:t' *,**! ˆ: *i**** r.. * *d*:,ç ù*I* RYSUNEK 43 Wybranie komendy powoduje wyŒwietlenie okienka "Help", zawier cego spis dost©pnych grup informacji pomocniezych. Programowanie w Turbo Pascal 7.0 cji. Doat©pne aÑ naatgpujÑce informacje: *%IâI+hl How to - opis metod u¾ywania opcji Help. Komenda ta poçwàlà ãà znalezienie opiau elementuj©zyka Turbo P znajdujÑcego ei© w miejscu uatawienia kursora w oknie edycyjnym.* Uae Help kuraor ustawiony jeat mi©dzy dwoma elementami jgzyka oddziela Menus and - opia menu ayatemu Turbo Pascal i klawiszy bezù od aiebie apacjÑ,to zoatanie wysçukana informaeja o elemencie zn Hot Keya po„redniego dost©pu do opcji menu. jÑcym ai© z lewej atrony kuraora,co wynika z faktu,¾e kursor znajdowaä si© na dowolnej literze danego aˆowa lub na spacji ç Editor - opia operacji dost©pnych w edytorze systemu. prawej atrony.Je¾eli dane alowo nie zostanie znalezione Commands ,* s5 wyŒwietli lis indeksowÑ dost©pnych informacji w syatemie,zaŒ k Built-in - opia wbudowanego w system j©zyka Assembler. zostaãie ustawiony na tym elemencie indeksu,którego litery pocçÑt: Aaaembler * zawierajÑ nÑjwi©cej liter z wyazuhiwanego aˆowa. Command - opia opcji inicjujÑcych prac© ayatemu. Previous topic Alt+F1 Liççe Komenda ta pozwala na cofni©cie ai© do poprzednio wyŒwietla Debugging - opia zasad poaˆugiwania si© programem urucho- okienka pomocy Help.Syatem pami©ta 20oatatnio wy„wietlonych * miÑjÑcym (debugger). nek. Directivea - opia dyrektyw kompilatora. Using help Error Measage - opia bl©dów. Komenda ta opisuje metody u¾ywania opcji Help.Je¾eli jeateŒmy ji ObjectBrowaer - opis zaaad poaˆugiwania si© obiektem ObjectBroù innym okienku Help,to opcj© t© mo¾na uruchomiä za pomocÑ klaw (TPX) waer. . Reaerved - opis slów *luczowych i dyrektyw. Files... Words Start-Up - opia opcji inicjujÑcych prac© ayatemu. Komenda wyŒwietla ohienko dialogowe "Install Help Filea",za pon 0tiona którego mo¾emy zainatalowaä lub uàuãÑä dodatkowe pli*i pon (Help).Standardowojeat instalowany plik TURBO.TPH. Turbo Vision - opia uruchomienia pomocy dotyczÑcej biblioteki : ' * Turbo Viaion. Compiler directives Units - opis atandardowych modulów ayatemu. Komenda wy„wietla okienko zawi‚rajÑce opia dyrektyw wyat©pujÑc wj©zyku Turbo Paacal. Index Shift+F1 1ñ5 :~ Reserved words Komenda ta powoduje wyŒwietlenie alfabetycznego indeksu wazystki* elementów dost©pnych w j©çyku Turbo Paacal.Wyazuhiwanie odbyws Komenda wy‚wietla oltienko zawiera* ce )Ñ opia slów kluczow ch w * aç© na çaaadzie kolejnego u„ciŒlania,tzn.je¾eli azukamy opiau funk* u c ch w * z P JÑ y )© yku Turbo Paacal. EnvStr,to naciakamy najpierw liter© e,co spowoduje ustawienie kursa ra w indekaie na pierwazym sˆowie zaczynajÑcym ai© od litery e,kolej* litera n uatawia kursor na aˆowach zacçynajÑcych ai© od liter en itd. Pro ram *' 72 P.Michaˆkiewicz,I.—wituszak g owanie w Turbo Pascal T.0 il I i Komenda wyŒwietla okieççko zawierÑjÑce opis standarduwych moduˆów wyst©pujÑcych w j©zyku Turbo Pascal. Turbo Pascal Language Komenda wyŒwietla okienko zawierajÑee opis podstawowych elementów j©çyka Turbo Paacal. Error messages cu ç * vã ˆ'9. Po uruchomieniu zintegrowanego Œrodowiska pracyj©zyka Turbo P mo¾einy od razu przystÑpi¹ do wpisywania programu, poniewa¾ sy automatycznie ustawia si© w trybie edycji. System umo¾liwia pra wielu oknach, co oznacza, ¾e w ka¾dym z nich mo¾emy wpisywa¹ program. Sposób pracy edytora okre„lÑjÑ opcje umieazezone w n Options I Environment I Editor, których opis znajduje si© w opisie m Edytor systemowy, mimo ¾e nie jest prnfesjonalnym edytorem tek* to posiada podstawowe fuççkcje edytors*ie w zupeˆnosci wystarcz: do wprowadzania programów. Funkcje te zostaˆy wymienione w p* szym zestawieniu: Komenda wyŒwietla okienko zawierajÑce opis bˆ©dów, które mogÑ w9* stÑpi¹ w systemie Turbo Pascala. About... Komenda wyŒwietla oliienko "About", zawierajÑce numer wersji system Turbo Pascala oraz nazw© producenta. *:g**; 74 P. Michaˆkiewicz, I. —wituszak Ctrl-E Ctrl-X Ctrl-!*-D Ctrl-Q-S Ctrl-Q-E Ctrl-Q-X Ctrl-!1-R Programowanie w Turbo Pascal 7.0 Operacje sterujgce przemieszczeãiem. kursora il Upis nomaçnac*a klawiszy kombinacj a . do hoäca tehatu Ctrl-PgDn Ctrl-Q-¥ do poprzedniego polo¾enia Ctrl-b2-P do miejaca,w którym wyatÑpil Gtrl-Q-W oatatni blÑd Operacje wpisywania i kàsowània wlÑcçenie lub wyˆÑczenie trybu Ina Ctrl-V wpiaywania tekatu watawienie puatej linii Ctrl-N ahaaowanie linii Ctrl-Y ahaaowanie tehatu od miejaca Ctrl-Q-Y poˆo¾enia huraora do hoäca linii ahaaowanie znahu z lewej atrony BachSpace Ctrl-H huraora ahaaowanie znahu w miejacu Del Ctrl-G kuraora ahaaowanie aˆowa z prawej atrony Ctrl-T huraora Operacje na blokàch tekstu zaznaczenie poczÑtku blohu Ctrl-K-B hoäca bloku Ctrl-K-K alowa Ctrl-K-T Shift-Ctrl-f Shift-Ctrl-* * - :* zaznaczenie blohu Shift- ñ Shift-* Shift- y Shift-*- zaznaczenie linii Ctrl-K-L 76 P. Michaˆkiewicz, I. —wituszak Programowanie w Turbo Pascal 7.0 7 uu* kombinacja ***,; : '**rt: ** I ,(g*g,*,. ! *çdl* *****!ùˆ iI !. *: i*Jt *„`. Ctrl-K-S 78 P. Michaˆkiewicz, I. —wituszak :; Programowanie w Turbo Pascal 7.0 1) komentarzy 2) sˆów klucçowych 3) identyfikatorów 4) symboli 5) ˆaäcuchów 6) liczb 7) instrukcji j©zyka assembler 8) odst©pów w tekŒcie Kolory lub atrybuty dobiera si© za pomocÑ okienka "Colors", które zostalo przedstawione w opisie menu Options I Environment I Colors. Pliki, którå b©dÑ wyró¾niane w ten aposób, okreŒlane sÑ w polu Highlight extensiom w menu Options I Environment I Editor. Mo¾emy oczywiŒcie zrezygnowal z u¾ywania kolorów w edytorze przez wyˆÑczenie opcji Syntax highlighl w menu Options I Environment I Editor, nie likwidujÑc dotychczas u¾* wanego ustawienia kolorów. 8O P. Michaˆkiewicz, I. —wituszak u ç r* G, I1 I 1â w y t(u M P * *ñçO RA W rozdziale tym zostanÑ opisane dyrektywy kompilatora. Dyrekt aˆu¾Ñ do okreŒlenia pracy kompilatora. Za ich pomocÑ programista n "powiedzie¹" kompilatorowi, jak ma wykona¹ kompilacj© eaˆego pro , mu lubjego cz©Œci. Mo¾emy wyró¾ni¹ trzy rodzaje dyrektyw: / dyrektywy przeˆÑcznikowe / dyrektywy parametryczne *ç * / dyrektywy warunkowe * Dyrektywy przeˆÑcznikowe Dyrektywy przeˆÑcznikowe powodujÑ wˆÑczenie bÑd« wyˆÑczenie od wiedniej opcji dziaˆania kompilatora. Kaçda dyrektywa przeˆÑczniko ': Pi'H:* ma swój odpowiednik w menu Options I Compiler. Pod wzgl©dem zasi¨ ***" dziaˆ„nia mo¾emy okreŒli¹ dyrektywy globalne oraz lokalne. Dyrekty , *j.i** globalne odnoszÑ si© do caˆego procesu kompilacji programu lub modç *ytw * i umieszezane sÑ przed cz©ŒciÑ deklaracyjnÑ. Dyrektywy lokalne, pon *i*=:***; wa¾ odnoszÑ si© do cz©Œci kompilacji, mogÑ wyat©powa¹ w dowoln, miejscu programu. Nazwa dyrektywy skˆada si© z litery poprzedzonej znakiem $ oraz znal * + oznaczajÑcego wˆÑczenie dyrektywy lub znaku - oznaczajÑcego wyˆ czenie dyrektywy i umieszczonajest w nawiaaach klamrowych {}. ynç mo¾na u¾y¹ nawet kilku dyrektyw, a Wjednym nawiasie klamrow e tylko przed pierwszÑ nale¾y umieŒci¹ znak $. Dyrektywy te muszÑ b; **g b*ù: oddzielone przecinkami. ã,*' :* P*ykˆadowo zamiast pisa¹ {$N+} vt _ * h, : ' mo¾emy napisa¹ {$N+,E-} ::* *'+*. Programowanie w Turbo Pascal 7.0 8 * Edytor syatemowy 1'urbo Pascala ma mo¾liwoŒ‚ u¾ywania ró¾nych kola rów, w przypadku kart graficznych udost©pniajÑcych kolory lub ró¾nye* atrybutów, w przypadku kart monochromatycznych do oznaczenia na, st©pujÑcych elementów skˆadni: w*- $A Standardowo . {$E+} Standardowo . {$A+) globalny Zasi©g . globalny Zasi©g Dyrektywa powoduje çapami©tanie danych w pa. Opis . Standardowe ustawienie dyrektywy powoduje, Opis mi©ci przeç ich wyrównanie do granicy slowa w przypadku braku koprocesora arytmetyczne* maszynowego lub bajtu.Je¾eli dyrektywa.jest çostanie doˆÑczona biblioteka,która go ernulu- wˆÑcçoçia (A+); to çmienne b©dÑ wyrównywane c)c Ustawienie dyrektyw w postaei ($N+,$E+) pow *ranicy sˆowa maszynowego,cçego efektem,jest duje utworzenie programu, który emulu szybazy dost©p do tych zmiennych w pamieci, koprocesor arytmetyczny,je¾eli nie zostanie * Opcja ta dotycçy procesorów typu 80x86,ale nie wykryty; w przeciwnym razie zostanie on u¾y daje efektu przy procesorze 8088. '* t".« przez program. Je¾eli program ma pracowa¹ tyl: -,r*, , z wykorçystaniem koprocesora arytmetycçne* to nale¾y ustawi¹ nast©pujÑce dyrektyv Standardowo : ($B- * ~"*` ' = ,**;,: $F Zasi g lokaln **'ur~'.!* Opis Dyrektywa powoduje optyçnalizacj© generowane .**ù* Standardowo . {$F-) go kodu dla wyra¾eä logicçnyclç çawierajÑcycb ½asi©g . lokalny operatory logiczne and i or.Je¾eli dyrektywa jes! . wˆÑczona ($B+),to analizowane jest caˆe wyra¾e Opis . Dyrektywa okreŒla rodzaj odwoˆania do proced nie logiczne,nawet je¾eli po analizie c穌ci tego . i funkcji.Je¾eli dyrektywajest wˆÑczona {$F+}, , wyra¾enia znanyjestjego wynik.Przy ustawieniu wsçystkie odwoˆania sÑ odwoˆaniami daleká standardowynç obliczanie wyra¾enia koäcçy si©a (FAR); w przeciwnym wypadku aÑ to odwoˆan chwilÑ ustalenia wartoŒci wyra¾enia. :rbaw * bliskie NEAR).Je¾eli dyrektywa jest wyˆÑczoi :,***; ;~* {$F-},a procedura lub funkeja zadeklarowanaje w c穌ci opisowej moduˆu (interface),to kompil $D tor mimo wyˆÑczenia dyrektywy traktu Standardowo . {$D+) ?e***'* odwoˆania do nich jako dalekie.W przypadl u¾ywania naliˆadek nale¾y dyrektyw© ($F+) ust Zasi©g . globalny wi¹ na poczÑtku programu i ka¾dego maduˆu. : Standardowe ustawienie dyrektywy powoduje nerowanie inforçnaeji o wyst©pujÑcych bˆ©dacb i umieszczenie ich w plikach.EXE i.TPU.Umo ¾liwia to lokaliçacj© bˆ©dów za pomocÑ komendl Standardowo . {$G-} dla trybu pracy rzecçywistego F d Error.Standardowe ustawienie dyrekty* {$G+} dla trybu pracy chronionego amu pozwala na krokowe uruchamianie progr * Zasi©g : globalny i ustawiaççie punktów rzerwania. ** Opis . Dyrektywa powoduje ustawienie rodzaju genez wanego kodu w zale¾noŒci od pro ***j*alMj*****'i***l** *est kod ala procesora t5Ut5ti.u1à ayrexçywy w, g2 P. Michaˆkiewicz, I. —wituszak Programowanie w Turbo Pascal 7.0 czonej [*t,r+t, w ceiu opçym*ul****l h*uu s*==*=uù *;6 u*o**r=."..-* *,r **, ...a**"**. .,y wanego programu, kompilator u¾ywa dodatkowo *;* rektywy apowoduje, ¾e do wykonania t inatrukcji proceaora 80286. Nale¾y pami©ta¹, ¾e operacji u¾yta zoatanie biblioteka, która b© wygenerowanie kodu dla proceaora 80286 unie. . emulowaˆa koprocesor arytmetyczny. mo¾liwia uruchomienie danego programu przy korzystaççiu z procesorów 8088 i 8086. Standardowo . {$0-} $I Zasi©g . globalny Standardowo . {$I+} ;* Opia . WˆÑczenie dyrektywy ($O+) jest wynçagane, Zaai©g . lokalny dy, gdy generowany kod moduˆu ma Opia . Dyrektywa wˆÑcza lub wyˆÑcza automatyczne ge. "; nakˆadkÑ. nerowaççie kodu, który kontroluje poprawnoŒ¹ ù wykonania operacji wejŒcia/wyjŒcia. Je¾eli dyreù l*t* ; S*ndardowo . {$P-) ktywa jest wˆÑeçona {$I+}, to przy bˆ©dacb wejŒcia/wyjŒcia progranç zoatanie zatrzymany Zaai©g . globalny i wyŒwietlony zoatanie komunikat o bˆ©dzie. W . WˆÑczenie dyrektywy {$P+) powoduje, ¾e u¾ przeciwnym wypadku nale¾y aamemu zapewni¹ * aˆowa String b©dzie oznaczaˆo tzw. ˆaäcuch ot, kontrol© bˆ©dów za pomocÑ funkcji IOReault. ty, zaŒ przy standardowym uatawieniu sˆ String zachowuje znaczenie z poprzednich w* j©zyka Turbo Pascal, ezyli okreŒla ˆaäcuch o ksymalnej dˆugoŒei do 255 znaków. Standardowo . {$L+} Zaai©g . globalny *'*** " *e y ** Standardowo . f$Q-) Opia . Standardowe uatawienie dyrektywy powodujs ***s."; automatyczne generowanie kodu zawierajÑcego *** * Zaai©g . lokalny infoç'macje o nazwach i typach wazyatkich zmienù *** « nych i ataˆych, które wyat©pujÑ w cz©Œci Opia . Powoduje wˆÑczenie lub wyˆÑczenie kontroli * implementacyjnej moduˆów oraz w funkcjacb w*. peˆnienia dla generowanego kodu. Gdy dyrekt i procedurach. Pozwala to podczaa urucharnianie k jeat wˆÑczona {$Q+}, to dla nast©pujÑcych ope: programu na kontrol© i modyfikacj© warto* : *- arytmetycznych wystÑpi kontrola przepeˆnie +, -, *, Abs, Sqr, Succ, Pred. W przypadku w5 zmiennej. pienia przepeˆnienia nastÑpi zakoäczt programu i zoatanie wy„wietlony komunik bˆ©dzie. Standardowo . {$N-} Zasi©g . globalny Standardowo . ($R-) Opia . WˆÑczenie dyrektywy ($N+} powoduje, ¾e p* Zasi©g . lokalny gram b©dzie wykorzystywaˆ koproces arytmetyczny do wykonywania operacji na li* Opis . WˆÑczenie dyrektywy {$R+} powoduje, ¾e wyg bach zmiennoprzecinkowych we wazystki*b rowany kod b©dzie podlegaˆ kontroli z odç indeksów tablic i ˆaäcuchów z wartoŒciami z 84 P. Michaˆkiewicz, I. —wituszak Programowanie w Turbo Pascal 7.0 zakresu,to program zostanie çatrzymany i zosta. * nie wyŒwietlony kornunikat o bˆ©dzie. * Standardowo . {$X+) Zaai©g . globalny Opia . Standardowe ustawienie dyrektywy powo Standardowo : {$S+} ustawienie zgodnuŒci pomi©dzy typem P( asi©g : lokalny i tablicami znaków zaczynajÑcymi ai© od indi zerowego oraz poçwàlà ãà traktowanie fuç Opis . Standardowe ustawienie dyrektywy powoduje jako prucedur,powodujÑc zignorowanie ich w autornatyczne generowanie kodu,który podezas *, ków. wywoˆania procedury lub funkeji powoduje kãn. trol© dost©pnej pami©ci na zmienne lokalne. Je¾eli wystÑpi brak takiej pami©ci lub obszar jej Standardowo {$y+) ‹'.‚i jestza maˆy,to program zostanie zatrzymany i zostanie wy„wietlony komunikat o bˆ©dzie. Zasi©g . globalny :ˆS=:: :*,;"`* 0 . Standardowe ustawienie dyrektywy daje mc woŒ‚ wyŒwietlenia symboli i odwoˆaä do niet Standardowo : {$T-} pomocÑ okienka Object Browser.Dyrektywa st©pna tylko w Œrodowisku TPX. Zasi©g . globalny ,.*"ç G:,; Opis . Dyrektywa okreŒla rodzaj wska«nika generowa- * ***;** Dyrektywy parametryczne nego przeç operator Q.Je¾eli dyrektywa jeat wyˆÑczona {$T-),to rezultatem u¾ycia operatora '**"'*" Dyrektywy parametryczne pozwalajÑ na okreŒlenie rozmiaru segme* Q jest typ Pointer,który jest kompatybilny ze . stosu dla programu,roçmiaru minimalnego oraz maksymalnego ste wszystkirni typami wska«nikowymi.Gdy dyrekty- przeznaezonej na zmienne dynamiczne tworzone podezas dziaˆania p wa jest wˆÑczona {$T+},to wynikiem jest gramu,a tak¾e na okreŒlenie nazw plików,które majÑ zosta¹ doˆÑcçc wska«nik na zmiennÑ okreŒlone o t u (^T ). do ro amu od z P Œ'*' p c as kompçlac*ç.Nazwa dyrektywy skˆada si© z lit* * poprzedzonej znakiem $ oraz parametru i umiesçezonajest w nawias* * I klamrowych {). Standardowo . {$V+} ` $I Nazwa Pliku Zasi©g . lokalny * Zaai©g . lokalny Opis Standardowe ustawienie dyrektywy powoduje Œci- G* * sˆÑ kontrol© zadeklarowanego i aktualnego ;1>*:.: OPis : z pomocÑ tej dyrektywy nakazujemy kompilato* r wç doˆ czençe do k ˆ om ancueha,powodu*Ñc prçy wçgksze* dˆugoŒeç aktu- * pçlowanego programu plik alnej wystÑpienie bˆ©du.Przy dyrektywie ¾ którego naçw© podajemy jako parametr.Rozs2 rçenie nazw wyˆÑczone* {$V-) kontrola ta nie wyst©puje. y plçku standardowo przyjmowa: jest jako.PAS.W ãàçw* çe pliku mo¾emy u¾ *Ki;. „cie¾ki dost©pu.Je¾eli Œcie¾ka dost©pu nie wyst puje,to dany plik posçukiwany jest najpierw katalogu bie¾Ñcym,a nast©pnie w kataloga* okreŒlonych w polu Inelude directories okien* P.Michaˆkiewicz,I.—wituszak Programowanie w Turbo Pascal 7.0 8 - ç opcji Menu I Directories. Nale¾y pami©ta¹, ¾e dy. rektywy tej nie wolno u¾ywa¹ wewnÑtrz instrukcjl * zˆo¾onej. $L Nazwa Pliku le¾y pami©ta¹, ¾e nie mo¾e byä on mniejaz minimalnego rozmiaru sterty. $O Nazwa Moduˆu Zasi©g . lohalny Zasi©g . lohalny Opis . Dyrektywa ohreŒla modul o podanej nazwie j Opia . z pomocÑ tej dyrektywy nakazujemy kompilatoù . nahladh©.Dyrektywa ta musi wyatÑpi¹ bez rowi doˆÑczenie do kompilowanego programu lub Œrednio po klauzuli uaes w prograrnie. modulu pliku,który jest ju¾ skompilowany i g* siada rozaçerzenie.OBJ,przez podanie jeg* Dyrektywy warunkowe nazwyjako p p * ru' *e je t ko OB*T.W * Dl*ktywy warunhowe pozwala*jÑ na warunhowÑ hompilacj© cz©Œci h* standardo programu w oparciu o okre„lone nazwy symboli. zwie pliku mo¾emy u¾y¹ Œcie¾ki dost©pu.Je¾eli Œcie¾ka dost©pu nie wyst©puje,to dany plik poszu. kiwany jest najpierw w katalogu bie¾Ñcym,a ,rH*v; $DEFINE Nazwa Syçnbolu naat©pnie w katalogach okreŒlonych w polu Obù *r*„r‹: Dyrehtywa ta slu¾y do definiowania nazwy aymbolu,htóry b©dzie u ject directories okienka "Directoria",które jest . wany przez pozostale dyrektywy warunkowe.Nazwy nadawane ayni wywoˆywane za pomocÑ opcji Menu I Directories, * * lom spelniajÑ te aame reguly co identyfihatory j©zyha Turbo Pas* Nale¾y pami©ta¹,¾e dyrektywy tej nie wolno u¾y* . Symbole odpowiadajÑ zmiennym typu Boolean,a dyrektywa $DEFl1 wa¹ wewnÑtrz instrukcji zlo¾onej.Przewa¾nie * * *I*'' okreŒla ich wartoŒ¹ jaho true (prawda).Nie zachodzi jednah ¾ad dyrektywa tajeat atoaowana do dolÑczenia zewn©- . zale¾noŒ¹ pomi©dzy zdefiniowanymi symbolami,a identyfihatorami u: trznych procedur i funkcji napisanych w j©zyku * '. wanymi w programie,co pozwala na u¾ywanie tej aançej nazwy asaembler. *¹** ohreŒlenia aymbolu i na przyhlad zmiennej : J©zyh Turbo Paacal definiç 1ç** G*c* atandardowo naat©pujÑce aymbole: $M stos,min sterty,maz sterty VER70 - gdy wskazuje wersj© 7.0j©zyha Turbo Pascal.In Zaai©g : globalny wersje j©zyha majÑ symbole ró¾niÑce ai© numere* Opis : Za pomocÑ tej dyrektywy mo¾emy okre„li¹ rozù np.j©zyh Turbo Pascal 5.5poaiada aynçbol VER5S miar pami©ci przeznaczonej dla segmentu stosu, oraz sterty.W dyrektywie znajdujÑ si© nast©pu)Ñ *:,* MSDOS - gdy ayatemem operacyjnym jest MS-DOS lub P ce parametry: DOS. atoa - okreŒla rozmiar aegmentu stoau w bajtach.' ** CPUB6 - gdy proceaor nale¾y do rodziny proceaorów 80x86. 57 Standardowo przyjmowanyjeat rozmiar 163&1* CpUB7 - gdy wy*-yty zostanie koprocesor arytmetyczny z r bajtów,zaŒ makaymalny rozmiar wyno*; k _ 65536bajtów; dziny 80x87. min sterty - okreŒla minimalny rozmiar sterty w ba*tac* ; ** U*EF Nazwa Symbolu który standardowo wyççoai 0bajtów i nie motet Dyrehtywa ta jeat przeciwieästwem dyrektywy $DEFINE i okreŒl by‚ wi©kazy ni¾ 655360bajtów; *: wart*gä zdefiniowanego symbolujako false (faˆsz). max aterty - okreŒla maksymalny rozmiar sterty w bajtac* * * 88 P. Michaˆkiewicz, I. —wituszak Programowanie w Turbo Pascal 7.0 I,OZOsçaçe uy, cn*y** y "~' ~' "*- -* * . KO M P I LATO R ZEWN ¨TRZNY PosiadajÑc zdefiniowane symbole, pozostaˆe dyrektywy warunkowe wy. korçystuje si© w nast©pujÑcych konstç-ukcjach: Oprócz zintegrowanych „rodowi8k pracy TUftBO i 1'PX mo¾emy kor $ I Fxxx Nazwa Symbolu 8ta¹ z kornpilatora zewn©trznego o nazwie TPC.EXE, który wywoˆywa jest z linii komend systemu DOS. Skˆadnia takiej komendyje8t nast©) $ENDIF jÑca: oraz $I Fxxx Nazwa Symbolu $ELSE $ENDIF gdzie jako $IFxxx mogÑ wystÑpi‚ nast©pujÑce dyrektywy: *IFDEF - powoduje skompilowanie tek8tu programu wys* pujÑcego po tej dyrektywie, je¾eli ãàçwà symboh zostaäa zdefçniowana. $IFNI7EF - powoduje 8kompilowanie tekstu programu wys* pujÑcego po tej dyrektywie, je¾eli nazwa symbolu n* zostaäa zdefiniowana. *IFOPT - powoduje skompilowanie tekstu programu v przeˆÑcznik pujÑcego po tej dyrektywie, je¾eli stan przeˆÑc w dyrektywie odpowiada aktualnie ustawionej ktywie przeˆÑcznikowej. Przykˆady u¾ycia dyrektyw warunkowych: {$IFOPT N+} type Real=Extended; {$ENDIF} {$ IFDEF CPUB7 {$N+} type Real=Extended; {$ELSE} {$N-} type Extended=Real; {$ENDIF} TPC [opcje) nazwa pliku (opcje) gdzie przez opcjonalny parametr opcje okreŒla si© dziaˆanie kompilato Je¾eli w nazwie pliku nie podamy roz8zerzenia, to dumyŒlnie poszukiv ny b©dzie plik o rozszerzeniu.PAS. Gdy jednak naaz plik nie posia rozszerzenia, to jego nazw© nale¾y zakoäczy¹ kropk*. Opcje mogÑ zaczyna¹ si© znakiem / lub znakiem -, ale gdy u¾ywa* znaku -, to musi wy8tÑpi¹ od8t©p mi©dzy opcjami, np. zapisowi TPC /IC:\KATALOG PROGRAM /$A+/$B+ i odpowiada TPC -IC:\KATALOG PROGRAM -$A+ -$B+ ***; * Mo¾emy tak¾e przy wypisywaniu opcji u¾y¹ zapisu skróconego, kt* *t u¾ywa tylko jednego znaku $, np.: F,* ; TPC PROGRAM /$A+,B+ **f; :,. ZamlaBt TPC PROGRAM /$A+/$H+ Mo¾liwoŒ¹ ta nie dotyczyjednak opcyi $M, której parametry 8Ñ oddzielo przecinkami jak przy zapi8ie skróconym. Mo¾emy wyró¾ni¹ opcje: * * 1) odpowiadajÑce dyrektywom kompilatora * 2) trybu pracy kompilatora 3) trybu pracy debuggera , 4) katalogowe .*ç* ' g0 P. Michaˆkiewicz, l. —wituszak Programowanie w Turbo Pasca! 7.0 Opcje odpowiadajÑce dyrektywom kompilatora Poni¾aza tabela przedstawia opcje kompilatora zewn©trznego i ich odpa, wiedniki w menu Options I Compiler zintegrowanego Œrodowiska pracy, OPCJA MENU OPTIONS I COMPILER /$A Word ali data $B Complete boolean eval.. /$D Debu infornçation...... /$E Emulation.... /$F Force Far Calls /$G 286instructions.... /$I I/O checking....... /$L Local aymbols.... /$N 8087/80287... /$0 Overla a allowed.... /$P Open parameters.... /$Q Overtlow checking.... /$R Ran echeckin.. i !!** /$S Stack checkin.. IN II /$T T e é o erator.... * **,1I I /$V Strict var-string.... /$X Extended ayntax.... /Dnazwy Conditional defines opcja /$Matos,min,max atus - Staek size mçn - Low heap lçm t max - High heap limit Nale¾y pami©ta¹,¾e ustawienie dyrektywy w tekŒcie powoduje F ni©cie odpowiadajÑcej jej upcji ustawionej podczas wywuˆywania latora zewn©trznego. II 92 P.Michaˆkiewicz,I.—wituszak 1'*** Przyklady: TPC /IC:\TP\PROGRAMY GRA /$M16384,0,655360 TPC MAGAZYN /DZAPISZ;DRUKUJ/$A+ TPC MAGAZYN /DZAPISZ/DDRUKUJ/$A+ h t Ostatnie dwa przykˆady aÑ równowa¾ne. "* Opcje trybu pracy kompitatora Poza opcjÑ /!* pozostaˆe opcje odpowiadajÑ przedstawionynç æu ut*s'* komendom z menu.Nie mo¾najednoczeŒnie u¾ywa¹ opcji /M i lB. %‹** t ' odpowiada komendzie Compile I áuild ç n odpowiada komendzie Search I Find En menu odpowiada komendzie Options I Linker I : Buf3Eer z menu odpowiada komendzie Compile I Make z n - eliminuje wyŒwietlanie nazw plików i ãç ***u* : rów lin� podczas kompilaeji :+*.Opcje trybu pracy debuggera /G . *4 : * Opcje katalogowe . rx, - odpowiada komendzie Options I Linker I : File odpowiednio - odæowiada komendzie Options I Debu* I Debugging z menu Po ka¾dej opcji katalogowej nale¾y okreŒliä Œcie¾k© doat©pu do odpow nçego katalogu np /IDù\TP7\PROGRAMY ; . odpowiada kumendzie Options I Director: EXE and TPU directory z menu odpowiada komendzie Options I Compiler I clude directoriea z menu okreŒla miejace poˆo¾enia pliku konfigura negu TPC.CFG Programowanie w Turbo Pascal 7.0 Unit directnries z menu Piik TPC.CFG Po uruchomieniu kompilatora zewn©trznego w pierwszej kolejnoŒci W bie¾Ñcym katalogu poszukiwanyjestjego plik konóguracyjny o naz*vie TPC.CFG. Je¾eli nie zostanie on znaleziony w bie¾Ñcynç katalogu, * szukany jest w katalogu zawierajÑcym kompilator çewn©trzny TPC.EXE. Plik ten zawiera infoççnacje, jakie opcje kompilatnra majÑ zosta¹ dod*ne do opcji u¾ytych podczas jego wywoˆania. Mo¾e on tak¾e zawiera¹ nazw© prograrnu, który ma zosta¹ skompiluwany. Informaeje te *dla ka¾dej opcji umieszcza si© w osobnej lin�, przykladowo: /ID:\TP7\PROGRAMY /UD:\TP7\MODU�Y /$A+ /$B+ Je¾eli plik TYC.CFG zawiera powy¾sze dane, to po wywoˆaniu: TPC PROGRAM kompilator zewn©trzny zoatanie uruchomiony, takjak po naat©pujÑcym * wywoˆaniu: TPC /ID:\TP7\PROGRAMY /UD:\TP7\MODU�Y PROGRAM /$A+ /B+ 94 P. Michaˆkiewicz, I. —wituszak .,1**: Struktura programu Ka¾dy program w j©zyku Turbo Paseal ma okreŒlonÑ budow©. N1, wyró¾ni¹ w nim nagˆówek, klauzul© importu modulów oraz blok g: programu. Naglówek okreŒla nazw© programu, zaŒ blok realizuje * nanie przez program zadanego algorytmu. Klauzula imæortu m pozwala na doˆÑczenie do programu kodów gotowych elementóv procedur lub funkcji. Zarówno naglówek programu, jak i klauzul portu wystgpujÑ opcjonalnie. W celu osiÑgni©cia proatej i przejrzystej postaci zapisu programu or wzgl©du na ˆatwiejsze uruchamianie i testowanie programu mo¾ei bloku glównym programu wydzieli¹ cz©Œci kodu w postaci proc i fuççkcji, które podobnie jak program skˆadajÑ si© z nagˆówka i b; zaŒ dokˆadna ich budowa opisanajest w rozdziale "Procedury i fun* BLOKI Blok" zarówno programu gˆównego,jak i procedury czy funkcji,je; cz©Œ¹ programu skˆadajÑea si© z cz©Œci deklaracyjnej oraz instrukcy Cz©Œ¹ deklaracyjna wyat©puje opcjonalnie.W cz©Œci deklaracyjnej bl definiujemy: ,;'* / etykiety / atale / typy ‹EYjt‹ / zmienne / procedury / funkcje « ù 1* Wazystkie zadeklarowane element s dost©pne tylko wewnÑtrz dane **x bloku. :."*** ë. * Programowanie w Turbo Pascal 7.0 bloków: 1. Bez c穌i deklaracyjnej begin writeln('Ten blok zawiera tylko jednÑ instrukcj©'); end 2. Z cz©ŒciÑ deklaracyjn* type tablica=array[0..100) of integer; vàç x:tablica; begiã writeln('Podaj elementy tablicy'); end WewnÑtrz bloku mo¾e zosta¹ umieszczony inny blok, np.: (*1*) type tablica=array[0..10) of integer; var X:tablica; procedure sumuj(m:integer); (*2*) var Z,N:integer; begin z:=0; for N:=1 to m do Z:=Z+X[N]; writeln(Z); (*2*) end; begin sumuj(3); (*1*) end Blok gˆówny ograniczony jest za pomocÑ znaków (*1*), zaŒ blok wewn* trzny za pomocÑ znaków (*2*). Zmienna X typu tablicowego zadekla*' wana w bloku gˆównym jest dost©pna tak¾e w bloku wewn©trznym, *e zmienne Z i N zadeklarowane w bloku wewn©trznym nie sÑ dost©pne æ bloku gˆównym. Zmienne X jest okreŒlana jako zmienna globalna, Z* a*a zadeklarujemy zmiennÑ lokalnÑ o tym samym identyfçkuç, *ç*ze co zm na globalna w bluku gˆównyçn, to spowodujemy tzw. przykrycie zrnie* globalnej. Przykˆadowo, gdy defçnicja procedury z powy¾szego pç*ykˆ byˆaby nast©pujÑca: procedure sumuj(m:iãteger); (*2*) var X,N:integer; begin X:=0; for N:=1 to m do X:=X+N; writeln(X); (*2*) end; tu za pomocÑ zmiennej X nie mo¾emy odwoˆa¹ si© w bloku wewn©tr¾ do tablicy zadeklarowanej w bloku gˆównynç. Ogólnie mu¾na powied ¾e: - zmienna lokalna przykrywa zmiennÑ glubalnÑ o tym samynç iden katorze, - zasi©g identyfikatora pola rekurdu ograniczony jeat do deklaracj kordu oraz do odwoˆania ai© do rekordu za pomocÑ zmiennej rekc wej lub instrukcji wiѾÑcej with, - zaai©g akˆadników obiektu ograniczunyjest do deklaracji obiektu i metod, wszyatkich obiektów potOmnych oraz du odwoˆania si* obiektu za pomocÑ zmiennej obiektowej lub instrukcji wiѾÑcej w PROGRAMY `?*3 * Program w j©zyku Turbo Pascal ma nast©pujÑcÑ struktur©: program Nazwa Programu ( Lista Parametrów ); uses Nazwy_Moduˆów; blok. Pierwaza linia tej struktury, okre„lana mianem nagˆówka, aˆu¾, .*w ; ** (i okreŒlenia nazwy programu oraz liaty identyfikatorów dla parame , przekazywanych do programu. Identyfçkatory te muazÑ by¹ oddzie ** ;, przecinkami. Nazwa programu wyst©puje po aˆowie program, a * parametrów wyat©puje opcjonalnie. gá P. Michaˆkiewicz, l. —wituszak Programowanie w Turbo Pascal 7.0 sçywane w programçe. uçsçà çà *esç wyazezegomçana po sçowçe uses i â wyat©puje opcjonalnie. Identyfikatory moduˆów oddziela si© przecinka, mi. Opis moduˆów znajduje si© w nast©pnym punkcie rozdziaˆu. Linia trzecia okreŒla blok gˆówny programu, którego struktura zostaˆa opisana w poprzednim punkcie. Nale¾y zapami©ta¹, ¾e blok gˆówny programu zawaze jest zakoäczony kropkÑ. Przykˆady programów: 1. Program akˆadajÑcy si© tylko z bloku begin writeln(' 5ie ma !'); end. 2. Program z nagˆówkiem program Uwaga; begin writeln('Uwaga !'/; end. 3. Program u¾ywajÑcy procedury clracr z moduˆu Crt uses Crt ; begin clrscr; writeln('Uwaga ! Ten program ma parametry'); end. MODU�Y Cz©sto u¾ywane deklaracje ataˆych, typów, zmiennych, proeedur i fi mo¾emy oddzieli¹ od programu i umie„ci¹ w tzw. module. Dzi©ki ra¾ utworzone przez programist© elementy, które zostaˆy umieaz w module, mo¾e on wykorzystywa¹ w wielu programach. Moduˆy mo¾na wykorzysta¹ do tematycznego podziaˆu utworzo: elementów programowych, czego przykˆadem sÑ standardowe mo j©zyka Turbo Paacal: Syatem, Doa, WinDoa, Crt, Printer, O*e: Stringa, Graph. Dzi©ki moduˆom mo¾liwa jest tzw. modularyzacja gramu. Pozwala ona na pisanie programów zwi©zˆych i przejrzysty* przede wszyatkim na ˆatwiejsze ich uruchamianie. 98 P. Michaˆkiewicz, I. —wituszak unit Nazwa_Moduˆu; iãterface uses Nazwy Moduˆów; deklaracje typów; deklaracje staˆych; deklaracje*zmiennych; nagˆówki procedur i*funkcji; implementation uses Nazwy Moduˆów; deklaracje procedur i funkcji; cz©Œ¹ inicjujÑca; end. Podobnie jak program, moduˆ zawiera nagˆówek, w którym po sˆo unit wyst©puje nazwa moduˆu. W przeeiwieästwie do programu ãàç moduˆu muai wystÑpi¹, poaiewa¾ za jej pomocÑ odwoˆujemy si© w * gramie do danego moduˆu. Z tego te¾ powodu w jednym programie mo¾emy u¾ywa¹ dwóch ró«nych moduˆów o tej samej nazwie. Nal* tak¾e pami©ta¹, ¾e nazwa pliku «ródˆowego i binarnego moduˆu m odpowiada‚ nazwie moduˆu u¾ytej w nagˆówku moduˆu, z dokˆadnoŒ do pierwszych 8 znaków, co nie obowiÑzuje w przypadku progran poniewa¾ kompilator nie bierze nazwy programu pod uwag©. Cz©Œ¹ moduˆu po sˆowie interface sˆu¾y do deklaracji typów, ataˆy, zmiennych oraz nagˆówków procedur i funkcji, które b©dÑ dostgpne programie lub innych moduˆach, które importujÑ dany moduˆ. W cz© deklaracyjnej umieszcza ai© tylko nagˆówki procedur i funkcji, zaŒ i deklaracje umieszcza ai© w cz©Œci implementacyjnej moduˆu, wyst©puj cej po. sˆowie implementation. WyjÑtkiem od tej zasadyjest umieszczen procedury lub funkcji z dyrektywÑ inline w cz©Œei deklaracyjnej. Cz©„¹ moduˆu rozpoezynajÑca si© sˆowem implementation, poza dekl racjÑ procedur i funkcji z cz©Œci interface, pozwala na umieszczen ataˆych, zmiennych, procedur i funkcji, które dost©pne sÑ tylko w dany module. Ku1.*ççuŒ¹ deklarowania procedur i funkcji w cz©„ci impleme* tacyjnej jest duwolna. Mo¾na pominѹ liat© parametrów, która zosta3 zadeklarowana w nagˆówku danej procedury lub funkcji w cz©Œci inte: face. Cz©„¹ inicjujÑca moduˆu zawiera instrukcje, które wykonywane sÑ, chwili importowania moduˆu. Ka¾dy moduˆ koäczy sˆowo end z kropk* Programowanie w Turbo Pascal 7.0 g* Poni¾sze przykˆady przedstawiajÑ zale¾noŒci: bezpoŒrcdnie pomi©dzy prograrnem i modulàmi program Test; uses Modu*1,Moduˆ2; begin end. unit Moduˆl; interface implementntioã end. unit Moduˆ2; interface implementation eãd. Program Testjest bezpoŒrednio zale¾ny od moduˆów Moduˆl i Moduˆ* poŒrednie pomi©dzy programem i modu*àmi program Test; uses Moduˆl; begin end. unit Moduˆl; interface uses Moduˆ2; implementation end. unit Moduˆ2; *. Michalkiewicz, I. —wituszak implementation end. *.z. W tym przypadku prngram Test jest bezpoŒrednio zale¾ny tylko * . moduˆu Moduˆl,za„ poŒrednio zale¾ny od moduˆu Moduˆ2.Modu zale¾y bezpoŒrednio od moduˆu Moduˆ2.Oçnacza to,¾e identyfikato *tù, zadeklarowane w module Moduˆ2aÑ dost©pne w module Moduˆl,ale n ;*;*.,; sÑ dost©pne w pro*ramie Test. modu*y wzajemn.ie zàle¾ãe od siebie : ù.r**. Mfi \: :boi* * Program Test; uses Crt, Modu*l; begin clrscr; Pisz XY(10,10,'NaciŒnij dowolny klawisz'); Pisz XY(100,100,'Ten napis nie zostanie wyŒwietlony') end. unit Moduˆl; ù interface procedure Pisz XY ( x,y: integer; komunikat: string implementation uses Crt, Moduˆ2; procedure Pisz XY ( x,y: integer; tekst: string ); begin if ( x in [1..80] ) and ( y in [1..25) ) then begin gotoxy(x,y); write(tekst); end else Komuãikat('Wspóˆrz©dãe poza zakresem :'); end; end. unit Moduˆ2; interface procedure Komunikat(kom:strinq); implementation uses Moduˆl; Programowanie w Turbo Pascal 7.0 procedure Komunikat(kom:strçãg); ùù*,.`* ~vv***..v..å begin PiszXY (1,1,' Uwaga - ' +kom ) ; SYMBOLE PODSTAWOWE end J©zyk Turbo Pascal posiada nast©pujÑce symbole,których u¾ywa s: ;-,i'‹; Modul2w cz©Œci implementacyjnej importuje ç modulu Modull proceù * ppja* znakitst riç* f ' spacja (niewidoczny znak oi dur© PiazXY,której u¾ywa w deklaraeji procedury Komunikat,Z* Modull importuje z moduˆu Modul2procedur© Komunikat,której u¾yWa Zestaw litex skˆada si© z nast©pujÑcych znaków: podezas deklaracji procedury PiszXY.Takie wzajemne zale¾noŒe* * mo¾liwe tylko dlatego,¾e u¾ycie klauzuli uses w cz©Œci implementacyjn* A B C D E F G H I J K L M N O P Q R S T U V W X Y Z powoduje ukrycie wewn©trznych odwoˆaä w importowanym module, a b c d e f g h i j k 1m n o p q r a t u v w x y z Nale¾y paçni©ta¹,¾e cz©Œei interface nie mogÑ byä wzajemnie zale¾ne. Je¾eli chcielibyŒmy umieŒci‚ w procedurach PiszXY i Komunikat dodaw oraz znaku podkreŒlenia (*). kowy parametr okreŒlajÑcy okno na ekranie np.za pomoeÑ typu: Zest„w cyfr sklada si© z nast©pujÑcych znaków: type 0123456789 okno = record Do znaków specjalnych nale¾Ñ: xl,yl,x2,y2: integer; kolor okna : byte; +-*/=<>(].,():;'^*{}*# end; a naglówki mialyby nast©pujÑcÑ postaä: ,oraz podwójne znaki sterujÑce: <= >= ..(* *) (..) procedure Komunikat(ekran: okno ; kom:string); procedure PiszXY (ekran : okno ; x,y : integer ; komunika ` ** ; z których (* i *) mo¾na u¾ywa¹ zamiast znaków { i },zaŒ znaków ( string ) ; zamiaet znaków [ i ].Do znaków sterujÑcych nale¾Ñ znaki o kodach A; to deklaracja tego typu nie moglaby by¹ umieszezona w cz©Œciach in ,* od 0do 31. face obu tych moduˆów.RozwiÑzaniem tego problemu jest utworze * nowego moduˆu,który slu¾ylby tylko do zadeklarowania typu okno,n '; IDEN1'YFIKATORY unit Typokno; * Identyfikatory slu¾Ñ do opisu programów,moduˆów,typów,stal: interface * ' zmiennych,funkeji,proeedur,metod oraz pól w rekordach i obiekta type ***** OkreŒlajÑ one nazw© danego elementu programu i mogÑ by¹ zbudow okno = record z liter,znaku podkreŒlenia (*) oraz cyfr.Znakiem poezÑtkowym musi xl,yl,x2,y2: integer ; litera.lub znak podkreŒlenia.DlugoŒ¹ identyfikatora mo¾e by¹ dowo: kolor okna : byte; *** ale nale¾y pami©ta¹,¾e tylko pierwsze 63znaki sÑ znaczÑce. „; end ; ,j * ; Przykladowe identyfikatory: implementatioã s;*;-` end. nazwisko x wysokoŒ¹ 123 zmiennal 102 P. Michaˆkiewicz, I. —wituszak Programowanie w Turbo Pascal 7.0 U r z dyrektywy. r ~ *ujãaywællC Iê *Ñ I*yc w tolinacie dçiesigtnym * azezególnym znaczeniu, aÑ to tzw. àäowà kluczowe ora szesnaatkowym nych dla liczb caäk ki s liczb caˆkowitych jest uzale¾niony od typu o tych i maksymalne wartoŒci mo¾e przyj Sˆowa kluczowe nie mogÑ by¹ zmienione przez programistg; aÑ oççe typu Longint mowa, zarezerwowane przez j©zyk i majÑ ustalone znaczenie. Do àäów kluczoù w zakresie ud -2147483648 do 2147483647. wychj©zyka Turbo Pascal nale¾Ñ nast©pàjÑce sˆowa: Liczby rçecçywiste mogÑ by¹ zapisywane tylko w foçmacie dziesi tn and if repeat Zakres liczb rzecç wist ch zale¾y od te o czy w kornputerçe jest ko f.: cesor arytmetyczny.W przypadku gdy koprocesor nie wyst©puje,çà1 arra im lementation shi liczb r 9zywiatych3ŽkreŒla tyæ Real o wartoŒciach ç przedçiaˆu asm in s * * begin inherited shr ç*C;*; 2.910 do 1.710.Gdy mo¾emy u¾y¹ koprocesora,to çwigksç* ù case inline string *s‹ zakres liczb rzeeçywistych do przedziaˆu od 3.4*10*4932d01.1*104 który to zakres definiuje typ Extended. construc:tor labelface en U¾ywajÑe liczb rzecçywistych mo¾emy u¾ywa¹ do ich zapisu tzw.not destructor mod t e Yp naukowej.Ma ona naat©pujÑcy fornçat: div nil unit do not until mEc lub mec downto object uses gdzie: else of var for procedure xor funetion program - liczba caˆkowita ze znakiern,okreŒlajÑca cec goto record liczby W odró¾nieniu od aˆów kluezowych,znaczenie dyrektyw mo¾e by¹ zmie- r." E,e - aymbole notacji naukowej nione przez programist©,ale nie jest to zalecane.Do standardowych Przykˆady licçb rzecz wiat dyrektyw j©zyka nale¾Ñ nast©pujÑce dyrektywy: y ych w notacji naukowej: absolute forward private . 1.5e4 oznacza 1.5*10q assembler interrupt public 6.7E-2 oznacza 6.7*102 I 'I ' t 1 y* Œ* * -2.3E-3 oznacza -2.3* 1 -3 external near vir ua 0 far *** ETYK*Ty LICZBY Etykiety aäu¾Ñ do oznaczenia miejsc w programie,do których zostani prçekazane aterowanie,czyli oçwàlà* n w ro p JÑ a przeJŒeçe z dowolnego miejac amie d Wa. p *' o mçe sca w któr W j©zyku Turbo Pascal mamy mo¾liwoŒ¹ korzystania ç licçb zapçsy J , ym zostanie dana etykieta umieszeçon* nych w systemie dçiesi©tnym i szesnastkowym.Liczby szesnastk wB * * Przkk çanie aterowania wykonuje sig za pomoeÑ instrukeji goto.Nazw poprçedzane aÑ znakiem $,np.liczba $10w systemçe szesnastkowym t t. y oçe by¹ okre„lona za pomocÑ identyfikatora lub liczby caˆkc ezzna*a ` ,1ç zakresu od 0do 9999.Nale¾ amç od owçada lçezbçe 16w s stemçe dççesç tn .Waç stkçe lçezb b : ˆ y p ta¹ ze zer p © , a wçodÑce ni odro¾nça et kie JÑ y t mç dz sob Moze 1 © y Ñ,tzn.¾e et kie $ sÑ traktowane Jako lçezby zapçaane w systemçe dzçesçgtnym. y ty 0099ç 99okre„lajÑ * wyró¾ni‚ liezby caˆkowite oraz rçecçywiste. : E a*Ñ etykiet©.Deklaracja etykiety ma nast©pujÑcÑ posta¹: Label lista etykiet 104 P.Michaˆkiewicz,I.—wituszak Programowanie w Turbo Pascal 7.0 105 **lZlc çç*u„*cuyãicu v*irà**à r przecinkiem, np.: ù Label start,koniec; *.AãCUCHY �aäcuchy Znaków zbudowane aÑ ze çnaków rozsZerzonego kodu ASCII, W skˆad ˆaäcucha wchodzÑ dowolne Znaki, wˆÑezajÑc w to znak spa* (niewidoczny odst©p), liczby caˆkowite poprzedzone znakiem #, o war*. Œciach od 0 do 255 oraz znaki aterujÑce uzyskiwane za pomocÑ Znaku * i litery. Przykˆady: 'JAROSLAW �YCZYWEK' 'Michaˆkiewicz'N13*10'—wituszak' 'Irek'"C'Gosia' " Ostatni przykˆad okreŒla ˆaäcuch pusty. Poniewa¾ znaki widoczne umie, sZczone sÑ w apostrofaeh ('), to w celu umiesZczenia apostrofu w ˆaäeuchu* nale¾y u¾y¹ go podwójnie, np.: 'abc"def' co spowoduje, ¾e mi©dzy Znakami c i d umieszczony Zostanie apostrof, KOMENTARZE KomentarZjest to ciÑg znaków umieszczonych w nawiasach klamrowyrb (} lub ograniczony za pomocÑ dwuZnaków (* *). Nale¾y pami©ta¹, * komentarze sÑ ignorowane przez kompilator. Je¾eli po nawiasie klanr rowym ( lub dwuznaku (* wyst©puje znak $, to komentarZ traktowan) jestjako dyrektywa kompilatora. Przykˆadowe komentarze: ' { To jest komentarz} (* To takie jest komentarz *) Przykˆadowe dyrektywy: {sx+} (*$x+*) ,: TYP „ *,"5 ! LOGICZNY aiq ;i* 3t**j, "‹**.il ,..**, Cb PROSTY ˆAãCUCHOWY WSKAæNIKOWY RZECZYWISTY STRUKTURALNY BOOLEAN BYTEBOOL WORDBOOL LONGBOOL REAL SINGLE DOUBLE EXTENDED COMP TABLICOWY REKORDOWY O Bi EKTOWY ZBIOROWY PLIKOWY CA*KOWITY INTIGER SHORTINT LONGINT BYTE WORD ZNAKOWY WYLICZENIOWY OKROJONY PROCEDURALNY 106 P. Michaˆkiewicz, I. —wituszak Programowanie w Turbo Pascal 7.0 Typydanych Ka¾da staˆa, zmienna, wyra¾enie czy te¾ funkeja jest okreŒlonegã typu, Typ ten dokˆadnie charakteryçuje çbiór wartuŒci ærçyjmowanyclç pç*zez wy¾ej wymienione elementy. Wj©zyku Turbu ä'ascal mo¾emy wyró¾ni¹ standardowe typy dla liczb caˆkowitych, rzecçywistych, znaków i war*, Œci logicznyeh. Dodatkowo mo¾erny okreŒli¹ typy definiowane przeç u¾ytkownika. Nale¾Ñ do nich tyæ: okrojony, wyliczeniowy, wskaçnikowy, tablicowy, rekordowy, obiektowy, zbiorowy, plikowy i proceduralny, ù*,** Rysunek na sLr.107 przedstawia struktur© typów wj©zyku Turbo Pascal. TYP CA�KOWITY Przykˆad: Dane tego typu stanowiÑ zbiór lieçb caˆkowitych. Mo¾na wyró¾ni¹ pi©¹ type podtypów caˆkowitych ró¾niÑeych si© zakresem, a co çà tym idzie, OdlegˆoŒ¹ = Real; reprezentacjÑ bajtowÑ ka¾dego z nich.WartoŒci te przedstawia poni¾sza Waga = sinqle; tabelka: ZAKRES W BAJTACH ROZMIAR TYP �AãCUCHOWY Typ ˆaäcuehowy sˆuçy do deklarowania zmiennych skˆadajÑcych si Shortint -128..127 ciÑgów znaków. Dane tego typu zapami©tywane sÑ jako ciÑg znak* Integer -32768..32767 2 f które sÑ poprzedzone bajtem okreŒlajÑcym ich iloŒ¹.Poniewa¾ lic: -2147483648..214748364? 4 znaków okreŒlajeden bajt,wi©c typ Stringmo¾e skˆada¹ si© maksyã Lon *nt nie z 255znaków.Definiujemy go za pomocÑ sˆowa String,zaŒ dˆug Byte 0..255 *'* ˆaäcucha definiujemy za pomocÑ indeksu,którego wartoŒ¹ musi b 0..65635 2 ** * * zakresu od 1do 255.Brak indeksu powoduje ustawienie jego wartc Word na 255.Znak o indeksie 0zawiera infornçaej© o bie¾Ñcej dˆugoŒci dan* Przykˆad: * * ˆaäeucha i mo¾na go odeçyta¹ çà pomocÑ funkeji Length('âekst) l ‹***; funkcji Ord(Tekst[0)),gdzie Tekat jest çmiennÑ ˆaäcuchowÑ.Prçykˆ* type * deklaracji typów ˆaäcuchowych: Liczba Caˆkowita = integer; Liczba Caˆkowita Dodatnia = Word; type a=String; b=5tring[10]; TYP RZECZYWISTY c=5tring[ 123) ; Dane tego typu atanowiÑ zbiór liczb rzeczywistych. Mo¾na wyró¾nic pl podtypów rzeczywistych ró¾niÑcych si© zakresem, a co za tynç idzie, reprezentacjÑ bajtowÑ ka¾dego ç nich oraz liczbÑ miejsc znaczÑcy*bù WaxtoŒci te przedstawia tabelka. *:: W prçypadku defçniowania procedury lub funkeji, której parametr* mogÑ by¹ zmienne ˆaäcuehowe o ró¾nych dˆugoŒciach, mo¾emy u¾y¹ deklaracji identyfikatora OpenString jako nazwy typu albo deklara procedury lub funkeji u¾y¹ ˆÑcznie z dyrektywÑ {$P+) kompilato: Otrçymamy wtedy tzw. ˆaäcuchy otwarte. Przykˆad: Procedure Dodaj ( var Tekst : Openstring ); 108 P. Michaˆkiewicz, I. —wituszak Programowanie w Turbo Pascal 7.0 1 Sp+y Procedure Dodaj( var Tekst : 5tring ); begin end; ISP-1 Dla tak zdefiniowanej procedury Dodaj i dla nast©pujÑcych zmiennych uar x:5tçing; y:5tring[15]; wywoˆania poni¾aze aÑ poprawne: Dodaj(x); Dodaj(y); �aäeuchy o wi©ksçej dˆugoŒci mo¾emy tworçy¹, wykorzystujÑc typ PCh* opisany w typach wska«nikowych. T Y P Pft OCEDURALNY W przeciwieästwie do standardu j©çyka Paacal, j©zyk Turbo Pascaló traktuje procedury i funkejejako elementyj©zyka, które mo¾na przywi** zywa¹ do zmiennych i przesyla¹jako parametry. Deklarowanie zmiennej' tego typu jest podobne do delilaracji funkeji lub procedury, a ró¾ni siaf tym, ¾e po slowie funetion lub procedure nie wyst©puje identyfikatat¹ funkcji lub procedury. Przyklady deklaracji typów proceduralnych: * type a=Procedure; b=Procedure(n:Real); c=Function(m:5tring):Char; Nale¾y pami©ta¹, ¾e çmienne tego typu nie mogÑ by¹ zwracane funkej©. TYP WYLICZENIOWY Typ wyliczeniowy definiuje zbiór identyfikatorów oznacçajÑcych posze gólne wartoŒci przez ich wyliczenie. Przykladowe typy wylicçeniowe: 170 P. Michaˆkiewicz, I. —wituszak Dzieä Tygodnia=(pon,wto,Œro,czw,piÑ,sob,nie); Pˆe¹=(m©¾ezyzna,kobieta); UporzÑdkowanie danych typu wyliczeniowego wynika ç kolejnoŒc wyst©powania na liŒcie identyfikatorów ijest okreŒlane licçbÑ porzÑ wÑ. Liczba porzÑdkowa dla danej okreŒlonej prçeç pierwszy identy tnr jest równa zero i dla ka¾dej nast©pnej jest o jeden wi©ksza. Li porzÑdkowÑ wyznacza si© za pomocÑ funkeji Ord. Za pomocÑ funkeji ; i Succ mo¾emy wyznaeçy¹ poprçednik i nast©pnik danej wartoŒci wyliczeniowego, çaŒ za pomocÑ funkeji Low i High najmniejszÑ i naj ksçÑ wartoŒ¹ z danego çakresu. TYP OKROJONY Typ okrojony okreŒla podzbiór dowolnego typu porzÑdkowego lub v :yt ˆ ezeniowego, który ogranicça zakres dost©pnych wartoŒci danego t r***r porzÑdkowego. Przykladowe typy okrojone: type Rok=1990..1999; Maˆe Litery='a'..'z'; ;: **b'*' Dla zmiennej R typu Rok mo¾emy podstawi¹ tylko wartoŒci z zakresi 1990 do 1999, zaŒ podstawienie innych wartoŒci powoduje bˆÑd. TYP LOGICZNY t::*` Typ logiczny jeat to typ wylieçeniowy, który przyjmuje dwie warb ' okreŒlane za pomocÑ identyfikatorów False i True. Mo¾emy wyró: nast©pujÑce typy logiczne: ROZMIAR W BA*TTACH Boolean 1 ByteBool 1 WordBool 2 Lon Bool 4 Programowanie w Turbo Pascal 7.0 j*yp 1*u01eàê êlUZC *7lLy*uivwàu u,yinv - r-- z pozoataˆe typy logicçne mogÑ przyjmowa¹ ró¾ne wartuŒci porzÑdkowe. PodaumowujÑc, typ logiczny przyjmuje waçtoŒ¹ False,je¾elijego wartoŒ¹ porzÑdkowa jest równa 0, çaŒ True dla wartoŒci wi©kszych od zera. '1'YP ZNAKOWY Typ znakowy okreŒla zbiór znaków okreŒlonyclç przez rozszerzony zbiór znaków ASCII. WartoŒ¹ æorzÑdkowa, którÑ rno¾erny odczyta¹ za pomoeÑ funkcji Ord, okreŒla kod danego znaku. Przykˆadowe typy çnakowe: type Znak=Char Litera=Char; TYP WSKAæNIKOWY Typ wska«nikowy æozwala na okreŒlenie zmiennyclç, za ponçocÑ których * mo¾emy odwoˆa¹ ai© do obszarów pami©ci operacyjnej. Wyró¾niamy ! naat©pujÑce trzy deklaracje typu wska«nikowego: type Wsk*l = " Typ podstawowy; Wsk 2 = Pointer; Wsk 3 = P Char; Dehlaràcja 1 Deklaracja pierwsza okreŒla typ wska«nikowy sˆu«Ñcy d o deklaracji zmiennych, wskazujÑcyeh dane zdefçniowane za pomocÑ typu Typ*podù stawowy. Przykˆad: type Wsk = "Osoba; Osoba = record imi©, nazwisko: String(15]; wiek: Byte; end; var P:Wsk i ; gdzie zmienna P b©dzie mogˆa przechowywa¹ adres na atruktur© pami* opiaanÑ za pomocÑ typu Osoba. I 712 P. Michaˆkiewicz, I. —wituszak æqIY,5 Za pomocÑ drugiej deklaraeji definiujemy zmienne, które nie wsl okreŒlonych danych. WartoŒci typu Pointer aÑ jednak zgodne ç á typami waka«nikowymi. Deklaràcja 3 Deklaracja trzecia okreŒla typ wska«nikowy PGhar slu¾Ñcy do dekl zmiennych wskaçujÑcych ciÑgi znaków, które mo¾na okreŒli¹ jak cuchy dynamiczne. �açicuchy te nie majÑ z góry okreŒlonej dˆ* znaków, zaŒ ich dˆugoŒ¹ mo¾e wynosi¹ maksymalnie 65535 zn Ka¾dy ˆaäcuch dynamiczny jest zapami©tany jako tablica zn„ której oatatnim znakiem jeat çnak NULL (#0). Poniewa¾ ka¾da tablica zacçyna si© od indeksu zerowego, wi©c jej zapis zawaz nast©pujÑcy: array [O..X) of Char gdçie X oçnacza liczb© caˆkowitÑ wi©kszÑ od zera. Przykˆad: a) var Wsk:P Char begin * rF: Wsk:='Przykˆadowy ˆaäcuch znaków'; end. b) const Dana: array [0..2] of Char = 'Pr2ykˆadowy ˆaäcuch znaków'; var ù Wsk:P Char; begin Wsk:= * Dana " end. Obydwa przykˆady aÑ równowa¾ne, a w wyniku ich wykonania zmit Wak wskazuje na obaçar pami©ci çawierajÑcy kopi© danego ˆaäc* f çnaków. Po zastosowaniu dyrektywy *X wazyatkie tablice çnaków çacçynajÑc od indeksu zerowego odpowiadajÑ typowi PChar, co umo¾liwi wykon Programowanie w Turbo Pascal 7.0 êasL©pujÑcG*u ævu*wwioiuà. var Dane:array[0..1'1] of Char Wsk:P Char; Znak:Char; begin Wsk:=Dane; Z nak : =I*sk ( 15 ] ; * Znak:= Dane(15]; end. W wyniku tego podstawienia zmienna Wsk wskazuje na pierwsçy ele. -99i* * * ; ment tabliey Dane. Oçnacza to, ¾e zamiast ocçekiwanej çmiennej typu PChar, mo¾na çastosowaä tablic© zacçynajÑcÑ si© indeksem zerowym. Ostatêie dwie instrukcje sÑ wtedy równowa¾ne. Typ PCharjest çdefiniowany w module System nast©pujÑco: * :ur* type P Char = " Chaç; Procedury i funkcje u¾ywajÑce jako paramtrów zmiennych typu PCh* zawiera moduˆ Strings. PrzypisujÑc do zmienêej wska«nikowej sˆowo kluczowe nil mo¾emy okreŒli¹ zmiennÑ wska«êikowÑ, która nie wskazuje na ¾aden obszar pami©ci. TYP TABLICOWY Typ tablicowy okreŒla tablic© skˆadajÑcÑ si© ze staˆej liczby elementów okreŒloêego typu. Ka¾demu ‚lementowi w tablicy przyporzÑdkowany jest indeks okreŒlajÑcy jego pozycj© w tablicy. Ogólna deklaracja ma nast©pujÑeÑ posta¹: type Nazwa Tablicy = array [wymiary) of Typ Podstawowy; gdzie Typ*Podstawowy okreŒla typ elementów tablicy, çaŒ wynç çdef`çniowane sÑ naat©pujÑco: II! Zakres Dolny..Zakres Górny[,Zakres Dolny..Zakres Górny[,..,]) i Przykˆad: Ii 114 P. Michaˆkiewicz, I. —wituszak Y* Tablica Znaków=array[1..10] of Char; gdzie TablicaZnaków jest tablicÑ jednowymiarowÑ, akˆadajÑcÑ eá elem‚ntów typu Char. Dolny zakrea jest równy 1, zaŒ górny 10. elementami tablicy b©dÑ tablice, to definiujemy je jak w poniç przykˆadzie: type Tablica Linii=array[1..25] of array[1..80) of Cha* Tablic© takÑ mo¾emy w skrócie zapisaä w postaci: type Tablica Linii=array[1..25,1..80] of Char; Do okreŒlania wymiarów tablicy mo¾na u¾ywaä wartoŒci o typie po kowym, z wyjÑtkiem typu Longint i typów okrojonych opartych Longint. WŒród tablic mo¾emy wyró¾niä tablice: ù znakowejednowymiarowe o zakresie dolnym równym 0 (ze* ù otwarte *. dost©pu do pami©ei, ù dost©pu do portów. Znakowe tablice jednowymiarowe o zakresie dolnym równym 0 def wane sÑ nast©pujÑeo: type Tablica=array[O..x) of Char; gdzie X oznacza dodatniÑ liczb© caˆkowitÑ, wi©kszÑ od zera. Tablice takie przy uatawieniu dyrektywy {$X+} lub wˆÑczeniu * Extended syntax w menu Optiona I Compiler sÑ çgodne z typem PC: Przykˆad: var Tab:array[0..100] of Char; *isk : PChar ; beqin i*sk : =Tab; Programowanie w Turbo Pascal 7.0 opcji Open parametera w menu Options I Compiler. Tablice te sÑ stoso- * wane sÑjako parametry foçmalne procedur i funkcji. Tablice te nie maj* okreŒlonego wynçiaru i definiowane sÑ nast©pujÑco: array of Typ Przykˆad: ˆ*!' procedure Wpisz WartoŒ¹(var Tab : array of Inteqer); gdzie parametrem procedury jest tablica Tab o nie ustalonyzn z góry wymiarze. Po przekazaniu tablieyjako parametru do funkcji lub pro*e. duryjest ona traktowanajako tablica o nast©pujÑcej strukturze: array [ O..N-1 ) of Typ *laaç©pu,]ÑcÑ lbudow©: segment:offset prçykˆadowo: Tryb Pracy Sterownika Ekranu := Mem($0040:$0049) Liczba Xolumn Na Ekranie := Mem W($0040:$004A); Tablice æozwalajÑce na bezpoŒredni dost©p do portów posiadajÑ na pujÑce identyfikatory: ' Port - elementami sÑ dane typu Byte. PortW - elementami sÑ dane typu Word. Indeksy tych tablic sÑ typu Word i okreŒlajÑ adres portu. gdzie N okreŒla liczb© elementów w przekazanej tablicy. TYp REKORDOWY Moçemy si© o tym przekona¹ po wykonaniu nast©pujÑcego programu: Typ rekordowy opisuje zˆo¾onÑ struktur© danych.Struktura ta skˆa type ai© z pól.Ka¾de pole mo¾e by¹ innego typu i mo¾e by¹ tak¾e atruktç ray (3..10] of Byte ; zˆo¾onÑ,np.rekordem.Definicja rekordu rozpoczyna ai© sˆowem reco: Tab=ar a koäczy sˆowem end i ma nast©pujÑcÑ budow©: const T:Tab=(1,2,3,4,5,6,7,8); procedure Wypisz(var Tablica:array of Byte); „f;*t record begin Pole : Typ; Write Ln(Low(Tablica),'',High(Tablica)); Pole : Typ; eççd ; begin Wypisz (T ) ; POle : Typ Write Ln(low(T),'',High(T/); end; end. sibyf * ** e ole oznacza identyfçkator pola w rekordzie,zaŒ Typ Typ elementów tablicy przekazywanej do procedury lub funkcji mu oznacza ty taki sam,jak typ elementów tablicy otwartej. *; Przykˆadowe typy rekordowe: Tablice pozwalajÑce na bezpoŒredni dost©p do pami©ci posiadajÑ nas* pujÑce identyfikatory: type Osoba=record Mem - elementami sÑ dane typu Byte. Imi©:5tring(10); ù MemW - elementami sÑ dane typu Word. Nazwisko: 5trinq [ 20] ; Wiek:Integer; .ù MemL - elementami aÑ dane typu Longint. Adr‚s : string (3o ) 116 P. Michaˆkiewicz, I. —wituszak Programowanie w Turbo Pascal 7.0 Kartoteka=record xod Pracownika:Inteqer; Pracownik:Osoba; 5tanowisko:5tring[20] end; Dost©p do pól rekordu odbywa si© za pomocÑ identyfikatorów zmienn* danego typu rekordowego i pola. Przykˆadowo, gdy zdefiniujemy zmiennÑ var Lista:Kartoteka; to.do pól rekordu mo¾emy odwoˆa¹ si© w nast©pujÑcy sposób: Lista.Pracownik.Imig:='Ireneusz'; Lista.5tanowisko:='Dyrektor'; lub za pomocÑ instrukcji with, np.: with Lista do begin xod Pracownika:=121; Stanowisko:='xierownik' Pracownik.Imi©:='Piotr'; end; OdmianÑ typu rekordowego jest tzw. typ rekordowy z wariantami, któq ma nast©pujÑeÑ budow©: record Pole : Typ; Pole : Typ; case Pole W : Typ PorzÑdkowy of wariant:(Pole : Typ;... ; Pole : Typ;I7 wariant:(Pole : Typ;... ; Pole : Typ;)ç wariant:(Pole : Typ;... ; Pole : Typ;l* end; gdzie Pole oraz PoleW oznacça identyfikatory pól w rekordçi*, Typ TypPorzÑdkowy oznaczajÑ typy tych pól, zaŒ wariant mo¾liwoŒ¹ wy 118 P. Michaˆkiewicz, I. —wituszak uczeuiuwego. Nale¾y pami©ta¹, ¾e deklaracja pola z wariantami jest ostatniÑ dek; cjÑ w definicji rekordu. Przyklad typu rekordowego ç waçiantami: type ZdolnoŒ¹= ( pˆyrva, niepˆywa ) ; Rodzaj=(dowolny,klasyczny,delfin,grzbietowy); Osoba=record Imi©:5tring(10); Nazwisko:5tring[20]; Wiek:Integer; Adres:5tring(30]; case Pˆywanie:ZdolãoŒ¹ of pˆyr*a : ( 5ty1: Rodzaj ; Dystans:Integer; Czas:Real); niepˆywa: (Brak:Char); end; **)** Przykladowo, gdy zdefiniujemy zmiennÑ ` * *,i 11 i ' twb*c=. var ;a*rru? : : * Z awodnik : Osoba to do pól rekordu mo¾emy odwoˆa¹ si© w nast©pujÑcy sposób: Zawodnik.Imi©:='Ireneusz'; Zawodnik.Wiek:=1?3 If Zawodnik.Pˆywanie=pˆywa Theã ù begin Zawodnik.5ty1:=klasyczny; 9 : Zawodnik.Dystans:=100 ; eêd Else Zawodnik.Hrak:='N' Z*P OBIEKTOWY Typ obiektowy opisuje çˆo¾onÑ struktur© danych. Struktura ta skˆai si© z pól, podobniejak struktura rekordu, oraz tzw. metod, czyli opera* wykonywanych na obiekcie. Definieja obiektu roçpoczyna si© sˆowe Programowanie w Turbo Pascal 7.0 11 end; object (dziedzicznoŒ¹ Pole : Typ; Obiekt OkrÑgjeat potomkiem obiektu Punkt,cçyli dziedzicçy po nimj Pole : Typ; pola i metod**. II WŒród metod mo¾emy wyró¾ni¹ dwie metody specjalne,deklarowane Pole : T pomoCÑ aˆów conatructor i deatruktor.Sˆu¾Ñ one do inicjowania i uau* :; nia obiektów,gdy korzyatamy z procedur New i Dispose oraz do ini* Metoda * lizacji obiektów zawierajÑcych metody wirtualne. Metoda; Metoda wirtualna deklarowana jeat za pomocÑ sˆowa virtual,a deklaracja ma naat©pujÑcÑ poata¹: Metoda; end; ***ti*, nagˆówek metody; virtual ; gdzie: DziedzicznoŒ¹ - nazwa obiektu prçodka np.: Pole - ideãtyfikator pola w obiekCie procedure Init (a,b,c : Integer ) ; virtual ; - typ pola Je¾eli çadeklarujemy metod© jako wirtualnÑ,to we wsçyatkich typa b k po*mnych metody o tym aamym identyfçkatorze muszÑ by¹ deklarove Metoda - deklaracja operacji na o ie cie ne tak¾e jako wirtualne. Deklaracje pól wykonuje ai© tak, jak w rekordzie, z ã metody ek a* je OpróCz metod wirtualnych iatniejÑ tçw. metody dynamiczne, które ma my tak,jak deklaruje si© funkeje lub proce ury a e¾y pa ©, * naat©pujÑCÑ deklaracj©: l‹ deklaracja metody wewnÑtrz typu obiektowego okreŒla tylko nagˆów tod çaŒ e defini a znajduje si© poza deklarac t u obiektowe * nagˆó jÑ yp wek metody; virtual indeks; Przykˆad typu obiektowego: © dzie indeka okreŒla licçb z çakreau od 1do 65535. Metody dynamiczne w porównaniu z metodami wirtualnymi poçwàlà type *" na ograniczenie pami©ci wykorzystywanej do zapamigtania wska«nikó Punkt=ob*ect * do metod wirtualnych dla ka¾dego obiektu. procedure Zeruj ; Do metod mo¾emy odwoˆa¹ aig za pomocÑ sˆowa with,podobnie jak zmienn ch rekord w end; y o ych lub za pomocÑ aˆowa inhexçted sˆ ' uz ce o c okrÑg=object(Punkt) *; wywoˆania metody prçodka.Nale¾y pami©ta¹,¾e sˆowo inherited mo¾ promieä : Integer ; * by¹ u¾ywane tylko w prçypadku,gdy obiekt poaiada rzodka. 5 procedure Zeruj Promieä; end * Zarówno pola,jak i metody mogÑ by¹ udoat©pniane tylko wewnÑtx moduˆu,w którym zadeklarowano dany obiekt (private) lub tak¾e poz gdçie x,y okreŒlajÑ wspóˆrç©dne punktu,zaŒ procedura Zeruj ustawia nim (public).Dyrektywy public i private mogÑ by‚ powtarçane,np.: na wartoŒ¹ równÑ zero i mo¾e by‚ zdefçniowana nast©pujÑco: type procedure Punkt.Zeruj; Obiekcik=object begin x,y:Inteqer; x:=0; private 120 P.Michaˆkiewicz,I.—witusz„k Programowanie w Turbo Pascal 7.0 12* public z:Real; procedure Zeruj; private c:Real; end; Wyró¾niamy nast©pujÑce deklaracje typu plikoweg : t Y Pe Plik*l = file of T Plik 2 Yp Podstawowy; = file; Plik 3 = Text gdzie pola x,y,z i metoda Zeruj sÑ typu public, zaŒ pola a,b,c to pola typu t De*aracja w pierwsz* przy*adzie o private. Typ*Podatawowy, np.: znacza plik o elementa* TYP ZBIOROWY Typ zbiorowy okreŒla zbiór pot©gowy, którego elementy sÑ typu porzÑd kowego. Przez zbiór pot©gowy nale¾y rozumie¹ zbiór wsçystkich mo¾U. wych podçbiorów wartoŒci typu porzÑdkowego, wˆÑczajÑc w to tahze zbiór pusty. Typ çbiorowy definiujemy nastgpujÑco: type Typ Zbiorowy = set of Typ; gdzie Typ*Zbiorowy oçãàcçà nazw© definiowanego typu, zaŒ Typ okreŒl* typ porzÑdkowy. Typ porzÑdkowy mo¾e zawiera¹ maksymalnie do 256 elementów, pr* czynç wartoŒ¹ porzÑdkowa elementu pierwszego wynosi 0, çaŒ ostatni 255. Elementy typu zbiorowego zapisywane sÑ w nawiasach kwadrat4 wych, przy czym zbiór pusty oznacça si© za pomocÑ symboli []. Przykˆadowe typy zbiorowe: type litery=set of 'a'..'z','A'..'Z'; cyfry=set of '0'..'9' zaŒ zmienne tych typów mogÑ przyjmowa¹ np. nast©pujÑee wartoŒ„: ['a','b','c','A','B','C') ['2','3','4','5') TYP PLIKOWY Typ plikowy okreŒla zbiór danych sekwencyjnych o zmiennej * elementów tego samego typu. Elementy skˆadowe nie mogÑ byE plikowego oraz typu, który çawiera w sobie de*laracje typu pliko, ty Pe plik I = file of Hyte; Osoba = file of record imie ãazwisko: String[15j; wiek: Byte; end; D *a Tcja w* g;im przy*adzie oçnacza tzw.typ yp ta stosow plikowy nie zde est ˆównie do bezpoŒredniego dostg) lików dyakow ch w ich fornça*ch wewn©trznych. * Deklaracja w trzecim rz * wy,którego elementam sÑ dzie okreŒla tzw.atandardowy plik te naki z*çpowane w linie.Ka¾da P* uw d n * P*ez tzw.znak powrotu karetki (an j in� (ang.li eed). g.carriage ret ne f ZGODNO—¥ Typ*æi r ; IdentycznoŒ¹ typów d**ty‹ noŒ¹ typów musi wystÑpi¹ pomi©dzy parametram ynçi,wyst u c i i fornçaln* *Ñ Z'm w wywoˆaniach procedur i funkcji. D t* y I i T2sÑ identycçne,gdy apeˆniony jest jeden z p oni¾sz* f.. ' TI i T2majÑ ta* sam identyfikator typu. ',Tl jest zadeklarowany jako identycçny z T2,tzn.zachodzi ró *r nanie T1=T2. P*ykˆady: t Y Pe ¥: TI=Real; T2=TI; Typy Tl,T2i Rea1sÑ identyezne. 1 122 P. Michaˆkiewicz, I. —wituszak Programowanie w Turbo Pasca/ 7.0 type T1=set of Real; T2=set of Real; Typy T1 i T2 nie sÑ identyczne, poniewa¾ aet of Real nie jest identyfçka, torem typu. ZgodnoŒä typów Zgodno„¹ typów jeat nieraz wymagana w wyra¾eniach. Dwa typy Tl i '1* aÑ zgodne, gdy speˆnionyjeatjeden z pon ¾szych i warunków : 1) obydwa typy aÑ takie same, 2) obydwa typy sÑ typami rzeczywiatymi, 3) obydwa typy aÑ typami caˆkowitynçi, 4) jeden typ jest typem okrojonym typu drugiego, 5) obydwa typy aÑ typami okrojonymi tego aamego typu, 6) obydwa typy sÑ typami zbiorowymi ze zgodnyçni typami bazowyçni, 7) obydwa typy aÑ typami ˆaäcuchowymi o identycznej licçbie el ementór jed 8) en z typówjeat typem ˆaäcuchowym, za„ drugi typem ˆaäcuchow lub znakowym, 9) jeden z typów jeat typem Pointer, çà„ drugi dowolnym typà wska«nikowyna, 10) jeden ç typów jest typem PChar, zaŒ drugi tablicÑ znaków o inde* dolnym równyçn zero (tylko gdy wˆÑczona jest dyrektywa $X), 11) obydwa typy sÑ typami wska«nikowynçi, wakazujÑcymi na ten sa typ (tylko gdy wˆÑczona jest dyrektywa $T), 12) obydwa typy sÑ typami proceduralnymi z identycznÑ licçbÑ paran* kt re od owiada Ñ aobie typami oraz z identycznymi typami wy> trów, ó p j ków. ZgodnoŒ¹ typów w sensie przypçsànià Zgodno„¹ typów T1 i T2 w senaie przypisania zachodzi wtedy, ga inatrukeji przypiaania x:=y zmienna x jest typu T enna ty 1, za„ zmi T2. Dwa typy T1 i T2 aÑ zgodne w senaie przypiaania, gdy speˆnionyr jeden z poni¾szyeh warunków: 1) typy T1 i T2 aÑ identycçne i ¾aden z nich nie jeat typem pliko* P. Mic*aˆkiewicz, I. —wituszak iuu u,y Zroiu plikowego, 2) typy T1 i T2 sÑ çgodnymi typami porzÑdkowynçi, a wartoŒ¹ y t) T2 mie„ci ai© w zakreaie wàç'tu„ci typu T1, 3) typy T1 i T2 aÑ typami rzeczywistymi, a wartoŒ‚ y typu T2 mit ai© w zakreaie wartu„ci typu T1, 4) T1 jeat typem rçeczywistynç, za„ T2 typem caˆkowitynç, 5) T1 i T2 sÑ typami ˆaäcuchowyçni, 6) T1 jeat typem ˆaäcuehowym, za„ T2 typem çnakowyçn, 7) Tl i T2 sÑ zgodnymi typami çbiorowynçi, a wartoŒei zbioru typu çawierajÑ ai© w çbiorze wartu„ci typu T1, 8) T1 i T2 sÑ çgodnynçi typami wskaçnikowyçççi, 9) T1 jeat typem PChar, za„ T2 jeat ataˆÑ ˆaäcuchowÑ (tylko * wˆÑczona jest dyrektywa $X), 10) T1 jeat typem PChar, çà„ typ T2 jest tablicÑ çnakowÑ o indek dolnynç równynç zero (tylko gdy wˆÑcçona jest dyrektywa $X), 11) TI i T2 sÑ zgodnymi typami proeeduralnynçi, 12) T1 jest typem proceduralnym, zaŒ T2 jest procedurÑ lub funkcj identycznÑ liczbÑ parametrów, które odpowiadÑjÑ sobie typami m z identycznymi typami wyników, 13) T2 jeat typem obiektow*ãn, którego dziedzina nale¾y do dçiedzi typu obiektowego T1, 14) Ttyp waka«nikowy P2 wskazujÑcy typ obiektowy T2 jest çgodny aensie prçypiaania z typem waka«nikowym Pl, wakazujÑcyçn t obiektowy Tl, je¾eli T2 jeat typem obiektowyxn, którego dziedzi *i‹ ; nale¾y do dziedziny typu obiektowego T1. Staˆe i zmienne ; STAä.E Staˆa jest identyfikatorem, któremu przyporzÑdkowano wartoŒ‚. W; to„¹ ataˆej nie mo¾e by¹ zmieniona podezas wykonywania progran Staˆe deklaruje ai© po aˆowie const. Programowanie w Turbo Pascal 7.0 Deklaracja przykˆadowych staˆych: const Liczba Max=1000; Komunikat='UWAGA !'; Oprócz tego typu staˆych mo¾emy deklarowa¹ staˆe, u¾ywajÑc tçw, *,: wyra¾eä staˆych, np.: I I const Kod A = Ord('A KÑt = 90*Pi/180; Imi©*l = 'Piotr'; Imi© 2 = 'Ireneusz' Razem = Imi©*l + Imi© 2; Liczba Min = Liczba Max - 500; Podczas takich deklaracji mo¾emy u¾ywa¹ tylko nast©pujÑcych funkc)r standardowych: Abs Lo Ptr Chr Low Ro und Hi Odd 5izeOf High Ord succ ; Length Pred 5wa Trunc ! Osobal,Osoba2 : Nazwisko; lub var Osobal,Osoba2 : array[0..20] of Char; Deklarowanie zmiennych mo¾e odbywa¹ sig zarówno w cz©Œci de cyjnej programu gˆównego, jak i w czgŒciach deklaracyjnych proc funkcji. Zmienne deklarowane w cz©Œci deklaraeyjnej programu gˆ go nazywane sÑ zmiennymi globalnymi, zaŒ deklarowane w proced i funkcjach - to zmienne lokalne. Zmienne globalne przechowywane sÑ w segmencie danyeh, które* miar nie mo¾e przekroczy¹ 65520 bajtów. Zmienne lokalne przechowywane sÑ na stosie, którego rozmiar ; ardowojest ustawiony na wartoŒ¹ 16384 bajtów i moçe zosta‚ zmie za pomocÑ dyrektywy $M w zakresie od 1024 do 65520 bajtów. W„ród zmiennych mo¾emy wyró¾ni¹ tzw. zmienne absolutne, okreŒlajÑ umiejscowienie zmiennej w pami©ci. Zmienne te deklarujemy za pomocÑ sˆowa absolute nast©pujÑco: uàç Nazwa:Typ absolute seqment:offset; *t '*: ZMIENNE Zmienna jest identyfikatorem okreŒlajÑcym wartoŒ¹, która mo¾e u zmianom podczas dziaˆania programu. Zrnienne deklaruje si© po s* var. Ka¾da zmienna przed jej u¾yciem musi by¹ zadeklarowana. D racja pojedynczej zmiennej jest nast©pujÑca: var Nazwa zmiennej : Typ zmiennej; Je¾eli kilka zmiennych jest tego samego typu, to rno¾na zadeklarov nast©pujÑco: var Zmienna 1,Zmienna 2,Zmienna 3 : Typ zmiennej; przy czynç typ zmiennej mo¾e by¹ okreŒlony w cz©Œci deklaracyjnej lub bezpoŒrednio okreŒlony podczas deklarowania zmiennej, np.: type Nazwisko=array(0..20] of Char; 126 P. Michaˆkiewicz, I. —wituszak gdzie segment i of3Eset okreŒlajÑ adres w pami©ci, np.: var Crt Mode : Byte absolute $0049:$0049; Crt Cols : Byte absolute $0040:$004A; Crt Start : Bye absolute $0040:$004E; gdzie zmienne wskazujÑ nast©pujÑee komórki w pami©ci: Crt Mode - bie¾Ñcy tryb pracy sterownika ekranu Crt Cols - liczba kolumn na ekranie Crt Start - adres poczÑtku obrazu w pami©ci obrazu STA*,E INICdOWANE Staˆe inicjowane mogÑ by¹ porównywane do zmiennych, którym na wartoŒ¹ poczÑtkowÑ. W przeciwieästwie do staˆych opisanych w podczas deklarowania staˆych inicjowanych okreŒla si© ich typ Programowanie w Turbo Pascal 7.0 CO S Nazwa staˆej : Typ staˆej = WartoŒ¹ staˆej; Podczaa uruchomiania programu staˆe sÑ inicjowane zgodnie z warto. i kreŒlonynçi w deklaracji, jednak w trakcie dziaˆania programæ Œciam o mogÑ si© te wartoŒci zmieniaä. Nale¾y pami©ta¹, ¾e w przypadku de kla. ro wania staˆych inicjowanych w cz©Œciach deklaracyjnych procedur i funkcji kolejne ich wywoˆania nie powodujÑ ponownej inicjacji tych staˆych. Przykˆadowa procedura: procedure Licznik; const L:Integer=0; begin Inc(L); Writeln(L/; end; przy kolejnych wywoˆaniach b©dzie wypisywa¹ liczb© okreŒlajÑcÑ iloŒ¹j* wywoˆaä. Oznacza to, ¾e przy kolejnym wywoˆaniu procedury lub funk* poprzednia wartoŒä b©dzie w niej pami©tana. W przypadku typów tablicowego, rekordowego i obiektowego nie mo‚ byä w nich u¾yta zmienna typu plikowego. Pola muszÑ by¹ okreŒl0ne w takiej samej kolejnoŒci, wjakiej wyst©pujÑ w deklarowanyçn typie. Je¾* rekord jest rekordem z wariantami, to mo¾emy okreŒli¹ wartoŒci tyl* dla pól dotyczÑcych jednego wariantu, niezale¾nie od wartoŒci pob okreŒlajÑcego wariant, które zawsze musi by¹ inicjowane. Dla obiektë" niedozwolone jest inicjowanie wartoŒci dla metod wchodzÑcyeh w* sktad danego obiektu. Póni¾sze przykˆady pokazujÑ,jak mo¾na deklarowa¹ staˆe inicjowane ró¾nych typów danych: ù typy proste const max:Iãteger=100; min:Integeç=0; enter:Char=#13; w:Real=o.25; 128 P. Michaˆkiewicz, I. —wituszak COP urzÑd:5tring=* UrzÑd 5karbowy*; nazwisko:5tring[20)=* Michaˆkiewicç, ' typ tablicowy const * cyfry:array[0..9j of Char=*0123456789* wektor:array[1..5) of Real=(1.2,2.3,1.7,3.8); tablica:array[0..2,0..2] of Integer=((1,2,3),(4,5,6),(7,g,9)); kostka:array[0..2,0..2,0..2j of Byte=(((1,2,3),(4,5,6),(7,8,9)), (l9,8,7),(6,5,4),(3,2,1)), ((1,2,3),(4,5,6),(7,g,9))]; ' typ rekordowy (analog¾cznie typ obiektowy) type opi S=record imi©:string[15); nazwisko:string[30]; pracuje?:Boolean; wiek:Byte; end; const os Oba:opis=(imi©:* Piotr*; nazwisko:'Michaˆkiewicz* pracuje:True; wiek:87); * tab:array[1..2] of opis=((imi©:* Piotr*; nazwisko:* Michaˆkiewicz* pracuje:True; wiek:87), (imi©:* Ireneusz*; ãazwisko:'5wituszak' pracuje:False; wiek:17)); ' typ rekordowy z waçiantami type Zdolnosc=(plywa, nieplywa); Rodzaj=(dowolny,klasyczãy,delfin,grzbietowy); Osoba=record Imie:5triãg[10]; Wiek:Integer; case Plywanie:Zdolnosc of Programowanie w Turbo Pascal 7.0 iiiàæiy ãà * **,. . plywa: (5ty1:Rodzaj; Dystans:Integer; Czas:Real); end; const Zawodnik:osoba=(imie:'Piotr'; wiek:123; plywanie:nieplywa; styl:delfin; dystans:25; czas:12); ù typ zbiorowy type cyfry=set of 0..9; const parzyste:cyfry=[0,2,4,6,8]; litery : set of 'a'. 'z'=['y','n'l; * typ wska¾nikowy *+ *,;, type lista="osoba; osoba=record imi©:5tring[10); wiek:Integer; nast©pny:Lista; end; const wskafnik : Pointer = nil; ˆaäcuch : P Char = 'To jest ˆaäcuch' osobal : osoba=(imi©:'Piotr'; wiek:47; nast©pny:nil/; osoba2 : osoba=(imi©:'Irek'; wiek:123; nast©pny: osobal); osoba3 : osoba=(imi©:'Ewa'; wiek:23; nast©pny:@osoba2l poczÑtek listy : lista = @osoba3; ù typ proceduralny type funkcja = function(s:string):integer; function iloŒ¹ znaków(ˆaäcuch:5tring):Integer; far; begin iloŒ¹_znaków := length(ˆaäcuch); end; 130 . P. Michaˆkiewicz, I. —wituszak *r dˆugoŒ¹ : funkcja = iloŒ¹ znaków; begin write( dˆugoŒ¹('Piotr'/ ); end. Wyra¾enia Wyra¾enia skladÑjÑ si© ç argumentów i operatorów. Przy pomocy * torów mo¾emy na argumentach wyra¾enia wykona¹ okreŒlone op* w wyniku któryeh otrzyçnamy wartoŒ¹ pewnego typu. KolejnoŒ¹ w5 wania operacji çale¾y od priorytetu operatorów. Najwy¾szy pri majÑ operatory not i *, nast©pnie kolejno operatory multiplikat addytywne i operatory relacji, które przedstawia poni¾sza tabela. >=. iê Je¾eli dwa operatory majÑ ten sam priorytet, to operacje wykon5 sÑ od lewej do prawej strony wyra¾enia. KolejnoŒ¹ wykonywanycl racji mo¾e ulec zmianie po zastosowaniu nawiasów, które pow wyliczenie wyra¾enia, zacçynajÑc od najbardziej çagl©bionych pod ¾eä uj©tych w nawiasach, np. a+b*(x+y*(m-n)) gdçie kolejnoŒ¹ operacji jest nast©pujÑca: 1) wynikl := m-n 2) wynik2 = y*wynikl 3) wynik3 := x+wynik2 4) wynik4 := b*wynik3 5) wynik5 := a+wynik4 Wynik piÑty jest wartoŒciÑ caˆego wyra¾enia, zaŒ pozostaˆe w Programowanie w Turbo Pascal 7.0 ll PFR A TâlRV pokazujÑ kole*ne etapy wyuczGnça ævWy****** w.r Mo¾emy wyró¾ni¹ nast©pujÑee rodzaje operatorów: arytmetyczne, bi*. *r* we, logiczne, ˆaäcuchowe, znakowo-wska«nikowe, mnogoŒcçowe, rela*i * i wskazania. :'¹. P - PChar Q - PGhar ;*; : 4 ; 132 P. Michaˆkiewicz, I. —wituszak ZNACZENIE TYP ARGUMENTáW suma çbiorów zbiorowe z odne zbiorowy "ó¾nica zbiorów zbiorãwe zgodne zbiorowy ezgŒ¹ wspólna zbiorowe zgodne * zbiorowy RACJA TYP TYP WYNIKI ARGUMENTáW *noŒci typy proste logiczny Programowanie w Turbo Pascal 7.0 OPERATORY ZNAKOWO-WSKAæNIKOWE *J* PERATO OPERACJA TYP TYP WYNIKU _ _ _ ARGUMENT6W Instrukcje sÑ to elementy programu sˆu¾Ñce do opisania algory t dziaˆajÑce na wczeŒniej zadeklarowanyeh danych.Wjgzyku Turl <= mniejszy-równy typy proste logiezny scal mo¾emy wyró¾ni¹ nastgpujÑce rodzaje instrukcji: ˆaäcuchowe PChar ** * - proate >= wi©kszy-równy typy proste logiczny ˆaäcuchowe PChar - atrukturalne <= jest podzbiorem zgodne zbiorowe logiczny >= jest nadzbiorem zgodne çbiorowe logicçny *STRUKCáE PftOSTE in zawarty w porzÑdkowy (jako logiczny = Instrukcje proate aÑ to instrukcje,które nie zawierajÑ jako skˆado argument 1) innych instrukcji.WŒród instrukcji prostych mo¾emy wyró¾ni¹ nas ç zbçorowy ()ako jÑce instrukc7e: argçzment 2) o tym - przypiaania sam t ie 5'm yP odstawowym - procedury - skoku - pusta OPERATOR WSKAZANIA *: e ; * Instruhcja przypisania Operator wskazania * u¾ywany jest do okreŒlenia adresu çmiennej, Inatrukcja przypisania ma nas u* c skˆadn* * rocedur funkc*i 1b m *P JÑ Ñ çg. p y, * u etody.Powodu*e on utworzençe wartoŒci waka«nikowej wskaçujÑcej na dany argument. Nazwa zmiennej : = wyra¾enie ; ''' lub â; ZMIANA TYPU WYRA½ENIA Nazwa funkcji := r*yra¾enie Wyra¾enia typu porzÑdkowego i waka«nikowego mo¾emy zamienia¹ nˆ wyra¾enia innego typu porzÑdkowego lub waka«nikowego.Do tego celu f Inatrukcja przypisania powoduje przypisanie wartoŒci wyraçenia i III sˆu¾y konstrukcja: zmiennej lub funkcji.Wyra¾enie muai mie¹ typ zgodny w sensie prz sania z typem zmiennej lub typem wartoŒci zwracanym przez funkc identyfikator typu (v*yra¾enie) 1 I ,' gdzie identyfikator typu okre„la nowy typ dla wyra¾enia.Je¾eli çàkç'*b wartoŒci dla od owiednich ty ów s *ó«ne to nas i obci cie lub t*' * Prçykˆady: , *P g szerçenie danej wartoŒci wyra¾enia. X := 1000 minimum := 25; maksimum := 10* minimum c := sqr(sin(alfa)) + sqr(cos(alfa)); 134 P.Michaˆkiewicz,I.—wituszak * .Programowanie w Turbo Pascal 7.0 7 oPEç*cJa <= * mniejszy-równy >= * wi©kszy-równy <= *est poazbçorem >= jest nadzbiorem in çawarty w ARGUMENTáW typy proste ˆaäeuchowe Pchar typy proste ˆaäcuchowe Pchar zgodne zbiorowe zgodne zbiorowe porzÑdkowy (jako argument 1) i zbiorowy (jako argument 2) o tym samym typie podstawowvnç TYP WYNIKU logiezny logiczny log¾cçny OPERATOR WSKAZANIA Operator wskazania * u¾ywany jeat do okreŒlenia adresu procedury, funkcji lub metody. Powoduje on utworçenie wska«nikowej wskazujÑcej na dany argument. ZMIANA TYPU WYRA½ENIA Wyra¾enia typu porzÑdkowego i wska«nikowego içço«emy çamienia¹ wyra¾enia innego typu porzÑdkowego lub wska«nikowego. Do tego c sˆu¾y konstrukcja: identyfikator typu (wyra¾enie) gdzie identyfikator typu okreŒla nowy typ dla wyra¾enia. Je¾eli zakrt wartoŒci dla odpowiednich typów sÑ *ó¾ne, to nastÑpi obci©cie lub n szerzenie danej wartoŒci wyra¾enia. 134 P. Michaˆkiewicz, I. —wituszak *. wr. vãv** Instrukcje sÑ to elementy programu sˆu¾Ñce do opisania algoryt dçiaˆajÑee na wczeŒniej zadeklarowanych danych. W j©zyku Turb* scal mo¾emy wyró¾ni¹ nast©pujÑce rodzaje instrukcji: - proste - strukturalne - INSTRUKC*TE PROSTE *; Instrukcje proste sÑ to instrukcje, które nie zawierajÑ jako skˆado* innych instrukcji. WŒród instrukcji prostych mo¾emy wyró¾ni¹ nast jÑce instrukcje: - przypisania - procedury - skoku **, : - pusta Instruhcja przypisània Instrukcja przypisania ma nast©pujÑcÑ skˆadni©: Nazrr*a zmiennej := wyra¾enie ; lub Nazwa funkcji := wyra¾enie ; Instrukcja przypisania powoduje przypisanie wartoŒci wyra¾enia zmiennej lub funkeji. Wyra¾enie musi mie¹ typ zgodny w sensie prz; sania z typem çmiennej lub typem wartoŒci çwracanym przez funkcù Przykˆady: x := çooo; minimum := 25 ; maksimum := 10 * minimum c := sqr(sin(alfa)) + sqr(cos(alfa)); Programowanie w Turbo Pascal 7.0 âUWyLtjLC 111Pu1 uãuJ* å5E rvj.*.*. oñ wystÑpi¹ tak¾e nast©pujÑee instrukeje: licznik := licznik + 1 ; y := y - 23 ; wynik := y > licznik ; Zapis ten oznacça, ¾e do zmiennej licznik zostanie podstawiona je* poprzednia wartoŒ¹ zwi©kszona o 1, zaŒ do zmiennej * jej poprzednia o e i wartoŒ¹ zmniejszona o 23. Ostatnia instrukeja sprawdza wartoŒ¹ 1 gi z, nÑ wyra¾enia y > lieznik i do zmiennej wynik przypisuje wartoŒ¹ true (relaeja prawdziwa) lub false (relacja faˆszywa). Przypisywanie wartoŒci wyxa¾enia nazwie funkeji opisanejeat w rozdzia. le "Procedury i funkeje". Instruheja procedury Instrukeja procedury powoduje wykonanie cz©Œci programu umieszezoù nej w deklaracji procedury i ma nast©pujÑcÑ skˆadni©: Nazwa Procedury [( parametery aktualne)); gdzie Nazwa Procedury okreŒl„ identyfikator procedury, zaŒ parametry aktualne, które sÑ opejonalne, okreŒlajÑ liat© parametrów przekazywanych do procedury w chwili jej wywoˆania. Procedury opiaane aÑ A rozdziale "Procedury i funkcje". Je¾eli wˆÑczonajest dyrektywa $X, to funkeje mogÑ by‚ traktowane ta* jak procedury. Przykˆady: Dodaj(a,b/; Drukuj Tabel©; Instrukeja shoku Instrukeja skoku powoduje zmian© kolejnoŒei wykonywania in Skˆadnia instrukcji skoku jest nast©pujÑca: goto Nazwa Etykiety ; gdzie Nazwa Etykiety okreŒla identyfikator etykiety zadeklar tynç samym bloku, w którym u¾yto instrukeji skãku. Po instrukeji skoku nast©pnie wykonywanÑ inatrukejÑ jest iç umieszezona po nazwie etykiety u¾ytej w instrukeji skoku. 136 P. Michalkiewicz, I. —wituszak label Koniec; begin geto Koniec ; write('Ten napis nie zostanie wyŒwietlony'); Koniec: write('Koniec programu'); end. ", W wyniku wykona*ia programu zostanie wyŒwietlony tylko napis niec programu", c0 jest wynikiem dziaˆania instrukeji skoku, 1 przekazaˆa sterowanie do instrukcji wyst©pujÑcej po etykiecie Kon Instruheja. pusta Instrukeja pusta nie powoduje wykonania ¾adnych czynnoŒci. Ma jednak zastosowanie w przypadku, gdy algorytm czgŒci programu bt opraeowany w nast©pnym kroku, np.: procedure Drukuj Tabel©; begin end; gdzie po sˆowie begin nie wyst©puje ¾adna instrukeja, co dla kompila jest równoznaczne z uçyeiem instrukeji pustej. Przykˆady: for i := 1 to 1000 do ; { instrukcja pusta } case cyfra of 1: write('1'); 2: ; { instrukcja pusta } 3: write('2') end; INSTRUKC*TE STRUKTURALNE Instrukeje atrukturalne skˆadajÑ ai© z jednej lub wi©kszej liczby ins kcji i powodujÑ, zale¾nie od rodzaju tej instrukeji, odpowiednie wykonanie. Mo¾emy wyró¾ni¹ nast©pujÑee rodzaje instrukeji struktu nych: - zˆo¾ona - warunkowa Programowanie w Turbo Pascal T.0 - wiѾÑca - kodu - aaemblerowa Iãstrukcja z*o¾onà Inatrukcja zˆo¾ona powoduje utworzenie z ciÑgu instrukcji jednej instru. kcji prçez uj©cie inatrukcji akˆadowych mi©dzy sˆowami begin i end. Skˆadnia inatrukcji zˆo¾onej jeat nast©pujÑca: begin instrukcja 1; instrukcja 2; instrukcja n end; Po oatatniej inatrukeji akˆadowej mo¾emy pominѹ „rednik. Przyhˆady: begin writeln('Linia 1'); writeln; writeln('Linia 3') end; begin x:=10; y:=sqr(x); write(x,'',y) end; Instrukcja warunkowa Inatrukcja warunkowa powoduje wykonanie cz©„ci kodu programu w zale¾no„ci od warto„ci warunku. Mo¾emy wyró¾ni¹ dwie instru*<7e warunkowe w j©zyku Turbo Paacal: - if - caae 138 P. Michaˆkiewlcz, I. —wituszak lãsçrurzc*à tr Inatrukcja ta ma naat©pujÑcÑ akˆadni©: if warunek then instrukcja 1 ; * lub if warunek then instrukcja*l :;r* else * instrukcja 2; : ~t Je¾eli warunekjeat prawdziwy (true), to zostanie wykonana z; * * pierwazym, jak i w drugim przypadku inatrukcja*l; za„ gdy jest faˆazywy (falae), to w pierwazym przypadku nastÑpi pr* *, pierwazej inatrukcji po instrukcji if, za„ w drugim przypadku wykonana inatrukcja 2. Po wykonaniu pierwszej lub drugiej inatrukcji nast©pnÑ rea instrukcjÑjeat pierwaza inatrukcja wyat©pujÑca po instrukcji if inatrukcja*l, jak i inatrukcja 2 mogÑ by¹ inatrukcjami zˆo¾ony Przykˆady: if a > 100 then write('a > 100'); if Nast©pny='Irek' then begin imi© : 'Ireneusz'; nazwisko : '5wituszak' wiek := 123 end else write('To nie jest Irek'j; *; Instrukcje if mogÑ by¹ zagnie¾d¾ane, tzn. ¾e po aˆowie then wyat©puje nast©pna inatrukeja if, przykˆadowo: if a > 0 then if b> 0 then write('a i b sÑ wi©ksze od zera') else write('b nie jest wi©ksze od zera') else write('a nie jest wi©ksze od zera'); Programowanie w Turbo Pascal 7.0 if a > 0 then if b > 0 then instrukcja 1 else instrukcja 2; jest odpowiednikiem nastgpujÑcego çapisu: if (a > 0) and (b > 0) then instrukcja_1 else instrukcja 2; Instrukcja case Instrukcja ta ma nast©pujÑeÑ skˆadni©: case wyra¾enie of lista wyboru*l : instrukcja ; lista wyboru 2 : instrukcja ; . lista wyboru n : instrukcja end; lub case selektor of lista wyboru*l : instrukcja ; lista wyboru 2 : instrukcja ; lista wyboru n : instrukcja else instrukcja end; W wyniku wykonania instrukcji case zostaje wylicçona wartoŒ¹ selekta ra, która jest nast©pnie porównywana z wartoŒciami umieazczonyxççi w listach wyboru. Je¾eli któraŒ z list wyboru ma wartoŒ¹ równÑ selektornù wi, to zostanie wykonana inatrukcja çnajdujÑca si© bezpoŒrednio za dan* listÑ wyboru. Je¾eli wartoŒ¹ selektora nie wyst©puje w ¾adnej liŒcie wyboru, to wykoù nana zostanie instrukcja pusta lub w przypadku wystÑpienia sˆowa else, instrukcja znajdujÑca si© za tym sˆowem. WartoŒ¹ selektora musi by¹ typu porzÑdkowego, çaŒ wartoŒci znajduj** si© w listach wyboru muszÑ by¹ zgodne z typem selektora i nie mo powtarza¹ si© w innych liatach wyboru. WartoŒci staˆych w lista<* wyboru oddziela si© prçecinkami. 140 P. Michaˆkiewicz, I. —wituszak rrzyktacty: case pˆe¹ of m©tczyzna : write(' urodzony '); kobieta : write(' urodzona ') end; case klawisz of 'y','Y' : begin x:=100; y:=150 end; 'n','N' : begin x:=o; y:=0 end else wçite('ç*lciŒni©to nie ten klawisz') end; ‚* Instrukcja case porównuje wartoŒ¹ zmiennej klawisz z wartoŒciami ç ;* wyboru. Je¾eli wartoŒ¹ ta odpowiada çnakom y,Y ç pierwszej li wyboru, to zmiennej x zostanie przypisana wartoŒ¹ 100, zaŒ zmienn* wartoŒ¹ 150. W przypadku gdy wartoŒ¹ ta odpowiada znakom n,1 drugiej listy wyboru, to çmiennym x i y çostanie przypisana wartoŒi W przeciwnym przypad.ku zostanie wypisany komunikat 'WciŒni©to : ten klawisz'. *i Instrukcja iteracyjna Instrukcje iteracyjne sˆu¾Ñ do wielokrotnego wykonania pewnej ç g< okreŒlonej grupy instrukcji. Mo¾emy w„ród nich wyró¾ni¹ jednÑ inst* krj© o znanej liczbie iteracji oraz dwie instrukcje o nieznanej liczl iteracji. Te dwie ostatnie inatrukcje sÑ wykonywane, dopókijest speˆn ny warunek lub do jego osiÑgni©cia. ( y Instruhcja for ,* Instrukeja ta wykonuje okreŒlonÑ liczbg iteraeji. Ma ona nast©puj* skˆadni© : for licznik := wyr poczÑtkowe to wyr koäcowe do instrukcja; lub for licznik := wyr poczÑtkowe downto wyr koäcowe do instrukcja; ‹: Programowanie w Turbo Pascal 7.0 1* O" K "" '*IK"K "" ' J "' " J'1 """ **J' rv*L**, kowe i wyr koäcowe mówiÑ, ile raçy b©dzie wykonana iteracja. Zmienna sterujÑca jest typu porzÑdkowego, a wyr*poczÑtkowe i wyr koäcowe g, typu çgodnego z niÑ w sensie przypiaania. Liczba iteracji jeat równa: liczba iteracji = abs(wyr koäcowe - wyr poczÑtkowe)+1 **= dla obydwu skˆadni. Wykonanie instukcji for roçpoezyna ai© od obliczenia wyra¾eä wyr-pM cçÑtkowe i wyr koäcowe. Nast©pnie, je¾eli wyat©puje sˆowo "to", to do zmiennej aterujÑcej przypisywane aÑ kolejno wartoŒei, zaczynajÑc od wyr*pocçÑtkowe i koäczÑc na wyr koäcowe, w przypadku liczb caˆkov*. tych z przyrostem równym 1, wykonujÑc za ka¾dym prçypiaaniem inat*. kcj© umieszczonÑ w instrukcji for. W przypadku wystÑpienia sˆowa "downto" przyrost dla licçb caˆkowitych wynosi -1. W przypadku gdy wyr"poczÑtkowe > wyrkoäcowe prçy sˆowie "to" lub wyr*poczÑtkowe < wyr*koäcowe przy sˆowie "downto", to iteracja nia zoatanie wykónana. Gdy wyr*poczÑtkowe = wyr*koäcowe, iteracja zoa*. nie wykonanajednokrotnie. Przykˆady: for 1 := 1 to 100 do x:=x+1; ZakˆadajÑc, ¾e wartoŒ¹ zmiennej x prçed wykonaniem instrukcji foå wynosiˆa zero, to po çakoäczeniu p©tli zawiera¹ b©dçie aum© liczb od 1 do 100. for k := 100 do*vnto 20 do begin writeln('linia nr:',k); Wynikiem tego przykˆadu b©dzie wypisanie w kolejnych liniach * ekranie tekstu 'linia nr:' z numerern linii çaczynajÑcym si© od 100 koäczÑcym na wartoŒci 20. for litera : *a' to,z' do writeln(litera); W kolejnych liniach na ekranie wypisze litery, zaczynajÑc od litery i koäczÑe na literze 'z'. 142 P. Michaˆkiewicz, I. —wituszak for j := 1 to 4 do Tab[i,j] := 0; Wyzerowanie çawartoŒci tablicy dwuwymiarowej Tab. Instrukcjà repeat Instrukcja repeat ma nast©pujÑcÑ akˆadni©: repeat instrukcja; instrukcja; until rryratenie ; Instrukcja ta sˆu¾y do powtarzania instrukcji zawartych mi©dzy sˆo repeat until, a¾ do apeˆnienia warunku okreŒlonego prçez wyra: WartoŒciÑ wyra¾enia muai by¹ wartoŒ¹ logiczna. Przykˆady: repeat until Keypressed; Instrukcja powtarza instrukcjg puatÑ a¾ do naciŒni©cia *lawisza: repeat znak:=Read Key; until (znak in [,1'..'5']) or (znak = 'K' Instrukcja powtarza odczyt klawisça do naciŒni©cia du¾ej litery jednej ç cyfr od 1 do 5. Instrukcjà while Instrukcja while ma nast©pujÑcÑ skˆadni©: while wyra¾enie do instrukcja; Inatr�kcja ta sˆu¾y do powtarzania instrukcji wyst©pujÑcej po sˆ* "do",je¾elijeat apeˆniony warunek okreŒlony prçez wyra¾enie. Warto wyra¾enia muai by¹ wartoŒ¹ logiczna, zaŒ instrukcja mo¾e by‚ zaró instrukcjÑ prostÑ, jak i zˆo¾onÑ. Programowanie w Turbo Pascal 7.0 while i < 100 do writeln('CzeŒ¹ Michaˆ'); Dopóki wartoŒ¹ i jest mniejsza od 100, to bgdzie wypisywany napis 'C Zes* Michaˆ'. while not eof (plik) do begin read(ælik,znak); zãaki:=znaki+znak; end; zudx i uuç*czuny uu puprzeunço oaczyçanycn znaxow. Instrukeja wiæ¾Ñca Instrukeja wiѾÑca ma naat©pujÑeÑ skˆadnig: with nazwa [,ãazwa. .] do instrukeja; ' Inatrukeja ta pozwala na odwoˆanie si© do pól rekordu lub obiektu 15eç koniecznoŒci stosowania kwantyfikatura. Przykˆad: I i 1'* ii type Dane=record imi©, nazwisko:5tring[15]; wiek:Integer; end; uàç osoba:Dane; Odwoˆanie do pól zmiennej osoba bez instrukeji wiѾÑcej: . osoba.imi© : 'Maˆgorzata'; osoba. nazwisko : ' l*lieczorek ' osoba.wiek := 19; oraz z wykorzyataniem instrukeji wiѾÑcej: with osoba do begin imi© : 'Maˆgorzata'; 144 P. Michaˆkiewicz, I. —wituszak iià*winãv : wiek := 19 end; Iãstrukeja kodu Instrukcja kodu pozwala nam na doˆÑczenie kodu maszynowego 1 Œrednio do programu. Skladnia instrukeji kodu jest nast©pujÑca: inline ( lista elementów ); *; gdzie lia* elementów okreŒla elementy kodu oddzielone od siebie e nÑ kreakÑ /. Jako element listy mogÑ wystÑpi¹: '' - staˆe okreŒlajÑce wartoŒci liczbowe - identyfikatory çmiennych - identyfikatory zmiennych ze staˆÑ poprzedzonÑ znakiem + lub- operatory rozmiaru kodu < i > Przykˆad: inline(10/$2345/Licznik + 2/Dane - Skok); * gdzie pierwsze dwa elementy okreŒlone sÑ za pomocÑ staˆych,zaŒ staˆe dwa za pomocÑ zmiennych,uwzgl©dniajÑc przesuni©cie wzgl* *, liczb© 2,zaŒ w drugim przez staˆÑ Skok. *, Wszystkie elementy powodujÑ utworzenie jednego bajtu lub jed sˆowa kodu.Je¾eli wartoŒ‚ elementujest z zakresu 0..255,to genero, jest kod programu jako 1 bajt, zaŒ dla pozostaˆyeh wartoŒci genero* G jest kod okreŒlony przez 1aˆowo.Je¾eli chcemy zmieni¹ to standan ustawienie,mo¾emy u¾y¹ operatorów rozmiaru generowanego * * Operator < powoduje,¾ejako kod wykorzystywanyjest najmˆodszy J , *f * okreŒlone wartoŒci zaŒ operator > powoduje,¾e niezale¾nie od wart * * kod ma zawsze rozmiar sˆowa. ;" Przykˆad: inline($9876/<$9876/$38/>$38); i Programowanie w Turbo Pascal 7.0 $76, $98, $76, $38, $38, $00 Je¾eli jako element wystÑpi identyfikator zmiennej, to okreŒla on wartoŒ¹ przemieszezenia tej zmiennej wçgl©dem adresu podstawowegu, w przypadku zmiennej globalne* adresem podstawowym jest adres seg. mentu danych, okreŒlany za pomocÑ rejeatru DS, zaŒ dla zmienne lokalnej adres aegmentu atosu, do którego odwoˆujemy si© biorÑc pod uwag© prçesuni©eie wzgl©dem rejestru BP. Instruheja asemblerowa Inatrukeja asemblerowa wykorzyatywana jest do umieszeçenia instru. keji j©çyka asembler w programie. W porównaniu ç instrukejÑ kodu nie musimy zna¹ kodów maszynowych odpowiadajÑcych poszczególnym in. strukejom asemblera. KorzystajÑc z tej inatrukeji nale¾y pami©ta¹, ¾e nie * wolno zmienia¹ çawartoŒci rejeatrów BP, SS, SP i DS. Skladnia instrukeji asemblerowej jeat nast©pujÑca: asm instrukeja instrukcja end gdçie instrukeja okreŒla inatrukej©j©zyka aaembler. Instrukeje te muazÑ by¹ oddzielone „rednikiem, komentarzem j©zyka Turbo Pascal lub znaù k‹em nowej lin�. Instrukejaj©zyka asembler ma naat©pujÑcÑ akladni©: [ etykieta: ] [ kod operaeji [ operand <, operand>) ] Etykieta Etykieta jeat to identyfikator zakoäezony dwukropkiem, którym : poprçedzi¹ ka¾dÑ inatrukejg jgçyka asembler i za pomocÑ którego my çmieni¹ kolejnoŒ¹ wykonywania inatrukeji. Skok do takiej et mo¾emy wykona¹ za pomocÑ instrukeji goto lub inatrukeji skoku * asembler. Etyhiety deklarowane sÑ w bloku zawierajÑcym inst asm za pomocÑ slowa klucçowego label. label DODAJ; beqin asm DODAJ: ADD AX,HX end; end. Wyat©puje tu etykieta DODA,T, do której mo¾emy wykona¹ skok pomocÑ instrukeji JMP DODA.1. Mo¾emy tak¾e wyró¾ni¹ tçw. etykiety lokalne, które wyst©pujÑ wewnÑl inatrukcji a*m i aÑ dost©pne tylko w jej çakresie. Nie mo¾na wi wykona¹ akoku do tej etykiety za pomocÑ inatrukeji goto. Etykie lokalne nie wymagajÑ deklarowania, ale przed ich identyfikatorami mu by¹ umieazezony znak â*, Przyklad: beqin asm @START: MOV AX,(ES:BX] end; asm @START: ADD AX,g X end; end Pomimo ¾e w tym bloku wyat©pujÑ dwie etykiety o takim samym identyfikatorze, to nie majÑ one çe aobÑ nic wspólnego, gdy¾ ieh zasi©* ograniczonyjeat tylko do wˆasnych instrukeji aam. Przedrosthç Przedroatki aÑ umieazeçane prçed kodem operacji, aje¾eli on nie wystgpuje w danej linii, to dotyczÑ one inatrukeji znajdujÑcej si© w linii naat©pnej. Ich zadaççiem jeat zmiana apoaobu dçiaˆania inatrukeji 746 P. Michaˆkiewicz, I- —wituszak Programowanie w Turbo Pascal 7.0 "'J -'*J u * oddzielamy odst©pem. Mo¾emy wyró¾ni¹ nast©pujÑce przedroatki: LOCK - zablokowanie dost©pu do azyny. REP - powtarzanie operacji ˆaäcuchowej. REPE - powtarzanie operacji ˆaäcuchowej, dopóki jest speˆ. I ;~*" niony warunek równoŒci. REPZ - powtarzanie operacji ˆaäcuchowej, dãpóki jest speˆ.; * " 'I niony warunek równy zero. REPNE - powtarzanie operacji ˆaäcuchowej, dopóki nie je*t apeˆniony warunek równoŒci. REPNZ - powtarzanie operacji ˆaäCuchowej,doæóki nie jest apeˆniony warunek równy zero. SEGCS - wymuazenie wyboru rejeatru CS. SEGDS - wymuszenie wyboru rejestru DS. SEGES - wymuazenie wyboru rejestru ES. SEGSS - wynãuszenie wyboru rejeatru SS. Kody operacji Kody operacji okreŒlajÑ dyrektywy i inatrukeje asemblera. 1. Instrukeje Mo¾emy korzysta¹ z inatrukeji procesorów 8086 i 80826 oraz z instruk* koprocesorów arytmetycznych 8087 i 80287. Nale¾y jednak pami©ta¹* ograniCzeniach. Z instrukeji proceaora 80286 mo¾emy korzysta¹ po w* czeniu dyrektywy {$G+), z inatrukeji koproCeaora arytmetycznego 8 po wˆÑczeniu dyrektywy {$N+}, zaŒ z instrukeji koprocesora arytmety nego 80287 po wˆÑczeniu obu powy¾szych dyrektyw. 2. Dyrektywy Dyrektywy sˆu¾Ñ do zarezerwowania odpowiedniej liczby pami©* zmiennyCh, których nazwy wymienione aÑ po dyrektywie. Mo¾emy u Œci¹ kilka-zmiennych po dyrektywie, ale muaimy oddzieli¹ je przeci mi. Pami©¹ dla tych zmiennych rezerowowana jest w segmencie k CS. 148 P. Michaˆkiewicz, I. —wituszak %T\T A l**71*hTT L* uyrektywa rezerwuje dla umieszCzonych po ni Dyrektywa reçerwuje dla umieszezonych pu nr zmiennvâh nn lPl*hVn1 a*nmiu Dyrektywa rezerwuje dla umieszezonych po ni* zmiennych pojednym podwójnym aˆowie Operàndy Operandy sÑ to wyra¾enia zawierajÑce kãmbinacj© staˆych, nazv ŒlajÑcych dãst©pne rejestry, symboli i operatorów. OkreŒlajÑc o* nale¾y pami©ta¹, ¾e niektóre aˆowa aÑ zaatrze¾one i nale¾Ñ do ni* - nazwy rejeatrów AH BP rX DX sT AL BX DH ES AX CH DI SI BH CL DL sP BL CS DS 55 - nazwy operatorów (tabela na naat©pnej stronie). Sˆowa zastrze¾one majÑ wy¾azy pççorytet ni¾ identyfikatory zade wane prçez programist©. Przykˆad: var BH : Byte; begin BH:=10; asm MOV BH, 3 END; writeln(BH); end Programowanie w Turbo Pascal 7.0 ***vw** *uv*G*uy nu*zyaçae z êast©ptç*ÑCyCh dy: AND okreŒla iloczyn logiczny wartnŒci bezpoŒrednich na oszeze ólnych bitach HIGH je¾eli wyra¾enie jest sˆowem, to çwraca bardçiej LOW *je¾eli wyra¾enie jest aˆowem, to çwraca mniej çnaczÑcy * MOD zwraca reszt© z dzielenia dwóch wartoŒci bez oŒrednich NOT okreŒla negacj© wartoŒci bezpoŒredniej na osçeze ólnych jej bitach OFFSET zwraea adres wyra¾enia wzgl©dem segmentu w którym ono wyat©puje OR okreŒla aum© logicznÑ warto„ci beçpo„rednich na poazezególnych bitach PTR okreŒla adres pami©ci dla wyra¾enia umieszcçonego po operatorze o typie okreŒlonym przed operatorem SEG zwraca adres segmentu,w którym znajduje ai© WV1'A*PâllP SHL powoduje przesuni©cie logiczne w lewo wartoŒci bezpoŒredniej, umiesçeçonej przed operatorem, o liczb© bitów okreŒlonÑ przez wartoŒ¹ bezpoŒredniÑ, SHR powoduje przesuni©eie logiezne w prawo wartoŒci bezpo„redniej, umieazczonej prçed operatorem o liczb© bitów okreŒlonÑ przez wartoŒ¹ bezpo„redniÑ, c.d. na nast©pnej stronie Pózçiewa¾ identyfikator BH jest sˆowem zastrze¾onym w instr asemblerowej asm, to ma on wy¾szy priorytet od identyfikatora zmif BH typu Byte. Powoduje to, ¾e wartoŒ¹ 3 zostanie przypiaana do reji BH a nie do zmiennej BH. Na ekranie zostanie wyŒwietlona liczba Je¾eli ehcemy odwoˆa‚ si© do zmiennej, która poaiada taki sam ideç kator, jakjedno ze sˆów çaatrçe¾onych, to musimy przed identyfçka* çmiennej u¾y¹ znaku &. 150 P. Michaˆkiewicz, I. —wituszak P*'zykˆad: ur*r*r*r*H odwoˆanie da: NEAR, OFFFEH odwoˆanie bli okreŒla sum© modulo 2 dwóch wartoŒci bezpoŒredná êà êãaçrçuàiilr",*1, 1,:*....u var BH : Byte; begin BH:=10; asm MOV & BH, 3 END; ù writeln(BH); end. Poniewa¾ przed identyfikatorem BH umieŒciliŒmy çnak &, to wartc ù zoatanie przypiaana do zmiennej BH, a nie do rejestru BH. Na ekr; zoatanie wyŒwietlona liczba 3. Poçà operatorami wymienionymi w , doat©pne sÑ operatory wymienione w tabeli na nast©pnej stronie. Podobniejak operatory wj©zyku Turbo Pascal, tak¾e powy¾sze opera* poaiadajÑ okreŒlone priorytety. Poni¾ej prçedatawione sÑ operat poczynajÑc od operatorów o najwy¾szym priorytecie: I1 , tl, . Programowanie w Turbo Pascal 7.0 - staˆe - nazwy rejestrów - symbole r? Mo¾emy u¾ywa¹ staˆych numerycznych i ˆaäcuchowych. Staˆe nuçz czne mogÑ by¹ z zakresu od -2147483648 do 4294967295. Mo¾emy tym stosowa¹ oprócz standardowej notacji dçiesi©tnej tak¾e no1 zapisu liczb w postaci dwójkowej, ósemkowej i azesnastkowej. : stosowaniu tych notacji po liczbie nale¾y umieŒci¹ liter© odpowiedni O lub H. Zamiast litery H mo¾emy u¾ywa¹ znaku $, umiesçezonego p liczbÑ. W przypadku notacji szesnastkowej z u¾yciem litery H na *' dodatkowo przed liczbÑ umieŒci¹ zero, je¾eli jej pierwsza cyfra ukreŒlona çà pomocÑ litery. Prçykˆad:, $AOOF OAOOFH 1200170 l0l0000000001111B ù 40975 Wszystkie powy¾sze lieçby okreŒlajÑ t© samÑ wartoŒ¹, ale w ró¾n notacjaeh. Staˆe ˆaäcuchowe muszÑ by¹ umieszezone w cudzysˆowach lub w apos * fach. Je¾eli wewnÑtrz ˆaäcucha chcemy umieŒci¹ cudzysˆów lub aposl to do zaznacçenia staˆej ˆaäcuchowej u¾ywamy drugiego znaku çapisujemy go podwójnie. rr ** Prçykˆad: HIGH, LOl*l +, - OFFSET, SEG, TYPE ; PTR, *, /, MOD, SHL SHR +, - NOT, AND, OR, XOR 152 P. Michaˆkiewicz, I. —wituszak ' Paweˆ KuŒ ' ' Nazwisko : "Paweˆ KuŒ " ' To jest apostrof ' ' To tak¾e jest apostrof " ' ** W wyra¾eniach mo¾emy u¾ywa‚ nast©pujÑcych synçboli j©çyka Tu fj* Pascal: etykiet, staˆych, zmiennych, typów, procedur i funkeji p , symbolami: * 1) ident*çkatorów standardowych procedur i funkeji; Programowanie w Turbo Pascal 7.0 1 154 3) staˆych ˆaäcuchowych, zbiorowych i zmiennoprzecinkowych; 4) procedur i funkcji z dyrektywÑ inline; 5) etykiet, które nie sÑ çadeklarowane w bie¾Ñcym bloku. Oprócç tych aymboli mo¾emy u¾ywa¹ nast©pujÑcych symboli asemblera *Code - reprezentuje bieçÑcy segment kodu. *Data - repreçentuje bie¾Ñcy segment danych. *7Result - reprezentuje zmiennÑ okreŒlajÑcÑ wartoŒ¹ funkcji. Synçbole *Code i *Data muszÑ wystÑpi¹ ˆÑcznie z operatorem SEG. Procedury i Funkcje W bloku gˆównym mo¾emy wyodr©bni¹ cz©Œci kodu, które tworzÑ logi*. nÑ caˆoŒ¹ i które mogÑ by¹ wielokrotnie u¾yte w czasie pisania program*, W tym celu u¾ywa si© procedur i funkcji. Deklaracja procedury i funkcji, podobniejak program, skˆada si© ç nagˆówka i bloku, ale çakoäczonaje* Œrednikiem. PROCEDURY Skˆadnia proeedury jest nast©pujÑca: procedure Nazwa Procedury ( Parametry ); dyrektywa; blok; gdzie Nazwa Procedury jest identyfikatorem, zaŒ Parametry oznaczt list© parametrów formalnych, w której poszczególne skˆadniki oddzi* ne sÑ od siebie prçecinkami. Dokˆadny opis parametrów znajduje si© punkcie "Parametry '. Lista parametrów formalnych, dyrektywa oraz blok mo¾e wystÑpi¹ o* nalnie. MogÑ wystÑpi¹ nast©pujÑce dyrektywy: near, far, interru; wyst©pujÑee razem ç blokiem procedury oraz dyrektywy: forward, exG nal, assembler i inline bez bloku procedury. Ka¾da procedura j* uaktywniana za pomocÑ instrukcji procedury, którÑ stanowi identyä* tor procedury oraz, je¾eli wyst©puje, lista parametrów aktualnych. J* wywoˆana procedura zawiera w swoim bloku wywoˆanie samej siebie, tego typu procedura naçywana jest procedurÑ rekurencyjnÑ. P. Michaˆkiewicz, I. —wituszak Wj©zyku Turbo Pascal wszelkie odwoˆania do procedur mogÑ b c dalekiego (far) lub bliskiego (near). Typ odwoˆania jeat automa ç okre„lany przez kompilator w oparciu o deklaracj© procedury. Procedury çadeklarowane w c穌ci interfaee moduˆu sÑ traktowa procedury z odwoˆaniem dalekim, za„ zadeklarowane w cz©Œci mentation moduˆu lub w programie jako procedury z odwoˆani skim. Dla odwoˆaä bliskich procedura ma efektywny kod pod wz; rozmiaru oraz szybkoŒci wykonania, ale mo¾e by¹ wywoˆywana wn©trza moduˆu, w którym zostaˆa zadeklarowana. Je¾eli wyt odwoˆanie dalekie, to procedura mo¾e by¹ wywoˆywana tak¾e ç moduˆów, alejej kodjest mniej efektywny. Programista mo¾e sam okreŒli¹ typ odwoˆania do procedury przez „ dyrektywy kompilatora $F lub bezpoŒrednio çà pomocÑ dyrekty* lub far, umieszczonych przed blokiem procedury. Przykˆad procedury z odwoˆaniem dalekim: procedure Pisz XY (x,y : iãteger; tekst : striãg); far begin if (x in [1..80]) and (y iã [1..25]) then begin Go To XY(x,y); Write(tekst); end; end; êyrehtywa Interrupt Dyrektywa interrupt poçwàlà ãà pisanie procedur obsˆugi przez Ka¾da taka procedura musi posiada‚ nast©pujÑcÑ skˆadni©: procedure Nazwa Procedury (Flags, C5, IP, AX, BX, 5 I, DI, DS, ES, BP : hiord ) ; interrupt; blok; Podana wy¾ej lista parametrów nie musi wyst©powa¹ w takiej poe Mo¾e by¹ krótsza i u¾ywa¹ innych naçw, ale zawartoŒ¹ rejestrów * przesyˆana w takiej kolejnoŒci, jak w powy¾szej deklaracji. Programowanie w Turbo Pascal 7.0 uyreRçywa * orwaru ZdarzajÑ si© przypadki podczas programowania, ¾e procedury sÑ wza. jemnie zale¾ne, to znaczy, ¾e w bloku jednej procedury wywoˆujemy inn* procedur©, która wewnÑtrz swojego bloku wywoˆuje procedur©, która wywoˆuje, np. : procedure Procl(a: integer; b: string); begin ?roc2(2.9); end; procedure Proc2(z: Real); begin Procl(10,'Piotr'); end; Gdy podczas kompilacji procedury Procl kompilator nie ma dost©pu do wszystkich deklaracji u«ywanych w pocedurze Procl, to wyŒwietli bˆÑd Aby temu zapobiec, stosuje si© tak zwane deklaracje wyprzedzajÑceç zastosowaniem dyrektywy forward, która mówi kompilatorowi, ¾e dehlaù racja definicji procedury wyatÑpi w dalszej cz©Œci programu. Powy¾szy przykˆad z poprawnÑ deklaraejÑ proeedur: procedure proc2(z: Real); fox'ward; procedure Procl(a: integer; b: string); begin Proc2(2.9); end; procedure Proc2; begin Procl(10,'Piotr'); end; Jak wida¹ na powy¾szym przykˆadzie, caˆa deklaracja procedu* dyrektywÑ forward skˆada si© z deklaracji wyprzedzajÑcej i dekl* 156 P. Michaˆkiewicz, l. —wituszak aennçc*ç proceaury. w ae*larac*ç detinicji mo¾emy pominѹ list© * metrów formalnych. Obie cz©Œci deklaracji procedury muszÑ wystÑ* tej samej cz©Œci deklaracyjnej. Pomi©dzy nimi mogÑ znajdowa¹ si© di racje innych procedur lub funkcji odwoˆujÑcyeh si© do dekiaracji wy) dzajÑcej. Deklaracja definicji mo¾e byä deklaracjÑ external lub assembler, al* mo¾e mieä deklaraeji far, near, interrupt, inline lub innej dekla wyprzedzÑjÑcej. Dyre*tywa Externàl PoeiadajÑc zbiór gotowych, akompilowanych procedur, napisanyc j©zyku assembler, mo¾emy doˆÑczy¹ je do naszego programu za pon dyrektywy kompilatora {$L PLIK.OBJ}, gdzie PLIK.OBJ jest na ::: pliku zawierajÑcÑ doˆÑczane procedury. DoˆÑczone procedury mo¾ " wykorzysta¹ po ich wczeŒniejszym zadeklarowaniu za pomocÑ nagˆó procedury z dyrektywÑ external. Przykˆad deklaracji: procedure Rysuj P Cx( nazwa : 5tring ); external; Dyrehtywa Assembler Mimo ¾e kompilatorj©zyka Turbo Pascal daje efektywny kod, to niek problemy mo¾emy efektywniej rozwiÑza¹ za pomocÑ j©zyka assem* W tym celu za pomocÑ dyrektywy assembler mo¾emy umieszcza . procedurach instrukcje assemblera poprzedzone sˆowem asm, które wymagajÑ w tym przypadku u¾ycia bloku ograniczonego sˆowami bt i end. Przykˆad: procedure suma(var a,b:integer); assembler; asm les bx,b mov ax, es:[bx] :;, les äix, a add ax,es:[bx] mov es:[bx),ax end; *rocedura suma wykonuje naat©pujÑce dziaˆanie: a:=a+b Programowanie w Turbo Pascal 7.0 asm mov ah,30h int 21h end; Dyrehtywà InlŒne Dyrektywa ta pozwala na wstawienie bezpoŒrednio do programu instr*. keji kodu maazynowego zamiaat bloku instrukeji. Poszezególne kody oddçiela si© znakiem /. Przykˆady: FUNKC*lE procedure Zablokuj Przerwania; inline($FA); procedure Odbloku j Przervrania ; inline($FB); Skˆadnia funkeji jest nast©pujÑca: function Nazwa_Funkcji ( Parametry ): Typ Rezultatu; dyrektywa; blok; gdzie Nazwa Funkeji jest identyfikatorem, zaŒ Parametry oçnacz* liat© parametrów fornçalnych, w której poszezególne skˆadniki oddziela ne sÑ od siebie przecinkami. Dokˆadny opia parametrów znajduje si© * punkcie "Parametry". Ka¾da funkeja w wynikujej wykonania zwraca wynik za pomoeÑ instrW keji przypiaania o naat©pujÑcej skˆadni: Nazwa Funkcji := zwracany wynik; którego typ okreŒlamy w nagˆówku funkeji jako Typ Rezultatu. Lisa parametrów formalnych oraz dyrektywa mo¾e wystÑpi¹ opejonalm& MogÑ wystÑpi¹ nast©pujÑce dyrektywy: near, far, wyat©pujÑce razemf blokiem funkeji oraz dyrektywy: forward, external, asaembler i inlina bez bloku funkeji. Ka¾da funkejajest uaktywniana podczas oblicçania wyra¾enia, w któN* zoataˆa umieszezona, przez umiesçeçenie w nim identyfikatora fun* .. ..J",.yY JY, **"**J Yu i**' uãuuniuyl;11. ucZGl1 WyWOt funkeja zawiera w swoim bloku wywoˆanie samej siebie, to tego t funkeja naçywanajest funkejÑ rekurencyjnÑ. Wazyatkie dyrektywy umiesçezone w opiaie proeedury, oprócz dyrekt; interrupt, sÑ mo¾liwe do u¾ycia. Przykˆad funkeji: function Silnia ( n: Integer): Longint; var i:Integer; wynik:Longint; begin wynik:=1; for i:=1 to n do rrrynik : =wynik*i ; 5ilnia:=wynik; end; funetion Silnia ( n: Integer): Longint; var i:Integer; begin if n=0 then silnia:=1 else silnia:=silnia(n-1)*n; end; J Pierwsza funkeja licçy silni© metodÑ iteracyjnÑ, zaŒ druga w oparci* * rekurenej©. Obie funkeje nie kontrolujÑ zakresu parametru wejŒciowt n, co powoduje przekroczenie zakreau typu Longint i zwrot bˆ©d: wartoŒci. PARAMETRY W nagˆówkach procedur i funkeji mogÑ wystÑpi‚ parametry. Mo¾ei wyró¾ni¹ parametry: - formalne - aktualne 158 P. Michaˆkiewicz, I. —wituszak Programowanie w Turbo Pascal 7.0 procedure Mnót ( A, B: Macierz ; var C: Macierz ); zawiera trçy parametry formalne A, B i C typu Macierz. Parametry formalne sÑ lokalne w deklarowanej procedurze lub funkeji i nie sÑ dost©pne w bloku nadrz©dnym do danej procedury lub funkeji. Parametry aktualne sÑ to parametry, które zostanÑ przypisane do parametrów forrxçalnych w czasie wywoˆania prãcedury lub funkeji, Je¾eli w programie mamy zadeklarowazçe zmienne TablicaA, TablieaB oraz TablicaC typu Macierz, to podezas wywolania: Mnó¾ ( Tablica A, Tablica B, Tablica C ); zmienne te stanowiÑ wˆaŒnie parametry aktualne wywoˆania, zaŒ we. wnÑtrz procedury widziane sÑjako zmienne A, B i C. Licçba i typ parametrów aktualnyeh musi odpowiada¹ liczbie i typo* parametrów fornçalnych. Skojarzenie parametrów aktualnyeh i fornçalnych wykonuje ai© wedˆug kolejnoŒci ieh wyst©powania, tzn. ¾e pierwszy p„rametr aktualny kojarzonyjest ç pierwszym parametrem forxualnym, drugi z drugim itd. Prçekazywanie parametrów aktualnych mo¾e odbywa¹ si© na cztery aposoby: 1) przez wartoŒ¹ Parametry prçekazywane sÑ przez wartoŒ¹, je¾eli przed ich identyfikatorem nie jest umiesçczone sˆowo kluczowe var lub const. Odpowiednie parametry aktualne muszÑ by¹ wyra¾eniami. Nale¾y pami©ta¹, ¾e war to„¹ wyra¾enia musi by¹ zgodna w sensie prçypiaania z typem odpowiadajÑcego mu parametru fornçalnego, ale nie mo¾e by¹ typu plikowego ani atrukturalnego, którego akˆadowym typem jest typ plikowy. Parametry formalne przyjmujÑ wartoŒci poczÑtkowe równe wartoŒciom obliczonym z odpowiadajÑcych im parametrów aktualnych. Wszelkie operacje na parametrach fornçalnych nie powodujÑ zmiany wartoŒci parametrów aktualnych. Przykˆad: uar Liczba:integer; procedure Dodajl0(x:integer); begin *áO P. Michaˆkiewicz, I. —wituszak write(x); end; beqin Liczba:=l; Dodajl0(Liczba); writelã(Liczba); end. Po wykonaççru tego przykˆadu zoatanÑ wypia*e na ekranie lic¾ i 1. Zmienna Licçba jest prçekazywana jako parametr aktual: procedury Dodajl0, ale wewnÑtrz procedury zwi©kszanyjest par; formalny x, który wyst©puje jako kopia zmiennej Liczba. Ponieu procedurze Dodajl0 nie operujemy bezpoŒrednio na zmiennej L: tylko najej kopii, to po wykonaniu tej procedury zmienna dalej zachc wartoŒ¹ równÑ l. 2* przez stadc* Parametry prçekazywane sÑ przez ataˆÑ, je¾eli prçed ich identyfikatr jest umieszezone alowo kluczowe conat. Parametr formalny okreŒlo ten aposób mo¾e by¹ tylko udezytywany i nie mo¾na do niego przy* innej warto„ci. Stoaowanie tego rudzaju parametru zalecane jest, wewnÑtrz procedury lub funkcji nie jeat przewidywana zmiana da* parançetru, a çarazem stosowanie go powoduje optymalizacj© kodu, parametry przekazywane przez ataˆÑ sÑ typu tablicowego lub ˆaäcu wego. Przykˆad: var Liczba, Skala:integer; procedure Dodaj*y: Integer; const x: Integer); begiã y:=y+x; ivriteln (y ) ; end; begin Liczba:=3; Skala:=10; Dodaj(Liczba,5kala); writeln(Liczba); Programowanie w Turbo Pascal 7.0 Po wykonaniu tego przykˆadu zoatanÑ wypisane na ekranie licçby:13 i 3. Zmienna I.iczba, b©dÑca parametrem aktualnym,jest przekazyw*a prçez wartoŒ¹, ale zmienna Skala jest przekazywana jako staˆa, ponie. wa¾jej warto„¹ nie b©dzie ulegaˆa zmianie wewnÑtrç procedury. Pozw*a to mi©dçy innymi na çwi©kszenie hontroli nad pisanym programem, gd* przypisanie wartoŒci tej zmiennej powoduje bˆÑd kompilacji. 3) przez zmiennÑ Parametry przekazywane sÑ przez zmiennÑ, je¾eli przed ich identyfik* torem jest umieazcçone sˆowo kluczowe uar. Parametr ahtualny okreŒla ny w ten aposób muai by¹ zmiennÑ, której typ musi by¹ taki aam, jak typ odpowiadajÑcego jej parametru formalnego. Parametr przehazywany przez zmiennÑ atoauje ai© wtedy, gdy procedura musi çwróci¹ wyn* awojego dçiaˆania do awojego otoczenia. Jest to mo¾liwe tylko dlatego, * wazystkie operacje wyhonywane na parametrze formalnym aÑ fahtyczn* wykonywane na parametrçe aktualnym. Przykˆad: uar Liczba:integer; procedure Dodajl0(var x:integer); begin x:=x+10; write(x); end; begin Liczba:=1; Dodajl0(Liczba); writeln(Liczba); end. Po wyhonaniu tego prçyhˆadu zostanÑ wypiaane na ekranie liczby:1 i 11. Zmienna Liczba jeat prçekazywana jako parametr ahtualny a procedury Dodajl0, a wewnÑtrz procedury zwi©kszany jest param* '‹' formalny x. W przeciwieäatwie do parametrów prçekazywanych p* wartoŒ¹, parametr formalny xjeat skojarzony ç parametrem aktualnyå co powoduje, ¾e po çahoäczeniu procedury parametr aktualny b© ˆ w rto p am t fo * dhu jako ho a p g ametru kt a fo* 162 P. Michaˆkiewicz, l. —wituszak Parametry przehazywane aÑ prçez zmiennÑ ççieokreŒlonego typu, w deklaracji nagˆówka procedury lub funkcji nie ohreŒlimy typu metru fozçnalnego. W wyniku takiej deklaracji parametry aktualne by¹ dowolnego typu, ale muazÑ to by¹ zmienne. Parametry fon muazÑ wystÑpi¹ ze aˆowem kluczowym var lub çe aˆowem conat. wystÑpi aˆowo var, parametr mo¾e zosta‚ zmodyfikowany, zaŒ gd atÑpi sˆowo conat, mo¾e on zosta¹ tylho odcçytany. Parametry okrf przez çmienne nieokreŒlonego typu wewnÑtrz bloku posiadajÑ ty zgodny z ¾adnym innym typem. Mo¾emy ich u¾ywa¹ poprzeç kon, typu w nast©pujÑcy apoaób: dost©pny typ ( parametr z nieokreŒlonym typem ) Przykˆad: -var Liczba:integer; procedure Dodajl0(var x); beqin integer(x):=integer(x)+10; writeln(integer(x)); end; begin Liczba:=1; Dodajl0(Liczba); writeln(Liczba); end. Po wyhonaççiu tego przyhˆadu zostanÑ wypisane na ehranie licz* i 11. Zmienna Licçba jeat przekazywana jako parametr aktual* procedury Dodajl0, a wewnÑtrz procedury zwi©hszany jest par* fornçalny x, htóry podlega honwersji typu. PARAMETRY OTWAR,TE Parametry otwarte pozwalajÑ na prçesyˆanie do procedur i funkcji 1 i ˆaäcuchów o zmiennej dˆugoŒci. Mo¾emy wyró¾ni¹ parametry otwarte tablicowe i ˆaäcuchowe. Tablice otwàrte Tablice otwarte dost©pne aÑ po u¾yciu dyrektywy ($P+} lub wˆÑcs Programowanie w Turbo Pascal 7.0 opCjç vpen paçdtuài.cl* w iuciiu vrwv**o,w* uu,ccuc,ey vr.wurçe wane jako parametry formalne procedur i funkCji.Tablice te nie majÑ *; okre„lonego wymiazçç i definiowane sÑ nast©pujÑco: W P*z'Padku definiowania proCedury lub funkeji,której paraz mogÑ by¹ zmienne ˆaäCuChuwe o ró¾nych dˆugnŒCiaCh,mo¾emy array of Typ Podstawowy deklaracji identyfikatora OpenString jako nazwy typu lub de* procedury lub funkCji çç¾y¹ ˆÑcznie z dyrektywÑ ($P+} komp: gdzie Typ Podstawowy okreŒla typ elementów tabliCy.Parametry aktuù Otrzymamy wtedy tzw.ˆaäcuchy otwarte.Identyfikator Opeç alne muszÑ by¹ zmiennymi typu Typ Podstawowy lub tablicami o eleù „ çadeklarowanyjest w module Syste*. mentach tego typu. Przykˆad: Nale¾y pami©ta¹,¾e przy przesyˆaniu przez wartoŒ¹ du¾ych tablic do Procedure Dodaj (uar Tekst : openstring ); ' procedur i funkeji z otwartymi parametrami moçe wystÑpi¹ przepeˆn** nie stosu.Wynika to z faktu,¾e kompilator tworzy kopi© tej tablicy. ¾' lub Przykˆad: Pxocedure Dodaj(var Tekst : 5tring ); procedure Wpisz WartoŒ¹(var Tab : array of Integer); begin 7 gdzie parametrem procedury jest tablica Tab o nie ustalonym z góry end wymiaz'ze.Po przekazaniu tablicy jako parametrçç do funkCji lub proce- dury jest ona traktowana jako tablica o nast©pujÑcej strukturze: Dla tak zdefiniowanej procedury Dodaj i dla nast©pujÑcych zmieç array [ O..N-1] of Typ var gdzie N okreŒla liczb© elementów w przekazanej tablicy. x : string ; y:5tring[15); Mo¾emy si© o tym przekona¹ po wykonaniu nast©pujÑcego programu: wywoˆania poni¾sze sÑ poprawne: Dodaj(x); Dodaj(y); Tab=array[3..10] of Byte; const ; Za pomocÑ funkeji Low i High mo¾emy odezyta¹ indeks pierv T : Tab= (1,2,3,4,5,6,7,8) ; i o8tatniego elementu w tablicy.W pr2ypadku tablicy otwartej fç procedure Wypisz (var Tablica : array of Byte ) ; LOw zawBZe zwraCa zero. begin Write Ln(Low(Tablica),'',High(Tablica)); end; begin i Wypisz(T); Write Ln(Low(T),'',High(T)/; end. Typ elementów tablicy przekazywanej do proCedury lub funkCji musi b* taki sam,jak typ elementów tablicy otwartej.Za pomocÑ funkeji I*A i High mo¾emy odezyta¹ indeks pierw*zego i ostatniego elementu A tablicy.W przypadku tablicy otwartej funkej„ Low zawsze zwraca *e* 164 P.Michaˆkiewicz,I.—wituŒzak Programowanie w Turbo Pascal 7.0 Moduˆ Syst*m sra*,E n*ççcJowaNE ErrorAddr akˆadnia opis çobacz EgitCode akˆadnia opia zobacz EzitProc N" ahˆadnia opis zobacz conat ErrorAddr: Pointer = nil; Staˆa zawiera adrea instrukcji, która apowodi ˆa bˆÑd wykonania. Je„li program zakoäczy normalnie lub zostaˆ przerwany wywoˆaniem cedury Halt, tu waçtoŒciÑ tej ataˆej jeat nil. ExitGode, ExitProc . conat ExitCode: Integer = 0; . Staˆa okreŒla kod zakoäczenia programu. * program zakoäczyˆ ai© normalnie, to ExitC jest równe 0, zaŒ dla programu przerwanego woˆaniem procedury Halt zmienna ExitC zwraca wartoŒ¹ odpowiadajÑcÑ parametrowi cedury Halt. W przypadku przerwania progr* z powodu wyatÑpienia bˆ©du wykonania w Eç** de jeat zwraeany bˆÑd wykonania. . ErrorAddr, Eç*tProc . const Eç*tProc: Pointer = nil; . Staˆa u¾ywana do zainstalowania procedury, Œcia, która jest wykonywana przy normalç zakoäczeniu programu, zakoäczeniu progr* przerwanym przez procedur© Halt lub wyatÑ niem bˆ©du wykonania. . ErrorAddr, E*„tCode Programowanie w Turbo Pascal 7.0 akˆadnia opis zobacz F*'eeList skˆadnia opis zobacz HeapEnd akˆadnia opis zobacz HeapError skˆadnia opis conat FileMode: Byte = 2; Staˆa u¾ywana do ukre„lania trybu dost©pu do plików otwartych przez procedur© fteaet. Zakre* i '&:* doat©pnych wartoŒci ataˆej zale¾y od u¾ywanej weraji Doa-u. Jednak dla wazyatkich weraji sÑ çdefiniowane naat©pujÑee tryby: 0 - plik tylko do odczytu, 1- plik tylko do pisania, 2 - plik do odczytu i do piaania. Standardowo war�o„ciÑ zmiennej FileModejewt2. . ftewrite . const FreeList: Pointer = nil; . Staˆa wskazuje na pierwszy wolny blok na stercie. Blok ten zawiera wska«nik do naat©pnego wolneù go bloku, a ten z kolei do nast©pnego wolnego bloku itd. Oatatni wolny blok zawiera wska«nik na wierzchoˆek sterty. Je„li na atercie nie ma wolnych bloków, to wartoŒ" FreeList odpowiada HeapPtr. . Dispose, FreeMem, HeapPtr : const HeapEnd: Pointer = nil; . Staˆa wakazuje na koniec pami©ci DOS'u u¾ywaù nej przez program. Staˆa ta jest inicjalizowana w chwili rozpocz©cia dziaˆania programu. . HeapOrg, HeapPtr . const HeapError: Pointer = nil; : Staˆa wakazuje adres funkcji obaˆugi bˆ©du sterty, którajest wywoˆywana, gdy na atercie zabrak*e 768 P. Michaˆkiewicz, I. —wituszak 1 ** rl*.ruz*e*ença. *natalowanie r*'*-*ir* obsˆugi bˆ©du aterty odbywa si© przez prz* jej adreau do ataˆej HeapError: heap Error:= @ Heap Func zobacz . GetMem, New HeapOrg skˆadnia . const HeapOrg: Pointer = nil; opis . Staˆa wakazuje na spód (poczÑtek) sterty, zobacz . HeapEnd, HeapPtr HeapPtr akˆadnia : const HeapPtr: Pointer = nil; opis . Staˆa wakazuje na wierzchoˆek sterty, któ zarazem poczÑtkiem wolnej pançi©ci.Za k razem,gdy zmienna dynamiczna jeat odkl na atert©,to ataˆa HeapPtr jeat przeauw* góry o wielkoŒ¹ tej zmiennej. zobacz . HeapOrg,HeapEnd InOutR.es a*ˆadnia . conat InOutRes: Integer = 0; opia . Staˆajest u¾ywana przez wewn©trzne funkcj Œcia - wyjŒcia.W ataˆej tej jest zapisywany, dziaˆania funkcji IOReault. zobacz : IOReault OvrCodeList deklaracja . conat OvrCodeLiat: Word = 0; opia . Staˆa u¾ywana jeat przez program zarzÑdz nakˆadkowaniem i zawiera liczb© segnçentó, du nakˆadek.Je¾eli program nie zavc nakˆadek,to staˆa ta jeat równa 0,w innym padkujest ró¾na od 0.Staˆa tajest inicjalizo* przez linker Turbo Pascala i nie nale¾y jej ç nia¹. Programowanie w Turbo Pascal 7.0 skˆadnia . const OvrDebugPtr: Pointer = nil; *owy mo¾na przesunѹ do innego poˆo p*l©* P*ez P*l*Pisanie nowych war opis . Staˆa jest u¾ywana przez wbudowany debugger staˆych OvrHeapOrg,OvrHeapPtr i systemu Tççrbo Pascala lub prçez debugger çew. apEnd.Wszelkie zmiany powinny by¹ n©trzny,np.Turbo Debugger przy uruchamianiu * prçeprowadzone przed wywoˆaççiem pr programów nakˆadkowych. Ovrlnit,a po wywoˆaniu procedury OvrC] OvrDosHandle aby upewni¹ si©,¾e bufor nakˆadkowy jes Ponadto wielkoŒ¹ bufora obliczona jako s*ˆadnia : conat OvrDosHandle: Word = 0; OvrHeapOrg-OvrHeapEnd powinna by¹, lub prçynajmniej równa wielkoŒci dane opis . Staˆa przechowuje uchwyt pliku stanowiÑcego ãd- OvrHeapSize: kˆadk© programu.Staˆa jest inic*alizowana przez zobacç . OvrHeapEnd,OvrHeapPtr,OvrSetBuf procedur© Overlnit z moduˆu Overlay.WartoŒ¹ 0 tej staˆej informuje,¾e plik na*ˆadkowy aktualnie OvrHeapPtr nie jest otwarty. skˆadnia . const OvrHea Ptr: Word zobacz . OvrInit opis . Staˆa prçechowuje wska«ni* b*'ora na* OvrEmsHandle Staˆa jest uçywana prçez program zarzѹ skˆadnia . const OvrEmsHandle: Word = $FFFF; na*a*owaniem. * zobacz OvrHeapOrg opis . Staˆa przechowuje uchwyt pliku do bloku pami©ci typu expanded dla programu nakˆadkowego.Sta- OvrHeapSize ˆa jeat inicjalizowana przez procedur© F*. OverlnitEMS z moduˆu Overlay.WartoŒ¹ $FFFF s*ˆadnia . const OvrHeapSize: Word = 0; tej staˆej informuje,¾e nie zostaˆ przydzielony * opis : Staˆa zawiera minimalny rozmiar bufora * blok pami©ci rozsçerzonej dla nakˆadek. dek odpowiadajÑcy najwi©kszej nak zobacz . Ovrlnit,OvrlnitEMS programu.Je¾eli program nie zawiera ¾a OvrHeapEnd nakˆadek,to s*a * ma wartoŒ¹ równÑ 0. zobacz . OvrHeapOrg akˆadnia . const OvrHeapEnd: Word = 0; OvrLoa*,ist opis . Staˆa przechowuje adres koäca segmentu bufora przeznaczonego dla nakˆadek. . const OvrLoadList: Word = 0ù zobacz : OvrHeapOrg,OvrSetBuf *.; opis . Staˆa u¾ywana jest przez program zarzÑdz nakˆadkowaniem i zawiera licçb© zaˆadowa O*rHeapOrg na*ˆadek.Je¾eli program nie zawiera nakˆ; shˆadnia . const OvrHeapOrg: Word = 0; * staˆa ta jest równa 0,w innym prçypadkç opis . Staˆa rzechowu e adres ocz tku se entu bu- * ró¾na od 0.Staˆa ta jest inicjalizowana * linker Turbo Pascala i nie nale¾yjej çmieni* fora prçeznaczonego dla nakˆadek o rozmia* danym w zmiennej OvrHeapSize.Bufor na*ad- 170 P. Michaˆkiewicz, I. —wituszak Programowanie w Turbo Pascal 7.0 shˆadnia opis RandSeed shˆadnia opis zobacz Seg0040 skˆadnia zobacz SegA000 skˆadnia opia zobacz . const PrefixSeg: Word = 0ù . Staˆa zawiera adres segmentu PSP utworzoneg , ` * przez system DOS, gdy jeat wykonywaççy pro. . conat RandSeed: Long¾nt = 0; . Staˆa przechowuje wbudowany "zarodek" gene ratora liczb losowych. ù Random, Randomize . eonat Seg0040: Word = $0040; w=, *wiy iççuze Ayc u¾yty przy dostgpie do segmentu ROM BIOS o adresie $0040. w çryaçe rzeczywistym Seg0040 ma zawsze wartoŒ¹ $0040, natomiast w trybie chronionym warto„¹ tej staˆej mo¾e by¹ ró¾na. . SegA000, SegB000, SegB800 . const SegA000: Word = $A000; . Staˆa wybiera aegment o adreaie $A000. Staˆa zawiera selektor, który mo¾e by¹ u¾yty przy doat©pie do atron pami©ci graficznej dla kart EGA i VGA o adresie aegmentu $A000. StaˆÑ doˆÑczuno dla kompatybilnoŒci mi©dzy rzeczywistym trybem DOS'u a trybem chronionym. W trybie rzeczywiatym SegA000 ma zawsze wartoŒ¹ $A000, natomiaat w trybie chronionym wartoŒ¹ tej staˆej mo¾e by¹ ró¾na. Seg0040, SegB000, SegB800 172 P. Michaˆkiewicz, I. —wituszak i *,* ; '* ** : skˆadnia . const SegB000: Word = $B000; opis . Staˆa wybiera aegment o adreaie $B000. zawiera selektor, który mo¾e byä u¾yty pr; st©pie do pami©ci wideo sterov monochromatycznego o adreaie segmentu $ StaˆÑ doˆÑczono dla kompatybilnoŒci mi©dç czywiatym trybem DOS'u a trybem chroni* W trybie rzeczywistym SegB000 ma çawazi toŒ¹ $B000, natomiast w trybie chroni wartoŒä tej staˆej mo¾e by¹ ró¾na. zobacz : Seg0040, SegB000, SegB800 SegB800 skˆadnia : conat SegB800: Word = $B800; st©pie do pami©ci wideo dla karty CGA o a segmentu $B800. StaˆÑ doˆÑczono dla komp SegB800 ma zawaze wartoŒä $B800, natom trybie ehronionym wartoŒ¹ tej staˆej mo: ró¾na. zobacz : Seg0040, SegA000, SegB000 SelectorInc skˆadnia . const Selectorlnc: Word = $1000; opia . Staˆa zawiera wartoŒ¹, która mo¾e by¹ dod2 odj©ta od selektora segmentu, aby przesun da¹ lub odjѹ) wska«nik o 64 KB. W rzeezywistym staˆa ta ma wartoŒ¹ $1000 miaat w trybie chronionym wartoŒ¹ tej staˆf by¹ ró¾na. zobacz : Seg0040, SegB000, SegB800 Programowanie w Turbo Pascal 7.0 * ir nvrttvl*r;SUH skˆadnia . const StackLimit: Word = 0; proceaor 80287 opis . Staˆa zawiera przesuni©eie dna atoau w segmen*e 3 proceaor 80387lub pë«m stoau. zobacz . SPtr Staˆa okreŒla czy instrukcje zmiennoprzeeir b©dÑ wykonywane czy emulowane. Test8086 zobacz Teat8087 akˆadnia . const Test8086: Byte = 0; opia . W staˆej zapiaywany jeat rezultat kontroli typu ZMIENNE procesora 80x86,w jaki jeat wyposa¾ony koçnpu, ter.Staˆa mo¾e mie¹ naat©pççjÑee wartoŒei: *Put ** shˆadnia . var Input: Text; WARTO—¥ TYP PROCESORA opis . Zmienna eat li*iem t lko d J P y o odczytu,ako* 0 procesor 8086 nym ze standardowym wejŒciem pliku sys operacyjnego (zwykle z klawiaturÑ). procesor 80286 zobacz , Out ut procesor 80386lub Output pó«niejszy var OutPut: Text* akˆadnia Je¾eli zostanie wykryty procesor 80386(lub opis . Zmienna jest pliliiem tylko do piaania,skoj pó«niejazy),to b©dÑ u¾ywane instrukcje procesom * nym ze standardowym wyjŒciem pliku sys1 80386,aby przyspieszy¹ niektóre operacje,np, '*r:, operacyjnego (zwylile z monitorem). u¾ywanie 32-bitowych instrukcji przy mno¾eniu, zobacz Input dzieleniu,przeauwaniu itp. SaveIntXäL zobacz : Test8087 opia . Zmienne przechowujÑ wektory przerwaä.M Test808* Syatem definiuje nast©pujÑce zmienne S " ' Intä*: sliˆadnia : const Test8087: Byte = 0; opia : W ataˆej zapisywany jeat rezultat wykxycia i hlt nazwa typ opis syikacji koprocesora arytmetycznego 80a8*ù Staˆa mo¾e mie¹ nast©pujÑce ar** : Savelnt00 Pointer zapisanie wektora $C I w ei Savelnt02 Pointer zapisanie wektora $C WARTOS¥ TYP KOPROCESORA SavelntlB Pointer zapisanie wektora $1 0 nie wykryto ¾adnego koproceaora ‹* SaveInt21 Pointer zapisanie wektora $2 proceaor 8087 Savelnt23 Pointer zapiaanie wektora $2 174 P.Michaˆkiewicz,I.—wituszak Programowanie w Turbo Pascaˆ 7.0 Savelnt34 Pointer zapçaanie wektora $34 ' * akˆadnia . Continue; Savelnt35 Pointer zapis¹uçie wektora $35 w opia : Kontynuuje wykonywaniejedne* ç inet J rukc) Savelnt3ó Poçnter zapiaanie wektora $36 racyjnych for,while lub repeat,z pomini* instrukeji wyst©pujÑcych wewnÑtrz tych p©* Savelnt37 Pointer zapiaanie wektora $37 * continue. Savelnt38 Pointer zapisanie wektora $38 *' zobacç : Break,Exit,Halt Savelnt39 Pointer zapisanie wektora $39 Ezit Savelnt3A Pointer zapisanie wektora $3A skˆadnia : Exit; SaveInt3B Pointer zapiaanie wektora $3B : Powoduje przerwanie wykOnywania podprc mu (procedury lub funkc*i) i powrót do miE SaveInt3C Pointer çapisanie wektora $3C wywoˆania tego podprogramu. zobaez SaveInt3D Pointer ' Halt zapisanie wektora $3D SaveInt3E Pointer Halt zapiaanie wektora $3E " Savelnt3F Pointer zapiaanie wektora $3F skˆadnia : Halt [ (Eç*tCode: Word,ù ], zapiaanie wektora $75 opia : Powoduje natyehmiaatowe przerwanie prOgr¹ Savelnt75 Pointer i powrót do aystemu ãperac *ne o.Exit y J g Code W zmiennych tych sÑ zapiaywane stare wektory przerwaä przed instaù staˆÑ inicjow¹tnÑ typu Word i okreŒla kod zak lacjÑ nowyeh.Po wykonaniu programu,a prçed powrotem do systemu czenia programu.Wywoˆanie procedury Halt operaeyjnego,wektory przerwaä sÑ odtwarzane na podatawie Sav* parametrujest równowaçne wywOˆaniu Halt(i IntX**. . Exit,RunError çobacç zobacç : Exec,SwapVectors RunError PROCEDURY I FUNKC*TE akˆadnia . RunError [ (ErrorCode: Byte ) ]; opis . Powoduje natychmiaatowe przerwanie progra* Procedury sterujQ;ce wykonaniem hodu programu: oraz wygenerowanie bˆ©du o numerze okreŒlon* Break w ErrorCode.Pomini©cie parametru powod, skˆadnia . Breakù w woˆanie rocedur z kodem bˆ du równym I zobacz . E2„t,Halt opis : Powoduje natychmiaatowe opuszezenie jednej : p©tli: for,while i repeat.Po wykonaniu tej instN' keji wykonywana jest instrukeja znajdujÑca *! bezpoŒrednio po jednej z tych p©tli (for,wh*á repeat). zobaez : Continue,E*„t,Halt 176 P. Michaˆkiewicz, I. —wituszak Programowanie w Turbo Pascal 7.0 r untzc*e àrytmetyczne: Chr Abs akˆadnia . Chr (X: Byte); ahˆadnia Aba (X); opia . Funkcja Chr zwraca znak o podanym w zmienne* opia . Funkcja zwraca warto„¹ bezwzgl©dnÑ wy **merze porçÑdkowym zgodnie z tabelÑ kodów X typu caˆkowitego lub rzeczywiatego, wynik . Char ArcTan * * ˆ çobacç . Ord akˆadnia . ArcTan (X: Real)ù *rd : Funkcja ArcTan çwraca arcua tangena z, nia X typu rçeczywiatego. Zwracany przeç ahˆadnia . Ord (X); wynikjeat w radianach. opia . Funkcja Ord zwraca numer porzÑdkowy podane. wynik go dowolnego wyra¾enia X typu porzÑdkowego. zobacz . Coa, Sin wynik . Longint `* Cos çobacz . Chr ahˆadnia . Coa (X: Real) ftound ; opia . Funkcja Coa zwraca coainua podanego kÑ akˆadnia . Round (X: Real); radianach. Xjeat wyra¾eniem typu rzeczyvc opia . Fun*cja Round zaokrÑgla wartoŒä wyra¾enia X * wynik typu rzeczywiatego do najbli¾azej liczby caˆkowitej * typu Longint. JeŒli wartoŒä wyra¾enia X znajd*a zobacz . ArcTan, Sin ai© poŒrodku dwóch liezb caˆkowitych, to w wynr ku otrzymamy liczb© eaˆkowitÑ o Wi©kBZej wartoŒci bezwzgl©dnej. akˆadnia . Exp (X: Real); wynik . Longint * oPia . Fuççkcja zwraca warto„¹ eX. X jeat wyra¾ zobacç . Int, Trunc typu rzeczywiatego, wynih . zobacz . Ln akˆadnia : Trunc (X: Real)ù *ac opia . Funkcja Trunc powoduje obci©cie c穌ci uˆam** ** akˆadnia . Frac (X: Real); wej wyra¾enia X typu rçeczywiatego. opia . Funhcja zwraca cz©„¹ uˆamkowÑ wyra¾eniä wynik . Longint pu rzeczywiatego. zobacz . Round, Int , zobacz . Int 178 P. Michaˆkiewicz, l. —wituszak Programowanie w Turbo Pascal 7.0 akˆadnia . Int (X: Rea1); opia , . Funkcja zwraca cz©Œ¹ caˆkowitÑ wyra¾en„a X typu rçecçywiatego. zobacz . Frac,Round,Trunc Ln akladnia . Ln (X: Real); opia . Funkcja çwraca wartoŒ¹ logarytmu natural:çeg OZ wyra¾enia X typu rzeczywistego. . Real zobacç ù Ex . p skˆadnia . , opis : Funkcja zwraca wartoŒ¹ Pi równÑ 3.1416,a do- kˆadnie 3.1415926535897932385. : Real Sin akˆadnia : Sin (X: Real); upis . Funkcja zwraca sinua podanego kÑta X w radia- nach.Xjeat wyra¾eniem typu rzecçywistego. wynik . Real zobacç . ArcTan,Coa Sqr skˆadnia . Sqr (X); opis . Funkcja çwraca kwadrat wyra¾enia X.Xjest wl'- ra¾eniem typu caˆkowitego lub rzeczywistego. . Jest tego aamego typu co wyra¾enie X. P. Michaˆkiewicz, I: —wituszak **ri akladnia opis wynik : Sqrt (X: Real); . Funkcja çwraca pierwiaatek kwadratowy, nia X. Xjest wyra¾eniem typu rçeczywistf . Rea1 *'rocedury Œ funhcje porzÑdkowe: Dec akˆadnia : Dee (var X [ ; N: Longint ) ); opia . Powoduje çmniejszenie wartoŒci zmiennej lub o wartoŒ¹ wyra¾enia N,jeŒli N zostaˆc Œlone.Xjest zmiennÑ typu porzÑdkowego,a wyra¾eniem typu calkowitego. Nale¾y zauwaçyä,¾e procedura Dec(X) odpo inatrukcji: X:=X-1 çaŒ êec(X,N) odpowiada instrukcji: X:=X-N ale jest *d nich bardziej efektywna. ;,*; zobacç : Inc,Pred,Succ * High akladnia . High (X); opis . Zwraca najwi©kazÑ wartoŒ¹ z zakresu argum X.Xjest zmiennÑ lub identyfikatorem typu, czym zmienna lub identyfikator typu musz* typu porzÑdkowego,typu tablicowego lub laäcuchowego. * ' zobacç . Low Inc skˆadnia . Inc (var X [ ; N: Longint ) ); opis . Powoduje zwi©kszenie wartoŒci zmiennej X o 1 o wartoŒä wyra¾enia N,jeŒli N çostaˆo okreŒli X jest zmiennÑ typu porzÑdkowego,a N jeat Programowanie w Turbo Pascal 7.0 ; ra¾eniem typu caˆhowitego.Nale¾y zauwa¾y¹,¾e procedura Inc(X) odpowiada instruhcji: X:=X+1 zaŒ Inc(X,N) odpowiada instruhcji: X:=X+N ale jest od nich bardziej efehtywna. zobacz . Dec,Pred,Succ L0w ahˆadnia . Low (X); Zwraca najmniejsuÑ wartoŒä ç zahresu argumen- opis * ,X jeat zmiennÑ lub identyfih tu X atorem typu, przy czym zmienna lub id.entyfihator typu musz* byä typu porzÑdhowego,tablicowego lub ˆaäcu- chowego. zobacz . High Odd d a . Odd (X: Longint); shˆa ni nieparzya*Œ* Wl*a- opis *l*ihiem jest war* Funh a sˆu¾ do teatowania ¾enia typu caˆhowitego x Xjest 1czbÑ nieparu a*ù J* logiczna True,jeŒli 1 *em * natomiast Xjest liczbÑ paruya w*rtoŒä logiczna Falae. , Boolean Pred Pred"(), Funhcja zwraca wartoŒä poP*edzajÑcÑ XWda' opis em dowolnego typ* nym typ j zobacç . Dec,Inc,Succ P.Michaˆkiewicz,I.—wituszak Succ shˆadnia opis zobacz * Succ (X) Funhcja zwraca nast©pnÑ wat'*Œä po X w da typie. Xjest wyra¾eniem dowolnego typu poz howego. . Dec, Inc, Pred Procedu*y i funkEje *aäcuchowe: Concat shˆadnia opis ;* wynih zobacz Copy shˆadnia opis wynih zobacz Delete shˆadnia opis ConCat (S1 *, S2, ..., SN ]:String); Funhcya aˆu¾y do poˆÑczenia hilhu ˆaäcuchó [, S2, ..., SN ]l w jeden ˆaäcuch. Ka¾dy elem* jest dowolnym wyra¾eniem typu ˆaäcuchu JeŒli ˆaäcuch wynihowy jeat dˆu¾szy ni¾ 25 háw, to po 255 znahu zostanie obci©ty. . String . Copy, Delete, Insert, Lenght, Pos . Copy (S: String; Index, Count: Integer); Wynihim funhcji jest ˆaäcuch o dˆugoŒci wyci©ty z podanego ˆaäcucha S, poczÑvr znahu o pozycji ohreŒlonej przez Index. Index jest wi©hauy ni¾ dˆugoŒä ˆaäcuch funhcja zwraca ˆaäcuch pusty; natomia* Count ohreŒla wi©cj znahów ni¾ pozost,aˆ* cuchu, liczÑc od pozycji Index, to jeat çv tylho pozostaˆa cz©Œä tego ˆaäcucha. S jea* n=,m wyra¾eniem typu ˆaäeuchowego; Count sÑ wyra¾eniami typu caˆhowitego. . String Concat, Delete, Insert, Lenght, Pos ueieçe t*: Nu1==*s, ==..--,Procedura sˆu¾y do usuni©cia cz©Œci ˆa dˆugoŒci Count z podanego ˆaäcucha S, p Programowanie w Turbo Pascal 7.0 Index jest wi©kezy ni¾ dˆugoŒ¹ ˆaäcucha S, * ¾aden znak nie zostanie uauni©ty. Natomiaat je. ¾eli Count okreŒla wi©cj znaków ni¾ pozoataˆã W ˆaäcuchu, liczÑc od pozycji Index, tu jeat uauwana pozoataˆa cz©Œ¹ tego ˆaäcucha (liczÑc od pozycji Index). Sjeat dowolnym wyra¾eniem typu ˆaäcuchowego, Index i Count aÑ wyra¾eniami typu caˆkowitego, zobacz . Concat,Copy,Insert,Lenght,Pos Insert skladnia : Insert(Source:String; uar S:String; Index:Inte- ger); opis . Prãcedura sˆu¾y do wstawienia ˆaäeucha Sãurce dà ˆaäeççeha S,poczÑwazy od znaku o pãzycji re'1ne* rzez Index.JeŒli ˆaäcueh w nikàw jest dˆu¾azy ni¾ 255znaków,to po 255znaku zostanie obci©ty. Sourcejest dowolnym wyra¾eniem typu ˆaäeueho- wego,S jest zmiennÑ dowãlnego wyra¾enia typu ˆaäcuchowego o dowolnej dˆugoŒci,Index jest do- wolnym wyra¾eniem typu caˆkowitego. zobacz : Concat,Copy,Dalete,Lenght,Poa Lenght akˆadnia . Lenght (S: String); opis : Funkeja zwraca dˆugoŒ¹ wyra¾enia S typu ˆaäcu* chowego. wynik : Integer zobacz : Concat,Copy,Delete,Inaert,Pos Pos a*ˆadnia . Pos (Substr,S: String); opis . Funkcja wyszukuje podˆaäcuch Substr wewn*** ˆaäcucha S oraz pozwala okreŒli¹ pozycj© W ˆ** cuchu S,od której zaczyna ai© podˆaäcuch Subs* * Je¾eli ˆaäcuch S nie zawiera podanego podˆa**'; 184 P. Michaˆkiewicz, I. —wituszak cud au*sçr, ço çunkc*a zwraca 0. Substr i , wyraçeniami typu ˆaäcuchowego. wynik zobacz . Concat, Copy, Delet,e, Inaert, Lenght Str akˆadnia . Str (X [:Width [:Decimals ] ]; var S); opia . Procedura zamienia wartoŒ¹ numerycznÑ wyra nia X na jego reprezentacj© ˆaäcuchowÑ, zgod: ' ç parametrami fornçatujÑcymi Width oraz DE mals. Wynik zamiany jeat podstawiany zmiennej typu ˆaäcuchowego. S. X jeat wyra: niem typu caˆkowit,ego lub rzeczywistego. Widt Decimala sÑ wyra¾eniami typu caˆkowit,ego. * *` ra¾enie Width okreŒla minimalnÑ dˆugoŒ¹ p< wyjŒciowego i powinno mie¹ wartoŒ¹ wi©kazÑ od Je¾eli dla wyprowadzenia wyra¾enia wyjŒciowe --å- r*-~ *---* Y"" ** ràiàiucl,i Width, to jeat wyprowadzana taka iloŒ¹ znakó jaka konieczna jeat do przedatawienia tego wy* ku. Wyra¾enie Decimals mo¾e by¹ podane tyl dla typów rzeczywiatych i tylko wtedy, gdy zoat nie podany parametr Width; wyraçenie t,o okreF liczb© miejsc dzieai©tnych po kropce. zobacz ; æ*, W** Va1 skˆadnia : Val (S; var V; var Code: Integer); opis . Procedura zamienia wartoŒ¹ ˆaäcuchowÑ wyra¾ nia S na jego reprezentacj© numerycznÑ. Wyn: zamianyjest podstawiany do zmiennej numeryc nej V. V jest wyra¾eniem typu caˆkowitego 1ç rzeezywiatego. Codejest zmiennÑ typu caˆkowit go. Podany ˆaäcuch muai by¹ ciÑgiem znakó* tworzÑcym poprawnÑ liczb© caˆkowitÑ lub rzecz: wistÑ. Je¾eli ˆaäcueh nie przedstawia poprawn, liczby, t,o pod zmiennÑ Code podstawiana je* pozycja pierwazego bˆ©dnego znaku. Je¾eli ˆaç cuch przedstawia poprawnÑ liczb©, to po zmiennÑ Code podstawiane jeat 0. zobacz : Str Programowanie w Turbo Pascal T.0 Appe:àd aliˆadnia . Append (var F: Text); opia . Powoduje otwarcie pliku akojarzonego ze çmi*nnÑ plikowÑ F. Je¾eli plik o podanej nazwie nie istnie*e t,o w s i bˆ d. Po otwarciu liku aktualn .poçycja pliku jeat ustawiona na koäcu tego pliku, dzi©ki czemu mo¾liwe jeat bezpoŒrednie dopisywanie tekstów na koäcu pliku. F jeat zmiennÑ plikowÑ plików tekatowych i muai by¹ akojarzona z dowolnym çewn©trçnym plikiem, u¾ywajÑc procedury Aaaign. Je¾eli F jest ju¾ otwarty, to zoatanie zamkni©ty, a nast©pnie ponownie otwarty. Je¾eli nazwa pliku akojarzonego ze çmiennÑ F jeat ˆaäcuchem puatym (wykonano procedur© Aaaign(F,")), to po wywoˆaniu Append(F) zmienna F odnoai ai© do atandardowego wyjŒcia. Plik skojarzony ze çmieççnÑ F zostaje otwarty tylko do i w k 'nik liku *est na koäcu liku. Prz piaania a àç p * p y dyzektywie kompilatora {$I-} funkcja IOResult zwraca 0, jeŒli operacja wykonana çostaˆa poprawnie; w przeciwnym wypadku funkcja zwraca wartoŒä ró¾nÑ od 0. zobacç . Asaign, Cloae, Reset, Rewrite Assign akˆadnia . Aasign (var F; Name); opia . Procedura sˆu¾y do akojarzenia çmiennej plikowej F z zewn©trznym plikiem podanym przez Name. Fjeat zmiennÑ dowolnego typu plikowego, Name jeat wyraçeniem typu ˆaäcuchowego, okreŒlajÑcym Œcie¾k© doat©pu i nazw© pliku. DˆugoŒ¹ Name nie mo¾e by¹ dˆu¾aza ni¾ 79 znaków. Je¾eli Name jeat ˆaäcuchem puatym, to zmienna F zostani8 akojarzona z atandardowym wejŒciem lub atand' ardowym wyjŒciem, w zale¾noŒci od tego cçy plik zoatanie otwarty procedurÑ Reaet(F) (wejŒcie), czy Rewrite(F) (wyjŒeie). Procedury Aaaign nie naleçy u¾ywa¹ do plików otwartych. zobacç . Append, Close, Lst, Reset, Rewrite 186 P. Michaˆkiewicz, I. —wituszak akˆadnia . . BlockRead (var F: file; var Buf; Count: Word [ ; Reault: Word ] ); opia . Procedura czyta rekordy o licçbie bajtów rów lub mniejazej od wartoŒei Count z pliku F i z* bajtu çajmowanego przeç zmiennÑ Buf Je¾eli a` rametr Reault nie zoataˆ podany i licç prçeczytanych rekordów jest mniejaza ni¾ pod* w Count, to wyatÑpi bˆÑd wejŒcia-wyjŒcia. Sy acja taka mo¾e wystÑpi¹, gdy oaiÑgni©ty zos koniec zbioru dla mniejazej liczby odczytan* rekordów ni¾ podano w Count. Je¾eli natomi; *' okreŒlono tak¾e zmiennÑ Result, to b©dzie o zawieraä aktualnÑ liczb© przeczytanych rekord i bˆÑd wejŒcia-wyjŒcia nie wystÑpi. Aby u¾ywaä procedury, plik F powinien byä otwarty. F j, çmiennÑ plikowÑ, Bufjest dowolnÑ zmiennÑ, ( unt jeat wyra¾eniem typu Word, a Result jf zmiennÑ typu Word. Rozmiar bloku czytaneg* pliku zajmuje co najwy¾ej iloczyn Count*r* miar*rekordu (rozmiar*rekordu podaje si© pr otwieraniu pliku, je¾eli nie podano, to jeat prz: mowane 128 bajtów). WartoŒä iloczynu Count*rozmiar rekordu n mo¾e by‚ wi©kaça od 64 KB. Przy dyrektyw kompilatnra {$I-} funkcja IOReault zwraca 0, jeä operacja odczytu rekordów wykonana zoataˆa p prawnie; w przeciwnym wypadku funkcja zwrai wartoŒ¹ ró¾nÑ od 0. çobacz : BlockWrite BlockWrite akˆadnia : BlockWrite (var F: file; var Buf; Count: Word [;v* Reault: Word ] ); * * opia . Procedura zapisuje rekordy o liczbie bajtów rórr " nej lub mniejazej od wartoŒci Count z pami©c roçpoczynajÑc od pierwszego bajtu çajmowaneg przez zmiennÑ Bufi zapiaujeje do pliku F. Je¾el parançetr Result nie zostaˆ podany i liczba zapiaa nych rekordów jest mniejsza ni¾ podano w Coun1 Programowanie w Turbo Pascal 7.0 18; mo¾e wystÑpi¹, gdy nastÑpi przepeˆnienie dysku * przy mniejsçej licçbie rekordów ni¾ podano w Count. Je¾eli natomiast okreŒlono tak¾e zmienn Reault, to b©dzie ona zawieraä aktualnÑ licçbg zapisanych rekordów i bˆÑd wejŒcia-wyjŒcia nie wystÑpi. Aby u¾ywa¹ tej procedury, plik F pow;,* nien byä otwarty. Fjest zmiennÑ plikowÑ, Bufjest dowolnÑ çmiennÑ, Count jest wyra¾eniem typu Word, a Resultjest zmiennÑ typu Word. Rozmi* bloku zapisywanego do pliku zajmuje co najwy¾e, iloczyn Count*rozmiar rekordu (rozmiar*reko* podaje si© prçy otwieraniu pliku, je¾eli nie podano, to jeat przyjmowane 128 bajtów). WartoŒ¹ iloczynu Count*rozmiar rekordu me mo¾e byä wi©ksza od 64 KB. Prçy dyrektyrvie kompilatora {$I-} funkeja I OResult çwraca 0, je„li operacja zapisu rekordów wykonana zostaˆa poù prawnie; w przeciwnym wypadku funkeja çwraca wartoŒ¹ ró¾nÑ od 0. zobacz : BlockRead Chdir s*ˆadnia : Chdir (S: String); opis : Procedura zmienia aktualny katalog okreŒlony przez Œcie¾k© S. Je„li S okreŒla atacj© dysków, * aktualny dyak równie¾ zostanie çmieniony. S jeat wyra¾eniem typu ˆaäcuchowego. Przy dyrektywia kompilatnra {$I-} funkeja IOResult zwraca 0, je* operacja miany katalogu wykonana zostaˆa poù prawnie; w przeciwnym wypadku funkeja zwraca wartoŒ¹ ró¾nÑ od 0. zobacz Close skˆadnia GetDir, Mkêir, RmDir, SetCurDir . Close (var F); opis . Powoduje uaktualnienie i zamkni©cie pliku s*oja* rzonego ze çmiennÑ plikowÑ F. F jest çmien*! dowolnego typu plikowego otwartego weze„niel' azym u¾yciem Reset, Rewrite lub Append. * 188 P. Michaˆkiewicz, I. —wituszak - x- ~ r---- ,**g ** uivuiia gltUj*l innym zewn©trznym pliliiem.Przy dyrel? kompilatora {$I-} funkcja IOResult zwraca I operacja zamkni©cia pliku wykonana zosta prawnie; w przeciwnym wypadku funkeja ç wartoŒ¹ ró¾nÑ od 0. zobacç . Append,Assign,Reset,Rewrite Eof skˆadnial . Eof [ (var F: Text) ); opis : Funkeja daje wartoŒ¹ logicznÑ True,je¾eli al na poçycja pliku znajduje si© przed ost; zna*iem pliku lub gdy plik ni‚ zawiera ¾ai elementów.W przeciwnym wypadku daje w; log¾cznÑ False.F jest zmiennÑ plikowÑ p tekstowyeh.JeŒli pominigto F,to przyjmo jeat atandardowa wejŒciowa zmienna plil Przy dyrektywie kompilatora {$I-} funkeja 1 ault zwraca 0,jeŒli operacja wykonana z* * "*` poprawnie; w przeciwnym wypadku funkcja : *:; *:' ca warto„‚ ró¾nÑ od 0. wynik : Boolean zobacç . Eoln,SeekEof skˆadnia2 : Eof (var F); opis : Funkeja daje wartoŒ¹ logicçnÑ True, je¾eli a13 na pozycja pliku znajduje ai© przed osta znahiem pliku lub gdy plik nie çawiera ¾acl elementów. W przeciwnym wypadku daje wa ˆogicznÑ False. F jest çmiennÑ plikowÑ. Prz rektywie kompilatora {$I-} funkeja IOR zwraca 0, jeŒli operacja wykonana zostaˆa p wnie; w prçeeiwnym wypadku funkeja çv wartoŒ¹ ró¾nÑ od 0. . Boolean Eoln akˆadnia . Eoln [ (var F: Text) ); opis : Funkeja daje wartoŒä logicznÑ True, je¾eli ak na pozycja pliku znajduje si© na ostatnim zi wiersza lub gdy wynikiem EofrF) jest wa Programowanie w Turbo Pascal 7.0 çoac iogçcznÑ r'alae.r'jeat zmiennÑ plihowÑ plihów * tehstowych.Je„li pomini©to F,to przyjmowana jeat etandardowa wej„ciowa çmienna plihowa, Przy dyrehtywie hompilatora {$I-} funhcja IORe. ault zwraca 0,je„li operacja wyhonana zoataˆa poprawnie; w przeciwnym wypadku funhcja zwra. ca warto„ä ró¾nÑ od 0. wynih : Boolean zobacç . Eof,SeehEoln Erase akˆadnia . Erase (var F); opia . Powoduje uauni©cie plihu shojarzonego çe zmien. nÑ plihowÑ F.F jeat zmiennÑ dowolnego typu plihowego.Przy dyrehtywie hompilatora {$I-} fun. hcja IOReault zwraca 0,je„li operacja uauni©cia plihu wyhonana çoataˆa poprawnie; w przeciw. nym wypadhu funhcja zwraca warto„ä ró¾nÑ od 0. zobacç . Renaçne *lePose ahˆadnia . FilePos (var F)ù opis . Funhcja podaje aktualnÑ pozycj© plihu ahojarzo nego ze çmiennÑ plihowÑ F.Je„li aktualna pozycja plihujeat na poczÑthu tego plihu,to wynihiem taj funhcji jeat 0.Natomiaat je„li aktualna pozyqa ' pliku jest na koäcu tego pliku,tzn.wyniliiem EofiF) jeat warto„¹ logiczna True,to wyniliiem funhcji FilePoa(F) jest warto„ä równa wartoŒ* funhcji FileSize(F),czyli rozmiarowi plihu F.F jeat zmiennÑ plihowÑ.Przy dyrehtywie hompila* tora {$I-} funhcja I O Reault zwraca 0,je„li operacja wyhonana çostaˆa pãprawnie; w przeciwnym w9' padhu funhcja zwraca warto„ä ró¾nÑ od 0. wynih . Longint zobacç FileSize,Seeh P.Michaˆkiewicz,I.—wituszak ù ahˆadnia . FileSize (var F)* opia : Funhcja podaje ahtualny rozmiar pliku a* nego ze çmiennÑ plihowÑ F. Je„li plik jea1 to wynihiem tej funhcji jest 0. F jest çi plihowÑ. Przy dyrehtywie hompilatora {$: hcja IOReault çwraca 0, jeŒli operacja wyl zoataˆa poprawnie; w prçeciwnym wypad! kcja zwraca wartoŒ¹ ró¾nÑ od 0. wynih . Longint çobacz . FilePos Flush ahˆadnia . Fluah (var F: Text); opis : Procedura powoduje dla plihu wyj„ciowego tego przez Rewrite lub Append wyzera bufora plihu. To gwarantuje, ¾e wszyathie çapiaywane do plihu w danej chwili çoatan; aane w plihu çewn©trznym. Przy dyre* hompilatora {$I-) funkcja IOReault zwraca i operacja wyhonana zostaˆa poprawnie; w pr nyçn wypadhu funhcja zwraca warto„¹ ró¾n; GetDir akˆadnia : GetDir (D: Byte; var S: String); opis . Procedura poçwàlà w çmiennej S uzyahaä macj© o ahtualnym hatalogu dla nap©du * podanego w zmiennej D. D jeat wyra¾enien: caˆhowitego o warto„ci typu bajt, S jest zm: typu ˆaäcuchowego. Dla D=0 wahazywan, nap©d bie¾Ñcy, dla D=1 jeat nap©d A, dla nap©d B, dla D=3 nap©d C itd. * zobacç . ChDir, MhIlir, RmDir, GetCurDir IOResult ahˆadnia . IOResult; opia . Funhcja sˆu¾y do sprawdçania poprawnoŒci v nywanych operacji wejŒcia-wyj„cia warunhiem, ¾e aystemowa hontrola waruç Programowanie w Turbo Pascal 7.0 JJ""`" J""* "J `K""" `"1 "Y' ""J " ~rn~ `-*y- ***iuià u,y*u *iianUWC*U: rektywy kompilatora {$I-}.Je¾eli ayatemowa kontrola warunków wejŒcia-wyjŒcia jeat wyˆÑczo- Procedura cçytajeden znak z pliku i przypi* na i wyatÑpi bˆÑd wejŒcia-wyjŒcia,to waçyatkie zmiennej.Gdy wynikiem funkeji EotiF) jes nast©pne operacje wejŒcia-wyjŒcia aÑ ignorowane toŒ¹ logiczna True zanim wykona si© pro* a¾ do wywoˆania funkeji IOReault,która wyzeruje * Read,to pod zmiennÑ podatawiana jest w wewn©trznÑ flag© bl©dów.Przy dyrektywie kom- c Chr(26) (znak Ctrl-Z).Gdy wynikiem f pilatora {$I-} funkeja I O Reault çwraca 0,jeŒli r Eoln(F)jeat wartoŒ¹ logiczna True zanim w* operacja wejŒcia-wyjŒcia wykonana zostaˆa po- na zoatanie procedura Read,to pod zmienn atawianajest wartoŒ‚ Chr(13) (znak CR - p prawnie; w przeeiwnym wypadku funkeja çwraca karetki).Przy kolejnym wywolaniu procedu wartoŒä ró¾nÑ od 0,która jest kodem bˆ©du. * ad b©dzie czytany nast©pny znak z pliku. wynik : Integer zobacz . IäOutRes 2.Zmienne typu calkowitego i rçeczywiate* !` Procedura czyta ciÑg znaków o poataci liczl MkDir kowitej ç pliku F,a naat©pnie wartoŒä tej skˆadnia : MkDir(S: String); wadzonej liczby zoataje przypisana zmi* Vl*azyat*ie znaki apacji,tabulacji i znaki opia . Procedura tworzy nowy podkatalog o Œcie¾ce okre- '. linii poprzedzajÑce czytany ciÑg znaków aÑ Œlonej przez S.Oatatni element Œcie¾ki S nie mo¾e rowane.Czytanie ciÑgu znaków jeat przer5 by¹ nazwÑju¾ istniejÑcego pliku w podanej Œcie¾- prçy pierwazym wystÑpieniu po ˆaäcuchu ç ee.S jeat wyra¾eniem typu ˆaäcuchowego.Przy * dyrektywie kompilatora {$I-) funkeja IOResult rycznym jednego ze znaków: znak puaty,t* cja,znak koäca linii lub gdy wynikiem fç çwraca 0,jeŒli operacja utworzenia katalogu wy- *' Eo*F) jeat wartoŒä logicçna True.JeŒli la konana zoataˆa poprawnie; w przeciwnym numeryczny nie jeat zgodny z oczekiwanyç wypadku funkeja zwraca wartoŒ¹ ró¾nÑ od 0. Œ matem,to wyatÑpi bˆÑd wejŒcia - wyjŒcia zobacz : Chdir,GetDir,RmDir,CreateDir wyççihiem fuççkeji Eo*F) jeat wartoŒä lo* True zanim wykonana zostanie procedura ftead lub gdy po pomini©ciu znaków puatych,tab skladnial . Read ([uar F: Text;] Vç [,V2,...,VN] ); i znaków koäca linii wynikiem funkeji Eo*ä wartoŒä logicçna True,to pod zmiennÑ podst opis . Procedura aˆu¾y do weçytania przynajmniej jed- na jeat wartoŒä 0.Przy kolejnym wywoˆanii nej wartoŒci z pliku F pod podane zmienne cedury Read czytanie znaku b©dzie rozpocz* V1,V2,...,VN.F jest plikowÑ zmiennÑ tekstow*. znaku,który apowodowaˆ w poprzednim wy Je¾eli F nie zostaˆo podane,to przyjmowanyjest ,! * niu tej procedury przerwanie czytania laäi standardowy plik wejŒciowy (klawiatura). ;* numerycznego. V1,V2,...,VN mogÑ by¹ zmiennymi typu znakowe- go,caˆkowitego,rzeczywistego lub laäcuchowego. ' 3.Zmienna typu laäcuchowego: Prçy dyrektywie kompilatora {$I-} funkeja IORe- * sult zwraca 0,jeŒli operacja wykonana zost*a * Procedura czyta wsçystkie znaki a¾ do nap poprawnie; w przeciwnym wypadku funkeja zwra- nia znaku koäca linii lub gdy wynikiem fu Eo*F) jest wartoŒ‚ logiczna True i rezultat ea wartoŒ¹ ró¾nÑ od 0. czytanego laäcueha zna.ków çoataje przyp zmiennej.Je¾eli ˆaäcuch wynikowy jest dˆ, 192 P. Michaˆkiewicz, I. —wituszak Programowanie w Turbo Pascal 7.0 * v n G* -- - - r - --ç^-~ -~**yY" j 'uui * to jest obcinany.Przy kolejnym wywoˆaniu proce. F i wczytywanie zawartoŒci tej linii,wg z dury Read czytanie znaku b©dzie rozpocz©te od ãpiaanych w procedurze Read.Je¾eli F zo znaku koäca linii,który spowodowaˆ w poprze. ** podane,tojest plikowÑ zmiennÑ tehatowÑ,w ; dnim wywoˆaniu tej procedury przerwanie czy*. ,ù ciwnym wypadku przyjmowanyjest standan nia ˆaäcucha znakowego.Oçnacza to,¾e nie mo¾ù „' plik wejŒciowy (*lawiatura).V1,V2,...,VN ç na u¾yä procedury Read do czytania kolejnych byä zmiennymi typu znakowego,caˆkowitego wierszy,poniewa¾ po napotkaniu znaku koäca czywiatego lub ˆaäcuchowego.Przy dyrekt lin� kolejne wywoˆanie tej procedury spowoduje kompilatora {$I-} funkcja IOResult zwraca 0, zwrócenie ˆaäcucha pustego.Do czytania kolej. *ˆ operacja wykonana zostaˆa poprawnie; w prz, nych wierazy nale¾aˆoby u¾y¹ procedury ftea*Ln, ** nynç wypadku funkcja zwraca wartoŒ¹ ró¾nÑ zobacz . ReadLn,Write,WriteLn zobacz . Read sliˆadnia 2 . ead (F,Vç C,V2,...,VN] 7; Ren„me opis : Procedura sˆu¾y do czytania elementów z pliku F skˆadnia . Rename (var F; Newname); pod podane zmienne Vç,Vz,...,VN.Fjest zmiennÑ opia . Powoduje zmian© nazwy pliku skojarzone* plikowÑ pliku skojarzonego z dowolnym zewngtrz- zmiennÑ plikowÑ F na plik o nazwie Newn nym plihiem dowolnego typu,z wyjÑtliiem plihu 1: Dalsze operacje na zmiennej F sÑ operacjan tekstowego; V1,V2,...,VN sÑ zmiennymi o typie pliku z nowÑ nazwÑ Newname.F jest çmi* zgodnym z typem elementów pliku.Po ka¾dorazoù dowolnego typu plikowego,Newname jest v wym odczytaniu zmiennej nastgpuje przesuni©cie r. ¾eniem typu ˆaäcuchowego.Przy dyrekt pozycji pliku na kolejny element.Przy próbie od- kompilatora {$I-} funkcja IOResult zwraca 0, czytu z pliku,gdy aktualna pozycja pliku jest na operacja zmiany nazwy pliku wykonana zo koäcu tego pliku,tzn.gdy wyni*iem fuççkcji * poprawnie; w przeciwnym wypadku funkcja z EofiF) jest wartoŒä log¾czna True,wystÑpi bˆ*d. ca wartoŒä ró¾nÑ od 0.Procedury tej nie vr Plik skojarzony ze zmiennÑ plikowÑ F powinien Ž u¾ywa¹ do zmiany nazwy plików otwartych. byä otwarty.Przy dyrektywie kompilatora {$Iù) ! funkcja IOResult zwraca 0,jeŒli operac*a wykona ` zobacz : Erase na zostaˆa poprawnie; w przeciwnym wypadhu ä;eset funkcja zwraca wartoŒä ró¾nÑ od 0. shˆadnia : Reset (uar F [:file; RecSize: Word ] ); zobacz . Write opis . Powoduje otwarcie pliku skojarzonego ze zmá Readln plikowÑ F.Je¾eli plik o podanej nazwie nie is s*ˆadnia . ReadLn ([var F: Text;] Vç [,V2,...,VN] ); je,to wystÑpi bˆÑd.Po otwarciu pliku aktu P d ˆ d ia rz a mniej je* pozycja pliku jest ustawiona na poczÑtku opis . roce ura s u¾y o wczytan p yn j nej warto„ci z pliku F pod podane çmienne pliku.Fjest zmiennÑ dowolnego typu plikow V1,V2,...,VN.Procedura ta wykonuje te sanaB musi byä skojarzona z dowolnym zewn©trç czynnoŒci co procedura Read oraz powoduje p*er .* pli*iem,u¾ywajÑc procedury Assign.RecSizt Œcie do poczÑtku nast©pnej linii pliku F.Oznac.* wyra¾eniem typu Word,okre„lajÑcym rozmit to,¾e mo¾na u¾yä tej procedury do czytania *ol* kordu w bajtach do zapisu (je¾eli nie po nych wierszy,poniewa¾ przy ka¾dym kãlejny* rozmiaru rekordu,to jest przyjmowane 128 u¾yciu ReadLn po napotkaniu znaku koäca * tów7.Wyra¾enie ReeSize mo¾e by¹ podane 1 ; 194 P.Michaˆkiewicz,I.—wituszak Programowanie w Turbo Pascal T.0 otwarty, to zostanie çamknigty, a nastgpnie po, nownie otwaçty.Je¾eli nazwa pliku skojarzonego shˆadnia . SeekEoln [ (var F: Tekst) ]; ze zmiennÑ F jest ˆaäcuchem pustym (wykonano opis . Funkcja daje wartoŒ¹ logicçnÑ True,je¾eli procedur© Aasign(F,)),to po wywoˆaniu Reaet(F* na poçycja pliku znajduje si© na ostatnin çmienna F odnosi sig do standardowego wejŒ*a rviersza,przy czym sÑ ignorowane wsçyst. (*lawiatura).Je¾eli plik skojarzony çe zmiennÑ cje i tabulatory ZnajdujÑce si© prçed oi jest pliliiem tekatowym,to zostaje otwarty tylho do czytania.Przy dyrektywie kompilatora {$1.* znahiem wiersza lub gdy wynihiem Eoln funkcja IOResult zwraca O,jeŒli operacja wykOna. warto„¹ logiczna True.W przeciwnym w na zostaˆa poprawnie; w przeciwnym wypadhu ,* daje wartoŒ¹ logicznÑ False.Fjest zmienn funkcja zwraca wartoŒ¹ ró¾nÑ od 0. wÑ plików tekstowych.Je„li pominigt* przyjmowana jest standardowa wej„ciowa zobacz . Append,Assign,Close,Rewrite,Truncate na plikowa.Funkcja jest u¾ywana prZy c; wartoŒci numerycznych z plików tekstowyi powinien by¹ otwarty prZed u¾yciem tej f shˆadnia . Rewççte (var F [:file; RecSiçe: Word ] )* Przy dyrektywie kompilatora {$I-} funkcja opis . Powoduje utworzenie i otwarcie nowego pliku o sult zwraca 0,jeŒli operacja wykonana : nazwie skojarzonej ze zmiennÑ plikowÑ F.Je¾eli ' poprawnie; w przeciwnym wypadku funkcj; plik o podanej nazwie ju¾ istnieje,to zostanie ;; ca wartoŒ¹ ró¾nÑ od 0. usunigty i wjego miejsee zostanie utworçony nowy wynik . Boolean pusty plik.Je¾eli F jest ju¾ otwarty,t0ZOstanie zobacz zamknigty,a nastgpnie ponownie otwarty.Po . Eoln,SeekEof otwarciu pliku aktualna pozycja pliku jest ustaù SetTe2tBççf wiona na poczÑtku tego pustego pliku.F jest zmiennÑ dowolnego typu plikowego i muai by¹ ` skˆadnia . SetTextBuf (var F: Text; var Buf [; Size: W skojarzona z dowolnym çewngtrznym pliltiem, * opis . Procedura powoduje przypisanie bufora w u¾ywajÑc procedury Assign.RecSize jest wyra¾e* niem typu Word,okreŒlajÑcym rozmiar rekordu wyjŒcia do pliku tekstowego F.F jest zm w bajtach do Zapisu (je¾eli nie podano rozmiaru " plikowÑ teks*wÑ,Bufjest dowolnÑ zmieç rekordu,to jest przyjmowane 128bajtów).Wyra- Size jest opcjonalnym wyra¾eniem typu V ¾enie RecSiçe mo¾e by¹ podane tylko dla plikëw okreŒla rozmiar bufora w bajtaeh.Ka¾da çm nie zdefiniowanych.Je¾eli ãàçwà pliku skojar*o' plikowa tekstowa posiada bufor,któryjest ù nego ze zmiennÑ F jest ˆaäcuchem pustym rzystywany podczas przesyˆania danych (wykonano procedurg Assign(F,")),to po wywola ** operacjach Read i Write.Standardowa wit niu Rewrite(F) zmienna F odnosi ai© do tego bufora wynoai 128bajtów.Wywoˆan standardowego wyjŒcia.Je¾eli plik skojarzony * ^ procedury powoduje dla pliku tekstowego F zmiennÑ F jest plikiem tekatowym,to zost.* ng standardowego bufora wejŒcia-wyj„cia na otwarty tylko do zapisu.Przy dyrektywie kompr okreŒlony przez zmiennÑ Buf Je¾eli w wyw0 latora {$I-} funkcja IOResult zwraca 0,je* pominigto parametr Size,to przyjmuje sig operacja wykonana zostaˆa poprawnie; w przeci*' *oŒ¹ Size O*Buf),tzn.rozmiar bufora Sizf nym wypadku funkcja zwraca wartoŒ¹ ró¾nÑ od 0. równy caˆemu obsçarowi pamigci zajgtemu * zmiennÑ Buf Procedury tej nie powinno si© ç zobacz . Append,Assign,Close,Reset,Truncate stoaowa¹ do plików otwartych. 196 P. Michaˆkiewicz, I. —wituszak Programowanie w Turbo Pascal T.0 aliˆadnia . Truncate (var F); opia : Procedura powoduje uauni©cie wazyatkich elementów ç zewn©trznego pliku (ahojarzonego ze zmiennÑ F), poczÑwazy od aktualnej pozycji pli*u do koäca pliku. Po wykonaniu tej procedury ahtualna pozycja pliku staje aig koäcem tego pliku. F jeat çmiennÑ plikowÑ dowolnego typu poza p*. kiem tekatowym i musi byä akojarzona z dowolnym çewn©trznym pliliiem, u¾ywÑjÑc prã*e dury Aaaign. Plik powinien by¹ otwarty przed u¾yciem tej procedury. Przy dyrektywie kompila. tora {$I-} funkeja I OReault zwraca O,je„li opera*a wykonana çoataˆa poprawnie; w przeciwnym wy. padku funkeja zwraca warto„¹ ró¾nÑ od 0. çobacç . Reaet, Rewrite, Seek Write akˆadnia 1 . Write ( [var F: Text;) Pç [, P2, ..., PN7 ); opia . Procedura aˆu¾y do wpisaniajednej lub wi©cej nit jednej warto„ci z podanych zmiennych Pç,P2,...,PN do pliku F. F jeat plikowÑ zmienn* tekatowÑ. Je¾eli F nie zoataˆo podane, to przyjmowany jeat atandardowy plik wyj„ciowy. Pç,P2,...,PN aÑ parametrami obejmujÑcymi wyra¾enia wyj„ciowe, których warto„ci zoatanÑ wpiaane do pliku. Ka¾de wyraçeççie wyj„ciowe muai by¹ typu znakowego, caˆkowitego, rzeczywistego, ˆaäcuchowego, upakowanego ˆaäcuchowego lub logicznego. Ka¾dy parançetr P mo¾e obejmowaä równie¾ pole o podanej szerokoŒci i liczbie miejac dzieai©tnych. Parametr P ma naat©pujÑeÑ poataä: r*yratenie [: szerokoŒ¹ [:miejsca dziesi©tne )1 Szeroko„ä i miejaca dzieai©tne aÑ wyra¾eniam* typu caˆkowitego. Parametr azeroko„¹ okreŒla mi' nimalnÑ szeroko„¹ pola i musi by¹ wi©kaçy od 0. Jeçeli warto„¹ wyra¾eniajeat reprezentowana na azerazym polu ni¾ podano w paraçnetrze szeçb' 198 P. Michaˆkiewicz, I. —wituszak xoac, ço wyprowadzana jeat taka ilo„ä z* która jeat niezb©dna do przedatawienia te ra¾enia. Je¾eli pomini©to ten par*etr, to wadzana jeat talia ilo„¹ znaków, jaka jeat cçna do przedatawienia tego wyra¾enia. Pa> miejaea dçieai©tne okre„la liczb© miejsc d* nych (po kropce) w ataˆopoçyeyjnej reprez* liczb rzeczywiatyeh oraç muai by¹ wi©ksz* Parametr miejaca dzieai©tne mo¾e by¹ F tylko wtedy, gdy wyra¾enie jest typu rçecçy go i gdy podano parametr azeroko„ä. Prçy ktywie kompilatora {$I-} funkeja IOReault z 0, jeŒli operacja wykonana zostaˆa popraw przeciwnym wypadku funkeja çwraca w ró¾nÑ od 0. 1. Zmienna typu çnakowego: Je¾eli pomini©to parametr azeroko„‚, to do F zostanie wprowadçony znak b©dÑcy war wyra¾enia wyj„ciowego, w przeciwnym wy* (tçn. podano parametr azerokoŒ¹) przed çnt zoatanÑ wprowadzone odat©py o ilo„ci ohre! prçez warto„ä (minimalna azerokoŒä -1 zna 2. Zmienna typu caˆkowitego; Je¾eli pomini©to parametr azerokoŒä, to do F zoatanie wprowadzona dçieai©tna reprezen wyra¾enia wyj„ciowego, w przeeiwnym wyp (tzn. podano parametr azeroko„ä i jeat on wit od dˆugo„ci ˆaäcucha dzieai©tnego reprezen cego wyra¾enie wyj„ciowego) przed tÑ repreçi cjÑ çoatanÑ wprowad¾one odat©py, ta* aby a ko„ä pola wyj„ciowego byˆa równa paramet azeroko„ä. 3. Zmienna typu rzeezywiatego; Je¾eli wyraçenie ma warto„¹ typu rzeczywial do pliku zoatanie zapiaana dçieai©tna repreze cja tego wyra¾enia. Format reprezentaeji wyra¾enia zale¾y od tego, czy paraçnetr n aca dzieai©tne zoataˆ podany. Je¾eli paraç miejaca dzieai©tne pomini©to (lub podany Programowanie w Turbo Pascal 7.0 = *** **Gç*"dc*ç azçesç©tnego taäcuc]çà zmiennoprzecinkowego: [ -j . E [+-* pojedyncza cyfrajest równa 0 tylko w*. dy, gdy warto„ciÑ wyr*eniajeat 0, **y *i a azçes> cyfra dzieaigtna po krop, parançetr miejsca-dziesi©tne jest wi©ksz 4. Zmienna typu ˆaäcuchowego: Je¾eli pomini©to parametr szerokoŒ¹, to d F zostanie wprowadzony ˆaäcuch b©dÑcy ŒciÑ wyra¾enia wyj„ciowego, w prze*wn, padku (tzn. podano parametr szeroko„¹) o: jego warto„¹jest wi©ksza od dˆugo„ci ˆaäcu przed wprowadzanym do pliku F ciÑg;iem z zostanie wprowadzona odpowiednia ilo„¹ pów. cyfra dziesi©tna po kz*opce, 6.Zmienna typu log¾cznego: (+- ) znak ^ + ^ lub ** - ^ wykˆadnika, ynikiemjest wyprowadzenie ˆaäcucha Tr dwucyfrowy wyl;ˆadnik o podata. False w zale¾no„ei od wartoŒci wyra¾enia. wie 10. * zobacz . Read ReadLn WriteLn Litera E oddziela mantys© od cz©„ci wykˆadniczej, s*adnia 2 . Write (F,Vl (,V2,...,VN) )- * opis Je¾eli pomini©to parametr szeroko„¹,to przyjmo- ù procedura sˆu¾y do wpisania podanych zi wana szeroko„¹ pola wynosi 17znaków.Je¾eli nych V1,V2,...,VN do pliku F.F jest zmi wa*o„¹ parametru szerokoŒ¹ jest mniejsza od 8, plikowÑ pliku skojarzonego z dowolnym to jest przyjmowana za równ 8 zewz p ikiem dowolnego typu z wyjÑtl*em * Je¾eli podano parametr miejsca-dziesi©tne * * tekstowego,V1,V2,...,VN sÑ zmiennymi o any nast©pujÑcy format re rezenta- :x zgodnym z typem elementów pliku.Po ka¾do: -* *vicJiiy c*Gment.Yrzy zapis: [j [-] [. ] ' j pliku,gdy aktualna pozyeja plikujeat na k, tego pliku,tzn.gdy wynikiem funkcji Eo*F) gdzie poszczególne elementy tego fornçatu m** warto„¹ logiczna True,nastÑpi rozszerzenie 1 nast©pujÑce znaczenie: plik skojarzony ze zmiennÑ p likowÑ F powá [ ) je„li podana szeroko„¹ pola wyj„cio* fy¹ otwarty,przy dyrektywie kompilatora j wego jest wi©ksza ni¾ potrzeba do reprezentaè unkcja IOResult zwraca 0,je„li operacja zoa danej liczby,to przed tÑ liczbÑ wystÑpiÑ uzup** wykonana poprawnie; w przeciwnym wypa* niajÑce odst©py, funkcja zwraca warto„¹ ró¾nÑ od 0. zobacz WriteLn [ - ) znak ^ - ^ wyra¾enia jeŒli wyra¾enie j* ujemne, przynajmniej jedna cyfra, * 200 P.Michaˆkiewicz,I.—wituszak Programowanie w Turbo Pascal 7.0 21 n1rrå2u uà*c ci* uicvnic8iviin i ævZn*GjgZd WyWOiaêlf b©dzie powodowaˆo bˆ©dy.P jeat zmiennÑ t !, akˆadnia . WriteLn ((var F: Text;) Pç C,P2,...,PNl l; à waka«nik,utworzonÑ przeç wczeŒniejaze u¾ opia . Procedura aˆu¾y do wpiaaniajednej lub wi©cej ni½ procedury GetMem.Size jeat wyraçeniem o: jednej wartoŒci z podanych zmienny*h * ŒlajÑcym wielko„ä w bajtach Zwalnianego oba2 P1,PZ,...,PN do pliku F.Procedura ta wyhonuje * pami©ci dynamicznej i muai byä dokˆadnie * aame czynnoŒci co procedura Write oraz powoduje aamo,jak wczeŒniej przydzielone tej zmieç przej„cie do poczÑtku naat©pnej lin� pliku F.Je. przez procedur© GetMem. ¾eli F zoataˆo podane,to jeat plikowÑ zmiennÑ zobacz . Diapoae,HeapError,GetMem,New tekatowÑ,w przeciwnym wypadku przyjmowany * jeat atandardowy plik wyj„ciowy.Przy dyrekty*ie GetMem kompilatora f$I-1funkcja IOReault zwraca 0,je„* operacja wykonana zoataˆa poprawnie; w przeciwù skˆadnia . GetMem (var P: Pointer; Size: Word); nym wypadku funkcja zwraca wartoŒ¹ ró¾nÑ od 0, opis : Powoduje przydzielenie bloku pami©ci o rozç zobacz . Write rze Size i zwraca waka«nik na ten blok w zmieç P.Odwoˆanie do tego bloku naat©puje przez P Procedury i funkcje dynamicznego przydziaˆu pami©ci: jeatzmiennÑ typu waka«nik.Sizejeat wyra¾en ukreŒlajÑcym wielkoŒä w bajtach obazaru pa* Dispose dynamicznej,ktory chcemy przydzieliä.Naj* akˆadnia . Dispose (var P: Pointer [,Deatructor ) ); kazy blok pami©ci,który mo¾e by¹ jednoraz przydzielony ze aterty,wynoai 65.528baj opia . Procedura niazczy zmiennÑ wakazywanÑ przez P (64Kb-$8).Je¾eli na atercie jeat mniej wolnej oraz zwraca do aterty obazar pami©ci dynamicznej mi©ci ni¾ podano w Size,to wyatÑpi * zajmowanej przez t© zmiennÑ (tzn.obazar zmienù wykonania. _ nej,na którÑ wakazuje P).Po wywoˆaniu t*j * zobacz . Diapoae,FreeMem,HeapError,New. procedury wartO„ä P ataje ai© nieokreŒlona i F: pó«niejaze wywoˆanie P^ b©dzie powodowaˆo W* *; MagAvail dy.Wywoˆanie procedury Diapoae z parametre*nå DeatructOr stoeuje si© do zwalniania pami©ci z*j- '*** akˆadnia . MaxAvail; mowanej przez obiekt dynamiczny.Pjeat zmienn* opia . Funkcja podaje w bajtach rozmiar nÑjwi©ka: typu waka«nik,utworzonÑ przez wczeŒniejeç ,* w danej chwili wolnego,ciÑgˆego bloku na ste* u¾ycie procedury New. który mo¾e by¹ przydzielony przez New lub t zobacz . FreeMem,GetMem,New Mem.Minimalny i maksymalny rozmiar at mo¾e by¹ okreŒlony za pomocÑ dyrektywy koç ," *'eeMem latora $M. " akˆadnia . FreeMem (var P: Pointer; Size: Word); . Longint opia . Procedura niazczy ZmiennÑ wakazywanÑ p**p zobac2 . MemAvail d t0 obazar pami©ci dynamiàn* oraz zwraca o s au zajmowanej przez t© zmiennÑ (tzn.obazar znài* nej,na którÑ wakazuje P) o dˆugoŒci okre*lon* przeZ Size.Po wywoˆaniu tej procedury Wa*'**p 202 P. Michaˆkiewicz, I. —wituszak Programowanie w Turbo Pasca! 7.0 skˆadnia . MemAvail; * zobacz . Ofa, Ptr, Seg opia . Funkeja podaje aum© roçmiarów wszystkich wol. Assigned nych bloków (w bajtach) na atercie.Nale¾y ;* zauwa¾yä,¾e w przypadku fragmentacji aterty w shˆadnia . Asaigned (var P); suma rozmiarów wazystkich wolnych blokówjest t opia . Funkcja okreŒla, cçy zmienna t* ró¾na od najwigkazego wolnego ciÑgˆego blohu. wska1nikowego lub proceduralnego wskazuje Minimalny i makaymalny rozmiar sterty çno¾e adres puaty nil.Funkcja daje wartoŒä True,j byä okre„lony çà pomocÑ dyrektywy kompilatora zmienna P nie wskaçuje na nil.NatomiaatjeŒ wakazuje na nil,to funkcja zwraca wartoŒä Fa wynik . Longint wynik . Boolean zobacç . MaxAvail CSeg 5 New skˆadnia . CSeg; ahˆadnia . New (var P: Pointer [,Init: Constructor ] )ù opia . Wynikiem funkcji jeat aktualna warto„ä rejes opis . Tworzy nowÑ zmiennÑ dynamicznÑ i ustawia CS,tzn.adrea aegmentu pami©ci çawierÑjÑc zmiennÑ waka«nikowÑ P na t© zmiennÑ (inaczej ; eegment kodu,w któryçn wywoˆano funkcj© CE pod zmiennÑ waka«nikowÑ P podstawia adres k . Word utworzonej zmiennej dynamicznej).Odwoˆanie do zobacz . DSeg,SSeg tej zmiennej dynamicznej naat©puje prçez P^.P jeat zmiennÑ typu waka«nik. DSeg Rozmiar przydzielanego bloku pami©ci jest za1e¾- skˆadnia . D Seg; ny od rnzmiaru zmiennej dynamicznej,na którÑ wakazuje zmienna waka«nikowa P.Wywoˆanie opia . Wynikiem funkcji jest aktualna wartoŒä rejes procedury New z parametrem Init atoauje si© do DS,tzn.adres aegmentu pami©ci zawierajÑc* zainicjowania zmiennej dynamicznej typu obie aegmentdanyeh. ktowego za pomocÑ odpowiadajÑcego danemu wynik . Word obiektowi konatruktora.Je¾eli na stercie nie ma doŒä wolnej pami©ci,to wyatÑpi bˆÑd wykonania. zobacz . CSeg,SSeg zobacz . Diapoae,FreeMem,GetMem,HeapError Ofs akˆadnia . Ofs(X); Fuãkcje wskà«ãikowe i àdresowe: opia . Funkcja zwraca wielkoŒ¹ przesuni©cia obiektç Addr wçgl©dem poczÑtku segmentu pami©ci.X m* skˆadnia . Addr (X); byä dowolnÑ çmiennÑ,nazwÑ procedury lub fi kcji. opis . Funkcja zwraca adres obiektu X.X mo¾e by¹ . Word dowolnÑ zmiennÑ,nazwÑ procedury lub funkejiù zobacz . Addr,Seg 204 P.Michaˆkiewicz,I.—wituszak Programowanie w Turbo Pascal 7.0 2 skˆadnia . Ptr (Seg, Ofa: Word); opis Funkcja zamienia adres aegmentu i przeauni©* w ramach aegmentu na warto‚¹ typu wska«nikowego.Seg i Ofa aÑ wyra¾eniami typu Word,gdzie Seg oznacça adrea segmentu pami©* a Ofa przesuni©cie wewnÑtrz tego segmentu. . Pointer zobacz . Addr,Ofa,Seg Seg akˆadnia : Seg (X); opia . Funkcja zwraca adres aegmentu pami©ci,w k*. rym jeat obiekt X.X mo¾e by¹ dowolnÑ zmiennÑ, nazwÑ proeedury lub funkcji. wynik . Word zobacz . Addr,Ofa SPtr akˆadnia : Sptr; opia : Wynikiem funkcji jeat aktualna wartoŒ¹ rejeatru SP,tzn.przeauni©cie waka«nika atoau wewnÑtç2 aegmentu stoau. wynik : Word zobacz . SSeg S Seg akˆadnia . SSeg; opis : Wynikiem funkcji jeat aktualna wartoŒ¹ rejeatru SS,tçn.adres aegmentu pami©ci çawierajÑeego segment stoau. wynik . Word zobacz . SPtr,CSeg,DSeg 206 P. Michaˆkiewicz, I. —wituszak Egclude akˆadnia . Exclude (var S: aet ofT; I: T)ù opis. . Procedura aˆu¾y do wyk1uczenia elementu I zbioru S.S jest zmiennÑ typu zbiorowego,I j* wyra¾eniem typu zgodnego z podatawowym pem S. Nale¾y zauwa¾y¹, ¾e procedu Exclude(S,I) odpowiada instrukcji: S:=S-(I) ale jest od niej bardziej efektywna. zobacç . Include *llChar akˆadnia . FillChar (var X; Count: Word; Va1ue)ù opis . Procedura wypeˆnia okre„lonÑ liczb© bajtów C unt podanÑ wartoŒciÑ Value,poczÑwszy c pierwazego bajtu zaj©tego przez zmiennÑ X.Xje zmiennÑ dowolnego typu,Countjest wyra¾enie1 typu Word,a Value jest dowolnym wyra¾enie* typu porzÑdkowego.Dobrze jeat,jeŒli to tyl* mo¾liwe,okreŒla¹ parametr Count przy pomoc funkcji SizeOf zobacz . Move Hi akˆadnia : Hi (X) opia . Funkcja zwraea w poataci wart0*ci beç znak1 wa*t0„¹ bardziej znaczÑcego bajtu podanego wy ra¾enia X.X jest wyraçeniem typu Integer lul Word. . Byte zobacz : Lo,Swap Programowanie w Turbo Pascal 7.0 skˆadnia . Include (var S: aet of T; I: T); opis . Procedura sˆu¾y do doˆÑezenia elementu I do zbioru S. S jest zmiennÑ typu zbiorowego, I jest wyra¾eniem typu zgodnego z podstawowym ty. pem S. Nale¾y zauwa¾yä, ¾e procedura Include(S,I) odpowiada instrukcji: S:=S+[I] ale jest od niej bardziej efektywna. zobacz : Exclude Lo skˆadnia . Lo (X); opia . Funkeja çwraca w postaci wartoŒci bez çnaku warto„¹mniej znaczÑeego bajtu podanego wyra¾eù nia X. Xjeat wyra¾eniem typu Integer 1u1ç Word, wynik : Byte zobacz : Hi,Swap Move skˆadnia . Move (var Source,Dest; Count: Word); opis . Procedura kopiuje okreŒlonÑ liczb© bajtów Count, poezÑwszy od pierwsçego bajtu zaj©tego przez zmiennÑ Source do miejsca pami©ci zaj©tego przeç zmiennÑ Dest,poczÑwszy od pierwsçego bajtu tej zmiennej.Source i Dest sÑ zmiennymi dowolnego typu,Count jest wyra¾eniem typu Word.Dobrze jest,jeŒli to tylko mo¾liwe,okreŒia¹ parametr Count przy pomocy funkcji SiçeOf. zobacz . FillChar ParamCount skˆadnia . ParamCount; opia : Funkcja podaje licçb© parametrów przekazany* w linii komend do programu podczasjego uz'u*s miania. Jako aeperatory mi©dçy przekazywanym parametrami aˆu¾Ñ tabulatory i spacje. 208 P. Michalkiewicz, I. —wituszak zobacz . ParamStr ParamStr skˆadnia . ParamStr (Index); opia . Funkcja podaje warto„ä parametru o numerze r= Index,przekazanego w linii komend do programu podczasjego uruchamiania.Indexjest dowolnym wyra¾eniem typu Word.Indeka pierwazego para- metru ma warto„ä 1,zaŒ ostatniego ParamCount. Gdy inedka b©dzie równy zeru,to funkcja zwróci „cie¾k© doat©pu do plikujÑ wywoˆujÑcego,ˆÑcçnie z nazwÑ tego pliku. fF, W 1 . S n * * zobacz . ParamCount Random * skˆadnia . Random ( (Range: Word) ]; opia . Wyni*iem funkcjijest liczba loaowa. Je¾eli zakrea Range nie zoataˆ podany, to wartoŒciÑ funkcji jest liczba loaowa typu rzeczywistego z prçedziaˆu [0,1). Natomiast je¾eli podano zakrea Range, to warto„ciÑ funkcji jeat liczba loaowa ç przedziaˆu [O,Range). Dla zakreau Range równego 0 funkcja zwraca 0. Range jeat wyra¾eniem typu Word. Wywoˆanie tej procedury powinno byä poprzedzone çainicjowaniem generatora liczb loaowych procedurÑ Randomize. zobacz . Randomize Randomize akˆadnia . Randomize; opia . Procedura inicjuje wbudowany generator liczb losowych, którego "zarodek" prçechowywany jest w staˆej inicjowanej RandSeed. WartoŒci loaowe aÑ uzyakiwane ç zegara systemowego. zobacz : Random Programowanie w Turbo Pascal 7.0 209 akˆadnia . SizeOf (X); opia . Funkcja ohreŒla rozmiar w b*jtach pami©ci çaj, mowanej przez X.X mo¾e byä nazwÑ zmiennej lub identyfikatorem typu.Funkcji tej powinno ai© za, waze u¾ywaä przy okreŒlaniu rozmiaru pami©ci w FillChar, Move, GetMem itp. wynik . Word Swap akˆadnia . Swap (X); opia . Funkcja zamienia mi©dzy aobÑ bardziej znaczÑcy bÑjt z mniej znaczÑcym bajtem podanego wyraçe. nia X.Xjeat wyra¾eniem typu Integer lub Word. zobacz . Hi,Lo 'I*peOf akˆadnia . TypeOf (X); opia . WartoŒciÑ funkcji jeat waka«nik tablicy metod wirtualnych (VMT) typu obiektowego okre„lonego przez X.Funkcja ta mo¾e byä atoaowana tylko na tych obiektaeh,które poaiadajÑ tablçc© metod wir tualnych (VMT); wazyatkie inne typy dajÑ w wyniku bˆÑd.X mo¾e byä identyfikatorem typu obiektowego lub zmiennÑ typu obiektowego. wynik . Pointgr UpCase akˆadnia . Upcaae (Ch: Char); opia . Funkcja aˆu¾y do zamiany maˆych liter na dut& Chjeat dowo1nyçn wyra¾eniem typu Char.Dozw* lone znaki Ch aÑ z zakreau a..z. wynik . Char 210 P.Michaˆkiewicz,I.—wituszak STA�E 1.1. Staˆe trybu tekatowego: staˆa wartoŒ¹ opis BW40 0 40x25czarno-biaˆy CGA,EGA,VGA ù BWBO 2 80x25 czarno-baˆy CGA, EGA, VGA Mono 7 80x25 czarno-biaˆy Herculea C040 1 40x25 kolor CGA,EGA,VGA C080 3 80x25 kolor CGA,EGA,VGA Font8x8 256 EGA/VGA 43/50wierazy C40 C040 zapewnienie zgodnoŒci z TP 3.0 C80 C080 zapewnienie zgodno„ci z TP 3.0 çobacz : zmienna DirectVideo 1.2.Staˆe reprezentujÑce kolory: staˆa wartoŒ¹ kolor Black 0 czarny Blue 1 niebieaki Green 2 zielony Cyan 3 turkuaowy ' Red 4 czerwony Magenta 5 karçnazynowy " Brown 6 brÑzowy LightGray 7 jaanoazary DarkGray 8 ciemnoazary LightBlue 9 jaanoniebieaki Programowanie w Turbo Pascal 7.0 211 l‹ LightCyan 11 jasnoturkusowy akˆadãia . var CheckSnow: Boolean* Lightfted 12 jaanoczerwony opis . Zmienna pozwala na wˆÑczanie i wyˆÑczanie troli efektu "Œnie¾enia" wyst©pujÑcego w ka2 LightMagenta 13 jasnokarmazynowy CGA podczas zapisu do pami©ci ekranu.Zjavc Yellow 14 ¾óˆty tu nie wyat©puje na innych kaçtach graf1czç White 15 biaˆ Standardowo zmienna ta ma wartnŒ¹ logi True i efekt "Œnie¾enia" dla tej wartuŒci nie w, Blink 128 migotanie puje.W nowszych kartach CGA mo¾na wyˆ* kontrol© efektu "Œnie¾enia" przez uatawienie * Staˆe sÑ u¾ywane przez proeedury TextColor *Œ* *j zmiennej na Falae,co pozwoli na çãà i TextBackground. przyapieszen„e operacji pisania na ekranie.V* czenie kontroli powinno by¹ atosowane çobacz . TextBackground, TextColor, zmienna TextAttr poczÑtku pro*ramu i po ka¾dym wywoˆaniu ceduxy TextMode (w celu poprawienia sçybH ZMIENNE uperacji pisania na ekranie). * zobacz . zmienna DirectVideo CheckBreak Direct Video akˆadnia : var CheckBreak: Boolean; akˆadnia . uar DirectVideo: Boolean; opia . Zmienna jest u¾ywana do kontroli przyciŒnigcia klawiszy Ctrl+Break.JeŒli CheckBreak ma war- * opis . WartoŒ¹ logicçna True tej zmiennej powodujf toŒ¹ logicçnÑ True,to przyciŒnigeie Ctrl+Break procedury Wççte i WriteLn,piaçÑc do plików, apowoduje przerwanie wykonywania programu jarçonych ç CRT,b©dÑ umieazezaˆ zn (atandardowo jeat ustawiona na True).Prçyci„- bezpoŒrednio w pami©ci ekranu,ç pomini©c nigcie Ctrl+Break,gdy CheckBreak ma wartoŒE odwoˆaä do BIOS-u.WartoŒ¹ logicçna Fa1se logicznÑ Falae,nie wywoˆa ¾adnych reakcji. zmiennej powoduje,¾e procedury Write i * zobacz : KeyPresaed,ReadKey,zmienna moduˆu SystemteLn,æiazÑc na ekranie,b©dÑ si© odwoˆywa1 SavelntlB BIOS-u. zobacz . zmienna CheckSnow CheckEOF * LastMode akˆadnia : var CheckEOF: Boolean; opia . Zmienna jest u¾ywana do kontroli koäca pliku akˆadnia . var LaatMode: Word; znakowego.JeŒli CheckEOF ma wartoŒ¹ logicznÑ : * opis . W t© zmiennÑ jeat wpiaywany aktualny tryb True,to przyciŒni©cie klawiazy Ctrl+Z,podczas * kstowy przy ka¾dym wywoˆaniu proced* czytania z pliku akojarzonego z ekranem,apowo- TextMode. * k*; duje wygenerowanie koäca pliku.PrzyciŒni©cie çobacz Ctrl+Z,gdy CheckEOF ma wartoŒ¹ logicznÑ F*- TextMode se,nie wywoˆa ¾adnych reakcji (standardowojest uatawiona na Falae). 212 P. Michaˆkiewicz, l. —wituszak Programowanie w Turbo Pascal 7.0 i irvvuuv*ri i r virnuvr* TeztAttr skˆadnia var TextAttr:Byte; Asgi*Crt W zmiennej aÑ przechowywane aktualne atrybuty s*adnia . AaaignCrt (var F: Text); opis te*atu.Atrybuty tekstu mo¾na zmieni¹,zapisujÑ * opia : Procedura aˆu¾y do gkojarzenia plików teksto- odpowiednie wartoŒci bezpoŒrednio do zmiennej ** wych F z urzÑdzeniem CRT.Procedura ta TextAttr.Poataä bitowa tej zmiennej jest nast©pu. 1' wykonywana jegt podobnie do procedury Aaaign, jÑca: ale nie podaje ai© w niej nazwy pliku.Pliki teketo- we sÑ automatycznie kojarzone ç CRT.U¾ycie tej ? 6543210 procedury zapewnia gzybaze wyjŒcie i wejŒcie niç gdzie: przy u¾yciu gtandardowego wyjŒcia i wej*cia. - bit 7jeat bitem migotania, ClrEo1 - bity 6-4 aÑ bitami okreŒlajÑcymi kolor tˆa, g**adnia : ClrEol; - bity 3-0 gÑ bitami okreŒlajÑcymi kolor tekatu. opia . Procedura aˆu¾y do uauni©eia wszyst*ieh znaków od aktualnej poçycji kursora do koäca bie¾Ñcej zobacz : LowVideo, NormVideo, TextBackground, TextCo- linii. Po wykonaniu tej operacji pozycja kursora lor nie ulega zmianie. WindMin zobacz : ClrScr, Window ahˆadnia . var WindMin: Wordù ClrSCr opig . W zmiennej tej aÑ wpiaywane wapóˆrz©dne lewego a*ˆadnia . ClrScr górnego rogu bie¾Ñcego okna. Warto„¹ tajest usta- wiana przez procedur© W¾ndow. Wspóˆrz©dna X opia . Proeedura aˆu¾y do wyczyaçczenia zawartoŒci aktualnego okçça. Po wykonaniu tej operacji pozyjegt pami©tana w mˆodszym (mniej znacç c l , , cja kursora b©dzie znajdowa¹ si© w lewym górnym bajcie, natomiast wapóˆrz©dna Y jeat pami©*a f: rogu okçta. Je¾eli przed wywoˆaniem tej procedury wbajcie atarszym. nie okreŒlono rozmiaru okna (procedura Winzobacz : TextMode dow), to wyczysçczona zostanie çawartoŒä caˆego ekranu. Po wykonaniu tej procedury kolorem tˆa WindMaz aktualnego okna staje gi© aktualny kolor tˆa shˆadnia . var WindMax: Wordù (çgodnie z ustawionym w procedurze TextBackopia W zmiennej tej aÑ wpiaywane wgpóˆrç©dne prawe ground). go dolnego rogu bie¾Ñcego okna. WartoŒä ta est ‚ zobac¾ ClrEo1 Window ugtawiana przez procedur© Window. Wspóˆ**d* na X jegt pami©tana w mˆodszym (mniej : Delay znacçÑcym) bajcie, natomiaat wapóˆrç©dna Y jeB* '* gkˆadnia . Delay (Ms: Word); pami©tana w bajeie atarazym. opig . Procedura powoduje zatrçymanie wykonywania zobacz : TextMode programu na okreŒlonÑ liczb© miligekund Ms. Ma jegt wyra¾eniem caˆkowitym typu Word. 214 P. Mi¹äaˆkiewicz, I. —wituszak Programowanie w Turbo Pascal 7.0 skˆadnia . DelLine; skˆadnia . KeyPreased* przez aktualn ˆo kuraora.W * opia Funk a zwraca wartoŒ¹ lo czn True,je gy y nywania tej operacji wazyatliie wieraze znajdujÑce ataˆ na klawiaturze naci„ni t dowoln h w przeciWnym wypadku daje wartoŒ¹ li jed p wi ç d g a k c je dodaw o * Falae. Funkcja nie wykrywa klawiszy przi nowy wieraz o akt 1 * 1 cia, np. Shift, Alt, Numlock itp. ua nym o orze tˆa. odpowiadajÑcy naciŒnigtemu *lawiazowi p zobacç . InaLine,Window je w buforze klawiatury i aby ponoWnie u G*otoXY wartoŒ¹ logicznÑ Falae tej funkcji,nale¾y ç; wa¹ funkcjg ReadKey. sliˆadnia GotoXY (X,Y: Byte); ' w . Boolean opia . Procedura pozwala ustawi¹ kursor w podanych zobacz . ReadKey wspóˆrzgdnych aktualnego okna okreŒlonych LowVideo przez X i Y. Xjeat numerem kolumny,a Yjeat numerem wier. a*ˆadn¾a . LowVideoù aza. Lewy górny róg ohna ma wspóˆrz©dne (1,1). : Procedura powoduje zmniejszeççie jaakr* zobacz Wlie*X * y znaku poprzez zmiang ataˆej reprezentujÑ* ere,Window lor tekatu w zmienne' TextAttr * Z WartOŒCl : HighVideo na 0-7. aliˆadnia . HighVideo; obacz . HighVideo,NornçVideo,TextBackground, Color opia . Procedura powoduje çwi©kazenie jaskrawoŒci NormVideo znaku poprzez zmiang staˆej reprezentujÑCej koù lor tekatu w zmiennej TextAttr z wartoŒci 0-7na akˆadnia NormVideo* 8-15. zobacz LowVideo N V d : Procedura powoduje uatalenie ta*iego kolor , orm i eo,TextBackground,TextCoù Œwietlanych çnaków i ich tˆa 'a*i b ˆ lor ,) y êà pOC* programu,poprZez odtworzenie wartoŒ* at; InsLine tu video bajtu predefiniowan‚j zmiennej Text akˆadnia . InaLine ' ; zobacz . HighVideo,LowVideo,TextBackground,Te* lor opia . Procedura pozwala watawi¹ puaty wieraz w mi*' NoSound acu wskazywanym prçez aktualne poˆO¾enie kursora.W czaaie wykonywania tej operacji wazy' skˆadnia No Sound stkie wiersze çnajdujÑce si© po wstawianym ; j : Procedura powoduje wyˆÑczenie wewngtrz: wierazu sÑ prçeauwane o eden wieraç w dóˆ. zobacz DelLine,Window gˆoŒniczka. zobacç . Sound I * 216 P.Michaˆkiewicz,I.—wituszak Pr ogramowan*e w Turbo Pascal 7.0 akˆadnia . ReadKey; akˆadnia . TextColor(Color:Byte)ù opia . Funkeja aˆu¾y do wezytania z klawiatury jednego opia : Procedura aˆu¾y do uatawiania koloru wyŒwietl* znaku.Wczytany znak niejeat wyprowadzany na nych znaków.Color jest wyra¾eniem typ ekran monitora.Je¾eli przed wywoˆaniem tej fun- caˆkowitego z przedziaˆu 0-15,odpowiadajÑcyz keji wartoŒciÑ funkeji KeyPressed byˆa wartoŒ¹ * etaˆej koloru tekstu.W predefiniowanej çmiennf logiczna True,to wynikiem funkeji ReadKey bg. * TextAttr bitom 0-3jest przypiaywana podan clzie çnak çnajdujÑcy si© w buforze klawiatury.W wartoŒ¹ Color.JeŒli wartoŒ¹ Colorjest wi©ksça o przeciwnym wypadku (tzn.warto„ciÑ funkeji Key- 15,to jeat ustawiany bit migotania (7bit) zmien Preased byˆa wartoŒ¹ logiczna False) funkej* nej TextAttr; w przeeiwnym wypadku (tçn ReadKey b©dzie ocçekiwaˆa na naciŒni©cie dowol- Color