calc(1) General Commands Manual calc(1)

calc - ماشین‌حساب با دقت دلخواه

calc [-c] [-C] [-d]

[-D calc_debug[:resource_debug[:user_debug]]]
[-e] [-f filename] [-h] [-i] [-m mode] [-O]
[-p] [-q] [-s] [-u] [-v] [[--] calc_cmd ...]

#!/usr/bin/calc [optional_other_flags ...] -f

ادامه خواندن خطوط دستور حتی پس از این‌که یک خطای پویش/تجزیه (scan/parse) باعث رها شدن یک خط شده باشد. توجه داشته باشید که این گزینه فقط به پویش و تجزیه زبان calc مربوط می‌شود. این گزینه با خطاهای اجرا یا زمان اجرا (run-time) سر و کار ندارد.

برای مثال:


calc read many_errors.cal

باعث خواهد شد calc در نخستین خطای نحوی (syntax error) متوقف شود، در حالی که:


calc -c read many_errors.cal

باعث خواهد شد calc با وجود مواجهه با خطاهای پویش/تجزیه، برای پردازش هر خطِ در حال خوانده‌شدن تلاش کند.

به‌طور پیش‌فرض، فایل‌های منبع (resource files) راه‌اندازی calc در صورت پیدا نشدن، بدون هیچ پیامی نادیده گرفته می‌شوند. این پرچم مفقود بودن فایل‌های منبع راه‌اندازی را گزارش می‌دهد، مگر اینکه -d نیز مشخص شده باشد.

اجازه اجرای توابع توکار سفارشی (custom builtin functions). بدون این پرچم، فراخوانی تابع توکار custom() صرفاً یک خطا تولید خواهد کرد.

استفاده از این پرچم ممکن است باعث شود calc توابعی را اجرا کند که غیراستاندارد بوده و قابل‌حمل نیستند. توابع توکار سفارشی به همین دلیل به‌طور پیش‌فرض غیرفعال هستند.

غیرفعال کردن چاپ عنوان آغازین. چاپ پیام‌های اشکال‌زدایی و اطلاعاتی فایل منبع نیز به گونه‌ای غیرفعال می‌شود که گویی config("resource_debug", 0) اجرا شده است.

برای مثال:


calc "read qtime; qtime(2)"

خروجی‌ای شبیه به این خواهد داشت:


qtime(utc_hr_offset) defined
It's nearly ten past six.

در حالی که:


calc -d "read qtime; qtime(2)"

تنها این را چاپ خواهد کرد:


It's nearly ten past six.

این پرچم گزارش مربوط به پیدا نشدن فایل‌های منبع راه‌اندازی calc را غیرفعال می‌کند.

این پرچم همچنین چاپ علامت تیلدا (~) ابتدایی را غیرفعال می‌کند. برای مثال:


calc 2/3

چاپ خواهد کرد:


~0.66666666666666666667

در حالی که:


calc -d 2/3

تنها این مقدار را چاپ خواهد کرد:


0.66666666666666666667

اجبار مقدار اولیه config("calc_debug")، config("resource_debug") و config("user_debug").

رشته‌های جداشده با : به عنوان اعداد صحیح ۳۲ بیتی علامت‌دار تفسیر می‌شوند. پس از علامت اختیاری آغازین، صفر ابتدایی نشان‌دهنده تبدیل هشت‌هشتی (octal)، و «0x» یا «0X» ابتدایی نشان‌دهنده تبدیل شانزده‌شانزدهی (hexadecimal) است. در غیر این صورت، تبدیل ده‌دهی (decimal) فرض می‌شود.

به‌طور پیش‌فرض، calc_debug برابر 0، resource_debug برابر 3 و user_debug برابر 0 است.

برای اطلاعات بیشتر از دستور calc زیر استفاده کنید:


help config

-e نادیده گرفتن تمام متغیرهای محیطی هنگام راه‌اندازی. با این وجود، تابع توکار getenv() همچنان مقادیر را برمی‌گرداند.
این پرچم معمولاً فقط همراه با اسکریپت‌های شل calc استفاده می‌شود.

این پرچم هنگام استفاده از calc در حالت اسکریپت شل الزامی است. باید در انتهای خط آغازین #! اسکریپت قرار گیرد، مانند:


#!/usr/bin/calc [optional_other_flags ...] -f

باقی فایل در حالت اسکریپت شل پردازش خواهد شد.

یک پرچم رایج که پیش از -f در خط #! استفاده می‌شود، پرچم -q است. برای مثال:


#!/usr/bin/calc -q -f

برای جزئیات بیشتر، بخش SHELL SCRIPT MODE در ادامهٔ این صفحهٔ راهنما را ببینید.

اگرچه شکل واقعی این پرچم به‌صورت زیر است:


-f filename

