Console Mode Pascal/fi
│
Deutsch (de) │
English (en) │
español (es) │
suomi (fi) │
magyar (hu) │
日本語 (ja) │
русский (ru) │
slovenčina (sk) │
Komentoriviohjelmointi Pascal ohjelmoinnilla
Jotkut meistä kirjoittivat Pascal-ohjelmia kauan ennen graafisten käyttöliittymien ja 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 komentorivi- tai tekstimuotoisia sovelluksia monimutkaisten järjestelmäohjauksien suorittamiseksi.
Komentoriviohjelmointi ilman Lazarusta
Vaikka monet haluavat käyttää Lazarus ohjelmointikehitysympäristöä komentoriviohjelmien kirjoittamiseen, ne voidaan myös kirjoittaa melkein millä tahansa tekstieditorilla ja kääntää ne itse kutsumalla FPC-kääntäjää, esim. example.pas-ohjelmalle:
fpc example.pas
Myös tekstipohjaiseen käyttöliittymään pohjautuva fp IDE (se näyttää hieman vanhalta Turbo Pascalilta) on käytettävissä. Seuraavissa osissa keskitymme ohjelmointiin Lazaruksen kanssa.
Komentoriviohjelmointi Lazaruksella
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 lähdekoodieditori, jossa on syntaksin korostus, pääsy kirjastoihin, monimutkaiset haku- ja koodinvalmistustyökalut sekä syntaksin tarkistaminen. Jos ei haluta 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.
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.
Projektin tyyppi: Console Application
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, ympäristömuuttujien tarkistaminen ja poikkeuksen käsittely. Kaikki LCL-ohjelmat käyttävät tätä automaattisesti.
Projektin tyyppi: Program
Osoituksena esittellään hyvin minimalistisen Pascal-ohjelman. Valitaan IDE: ssä projektin tyypiksi Program ja annetaan IDE auttaa hieman. Esimerkiksi kun lisätään toinen käännösyksikkö niin IDE lisää automaattisesti käännösyksikön nimen uses-osaan. Tämä käyttäytyminen on määritelty projektin vaihtoehdoissa. Voidaan siis siirtyä 'Program' ja 'Custom Program' välillä milloin tahansa.
Täydellinen esimerkki aloittelijoille:
program Project1;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes;
begin
WriteLn('Hello World!');
ReadLn;
end.
Pascal scripts
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
#!/usr/bin/env instantfpc
sallii käynnistää komentosarjan kuten itsenäisen ohjelman.
Ohjelman suorittaminen
Kääntäminen
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ä pikapainikerivissä. Kaikki kääntäjän viestit (varoitukset, edistymisraportit tai virheilmoitukset) näkyvät viestiruudussa ja toivottavasti lopulta tulee viesti sanomaan
'Projekti" Project1 "onnistuneesti rakennettu.'. Taikka 'Project "Project1" successfully built.':).
Mutta missä on ohjelma??!!
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).
Jos ollaan jo talletettu projekti niin ohjelma luotiin samaan hakemistoon, johon oltiin talletettu project1.lpi-tiedosto.
Suorita konsolissa
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.
Esimerkki Linuxista / Unixista, jossa ohjelma on tallennettu /tmp hakemistoon:
cd /tmp
./Project1
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ä.
Suorita IDE:ssä
Sisäisessä konsolissa: näytä ulostulo pääteikkunassa.
Uudelleen ohjaa lähtö.
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ä:
"xterm: Can't execvp /usr/share/lazarus//tools/runwait.sh: Permission denied".
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.
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.
Valitettavasti tämä menetelmä ei salli integroidun debuggerin käyttöä.
Suorita IDE: ssä uudelleenohjattu lähtö
Jos halutaan nähdä, mitä kirjoitetaan stdout:iin ja halutaan käyttää myös integroitua debuggeriä, stdout voidaan ohjata tiedostoon, seuraavalla koodilla:
uses
baseunix;
var
OutputFile: text;
begin
Assign(OutputFile, 'Output.txt');
if FileExists(Filename) then begin
Append(OutputFile);
end
else begin
Rewrite(OutputFile); { open file for writing, destroying contents, if any }
end;
ResultCode := fpdup(OutputFile, output);
if ResultCode < 0 then begin
raise Exception.CreateFmt('dup failed: %s', [ResultCode]);
end;
Close(OutputFile);
end.
Tiedosto output.txt voidaan sitten katsella 'tail -f output.txt'-toiminnolla tai katsella editorilla, jos 'tail' ei ole käytettävissä käyttöjärjestelmässäsi.
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
Unicode (UTF8) -lähtö
Jos halutaan, että konsolitilaohjelma näyttää Unicode (UTF8) -ulostulon Windows Vistassa ja uudemmissa versioissa (ja ehkä myös aiemmissa versioissa), SetConsoleOutputCP-komennolla voit asettaa konsolin UTF8-merkistöön
Katsomalla LCL Unicode -tukea saadaan lisätietoja Unicode-tuesta Lazaruksessa ja FPC: ssä..
Esimerkkiohjelma:
program uniconsole;
{$mode objfpc}{$H+}
{$APPTYPE CONSOLE}
uses
{$IFDEF UNIX}
{$IFDEF UseCThreads}
cthreads,
{$ENDIF}
{Widestring manager needed for widestring support}
cwstring,
{$ENDIF}
{$IFDEF WINDOWS}
Windows, {for setconsoleoutputcp}
{$ENDIF}
Classes
;
var
UTF8TestString: string;
begin
{$IFDEF WINDOWS}
SetConsoleOutputCP(CP_UTF8);
{$ENDIF}
UTF8TestString:= 'rosé, водка and ούζο';
writeln ('plain: ' + UTF8TestString);
{Apparently we do not need UTF8ToConsole for this
UTF8ToConsole did not do anything for me in fact.}
end.
Esimerkit
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ä).
Suorita shell-komento
Tässä on esimerkki Custom Program tai Program... joka on Linux / Unix / macOS -spesifinen:
program TryShell;
uses
Classes, Unix;
var
S: LongInt;
begin
S := fpsystem('/bin/ls -la *.p*'); //lists .pp, .pas, .php, .png etc in current directory
WriteLn('Program exited with status : ', S)
end.
Esimerkki: päivitä FPC ja Lazarus
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:
program LazUpdate;
uses
Classes, Unix;
var
S: LongInt;
begin
S := fpsystem('cd /usr/local/src/fpc/devel/fpc ; make clean');
S := fpsystem('cd /usr/local/src/fpc/devel/lazarus ; make clean');
S := fpsystem('cd /usr/local/src/fpc/devel ; svn update fpc >& ~/cvscheckout.log');
S := fpsystem('cd /usr/local/src/fpc/devel ; svn update lazarus >& ~/cvslaz.log' );
end.
Huomaa, että komennon antamisen
fpsystem('cd /somedirectory');
jälkeen
fpsystem ('do something in that subdirectory');
ei toimi, koska jokaisen fpsystem () -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. ]
[Rather: it always starts in . ]
Jokaista komentoa ei tarvitse syöttää Pascaliin erillisenä rivinä; on mahdollista luoda tällainen bash-skriptitiedoston (osoitteesta buildfaq):
#!/bin/sh
cd /usr/local/src/fpc/devel
cd fpc
make clean
cd ..
cd lazarus
make clean
cd ..
svn up fpc >& ~/cvscheckout.log
svn up lazarus >& ~/cvslaz.log
Nimetään se updatelaz.shja sen sijaan käytetään bash suoraan, kutsutaan sitä Pascal ohjelmasta näin:
(* Tämä voidaan koota tai käyttää Pascal-skriptinä *)
program LazUpdate1;
uses
Classes, Unix;
var
S: LongInt;
begin
S := fpsystem('updatelaz.sh')
end.