You are on page 1of 5

Pozyteczne drobiazgi, czyli moduly biblioteczne

121

3R*yteczne drobiazgi,
czyli PRGX\
biblioteczne
,OH UD]\ ]DVWDQDZLDH VL
 MDN Z\F]\FL HNUDQ ]PLHQL NRORU WHNVWX F]\ ZSURZDG]L
znak z klawiatury bez naciskania klawisza ENTER" :\NRQDQLH W\FK F]\QQRFL QLH
Z\PDJD ]DFKRGX Z\VWDUF]\ Z\ZRD RGSRZLHGQL SURFHGXU
 ELEOLRWHF]Q -DN VDPD
QD]ZD ZVND]XMH SURFHGXUD WDND QLH MHVW QD VWDH ZEXGRZDQD Z M
]\N
SURJUDPRZDQLD OHF] SRELHUDQD ] RGG]LHOQHJR SOLNX ELEOLRWHNL  L GRF]DQD GR
SURJUDPXZWUDNFLHW]ZNRQVROLGDFML QDVW
SXMFHMSRNRPSLODFML 
3DVFDORZH SOLNL ELEOLRWHF]QH QRV] QD]Z
 PRGXyZ DQJ unit). Wersja 7.0 oferuje
SURJUDPLFLHG]LHVL
PRGXyZVWDQGDUGRZ\FK
System

wszystkie procedury standardowe;

Crt

oEVXJDPRQLWRUDNODZLDWXU\LJRQLND

Dos

oEVXJDIXQNFMLV\VWHPRZ\FK Z\ZRDQLDIXQNFMLV\VWHPX06DOS);

Graph

oEVXJDJUDILNL

Strings

oEVXJDDFXFKyZ$6&,,Z;

WinDos

oGSRZLHGQLNPRGXX'26Z\NRU]\VWXMF\DFXFK\$6&,,=

Printer

oEVXJDGUXNDUNL

Overlay

oEVXJDW]ZQDNDGHN

Turbo3

mRGXX]JDGQLDMF\]7XUER3DVFDOHP

Graph3

oEVXJDW]ZJUDILNL*yZLD X*\ZDQHMZ7XUER3DVFDOX 

122

Turbo Pascal programowanie


2GG]LHOQDREV]HUQDJUXSDPRGXyZWZRU]\ELEOLRWHN
7XUER9LVLRQNWyUQLHE
dzieP\VL
WXWDM]DMPRZD
-DN QLHWUXGQR ]DXZD*\ ND*G\ PRGX VSHFMDOL]XMH VL
 Z RNUHORQ\FK RSHUDFMDFK
Z\MWNLHP MHVW PRGX System ]DZLHUDMF\ ZV]\VWNLH SURFHGXU\ L IXQNFMH VWDQGDUGRZH  1DMF]
FLHM X*\ZDQH PRGX\ System, Crt, Dos, Printer i Overlay)
umieszczono w specjalnym pliku TURBO.TPLDGRZDQ\PGRSDPL
FLZUD]],'(7XUER
3DVFDOD G]L
NL F]HPX LFK ]DZDUWR GRVW
SQD MHVW QDW\FKPLDVW .RG SR]RVWD\FK
PRGXyZ ]DSLVDQ\ MHVW Z RGSRZLHGQLFK SOLNDFK ] UR]V]HU]HQLHP .TPU 1LH]DOH*QLH RG
WHJRF]\NRGPRGXX]QDMGXMHVL
QDG\VNXF]\MHVWDGRZDQ\GRSDPL
FLDE\Z\NRU]\VWDGRZROQ\MHJRHOHPHQW]DQDJyZNLHPSURJUDPXPXVLV]XPLHFLGHNODUDFM

uses nazwa-PRGXX