اما در سیستم‌هایی که یک فایل اجراییِ آغازشونده با #! را به عنوان اسکریپت در نظر می‌گیرند، مسیر فایل اجرایی توسط هسته به عنوان آرگومان نهایی به فراخوانی سیستمی exec() افزوده می‌شود. به همین دلیل پرچم -f در انتهای خط #! قرار می‌گیرد.

استفاده از -f filename در خط فرمان نیز امکان‌پذیر است:


calc [optional_other_flags ...] -f filename

این کار باعث می‌شود calc خطوط موجود در filename را در حالت اسکریپت شل پردازش کند.

نکته: استفاده از -f به‌معنای اعمال خودکار -q نیست و بنابراین برای غیرفعال کردن فایل‌های راه‌اندازی calc، باید از:


calc [optional_other_flags ...] -q -f filename

نیز استفاده شود.

استفاده از -f filename به معنای اعمال پرچم -s نیز هست.

چاپ پیام راهنما. این گزینه پرچم -q را نیز اعمال می‌کند. این معادل دستور help help در calc است. امکانات راهنما غیرفعال است مگر اینکه mode برابر با 5 یا 7 باشد. گزینهٔ -m را ببینید.
ورود به حالت تعاملی در صورت امکان. این پرچم باعث می‌شود که calc پس از ارزیابی آرگومان‌های calc_cmd در خط فرمان، وارد حالت تعاملی شود. بدون این پرچم، calc پس از ارزیابی آن‌ها خارج خواهد شد.

برای مثال:


calc 2+5

مقدار 7 را چاپ کرده و خارج می‌شود، در حالی که:


calc -i 2+5

مقدار 7 را چاپ کرده و از کاربر دستورهای بیشتری برای calc درخواست می‌کند.

این پرچم حالت دسترسی (permission mode) برنامهٔ calc را تعیین می‌کند و توانایی calc را در باز کردن فایل‌ها و اجرای برنامه‌ها کنترل می‌نماید. Mode می‌تواند عددی از 0 تا 7 باشد.

مقدار mode به شیوه‌ای مشابه با حالت مبنای هشت در chmod(1) تفسیر می‌شود:


0  هیچ فایلی باز نشود، هیچ برنامه‌ای اجرا نشود
1  هیچ فایلی باز نشود
2  فایل‌ها برای خواندن باز نشوند، هیچ برنامه‌ای اجرا نشود
3  فایل‌ها برای خواندن باز نشوند
4  فایل‌ها برای نوشتن باز نشوند، هیچ برنامه‌ای اجرا نشود
5  فایل‌ها برای نوشتن باز نشوند
6  هیچ برنامه‌ای اجرا نشود
7  همه چیز مجاز است (حالت پیش‌فرض)

اگر کسی بخواهد calc را با یک کاربر ممتاز (کاربر ریشه) اجرا کند، ممکن است بخواهد از -m 0 استفاده کند تا calc تا حدی امن‌تر شود.

بیت‌های حالت برای خواندن و نوشتن تنها هنگام باز کردن فایل (open) اعمال می‌شوند. فایل‌هایی که از قبل باز شده‌اند تحت تأثیر قرار نمی‌گیرند. بنابراین اگر کسی بخواهد از -m 0 برای ایمن‌تر کردن calc استفاده کند، اما همچنان قصد خواندن و نوشتن یک فایل مشخص را داشته باشد، می‌تواند در شل‌های شبهِ sh(1)، ksh(1) یا bash(1) به این صورت عمل کند:


calc -m 0 3<a.file

فایل‌هایی که بدین شکل به calc ارائه می‌شوند، در حالتی نامشخص باز هستند. Calc در صورت هدایت، برای خواندن یا نوشتن آن‌ها تلاش خواهد کرد.

اگر mode باز کردن فایل‌ها برای خواندن را غیرفعال کند، فایل‌های منابع راه‌اندازی نیز غیرفعال می‌شوند، گویی پرچم -q مشخص شده است. همچنین در صورتی که mode باز کردن فایل‌ها برای خواندن را غیرفعال کند، خواندن نگاشت کلیدها (key bindings) نیز غیرفعال می‌شود..TP -O استفاده از پیش‌فرض‌های کلاسیک قدیمی به‌جای پیکربندی پیش‌فرض. این پرچم تأثیری مشابه اجرای config("all", "oldcfg") در زمان راه‌اندازی دارد.

نکته: نسخه‌های قدیمی‌تر calc از -n برای تنظیم شکلی تغییریافته از پیکربندی پیش‌فرض calc استفاده می‌کردند. پرچم -n در حال حاضر هیچ کاری انجام نمی‌دهد. استفاده از پرچم -n اکنون منسوخ شده است و ممکن است در آینده برای منظور دیگری استفاده شود.

پردازش لوله‌ای (pipe) با استفاده از -p فعال می‌شود. برای مثال:


