dc(1) General Commands Manual dc(1) NUME dc - un calculator cu precizie arbitrara (la alegere) SINOPSIS dc [-V] [--version] [-h] [--help] [-e expresie-script] [--expression=expresie-script] [-f fiier-script] [--file=fiier-script] [fiier ...] DESCRIERE dc este un calculator de birou cu notaie poloneza inversa (postfixata), care accepta aritmetica de precizie nelimitata. De asemenea, va permite sa definii i sa apelai macrocomenzi. In mod normal, dc citete de la intrarea standard; daca i se dau argumente de comanda, acestea sunt nume de fiiere, iar dc citete i executa coninutul fiierelor inainte de a citi de la intrarea standard. Toate ieirile normale se trimit la ieirea standard; toate ieirile de eroare se trimit la ieirea de eroare standard. Un calculator cu notaie inversa (postfixata) stocheaza numerele intr-o stiva. Introducerea unui numar il impinge pe stiva. Operaiile aritmetice scot argumentele din stiva i imping rezultatele. Pentru a introduce un numar in dc, tastai cifrele de la 0 la 9 i de la A la F pentru a reprezenta valorile de la zero la cincisprezece (indiferent de baza de intrare curenta), incluzand opional un singur punct zecimal. Notaia exponeniala nu este acceptata. Pentru a introduce un numar negativ, incepei numarul cu ,,_". ,,-" nu poate fi utilizat in acest scop, deoarece este un operator binar pentru scadere in schimb. Pentru a introduce doua numere succesive, separai-le cu spaii sau linii noi. Acestea nu au nicio semnificaie drept comenzi. OPIUNI dc poate fi apelat cu urmatoarele opiuni de linie de comanda: -V --version Afieaza versiunea de dc care este rulata i o notificare privind drepturile de autor, apoi iese. -h --help Afieaza un mesaj de utilizare care rezuma pe scurt aceste opiuni din linia de comanda i adresa de raportare a erorilor, apoi iese. -e script --expression=script Adauga comenzile din script la setul de comenzi care urmeaza sa fie executate in timpul procesarii datelor de intrare. -f fiier-script --file=fiier-script Adauga comenzile coninute in fiierul fiier-script la setul de comenzi care urmeaza sa fie executate in timpul procesarii datelor de intrare. --max-recursion=adancimea Limiteaza recursivitatea la o adancime de cel mult adancimea; (utila mai ales pentru depanare). Daca dupa procesarea celor de mai sus raman parametri de linie de comanda, acetia sunt interpretai ca fiind numele fiierelor de intrare care urmeaza sa fie procesate. Un nume de fiier - se refera la fluxul de intrare standard. Intrarea standard va fi procesata daca nu sunt specificate fiiere de script sau expresii. Comenzi de imprimare p Imprima valoarea din partea de sus a stivei, fara a modifica stiva. Dupa valoare se imprima o linie noua. n Imprima valoarea din partea de sus a stivei, o inlatura i nu imprima o linie noua dupa. P Afieaza valoarea din partea de sus a stivei. Daca este un ir de caractere, acesta este pur i simplu afiat fara o linie noua la sfarit. In caz contrar, este un numar, iar partea intreaga a valorii sale absolute este imprimata sub forma unui flux de octei ,,base (UCHAR_MAX+1)". Presupunand ca (UCHAR_MAX+1) este 256 (aa cum este pe majoritatea mainilor cu octei pe 8 bii), secvena KSK0k1/_1Ss [ls*]Sxd0>x [256~Ssd0qaPlxx] dsxxsx0sqLqsxLxLxLK+k ar putea, de asemenea, indeplini aceasta funcie; (o mare parte din complexitatea codului nativ-dc de mai sus se datoreaza ~ calcularii caracterelor in sens invers i dorinei de a se asigura ca toate registrele ajung inapoi in starea lor iniiala). f Imprima intregul coninut al stivei fara a modifica nimic. Aceasta este o comanda buna de utilizat daca va pierdei sau dorii sa va dai seama care a fost efectul unei comenzi. Aritmetica + Extrage doua valori din stiva, le aduna i afieaza rezultatul. Precizia rezultatului este determinata doar de valorile argumentelor i este suficienta pentru a fi exacta. - Extrage doua valori, scade prima valoare extrasa din cea de-a doua valoare extrasa i afieaza rezultatul. * Extrage doua valori, le inmulete i afieaza rezultatul. Numarul de cifre de fracie din rezultat depinde de valoarea curenta a preciziei i de numarul de cifre de fracie din cele doua argumente. / Extrage doua valori, imparte a doua valoare extrasa la prima valoare extrasa i afieaza rezultatul. Numarul de cifre ale fraciei este specificat de valoarea preciziei. % Extrage doua valori, calculeaza restul imparirii pe care ar trebui sa o faca comanda / i il afieaza. Valoarea calculata este aceeai cu cea calculata de secvena Sd dld/ Ld*- . ~ Extrage doua valori, imparte a doua valoare extrasa din prima valoare extrasa. Catul este afiat mai intai, iar restul este afiat in continuare. Numarul de cifre ale fraciei utilizate in imparire este specificat de valoarea de precizie; (secvena SdSn lnld/ LnLd% ar putea, de asemenea, indeplini aceasta funcie, cu o verificare a erorilor un pic diferita). ^ Extrage doua valori i le multiplica prin exponeni, folosind prima valoare extrasa ca exponent i a doua ca baza. Partea de fracie a exponentului este ignorata. Valoarea de precizie specifica numarul de cifre de fracie din rezultat. | Extrage trei valori i calculeaza o multiplicare exponeniala modulara.. Prima valoare extrasa este utilizata ca modul de reducere; aceasta valoare trebuie sa fie un numar diferit de zero i trebuie sa fie un numar intreg. A doua valoare extrasa este utilizata ca exponent; aceasta valoare trebuie sa fie un numar nenegativ, iar orice parte fracionara a acestui exponent va fi ignorata. A treia valoare extrasa este baza care va fi multiplicata exponenial; aceasta trebuie sa fie un numar intreg. Pentru numere intregi mici, acest lucru este ca i secvena Sm^Lm%, dar, spre deosebire de ^, aceasta comanda va funciona cu exponeni oricat de mari. v Extrage o valoare, calculeaza radacina patrata a acesteia i o afieaza. Maximul dintre valoarea de precizie i precizia argumentului este utilizat pentru a determina numarul de cifre de fracie din rezultat. Majoritatea operaiilor aritmetice sunt afectate de ,,valoarea de precizie", pe care o putei stabili cu ajutorul comenzii k. Valoarea implicita a preciziei este zero, ceea ce inseamna ca toate operaiile aritmetice, cu excepia adunarii i a scaderii, produc rezultate intregi. Controlul stivei c terge stiva, lasand-o goala. d Duplica valoarea din partea de sus a stivei, introducand o alta copie a acesteia. Astfel, ,,4d*p" calculeaza 4 la patrat i afieaza rezultatul. r Inverseaza ordinea (interschimba) primele doua valori din stiva; (acest lucru poate fi realizat i cu secvena SaSbLaLb.) R Extrage partea de sus a stivei sub forma unui numar intreg n. Rotete ciclic elementele din partea de sus n a stivei actualizate. Daca n este pozitiv, atunci direcia de rotaie va face ca elementul cel mai de sus sa fie al doilea din varf; daca n este negativ, atunci rotaia va face ca elementul cel mai de sus sa fie al n-lea element din varf. Daca adancimea stivei este mai mica decat n, atunci intreaga stiva este rotita (in direcia corespunzatoare), fara a fi raportata nicio eroare. Registre dc ofera cel puin 256 de registre de memorie, fiecare fiind denumit cu un singur caracter. Putei stoca un numar sau un ir de caractere intr-un registru i il putei prelua ulterior. sr Extrage valoarea din partea de sus a stivei i o stocheaza in registrul r. lr Copiaza valoarea din registrul r i o introduce in stiva. Valoarea 0 este recuperata daca registrul este neiniializat. Acest lucru nu modifica coninutul lui r. Fiecare registru conine, de asemenea, propria sa stiva. Valoarea curenta a registrului reprezinta partea superioara a stivei registrului. Sr Extrage valoarea din partea de sus a stivei (principale) i o introduce in stiva registrului r. Valoarea anterioara a registrului devine inaccesibila. Lr Extrage valoarea din partea de sus a stivei registrului r i o introduce in stiva principala. Valoarea anterioara din stiva registrului r, daca exista, este acum accesibila prin intermediul comenzii lr. Parametrii dc are trei parametri care ii controleaza funcionarea: precizia, baza de intrare i baza de ieire. Precizia specifica numarul de cifre de fracie care trebuie pastrate in rezultatul majoritaii operaiilor aritmetice. Baza de intrare controleaza interpretarea numerelor introduse; toate numerele introduse utilizeaza aceasta baza. Baza de ieire este utilizata pentru imprimarea numerelor. Bazele de intrare i de ieire sunt parametri separai; le putei face inegale, ceea ce poate fi util sau confuz. Baza de intrare trebuie sa fie cuprinsa intre 2 i 16 inclusiv. Baza de ieire trebuie sa fie cel puin 2. Precizia trebuie sa fie zero sau mai mare. Precizia se masoara intotdeauna in cifre zecimale, indiferent de baza curenta de intrare sau de ieire. i Extrage valoarea din partea de sus a stivei i o utilizeaza pentru a stabili baza de intrare. o Extrage valoarea din partea de sus a stivei i o utilizeaza pentru a stabili baza de ieire. k Extrage valoarea din partea de sus a stivei i o utilizeaza pentru a stabili precizia. I Introduce in stiva baza de intrare curenta. O Introduce in stiva baza de ieire curenta. K Introduce precizia curenta in stiva. iruri dc are o capacitate limitata de a opera cu iruri de caractere, precum i cu numere; singurele lucruri pe care le putei face cu irurile de caractere sunt imprimarea lor i executarea lor ca macro-uri (ceea ce inseamna ca coninutul irului de caractere este procesat ca fiind comenzi dc)). Toate registrele i stiva pot conine iruri de caractere, iar dc tie intotdeauna daca orice obiect dat este un ir de caractere sau un numar. Unele comenzi, cum ar fi operaiile aritmetice, cer numere ca argumente i afieaza erori in cazul in care primesc iruri de caractere. Alte comenzi pot accepta fie un numar, fie un ir de caractere; de exemplu, comanda p poate accepta oricare dintre acestea i afieaza obiectul in funcie de tipul sau. [caractere] Creeaza un ir de caractere care conine caractere (cuprins intre caracterele pereche [ i ]) i il introduce in stiva. De exemplu, [foo]P imprima caracterele foo (fara linie noua). a Partea de sus a stivei este extrasa. Daca a fost un numar, atunci octetul de rang inferior al acestui numar este convertit intr-un ir de caractere i introdus in stiva. In caz contrar, partea de sus a stivei era un ir de caractere, iar primul caracter al acelui ir este introdus inapoi. Nota: aceasta comanda este depreciata; consultai dc.info pentru detalii. Daca utilizai comanda a i credei ca ar trebui sa ramana o parte din GNU dc, depunei un raport de eroare prin care solicitai pastrarea ei. x Scoate o valoare din stiva i o executa ca o macrocomanda. In mod normal, ar trebui sa fie un ir de caractere; daca este un numar, acesta este pur i simplu reintrodus in stiva. De exemplu, [1p]x executa macrocomanda 1p care introduce 1 in stiva i imprima 1 pe o linie separata. Macrocomenzile sunt cel mai adesea stocate in registre; [1p]sa stocheaza o macrocomanda pentru a imprima 1 in registrul a, iar lax invoca aceasta macrocomanda. >r Extrage doua valori din stiva i le compara, presupunand ca sunt numere, executand coninutul registrului r ca o macrocomanda daca valoarea iniiala din partea de sus a stivei este mai mare. Astfel, 1 2>a va invoca coninutul registrului a, iar 2 1>a nu o va face. !>r Similar, dar invoca macrocomanda in cazul in care numarul iniial din partea de sus a stivei nu este mai mare decat (mai mic sau egal cu) cel ce a fost al doilea in partea de sus a stivei. ial din partea de sus a stivei este mai mic. !ial din partea de sus al stivei nu este mai mic decat (mai mare sau egal cu) cel ce a fost al doilea in partea de sus a stivei. =r Similar, dar invoca macrocomanda daca cele doua numere extrase sunt egale. !=r Similar, dar invoca macrocomanda daca cele doua numere extrase nu sunt egale. ? Citete o linie din terminal i o executa. Aceasta comanda permite unei macrocomenzi sa solicite informaii de la utilizator. q iese dintr-o macrocomanda i, de asemenea, din macrocomanda care a invocat -o. Daca este apelata de la nivelul superior sau de la o macrocomanda care a fost apelata direct de la nivelul superior, comanda q va determina dc sa iasa. Q Extrage o valoare din stiva i o utilizeaza ca numar de niveluri de execuie a macrocomenzii care trebuie sa fie abandonate. Astfel, 3Q iese de pe trei niveluri. Comanda Q nu va determina niciodata ieirea lui dc. Consultare de stare Z Extrage o valoare din stiva, calculeaza numarul de cifre zecimale pe care le are (sau numarul de caractere, daca este un ir de caractere) i introduce acest numar. Numaratoarea cifrelor pentru un numar nu include zerourile de inceput, chiar daca acestea apar in dreapta punctului radacina (virgulei). X Extrage o valoare din stiva, calculeaza numarul de cifre de fracie pe care le are i introduce acest numar. In cazul unui ir de caractere, valoarea introdusa este 0. z Introduce adancimea curenta a stivei: numarul de obiecte de pe stiva inainte de executarea comenzii z. Diverse ! Va rula restul liniei ca o comanda de sistem. Reinei ca analizarea comenzilor !<, != i !> are prioritate, astfel incat, daca dorii sa executai o comanda care incepe cu <, = sau >, va trebui sa adaugai un spaiu dupa !. # Va interpreta restul liniei ca fiind un comentariu. :r Va extrage primele doua valori din stiva. A doua valoare veche din varf va fi stocata in matricea r, indexata cu vechea valoare din varful stivei. ;r Extrage partea de sus a stivei i o utilizeaza ca index in matricea r. Valoarea selectata este apoi introdusa in stiva. Reinei ca fiecare instana stivuita a unui registru consta atat din valoarea sa scalara simpla (fie ea un numar sau un ir de caractere), cat i dintr- o matrice cu acelai nume. Astfel, 1 0:x 0Sx 2 0:x Lx 0;xp va afia 1, deoarece 2 a fost stocat la indexul 0 intr-o instana a matricei x, care a fost ulterior scoasa, expunand din nou instana lui x care deine un 1 la indexul 0. VARIABILE DE MEDIU DC_LINE_LENGTH Determina coloana la care este divizata ieirea numerica; valoarea implicita este 70. Daca este stabilita la ,,0", atunci divizarea liniilor este dezactivata i fiecare linie de ieire va fi atat de lunga cat este necesar pentru a reprezenta numarul. DC_PROMPT Definete un prompt de utilizat atunci cand dc ateapta o intrare interactiva la intrarea standard. ERORI Trimitei rapoartele de erori prin e-mail la bug-dc@gnu.org. CONSULTAI I O documentaie mai completa este disponibila in dc.info, care poate fi disponibila (in funcie de instalarea locala) prin invocarea <>. TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Proiectul GNU 5 ianuarie 2025 dc(1)