-HOLZ\NRU]\VWXMHV]NLONDUy*Q\FKPRGXyZPXVLV]UR]G]LHOLLFKQD]Z\SU]HFLQNDPL
&KRFLD* PRGX\ WUDNWRZDQH V QDMF]
FLHM MDNR ELEOLRWHNL SURFHGXU ]DZLHUDM RQH
UyZQLH*GDQHZSRVWDFLVWD\FK QSGHILQLXMF\FKNRORU\MDN Red=2), zmiennych (np.
XVWDODMF\FK VSRVyE RWZLHUDQLD SOLNyZ FileMode F]\ WH* REVXJL PRQLWRUD
DirectVideo) i typw (np. DateTime typ rekordowy przeznaczony do
przechowywania czasu i daty, PointType  W\S RSLVXMF\ SXQNW QD SDV]F]\(QLH 
=DUyZQRSURFHGXU\MDNLGDQHPR*HV]Z\NRU]\VW\ZDEH]RJUDQLF]HDWDN*HSU]\VDQLDZDVQ\PLGHILQLFMDPL3DPL
WDMMHGQDN*HFHQ]DGRVW
SGR]DZDUW\FKZPRGXOH
RELHNWyZ MHVW SRZL
NV]HQLH REM
WRFL JRWRZHJR SURJUDPX Z\QLNDMFH ] GRF]HQLD
LPSRUWRZDQHJR NRGX L GDQ\FK -HOL ]DOH*\ &L QD PLQLPDOL]DFML ZLHONRFL NRGX
Z\QLNRZHJR]DVWDQyZVL
F]\NRQLHF]QLHPXVLV]X*\ZDQSPRGXXCrt. Generalnie
MHGQDN QDOH*\ ]DOHFL X*\ZDQLH PRGXyZ ELEOLRWHF]Q\FK JG\* GDM RQH SURJUDPLFLH
PR*OLZR VNRU]\VWDQLD ]H VSUDZG]RQ\FK UR]ZL]D ZLHOX SUREOHPyZ ]ZDOQLDMF RG
NRQLHF]QRFLZ\P\ODQLDLFKQDZDVQU
N

6WRVXMPRGX\ELEOLRWHF]QH

6SRUyGZ\PLHQLRQ\FKZ\*HMPRGXyZQDMF]
FLHMVWRVRZDQHV CrtXPR*OLZLDMF\
HIHNW\ZQ L HIHNWRZQ  REVXJ
 NRPXQLNDFML ] X*\WNRZQLNLHP Graph UHDOL]XMF\
operacje w trybie graficznym, oraz DosXPR*OLZLDMF\Z\NRQ\ZDQLHIXQNFMLV\VWHmoZ\FK 3RQLHZD* RPDZLDQLH WUHFL SRV]F]HJyOQ\FK PRGXyZ MHVW NZHVWL GUXJRU]
GQ
QDV]DNVL*NDPDSU]HGHZV]\VWNLPXF]\SURJUDPRZDQLDDQLHVX*\MDNROHNV\NRQ
M
]\ND  D WDN*H ]H Z]JO
GX QD V]F]XSR PLHMVFD RJUDQLF]\P\ VL
 GR RPyZLHQLD
NLONX QDMSRSXODUQLHMV]\FK HOHPHQWyZ PRGXyZ Crt i Dos wraz z prostymi
SU]\NDGDPL = tych samych przyczyn zrezygnujemy z omawiania bardzo obszernej
]DZDUWRFLPRGXXGraphRGV\DMF]DLQWHUHVRZDQ\FK&]\WHOQLNyZGROLWHUDWXU\>@
=DF]QLHP\ RG PRGXX Crt ZVSRPDJDMFHJR RSHUDFMH ZHMFLD L Z\MFLD ] X*\FLHP
konsoli. Z procedur XOHSV]DMF\FK REVXJ
 HNUDQX L NODZLDWXU\ FK\ED QDMF]