calc -p "2^21701-1" | fizzbin

در حالت لوله، calc اعلان دستوری (prompt) نمایش نمی‌دهد، فاصله‌های تب ابتدایی را چاپ نمی‌کند و سربرگ آغازین را چاپ نمی‌کند. پرچم -p بر پرچم -i مقدم است (آن را لغو می‌کند).

هنگام اجرای calc به‌عنوان یک اسکریپت شل (برای جزئیات بیشتر به بخش SHELL SCRIPT MODE مراجعه کنید)، calc در حین راه‌اندازی ورودی استاندارد (stdin) را خواهد بست، مگر اینکه پرچم -p در خط فرمان مشخص شده باشد. زمانی که calc در حالت اسکریپت شل اجرا می‌شود، اسکریپت‌های شلی که دستور توکار prompt(str) را فراخوانی می‌کنند به‌درستی کار نخواهند کرد (دستور توکار prompt همیشه ناموفق خواهد بود) مگر اینکه پرچم -p در خط فرمان مشخص شده باشد.

غیرفعال‌سازی خواندن اسکریپت‌های راه‌اندازی.

این گزینه اجازه می‌دهد تا اسکریپت مستقل از اسکریپت‌های راه‌اندازی (مانند مواردی که با متغیر محیطی $CALCRC مدیریت می‌شوند) اجرا شود. برای مثال، این گزینه استفاده از فایل مشترک calcrc (معمولاً ~/.calcrc) را غیرفعال می‌کند.

به‌طور پیش‌فرض، تمام آرگومان‌های calc_cmd ارزیابی و اجرا می‌شوند. این پرچم ارزیابی آن‌ها را غیرفعال کرده و در عوض آن‌ها را به‌صورت رشته‌هایی برای تابع توکار argv() در دسترس قرار می‌دهد.
غیرفعال‌سازی بافرسازی (buffering) ورودی استاندارد (stdin) و خروجی استاندارد (stdout).
چاپ شماره نسخه calc و خروج.
--
دو خط تیره به calc اعلام می‌کند که هیچ گزینه دیگری در ادامه نمی‌آید. بنابراین calc آرگومان‌های بعدی در خط فرمان را حتی اگر با یک خط تیره شروع شوند نادیده می‌گیرد. این قابلیت هنگام وارد کردن مقادیر منفی در خط فرمان مفید است، مانند:


calc -p -- -1 - -7

بدون آرگومان‌های calc_cmd، برنامه calc به‌صورت تعاملی عمل می‌کند. اگر یک یا چند آرگومان در خط فرمان مشخص شده باشند و پرچم -s داده نشده باشد، آنگاه calc آن‌ها را خوانده و اجرا می‌کند و بسته به اینکه پرچم -i مشخص شده باشد یا خیر، تلاش می‌کند به حالت تعاملی وارد شود یا خیر.

اگر پرچم -s داده شده باشد، calc هیچ‌یک از آرگومان‌های calc_cmd را ارزیابی نخواهد کرد، بلکه آن‌ها را به‌صورت رشته‌هایی برای تابع توکار argv() در دسترس قرار می‌دهد.

دستورات به‌اندازه کافی ساده و فاقد نویسه‌هایی مانند پرانتز، کروشه، نقطه‌ویرگول و «*» که در شل‌های یونیکس تفسیر خاصی دارند، می‌توانند احیاناً همراه با فاصله تا نویسه سطر بعد (newline) وارد شوند. برای مثال:


calc 23 + 47

مقدار 70 را چاپ خواهد کرد. با این حال، خط‌های فرمان زیر دچار مشکل خواهند شد:


calc 23 * 47

calc -23 + 47

مثال اول بالا با شکست مواجه می‌شود زیرا شل نویسه «*» را به‌عنوان تطبیق الگو با نام فایل‌ها (file glob) تفسیر می‌کند. مثال دوم با شکست مواجه می‌شود زیرا «-23» به‌عنوان یکی از گزینه‌های calc پنداشته می‌شود (که در واقع چنین نیست) و calc به آنچه که گزینه ناشناخته می‌داند اعتراض می‌کند. این موارد را معمولاً می‌توان با قرار دادن دستور در بین گیومه به شکل مورد انتظار به کار انداخت:


calc '23 * 47'

calc "print sqrt(2), exp(1)"

یا درون پرانتز و گیومه جهت جلوگیری از خط تیره‌های ابتدایی، مانند:


calc '(-23 + 47)'

همچنین می‌توان از دو خط تیره برای مشخص کردن پایان گزینه‌های calc استفاده کرد، مانند:


calc -- -23 + 47

calc -q -- -23 + 47

