SÖZDİZİMİ
dc [-cChiPRvVx] [--version] [--help] [--digit-clamp] [--no-digit-clamp] [--interactive]
[--no-prompt] [--no-read-prompt] [--extended-register] [-e expr] [--expression=expr...] [-f
file...] [--file=file...] [file...] [-I ibase] [--ibase=ibase] [-O obase] [--obase=obase] [-S
scale] [--scale=scale] [-E seed] [--seed=seed]
AÇIKLAMA
dc(1), keyfi duyarlıklı bir hesap makinesidir. Sayıları ve hesaplama sonuçlarını depolamak için bir yığın (ters Lehçe gösterimi - reverse Polish notation) kullanır. Aritmetik işlemler argümanları yığından çeker ve sonuçları yığına iter.
Komut satırında hiçbir dosya belirtilmezse, dc(1) standart girdiden (stdin) okuma yapar (STDIN bölümüne bakın). Aksi takdirde, bu dosyalar işlenir ve ardından dc(1) sonlanır.
Eğer bir kullanıcı standart bir ortam kurmak isterse, DC_ENV_ARGS değişkenini kullanabilir (ORTAM DEĞİŞKENLERİ bölümüne bakın). Örneğin, eğer bir kullanıcı basamak duyarlılığının (scale) her zaman 10 olarak ayarlanmasını istiyorsa, DC_ENV_ARGS değişkenini -e 10k olarak ayarlayabilir ve bu durumda dc(1) her zaman 10 basamak duyarlılığıyla başlar.
SEÇENEKLER
Aşağıda dc(1) tarafından kabul edilen seçenekler yer almaktadır:
-C, --no-digit-clamp: Sayılar ayrıştırılırken, mevcutibasedeğerinden büyük veya ona eşit basamakların kırpılmasını (clamping) devre dışı bırakır.Bu, bir basamağın sayıya eklediği değerin her zaman o basamağın kendi değerinin, en önemsiz basamaktan 0 ile başlayan basamak konumunun
ibaseüssü ile çarpılmasıyla elde edilen değer olacağı anlamına gelir.Eğer bu seçenek ve/veya
-cya da--digit-clampseçenekleri birden fazla kez verilirse, en son verilen seçenek geçerli olur.Bu seçenek,
DC_DIGIT_CLAMPortam değişkenini (ORTAM DEĞİŞKENLERİ bölümüne bakın) ve varsayılan ayarı (bu ayar-hveya--helpseçenekleriyle sorgulanabilir) geçersiz kılar.Bu, taşınabilir olmayan bir uzantıdır.
-c, --digit-clamp: Sayılar ayrıştırılırken, mevcutibasedeğerinden büyük veya ona eşit basamakların kırpılmasını (clamping) etkinleştirir.Bu,
ibasedeğerinden büyük veya ona eşit olan bir basamaktan sayıya eklenen değerin,ibasedeğerinin 1 eksiğinin, en önemsiz basamaktan 0 ile başlayan basamak konumununibaseüssü ile çarpılmasıyla elde edilen değer olacağı anlamına gelir.Eğer bu seçenek ve/veya
-Cya da--no-digit-clampseçenekleri birden fazla kez verilirse, en son verilen seçenek geçerli olur.Bu seçenek,
DC_DIGIT_CLAMPortam değişkenini (ORTAM DEĞİŞKENLERİ bölümüne bakın) ve varsayılan ayarı (bu ayar-hveya--helpseçenekleriyle sorgulanabilir) geçersiz kılar.Bu, taşınabilir olmayan bir uzantıdır.
-E seed, --seed=seed:seeddeğerinin 10'luk tabanda olduğu varsayılarak, yerleşikseeddeğişkenini belirtilenseeddeğerine ayarlar.seedgeçerli bir sayı değilse bu ölümcül bir hatadır.Bu seçeneğin birden fazla örneği verilirse, en sonuncusu kullanılır.
Bu, taşınabilir olmayan bir uzantıdır.
-e expr, --expression=expr:exprifadesini değerlendirir. Birden fazla ifade verilirse, sırayla değerlendirilirler. Dosyalar da verilmişse (aşağıya bakın), ifadeler ve dosyalar veriliş sırasına göre değerlendirilir. Bu, bir dosyanın bir ifadeden önce verilmesi durumunda dosyanın önce okunup değerlendirileceği anlamına gelir.Eğer bu seçenek komut satırında verilmişse (yani ORTAM DEĞİŞKENLERİ bölümünde açıklanan
DC_ENV_ARGSiçinde değilse), tüm ifadeler ve dosyalar işlendikten sonradc(1)sonlanır; ancak komut satırında veyaDC_ENV_ARGSiçinde-fveya--fileseçeneğine en az bir kez-(stdin) argümanı verilmişse bu durum istisnadır. Bununla birlikte,-f-veya eşdeğeri verildikten sonra başka herhangi bir-e,--expression,-fveya--fileargümanı verilirse,dc(1)ölümcül bir hata verip sonlanacaktır.Bu, taşınabilir olmayan bir uzantıdır.
-f file, --file=file:filedosyasını okur ve sanki stdin üzerinden okunmuş gibi satır satır değerlendirir. İfadeler de verilmişse (yukarıya bakın), ifadeler veriliş sırasına göre değerlendirilir.Eğer bu seçenek komut satırında verilmişse (yani ORTAM DEĞİŞKENLERİ bölümünde açıklanan
DC_ENV_ARGSiçinde değilse), tüm ifadeler ve dosyalar işlendikten sonradc(1)sonlanır; ancak-fveya--fileseçeneğine en az bir kez-(stdin) argümanı verilmişse bu durum istisnadır. Bununla birlikte,-f-veya eşdeğeri verildikten sonra başka herhangi bir-e,--expression,-fveya--fileargümanı verilirse,dc(1)ölümcül bir hata verip sonlanacaktır.Bu, taşınabilir olmayan bir uzantıdır.
-h, --help: Bir kullanım mesajı yazdırır ve çıkış yapar.-I ibase, --ibase=ibase:ibasedeğerinin 10'luk tabanda olduğu varsayılarak, yerleşikibasedeğişkenini belirtilenibasedeğerine ayarlar.ibasegeçerli bir sayı değilse bu ölümcül bir hatadır.Bu seçeneğin birden fazla örneği verilirse, en sonuncusu kullanılır.
Bu, taşınabilir olmayan bir uzantıdır.
-i, --interactive: Etkileşimli modu zorunlu kılar. (ETKİLEŞİMLİ MOD bölümüne bakın.)Bu, taşınabilir olmayan bir uzantıdır.
-L, --no-line-length: Satır uzunluğu kontrolünü devre dışı bırakır ve sayıları ters eğik çizgiler (backslash) ve yeni satırlar (newline) olmadan yazdırır. Diğer bir deyişle, bu seçenekBC_LINE_LENGTHdeğerini 0 olarak ayarlar (ORTAM DEĞİŞKENLERİ bölümüne bakın).Bu, taşınabilir olmayan bir uzantıdır.
-O obase, --obase=obase:obasedeğerinin 10'luk tabanda olduğu varsayılarak, yerleşikobasedeğişkenini belirtilenobasedeğerine ayarlar.obasegeçerli bir sayı değilse bu ölümcül bir hatadır.Bu seçeneğin birden fazla örneği verilirse, en sonuncusu kullanılır.
Bu, taşınabilir olmayan bir uzantıdır.
-P, --no-prompt: TTY modunda istemi (prompt) devre dışı bırakır. (İstem yalnızca TTY modunda etkindir. TTY MODU bölümüne bakın.) Bu seçenek çoğunlukla istem istemeyen veyadc(1)içinde buna alışkın olmayan kullanıcılar içindir. Bu kullanıcıların çoğu bu seçeneğiDC_ENV_ARGSdeğişkenine eklemek isteyecektir.Bu seçenekler
DC_PROMPTveDC_TTY_MODEortam değişkenlerini geçersiz kılar (ORTAM DEĞİŞKENLERİ bölümüne bakın).Bu, taşınabilir olmayan bir uzantıdır.
-R, --no-read-prompt: TTY modunda okuma istemini (read prompt) devre dışı bırakır. (Okuma istemi yalnızca TTY modunda etkindir. TTY MODU bölümüne bakın.) Bu seçenek çoğunlukla bir okuma istemi istemeyen veyadc(1)içinde buna alışkın olmayan kullanıcılar içindir. Bu kullanıcıların çoğu bu seçeneğiBC_ENV_ARGSdeğişkenine eklemek isteyecektir (ORTAM DEĞİŞKENLERİ bölümüne bakın). Bu seçenek ayrıca kullanıcı girdisi isteyendc(1)betiklerinin shebang (hash bang) satırlarında da yararlıdır.Bu seçenek normal istemi devre dışı bırakmaz çünkü okuma istemi yalnızca
?komutu kullanıldığında kullanılır.Bu seçenekler
DC_PROMPTveDC_TTY_MODEortam değişkenlerini geçersiz kılar (ORTAM DEĞİŞKENLERİ bölümüne bakın), ancak bunu yalnızca okuma istemi için yapar.Bu, taşınabilir olmayan bir uzantıdır.
-S scale, --scale=scale:scaledeğerinin 10'luk tabanda olduğu varsayılarak, yerleşikscaledeğişkenini belirtilenscaledeğerine ayarlar.scalegeçerli bir sayı değilse bu ölümcül bir hatadır.Bu seçeneğin birden fazla örneği verilirse, en sonuncusu kullanılır.
Bu, taşınabilir olmayan bir uzantıdır.
-v, -V, --version: Sürüm bilgilerini (telif hakkı başlığı) yazdırır ve çıkış yapar.-x, --extended-register: Genişletilmiş kaydedici (register) modunu etkinleştirir. Daha fazla bilgi için KAYDEDİCİLER bölümünün Genişletilmiş Kaydedici Modu alt bölümüne bakın.Bu, taşınabilir olmayan bir uzantıdır.
-z, --leading-zeroes:dc(1)uygulamasının -1'den büyük, 1'den küçük ve 0'a eşit olmayan tüm sayıları başında sıfır olacak şekilde yazdırmasını sağlar.Bu, taşınabilir olmayan bir uzantıdır.
[!NOTE] Tüm uzun seçenekler taşınabilir olmayan uzantılardır.
STDIN
Komut satırında hiçbir dosya verilmemişse ve -f, --file, -e veya --expression seçenekleriyle hiçbir dosya veya ifade belirtilmemişse, dc(1) stdin'den okuma yapar.
Ancak bunun bir istisnası vardır.
İlk olarak, stdin satır satır değerlendirilir. Bunun tek istisnası, bir dizgenin bitirilmiş olması fakat sonlandırılmamış olmasıdır. Bu, kaçışlı köşeli parantezler hariç olmak üzere, dc(1) ayrıştırmadan ve çalıştırmadan önce tüm köşeli parantezlerin dengelenmiş olması gerektiği anlamına gelir.
STDOUT
Hata olmayan tüm çıktılar stdout'a yazılır. Ek olarak, eğer geçmiş (KOMUT SATIRI GEÇMİŞİ bölümüne bakın) ve istem (TTY MODU bölümüne bakın) etkinleştirilmişse, her ikisi de stdout'a gönderilir.
[!IMPORTANT] Diğer
dc(1)uygulamalarının aksine, budc(1)uygulaması stdout'a yazamadığı takdirde ölümcül bir hata verir (ÇIKIŞ DURUMU bölümüne bakın), bu nedenledc >&-komutunda olduğu gibi stdout kapalıysa hata vererek sonlanır. Bu, stdout bir dosyaya yönlendirildiğindedc(1)'in sorunları rapor edebilmesi için yapılmıştır.
Diğer dc(1) uygulamalarının davranışına bağımlı olan betikler varsa, bu betiklerin stdout'u /dev/null adresine yönlendirecek şekilde değiştirilmesi önerilir.
STDERR
Tüm hata çıktıları stderr'e yazılır.
[!IMPORTANT] Diğer
dc(1)uygulamalarının aksine, budc(1)uygulaması stderr'e yazamadığı takdirde ölümcül bir hata verir (ÇIKIŞ DURUMU bölümüne bakın), bu nedenledc 2>&-komutunda olduğu gibi stderr kapalıysa hata koduyla sonlanır. Bu, stderr bir dosyaya yönlendirildiğindedc(1)'in bir hata koduyla çıkabilmesi için yapılmıştır.
Diğer dc(1) uygulamalarının davranışına bağımlı olan betikler varsa, bu betiklerin stderr'i /dev/null adresine yönlendirecek şekilde değiştirilmesi önerilir.
SÖZDİZİMİ DETAYLARI
Girdi kaynak kodundaki her bir öğe, yani bir sayı (SAYILAR bölümüne bakın) veya bir komut (KOMUTLAR bölümüne bakın), sırayla işlenir ve çalıştırılır. Girdi, girildiği anda hemen işlenir.
ibase, sabit sayıların nasıl yorumlanacağını belirleyen bir kaydedicidir (KAYDEDİCİLER bölümüne bakın). Bu, "girdi" tabanıdır, yani girdi sayılarını yorumlamak için kullanılan sayı tabanıdır. ibase başlangıçta 10'dur. ibase için izin verilen maksimum değer 16'dır. ibase için izin verilen minimum değer 2'dir. ibase için izin verilen maksimum değer, dc(1) programlarında T komutu ile sorgulanabilir.
obase, sonuçların nasıl çıktı verileceğini belirleyen bir kaydedicidir (KAYDEDİCİLER bölümüne bakın). Bu, "çıktı" tabanıdır, yani sayıları çıktı olarak vermek için kullanılan sayı tabanıdır. obase başlangıçta 10'dur. obase için izin verilen maksimum değer DC_BASE_MAX olup, U komutu ile sorgulanabilir. obase için izin verilen minimum değer 0'dır. obase 0 ise değerler bilimsel gösterimde, 1 ise mühendislik gösteriminde çıktı olarak verilir. Aksi takdirde, değerler belirtilen tabanda çıktı olarak verilir.
Bilimsel ve mühendislik gösterimlerinde çıktı vermek taşınabilir olmayan uzantılardır.
Bir ifadenin basamak duyarlılığı (scale), ifadenin sonucundaki ondalık noktanın sağındaki basamak sayısıdır ve scale, işlemlerin hassasiyetini belirleyen (istisnalar hariç) bir kaydedicidir (KAYDEDİCİLER bölümüne bakın). scale başlangıçta 0'dır. scale negatif olamaz. scale için izin verilen maksimum değer dc(1) programlarında V komutu ile sorgulanabilir.
seed, sahte rastgele sayı üreteci için geçerli çekirdek değerini içeren bir kaydedicidir. Eğer seed'in geçerli değeri sorgulanır ve saklanırsa, daha sonra seed'e atanması durumunda sahte rastgele sayı üretecinin, seed değerinin ilk sorgulanmasından sonra üretilen aynı sahte rastgele sayı dizisini üretmesi garanti edilir.
seed'e atanan birden fazla değer aynı sahte rastgele sayı dizisini üretebilir. Benzer şekilde, seed'e bir değer atandığında, hemen ardından seed'in sorgulanmasının aynı değeri döndüreceği garanti edilmez. Ek olarak, seed değeri, 0 veya 1 değeri almayan her ’ veya “ komutu çağrısından sonra değişecektir. ’ komutu tarafından döndürülen maksimum tamsayı W komutu ile sorgulanabilir.
[!NOTE] Sahte rastgele sayı üreteci tarafından
’ve“komutlarıyla döndürülen değerlerin kriptografik olarak güvenli OLMADIĞI garanti edilir. Bu, çekirdekli (seeded) bir sahte rastgele sayı üreteci kullanmanın bir sonucudur. Ancak, aynı çekirdek değerleriyle yeniden üretilebilir olmaları garanti edilir. Bu,dc(1)'den gelen sahte rastgele değerlerin yalnızca yeniden üretilebilir bir sahte rastgele sayı akışının ELZEM olduğu durumlarda kullanılması gerektiği anlamına gelir. Diğer durumlarda, çekirdeksiz bir sahte rastgele sayı üreteci kullanın.
Sahte rastgele sayı üreteci, seed ve tüm ilgili işlemler taşınabilir olmayan uzantılardır.
Yorumlar
Yorumlar # karakterinden başlar ve bir sonraki yeni satıra kadar (yeni satır hariç) devam eder. Bu, taşınabilir olmayan bir uzantıdır.
SAYILAR
Sayılar; basamaklardan, F'ye kadar olan büyük harflerden ve taban noktası için en fazla 1 noktadan oluşan dizgelerdir. Sayılar en fazla DC_NUM_MAX basamağa sahip olabilir. Büyük harfler, 9 artı alfabedeki konumlarına eşittir (yani A, 10'a veya 9+1'e eşittir).
Eğer bir basamak veya harf mevcut ibase değeriyle mantıklı değilse (yani mevcut ibase değerine eşit veya ondan büyükse), bu durumdaki davranış -c/--digit-clamp veya -C/--no-digit-clamp seçeneklerinin varlığına (SEÇENEKLER bölümüne bakın), DC_DIGIT_CLAMP ortam değişkeninin varlığına ve ayarına (ORTAM DEĞİŞKENLERİ bölümüne bakın) ya da -h/--help seçeneğiyle sorgulanabilen varsayılan ayara bağlıdır.
Eğer kırpma kapalıysa, mevcut ibase değerine eşit veya ondan büyük olan basamaklar veya harfler değiştirilmez. Bunun yerine, verilen değerleri ibase'in uygun üssü ile çarpılır ve sayıya eklenir. Bu, 3'lük bir ibase değerinde, AB sayısının 3^1 * A + 3^0 * B değerine eşit olacağı anlamına gelir, bu da 3 * 10 + 11, yani 41'dir.
Eğer kırpma açıksa, mevcut ibase değerine eşit veya ondan büyük olan basamaklar veya harfler, ibase'in uygun üssü ile çarpılıp sayıya eklenmeden önce ibase içindeki en yüksek geçerli basamağın değerine ayarlanır. Bu, 3'lük bir ibase değerinde, AB sayısının 3^1 * 2 + 3^0 * 2 değerine eşit olacağı anlamına gelir, bu da 3 * 2 + 2, yani 8'dir.
Kırpma işleminin tek bir istisnası vardır: tek karakterli sayılar (yani tek başına A). Bu tür sayılar asla kırpılmaz ve her zaman mümkün olan en yüksek ibase değerinde alacakları değeri alırlar. Bu, tek başına A'nın her zaman ondalık 10'a ve tek başına Z'nin her zaman ondalık 35'e eşit olduğu anlamına gelir. Bu davranış bc(1) standardı tarafından zorunlu kılınmıştır (STANDARTLAR bölümüne bakın) ve mevcut ibase değerinden bağımsız olarak mevcut ibase değerini (i komutu ile) ayarlamak için kolay bir yol sağlamak amacıyla tasarlanmıştır.
Eğer kırpma açıksa ve bir karakterin kırpılmış değerine ihtiyaç duyuluyorsa, başında sıfır kullanın, yani A için 0A kullanın.
Ek olarak, dc(1) bilimsel gösterimdeki sayıları kabul eder. Bunlar <sayı>e<tamsayı> biçimindedir. Üs (e harfinden sonraki kısım) bir tamsayı olmalıdır. Bir örnek olarak 1.89237e9 sayısı, 1892370000 değerine eşittir. Negatif üslere de izin verilir, bu nedenle 4.2890e_3 sayısı 0.0042890 değerine eşittir.
[!WARNING] Bilimsel gösterimdeki hem sayı hem de üs mevcut
ibasedeğerine göre yorumlanır, ancak sayı mevcutibasedeğerinden bağımsız olarak yine de10^üsile çarpılır. Örneğin,ibase16 ise vedc(1)'eFFeAsayı dizgesi verilirse, sonuçtaki ondalık sayı2550000000000olacaktır;dc(1)'e10e_4sayı dizgesi verilirse sonuçtaki ondalık sayı0.0016olacaktır.
Girdiyi bilimsel gösterim olarak kabul etmek taşınabilir olmayan bir uzantıdır.
KOMUTLAR
Geçerli komutlar aşağıda kategoriler halinde listelenmiştir.
Yazdırma Komutları
Bu komutlar yazdırma işlemi için kullanılır.
Sayıları yazdırmak için hem bilimsel gösterimin hem de mühendislik gösteriminin kullanılabileceğini unutmayın. Bilimsel gösterim, 0o kullanılarak obase'e 0 atanmasıyla etkinleştirilir; mühendislik gösterimi ise 1o kullanılarak obase'e 1 atanmasıyla etkinleştirilir. Bunları devre dışı bırakmak için obase'e farklı bir değer atamanız yeterlidir.
Sayıları bilimsel gösterimde ve/veya mühendislik gösteriminde yazdırmak taşınabilir olmayan bir uzantıdır.
p: Yığının en üstündeki değeri (sayı veya dizge) yazdırır ve ardından yeni bir satır karakteri yazdırır. Bu komut yığını değiştirmez.n: Yığının en üstündeki değeri (sayı veya dizge) yazdırır ve yığından çıkarır.P: Yığından bir değer çıkarır.- Eğer değer bir sayı ise, kırpılır ve sonucun mutlak değeri sanki
obase256'ymış gibi yazdırılır ve her basamak 8 bitlik bir ASCII karakteri olarak yorumlanır, bu da onu bir bayt akışı haline verir. - Eğer değer bir dizge ise, sonunda yeni satır olmadan yazdırılır.
Bu, taşınabilir olmayan bir uzantıdır.
- Eğer değer bir sayı ise, kırpılır ve sonucun mutlak değeri sanki
f: Yığının tüm içeriğini, en yeniden en eskiye doğru sırayla, hiçbir şeyi değiştirmeden yazdırır. Kullanıcılar yığında kaybolduklarında bu komutu kullanmalıdır.
Aritmetik Komutları
Bunlar aritmetik işlemler için kullanılan komutlardır.
+: Yığının en üstündeki iki değer çıkarılır, toplanır ve sonuç yığına itilir. Sonucun basamak duyarlılığı (scale), her iki operanda ait maksimumscaledeğerine eşittir.-: Yığının en üstündeki iki değer çıkarılır, çıkarılır ve sonuç yığına itilir. Sonucun basamak duyarlılığı (scale), her iki operanda ait maksimumscaledeğerine eşittir.*: Yığının en üstündeki iki değer çıkarılır, çarpılır ve sonuç yığına itilir.ailk ifadeninscaledeğeri vebikinci ifadeninscaledeğeriyse, sonucunscaledeğerimin(a+b, max(scale, a, b))değerine eşittir; buradamin()vemax()işlevleri bariz değerleri döndürür./: Yığının en üstündeki iki değer çıkarılır, bölünür ve sonuç yığına itilir. Sonucun basamak duyarlılığı,scaledeğerine eşittir. Yığından çıkarılan ilk değer sıfırdan farklı olmalıdır.%: Yığının en üstündeki iki değer çıkarılır, kalan hesaplanır ve sonuç yığına itilir. Kalan hesaplama şuna eşdeğerdir:- Mevcut
scaledeğerine görea / bhesaplanır, - Adım 1'in sonucu kullanılarak
max(scale + scale(b), scale(a))basamak duyarlılığındaa - (a / b) * bhesaplanır.
Yığından çıkarılan ilk değer sıfırdan farklı olmalıdır.
- Mevcut
~: Yığının en üstündeki iki değer çıkarılır, bölünür ve kalan hesaplanır, sonuçlar (önce bölüm, sonra kalan) yığına itilir. Bu işlem,xveydeğerlerinin yalnızca bir kez değerlendirilmesi dışında,x y /vex y %işlemlerine eşdeğerdir. Bu, taşınabilir olmayan bir uzantıdır.^: Yığının en üstündeki iki değer çıkarılır, ikincisi birincinin üssüne yükseltilir ve sonuç yığına itilir. Sonucun basamak duyarlılığı,scaledeğerine eşittir. Yığından çıkarılan ilk değer bir tamsayı olmalıdır ve eğer bu değer negatifse, yığından çıkarılan ikinci değer sıfırdan farklı olmalıdır.v: Yığının en üstündeki değer çıkarılır, karekökü hesaplanır ve sonuç yığına itilir. Sonucun basamak duyarlılığı,scaledeğerine eşittir. Yığından çıkarılan değer negatif olmamalıdır._: Bu komut bir sayıdan hemen önce gelirse (yani boşluk veya başka bir komut yoksa), o sayı negatif bir sayı olarak girilir. Aksi takdirde, yığındaki en üstteki değer çıkarılır ve kopyalanır, kopya negatif yapılır ve yığına itilir. Bir sayı olmadan gerçekleşen bu davranış, taşınabilir olmayan bir uzantıdır.b: Yığının en üstündeki değer çıkarılır ve eğer sıfırsa, tekrar yığına itilir. Aksi takdirde, mutlak değeri yığına itilir. Bu, taşınabilir olmayan bir uzantıdır.|: Yığının en üstündeki üç değer çıkarılır, modüler üs alma hesaplanır ve sonuç yığına itilir. Çıkarılan ilk değer indirgeme modülü olarak kullanılır ve sıfırdan farklı bir tamsayı olmalıdır. Çıkarılan ikinci değer üs olarak kullanılır ve negatif olmayan bir tamsayı olmalıdır. Çıkarılan üçüncü değer tabandır ve bir tamsayı olmalıdır. Bu, taşınabilir olmayan bir uzantıdır.$: Yığının en üstündeki değer çıkarılır ve kopyalanır; kopya kırpılarak yığına itilir. Bu, taşınabilir olmayan bir uzantıdır.@: Yığının en üstündeki iki değer çıkarılır ve ikincisinin duyarlılığı, kırpma veya uzatma yoluyla birincisinin değerine ayarlanır. Yığından çıkarılan ilk değer negatif olmayan bir tamsayı olmalıdır. Bu, taşınabilir olmayan bir uzantıdır.H: Yığının en üstündeki iki değer çıkarılır ve ikincisi, birincisinin değerine göre sola kaydırılır (radiks sağa kaydırılır). Yığından çıkarılan ilk değer negatif olmayan bir tamsayı olmalıdır. Bu, taşınabilir olmayan bir uzantıdır.h: Yığının en üstündeki iki değer çıkarılır ve ikincisi, birincisinin değerine göre sağa kaydırılır (radiks sola kaydırılır). Yığından çıkarılan ilk değer negatif olmayan bir tamsayı olmalıdır. Bu, taşınabilir olmayan bir uzantıdır.G: Yığının en üstündeki iki değer çıkarılır, karşılaştırılır ve eğer eşitlerse yığına 1, aksi takdirde 0 itilir. Bu, taşınabilir olmayan bir uzantıdır.N: Yığının en üstündeki değer çıkarılır ve eğer 0 ise yığına 1, aksi takdirde 0 itilir. Bu, taşınabilir olmayan bir uzantıdır.(: Yığının en üstündeki iki değer çıkarılır, karşılaştırılır ve eğer ilki ikincisinden küçükse yığına 1, aksi takdirde 0 itilir. Bu, taşınabilir olmayan bir uzantıdır.{: Yığının en üstündeki iki değer çıkarılır, karşılaştırılır ve eğer ilki ikincisinden küçük veya ona eşitse yığına 1, aksi takdirde 0 itilir. Bu, taşınabilir olmayan bir uzantıdır.): Yığının en üstündeki iki değer çıkarılır, karşılaştırılır ve eğer ilki ikincisinden büyükse yığına 1, aksi takdirde 0 itilir. Bu, taşınabilir olmayan bir uzantıdır.}: Yığının en üstündeki iki değer çıkarılır, karşılaştırılır ve eğer ilki ikincisinden büyük veya ona eşitse yığına 1, aksi takdirde 0 itilir. Bu, taşınabilir olmayan bir uzantıdır.M: Yığının en üstündeki iki değer çıkarılır. Eğer ikisi de sıfırdan farklıysa yığına 1 itilir. Eğer biri veya her ikisi de sıfırsa yığına 0 itilir. Bu,bc(1)içindeki&&operatörüne benzer ve bir kısa devre (short-circuit) operatörü değildir. Bu, taşınabilir olmayan bir uzantıdır.m: Yığının en üstündeki iki değer çıkarılır. Eğer en az biri sıfırdan farklıysa yığına 1 itilir. Eğer ikisi de sıfırsa yığına 0 itilir. Bu,bc(1)içindeki||operatörüne benzer ve bir kısa devre (short-circuit) operatörü değildir. Bu, taşınabilir olmayan bir uzantıdır.
Sahte Rastgele Sayı Üreteci Komutları
dc(1) yerleşik bir sahte rastgele sayı üretecine sahiptir. Bu komutlar sahte rastgele sayı üretecini sorgular. (Sahte rastgele sayı üretecini kontrol eden seed değeri hakkında daha fazla bilgi için SÖZDİZİMİ DETAYLARI bölümüne bakın.)
[!WARNING] Sahte rastgele sayı üretecini kriptografik olarak güvenli OLMADIĞI garanti edilir.
’: 0 ileDC_RAND_MAX(dahil) arasında bir tamsayı üretir (LİMİTLER bölümüne bakın). Üretilen tamsayı, sahte rastgele sayı üretecinin sınırlamalarına tabi olmak kaydıyla mümkün olduğunca tarafsız (unbiased) hale getirilir. Bu, taşınabilir olmayan bir uzantıdır.“: Yığından çıkarılan bir değeri, üretilecek tamsayı için özel bir üst sınır olarak kullanır. Eğer sınır negatif veya tamsayı olmayan bir değerse, bir hata oluşur veseeddeğişmeden kalırkendc(1)sıfırlanır (SIFIRLAMA bölümüne bakın). Eğer sınırDC_RAND_MAXdeğerinden büyükse, birkaç sahte rastgele tamsayı üretilip bunlarDC_RAND_MAX+1değerinin uygun üsleriyle çarpılarak ve toplanarak yüksek sınıra uyulur. Böylece, bu komutla üretilebilecek tamsayı boyutu sınırsızdır. Bu komutun kullanılması, operant 0 veya 1 olmadığı süreceseeddeğerini değiştirecektir. Bu durumda, yığına 0 itilir andseeddeğiştirilmez. Üretilen tamsayı, sahte rastgele sayı üretecinin sınırlamalarına tabi olmak kaydıyla mümkün olduğunca tarafsız (unbiased) hale getirilir. Bu, taşınabilir olmayan bir uzantıdır.
Yığın Kontrol Komutları
Bu komutlar yığını kontrol eder.
c: Yığındaki tüm öğeleri kaldırır ("temizler").d: Yığının en üstündeki öğeyi kopyalar ("yineler") ve kopyayı yığına iter.r: Yığındaki en üstteki iki öğeyi yer değiştirir ("tersine çevirir").R: Yığındaki en üstteki değeri çıkarır ("kaldırır").
Kaydedici Kontrol Komutları
Bu komutlar kaydedicileri kontrol eder (KAYDEDİCİLER bölümüne bakın).
sr: Yığının en üstündeki değeri çıkarır verkaydedicisine kaydeder.lr:rkaydedicisindeki değeri kopyalar ve yığına iter. Bu işlemriçeriğini değiştirmez.Sr: (Ana) yığının en üstündeki değeri çıkarır verkaydedicisinin yığınına iter. Kaydedicinin önceki değeri erişilemez hale gelir.Lr:rkaydedicisinin yığınının en üstündeki değeri çıkarır ve ana yığına iter.rkaydedicisinin yığınındaki önceki değer (varsa) artıklrkomutuyla erişilebilir hale gelir.
Parametre Komutları
Bu komutlar ibase, obase, scale ve seed değerlerini kontrol eder. Ayrıca SÖZDİZİMİ DETAYLARI bölümüne bakın.
i: Yığının en üstündeki değeri çıkarır veibasedeğerini ayarlamak için kullanır; bu değer 2 ile 16 (dahil) arasında olmalıdır. Yığının en üstündeki değerin herhangi bir ondalık kısmı varsa, bu kısım yoksayılır.o: Yığının en üstündeki değeri çıkarır veobasedeğerini ayarlamak için kullanır; bu değer 0 ileDC_BASE_MAX(dahil) arasında olmalıdır (LİMİTLER ve SAYILAR bölümlerine bakın). Yığının en üstündeki değerin herhangi bir ondalık kısmı varsa, bu kısım yoksayılır.k: Yığının en üstündeki değeri çıkarır vescaledeğerini ayarlamak için kullanır; bu değer negatif olmamalıdır. Yığının en üstündeki değerin herhangi bir ondalık kısmı varsa, bu kısım yoksayılır.j: Yığının en üstündeki değeri çıkarır veseeddeğerini ayarlamak için kullanır.seed'in anlamı mevcut sahte rastgele sayı üretecine bağlıdır ancak yeni ana sürümler haricinde değişmeyeceği garanti edilir. Değerin basamak duyarlılığı ve işareti önemli olabilir. Daha önce kullanılmış birseeddeğeri tekrar kullanılırsa, sahte rastgele sayı üretecinin, oseeddeğeri daha önce kullanıldığındaki aynı sahte rastgele sayı dizisini üretmesi garanti edilir.Jkomutu kullanılırsaseed'e atanan kesin değerin geri döndürüleceği garanti edilmez. Ancak,seedfarklı bir değer döndürse bile, her iki değerin deseed'e atandığında aynı sahte rastgele sayı dizisini üretmesi garanti edilir. Bu,seed'e atanan bazı değerlerin benzersiz sahte rastgele sayı dizileri üretmeyeceği anlamına gelir.seed'e atanabilecek değerin uzunluğu (anlamlı ondalık basamak sayısı) veya basamak duyarlılığı (scale) konusunda bir sınır yoktur.Bu, taşınabilir olmayan bir uzantıdır.
I: Mevcutibasedeğerini ana yığına iter.O: Mevcutobasedeğerini ana yığına iter.K: Mevcutscaledeğerini ana yığına iter.J: Mevcutseeddeğerini ana yığına iter. Bu, taşınabilir olmayan bir uzantıdır.T:ibaseiçin izin verilen maksimum değeri ana yığına iter. Bu, taşınabilir olmayan bir uzantıdır.U:obaseiçin izin verilen maksimum değeri ana yığına iter. Bu, taşınabilir olmayan bir uzantıdır.V:scaleiçin izin verilen maksimum değeri ana yığına iter. Bu, taşınabilir olmayan bir uzantıdır.W:’sahte rastgele sayı üreteci komutuyla üretilebilecek maksimum (dahil) tamsayıyı iter. Bu, taşınabilir olmayan bir uzantıdır.
Dizge Komutları
Aşağıdaki komutlar dizgeleri kontrol eder. dc(1) hem sayılar hem de dizgelerle çalışabilir ve kaydediciler hem dizgeleri hem de sayıları tutabilir. dc(1) bir kaydedicinin içeriğinin bir dizge mi yoksa bir sayı mı olduğunu her zaman bilir.
Aritmetik işlemler sayılara ihtiyaç duyduğundan ve bir dizge verildiğinde hata yazdıracağından, diğer komutlar dizgeleri kabul eder.
Dizgeler makro olarak da çalıştırılabilir. Örneğin, eğer [1pR] dizgesi bir makro olarak çalıştırılırsa, 1pR kodu yürütülür; bu da 1'in sonunda yeni satır olacak şekilde yazdırılacağı ve ardından yığından çıkarılacağı anlamına gelir.
[characters]: Karakterleri içeren bir dizge oluşturur ve bunu yığına iter.Dizge içinde köşeli parantezler (
[ve]) varsa dengeli olmalıdırlar. Dengelenmemiş köşeli parantezler ters eğik çizgi (\) karakteri kullanılarak kaçışlı hale getirilebilir.Dizge içinde bir ters eğik çizgi karakteri varsa, arkasındaki karakter (başka bir ters eğik çizgi olsa bile) dizgeye kelimesi kelimesine yerleştirilir, ancak (ilk) ters eğik çizgi yerleştirilmez.
a: Yığının en üstündeki değer çıkarılır.Eğer bu bir sayı ise, kırpılır ve mutlak değeri alınır. Sonucun
256'ya göre modu hesaplanır. Eğer bu sonuç0ise boş bir dizge iter; aksi takdirde, karakterin mod sonucunun bir ASCII karakteri olarak yorumlandığı tek karakterlik bir dizge iter.Eğer bu bir dizge ise, yeni bir dizge oluşturulur. Eğer orijinal dizge boşsa, yeni dizge de boş olur. Boş değilse, yeni dizgeyi tek karakterlik bir dizge olarak oluşturmak için orijinal dizgenin ilk karakteri kullanılır. Yeni dizge daha sonra yığına itilir.
Bu, taşınabilir olmayan bir uzantıdır.
x: Yığının en üstünden bir değer çıkarır.Eğer bu bir sayı ise, yığına geri itilir.
Eğer bu bir dizge ise, bir makro olarak çalıştırılır.
Bu davranış, ister bu komutla ister aşağıdaki koşullu çalıştırma komutlarıyla olsun, bir makro her çalıştırıldığında standarttır.
>r: Yığından sayı olması gereken iki değer çıkarır ve bunları karşılaştırır. Eğer ilk değer ikincisinden büyükse,rkaydedicisinin içeriği çalıştırılır.Örneğin,
0 1>aifadesiakaydedicisinin içeriğini çalıştırır,1 0>aise çalıştırmaz.Değerlerden biri veya her ikisi sayı değilse,
dc(1)bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın).>res: Yukarıdaki gibidir, ancak karşılaştırma başarısız olursaskaydedicisini çalıştırır.Değerlerden biri veya her ikisi sayı değilse,
dc(1)bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın).Bu, taşınabilir olmayan bir uzantıdır.
!>r: Yığından sayı olması gereken iki değer çıkarır ve bunları karşılaştırır. Eğer ilk değer ikincisinden büyük değilse (küçük veya eşitse),rkaydedicisinin içeriği çalıştırılır.Değerlerden biri veya her ikisi sayı değilse,
dc(1)bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın).!>res: Yukarıdaki gibidir, ancak karşılaştırma başarısız olursaskaydedicisini çalıştırır.Değerlerden biri veya her ikisi sayı değilse,
dc(1)bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın).Bu, taşınabilir olmayan bir uzantıdır.
<r: Yığından sayı olması gereken iki değer çıkarır ve bunları karşılaştırır. Eğer ilk değer ikincisinden küçükse,rkaydedicisinin içeriği çalıştırılır.Değerlerden biri veya her ikisi sayı değilse,
dc(1)bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın).<res: Yukarıdaki gibidir, ancak karşılaştırma başarısız olursaskaydedicisini çalıştırır.Değerlerden biri veya her ikisi sayı değilse,
dc(1)bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın).Bu, taşınabilir olmayan bir uzantıdır.
!<r: Yığından sayı olması gereken iki değer çıkarır ve bunları karşılaştırır. Eğer ilk değer ikincisinden küçük değilse (büyük veya eşitse),rkaydedicisinin içeriği çalıştırılır.Değerlerden biri veya her ikisi sayı değilse,
dc(1)bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın).!<res: Yukarıdaki gibidir, ancak karşılaştırma başarısız olursaskaydedicisini çalıştırır.Değerlerden biri veya her ikisi sayı değilse,
dc(1)bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın).Bu, taşınabilir olmayan bir uzantıdır.
=r: Yığından sayı olması gereken iki değer çıkarır ve bunları karşılaştırır. Eğer ilk değer ikinciye eşitse,rkaydedicisinin içeriği çalıştırılır.Değerlerden biri veya her ikisi sayı değilse,
dc(1)bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın).=res: Yukarıdaki gibidir, ancak karşılaştırma başarısız olursaskaydedicisini çalıştırır.Değerlerden biri veya her ikisi sayı değilse,
dc(1)bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın).Bu, taşınabilir olmayan bir uzantıdır.
!=r: Yığından sayı olması gereken iki değer çıkarır ve bunları karşılaştırır. Eğer ilk değer ikinciye eşit değilse,rkaydedicisinin içeriği çalıştırılır.Değerlerden biri veya her ikisi sayı değilse,
dc(1)bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın).!=res: Yukarıdaki gibidir, ancak karşılaştırma başarısız olursaskaydedicisini çalıştırır.Değerlerden biri veya her ikisi sayı değilse,
dc(1)bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın).Bu, taşınabilir olmayan bir uzantıdır.
?:stdinüzerinden bir satır okur ve çalıştırır. Bu, makroların kullanıcılardan girdi talep etmesini sağlamak içindir.q: Bir makronun yürütülmesi sırasında, bu komut o makronun yürütülmesini ve onu çalıştıran makronun yürütülmesini sonlandırır. Yürütülen hiçbir makro yoksa veya yalnızca tek bir makro yürütülüyorsa,dc(1)sonlanır.Q: Yığından negatif olmayan bir değer çıkarır ve bu değer, yürütme yığınından çıkarılacak makro yürütme düzeylerinin sayısı olarak kullanılır. Çıkarılacak düzey sayısı, yürütülen makro sayısından fazlaysa,dc(1)sonlanır.,: Yürütme yığınının derinliğini yığına iter. Yürütme yığını, dizge yürütmelerinin yığınıdır. Yığına itilen sayı,dc(1)uygulamasınınQkomutuyla çıkmasını sağlamak için tam olarak gereken sayı kadardır; dolayısıyla,Qdizisidc(1)uygulamasının sonlanmasını sağlar.Bu, taşınabilir olmayan bir uzantıdır.
Durum Sorgulama Komutları
Bu komutlar yığının veya en üstteki değerin durumunu sorgular.
Z: Yığından bir değer çıkarır.- Eğer bu bir sayı ise, sahip olduğu anlamlı ondalık basamak sayısını hesaplar ve sonucu iter. Ondalık basamağı olmayan 0 argümanı için 1 itecektir.
- Eğer bu bir dizge ise, dizgenin sahip olduğu karakter sayısını iter.
X: Yığından bir değer çıkarır.- Eğer bu bir sayı ise, değerin
scale(ondalık basamak) değerini yığına iter. - Eğer bu bir dizge ise, 0 iter.
- Eğer bu bir sayı ise, değerin
u: Yığından bir değer çıkarır. Eğer değer bir sayı ise yığına 1 iter. Aksi takdirde (bir dizgeyse) 0 iter.Bu, taşınabilir olmayan bir uzantıdır.
t: Yığından bir değer çıkarır. Eğer değer bir dizge ise yığına 1 iter. Aksi takdirde (bir sayıysa) 0 iter.Bu, taşınabilir olmayan bir uzantıdır.
z: Yığının (bu komut çalıştırılmadan önceki) mevcut derinliğini yığına iter.yr:rkaydedicisinin mevcut yığın derinliğini ana yığına iter.dc(1)başladığında her kaydedicinin derinliği 1 olduğundan (en üstteki öğede 0 değeri ile),dc(1)her kaydedicinin yığınında her zaman en az bir öğe olmasını gerektirir; aksi takdirdedc(1)bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın). Bu, bu komutun asla 0 itmeyeceği anlamına gelir.Bu, taşınabilir olmayan bir uzantıdır.
Dizi Komutları
Bu komutlar dizileri manipüle eder.
:r: Yığının en üstündeki iki değeri çıkarır. İkinci değer, ilk değer tarafından dizinlenenrdizisinde (KAYDEDİCİLER bölümüne bakın) depolanacaktır.;r: Yığının en üstündeki değeri çıkarır ve bunurdizisine bir dizin olarak kullanır. Seçilen değer daha sonra yığına itilir.Yr:rdizisinin uzunluğunu yığına iter.Bu, taşınabilir olmayan bir uzantıdır.
Küresel Ayar Komutları
Bu komutlar küresel ayarları alır. Bunlar, birden fazla belirli karakter gerektiren tek komutlardır ve hepsi g harfi ile başlar. g karakterinden sonra yalnızca aşağıdaki karakterlere izin verilir; başka herhangi bir karakter ayrıştırma hatasına neden olur (HATALAR bölümüne bakın).
gl:DC_LINE_LENGTH(ORTAM DEĞİŞKENLERİ bölümüne bakın) tarafından ayarlanan satır uzunluğunu yığına iter.gx: Genişletilmiş kaydedici modu açıksa yığına 1, aksi takdirde 0 iter. Daha fazla bilgi için KAYDEDİCİLER bölümünün Genişletilmiş Kaydedici Modu alt bölümüne bakın.gz:-zveya--leading-zeroesseçenekleriyle (SEÇENEKLER bölümüne bakın) başında sıfır ayarı etkinleştirilmemişse yığına 0, aksi takdirde sıfır dışı bir değer iter.
KAYDEDİCİLER
Kaydediciler; dizgeleri, sayıları ve dizileri saklayabilen isimlerdir. (Sayı/dizge kaydedicileri dizi kaydedicileri ile çakışmaz.)
Her kaydedici aynı zamanda kendi yığınıdır, dolayısıyla mevcut kaydedici değeri kaydedici yığınının en üstündeki değerdir. Tüm kaydediciler, ilk kez başvurulduğunda yığınlarında bir değere (0) sahiptir ve bu öğeyi kaydedici yığından çıkarmaya çalışmak bir çalışma zamanı hatasıdır.
Genişletilmemiş kaydedici modunda, bir kaydedici adı, bir kaydedici adı gerektiren herhangi bir komuttan hemen sonra gelen tek karakterdir. Bunun tek istisnası yeni satır (\n) ve sol köşeli parantezdir ([); yeni satırın veya sol köşeli parantezin bir kaydedici adı olarak kullanılması bir ayrıştırma hatasıdır.
Genişletilmiş Kaydedici Modu
Çoğu diğer dc(1) uygulamasının aksine, bu dc(1) uygulaması, genişletilmiş kaydedici modu etkinleştirildiğinde neredeyse sınırsız miktarda kaydedici sağlar.
Genişletilmiş kaydedici modu etkinleştirilirse (-x veya --extended-register komut satırı argümanları verilirse), bir komuttan hemen sonra bir kaydedici adı gerektiren karakter yeni satır (\n) değil de bir boşluk (isspace() fonksiyonuna göre) olmadığı sürece normal tek karakterli kaydediciler kullanılır.
Bu durumda kaydedici adı, [a-z][a-z0-9_]* düzenli ifadesine (bc(1) tanımlayıcıları gibi) göre bulunur ve bir sonraki boşluk olmayan karakterler bu düzenli ifadeyle eşleşmezse bu bir ayrıştırma hatadır.
SIFIRLAMA
dc(1) varsayılan olmayan bir işleyiciye sahip olduğu bir hatayla veya sinyalle karşılaştığında sıfırlanır. Bu, birkaç şeyin gerçekleştiği anlamına gelir.
İlk olarak, yürütülen tüm makrolar durdurulur ve yürütme yığınından çıkarılır. Bu davranış, programlama dillerindeki istisnaların (exception) davranışına benzer. Ardından yürütme noktası, yürütülmeyi bekleyen tüm kodların (tüm makrolar döndükten sonra) atlanacağı şekilde ayarlanır.
Ancak değerler yığını temizlenmez; etkileşimli modda, kullanıcılar yığını inceleyebilir ve üzerinde işlem yapabilir.
Böylece dc(1) sıfırlandığında, yürütülmeyi bekleyen kalan kodları atlar. Ardından, etkileşimli moddaysa ve hata ölümcül bir hata değilse (ÇIKIŞ DURUMU bölümüne bakın), daha fazla girdi ister; aksi takdirde uygun dönüş koduyla çıkış yapar.
PERFORMANS
Çoğu dc(1) uygulaması, tek seferde 1 ondalık basamağın değerini hesaplamak için char türlerini kullanır, ancak bu yavaş olabilir. Bu dc(1) uygulaması ise farklı bir şey yapar.
Tek seferde 1'den fazla ondalık basamağı hesaplamak için büyük tamsayılar kullanır. DC_LONG_BIT değerinin (LİMİTLER bölümüne bakın) 64 olduğu bir ortamda derlenmişse, her tamsayı 9 ondalık basamağa sahiptir. DC_LONG_BIT değerinin 32 olduğu bir ortamda derlenmişse, her tamsayı 4 ondalık basamağa sahiptir. Bu değer (büyük tamsayı başına ondalık basamak sayısı) DC_BASE_DIGS olarak adlandırılır.
Ek olarak, bu dc(1) uygulaması taşma (overflow) kontrolü için daha da büyük bir tamsayı kullanır. Bu tamsayı türü DC_LONG_BIT değerine bağlıdır, ancak basamakları saklamak için kullanılan tamsayı türünün her zaman en az iki katı büyüklüktedir.
LİMİTLER
Aşağıdakiler dc(1) üzerindeki limitlerdir:
DC_LONG_BIT:dc(1)uygulamasının derlendiği ortamdakilongtürünün bit sayısı. Bu, tek bir büyük tamsayıda kaç ondalık basamağın saklanabileceğini belirler (PERFORMANS bölümüne bakın).DC_BASE_DIGS: Büyük tamsayı başına ondalık basamak sayısı (PERFORMANS bölümüne bakın).DC_LONG_BITdeğerine bağlıdır.DC_BASE_POW: Her bir büyük tamsayının saklayabileceği maksimum ondalık sayı (bakınızDC_BASE_DIGS) artı 1.DC_BASE_DIGSdeğerine bağlıdır.DC_OVERFLOW_MAX: Taşma türünün (PERFORMANS bölümüne bakın) tutabileceği maksimum sayı.DC_LONG_BITdeğerine bağlıdır.DC_BASE_MAX: Maksimum çıktı tabanı.DC_BASE_POWdeğerine ayarlanmıştır.DC_DIM_MAX: Dizilerin maksimum boyutu.SIZE_MAX-1değerine ayarlanmıştır.DC_SCALE_MAX: Maksimum basamak duyarlılığı.DC_OVERFLOW_MAX-1değerine ayarlanmıştır.DC_STRING_MAX: Dizgelerin maksimum uzunluğu.DC_OVERFLOW_MAX-1değerine ayarlanmıştır.DC_NAME_MAX: Tanımlayıcıların maksimum uzunluğu.DC_OVERFLOW_MAX-1değerine ayarlanmıştır.DC_NUM_MAX: Ondalık noktadan sonraki basamaklar da dahil olmak üzere bir sayının maksimum uzunluğu (ondalık basamak olarak).DC_OVERFLOW_MAX-1değerine ayarlanmıştır.DC_RAND_MAX:dc(1)içindeki’komutuyla döndürülen maksimum tamsayı (dahil).2^DC_LONG_BIT-1değerine ayarlanmıştır.Üs: İzin verilen maksimum üs (pozitif veya negatif).DC_OVERFLOW_MAXdeğerine ayarlanmıştır.Değişken Sayısı: Maksimum değişken/dizi sayısı.SIZE_MAX-1değerine ayarlanmıştır.
[!NOTE] Bu limitlerin fiilen var olmadığı varsayılmaktadır; limitler o kadar büyüktür ki (en azından 64 bit makinelerde) bir sorun oluşturacakları hiçbir nokta olmamalıdır. Aslında, bu limitlere ulaşılmadan önce belleğin tükenmesi gerekir.
ORTAM DEĞİŞKENLERİ
Taşınabilir olmayan uzantılar olarak, dc(1) aşağıdaki ortam değişkenlerini tanır:
DC_ENV_ARGS:dc(1)'e komut satırı argümanları vermenin başka bir yoludur. Diğer tüm komut satırı argümanlarıyla aynı biçimde olmalıdırlar. Bunlar her zaman ilk önce işlenir, bu nedenleDC_ENV_ARGSiçinde verilen dosyalar, komut satırında verilen argümanlardan ve dosyalardan önce işlenecektir. Bu, kullanıcıya her çağrıda kullanılacak "standart" seçenekleri ve dosyaları ayarlama yeteneği verir. Bu tür dosyaların içermesi en yararlı şey, kullanıcınındc(1)her çalıştığında isteyebileceği yararlı fonksiyonlar olacaktır. Başka bir kullanım isescaledeğerini 0 dışında bir değere ayarlamak için-eseçeneğini kullanmak olabilir.DC_ENV_ARGSdeğişkenini ayrıştıran kod, tırnak içine alınmış argümanları doğru şekilde işleyecektir ancak kaçış dizilerini anlamaz. Örneğin,“/home/gavin/some dc file.dc”dizgesi doğru şekilde ayrıştırılacaktır, ancak“/home/gavin/some \"dc\" file.dc”dizgesi ters eğik çizgileri de içerecektir.Tırnak işareti ayrıştırması her iki tırnak türünü de (
’veya“) işleyecektir. Dolayısıyla, adında herhangi bir sayıda tek tırnak bulunan bir dosyanız varsa, dış tırnak olarak çift tırnak kullanabilirsiniz, örneğin“some \dc' file.dc”gibi; adında çift tırnak olan bir dosyanız varsa bunun tersini yapabilirsiniz. Bununla birlikte, ayrıştırmanın karmaşıklığı nedeniyleDC_ENV_ARGS` içinde her iki tırnak türünü de içeren bir dosyanın işlenmesi desteklenmez, ancak bu tür dosyalar ayrıştırmanın kabuk tarafından yapıldığı komut satırında hala desteklenmektedir.DC_LINE_LENGTH: Bu ortam değişkeni mevcutsa ve 1'den büyük veUINT16_MAX(2^16-1) değerinden küçük bir tamsayı içeriyorsa,dc(1)çıktı satırlarını ters eğik çizgi yeni satır kombinasyonu da dahil olmak üzere o uzunlukta verecektir. Varsayılan satır uzunluğu 70'tir.Özel
0değeri satır uzunluğu kontrolünü devre dışı bırakır ve sayıları satır uzunluğuna bakılmaksızın ve ters eğik çizgi ile yeni satır olmadan yazdırır.DC_SIGINT_RESET:dc(1)etkileşimli modda değilse (ETKİLEŞİMLİ MOD bölümüne bakın), bu ortam değişkeninin hiçbir etkisi yoktur çünküdc(1)etkileşimli modda olmadığındaSIGINTsinyali aldığında çıkar.Ancak
dc(1)etkileşimli moddayken, bu ortam değişkeni mevcutsa ve bir tamsayı içeriyorsa, sıfır dışı bir değerdc(1)uygulamasının çıkmak yerineSIGINTdurumunda sıfırlanmasını sağlar ve sıfır değeridc(1)uygulamasının çıkmasını sağlar. Eğer bu ortam değişkeni mevcutsa ve bir tamsayı değilse,dc(1)SIGINTdurumunda çıkacaktır.Bu ortam değişkeni,
-hveya--helpseçenekleriyle sorgulanabilen varsayılan ayarı geçersiz kılar.DC_TTY_MODE: TTY modu mevcut değilse (TTY MODU bölümüne bakın), bu ortam değişkeninin hiçbir etkisi yoktur.Ancak TTY modu mevcut olduğunda, bu ortam değişkeni mevcutsa ve bir tamsayı içeriyorsa, sıfır dışı bir değer
dc(1)uygulamasının TTY modunu kullanmasını sağlar ve sıfır değeridc(1)uygulamasının TTY modunu kullanmamasını sağlar.Bu ortam değişkeni,
-hveya--helpseçenekleriyle sorgulanabilen varsayılan ayarı geçersiz kılar.DC_PROMPT: TTY modu mevcut değilse (TTY MODU bölümüne bakın), bu ortam değişkeninin hiçbir etkisi yoktur.Ancak TTY modu mevcut olduğunda, bu ortam değişkeni mevcutsa ve bir tamsayı içeriyorsa, sıfır dışı bir değer
dc(1)uygulamasının bir istem (prompt) kullanmasını sağlar; sıfır veya tamsayı olmayan bir değer isedc(1)uygulamasının bir istem kullanmamasını sağlar. Eğer bu ortam değişkeni mevcut değilse veDC_TTY_MODEmevcutsa,DC_TTY_MODEortam değişkeninin değeri kullanılır.Bu ortam değişkeni ve
DC_TTY_MODEortam değişkeni,-hveya--helpseçenekleriyle sorgulanabilen varsayılan ayarı geçersiz kılar.DC_EXPR_EXIT: Komut satırında-e,--expression,-fveya--fileile herhangi bir ifade veya ifade dosyası verilmişse, bu ortam değişkeni mevcutsa ve bir tamsayı içeriyorsa, sıfır dışı bir değerdc(1)uygulamasının ifadeleri ve ifade dosyalarını çalıştırdıktan sonra çıkmasını sağlar; sıfır değeri isedc(1)uygulamasının çıkmamasını sağlar.Bu ortam değişkeni,
-hveya--helpseçenekleriyle sorgulanabilen varsayılan ayarı geçersiz kılar.DC_DIGIT_CLAMP: Sayılar ayrıştırılırken bu ortam değişkeni mevcutsa ve bir tamsayı içeriyorsa, sıfır dışı bir değerdc(1)uygulamasının mevcutibasedeğerine eşit veya ondan büyük basamakları kırparak tüm bu basamaklarıibaseeksi 1'e eşit olarak kabul etmesini sağlar; sıfır değeri ise bu tür kırpmaları devre dışı bırakarak o basamakların her zaman kendi değerlerine eşit olmasını veibase'in üssü ile çarpılmasını sağlar.Bu durum,
bc(1)standardı uyarınca (STANDARTLAR bölümüne bakın) tek basamaklı sayılar için asla geçerli değildir.Bu ortam değişkeni,
-hveya--helpseçenekleriyle sorgulanabilen varsayılan ayarı geçersiz kılar.
ÇIKIŞ DURUMU
dc(1) aşağıdaki çıkış durumlarını döndürür:
0: Hata yok.1: Bir matematik hatası oluştu. Bu, matematik hataları normal yürütme sürecinde gerçekleşeceğinden, beklenen hatalar için1kullanma standart uygulamasını takip eder.Matematik hataları arasında
0'a bölme, negatif bir sayının karekökünü alma, sahte rastgele sayı üreteci için sınır olarak negatif bir sayı kullanma, negatif bir sayıyı donanım tamsayısına dönüştürmeye çalışma, bir sayıyı donanım tamsayısına dönüştürürken taşma, bir sayının boyutunu hesaplarken taşma ve tamsayı gereken yerde tamsayı olmayan bir değer kullanmaya çalışma yer alır.Donanım tamsayısına dönüştürme; üs (
^), basamak ayarı (@), sola kaydırma (H) ve sağa kaydırma (h) operatörlerinin ikinci operandı için gerçekleşir.2: Bir ayrıştırma hatası oluştu.Ayrıştırma hataları arasında beklenmeyen dosya sonu (EOF), geçersiz bir karakter kullanılması, bir dizgenin veya yorumun sonunun bulunamaması ve geçersiz bir yerde belirteç (token) kullanılması yer alır.
3: Bir çalışma zamanı hatası oluştu.Çalışma zamanı hataları arasında herhangi bir küresel değişkene (
ibase,obaseveyascale) geçersiz bir sayı atanması,read()çağrısına hatalı bir ifade verilmesi, birread()çağrısının içinderead()çağrılması, tür hataları (bir sayıyı yürütmeye çalışma dahil) ve yığında çok az öğe varken bir işlem yapılmaya çalışılması yer alır.4: Ölümcül bir hata oluştu.Ölümcül hatalar arasında bellek ayırma hataları, G/Ç (I/O) hataları, dosyaların açılamaması, yalnızca ASCII karakterleri içermeyen dosyaların kullanılmaya çalışılması (
dc(1)yalnızca ASCII karakterlerini kabul eder), bir dizini dosya olarak açmaya çalışma ve geçersiz komut satırı seçenekleri verilmesi yer alır.
Çıkış durumu 4 özeldir; ölümcül bir hata oluştuğunda dc(1), hangi modda olursa olsun her zaman sonlanır ve 4 döndürür.
Diğer durumlar yalnızca dc(1) etkileşimli modda olmadığında (ETKİLEŞİMLİ MOD bölümüne bakın) döndürülecektir, çünkü dc(1) etkileşimli modda bu hatalardan biri oluştuğunda durumunu sıfırlar (SIFIRLAMA bölümüne bakın) ve daha fazla girdi kabul eder. Bu durum, -i bayrağı veya --interactive seçeneği ile etkileşimli mod zorunlu kılındığında da geçerliyse.
Bu çıkış durumları, dc(1) uygulamasının hata kontrolü ile kabuk betiklerinde kullanılmasına olanak tanır ve normal davranışı -i bayrağı veya --interactive seçeneği kullanılarak zorunlu kılınabilir.
ETKİLEŞİMLİ MOD
bc(1) gibi dc(1) de bir etkileşimli moda ve bir etkileşimli olmayan moda sahiptir. Hem stdin hem de stdout bir terminale bağlı olduğunda etkileşimli mod otomatik olarak açılır, ancak -i bayrağı ve --interactive seçeneği diğer durumlardada bu modu açabilir.
Etkileşimli modda dc(1), hatalardan kurtulmaya çalışır (SIFIRLAMA bölümüne bakın) ve normal yürütmede, mevcut girdi için yürütme biter bitmez stdout'u temizler (flush). dc(1) ayrıca DC_SIGINT_RESET ortam değişkeninin içeriğine veya varsayılan değerine bağlı olarak (ORTAM DEĞİŞKENLERİ bölümüne bakın) çıkmak yerine SIGINT durumunda sıfırlanabilir.
TTY MODU
Eğer stdin, stdout ve stderr'in tümü bir TTY'ye bağlıysa, "TTY modu" mevcut olarak kabul edilir ve böylece dc(1), bazı ayarlara tabi olmak kaydıyla TTY modunu açabilir.
Ortamda DC_TTY_MODE ortam değişkeni varsa (ORTAM DEĞİŞKENLERİ bölümüne bakın), bu ortam değişkeni sıfır dışı bir tamsayı içeriyorsa dc(1), stdin, stdout ve stderr'in tümü bir TTY'ye bağlı olduğunda TTY modunu açacaktır. Eğer DC_TTY_MODE ortam değişkeni mevcutsa fakat sıfır dışı bir tamsayı değilse, dc(1) TTY modunu açmayacaktır.
Eğer DC_TTY_MODE ortam değişkeni mevcut değilse, varsayılan ayar kullanılır. Varsayılan ayar -h veya --help seçenekleriyle sorgulanabilir.
TTY modu etkileşimli moddan farklıdır çünkü etkileşimli mod bc(1) spesifikasyonunda (STANDARTLAR bölümüne bakın) gereklidir ve etkileşimli mod yalnızca stdin ve stdout'un bir terminale bağlı olmasını gerektirir.
Komut Satırı Geçmişi
Komut satırı geçmişi yalnızca TTY modu etkinse etkinleştirilir; yani stdin, stdout ve stderr bir TTY'ye bağlıysa ve DC_TTY_MODE ortam değişkeni (ORTAM DEĞİŞKENLERİ bölümüne bakın) ile varsayılanı TTY modunu devre dışı bırakmıyorsa. Daha fazla bilgi için KOMUT SATIRI GEÇMİŞİ bölümüne bakın.
İstem
TTY modu mevcutsa, bir istem (prompt) etkinleştirilebilir. TTY modunun kendisi gibi, bu da bir ortam değişkeni ile açılıp kapatılabilir: DC_PROMPT (ORTAM DEĞİŞKENLERİ bölümüne bakın).
Eğer DC_PROMPT ortam değişkeni mevcutsa ve sıfır dışı bir tamsayı ise; stdin, stdout ve stderr bir TTY'ye bağlı olduğunda ve -P ve --no-prompt seçenekleri kullanılmadığında istem etkinleştirilir. Okuma istemi de aynı koşullar altında etkinleştirilecektir, ancak -R ve --no-read-prompt seçenekleri de kullanılmamış olmalıdır.
Bununla birlikte, DC_PROMPT mevcut değilse; istem DC_TTY_MODE ortam değişkeni, -P ve --no-prompt seçenekleri ve -R ve --no-read-prompt seçenekleri kullanılarak etkinleştirilebilir veya devre dışı bırakılabilir. Daha fazla ayrıntı için ORTAM DEĞİŞKENLERİ ve SEÇENEKLER bölümlerine bakın.
SİNYAL İŞLEME
Bir SIGINT gönderilmesi dc(1) uygulamasının iki şeyden birini yapmasına neden olur.
Eğer dc(1) etkileşimli modda değilse (ETKİLEŞİMLİ MOD bölümüne bakın) ya da DC_SIGINT_RESET ortam değişkeni (ORTAM DEĞİŞKENLERİ bölümüne bakın) veya varsayılanı tamsayı değilse ya da sıfırsa, dc(1) çıkış yapacaktır.
Ancak, dc(1) etkileşimli modda ise ve DC_SIGINT_RESET ya da varsayılanı sıfır dışı bir tamsayı ise, dc(1) mevcut girdiyi yürütmeyi durduracak ve bir SIGINT aldığında sıfırlanacaktır (SIFIRLAMA bölümüne bakın).
"Mevcut girdi" ifadesinin iki şeyden birini ifade edebileceğini unutmayın. Eğer dc(1) etkileşimli modda stdin'den gelen girdiyi işliyorsa, daha fazla girdi isteyecektir. Eğer dc(1) etkileşimli modda bir dosyadan gelen girdiyi işliyorsa, dosyayı işlemeyi durduracak ve varsa bir sonraki dosyayı işlemeye başlayacaktır; başka bir dosya yoksa stdin'den girdi isteyecektir.
Bu, bir dosya yürütülürken dc(1) uygulamasına bir SIGINT gönderildiğinde, dc(1) hemen bir sonraki dosyayı yürütmeye başlayacağından sinyale yanıt vermemiş gibi görünebileceği anlamına gelir. Bu tasarım gereğidir; kullanıcıların dc(1) ile etkileşime girerken yürüttükleri çoğu dosya, ayrıştırılması hızlı olan fonksiyon tanımlarına sahiptir. Eğer bir dosyanın yürütülmesi uzun sürüyorsa, o dosyada bir hata olabilir. Dosyaların geri kalanı sorunsuz bir şekilde yürütülmeye devam edebilir ve kullanıcının devam etmesine olanak tanır.
SIGTERM ve SIGQUIT sinyalleri dc(1) uygulamasının temizlenip çıkmasına neden olur ve diğer tüm sinyaller için varsayılan işleyiciyi kullanır. Tek istisna SIGHUP sinyalidir; bu durumda ve yalnızca dc(1) TTY modunda olduğunda (TTY MODU bölümüne bakın), bir SIGHUP dc(1) uygulamasının temizlenip çıkmasına neden olur.
KOMUT SATIRI GEÇMİŞİ
dc(1) etkileşimli komut satırı düzenlemesini destekler.
Eğer dc(1) TTY modunda olabiliyor ise (TTY MODU bölümüne bakın), geçmiş etkinleştirilebilir. Bu, komut satırı geçmişinin yalnızca stdin, stdout ve stderr'in tümü bir TTY'ye bağlı olduğunda etkinleştirilebileceği anlamına gelir.
TTY modunun kendisi gibi, bu da DC_TTY_MODE ortam değişkeni (ORTAM DEĞİŞKENLERİ bölümüne bakın) ile açılıp kapatılabilir.
[!NOTE] Sekmeler (tab) 8 boşluğa dönüştürülür.
YERELLEŞTİRME
Bu dc(1) sürümü, farklı diller için hata mesajları ekleme desteğiyle birlikte gelir ve bu nedenle LC_MESSAGES ortam değişkenini destekler.
AYRICA BAKINIZ
bc(1)
STANDARTLAR
dc(1) yardımcı program operatörleri ve bazı davranışları, IEEE Std 1003.1-2017 (“POSIX.1-2017”) bc(1) spesifikasyonundaki operatörlerle uyumludur:
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html.
HATALAR
Bilinen bir hata yoktur. Hataları https://git.gavinhoward.com/gavin/bc adresine bildirin.
YAZAR
Gavin D. Howard gavin@gavinhoward.com ve katkıda bulunanlar.