FLHM
wykorzystywana jest bezparametrowa procedura ClrScr SRZRGXMFD Z\F]\V]F]HQLH
HNUDQX 3U]\NDG MHM X*\FLD ]QDMG]LHV] Z IXQNFML Menu naszego programu bibliotecz-

3R*\WHF]QHGURELD]JLF]\OLPRGX\ELEOLRWHF]QH

123

QHJR -HOL GRGDWNRZR SU]\ RND]ML F]\V]F]HQLD HNUDQX FKFLDE\ ]PLHQL NRORU\
PR*HV]Z\NRU]\VWDSURFHGXU\TextColor i TextBackground:
TextColor(kolor-tekstu)
TextBackground(kolor-WD

]PLHQLDMFHRGSRZLHGQLRNRORU]QDNyZRUD]WD2F]\ZLFLH]DPLDVWOLF]ERZ\FKZDUWRFLNRORUyZ NWRE\MHSDPL
WD QDMOHSLHMVWRVRZDVWDHV\PEROLF]QH QS Blue=1
GOD NRORUX QLHELHVNLHJR  (IHNW G]LDDQLD REX SURFHGXU ZLGRF]Q\ MHVW GRSLHUR SR
Z\NRQDQLX NROHMQ\FK RSHUDFML Z\MFLD OXE Z\F]\V]F]HQLD HNUDQX  ]D ELH*FH
ZDUWRFLNRORUyZSU]HFKRZ\ZDQHVZ]PLHQQHMTextAttr.
Procedura GotoXYVX*\GRZ\SURZDG]DQLDWHNVWXQD]DGDQ\FKZVSyU]
GQ\FK HNUDQ
WHNVWRZ\OLF]\VRELHZLHUV]\SR]QDNyZZLHUV]HL]QDNLQXPHURZDQHVRG 
3U]\NDGRZHZ\ZRDQLH
for i := 1 to 24 do
begin
GotoXY(i,i);
write('*');
end;

Z\ZLHWOL QD HNUDQLH XNRQ OLQL


 ]R*RQ ] JZLD]GHN =EOL*RQH ]DVWRVRZDQLH PD
procedura Window:
Window(x1, y1, x2, y2)

XPR*OLZLDMFD Z\]QDF]HQLH QD HNUDQLH RNLHQND RJUDQLF]DMFHJR REV]DU Z\SLV\ZDQLD


WHNVWXGRSURVWRNWDRZVSyU]
GQ\FK x1, y1 (lewy grny rg) i x2, y2 (prawy dolny
UyJ ']LDDQLHSURFHGXU\WindowQDMOHSLHMLOXVWUXMHSRQL*V]\SU]\NDG
Window(10, 10, 20, 20); { okienko 10x10 }
write('W tym okienku wypisuje sie bardzo dlugi tekst');

2E\GZLHSURFHGXU\XPR*OLZLDMVNXWHF]QHWZRU]HQLHDGQ\FKPHQXF]\IRUPXODU]\
QLHZLHONLPQDNDGHPNRV]WyZFKRFLD*F]
VWRRND]XMHVL
*HOHSLHMZW\PFHOXZ\NRU]\VWDQSELEOLRWHN
7XUER9LVLRQ
$E\ZSURZDG]L]NODZLDWXU\SRMHG\QF]\]QDNEH]QDFLVNDQLDklawisza ENTER warto
Z\NRU]\VWDIXQNFM
 ReadKey=ZUDFDRQDNRG$6&,,]QDNXRGSRZLDGDMFHJRNODZLszowi albo ZSU]\SDGNXQDFLQL
FLDNODZLV]DIXQNF\MQHJROXEVSHFMDOQHJR tzw.
rozszerzony kod klawisza poprzedzony znakiem o kodzie 0 (w tym przypadku konieczQH V GZD Z\ZRDQLD  )XQNFja ReadKey MHVW VWRVRZDQD JyZQLH GR UHDOL]DFML PHQX
(vide program Katalog  L LQQ\FK Z\P\OQLHMV]\FK RSHUDFML Z\NRU]\VWXMF\FK NODZLDWXU
 6SRNUHZQLRQD ] QL IXQNFMD KeyPressed VX*\ GR EDGDQLD VWDQX EXIRUD
