Console Mode Pascal/fi

From Free Pascal wiki
Jump to navigationJump to search

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.

Light bulb  Huomaa: 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.
Light bulb  Huomaa: Lazaruksella on joitakin komentoriviohjelmien, kuten 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.

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.


Light bulb  Huomaa: 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.

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ä Start.png 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

Light bulb  Huomaa: täytyy varmistaa, että konsolin fontti voi näyttää haluamat kirjaimet (esim. Greek, Cyrillic, Korean).
Light bulb  Huomaa: on sisällytettävä Windows unit.

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.

Katso myös