Sign in Join
Wiki copytemporary

Console Mode Pascal/fi: what changed

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

Title: Console Mode Pascal/fi

OldNewLine
1+## Komentoriviohjelmointi Pascal ohjelmoinnilla
2+
3+Jotkut 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.
4+
5+### Komentoriviohjelmointi ilman Lazarusta
6+
7+Vaikka 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:
8+
9+``` bash
10+fpc example.pas
11+```
12+
13+Myö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.
14+
15+### Komentoriviohjelmointi Lazaruksella
16+
17+Lazarus 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.
18+
19+Jos 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.
20+
21+> **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*.
22+
23+> **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.
24+
25+#### Projektin tyyppi: Console Application
26+
27+Tä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.
28+
29+#### Projektin tyyppi: Program
30+
31+Osoituksena 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.
32+
33+Täydellinen esimerkki aloittelijoille:
34+
35+``` Pascal
36+program Project1;
37+{$mode objfpc}{$H+}
38+uses
39+ {$IFDEF UNIX}{$IFDEF UseCThreads}
40+ cthreads,
41+ {$ENDIF}{$ENDIF}
42+ Classes;
43+begin
44+ WriteLn('Hello World!');
45+ ReadLn;
46+end.
47+```
48+
49+### Pascal scripts
50+
51+Lisäksi on mahdollista kirjoittaa [[InstantFPC]]:llä dynaamisesti käännettävät skriptit, tämä cross-platform-ratkaisu, joka suorittaa (pieniä) Pascal-ohjelmia skripteinä. Shebang
52+
53+ #!/usr/bin/env instantfpc
54+
55+sallii käynnistää komentosarjan kuten itsenäisen ohjelman.
56+
57+> **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.
58+
59+## Ohjelman suorittaminen
60+
61+#### Kääntäminen
62+
63+Kun 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
64+
65+'Projekti" Project1 "onnistuneesti rakennettu.'. Taikka 'Project "Project1" successfully built.':).
66+
67+Mutta missä on ohjelma??!!
68+
69+Jos ei vielä ole tallennettu ohjelmaa, IDE laittaa sen väliaikaiseen hakemistoon (esim. /tmp linuxissa, C:\temp windowsissa, katso Environment Options / Files / Directory testiprojektien rakentaminen).
70+
71+Jos ollaan jo talletettu projekti niin ohjelma luotiin samaan hakemistoon, johon oltiin talletettu project1.lpi-tiedosto.
72+
73+#### Suorita konsolissa
74+
75+Ohjelma 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.
76+
77+Esimerkki Linuxista / Unixista, jossa ohjelma on tallennettu /tmp hakemistoon:
78+
79+``` bash
80+cd /tmp
81+./Project1
82+```
83+
84+Se 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ä.
85+
86+#### Suorita IDE:ssä
87+
88+Sisäisessä konsolissa: näytä ulostulo pääteikkunassa.
89+
90+Uudelleen ohjaa lähtö.
91+
92+Valitse 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ä:
93+
94+`"xterm: Can't execvp /usr/share/lazarus//tools/runwait.sh: Permission denied".  `
95+
96+Jos 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.
97+
98+Kun 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.
99+
100+Valitettavasti tämä menetelmä ei salli integroidun debuggerin käyttöä.
101+
102+#### Suorita IDE: ssä uudelleenohjattu lähtö
103+
104+Jos halutaan nähdä, mitä kirjoitetaan stdout:iin ja halutaan käyttää myös integroitua debuggeriä, stdout voidaan ohjata tiedostoon, seuraavalla koodilla:
105+
106+``` Pascal
107+uses
108+ baseunix;
109+
110+var
111+ OutputFile: text;
112+
113+begin
114+ Assign(OutputFile, 'Output.txt');
115+ if FileExists(Filename) then begin
116+ Append(OutputFile);
117+ end
118+ else begin
119+ Rewrite(OutputFile); { open file for writing, destroying contents, if any }
120+ end;
121+
122+ ResultCode := fpdup(OutputFile, output);
123+
124+ if ResultCode < 0 then begin
125+ raise Exception.CreateFmt('dup failed: %s', [ResultCode]);
126+ end;
127+ Close(OutputFile);
128+end.
129+```
130+
131+Tiedosto 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]].
132+
133+Vaihtoehtoisesti 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
134+
135+## Unicode (UTF8) -lähtö
136+
137+Jos 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
138+
139+> **Note:** täytyy varmistaa, että konsolin fontti voi näyttää haluamat kirjaimet (esim. Greek, Cyrillic, Korean).
140+
141+> **Note:** on sisällytettävä Windows unit.
142+
143+Katsomalla [[LCL Unicode Support|LCL Unicode -tukea]] saadaan lisätietoja Unicode-tuesta Lazaruksessa ja FPC: ssä..
144+
145+Esimerkkiohjelma:
146+
147+``` Pascal
148+program uniconsole;
149+
150+{$mode objfpc}{$H+}
151+{$APPTYPE CONSOLE}
152+
153+uses
154+ {$IFDEF UNIX}
155+ {$IFDEF UseCThreads}
156+ cthreads,
157+ {$ENDIF}
158+ {Widestring manager needed for widestring support}
159+ cwstring,
160+ {$ENDIF}
161+ {$IFDEF WINDOWS}
162+ Windows, {for setconsoleoutputcp}
163+ {$ENDIF}
164+ Classes
165+ ;
166+
167+var
168+UTF8TestString: string;
169+
170+begin
171+{$IFDEF WINDOWS}
172+SetConsoleOutputCP(CP_UTF8);
173+{$ENDIF}
174+UTF8TestString:= 'rosé, водка and ούζο';
175+writeln ('plain: ' + UTF8TestString);
176+{Apparently we do not need UTF8ToConsole for this
177+UTF8ToConsole did not do anything for me in fact.}
178+end.
179+```
180+
181+## Esimerkit
182+
183+Lazarus-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ä).
184+
185+#### Suorita shell-komento
186+
187+Tässä on esimerkki *Custom Program* tai *Program*... joka on Linux / Unix / macOS -spesifinen:
188+
189+``` Pascal
190+program TryShell;
191+uses
192+ Classes, Unix;
193+var
194+ S: LongInt;
195+begin
196+ S := fpsystem('/bin/ls -la *.p*'); //lists .pp, .pas, .php, .png etc in current directory
197+ WriteLn('Program exited with status : ', S)
198+end.
199+```
200+
201+#### Esimerkki: päivitä FPC ja Lazarus
202+
203+Monimutkaisempia 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:
204+
205+``` Pascal
206+program LazUpdate;
207+uses
208+ Classes, Unix;
209+var
210+ S: LongInt;
211+begin
212+ S := fpsystem('cd /usr/local/src/fpc/devel/fpc ; make clean');
213+ S := fpsystem('cd /usr/local/src/fpc/devel/lazarus ; make clean');
214+ S := fpsystem('cd /usr/local/src/fpc/devel ; svn update fpc >& ~/cvscheckout.log');
215+ S := fpsystem('cd /usr/local/src/fpc/devel ; svn update lazarus >& ~/cvslaz.log' );
216+end.
217+```
218+
219+Huomaa, että komennon antamisen
220+
221+``` Pascal
222+fpsystem('cd /somedirectory');
223+```
224+
225+jälkeen
226+
227+``` Pascal
228+fpsystem ('do something in that subdirectory');
229+```
230+
231+ei 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. \]
232+
233+`[Rather: it always starts in . ]`
234+
235+Jokaista komentoa ei tarvitse syöttää Pascaliin erillisenä rivinä; on mahdollista luoda tällainen **bash**-skriptitiedoston (osoitteesta buildfaq):
236+
237+``` bash
238+#!/bin/sh
239+cd /usr/local/src/fpc/devel
240+cd fpc
241+make clean
242+cd ..
243+cd lazarus
244+make clean
245+cd ..
246+svn up fpc >& ~/cvscheckout.log
247+svn up lazarus >& ~/cvslaz.log
248+```
249+
250+Nimetään se **updatelaz.sh**ja sen sijaan käytetään **bash** suoraan, kutsutaan sitä Pascal ohjelmasta näin:
251+
252+``` Pascal
253+(* Tämä voidaan koota tai käyttää Pascal-skriptinä *)
254+program LazUpdate1;
255+uses
256+ Classes, Unix;
257+var
258+ S: LongInt;
259+begin
260+ S := fpsystem('updatelaz.sh')
261+end.
262+```
263+
264+## Katso myös
265+
266+- [[Command line parameters and environment variables/fi|Komentoriviparametrit ja ympäristömuuttujat]]
267+- [[Executing External Programs/fi|Ulkoisten ohjelmien suorittaminen]]
268+- [[Debugger Console App/fi|Virheenjäljitys konsolisovellukset]]
269+- [[InstantFPC]]
270+
271+---
272+*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