اگر قرار است از «!» برای مشخص کردن تابع فاکتوریل استفاده شود، در شل‌هایی مانند csh(1) که در آن‌ها «!» اگر پس از آن نویسه‌ای غیر از فاصله بیاید برای جایگزینی تاریخچه (history substitution) استفاده می‌شود، ممکن است لازم باشد یک فاصله درج شود یا از بک‌اسلش برای گریز از معنی خاص «!» بهره گرفته شود. برای مثال، دستور:


print 27!^2

ممکن است لازم باشد با دستور زیر جایگزین شود:


print 27! ^2    یا      print 27\!^2

خواندن از ورودی استاندارد زمانی که calc بخشی از یک پایپ (pipe) است، تا زمانی که پرچم -p به calc داده شود کار می‌کند. برای مثال، این دستور عبارت chongo was here را چاپ خواهد کرد:


echo chongo was here | calc -p 'print fgetline(files(0));'

در حالی که این دستور کار نخواهد کرد:


echo chongo was here | calc 'print fgetline(files(0));'

و این دستور نیز عبارت chongo was here را چاپ نخواهد کرد:


echo chongo was here | calc -i 'print fgetline(files(0));'

دلیل این است که بدون پرچم -p، تجزیه‌کننده تعاملی برای تلاش در تجزیه دستورات تعاملی، داده‌های ورودی استاندارد را پاک‌سازی (flush) می‌کند..PP

در حالت عادی هنگام راه‌اندازی، اگر متغیر محیطی $CALCRC تعریف نشده باشد و calc بدون پرچم -q فراخوانی شود، یا اگر $CALCRC تعریف شده باشد و calc با -e فراخوانی گردد، calc به دنبال فایل "startup" در دایرکتوری منابع calc، فایل .calcrc در دایرکتوری خانگی کاربر، و .calcinit در دایرکتوری جاری می‌گردد. اگر یک یا چند مورد از این فایل‌ها یافت شوند، به ترتیب به عنوان اسکریپت‌های calc خوانده شده و دستورهای آن‌ها اجرا می‌شوند. در صورت تعریف، $CALCRC باید شامل فهرستی از نام‌های فایل‌ها باشد که با ':' از هم جدا شده‌اند، و اگر calc در این حالت بدون هیچ‌یک از پرچم‌های -q یا -e فراخوانی شود، این فایل‌ها به ترتیب خوانده شده و دستورهای آن‌ها اجرا می‌گردند. در صورتی که فایلی از این فهرست پیدا نشود، هیچ وضعیت خطایی ایجاد نمی‌شود.

اگر حالت مشخص‌شده توسط -m باز کردن فایل‌ها را برای خواندن غیرفعال کند، خواندن فایل‌های راه‌اندازی نیز درست همانند حالتی که پرچم -q داده شده باشد، غیرفعال می‌شود.

اگر متغیر محیطی $CALCPATH تعریف نشده باشد، یا اگر تعریف شده باشد و calc با پرچم -e فراخوانی گردد، هنگامی که نام فایلی که با /، ~ یا ./ آغاز نمی‌شود، مانند نمونه زیر مشخص گردد:


calc read myfile

calc مسیرهای زیر را به ترتیب جستجو می‌کند:


./myfile
./myfile.cal
/usr/lib/myfile
/usr/lib/myfile.cal
/usr/share/calc/custom/myfile
/usr/share/calc/custom/myfile.cal

اگر فایل پیدا شود، جستجو متوقف شده و دستورهای درون فایل اجرا می‌گردند. اگر هیچ فایل قابل خواندنی با نام مشخص‌شده پیدا نشود، خطا محسوب می‌شود. می‌توان یک مسیر جستجوی جایگزین را با تعریف $CALCPATH به همان شیوه‌ای که PATH تعریف می‌شود، به صورت فهرستی از دایرکتوری‌ها که با ':' جدا شده‌اند، و سپس فراخوانی calc بدون پرچم -e مشخص کرد.

Calc با تمام فایل‌های باز، به جز stdin، stdout و stderr به عنوان فایل‌های در دسترس برای خواندن و نوشتن رفتار می‌کند. برای در اختیار گذاشتن یک فایل از پیش بازشده به calc با استفاده از شل‌های مشابه sh(1)، ksh(1) یا bash(1)، می‌توان چنین عمل کرد:


calc 3<open_file 4<open_file2

برای اطلاعات بیشتر از دستورهای calc زیر استفاده کنید:


help help
help overview
help usage
help environment
help config

اگر نخستین خط از یک فایل اجرایی با #! آغاز شود و به دنبال آن مسیر مطلق برنامه calc بیاید و خط نخست با گزینه -f پایان یابد، مانند:


#!/usr/bin/calc [optional_other_flags ...] -f

بقیه فایل در حالت اسکریپت شل (shell script mode) پردازش خواهد شد. توجه داشته باشید که -s -f باید در انتهای خط ابتدایی «#!» قرار گیرند. هرگونه optional_other_flags اختیاری دیگر باید پیش از گزینه -f بیاید.