klawiaWXU\ MHOL SU]HG MHM Z\ZRDQLHP QDFLQL
WR MDNL NODZLV] ]ZUyFL RQD ZDUWR
true :DUWR SDPL
WD *H KeyPressed QLH RSUy*QLD EXIRUD NODZLDWXU\ WRWH* NROHMQH
Z\ZRDQLD E
G ]ZUDFD\ true D* GR FKZLOL NLHG\ ]QDN ]RVWDQLH RGF]\WDQ\ QS
w\ZRDQLHPIXQNFMLReadKey=WHJRWH*Z]JO
GXIXQNFMLKeyPressedQDOH*\X*\ZD
EDUG]RRVWUR*QLH]DVW
SXMFMZPLDU
PR*OLZRFLZ\ZRDQLHPReadKey.

124

Turbo Pascal programowanie


5HDOL]DFM
 HIHNWyZ G(ZL
NRZ\FK XPR*OLZLDM SURFHGXU\ Sound, NoSound i Delay.
3LHUZV]H GZLH RGSRZLHGQLR ZF]DM L Z\F]DM ZHZQ
WU]Q\ JRQLF]HN NRPSXWHUD
SRZRGXMF JHQHURZDQLH G(ZL
NX R F]
VWRWOLZRFL RNUHORQHM SDUDPHWUHP 3URFHGXUD
DelayXPR*OLZLDXVWDOHQLHGXJRFLWUZDQLDG(ZL
NX3RQLHZD*JRQLNNRPSXWHUD3&
REVXJLZDQ\ MHVW VSU]
WRZR PXVLV] SDPL
WD R Z\F]HQLX G(ZL
NX SURFHGXU NoSound, w przeciwnym przySDGNX PR*H RQ E\ JHQHURZDQ\ QDZHW SR ]DNRF]HQLX
SURJUDPX.UyWNGHPRQVWUDFM
HIHNWyZG(ZL
NRZ\FKSRND]DQRSRQL*HM
for i := 1 to 8 do
begin
6RXQG  ^G(ZL
NRF]
VWRWOLZRFLN+]`
'HOD\  ^RSy(QLHQLHPLOLVHNXQG`
1R6RXQG^Z\F]G(ZL
N`
'HOD\  ^MHV]F]HMHGQRRSy(QLHQLH`
end;

Procedury i dane zawarte w module DosZ\NRU]\VW\ZDQHV]QDF]QLHU]DG]LHMJyZQLH


SU]H]EDUG]LHMGRZLDGF]RQ\FKSURJUDPLVWyZ3R]ZDODMRQHQDZ\NRQ\ZDQLHRSHUDFML
na systemie plikw, oEVXJ
 ]HJDUD V\VWHPRZHJR RUD] ]DU]G]DQLH SURFHVDPL
SURJUDPDPL LW]ZSU]HUZDQLDPL FRMHVW]DEDZQLH]DZV]HEH]SLHF]Q 
(OHPHQWDUQHLQIRUPDFMHRV\VWHPLHSOLNyZPR*HV]X]\VND]DSRPRFIXQNFML SURcedur) DiskSize, DiskFree, GetDir, FindFirst i FindNext. Pierwsze dwie funkcje
]ZUDFDMFDNRZLWSRMHPQRRUD]LORZROQHJRPLHMVFDGOD]DGDQHJRG\VNX ZEDMWDFK ]DSURFHGXUDGetDirXPR*OLZLDRNUHOHQLHQD]Z\ELH*FHJRNDWDORJX
*HW'LU V ^R]QDF]DG\VNELH*F\`
writeln('Biezacy katalog: ', s); { s jest typu string }
writeln('Pojemnosc dysku: ', DiskSize(0), ' bajtow.');
writeln('Wolne miejsce: ', DiskFree(0), ' bajtow.');

