dc(1) General Commands Manual dc(1) NAZWA dc - kalkulator dowolnej precyzji SKLADNIA dc [-V] [--version] [-h] [--help] [-e wyrazenie-skryptu] [--expression=wyrazenie-skryptu] [-f wyrazenie-pliku] [--file=wyrazenie-pliku] [plik ...] OPIS dc jest kalkulatorem pracujacym w odwrotnej notacji polskiej, obslugujacym arytmetyke nieograniczonej precyzji. Pozwala rowniez na definiowanie i wywolywanie makr. Zwykle dc czyta ze standardowego wejscia. Jesli uzyto argumentow polecenia dc, to sa one traktowane jak nazwy plikow. Zawartosc tych plikow jest odczytywana i wykonywana przez dc przed odczytem standardowego wejscia. Wszystkie zwykle wyniki kierowane sa na standardowe wyjscie; wszystkie komunikaty o bledach kierowane sa na standardowe wyjscie bledow. Kalkulator odwrotnej notacji polskiej przechowuje liczby na stosie. Wprowadzenie liczby odklada ja na stos. Operacje arytmetyczne pobieraja argumenty ze stosu i odkladaja na nim wyniki. W celu wprowadzenia liczby do dc wpisujemy cyfry od 0 do 9 i od A do F, reprezentujace wartosci od zera do pietnastu (niezaleznie od wejsciowego systemu liczbowego), z opcjonalna kropka dziesietna. Nie jest rozpoznawana notacja wykladnicza. Liczbe ujemna poprzedzamy znakiem podkreslenia ,,_". Nie mozna posluzyc sie w tym celu znakiem ,,-" (minus), gdyz jest to dwuargumentowy operator odejmowania. Dwie kolejne liczby wprowadzamy oddzielajac je spacjami lub znakami nowej linii. Nie maja one znaczenia jako polecenia. OPCJE dc mozna wywolac z nastepujacymi opcjami wiersza polecen: -V --version Wypisuje numer wersji uruchomionego dc i informacje o prawach autorskich, a nastepnie konczy dzialanie. -h --help Wypisuje komunikat o sposobie wywolania, podajac w skrocie opcje wiersza polecen i adres, na ktory nalezy zglaszac bledy, a nastepnie konczy dzialanie. -e skrypt --expression=skrypt Dodaje polecenia ze skryptu do zestawu polecen, jakie maja byc wykonane podczas przetwarzania wejscia. -f plik-skryptu --file=plik-skryptu Dodaje polecenia zawarte w pliku-skryptu do zestawu polecen, jakie maja byc wykonane podczas przetwarzania wejscia. --max-recursion=glebokosc Ogranicza rekurencje do co najwyzej glebokosci (przydatne glownie do debugowania). Jezeli po przetworzeniu powyzszych opcji pozostana jeszcze jakies parametry wiersza polecen, to sa one interpretowane jako nazwy plikow wejsciowych, ktore nalezy wykonac. Nazwa - odnosi sie do standardowego strumienia wejsciowego. Jesli nie podano plikow skryptow ani zadnych wyrazen, to polecenia do wykonania beda czytane ze standardowego wejscia. Polecenia wypisywania p Wypisuje wartosc z wierzcholka stosu, bez jego zmiany. Po wartosci wypisywany jest znak nowej linii. n Wypisuje wartosc z wierzcholka stosu, zdejmujac ja rownoczesnie ze stosu. Nie wypisuje po niej znaku nowej linii. P Zdejmuje wartosc z wierzcholka stosu. Jesli jest to lancuch, to jest on po prostu wypisywany bez koncowego znaku nowej linii. W przeciwnym razie jest to liczba, a czesc calkowita jej wartosci bezwzglednej wypisywana jest jako strumien bajtow ,,o podstawie (UCHAR_MAX+1)". Zakladajac, ze (UCHAR_MAX+1) wynosi 256 (jak to jest w wiekszosci maszyn o 8-bitowych bajtach), funkcje te realizuje takze sekwencja KSK0k1/_1Ss [ls*]Sxd0>x [256~Ssd0qaPlxx] dsxxsx0sqLqsxLxLK+k (wiekszosc stopnia skomplikowania tego kodu, natywnego dla dc, wynika z odwrotnego obliczania znakow przez ~ oraz checi upewnienia sie, ze wszystkie rejestry znajda sie na koniec z powrotem w swoich pierwotnych stanach). f Wypisuje cala zawartosc stosu nie zmieniajac niczego. Jest polecenie przydatne w sytuacji, gdy sie pogubilismy lub chcemy sie zorientowac, jaki byl efekt pewnych polecen. Arytmetyka + Zdejmuje ze stosu dwie wartosci, dodaje je i odklada wynik na stos. Dokladnosc wyniku zalezy wylacznie od wartosci argumentow i jest wystarczajaco scisla. - Zdejmuje ze stosu dwie wartosci, odejmuje pierwsza zdjeta od drugiej i sklada wynik ponownie na stos. * Zdejmuje ze stosu dwie wartosci, mnozy je i odklada wynik na stos. Liczba cyfr ulamkowych zalezy od aktualnej wartosc dokladnosci i liczby cyfr ulamkowych w obu argumentach. / Zdejmuje ze stosu dwie wartosci, dzieli druga zdjeta przez pierwsza i odklada wynik ponownie na stos. Liczba cyfr ulamkowych wyniku okreslana jest przez wartosc dokladnosci. % Zdejmuje ze stosu dwie wartosci, oblicza reszte z dzielenia, jakie byloby wykonane przez / i odklada wynik na stos. Obliczona wartosc jest ta sama, co otrzymana z sekwencji Sd dld/ Ld*-. ~ Zdejmuje ze stosu dwie wartosci, dzieli druga zdjeta przez pierwsza. Odklada na stos iloraz, a nastepnie reszte z dzielenia. Dzielenie wykonywane jest z liczba cyfr ulamkowych okreslona wartoscia dokladnosci. (Funkcje te moze tez spelniac sekwencja SdSn lnld/ LnLd%, z nieco odmiennym sprawdzaniem bledow.) ^ Zdejmuje ze stosu dwie wartosci i wykonuje potegowanie, poslugujac sie pierwsza zdjeta jako wykladnikiem, zas druga jako podstawa potegowania. Ulamkowa czesc wykladnika jest ignorowana. Wartosc dokladnosci okresla liczbe cyfr ulamkowych wyniku. | Zdejmuje ze stosu trzy wartosci i oblicza potegowanie modulo [od tlum: modular exponentiation == (a^b) mod c]. Pierwsza ze zdjetych wartosci uzywana jest jako dzielnik operacji (reduction modulus). Wartosc ta musi byc niezerowa i powinna byc liczba calkowita. Druga uzywana jest jako wykladnik i musi byc liczba nieujemna, a jej czesc ulamkowa zostanie zignorowana. Trzecia z pobranych ze stosu wartosci okresla podstawe potegowania, powinna ona byc calkowita. Dla malych liczb jest to zblizone do sekwencji Sm^Lm%, ale, w odroznieniu od ^, polecenie to dziala z dowolnie duzymi wykladnikami. v Zdejmuje ze stosu pojedyncza wartosc, oblicza jej pierwiastek kwadratowy i odklada go na stos. Maksymalna wartosc dokladnosci i dokladnosci argumentu sluzy do okreslenia liczby cyfr ulamkowych wyniku. Na wiekszosc operacji arytmetycznych wplywa ,,wartosc dokladnosci", ktora ustala sie za pomoca polecenia k. Domyslna wartoscia dokladnosci jest zero, co oznacza, ze wszystkie dzialania arytmetyczne z wyjatkiem dodawania i odejmowania daja wyniki calkowite. Kontrola stosu c Czysci stos, powoduje, ze bedzie on pusty. d Powiela wartosc na wierzcholku stosu, odkladajac na stos jej kopie. Zatem ,,4d*p" oblicza 4 podniesione do kwadratu i wypisuje wynik. r Zamienia miejscami dwie gorne wartosci na stosie (mozna to uczynic rowniez sekwencja SaSbLaLb). R Zdejmuje z wierzcholka stosu liczbe n. Cyklicznie rotuje n elementow z wierzcholka stosu na zaktualizowany stos. Jesli n jest dodatnie, kierunek rotacji spowoduje, ze najwyzszy element stosu stanie sie drugim elementem, jesli n jest ujemne, to kierunek rotacji spowoduje, ze najwyzszym elementem stosu stanie sie n-ty element liczac od gory stosu. Jesli stos ma glebokosc mniejsza niz n, to caly stos jest rotowany (w odpowiednim kierunku) bez zglaszania bledu. Rejestry dc udostepnia co najmniej 256 rejestrow pamieciowych, kazdy nazwany pojedynczym znakiem. W rejestrze mozna przechowac liczbe lub lancuch znakowy i pozniej je odtworzyc. sr Zdejmuje wartosc z wierzcholka stosu i zapisuje w rejestrze r. lr Kopiuje wartosc zawarta w rejestrze r i odklada ja na stos. Jesli rejestr jest niezainicjowany, pobierana jest wartosc 0. Nie zmienia to zawartosci r. Kazdy z rejestrow posiada rowniez swoj wlasny stos. Biezaca wartoscia rejestru jest wierzcholek stosu rejestru. Sr Zdejmuje wartosc z wierzcholka stosu (glownego) i odklada ja na stosie rejestru r. Poprzednia wartosc rejestru staje sie niedostepna. Lr Zdejmuje wartosc z wierzcholka stosu rejestru r i odklada ja na glownym stosie. Poprzednia wartosc stosu rejestru r, jesli byla takowa, jest teraz dostepna poprzez polecenie lr. Parametry dc posiada trzy parametry kontrolujace jego prace: dokladnosc, podstawe systemu pozycyjnego wejscia i podstawe wyjscia. Dokladnosc okresla liczbe cyfr dziesietnych, jaka bedzie zachowana w wyniku wiekszosci operacji arytmetycznych. Podstawa wejscia odpowiada za interpretacje wprowadzanych liczb; wszystkie wprowadzane liczby uzywaja tej podstawy. Podstawa wyjscia uzywana jest do wypisywania liczb. Podstawa wejscia i wyjscia sa odrebnymi parametrami; mozna spowodowac, ze beda rozne, co moze byc uzyteczne lub mylace. Podstawa wejscia musi byc liczba z zakresu od 2 do 16. Podstawa wyjscia musi wynosic co najmniej 2. Dokladnosc musi byc rowna zeru lub wieksza. Dokladnosc zawsze okreslana jest jako liczba cyfr dziesietnych, niezaleznie od biezacej podstawy wejscia czy wyjscia. i Zdejmuje wartosc z wierzcholka stosu i posluguje sie nia do ustawienia podstawy wejscia. o Zdejmuje wartosc z wierzcholka stosu i posluguje sie nia do ustawienia podstawy wyjscia. k Zdejmuje wartosc z wierzcholka stosu i posluguje sie nia do ustawienia dokladnosci. I Odklada biezaca wartosc podstawy wejscia na stosie. O Odklada biezaca wartosc podstawy wyjscia na stosie. K Odklada biezaca dokladnosc na stosie. Lancuchy znakowe dc oprocz pracy z liczbami moze tez dzialac, w ograniczonym zakresie, na lancuchach znakowych; lancuchy mozna jedynie wypisywac i wykonywac jako makra (co oznacza, ze zawartosc lancucha przetwarzana jest jako polecenia dc. Stos i wszystkie rejestry moga przechowywac lancuchy, a dc zawsze wie, czy dany obiekt jest lancuchem czy liczba. Niektore z polecen, jak np. operacje arytmetyczne, wymagaja liczb jako swych argumentow i wyswietlaja bledy, jesli dostarczono im lancuch. Inne akceptuja zarowno liczby, jak i lancuchy znakowe. Na przyklad, polecenie p akceptuje oba rodzaje argumentow i wypisuje obiekt stosownie do jego typu. [znaki] Tworzy lancuch zawierajacy znaki (zawarte pomiedzy nawiasami kwadratowymi [ i ]) i odklada go na stos. Na przyklad, [foo]P wypisuje znaki foo (bez zakonczenia znakiem nowej linii). a Zdejmowany jest wierzcholek stosu. Jezeli jest to liczba, to mlodszy bajt (low-order byte) tej liczby zamieniany jest na lancuch i odkladany na stos. W przeciwnym przypadku, wierzcholek stosu byl lancuchem, a z powrotem na stos odkladany jest pierwszy znak tego lancucha. Uwaga: to polecenie jest wycofywane, zob. dc.info. Uzytkownikow polecenia a uwazajacych, ze powinno ono pozostac czescia GNU dc, prosimy o zgloszenie bledu z prosba o jego pozostawienie. x Zdejmuje wartosc ze stosu i wykonuje ja jako makro. Zwykle powinien to byc lancuch znakowy. Jezeli jest to liczba, to zostanie po prostu zwrocona na stos. Na przyklad, [1p]x wykonuje makro 1p, ktore odklada 1 na stosie i wypisuje 1 w osobnym wierszu. Makra sa najczesciej przechowywane w rejestrach: [1p]sa skladuje makro do wypisania 1 w rejestrze a, zas lax wywoluje to makro. >r Zdejmuje dwie wartosci ze stosu i porownuje je, zakladajac, ze sa one liczbami, wykonujac zawartosc rejestru r jako makro, jesli pierwotny wierzcholek stosu jest wiekszy. Tak wiec, 1 2>a wywola zawartosc rejestru a zas 2 1>a nie wywola. !>r Podobnie, ale wywoluje makro jesli pierwotny wierzcholek stosu nie jest mniejszy (jest wiekszy badz rowny) od liczby wystepujacej pod nim. ma pierwszenstwo, dlatego jesli chce sie wykonac polecenie zaczynajace sie od <, = lub >, konieczne jest dodanie spacji po znaku !. # Interpretuje reszte wiersza jako komentarz. :r Zdejmuje ze stosu dwie gorne wartosci. Wartosc, ktora byla druga od gory stosu zostanie zachowana w tablicy r, indeksowanej wartoscia bylego wierzcholka stosu. ;r Zdejmuje wierzcholek stosu i posluguje sie nim jako indeksem tablicy r. Wybrana w ten sposob wartosc jest nastepnie odkladana na stos. Prosze zauwazyc, ze kazdy rejestr ze stosu sklada sie z prostej wartosci skalarnej (liczby lub lancucha) oraz tablicy o tej samej nazwie. Z tego powodu 1 0:x 0Sx 2 0:x Lx 0;xp wypisze 1, poniewaz 2 bylo zachowane pod indeksem 0 w rejestrze tablicy x, ktory nastepnie zostal zdjety, odslaniajac rejestr x przechowujacy 1 pod indeksem 0. ZMIENNE SRODOWISKOWE DC_LINE_LENGTH Okresla kolumne, na ktorej przelamywane jest wyjscie numeryczne; domyslna wartosc to 70. Przy ustawieniu na ,,0", przelamywanie wierszy jest wylaczane, a kazdy wiersz wyjsciowy bedzie tak dlugi, jak jest to konieczne do odwzorowania liczby. DC_PROMPT Ustawia znak zachety uzywany, gdy dc spodziewa sie wejscia na standardowym wejsciu. USTERKI Raporty o bledach mozna wysylac do ZOBACZ TAKZE Bardziej kompletna dokumentacja jest dostepna w dc.info, ktora (w zaleznosci od biezacej instalacji) moze byc dostepna po wywolaniu ,,info dc". TLUMACZENIE Tlumaczenie niniejszej strony podrecznika: Wojtek Kotwica i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Projekt GNU 5 stycznia 2025 r. dc(1)