در حالت اسکریپت شل (shell script mode) محتویات فایل خوانده و اجرا می‌شوند درست گویی در فایلی قرار دارند که توسط دستور read پردازش می‌شود، به جز اینکه هر «دستوری» که با '#' و به دنبال آن نویسه فاصله (whitespace) آغاز شود و به خط جدید بعدی ختم گردد، به عنوان یک یادداشت (comment) در نظر گرفته می‌شود. هرگونه optional_other_flags اختیاری ابتدا پردازش می‌شود و در ادامه خطوط بعدی درون خود اسکریپت اجرا خواهند شد.

در حالت اسکریپت شل (shell script mode)، گزینه -s همواره پیش‌فرض در نظر گرفته می‌شود. افزون بر این، در صورتی که -i مشخص نشده باشد، -d و -p به‌طور خودکار تنظیم می‌شوند.

نکته: استفاده از -f به معنای اعمال -q نیست و بنابراین لازم است از ساختار زیر استفاده شود:


calc [optional_other_flags ...] -q -f filename

تا استفاده از فایل‌های راه‌اندازی calc نیز غیرفعال گردد.

برای نمونه، اگر فایل /tmp/mersenne:


#!/usr/bin/calc -q -f
/* setup */
argc = argv();
program = argv(0);
stderr = files(2);
/* parse args */
if (argc != 2) {
    fprintf(stderr, "usage: %s exp0, program);
    abort "must give one exponent arg";
}
exp = eval(argv(1));
if (!isint(exp) || exp < 0) {
    fprintf(stderr, "%s: exp must be non-negative integer0, program);
    abort "must give one exponent arg";
}
/* print the mersenne number */
print "2^": exp : "-1 =", 2^exp-1;

با دستور زیر به یک فایل اجرایی تبدیل شود:


chmod +x /tmp/mersenne

آنگاه خط فرمان:


/tmp/mersenne 127

خروجی زیر را چاپ خواهد کرد:


2^127-1 = 170141183460469231731687303715884105727

توجه داشته باشید از آنجا که -s در حالت اسکریپت شل (shell script mode) الزامی است، آرگومان‌های بدون خط تیره از طریق تابع توکار argv() به‌صورت رشته در دسترس قرار می‌گیرند. بنابراین:


2^eval(argv(1))-1

مقدار ده‌دهی 2^n-1 را چاپ خواهد کرد در حالی که:


2^argv(1)-1

چنین نخواهد کرد.

به‌طور پیش‌فرض، هنگام راه‌اندازی calc در حالت اسکریپت شل (shell script mode)، برنامه calc ورودی استاندارد (stdin) را خواهد بست. بنابراین توابع توکاری مانند prompt(str) با شکست مواجه می‌شوند (یک مقدار null برمی‌گردانند). اسکریپت‌های شل calc که تابع توکار prompt(str) را فراخوانی می‌کنند به درستی کار نخواهند کرد (تابع توکار prompt همواره با شکست مواجه می‌شود و مقدار null برمی‌گرداند)، مگر اینکه پرچم -p در خط فرمان مشخص شده باشد.

اسکریپت شل زیر همواره عبارت "got null" را چاپ خواهد کرد زیرا stdin هنگام راه‌اندازی توسط calc بسته خواهد شد:


#!/usr/bin/calc -q -f
# The prompt will ALWAYS FAIL and return a null value
n = prompt("Test> ");
if (isnull(n)) {
  print("got null");
} else {
  print("got " + n);
}

با این حال، اسکریپت شل زیر (به -p پیش از -f در خط اول توجه کنید) تعاملی خواهد بود، اعلان "Test> " را نشان می‌دهد و نتیجه "got" را طبق انتظار چاپ خواهد کرد:


#!/usr/bin/calc -q -p -f
n = prompt("Test> ");
if (isnull(n)) {
  print("got null");
} else {
  print("got " + n);
}

توجه داشته باشید در مثال بالا، گزینه -p باید پیش از گزینه نهایی خط فرمان یعنی -f قرار گیرد..PP

انواع دادهٔ توکار و بنیادین شامل اعداد صحیح، اعداد حقیقی، اعداد گویا، اعداد مختلط و رشته‌ها هستند.

با استفاده از یک شیء (object)، می‌توان انواع داده با پیچیدگی دلخواه را تعریف نمود. می‌توان نحوهٔ رفتار چنین اشیائی را در طیف گسترده‌ای از عملیات‌ها مانند جمع، تفریق، ضرب، تقسیم، منفی‌سازی، مربع کردن، باقی‌مانده (modulus)، گرد کردن، توان‌رسانی، برابری، مقایسه، چاپ و غیره مشخص کرد.

برای اطلاعات بیشتر از دستورهای calc زیر استفاده کنید:


help types
help obj
show objfuncs

متغیرها در calc بدون نوع (typeless) هستند. به بیان دیگر، نوع بنیادین یک متغیر با محتوای آن تعیین می‌شود. پیش از آن‌که مقداری به یک متغیر انتساب داده شود، مقدار آن برابر با صفر است.

حوزهٔ دید (scope) یک متغیر می‌تواند سراسری (global)، محلی برای یک فایل، یا محلی برای یک رویه (procedure) باشد. مقادیر را می‌توان در یک ماتریس یا در فهرستی که امکان انجام عملیات‌هایی به سبک پشته (stack) و صف (queue) را فراهم می‌کند، گروه‌بندی کرد.

برای اطلاعات بیشتر از دستورهای calc زیر استفاده کنید:


help variable
help mat
help list
show globals

پیشوند “0x” بیانگر یک مقدار در مبنای شانزده (هگزادسیمال)، پیشوند “0b” بیانگر یک مقدار دودویی (باینری)، و پیشوند “0” که به دنبال آن یک رقم بیاید بیانگر یک مقدار در مبنای هشت (اکتال) است. اعداد مختلط با یک “i” در انتها مشخص می‌شوند، مانند “3+4i”. رشته‌ها می‌توانند با یک جفت نقل‌قول تکی یا دوتایی محصور شوند. به‌طور پیش‌فرض، calc مقادیر را به گونه‌ای چاپ می‌کند که گویی اعداد ممیز شناور هستند. می‌توان این حالت پیش‌فرض را تغییر داد تا مقادیر در چندین حالت مختلف از جمله کسری، صحیح و نمایی چاپ شوند.

تعدادی عملیات ورودی/خروجی فایل مشابه با کتابخانهٔ stdio ارائه شده است. می‌توان فایل‌ها را باز کرد، خواند، نوشت، در آن‌ها پیمایش (seek) کرد و آن‌ها را بست. نام فایل‌ها به شیوه‌ای شبیه به Korn Shell یا C-Shell، مشمول بسط “ ” به دایرکتوری‌های خانگی می‌شوند.

برای مثال:


~/.calcrc
~chongo/lib/fft_multiply.cal

برای اطلاعات بیشتر از دستور calc زیر استفاده کنید:


help file

زبان calc یک زبان شبه-C است. این زبان شامل دستورهایی مانند اعلان متغیرها، عبارات، شرط‌ها (tests)، برچسب‌ها، حلقه‌ها، عملیات‌های فایل و فراخوانی توابع است. این دستورها شباهت بسیار زیادی به همتایان خود در C دارند.

این زبان همچنین شامل تعدادی دستور اختصاصی برای خودِ calc است. این موارد شامل دستورهایی همچون تعریف تابع، راهنما (help)، خواندن فایل‌های منبع (resource files)، تخلیه اطلاعات در یک فایل، اعلان خطا، کنترل پیکربندی و وضعیت هستند.

برای اطلاعات بیشتر از دستورهای calc زیر استفاده کنید:


help command
help statement
help expression
help operator
help config

/usr/bin/calc
فایل اجرایی calc
/usr/bin/cscript/*
اسکریپت‌های شل calc
/usr/lib/*.cal
فایل‌های منبع استاندارد calc
/usr/lib/help/*
فایل‌های راهنما
/usr/lib/bindings
نگاشت‌های کلید ویرایشگر خط فرمان غیر GNU-readline
/usr/include/calc/*.h
فایل‌های سرآیند (include) برای استفاده در رابط C
/usr/lib/libcalc.a
کتابخانه پیوند باینری calc
/usr/lib/libcustcalc.a
کتابخانه پیوند باینری سفارشی
/usr/share/calc/custom/*.cal
فایل‌های منبع سفارشی
/usr/share/calc/custhelp/*
فایل‌های راهنمای سفارشی

فهرستی از دایرکتوری‌ها که با «:» از یکدیگر جدا شده‌اند و برای جستجوی نام فایل‌های منبع calc که با /، ./ یا ~ آغاز نمی‌شوند به کار می‌رود.

اگر این متغیر تنظیم نشده یا خالی باشد، calc ابتدا $XDG_DATA_HOME و $XDG_CONFIG_HOME را بررسی می‌کند. چنانچه هر دوی آن‌ها به دایرکتوری‌های مطلق و قابل استفاده اشاره کنند، calc به ترتیب در این مسیرها به جستجو می‌پردازد:


${XDG_DATA_HOME}/calc
${XDG_CONFIG_HOME}/calc
${CALC_SHAREDIR}
/usr/share/calc/custom

اگر هیچ‌یک از دایرکتوری‌های XDG قابل استفاده نباشد، جایگزین پیش‌فرض کامپایل‌شده معمولاً عبارت است از:


~/.cal
${CALC_SHAREDIR}
/usr/share/calc/custom

در هنگام راه‌اندازی (مگر اینکه -h یا -q در خط فرمان مشخص شده باشد)، calc فایل‌ها را در طول این متغیر محیطیِ جدا شده با «:» جستجو می‌کند.

اگر این متغیر تنظیم نشده یا خالی باشد، calc ابتدا $XDG_CONFIG_HOME را بررسی می‌کند. چنانچه به یک دایرکتوری مطلق و قابل استفاده اشاره کند، calc به ترتیب در این مسیرها جستجو می‌کند:


${XDG_CONFIG_HOME}/calc/calcrc
${CALC_SHAREDIR}/startup

اگر $XDG_CONFIG_HOME قابل استفاده نباشد، جایگزین کامپایل‌شده معمولاً عبارت است از:


~/.calcrc
${CALC_SHAREDIR}/startup

در هنگام راه‌اندازی (مگر اینکه -h یا -q در خط فرمان مشخص شده باشد، یا -m باز کردن فایل‌ها را برای خواندن منع کرده باشد)، calc نگاشت‌های کلید (key bindings) را از نام فایل مشخص‌شده توسط این متغیر محیطی می‌خواند. فایل نگاشت‌های کلید در طول فهرست دایرکتوری‌های $CALCPATH جستجو می‌شود.

مقدار پیش‌فرض: binding

در صورتی که calc با پشتیبانی از GNU-readline کامپایل شده باشد، از این متغیر استفاده نمی‌شود. در این حالت، سازوکارهای استاندارد readline (رجوع کنید به readline(3)) به کار می‌روند.

مکان فایل تاریخچهٔ calc.

اگر این متغیر تنظیم نشده یا خالی باشد، calc ابتدا از یک فایل موجود ~/.calc_history استفاده می‌کند. در غیر این صورت، calc متغیر $XDG_STATE_HOME را بررسی می‌کند. چنانچه به یک دایرکتوری مطلق، قابل استفاده و قابل نوشتن اشاره کند، مقدار مؤثر عبارت است از:


${XDG_STATE_HOME}/calc/history

اگر هیچ‌کدام اعمال نشود، مقدار جایگزین عبارت است از:


~/.calc_history

در صورتی که calc با پشتیبانی از GNU-readline کامپایل شده باشد، از این متغیر استفاده نمی‌شود.

مکان دایرکتوری راهنمای calc.

مقدار پیش‌فرض: /usr/share/calc/help

مکان دایرکتوری راهنمای سفارشی calc.

مقدار پیش‌فرض: /usr/share/calc/custhelp

هنگامی که CALCPATH، CALCRC و CALCHISTFILE تنظیم نشده یا خالی باشند، calc همان‌طور که در بالا توضیح داده شد از «مشخصات دایرکتوری پایه XDG» پیروی می‌کند.

می‌توانید این مکان‌ها را با تنظیم صریح متغیرهای محیطی calc بازنویسی کنید. برای نمونه، جهت بازگرداندن پیش‌فرض‌های قدیمی و معمول در یک نصب متعارف یونیکس:


export CALCRC="./.calcinit:$HOME/.calcrc:/usr/share/calc/startup"
export CALCPATH=".:./cal:$HOME/.cal:/usr/share/calc:/usr/share/calc/custom"
export CALCHISTFILE="$HOME/.calc_history"

برای اطلاعات بیشتر دربارهٔ «مشخصات دایرکتوری پایه XDG» ببینید:


https://specifications.freedesktop.org/basedir/latest

توجه داشته باشید که calc تلاش خواهد کرد دایرکتوری والد $CALCHISTFILE را ایجاد کند. اگر این کار کافی نباشد، چنانچه مسیری را به فایلی که هنوز وجود ندارد انتخاب کرده‌اید، ممکن است نیاز باشد برای سازوکار تاریخچه دستور زیر را اجرا کنید:


mkdir -p $(dirname $CALCHISTFILE)

بخش عمدهٔ calc توسط David I. Bell نوشته شده است.

آینهٔ اصلی (primary mirror) calc و پردازش گزارش‌های باگ calc توسط Landon Curt Noll انجام می‌شود.

‏Landon Curt Noll نگهداری از کد منبع مرجع اصلی (master reference source)، امور مربوط به کنترل انتشار و همچنین سایر وظایف نگهداری calc را بر عهده دارد.

با تشکر از پیشنهادها و دلگرمی‌های Peter Miller، Neil Justusson و Landon Noll.

با تشکر از Stephen Rothwell برای نوشتن نسخهٔ اصلی hist.c که برای ویرایش خط فرمان به کار می‌رود.

با تشکر از Ernest W. Bowen برای ارائهٔ بهبودهای فراوان در دقت و جامعیت برخی توابع عددی. بخش اعظمی از این موارد به صورت کدهای واقعی ارائه شد که با کمال سپاسگزاری پذیرفته شدند. همچنین Ernest متن اصلی بسیاری از فایل‌های راهنما را فراهم کرد.

بخش‌هایی از این برنامه برگرفته از مجموعهٔ قدیمی‌تری از روتین‌های محاسباتی با دقت دلخواه و در مالکیت عمومی (public domain) است که حوالی سال ۱۹۸۴ در اینترنت منتشر شده بود. در حال حاضر، تقریباً هیچ کد قابل تشخیصی از آن منبع اولیه باقی نمانده است.

‏Calc یک نرم‌افزار آزاد است و تحت نسخهٔ 2.1 از پروانهٔ عمومی همگانی کاهش‌یافتهٔ گنو (GNU Lesser General Public License) منتشر شده است. تغییر آن و/یا توزیع نسخه‌هایی از آن تحت شرایط مشخصی برای شما مجاز و آزاد است. دستورهای calc:


help copyright
help copying
help copying-lgpl
help credit

باید محتویات فایل‌های COPYING و COPYING-LGPL را نمایش دهند. این فایل‌ها حاوی اطلاعاتی در مورد مجوز GNU Lesser General Public License برنامهٔ calc و به‌ویژه شرایطی هستند که تحت آن‌ها مجاز به تغییر آن و/یا توزیع نسخه‌هایی از آن می‌باشید.

شما باید رونوشتی از نسخهٔ 2.1 پروانهٔ عمومی همگانی کاهش‌یافتهٔ گنو را دریافت کرده باشید. اگر این فایل‌ها را ندارید، به نشانی زیر مکاتبه کنید:


Free Software Foundation, Inc.
51 Franklin Street
Fifth Floor
Boston, MA  02110-1301
USA

حق نشر (کپی‌رایت) Calc به چندین شیوهٔ مختلف ثبت شده است. این شیوه‌ها شامل موارد زیر است:


Copyright (C) year  David I. Bell
Copyright (C) year  David I. Bell and Landon Curt Noll
Copyright (C) year  David I. Bell and Ernest Bowen
Copyright (C) year  David I. Bell, Landon Curt Noll and Ernest Bowen
Copyright (C) year  Landon Curt Noll
Copyright (C) year  Ernest Bowen and Landon Curt Noll
Copyright (C) year  Ernest Bowen
Copyright (C) year  Petteri Kettunen and Landon Curt Noll
Copyright (C) year  Christoph Zurnieden
Copyright (C) year  Landon Curt Noll and Thomas Jones-Low
Copyright (C) year  Klaus Alexander Seistrup and Landon Curt Noll

تعداد معدودی از فایل‌ها در calc تحت مجوز «The Unlicense» قرار دارند. برای اطلاعات بیشتر در مورد این پروانه، نشانی زیر را ببینید:


https://unlicense.org

برای مطرح کردن پرسش‌های عمومی دربارهٔ calc با نگه‌دارندگان آن، خروجی دستور calc زیر را مشاهده کنید:


; help question

یا فایل منبع زیر را بخوانید:


QUESTIONS

یا نشانی اینترنتی زیر را ببینید:


https://github.com/lcn2/calc/blob/master/QUESTIONS

برای اطلاع دادن یک باگ به نگه‌دارندگان calc یا ارسال اصلاحیهٔ باگ، خروجی دستور calc زیر را مشاهده کنید:


; help bugs

یا فایل منبع زیر را بخوانید:


BUGS

یا به نشانی اینترنتی زیر مراجعه کنید:


https://github.com/lcn2/calc/blob/master/BUGS

Calc یک نرم‌افزار متن‌باز است. می‌توانید در کد calc مشارکت کنید یا اصلاحیه‌های باگ را برای calc ارسال نمایید.

برای مشارکت در کد calc، لطفاً خروجی دستور calc زیر را مشاهده کنید:


; help contrib

یا فایل منبع زیر را بخوانید:


CONTRIB-CODE

یا به نشانی اینترنتی زیر مراجعه کنید:


https://github.com/lcn2/calc/blob/master/CONTRIB-CODE

Landon Noll وب‌سایت calc را نگه‌داری می‌کند که در نشانی زیر قرار دارد:


www.isthe.com/chongo/tech/comp/calc

آخرین نسخه از کد منبع calc را می‌توان از مخزن GitHub زیر دریافت کرد:


https://github.com/lcn2/calc

تازه‌ترین کد منبع calc در رأس شاخهٔ master قرار دارد.

می‌توانید انتشارهای calc را از نشانی زیر بارگیری کنید:


https://github.com/lcn2/calc/releases

انتشارهایی که با ((Pre-release)) مشخص شده‌اند، نسخه‌های بتا هستند.

جدیدترین انتشاری که با ((Pre-release)) مشخص نشده است، نسخهٔ پایدار پیشنهادی است.

^..^ Share and enjoy! :-)