.\" .\" dc.1 - the *roff document processor source for the dc manual .\" .\" This file is part of GNU dc. .\" Copyright (C) 1994, 1997 Free Software Foundation, Inc. .\" .\" This program is free software; you can redistribute it and/or modify .\" it under the terms of the GNU General Public License as published by .\" the Free Software Foundation; either version 2 of the License , or .\" (at your option) any later version. .\" .\" This program is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public License .\" along with this program; see the file COPYING. If not, write to .\" the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. .\" .TH DC 1 "1997-03-25" "GNU Project" .ds dc \fIdc\fP .ds Dc \fIDc\fP .SH NÉV dc \- tetszőleges pontosságú számológép .SH ÁTTEKINTÉS dc .SH LEÍRÁS .PP A \*(dc egy korlátlan pontosságú számítások elvégzésére alkalmas fordított-lengyel (postfix) asztali számológép, amely lehetőséget ad makrók definiálására és végrehajtására. A bemenetet a szabványos bemenetről veszi; ha argumentumot adsz meg neki, azt fájlnévként értelmezi és azon fájlok tartalmát veszi és hajtja végre, majd ezután olvas a szabványos bemenetről. A kimenet a szabványos kimenet, a hibák a szabványos hibakimenetre íródnak. .PP A fordított-lengyel számológép a számokat egy veremben tárolja. Új szám bevitele esetén a szám a verem tetejére kerül. A műveletek az argumentumukat a verem tetejéről veszik, majd az eredményt visszateszik a verembe. .PP A bevitelhez a számot egyszerűen beírod, követheti opcionálisan tizedespont. A hatványalak használata nem támogatott. Negatív számok beviteléhez a számot ``_'' karakterrel kezdd. Az előjel nem lehet ``-'', mivel ez a kivonás műveleti operátora. Több számot egymástól szóközzel vagy új sorral elválasztva lehet bevinni, ezen karakterek nem parancsok. .PD .SH KIÍRÓ PARANCSOK .TP .B p Kiírja a verem tetején levő számot a verem megváltoztatása nélkül. A szám után egy újsor karakter is kiíródik. .TP .B P Kiveszi a verem tetejéről a számot, kiírja, és nem ír utána újsor karaktert. .TP .B f Kiírja a verem teljes tartalmát anélkül, hogy bármit változtatna. Akkor jó, ha teljesen eltévedtél, vagy ki akarod találni, hogy egy parancs vajon mit csinált. .PD .SH SZÁMÍTÁSOK .TP .B + Leveszi a verem két felső elemét, összeadja őket, és az eredményt a verembe helyezi. A pontosságot kizárólag az argumentumok értéke határozza meg. .TP .B - Leveszi a verem két felső elemét, az elsőt (ami eredetileg felül volt) kivonja a másodikból, majd az eredményt a verembe helyezi. .TP .B * Leveszi a verem két felső elemét, összeszorozza őket, majd az eredményt a verembe helyezi. A tizedesjegyek számát az aktuális pontosságérték (l. lentebb) határozza meg, és nem függ a szorzandóktól. .TP .B / Leveszi a verem két felső elemét, az elsőt elosztja a másodikkal, majd az eredményt a verembe helyezi. A tizedesjegyek számát a pontosságérték határozza meg. .TP .B % Leveszi a verem két felső elemét, a .B / által végzett osztás maradékát a verembe helyezi. Az osztás a pontosságérték által meghatározott pontossággal végződik el, és a maradék is ennek megfelelő számú jegyre számolódik ki. .TP .B ~ Leveszi a verem két felső elemét, az elsőt elosztja a másodikkal. Először a hányadost, aztán a maradékot helyezi a verembe. Az osztásban használt tizedesjegyek értéke a pontosságértéktől függ. (A \fBSdSn lnld/ LnLd%\fP hatása hasonló, a hibakezelése más egy kicsit.) .TP .B ^ Leveszi a verem két felső elemét, az elsőt (ami eredetilg felül volt) kitevőként, a másodikat alapként használva elvégzi a hatványozást. Ha a kitevőnek van törtrésze, azt figyelmen kívül hagyja. A pontosságérték határozza meg, hogy az eredmény hány tizedesjegyre számítódik ki. .TP .B | Törtkitevős hatványozást végez. Leveszi a verem felső három elemét. Az első (ami eredetileg felül volt) lesz a kitevő nevezője, ez nem lehet nulla, és egésznek kell lennie. A második a kitevő számlálója, ez nem lehet negatív. Ha van tizedesjegye, azt figyelmen kívül hagyja. A harmadik szám lesz a hatványozás alapja. A pontosságérték határozza meg, hogy az eredmény hány tizedesjegyre számítódik ki. Kis számok esetén hasonlít hozzá a \fBSm lble^ Lm%\fP szekvencia, de a \fB^\fP-tól eltérően ez a parancs nem alkalmazható tetszőlegesen nagy kitevőkre. .TP .B v Levesz egy elemet a veremről, kiszámítja a négyzetgyökét, majd az eredményt a verembe helyezi. A pontosságérték határozza meg, hogy hány tizedesjegyre végződik el a számítás. .PP A legtöbb számítás eredményét befolyásolja a .B k paranccsal beállítható pontosságérték. Ez alapértelmezésben nulla, ami azt jelenti, hogy az összeadás és a kivonás kivételével minden művelet erdménye egész lesz. .PP A .B % maradék-művelet kis magyarázatra szorul. Ha az argumentumai ``a'' és ``b'', akkor a művelet eredménye ``a - (b * (a / b))'', ahol ``a / b'' az aktuális pontosságérték szerint számítódik. .SH VEREMKARBANTARTÁS .TP .B c Kitörli a verem minden elemét, a verem üres lesz. .TP .B d A verem tetején levő elemet megduplázza és a verem tetejére helyezi, így a ``4d*p'' eredménye 16. .TP .B r Megfordítja (kicseréli) a verem két felső elemét. .SH REGISZTEREK .PP A \*(dc 256 memóriaregisztert képes kezelni, mindegyikük neve egyetlen karakter. A regiszterben tárolható és később újrafelhasználható egy szám vagy egy karakterlánc. .TP .BI s r A verem tetején levő értéket leveszi és az .IR r regiszterben eltárolja. .TP .BI l r Az .I r regiszter tartalmát a verembe helyezi. Ez a művelet nem változtatja meg az .IR r regiszter tartalmát. .PP Minden regiszternek megvan a saját verme, az aktuális regiszterérték van a verem tetején. .TP .BI S r A (fő) verem tetején levő értéket leveszi és az .IR r regiszter vermébe helyezi. A regiszter előző értéke így elérhetetlen. .TP .BI L r Az .IR r regiszter verméből leveszi az elemet és a fő verembe helyezi. Ha az .IR r regiszter vermében volt régebben valami érték, akkor az most a .BI l r paranccsal elérhetővé válik. .SH PARAMÉTEREK .PP A \*(dc működését három paraméter befolyásolja: a pontosság, a beviteli alap és a kimeneti alap. A pontosság határozza meg, hogy a műveletek eredményéből hány tizedesjegy maradjon meg. A beviteli alap mutatja meg, hogy a begépelt számok hányas számrendszerben vannak; minden begépelt szám ebben a számrendszerben értelmeződik. Számok kiírásakor a számok a kimeneti alap szerinti számrendszerben íródnak ki. .PP A beviteli és a kimeneti alapok különböző paraméterek, nem kell feltétlenül egyenlőnek lenniük; ez lehet hasznos és zavaró is. A bemeneti alap legalább 2, legfeljebb 36 lehet. A kimeneti alapnak legalább 2-nek kell lennie. A pontosságnak nullának vagy nagyobbnak kell lennie. A pontosság a beviteli és kimeneti alaptól függetlenül mindig tizedesjegyeket jelent. .TP .B i Leveszi a verem tetején levő számot és erre állítja a beviteli alapot. .TP .B o Leveszi a verem tetején levő számot és erre állítja a kimeneti alapot. .TP .B k Leveszi a verem tetején levő számot és erre állítja a pontosságot. .TP .B I Az aktuális beviteli alapot a verem tetejére helyezi. .TP .B O Az aktuális kimeneti alapot a verem tetejére helyezi. .TP .B K A pontosság aktuális értékét a verem tetejére helyezi. .SH KARAKTERLÁNCOK .PP A \*(dc képes karakterláncokat is kezelni. A karakterláncokat csak tárolni vagy makróként végrehajtani (azaz a tartalmuk \*(dc parancsként értelmeződik) lehet. Karakterláncok tárolására minden regiszter és a verem is képes. Néhány parancs, mint például az aritmetikai műveletek számokat várnak argumentumként, és hibát jeleznek, ha karakterláncot találnak helyette. Más parancsok számot és karakterláncot is elfogadnak; ilyen például a .B p parancs, ami mindegyiket elfogadja és a típusának megfelelő módon írja ki. .TP .BI [ karakterek ] A .I karakterek -et tartalmazó karakterláncot (azokat a karaktereket, amik .B [ és .B ] karakterek között vannak) tartalmazó karakterláncot képez és a veremre helyezi. Például a .B [foo]P kiírja a .B foo szöveget és nem ír utána újsor karaktert. .TP .B a Leveszi a verem legfelső elemét. Ha ez szám, akkor az alacsony helyiértékű bájtját karakterré konvertálja és a verembe helyezi. Ha ez karakterlánc, akkor ennek első karakterét helyezi vissza a verembe. .TP .B x Leveszi a verem legfelső elemét és makróként végrehajtja. Normális esetben ez az elem egy karakterlánc; ha szám, akkor visszahelyezi a verembe. Például a .B [1p]x végrhajtja a .B 1p makrót, ami egy .B 1 -est tesz a verembe és új sorban kiírja az .B 1 -et. .PP A makrókat leggyakrabban regiszterekben tároljuk; a .B [1p]sa az .BR a regiszterbe tesz egy olyan makrót, ami egy .B 1 -est ír ki. A .B lax parancs hajtja végre ezt a makrót. .TP .BI > r Leveszi a verem két felső elemét, feltételezi, hogy ezek számok, összehasonlítja őket, és végrehajtja az .I r regiszterben lévő makrót, ha az eredetileg a verem tetején levő szám nagyobb. Az .B 1 2>a parancs végrehajtja az .BR a regiszterben tárolt makrót, míg a .B 2 1>a parancs nem. .TP .BI < r Hasonló, de akkor hajtja végre a makrót, ha az eredetileg a verem tetején levő szám kisebb. .TP .BI = r Hasonló, de akkor hajtja végre a makrót, ha a két levett elem egyenlő. .TP .B ? Beolvas egy sort a terminálról és végrehajtja. Ezzel a paranccsal lehet felhasználói bevitelt kérni. .TP .B q Kilép a makróból és az azt hívó makróból is. Ha a legfelső szinten hajtod végre, a .B q parancs kilép a \*(dc -ből. .TP .B Q Leveszi a verem legfelső elemét és ennyi szintet lép ki a makrókból. A .B Q parancs soha nem lép ki a \*(dc -ből. .SH ÁLLAPOTLEKÉRDEZÉS .TP .B Z Leveszi a verem tetején levő elemet, megszámolja hány jegyű (ha szám) vagy hány karakterből áll (ha karakterlánc), és ezt a számot teszi a verembe. .TP .B X Leveszi a verem tetején levő elemet, megszámolja, hány tizedesjegye van, majd ezt a számot teszi a verembe. Ha a levett elem karakterlánc, akkor .\" -1. 0 -t tesz a verembe. .TP .B z A verembe teszi a verem aktuális mélységét; azt, hogy a .B z parancs végrehajtása előtt hány elem volt a veremben. .SH EGYÉB .TP .B ! A sor többi részét mint rendszerparancsot futtatja. .TP .B # A sor többi részét megjegyzésként kezeli. .TP .BI : r A verem két felső elemét leveszi. A második elemet az .IR r tömbbe helyezi, amit az első elemmel indexel. .TP .BI ; r Leveszi a verem felső elemét és az .IR r tömb indexeként használja. A kiválasztott elem a verembe kerül. .SH MEGJEGYZÉSEK .PP A .B : és a .B ; tömbműveteket általában csak a .IR bc hagyományos implementációi használják. (A GNU .I bc ezt tartalmazza, nem szükséges a futásához a \*(dc. ) .SH HIBÁK .PP A hibákat e-mail-ben jelentsd a .BR bug-gnu-utils@prep.ai.mit.edu címen. A levél tárgyában valahol legyen benne a ``dc'' szó. .SH MAGYAR FORDÍTÁS Tevesz Tamás