Sign in Join
Wiki copytemporary

Console Mode Pascal/fi: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11## Komentoriviohjelmointi Pascal ohjelmoinnilla
22
33Jotkut meistä kirjoittivat [[Pascal/fi|Pascal]]-[[Program/fi|ohjelmia]] kauan ennen [[Graphical User Interface/fi|graafisten käyttöliittymien]] ja [[IDE/fi|integroitujen kehitysympäristöjen (IDE)]] muodin tulemista. Jotkut toiset ovat aloittelijoita Pascal-ohjelmoinnissa ja niiden on kyettävä kokeilemaan kielen työkaluja. Joidenkin täytyy kuitenkin kirjoittaa [[Command-line interface/fi|komentorivi]]- tai [[Text User Interface|tekstimuotoisia]] sovelluksia monimutkaisten järjestelmäohjauksien suorittamiseksi.
44
55### Komentoriviohjelmointi ilman Lazarusta
66
77Vaikka monet haluavat käyttää [[Lazarus IDE/fi|Lazarus ohjelmointikehitysympäristöä]] komentoriviohjelmien kirjoittamiseen, ne voidaan myös kirjoittaa melkein millä tahansa tekstieditorilla ja kääntää ne itse kutsumalla [[FPC/fi|FPC]]-[[Compiler/fi|kääntäjää]], esim. example.pas-ohjelmalle:
88
99``` bash
1010fpc example.pas
1111```
1212
1313Myös tekstipohjaiseen käyttöliittymään pohjautuva *fp* IDE (se näyttää hieman vanhalta [[Turbo Pascal/fi|Turbo Pascalilta]]) on käytettävissä. Seuraavissa osissa keskitymme ohjelmointiin [[Lazarus/fi|Lazaruksen]] kanssa.
1414
1515### Komentoriviohjelmointi Lazaruksella
1616
1717Lazarus tarjoaa ihanteellisen ympäristön Pascal-oppimiselle ja tekstipohjaisiin käyttöliittymiin pohjautuvien ohjelmien kehittämiseen. Kaikkia integroidun kehittämisympäristön toimintoja voidaan käyttää, mukaan lukien [[Editor/fi|lähdekoodieditori]], jossa on [[Syntax highlighting/fi|syntaksin korostus]], pääsy kirjastoihin, monimutkaiset haku- ja koodinvalmistustyökalut sekä syntaksin tarkistaminen. Jos ei haluta [[TForm/fi|lomaketta]], jossa on visuaalisia komponentteja, eikä niitä tarvita, niin Lazarus Source Editor on edelleen hyvä ympäristö ohjelmien kehittämiselle. Sillä voidaan koota ja ajaa ohjelmaa kehityksen aikana poistumatta editorista.
1818
1919Jos halutaan aloittaa komentoriviohjelmointi ohjelmointi niin siirrytään päävalikkoon ja valitaan Projekti -\> Uusi Projekti ja sen jälkeen Yksinkertainen ohjelma, Ohjelma tai Komentorivisovellus. Tällöin IDE ei luo kaikkia täydellisiin graafisiin sovelluksiin liittyviä ylimääräisiä tiedostoja eikä avaa Object Inspector -ruutua, mutta avaa lähdekoodieditorin *luuranko*-ohjelman rakenteella ja odottaa ohjelmointia.
2020
2121> **Note:** Windows-käyttöjärjestelmän GUI-sovelluksessa ei ole konsolia, joten sitä ei voi kirjoittaa tai lukea. Saat *File not open* virheitä. Poista konsolisovellus käytöstä valitsemalla *Project Options / Compiler Options / Linking / Target specific options / Win32 GUI application* käytöstä. Lazarus IDE 1.4: ssä tämä on kohdassa *Project(menu) / Project Options / Compiler Options / Config and Target / Target specific options / Win32 GUI application*.
2222
2323> **Note:** Lazaruksella on joitakin komentoriviohjelmien, kuten [[CopyFile/fi|copyfile]], toimintoja. Jos näitä halutaan käyttää, niin lisätään LazUtils-projektien vaatimuksiin, silloin vaadita koko LCL:ää mukaan. Kun vielä lisätään sitten asiaankuuluva käännösyksikkö uses-lauseeseen.
2424
2525#### Projektin tyyppi: Console Application
2626
2727Tämän projektityypin valitseminen Lazaruksessa luo ohjelman, jonka uusi luokka on johdettu TCustomApplication-sovelluksesta. TCustomApplication tarjoaa paljon tavallisia asioita ja tekee ohjelmoinnista komentorivisovelluksissa helppoa. Esimerkiksi komentorivivalintojen tarkistaminen, ohjeen kirjoittaminen, [[Command line parameters and environment variables/fi|ympäristömuuttujien tarkistaminen]] ja [[Exceptions/fi|poikkeuksen käsittely]]. Kaikki LCL-ohjelmat käyttävät tätä automaattisesti.
2828
2929#### Projektin tyyppi: Program
3030
3131Osoituksena esittellään hyvin minimalistisen Pascal-ohjelman. Valitaan IDE: ssä projektin tyypiksi Program ja annetaan IDE auttaa hieman. Esimerkiksi kun lisätään toinen [[Unit/fi|käännösyksikkö]] niin IDE lisää automaattisesti käännösyksikön nimen [[Uses/fi|uses]]-osaan. Tämä käyttäytyminen on määritelty projektin vaihtoehdoissa. Voidaan siis siirtyä 'Program' ja 'Custom Program' välillä milloin tahansa.
3232
3333Täydellinen esimerkki aloittelijoille:
3434
3535``` Pascal
3636program Project1;
3737{$mode objfpc}{$H+}
3838uses
3939 {$IFDEF UNIX}{$IFDEF UseCThreads}
4040 cthreads,
4141 {$ENDIF}{$ENDIF}
4242 Classes;
4343begin
4444 WriteLn('Hello World!');
4545 ReadLn;
4646end.
4747```
4848
4949### Pascal scripts
5050
5151Lisäksi on mahdollista kirjoittaa [[InstantFPC]]:llä dynaamisesti käännettävät skriptit, tämä cross-platform-ratkaisu, joka suorittaa (pieniä) Pascal-ohjelmia skripteinä. Shebang
5252
5353 #!/usr/bin/env instantfpc
5454
5555sallii käynnistää komentosarjan kuten itsenäisen ohjelman.
5656
5757> **Note:** Vaikka sitä käytetään Pascal-komentosarjojen suorittamiseen, InstantFPC käyttää tavallista Object Pascalia, ei PascalScript scriptkieltä. Joten **PascalScript** ja **Pascal-script** eivät ole samat.
5858
5959## Ohjelman suorittaminen
6060
6161#### Kääntäminen
6262
6363Kun ollaan viimeistelty ohjelma (tai ohjelman osa), niin se voidaan kääntää ja suorittaa valitsemalla Suorita -\> Rakenna (tai Pika-kääntäminen) päävalikosta tai klikkaamalla Vihreää (Suorita) kolmio -merkkiä ![](/wiki-images/b/b8/Start.png) pikapainikerivissä. Kaikki kääntäjän viestit (varoitukset, edistymisraportit tai virheilmoitukset) näkyvät viestiruudussa ja toivottavasti lopulta tulee viesti sanomaan
6464
6565'Projekti" Project1 "onnistuneesti rakennettu.'. Taikka 'Project "Project1" successfully built.':).
6666
6767Mutta missä on ohjelma??!!
6868
6969Jos ei vielä ole tallennettu ohjelmaa, IDE laittaa sen väliaikaiseen hakemistoon (esim. /tmp linuxissa, C:\temp windowsissa, katso Environment Options / Files / Directory testiprojektien rakentaminen).
7070
7171Jos ollaan jo talletettu projekti niin ohjelma luotiin samaan hakemistoon, johon oltiin talletettu project1.lpi-tiedosto.
7272
7373#### Suorita konsolissa
7474
7575Ohjelma voidaan suorittaa siirtymällä konsolin (päätelaitteen, terminaalin) ikkunaan ja vaihtamalla sitten hakemistoon ja kirjoittamalla ohjelman nimen **cd**:llä. Unix / Linuxissa, jos se on nykyisessä hakemistossa, niin on aloitettava ./: lla, koska ohjelmaa ei todennäköisesti löydy PATH: sta.
7676
7777Esimerkki Linuxista / Unixista, jossa ohjelma on tallennettu /tmp hakemistoon:
7878
7979``` bash
8080cd /tmp
8181./Project1
8282```
8383
8484Se voi kuitenkin olla erittäin hankalaa vaihtaa Lazarus Editorista ja pääteikkunaan ja takaisin. Onneksi on olemassa mekanismi, jonka avulla pääteikkuna voidaan avata Lazarus-ympäristössä.
8585
8686#### Suorita IDE:ssä
8787
8888Sisäisessä konsolissa: näytä ulostulo pääteikkunassa.
8989
9090Uudelleen ohjaa lähtö.
9191
9292Valitse päävalikosta Suorita -\> Suorita parametrit ja valitse "Käytä käynnistyssovellusta". Kun tämä tehdään ensimmäisen kertaa ja kokeillaan Compile / Run -sekvenssiä, saadaan todennäköisesti epäkohteliasta viestistä:
9393
94-`"xterm: Can't execvp /usr/share/lazarus//tools/runwait.sh: Permission denied".  `
94+```text
95+"xterm: Can't execvp /usr/share/lazarus//tools/runwait.sh: Permission denied".
96+```
9597
9698Jos näin tapahtuu niin on muutettava kyseisen tiedoston käyttöoikeuksia (esimerkiksi käyttämällä chmod + x tiedostonimeä tai käyttämällä Windows-apuohjelmaa käyttöoikeuksien vaihtamiseen); tämän voi joutua tekemään pääkäyttäjänä (roottina) . Tämän jälkeen joka kerta, kun käynnistää ohjelman, näyttöön tulee konsoli-ruutu ja kaikki tekstit I/O (readln, writeln jne.) Ilmestyvät siihen.
9799
98100Kun ohjelma on suoritettu loppuun, näyttöön tulee viesti "Paina Enter". Näin ollen mikä tahansa tuotos, jonka ohjelmassa on, pysyy näytöllä, kunnes on saanut mahdollisuuden lukea sen; Kun ollaan painettu "Enter", konsoli-ikkuna sulkeutuu.
99101
100102Valitettavasti tämä menetelmä ei salli integroidun debuggerin käyttöä.
101103
102104#### Suorita IDE: ssä uudelleenohjattu lähtö
103105
104106Jos halutaan nähdä, mitä kirjoitetaan stdout:iin ja halutaan käyttää myös integroitua debuggeriä, stdout voidaan ohjata tiedostoon, seuraavalla koodilla:
105107
106108``` Pascal
107109uses
108110 baseunix;
109111
110112var
111113 OutputFile: text;
112114
113115begin
114116 Assign(OutputFile, 'Output.txt');
115117 if FileExists(Filename) then begin
116118 Append(OutputFile);
117119 end
118120 else begin
119121 Rewrite(OutputFile); { open file for writing, destroying contents, if any }
120122 end;
121123
122124 ResultCode := fpdup(OutputFile, output);
123125
124126 if ResultCode < 0 then begin
125127 raise Exception.CreateFmt('dup failed: %s', [ResultCode]);
126128 end;
127129 Close(OutputFile);
128130end.
129131```
130132
131133Tiedosto output.txt voidaan sitten katsella 'tail -f output.txt'-toiminnolla tai katsella editorilla, jos 'tail' ei ole käytettävissä [[Operating System/fi|käyttöjärjestelmässäsi]].
132134
133135Vaihtoehtoisesti voit käyttää Lazarus 0.9.31: ää tai uudempaa (vain Linuxissa): "Näytä" -valikossa "Windows-virheenkorjaus" -kohdassa on merkintä "konsolilähtö", joka näyttää stdoutin
134136
135137## Unicode (UTF8) -lähtö
136138
137139Jos halutaan, että konsolitilaohjelma näyttää Unicode ([[UTF-8/fi|UTF8]]) -ulostulon Windows Vistassa ja uudemmissa versioissa (ja ehkä myös aiemmissa versioissa), **SetConsoleOutputCP**-komennolla voit asettaa konsolin UTF8-merkistöön
138140
139141> **Note:** täytyy varmistaa, että konsolin fontti voi näyttää haluamat kirjaimet (esim. Greek, Cyrillic, Korean).
140142
141143> **Note:** on sisällytettävä Windows unit.
142144
143145Katsomalla [[LCL Unicode Support|LCL Unicode -tukea]] saadaan lisätietoja Unicode-tuesta Lazaruksessa ja FPC: ssä..
144146
145147Esimerkkiohjelma:
146148
147149``` Pascal
148150program uniconsole;
149151
150152{$mode objfpc}{$H+}
151153{$APPTYPE CONSOLE}
152154
153155uses
154156 {$IFDEF UNIX}
155157 {$IFDEF UseCThreads}
156158 cthreads,
157159 {$ENDIF}
158160 {Widestring manager needed for widestring support}
159161 cwstring,
160162 {$ENDIF}
161163 {$IFDEF WINDOWS}
162164 Windows, {for setconsoleoutputcp}
163165 {$ENDIF}
164166 Classes
165167 ;
166168
167169var
168170UTF8TestString: string;
169171
170172begin
171173{$IFDEF WINDOWS}
172174SetConsoleOutputCP(CP_UTF8);
173175{$ENDIF}
174176UTF8TestString:= 'rosé, водка and ούζο';
175177writeln ('plain: ' + UTF8TestString);
176178{Apparently we do not need UTF8ToConsole for this
177179UTF8ToConsole did not do anything for me in fact.}
178180end.
179181```
180182
181183## Esimerkit
182184
183185Lazarus-editorilla on mahdollista kokeilla kaikkia esimerkkejä standard Pascal-oppikirjoista tai voidaan kirjoittaa omia. Jotkin kaikkein käyttökelpoisimmista aliohjelmista ovat järjestelmäkomentojen suorittamista tai muiden ohjelmien suorittamista (olipa ne kirjoitettu Pascal-, C- tai Perl-, tai shell- tai batch-skripteissä).
184186
185187#### Suorita shell-komento
186188
187189Tässä on esimerkki *Custom Program* tai *Program*... joka on Linux / Unix / macOS -spesifinen:
188190
189191``` Pascal
190192program TryShell;
191193uses
192194 Classes, Unix;
193195var
194196 S: LongInt;
195197begin
196198 S := fpsystem('/bin/ls -la *.p*'); //lists .pp, .pas, .php, .png etc in current directory
197199 WriteLn('Program exited with status : ', S)
198200end.
199201```
200202
201203#### Esimerkki: päivitä FPC ja Lazarus
202204
203205Monimutkaisempia komentoja voidaan suorittaa. Jos esimerkiksi ollaan jo tarkistettu FPC: n ja Lazaruksen SVN-tietovarastot (katso buildfaq), voidaan pitää FPC- ja Lazarus-lähdetiedostost ajan tasalla hakemalla ne SVN-tietovarastosta seuraavan kutsujen sarjalla:
204206
205207``` Pascal
206208program LazUpdate;
207209uses
208210 Classes, Unix;
209211var
210212 S: LongInt;
211213begin
212214 S := fpsystem('cd /usr/local/src/fpc/devel/fpc ; make clean');
213215 S := fpsystem('cd /usr/local/src/fpc/devel/lazarus ; make clean');
214216 S := fpsystem('cd /usr/local/src/fpc/devel ; svn update fpc >& ~/cvscheckout.log');
215217 S := fpsystem('cd /usr/local/src/fpc/devel ; svn update lazarus >& ~/cvslaz.log' );
216218end.
217219```
218220
219221Huomaa, että komennon antamisen
220222
221223``` Pascal
222224fpsystem('cd /somedirectory');
223225```
224226
225227jälkeen
226228
227229``` Pascal
228230fpsystem ('do something in that subdirectory');
229231```
230232
231233ei toimi, koska jokaisen **fpsystem ()** -[[Function/fi|funktio]] kutsun jälkeen ohjelman suorittaminen palaa hakemistoonmissä se aloitti. joten on sisällytettävä shell kutsuihin useita lausekkeita riviä kohti kun käytetään **fpsystem()**. \[Pikemminkin: se alkaa aina. \]
232234
233-`[Rather: it always starts in . ]`
235+```text
236+[Rather: it always starts in . ]
237+```
234238
235239Jokaista komentoa ei tarvitse syöttää Pascaliin erillisenä rivinä; on mahdollista luoda tällainen **bash**-skriptitiedoston (osoitteesta buildfaq):
236240
237241``` bash
238242#!/bin/sh
239243cd /usr/local/src/fpc/devel
240244cd fpc
241245make clean
242246cd ..
243247cd lazarus
244248make clean
245249cd ..
246250svn up fpc >& ~/cvscheckout.log
247251svn up lazarus >& ~/cvslaz.log
248252```
249253
250254Nimetään se **updatelaz.sh**ja sen sijaan käytetään **bash** suoraan, kutsutaan sitä Pascal ohjelmasta näin:
251255
252256``` Pascal
253257(* Tämä voidaan koota tai käyttää Pascal-skriptinä *)
254258program LazUpdate1;
255259uses
256260 Classes, Unix;
257261var
258262 S: LongInt;
259263begin
260264 S := fpsystem('updatelaz.sh')
261265end.
262266```
263267
264268## Katso myös
265269
266270- [[Command line parameters and environment variables/fi|Komentoriviparametrit ja ympäristömuuttujat]]
267271- [[Executing External Programs/fi|Ulkoisten ohjelmien suorittaminen]]
268272- [[Debugger Console App/fi|Virheenjäljitys konsolisovellukset]]
269273- [[InstantFPC]]
270274
271275---
272276*From the Free Pascal wiki, page "Console Mode Pascal/fi", as it stood on 2020-06-18 after a change by Kai Burghardt, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history