:DUWRZLHG]LH*HG\VNLZV\VWHPLH'26QXPHURZDQHVRGMHG\QNL NWyUDRGSRZLDGD
G\VNRZL$ ]DZDUWRR]QDF]D]DZV]HG\VNELH*F\
Procedury FindFirst i FindNextZ\NRU]\VW\ZDQHVQDRJyGRVSUDZG]DQLDREHFQRFL SOLNX QD G\VNX L RGF]\WX OLVW\ SOLNyZ ]DZDUW\FK Z NDWDORJX 3RQL*HM SU]HGVWDZLRQRW\SRZNRQVWUXNFM
Z\ZLHWODMFOLVW
SOLNyZ]DZDUW\FKZNDWDORJXJywnym
dysku C:
FindFirst('c:\ 
$Q\)LOH2SLV3OLNX ^]QDMG(SLHUZV]\`
{ plik }
while DosError = 0 do^V]XNDMD*GRZ\F]HUSDQLDSOLNyZ`
begin
)LQG1H[W 2SLV3OLNX ^]QDMG(NROHMQ\SOLN`
writeln(OpisPliku.Name);
end;

Procedura FindFirst znajduje pierwszy plik o nazwie zadanej pierwszym parametrem


i tworzy tzw. rekord opisu pliku (zmienna OpisPliku typu SearchRec), wykoU]\VW\ZDQ\ QDVW
SQLH SU]H] FindNext do wyszukiwania kolejnych plikw. Zmienna
DosError przechowuje wynik ostatnio wykonanej funkcji systemu operacyjnego

3R*\WHF]QHGURELD]JLF]\OLPRGX\ELEOLRWHF]QH

125

(w naszym przypadku  IXQNFML Z\V]XNDQLD SOLNX  SU]\ F]\P ZDUWR  RGSRZLDGD


Z\NRQDQLX EH]E
GQHPX QDWRPLDVW SR]RVWDH ZDUWRFL V NRGDPL RGSRZLHGQLFK E
dw zwracanymi przez DOS.
1D W\P ]DNRF]\P\ QDV]H NUyWNLH VSRWNDQLH ] PRGXDPL ELEOLRWHF]Q\PL = NRQLHF]QRFLRPyZLOLP\ZQLP]DJDGQLHQLDQDMEDUG]LHMSRGVWDZRZHSRPLMDMFV]F]HJyRZ\
RSLV ]DZDUWRFL PRGXyZ -HOL RND*H VL
 *H MHVW &L SRWU]HEQD MDND IXQNFMD OXE
struktura danycKQDMOHSLHM]URELV]SU]HJOGDMFRGSRZLHGQLHWHPDW\V\VWHPXSRPRF\
HZHQWXDOQLHRGZRXMFVL
GROLWHUDWXU\
: NROHMQ\P UR]G]LDOH SRND*HP\ MDN WZRU]\ ZDVQH PRGX\ L MDNLH ] WHJR S\Q
NRU]\FL

=DSDPL
WDM
3DVFDORZHPRGX\ELEOLRWHF]QH]DZLHUDMZLHOHX*\WHF]Q\FKSURFHGXULVWUXNWXU
danych.
$E\RGZRDVL
GR]DZDUWRFLPRGXXPXVLV]XPLHFLQDSRF]WNXSURJUDPX
GHNODUDFM
uses.
:\NRU]\VWDQLH PRGXyZ SRZRGXMH SRZL
NV]HQLH REM
WRFL VNRPSLORZDQHJR
programu.
1DMF]
FLHM Z\NRU]\VW\ZDQ\PL PRGXDPL V Crt REVXJD PRQLWRUD L NODZLDtury), Graph REVXJD JUDILNL  RUD] Dos REVXJD Z\ZRD IXQNFML V\VWHmowych).

You might also like