.ds lang COBOL .ds gcobol فرانت‌اند GCC\ \*[lang] .ds isostd ISO/IEC 1989:2023 .Dd \& February 2025 .Dt GCOBOL 1\& "GCC \*[lang] Compiler" .Os Linux .Sh "نام (NAME)" .\" gcobol \- کامپایلر کوبول پروژه گنو .Nm gcobol .Nd کامپایلر کوبول پروژه گنو .Sh "خلاصه دستور (SYNOPSIS)" .Nm .Op Fl D Ns Ar name Ns Oo Li = Ns Ar value Oc .Op Fl E .Op Fl fdefaultbyte Ns Li = Ns Ar value .Op Fl fsyntax-only .Op Fl I Ns Ar copybook-path .Op Fl fmax-errors Ns Li = Ns Ar nerror .Oo .Fl nomain | .Fl main Ar filename | .Fl main Ns Li = Ns Ar filename .Fl main Ns Li = Ns Ar filename:program-id .Oc .Op Fl fcobol-exceptions Ar exception Ns Op Ns \/, Ns Ar exception Ns ... .Op Fl copyext Ar ext .Op Fl ffixed-form | Fl ffree-form .Op Fl findicator-column .Op Fl fexec-charset= Ns Ar encoding .Op Fl fexec-national-charset= Ns Ar encoding .ig .Op Fl collseq Ar encoding Ns \/, Fl ncolseq Ar encoding .. .Op Fl dialect Ar dialect-name .Op Fl include Ar filename .Op Fl preprocess Ar preprocess-filter .Op Fl fflex-debug .Op Fl fyacc-debug .\" warnings .Op Fl Wno-apply-commit .Op Fl Wno-file-code-set .Op Fl Wno-high-order-bit .Op Fl Wno-bad-line-directive .Op Fl Wno-bad-numeric .Op Fl Wno-binary-long-long .Op Fl Wno-call-giving .Op Fl Wno-call-literal .Op Fl Wno-cdf-dollar .Op Fl Wno-cdf-invalid-parameter .Op Fl Wno-cdf-name-not-found .Op Fl Wno-cobol-eject .Op Fl Wno-cobol-resume .Op Fl Wno-cobol-volatile .Op Fl Wno-comp-6 .Op Fl Wno-comp-x .Op Fl Wno-copybook-found .Op Fl Wno-ec-unknown .Op Fl Wno-entry-convention .Op Fl Wno-iconv-error .Op Fl Wno-include-file-found .Op Fl Wno-include-file-not-found .Op Fl Wno-inspect-trailing .Op Fl Wno-length-of .Op Fl Wno-level-1-occurs .Op Fl Wno-level-78 .Op Fl Wno-level-78-defined .Op Fl Wno-literal-concat .Op Fl Wno-locale-error .Op Fl Wno-move-corresponding .Op Fl Wno-move-index .Op Fl Wno-move-pointer .Op Fl Wno-nllanginfo-error .Op Fl Wno-operator-space .Op Fl Wno-preprocessor-error .Op Fl Wno-procedure-not-found .Op Fl Wno-procedure-pointer .Op Fl Wno-replace-error .Op Fl Wno-returning-number .Op Fl Wno-segment-error .Op Fl Wno-segment-negative .Op Fl Wno-stop-number .Op Fl Wno-stray-indicator .Op Fl Wno-usage-typename .Op Fl Wno-recording-mode .Op Fl Wno-set-locale-to .Op Fl Wno-set-to-locale .Ar filename Op ... . .Sh "توضیحات (DESCRIPTION)" .Nm کد منبع \*[lang] را به کد شیء کامپایل می‌کند و به صورت اختیاری یک پرونده باینری اجرایی یا شیء مشترک (shared object) تولید می‌نماید. به عنوان یکی از اجزای GCC، تمام گزینه‌هایی را که بر تولید کد و پیونددهی اثر می‌گذارند می‌پذیرد. گزینه‌های اختصاصی \*[lang] در ادامه فهرست شده‌اند. .Sh "گزینه‌ها (OPTIONS)" .Bl -tag -width "\0\0debug" .It Fl main Ar filename کامپایلر .Nm یک تابع .Fn main را به عنوان نقطه ورود ایجاد می‌کند که نخستین PROGRAM-ID را در .Ar filename فراخوانی می‌نماید. .Pp گزینه .Fl main حالت پیش‌فرض است. هنگامی که هیچ‌یک از گزینه‌های .Fl nomain ، .Fl c یا .Fl shared وجود نداشته باشند، یک گزینه .Fl main ضمنی پیش از نام نخستین پرونده منبع در خط فرمان درج می‌شود. .It Fl main Ns Li = Ns Ar filename ماژول شیء .o برای .Ar filename شامل یک نقطه ورود .Fn main خواهد بود که نخستین PROGRAM-ID را در .Ar filename فراخوانی می‌کند. .It Fl main Ns Li = Ns Ar filename:program-id ماژول شیء .o برای .Ar filename شامل یک نقطه ورود .Fn main خواهد بود که نقطه ورود .Ar program-id را فراخوانی می‌نماید. .It Fl nomain هیچ نقطه ورود .Fn main توسط این کامپایل ایجاد نخواهد شد. گزینه .Fl nomain با .Fl main ناسازگار است و در صورت استفاده از .Fl shared به طور ضمنی اعمال می‌شود. همچنین در صورت عدم وجود .Fl main ، توسط .Fl c نیز به طور ضمنی در نظر گرفته می‌شود. .Pp برای نمونه‌هایی از کاربرد .Fl main و .Fl nomain به بخش‌های پایین‌تر مراجعه کنید. .It Fl D Ar name Ns Op Li = Ns Ar expr یک نام CDF (برای استفاده با .Sy >>IF Ns ) تعریف می‌کند تا مقدار .Ar expr را داشته باشد. .It Fl E ورودی \*[lang] پردازش‌شده توسط CDF را در .Em "قالب مرجع فرم‌آزاد (free-form reference format)" در خروجی استاندارد می‌نویسد. برخی نشانگرهای غیر-\*[lang] در خروجی گنجانده می‌شوند تا نشان دهند فایل‌های copybook در کجا درج شده‌اند. برای یکدستی شماره خطوط با ورودی، خطوط خالی حفظ می‌شوند. .Pp برخلاف کامپایلر C، این گزینه مانع از کامپایل نمی‌شود. برای جلوگیری از کامپایل، گزینه .D1 Fl Sy fsyntax-only را نیز همراه آن به کار ببرید. .It Fl fdefaultbyte Ns Li = Ns Ar value از .Ar value ، عددی بین 0 تا 255، به عنوان مقدار پیش‌فرض برای تمام اقلام داده WORKING-STORAGE که فاقد بند VALUE هستند استفاده می‌کند. به طور پیش‌فرض، اقلام داده الفبایی-عددی با فاصله خالی و اقلام داده عددی با صفر مقداردهی اولیه می‌شوند. این گزینه مقدار پیش‌فرض را با .Ar value جایگزین می‌کند. .It Fl fsyntax-only تنها تجزیه‌کننده (parser) را فراخوانی می‌کند. کد را برای یافتن خطاهای نحوی بررسی می‌کند، اما فراتر از آن عملی انجام نمی‌دهد. .It Fl copyext Ar ext برای دستورالعمل CDF به صورت .D1 COPY Ar name چنانچه .Ar name بدون گیومه باشد، چندین حالت مختلف از .Ar name آزموده می‌شود، همان‌طور که در زیر در بخش .Xr Copybooks توضیح داده شده است. گزینه .Fl copyext نام‌های جستجوشده را گسترش می‌دهد تا .Ar ext را نیز شامل شوند. اگر .Ar ext کاملاً با حروف بزرگ یا کاملاً با حروف کوچک باشد، هر دو حالت آزموده می‌شوند و اولویت با حالتی است که ارائه شده است. اگر .Ar ext ترکیبی از حروف بزرگ و کوچک باشد، تنها همان نسخه آزموده می‌شود. برای نمونه، با .D1 Fl copyext Ar .abc در صورت وجود دستورالعمل CDF به صورت .D1 COPY name کامپایلر .Nm نام‌های .Ql name.abc و .Ql name.ABC را به ترتیب به نام‌های احتمالی جستجو اضافه می‌کند. .It Fl ffixed-form استفاده از .Em "قالب مرجع فرم‌ثابت (fixed-form reference format)" سخت‌گیرانه در خواندن ورودی \*[lang]: خطوط 72 کاراکتری، با ناحیه توالی 6 کاراکتری و یک ستون نشانگر. داده‌های پس از ستون 72 نادیده گرفته می‌شوند. .It Fl ffree-form ورودی \*[lang] را وادار می‌کند تا به عنوان .Em "قالب مرجع فرم‌آزاد (free-form reference format)" تفسیر شود. شکستن خطوط بی‌اهمیت است، جز اینکه .Ql * در ابتدای خط به عنوان نشانگر توضیح عمل می‌کند. معادل است با .Fl indicator-column Ar 0 Ns Li . . .It Fl findicator-column محل ناحیه نشانگر (Indicator Area) را در یک پرونده \*[lang] در .Em "قالب مرجع (Reference Format)" شرح می‌دهد، جایی که ۶ ستون اول \(em موسوم به .Dq "ناحیه شماره توالی" \(em نادیده گرفته می‌شوند و ستون هفتم \(em ناحیه نشانگر \(em می‌تواند حاوی کاراکتری با اهمیت برای کامپایلر باشد. .Pp اگرچه .Em "قالب مرجع" به معنای دقیق کلمه، داده‌های پس از ستون ۷۲ را نادیده می‌گیرد، با این گزینه .Nm خطوط طولانی \*[lang] را می‌پذیرد که گاه به عنوان .Em "قالب منبع گسترش‌یافته (extended source format)" شناخته می‌شود. متن پس از ستون ۷۲ به عنوان متن عادی \*[lang] در نظر گرفته می‌شود. (با این حال، ادامه خط تا زمانی معتبر است که متنی .Em پس از ستون ۷۲ ظاهر نشود.) .Pp هیچ حداکثری برای طول خط وجود ندارد. بدون توجه به قالب کد منبع، کل برنامه می‌تواند در یک خط قرار گیرد. .Pp به طور پیش‌فرض، .Nm قالب کد منبع را با بررسی خطی که حاوی عبارت "program-id" است به صورت خودکار تشخیص می‌دهد. هرگاه کاراکترهایی پس از ستون ۷۲ در آن خط وجود داشته باشد، فرض می‌شود پرونده در .Em "قالب منبع گسترش‌یافته" است و ناحیه نشانگر در ستون ۷ قرار دارد. در غیر این صورت، ستون‌های ۱ تا ۶ بررسی می‌شوند. اگر این کاراکترها همگی رقم یا فاصله خالی باشند، فرض می‌شود پرونده در .Em "قالب مرجع فرم‌ثابت" است، باز هم با نشانگر در ستون ۷. اگر به عنوان .Em "قالب مرجع فرم‌ثابت" یا .Em "قالب منبع گسترش‌یافته" تشخیص داده نشود، فرض می‌شود پرونده در .Em "قالب مرجع فرم‌آزاد" است. .Pp . .It Fl fcobol-exceptions Ar exception Op Ns , Ns Ar exception Ns ... به طور پیش‌فرض هیچ شرط خطایی (از جمله خطاهای مهلک) فعال نیست و طبق استاندارد ISO، شرایط خطا تنها از طریق دستورالعمل CDF موسوم به .Sy "TURN" فعال می‌شوند. این گزینه یک یا چند شرط خطا را به طور پیش‌فرض فعال می‌کند، گویی دستور .Sy TURN در بالای نخستین پرونده کد منبع آمده است. این گزینه همچنین می‌تواند بیش از یک بار در خط فرمان ظاهر شود. .Pp مقدار .Ar exception نام یک شرط خطای سطح ۱، ۲ یا ۳ است، همان‌طور که در \*[isostd] شرح داده شده است. .Ql EC-ALL به معنای فعال‌سازی تمام شرایط خطا است. .Pp شکل .Fl fno-cobol-exceptions شرط .Ar exception را غیرفعال می‌کند، دقیقاً به گونه‌ای که گویی دستور .D1 >>TURN Ar exception CHECKING OFF درج شده باشد. .Pp همه شرایط خطا پیاده‌سازی نشده‌اند. هر موردی که پیاده‌سازی نشده باشد یک پیام هشدار تولید می‌کند. . .It Fl fmax-errors Ns Li = Ns Ar nerror .Ar nerror بیانگر تعداد پیام‌های خطای تولیدشده است. بدون این گزینه، .Nm تلاش می‌کند با از سرگیری کامپایل در دستور بعدی، از یک خطای نحوی بازیابی شود و تا انتهای پرونده ادامه دهد. با این گزینه، .Nm پیام‌ها را با تولید شدن شمارش کرده و با رسیدن به .Ar nerror متوقف می‌شود. .It Fl fstatic-call Ns , Fl fno-static-call با .Fl fno-static-call ، کامپایلر .Nm هرگز از پیونددهی ایستا (static linking) برای .D1 Sy CALL Ar program استفاده نمی‌کند. به طور پیش‌فرض یا با .Fl fstatic-call ، اگر .Ar program یک لیترال الفبایی-عددی باشد، .Nm از پیونددهی ایستا استفاده می‌کند؛ به این معنا که کامپایلر یک نماد خارجی .Ar program برای پیونددهنده تولید می‌کند تا آن را حل کند. (در آینده این قابلیت با اقلام داده .Sy CONSTANT نیز کار خواهد کرد.) با پیونددهی ایستا، اگر .Ar program توسط ماژول کد منبع یا پرونده شیء یا کتابخانه دیگری در زمان ساخت ارائه نشود، پیونددهنده خطای .Dq "نماد حل‌نشده (unresolved symbol)" تولید خواهد کرد. با .Fl fno-static-call ، کامپایلر .Nm همواره از پیونددهی پویا استفاده می‌کند. .Pp این گزینه دستور .Sy CALL را تنها برای لیترال‌ها تحت تأثیر قرار می‌دهد. اگر .Ar program یک قلم داده غیرثابت باشد، همواره با استفاده از پیونددهی پویا توسط .Xr dlsym 3 حل می‌شود، زیرا مقدار آن در زمان اجرا تعیین می‌گردد. . .It Fl fexec-charset= Ns Ar encoding مجموعه کاراکترهای اجرایی پیش‌فرض را برای اقلام داده و لیترال‌های الفبایی-عددی در صورت عدم وجود .Sy "CHARACTER CLASSIFICATION" در .Sy "CONFIGURATION SECTION" تنظیم می‌کند. .Ar encoding نام یک کدگذاری است همان‌گونه که توسط .Xr iconv 3 تعریف شده است. مگر اینکه خلاف آن مشخص شده باشد، کدگذاری زمان اجرا برای هر دو حالت الفبایی-عددی و NATIONAL برابر با .Sy CP1252 تعریف‌شده در .Xr iconv 3 است. . .It Fl fexec-national-charset= Ns Ar encoding مجموعه کاراکترهای اجرایی پیش‌فرض را برای اقلام داده و لیترال‌های NATIONAL در صورت عدم وجود .Sy "CHARACTER CLASSIFICATION" در .Sy "CONFIGURATION SECTION" تنظیم می‌کند. .Ar encoding نام یک کدگذاری است همان‌گونه که توسط .Xr iconv 3 تعریف شده است. برای استفاده از کدگذاری EBCDIC برای اقلام داده، برای نمونه می‌توان از .D1 Fl fexec-national-charset= Ns Li CP1140 استفاده کرد. . .It Fl dialect Ar dialect-name به طور پیش‌فرض، .Nm نحو \*[lang] را همان‌طور که توسط \*[isostd] تعریف شده می‌پذیرد، به همراه برخی افزونه‌ها برای سازگاری عقبرو با COBOL-85. نحوهای بیشتر با این گزینه پشتیبانی می‌شوند. مقدار .Ar dialect-name می‌تواند یکی از موارد زیر باشد: .Bl -tag .It ibm برای مشخص کردن نحو IBM COBOL 6.4: .Bl -bullet -compact .It .Sy EJECT .It .Sy EQUAL به عنوان عملگر انتساب .It .Sy "LENGTH OF" .It .Sy "PROCEDURE POINTER" .It قطعه (segment) در .Sy SECTION .It .Sy STOP .It .Sy VOLATILE .It ثبات‌های اختصاصی هر برنامه: .Bl -tag -compact -width XML-NNAMESPACE-PREFIX .\" .It Sy JSON-CODE .\" S9(9) .\" .It Sy JSON-STATUS .\" S9(9) .It Sy RETURN-CODE S9(4) .It Sy SORT-CONTROL X(160) .It Sy SORT-CORE-SIZE S9(8) .It Sy SORT-FILE-SIZE S9(8) .It Sy SORT-MESSAGE X(8) .It Sy SORT-MODE-SIZE S9(5) .It Sy SORT-RETURN S9(4) .It Sy TALLY 9(5) .It Sy WHEN-COMPILED X(16) .It Sy XML-CODE S9(9) .It Sy XML-EVENT X(30) .It Sy XML-INFORMATION S9(9) .It Sy XML-NAMESPACE X(0) تا X(32,768) .It Sy XML-NNAMESPACE N(0) تا N(16,384) .It Sy XML-NAMESPACE-PREFIX X(0) تا X(4,096) .It Sy XML-NNAMESPACE-PREFIX N(0) تا N(2,048) .It Sy XML-NTEXT N(0) تا N(2,000,000) .It Sy XML-TEXT X(0) تا X(2,147,483,646) .El .El .It gnu برای مشخص کردن نحو GnuCOBOL، که عموماً با MicroFocus سازگار است. .It mf برای مشخص کردن نحو MicroFocus: .Bl -bullet -compact .It .Sy BINARY-LONG-LONG .It .Sy CALL ... GIVING .It .Sy CDF \[Do]IF .It .Sy COMPUTATIONAL-6 .It .Sy COMPUTATIONAL استفاده‌شده با .Sy PICTURE X .It .Sy INSPECT ... TRAILING .It .Sy OCCURS در .Sy "LEVEL 01" .It ثابت‌های .Sy LEVEL 78 .It .Sy MOVE POINTER .It .Sy RETURNING .It .Sy USAGE IS TYPENAME .El .El . .It Fl include Ar filename پرونده .Ar filename را به گونه‌ای پردازش می‌کند که گویی .D1 COPY Dq Ar filename به عنوان نخستین خط پرونده منبع اصلی آمده است. اگر .Ar filename یک مسیر مطلق نباشد، پوشه جستجوشده پوشه کاری فعلی است، نه پوشه‌ای که پرونده منبع اصلی را در بر دارد. نام دقیقاً عیناً استفاده می‌شود؛ هیچ دگرگونی اعمال نمی‌شود و هیچ پوشه‌ای جستجو نمی‌گردد. .Pp اگر چندین گزینه .Fl include داده شود، پرونده‌ها به همان ترتیبی که در خط فرمان آمده‌اند اضافه می‌شوند. . .It Fl preprocess Ar preprocess-filter پس از اعمال تمام دستکاری‌های متنی CDF و پیش از ارسال متن آماده‌شده \*[lang] به کامپایلر .Sy cobol1 ، ورودی می‌تواند توسط یک یا چند فیلتر بیشتر تغییر یابد. به رسم سنتی .Xr sed 1 ، هر .Ar preprocess-filter از ورودی استاندارد می‌خواند و در خروجی استاندارد می‌نویسد. .Pp برای ارسال گزینه‌ها به .Ar preprocess-filter ، از یک رشته جداشده با کاما استفاده کنید، مشابه روشی که گزینه‌های پیونددهنده به .Fl Sy Wl ارسال می‌شوند. (بعد از کاما هیچ فاصله‌ای نگذارید، زیرا پوسته آن را به عنوان جداکننده گزینه در نظر می‌گیرد.) کامپایلر .Nm هنگام فراخوانی .Ar preprocess-filter هر کاما را با یک فاصله جایگزین می‌کند. برای نمونه، .D1 Fl preprocess Li tee,output.cbl ابزار .Xr tee 1 را با آرگومان نام پرونده خروجی .Pa output.cbl فراخوانی می‌کند و باعث می‌شود یک رونوشت از ورودی در پرونده نوشته شود. .Pp کامپایلر .Nm پوشه کاری فعلی و پوشه‌های موجود در متغیر محیطی PATH را برای یافتن یک پرونده اجرایی که نام آن با .Ar preprocess-filter مطابقت دارد جستجو می‌کند. نخستین موردی که یافت شود استفاده می‌گردد. اگر موردی یافت نشود، یک خطا گزارش شده و کامپایلر فراخوانی نمی‌شود. .Pp گزینه .Fl preprocess می‌تواند بیش از یک بار در خط فرمان ظاهر شود. هر .Ar preprocess-filter به نوبه خود و به ترتیب ظاهر شدن اعمال می‌شود. .Pp فیلتر .Ar preprocess-filter باید وضعیت خروج صفر برگرداند که نشان‌دهنده موفقیت است. اگر وضعیت خروج غیرصفر بازگرداند، یک خطا گزارش شده و کامپایلر فراخوانی نمی‌شود. .It Fl fflex-debug Ns Li , Fl fyacc-debug پیام‌های مفیدی برای توسعه کامپایلر تولید می‌کنند. گزینه .Fl fflex-debug جریان توکن‌شده ورودی را چاپ می‌کند. گزینه .Fl fyacc-debug عملیات انتقال و کاهش (shift and reduce) انجام‌شده توسط تجزیه‌کننده را نشان می‌دهد. .El .Ss "پیام‌های تشخیصی (Diagnostic Messages)" .Pp بسیاری از گزینه‌های هشدار می‌توانند برای تبدیل پیام‌های خطا به هشدار یا نادیده گرفتن پیام‌های مرتبط با گویش‌های مختلف \*[lang] استفاده شوند. کاربر می‌تواند این موارد را ترکیب کند. گروهی از ویژگی‌ها را می‌توان با تعیین یک گویش (یا بیش از یک گویش) فعال کرد و ویژگی‌های منفرد را می‌توان به صورت هشدار، خطا یا پنهان‌سازی تنظیم نمود. .Bl -tag -width Wno-cdf-name-not-found\0\0 -compact .It Fl Wno-apply-commit هشدار در صورت استفاده از APPLY COMMIT. .It Fl Wno-bad-line-directive هشدار در صورت برخورد با دستورالعمل نادرست .Ql #line Ns . .It Fl Wno-binary-long-long هشدار در صورت استفاده از BINARY-LONG-LONG. .It Fl Wno-call_giving هشدار در صورت استفاده از CALL ... GIVING. .It Fl Wno-call_literal هشدار در صورت استفاده از CALL با یک پارامتر لیترال از طریق مرجع (by reference). .It Fl Wno-cdf-dollar هشدار در صورت استفاده از CDF \[Do]IF. .It Fl Wno-comp-6 هشدار در صورت استفاده از COMPUTATIONAL-6. .It Fl Wno-comp-x هشدار در صورت استفاده از COMPUTATIONAL با PICTURE X. .It Fl Wno-file-code-set هشدار در صورت استفاده از FILE CODE SET. .It Fl Wno-inspect-trailing هشدار در صورت استفاده از INSPECT ... TRAILING. .It Fl Wno-level-1-occurs هشدار در صورت استفاده از Level 01 با OCCURS. .It Fl Wno-level-78-defined هشدار در صورت تعریف ثابت Level 78 توسط CDF. .It Fl Wno-move-index هشدار در صورت استفاده از MOVE INDEX. .It Fl Wno-move-pointer هشدار در صورت استفاده از MOVE POINTER. .It Fl Wno-returning-number هشدار در صورت استفاده از RETURNING . .It Fl Wno-usage-typename هشدار در صورت استفاده از USAGE IS TYPENAME. .It Fl Wno-bad-numeric هشدار در صورت نامعتبر بودن رشته عددی. .It Fl Wno-cdf-invalid-parameter هشدار در صورت تعریف نشدن CDF PARAMETER ارجاع‌شده. .It Fl Wno-cdf-name-not-found هشدار در صورت تعریف نشدن نام CDF ارجاع‌شده. .It Fl Wno-cobol-eject هشدار در صورت استفاده از EJECT سبک IBM (به جای خطا). .It Fl Wno-cobol-resume هشدار در صورت استفاده از RESUME استاندارد ISO همراه با \-dialect ibm (به جای خطا). .It Fl Wno-cobol-volatile هشدار در صورت استفاده از VOLATILE (به جای خطا در صورت وجود -dialect ibm). .It Fl Wno-copybook-found چاپ پیام هنگام پردازش copybook. .It Fl Wno-ec-unknown هشدار در صورت ارجاع به شرط خطای پیاده‌سازی‌نشده یا ناشناخته. .It Fl Wno-entry-convention چاپ پیام هنگام مشخص شدن ENTRY CONVENTION. .It Fl Wno-high-order-bit هشدار در صورت استفاده از HIGH-ORDER-LEFT HIGH-ORDER-RIGHT. .It Fl Wno-include-file-found چاپ پیام هنگام پردازش پرونده درج‌شده (include file). .It Fl Wno-length-of هشدار در صورت استفاده از LENGTH OF. .It Fl Wno-level-78 هشدار در صورت استفاده از Level 78. .It Fl Wno-literal-concat هشدار در صورت استفاده لیترال‌های الحاق‌شده از کدگذاری‌های مختلف. .It Fl Wno-locale-error هشدار در صورت شکست locale(3). .It Fl Wno-move-corresponding هشدار در صورتی که COBOL MOVE فیلدهای متناظری نداشته باشد. .It Fl Wno-nllanginfo-error هشدار در صورت شکست nl_langinfo(3). .It Fl Wno-recording-mode هشدار در صورت استفاده از RECORDING MODE. .It Fl Wno-segment هشدار در صورت استفاده از قطعه‌های SECTION. .It Fl Wno-set-locale-to هشدار در صورت استفاده از SET LOCALE ... TO. .It Fl Wno-set-to-locale هشدار در صورت استفاده از SET ... TO LOCALE. . .\" تبدیل خطاها به هشدار هشدار در صورت نامعتبر بودن دستورالعمل line (به جای خطا). .It Fl Wno-iconv-error هشدار در صورتی که iconv(3) نتواند بین کدگذاری‌ها تبدیل انجام دهد (به جای خطا). .It Fl Wno-include-file-not-found هشدار در صورت پیدا نشدن پرونده include (به جای خطا). .It Fl Wno-operator-space هشدار در صورتی که عملگر رابطه‌ای با فاصله همراه نباشد (به جای خطا). .It Fl Wno-preprocessor-error هشدار در صورت شکست پیش‌پردازنده (به جای خطا). .It Fl Wno-procedure-pointer هشدار در صورت استفاده از PROCEDURE POINTER. .It Fl Wno-procedure-not-found هشدار در صورت پیدا نشدن رویه ارجاع‌شده (به جای خطا). .It Fl Wno-replace-error هشدار در صورتی که REPLACE نتواند پردازش شود (به جای خطا). .It Fl Wno-segment-error هشدار در صورت نامعتبر بودن بخش SEGMENT (به جای خطا). .It Fl Wno-segment-negative هشدار در صورتی که بازه SEGMENT منفی باشد (به جای خطا). .It Fl Wno-stop-number هشدار در صورت استفاده از STOP سبک IBM (به جای خطا). .It Fl Wno-stray-indicator هشدار در صورتی که ستون نشانگر معنی شناخته‌شده‌ای نداشته باشد (به جای خطا). .El . .Sh "سناریوهای کامپایل (COMPILATION SCENARIOS)" .D1 gcobol Ar xyz.cob .D1 gcobol -main Ar xyz.cob .D1 gcobol -main= Ns Ar xyz.cob Ar xyz.cob این دستورها معادل یکدیگرند. کد .Ar xyz.cob کامپایل می‌شود و یک تابع .Fn main درج می‌گردد که نخستین PROGRAM-ID را در پرونده منبع .Ar xyz.cob فراخوانی می‌کند. .Pp .D1 gcobol -nomain Ar xyz.cob Ar elsewhere.o گزینه .Fl nomain مانع از تولید تابع .Fn main توسط کامپایلر gcobol می‌شود. باید یک نقطه ورود .Fn main در ماژول .Ar elsewhere.o وجود داشته باشد؛ در غیر این صورت پیونددهنده خطای .Dq "missing main" (فقدان تابع اصلی) را گزارش خواهد کرد. .Pp .D1 gcobol Ar aaa.cob Ar bbb.cob Ar ccc.cob .D1 gcobol -main Ar aaa.cob Ar bbb.cob Ar ccc.cob این دو دستور معادل هستند. این سه ماژول کد منبع به همراه یک تابع .Fn main تولیدشده که نخستین PROGRAM-ID را در ماژول .Ar aaa.cob فراخوانی می‌کند، کامپایل شده و با هم پیوند می‌خورند. .Pp .D1 gcobol Ar aaa.cob Ar bbb.cob Fl main Ar ccc.cob .D1 gcobol -main Ns = Ns Ar ccc.cob Ar aaa.cob Ar bbb.cob Ar ccc.cob این دو دستور نتیجه یکسانی دارند: یک پرونده اجرایی .Ar a.out ایجاد می‌شود که اجرای آن از نخستین PROGRAM-ID در .Ar ccc.cob آغاز می‌گردد. .Pp .D1 gcobol -main Ns = Ns Ar bbb.cob:b-entry Ar aaa.cob Ar bbb.cob Ar ccc.cob یک پرونده اجرایی .Ar a.out ایجاد می‌شود که اجرای آن از PROGRAM-ID به نام .Ar "b-entry" آغاز می‌گردد. .Pp .D1 gcobol -c Ar aaa.cob .D1 gcobol -c -main Ar bbb.cob .D1 gcobol -c Ar ccc.cob .D1 gcobol Ar aaa.o Ar bbb.o Ar ccc.o سه دستور اول هر کدام یک پرونده .o ایجاد می‌کنند. پرونده .Ar bbb.o حاوی یک نقطه ورود .Fn main خواهد بود که نخستین PROGRAM-ID را در .Ar bbb فراخوانی می‌کند. دستور چهارم این سه پرونده .o را به یک پرونده .Ar a.out پیوند می‌دهد. . .Sh "EBCDIC" گزینه .Fl fexec-charset=cp1140 هنگام کار با برنامه‌های مین‌فریم \*[lang] که برای پرونده‌های دارای کدگذاری EBCDIC در نظر گرفته شده‌اند، بسیار مفید است. با این گزینه، در حالی که متن \*[lang] در قالب ASCII باقی می‌ماند، لیترال‌های کاراکتری و مقادیر اولیه فیلدها رشته‌های EBCDIC را در باینری کامپایل‌شده تولید می‌کنند و هر داده کاراکتری خوانده‌شده از یک پرونده به عنوان داده‌های EBCDIC تفسیر می‌شود. داده‌های پرونده .Em تبدیل نمی‌شوند Ns ؛ بلکه فرض بر این است که پرونده از نمایش EBCDIC استفاده می‌کند. لیترال‌های رشته‌ای در متن \*[lang] .Em تبدیل می‌شوند Ns ، به گونه‌ای که می‌توان آن‌ها را به شکلی معنادار با داده‌های درون پرونده مقایسه کرد. صفحه کد 1140 یکی از چندین صفحه کد EBCDIC است؛ این صفحه کد اغلب سودمند است زیرا قرابت نزدیکی با صفحه کد پرکاربرد 1252 دارد که بسیاری از کاراکترهای اروپای غربی را فراهم می‌سازد. .Pp تنها داده‌های پرونده و لیترال‌های کاراکتری تحت تأثیر قرار می‌گیرند. داده‌های خوانده‌شده از محیط یا نوشته‌شده در آن، یا داده‌های دریافتی از خط فرمان، مطابق با .Xr locale 7 حاکم در حین اجرا تفسیر می‌شوند. همین امر در مورد .Sy ACCEPT و .Sy DISPLAY نیز صادق است. نام‌های شناخته‌شده برای سیستم‌عامل، مانند نام پرونده‌ها و نام متغیرهای محیطی، عیناً و بدون تغییر پردازش می‌شوند. .Pp در حال حاضر، این یک تنظیم همه-یا-هیچ است. پشتیبانی از .Sy USAGE و .Sy CODESET ، که امکان تبدیل بین کدگذاری‌ها را فراهم می‌آورد، همچنان به عنوان یک هدف در آینده باقی مانده است. .Pp همچنین ببینید بخش .Sx "متغیرهای مجموعه ویژگی‌ها (Feature-set Variables)" در زیر. . .Sh "REDEFINES ... USAGE POINTER" طبق استاندارد ISO، قلم داده‌ای که قلم دیگری را .Sy REDEFINES می‌کند نباید بزرگ‌تر از قلمی باشد که آن را بازتعریف می‌نماید، مگر اینکه آن قلم دارای LEVEL 01 بوده و EXTERNAL نباشد. در .Nm ، با استفاده از .Fl dialect Ar ibm ، این قاعده برای .Sy REDEFINES همراه با .Sy USAGE POINTER که عضو بازتعریف‌شده آن یک .Sy USAGE COMP-5 چهار بایتی است (معمولاً .Sy PIC S9(8) Ns )، یا برعکس، منعطف‌تر شده است. در این صورت، عضو بازتعریف‌شده به ۸ بایت تغییر اندازه می‌یابد تا اشاره‌گر را در خود جای دهد. این ویژگی امکان انجام محاسبات اشاره‌گر را در یک سیستم ۶۴ بیتی با کد منبعی که هدف آن سیستم ۳۲ بیتی بوده فراهم می‌سازد. .Pp همچنین ببینید بخش .Sx "متغیرهای مجموعه ویژگی‌ها (Feature-set Variables)" در زیر. . .Sh "نکات پیاده‌سازی (IMPLEMENTATION NOTES)" کامپایلر .Nm یک کامپایلر بر پایه gcc است و در موارد کاربردی از قراردادهای gcc پیروی می‌کند. گاهی این قراردادها (و انتظارات کاربر) با شیوه‌های رایج در مین‌فریم تعارض دارند. مگر در مواردی که استاندارد ISO انجام کاری را برای کامپایلر الزامی کرده باشد، هرگونه تعارض از این دست به نفع gcc حل‌وفصل می‌شود. .Ss "پیونددهی (Linking)" برخلاف زبان C، دستور .Sy CALL در زبان \*[lang] به صورت ضمنی بیانگر پیونددهی پویا است، زیرا برای .D1 Sy CALL Ar program شناسه .Ar program می‌تواند متغیری باشد که مقدار آن در زمان اجرا مشخص می‌شود. با این وجود، پارامتر می‌تواند یک مقدار ثابت در زمان کامپایل نیز باشد؛ خواه یک لیترال الفبایی-عددی، یا یک قلم داده .Sy CONSTANT . .Pp کامپایلر .Nm در صورت امکان از پیونددهی ایستا پشتیبانی می‌کند، مگر اینکه با گزینه .Fl fno-static-call غیرفعال شود. اگر مقدار پارامتر در زمان کامپایل مشخص باشد، کامپایلر یک مرجع خارجی تولید می‌کند تا توسط پیونددهنده حل شود. برنامه ارجاع‌شده معمولاً از طریق یک ماژول شیء، یک کتابخانه ایستا یا یک شیء مشترک (shared object) ارائه می‌شود. اگر ارائه نشود، پیونددهنده خطای .Dq "نماد حل‌نشده (unresolved symbol)" را در زمان ساخت یا هنگام اجرای برنامه (در صورت استفاده از شیء مشترک) گزارش می‌کند. این ویژگی برنامه‌نویس را در اولین فرصت ممکن از خطا آگاه می‌سازد. .Pp برنامه‌هایی که انتظار می‌رود با وجود نمادهای حل‌نشده به درستی اجرا شوند (شاید به این دلیل که منطق برنامه به آن .Sy CALL خاص نیاز پیدا نخواهد کرد) می‌توانند از گزینه .Fl no-static-call استفاده کنند. این گزینه همه دستورهای .Sy CALL را وادار می‌کند تا به صورت پویا و در زمان اجرا حل شوند. .ig برنامه‌هایی که انتظار می‌رود با وجود یک نماد حل‌نشده به درستی اجرا شوند می‌توانند از گزینه‌های پیونددهنده برای تولید فایل اجرایی استفاده کنند. .. . .Ss "شرایط خطای پیاده‌سازی‌شده (Implemented Exception Conditions)" به طور پیش‌فرض، طبق استاندارد ISO، هیچ شرط خطایی (EC) فعال نیست. شرایط خطای پیاده‌سازی‌شده را می‌توان در خط فرمان یا از طریق دستورالعمل .Sy TURN فعال کرد. هر تلاشی برای فعال‌سازی شرط خطایی که پیاده‌سازی نشده باشد، به عنوان خطا در نظر گرفته می‌شود. .Pp یک شرط خطای فعال‌شده که توسط یک .Sy DECLARATIVE مدیریت نشده باشد، در لاگ سیستم و خروجی خطای استاندارد نوشته می‌شود. (سازندگان قصد دارند این بخش را به یک گزینه تبدیل کنند.) یک شرط خطای مهلک که با .Sy RESUME مدیریت نشود، با فراخوانی .Xr abort 3 و پایان فرآیند خاتمه می‌یابد. .Pp تمام شرایط خطا پیاده‌سازی نشده‌اند. هر تلاشی برای فعال‌سازی شرط خطایی که پیاده‌سازی نشده باشد پیام هشداری تولید می‌کند. موارد زیر پیاده‌سازی شده‌اند: .Pp .Bl -tag -offset 5n -compact .It EC-FUNCTION-ARGUMENT برای توابع زیر: .Bl -item -compact .It ACOS .It ANNUITY .It ASIN .It LOG .It LOG10 .It PRESENT-VALUE .It SQRT .El .It EC-SORT-MERGE-FILE-OPEN .It EC-BOUND-SUBSCRIPT اندیس عدد صحیح نباشد، کمتر از ۱ باشد یا بیشتر از مقدار occurs باشد. .It EC-BOUND-REF-MOD آغاز refmod عدد صحیح نباشد، کمتر از ۱ باشد، بزرگتر از اندازه متغیر باشد، طول عدد صحیح نباشد، طول کمتر از ۱ باشد و مجموع آغاز+طول از اندازه متغیر فراتر رود. .It EC-BOUND-ODO عبارت DEPENDING عدد صحیح نباشد، بزرگتر از حد بالای occurs باشد، کمتر از حد پایین occurs باشد و برای قلم ارسال‌کننده اندیس بزرگتر از DEPENDING باشد. .It EC-SIZE-ZERO-DIVIDE برای هر دو تقسیم ممیز ثابت و ممیز شناور. .It EC-SIZE-TRUNCATION .It EC-SIZE-EXPONENTIATION .El .Pp تا زمان نگارش این متن، هیچ کامپایلر \*[lang] پیاده‌سازی کاملی از شرایط خطای \*[isostd] ارائه نکرده است. .Nm به شرایط خطایی اولویت می‌دهد که جامعه کاربران آن‌ها را باارزش‌تر بدانند. . .Sh "افزونه‌ها به استاندارد ISO کوبول (EXTENSIONS TO ISO COBOL)" زبان استاندارد \*[lang] هیچ امکانی برای متغیرهای محیطی آن‌گونه که در یونیکس و ویندوز تعریف شده‌اند، یا آرگومان‌های خط فرمان در نظر نگرفته است. .Nm از آن‌ها با استفاده از نحوی شبیه به GnuCOBOL پشتیبانی می‌کند. همچنین ISO و IBM روش‌های ناسازگاری را برای بازگرداندن وضعیت خروج برنامه به سیستم‌عامل تعریف کرده‌اند. .Nm از نحو IBM پشتیبانی می‌نماید. . .Ss "متغیرهای محیطی (Environment Variables)" برای خواندن یک متغیر محیطی: .Pp .D1 ACCEPT Ar target Li FROM ENVIRONMENT Ar envar .Pp که در آن .Ar target یک قلم داده تعریف‌شده در .Sy "DATA DIVISION" است و .Ar envar نام یک متغیر محیطی را مشخص می‌کند. .Ar envar می‌تواند یک لیترال رشته‌ای یا قلم داده الفبایی-عددی باشد که مقدار آن نام یک متغیر محیطی است. مقدار متغیر محیطی نام‌برده به .Ar target منتقل (MOVE) می‌شود. قوانین همانند دستور .Sy MOVE هستند. .Pp برای نوشتن در یک متغیر محیطی: .Pp .D1 SET ENVIRONMENT Ar envar Li TO Ar source .Pp که در آن .Ar source یک قلم داده تعریف‌شده در .Sy "DATA DIVISION" است و .Ar envar نام یک متغیر محیطی را مشخص می‌کند. .Ar envar باز هم می‌تواند یک لیترال رشته‌ای یا قلم داده الفبایی-عددی حاوی نام متغیر محیطی باشد. مقدار متغیر محیطی نام‌برده برابر با مقدار .Ar source تنظیم می‌شود. . .Ss "آرگومان‌های خط فرمان (Command-line Arguments)" برای خواندن آرگومان‌های خط فرمان، از ثبات‌های .Sy COMMAND-LINE و .Sy COMMAND-LINE-COUNT (تنها) در یک دستور .Sy ACCEPT استفاده کنید. اگر بدون اندیس استفاده شود، .Sy COMMAND-LINE کل خط فرمان را به عنوان یک رشته واحد برمی‌گرداند. همراه با اندیس، .Sy COMMAND-LINE جدولی از آرگومان‌های خط فرمان است. برای نمونه، اگر برنامه به صورت زیر اجرا شود: .sp .D1 Sy ./program Fl i Ar input Ar output .sp آن‌گاه .sp .D1 ACCEPT target FROM COMMAND-LINE(3) .sp مقدار .Ar input را به درون .Ar target منتقل می‌کند. نام برنامه نخستین بخش در کل خط فرمان است و در جدول .Sy COMMAND-LINE در خانه COMMAND-LINE(1) یافت می‌شود. .Pp برای دریافت تعداد آرگومان‌های ارائه‌شده در خط فرمان، از دستور زیر استفاده کنید: .sp .D1 ACCEPT Ar target Li FROM COMMAND-LINE-COUNT .sp اگر .Sy ACCEPT به یک متغیر محیطی یا آرگومان خط فرمان ناموجود ارجاع دهد، مقدار مقصد برابر با .Sy LOW-VALUES قرار می‌گیرد. .Pp پارامترهای خط فرمان سیستم همچنین از طریق LINKAGE SECTION در برنامه‌ای که اجرا از آنجا شروع می‌شود قابل دسترسی هستند. ساختار داده به این صورت است: .Bd -literal linkage section. 01 argc pic 999. 01 argv. 02 argv-table occurs 1 to 100 times depending on argc. 03 argv-element pointer. 01 argv-string pic x(100) . .Ed و کد دسترسی به پارامتر سوم به این شکل است: .Bd -literal procedure division using by value argc by reference argv. set address of argv-string to argv-element(3) display argv-string .Ed . .Ss "دستورالعمل #line (#line directive)" تجزیه‌کننده خطوطی به شکل زیر را می‌پذیرد: .D1 #line Ar lineno Dq Ar filename Ns . اثر آن تنظیم شماره خط فعلی به .Ar lineno و نام پرونده ورودی فعلی به .Ar filename است. پیش‌پردازنده‌ها می‌توانند از این دستورالعمل برای کنترل نام پرونده و شماره خطوط گزارش‌شده در پیام‌های خطا و در اشکال‌زدا (debugger) استفاده کنند. . .Ss "SELECT ... ASSIGN TO" در عبارت .sp .D1 ASSIGN TO Ar filename .sp شناسه .Ar filename می‌تواند داخل گیومه باشد یا نباشد. اگر داخل گیومه باشد، نشان‌دهنده نام پرونده آن‌گونه که برای سیستم‌عامل شناخته شده است می‌باشد. اگر بدون گیومه باشد، نشان‌دهنده یک عنصر داده یا یک متغیر محیطی است که حاوی نام پرونده است. اگر .Ar filename با نام یک عنصر داده مطابقت داشته باشد، آن عنصر استفاده می‌شود. در غیر این صورت، حل نام .Ar filename تا زمان اجرا به تعویق می‌افتد، زمانی که نام باید در محیط برنامه وجود داشته باشد. .Ss "XML PARSE" کامپایلر .Nm دستور .Sy "XML PARSE" مربوط به IBM را شبیه‌سازی می‌کند. مقادیر زیر برای .Sy XML-EVENT تعریف شده‌اند: .Bl -tag -compact .It Sy COMMENT متن یک توضیح (کامنت) بین "" .It Sy CONTENT-CHARACTERS بخشی از متن یا تمام محتوای کاراکتری عنصر بین تگ‌های شروع و پایان. .It Sy END-OF-ELEMENT تگ پایان عنصر، همراه با نام در صورت وجود در ورودی. .It Sy PROCESSING-INSTRUCTION-DATA دستورالعمل پردازش (پس از نام هدف)، بدون در نظر گرفتن "?>". .It Sy PROCESSING-INSTRUCTION-TARGET نام هدف دستورالعمل پردازش در .Sy XML-TEXT یا .Sy XML-NTEXT ظاهر می‌شود. .It Sy START-OF-ELEMENT نام تگ شروع عنصر یا تگ عنصر خالی. .El . .Sh "وضعیت پیاده‌سازی ISO کوبول (ISO COBOL Implementation Status)" .Ss "انواع داده USAGE (USAGE Data Types)" کامپایلر .Nm از بندهای .Sy USAGE IS زیر پشتیبانی می‌کند: .Bl -tag -compact -width POINTER\0 .It Sy INDEX برای استفاده به عنوان اندیس در یک جدول. .It Sy POINTER برای متغیرهایی که مقدار آن‌ها نشانی یک تابع خارجی، .Sy PROGRAM-ID یا قلم داده است. انتساب از طریق دستور .Sy SET انجام می‌شود. .It Sy BINARY, Sy COMP , Sy COMPUTATIONAL, Sy COMP-4, Sy COMPUTATIONAL-4 عدد صحیح big-endian از ۱ تا ۱۶ بایت، مطابق با بند PICTURE. .It Sy COMP-1 , Sy COMPUTATIONAL-1 , Sy FLOAT-BINARY-32 ممیز شناور با دقت تکی (۴ بایتی) IEEE 754، همان‌طور که سخت‌افزار فراهم می‌کند. .It Sy COMP-2 , Sy COMPUTATIONAL-2 , Sy FLOAT-BINARY-64 ممیز شناور با دقت مضاعف (۸ بایتی) IEEE 754، همان‌طور که سخت‌زار فراهم می‌کند. .It Sy COMP-3 , Sy COMPUTATIONAL-3, Sy PACKED-DECIMAL در حال حاضر پیاده‌سازی نشده است. .It Sy COMP-5 , Sy COMPUTATIONAL-5 عدد صحیح little-endian از ۱ تا ۱۶ بایت، مطابق با .Sy PICTURE. .It Sy FLOAT-BINARY-128 , FLOAT-EXTENDED ممیز شناور ۱۲۸ بیتی را طبق IEEE 754 پیاده‌سازی می‌کند. .El .Pp کامپایلر .Nm از انواع عدد صحیح ISO به صورت .Sy BINARY- پشتیبانی می‌کند که بیشتر آن‌ها نام مستعار .Sy COMP-5 هستند. . .hw unsigned .sp .TS LB LB LB LB LB LB LB LB L L L L . COMP-5 Compatible Picture BINARY Type Bytes Value T{ BINARY-CHAR [UNSIGNED] T} 1 0 \(em 256 S9(1...4) T{ BINARY-CHAR SIGNED T} 1 -128 \(em +127 \09(1...4) T{ BINARY-SHORT [UNSIGNED] T} 2 0 \(em 65535 S9(1...4) T{ BINARY-SHORT SIGNED T} 2 -32768 \(em +32767 \09(5...9) T{ BINARY-LONG [UNSIGNED] T} 4 0 \(em 4,294,967,295 S9(5...9) T{ BINARY-LONG SIGNED T} 4 T{ -2,147,483,648 \(em +2,147,483,647 T} \09(10...18) T{ BINARY-LONG-LONG [UNSIGNED] T} 8 T{ 0 \(em 18,446,744,073,709,551,615 T} S9(10...18) T{ BINARY-LONG-LONG SIGNED T} 8 T{ -9,223,372,036,854,775,808 \(em +9,223,372,036,854,775,807 T} .TE .Pp این‌ها اندازه را (به بایت) مشخص می‌کنند و نمی‌توان همراه با یک بند .Sy PICTURE به کار برد. طبق استاندارد ISO، حالت .Sy SIGNED پیش‌فرض برای نام‌های مستعار .Sy "BINARY-" Ns Ar type است. .Pp تمامی محاسبات \(em هم اعداد صحیح و هم ممیز شناور \(em با استفاده از فرم‌های میانی ۱۲۸ بیتی انجام می‌پذیرد. . .Ss "نام‌های محیط (Environment Names)" در .Nm دستور .sp .Dl DISPLAY UPON .sp نام‌های .Sy SYSOUT و .Sy STDOUT را به خروجی استاندارد، و .Sy SYSPUNCH ، .Sy SYSPCH و .Sy STDERR را به خروجی خطای استاندارد نگاشت می‌کند. . .Ss "وضعیت خروج (Exit Status)" کامپایلر .Nm از نحو ISO برای بازگرداندن وضعیت خروج به سیستم‌عامل پشتیبانی می‌کند: .Pp .D1 STOP RUN Oo WITH Oc Bro NORMAL | ERROR Brc Oo STATUS Oc Ar status .Pp علاوه بر این، .Nm از نحو IBM نیز برای بازگرداندن وضعیت خروج به سیستم‌عامل پشتیبانی می‌کند. از ثبات .Sy RETURN-CODE استفاده کنید: .Bd -literal -offset indent MOVE ZERO TO RETURN-CODE. GOBACK. .Ed .Pp ثبات .Sy RETURN-CODE به عنوان یک عدد صحیح باینری ۴ بایتی تعریف شده است. .ig .Pp استاندارد ISO شکل گسترش‌یافته‌ای از .Sy GOBACK را پشتیبانی می‌کند: .Pp .D1 GOBACK {ERROR | NORMAL} WITH Ar status .Pp که در آن .Ar status یک قلم داده یا لیترال عددی است. این نحو اثری مشابه دستورهای زیر دارد: .Bd -literal -offset indent MOVE status TO RETURN-CODE. GOBACK. .Ed استفاده از .Sy ERROR یا .Sy NORMAL هیچ تأثیری ندارد؛ این دو معادل یکدیگرند. .. . .Sh "امکان هدایت کامپایلر (COMPILER-DIRECTING FACILITY)" از امکان هدایت کامپایلر (CDF) باید با احتیاط استفاده شود زیرا هنوز مجموعه آزمون‌های جامعی برای آن تعیین نشده است. . .Ss "دستکاری متن CDF (CDF Text Manipulation)" .Bl -tag -width >>DEFINE .It Sy COPY Ar copybook Li Oo OF|BY Ar library Oc Oo Sy REPLACING ... Oc اگر .Ar copybook یک لیترال باشد، به عنوان نام پرونده لیترال در نظر گرفته می‌شود، چه وجود داشته باشد و چه وجود نداشته باشد. اگر .Ar copybook یک کلمه \*[lang] باشد، .Nm ابتدا به دنبال متغیر محیطی با نام .Va copybook می‌گردد و در صورت یافتن، محتوای آن متغیر را به عنوان نام پرونده copybook استفاده می‌کند. اگر آن پرونده وجود نداشته باشد، به جستجو برای پرونده‌ای با یکی از نام‌های زیر ادامه می‌دهد: .sp .Bl -bullet -compact -offset 5n .It .Pa copybook (دقیقاً به همین شکل) .It .Pa copybook.cpy .It .Pa copybook.CPY .It .Pa copybook.cbl .It .Pa copybook.CBL .It .Pa copybook.cob .It .Pa copybook.COB .El .sp به همان ترتیب. کامپایلر ابتدا در همان پوشه حاوی پرونده کد منبع جستجو می‌کند، و سپس در هر .Ar copybook-path که با گزینه .Fl I مشخص شده باشد. . .\" FIXME: need escape mechanism for directories with ':' in the name. آرگومان .Ar copybook-path می‌تواند (مانند متغیر .Ev PATH در پوسته) فهرستی جداشده با دونقطه (:) باشد. گزینه .Fl I می‌تواند چندین بار در خط فرمان تکرار شود. هر .Ar copybook-path متوالی به موارد پیشین الحاق می‌گردد. مسیرهای نسبی (که با .Ql / Ns آغاز نمی‌شوند) به صورت نسبی نسبت به پوشه کاری فعلی کامپایلر جستجو می‌شوند. .Pp برای نمونه، .D1 \& .D1 Fl I Li /usr/local/include:include .D1 \& ابتدا پوشه‌ای را که برنامه \*[lang] در آن قرار دارد جستجو می‌کند، سپس .Pa /usr/local/include ، و در نهایت زیرپوشه .Pa include از پوشه‌ای که .Nm از آنجا فراخوانی شده است را جستجو می‌نماید. .Pp برای عبارت .Sy REPLACING ، هر دو شکل شبه‌متن امروزی و اشکال \*[lang]/85 شناخته می‌شوند. (اشکال قدیمی‌تر در مجموعه آزمون NIST CCVS/85 استفاده شده‌اند.) .It Sy REPLACE ... کامپایلر .Nm از تمام نحو استاندارد ISO برای .Sy REPLACE پشتیبانی می‌کند. .El . .Ss "دستورالعمل‌های CDF (CDF Directives)" .\"Bl -tag -width >>PROPAGATE .Bl -tag -width >>DEFINE .It >> Ns Sy DEFINE Ar name Sy AS Bro Ar expression Li | Sy PARAMETER Brc Op Sy OVERRIDE متغیر .Ar name را به عنوان یک متغیر کامپایل با مقدار .Ar expression تعریف می‌کند. اگر .Ar name قبلاً تعریف شده باشد، استفاده از .Sy OVERRIDE الزامی است، در غیر این صورت دستورالعمل نامعتبر خواهد بود. عبارت .Sy AS PARAMETER پذیرفته می‌شود، اما هیچ اثری در .Nm ندارد. . .It >> Ns Sy DEFINE Ar name AS Sy OFF تعریف .Ar name را آزاد می‌کند و استفاده از آن را پس از آن نامعتبر می‌سازد. .\" ISO requires AS; cdf.y does not. . .It >> Ns Sy IF Ar cce Ar text Oo >> Ns Sy ELSE Ar alt-text Oc Li >> Ns Sy END-IF عبارت .Ar cce را که یک .Em "عبارت شرطی ثابت (constant conditional expression)" است برای کامپایل شرطی ارزیابی می‌کند. در صورتی که یک نام باشد، .Ar cce می‌تواند با پارامتر خط فرمان .Fl D تعریف شود. اگر درست (true) باشد، متن .Ar text از زبان \*[lang] کامپایل می‌شود. اگر نادرست (false) باشد، متن .Ar else-text (در صورت وجود) کامپایل خواهد شد. عبارت .Bo Sy IS Bo Sy NOT Bc Bc Sy DEFINED پشتیبانی می‌شود. لیترال‌های بولی پشتیبانی نمی‌شوند. . .It >> Ns Sy EVALUATE پیاده‌سازی نشده است. .It >> Ns Sy CALL-CONVENTION Ar convention شناسه .Ar convention می‌تواند یکی از موارد زیر باشد: .Bl -tag -compact .It Sy \*[lang] استفاده از تطبیق نام نماد استاندارد و غیرحساس به حروف بزرگ و کوچک \*[lang]. برای .Sy CALL Dq Ar name ، مقدار .Ar name توسط کامپایلر با حروف کوچک درج می‌شود. .It Sy C استفاده از تطبیق نام نماد حساس به حروف بزرگ و کوچک. مقصد .Sy CALL به هیچ وجه تغییر نمی‌کند و عیناً استفاده می‌شود. .It Sy VERBATIM یک نام مستعار برای >>\c .Sy "CALL-CONVENTION C" . .El .It >> Ns Sy COBOL-WORDS EQUATE Ar keyword Sy WITH Ar alias کلمه .Ar alias را مترادفی برای .Ar keyword قرار می‌دهد. .It >> Ns Sy COBOL-WORDS UNDEFINE Ar keyword کلمه .Ar keyword را از گرامر \*[lang] حذف می‌کند. استفاده از آن در یک برنامه موجب بروز خطای نحوی از سوی کامپایلر خواهد شد. .It >> Ns Sy COBOL-WORDS SUBSTITUTE Ar keyword Sy BY Ar new-word کلمه .Ar keyword به عنوان کلمه کلیدی از گرامر حذف شده و .Ar new-word جایگزین آن می‌شود. پس از آن می‌توان از .Ar keyword به عنوان کلمه تعریف‌شده توسط کاربر استفاده نمود. .It >> Ns Sy COBOL-WORDS RESERVE Ar new-word با .Ar new-word مانند یک کلمه کلیدی \*[lang] رفتار می‌کند. این کلمه دیگر توسط برنامه، چه به عنوان کلمه کلیدی و چه به عنوان کلمه تعریف‌شده توسط کاربر، قابل استفاده نخواهد بود. . .It >> Ns Sy DISPLAY Ar string ... رشته .Ar string را به عنوان پیام هشدار در خروجی خطای استاندارد می‌نویسد. .It >> Ns Sy SOURCE Ar format قالب .Ar format می‌تواند یکی از موارد زیر باشد: .Bl -tag -compact .It Sy FIXED کد منبع مطابق با .Em "قالب مرجع فرم‌ثابت" در زبان \*[lang] با طول خط نامحدود است. .It Sy FREE کد منبع مطابق با .Em "قالب مرجع فرم‌آزاد" در زبان \*[lang] است. کاراکتر .Ql "*" در ابتدای خط به عنوان توضیح (کامنت) شناخته می‌شود. .El .El .Pp .Bl -tag -width >>PROPAGATE -compact .It >> Ns Sy FLAG-02 پیاده‌سازی نشده است. .It >> Ns Sy FLAG-85 پیاده‌سازی نشده است. .It >> Ns Sy FLAG-NATIVE-ARITHMETIC پیاده‌سازی نشده است. .It >> Ns Sy LEAP-SECOND پیاده‌سازی نشده است. .It >> Ns Sy LISTING پیاده‌سازی نشده است. .It >> Ns Sy PAGE پیاده‌سازی نشده است. .It >> Ns Sy PROPAGATE پیاده‌سازی نشده است. .It >> Ns Sy PUSH Ar directive .It >> Ns Sy POP Ar directive با .Sy PUSH ، وضعیت CDF را به یک پشته منتقل کنید. با .Sy POP ، به وضعیت قبلی که در پشته قرار گرفته بود بازگردید. دستورالعمل .Ar directive می‌تواند یکی از موارد زیر باشد: .Bl -tag -compact .It Sy CALL-CONVENTION .It Sy COBOL-WORDS .It Sy DEFINE .It Sy SOURCE FORMAT .It Sy TURN .El . .It >> Ns Sy TURN Oo .Ar ec Oo Ar file Li ... Oc ... .Oc Sy CHECKING Bro Oo Sy ON Oc Oo Oo Sy WITH Oc Sy LOCATION Oc | Sy OFF Brc شرط خطای .Ar ec را که به صورت اختیاری با رابط‌های پرونده .Ar file مرتبط است فعال (یا با .Sy OFF Ns ، غیرفعال) می‌کند. اگر .Sy LOCATION مشخص شده باشد، .Nm در زمان اجرا نام پرونده منبع و شماره خط دستوری را که شرط خطا را ایجاد کرده گزارش می‌دهد. .El . .Ss "متغیرهای مجموعه ویژگی‌ها (Feature-set Variables)" برخی گزینه‌های خط فرمان بر متغیرهای .Em "مجموعه ویژگی‌ها (feature-set)" در CDF که مختص .Nm هستند اثر می‌گذارند. آن‌ها را می‌توان با استفاده از .Sy >>DEFINE و .Sy >>IF تنظیم و آزمایش کرد، و با کاراکتر .Ql \&% در ابتدای نام شناخته می‌شوند، که در غیر این صورت در شناسه‌های \*[lang] نامعتبر است: .Pp .Bl -tag -compact .It Sy %EBCDIC-MODE توسط گزینه .Fl fexec-charset= Ns Ar برای تمام کدگذاری‌های EBCDIC تنظیم می‌شود. .It Sy %64-BIT-POINTER به طور ضمنی با .Fl "dialect ibm" فعال می‌گردد. .El .Pp برای مقداردهی یک متغیر مجموعه ویژگی‌ها، از دستور زیر استفاده کنید: .Dl >>SET Ar feature Li [AS] {ON | OFF} اگر .Ar feature برابر با .Sy %EBCDIC-MODE باشد، این دستورالعمل باید پیش از .Sy PROGRAM-ID قرار گیرد. .Pp برای آزمایش یک متغیر مجموعه ویژگی‌ها، از دستور زیر استفاده کنید: .Dl >>IF Ar feature Li DEFINED . .Ss "توابع درونی (Intrinsic functions)" کامپایلر .Nm تمامی توابع درونی تعریف‌شده توسط \*[isostd] و چند تابع دیگر را پیاده‌سازی کرده است. این توابع بر حسب حروف الفبا در زیر فهرست شده‌اند: .Bl -item -compact .It ABS ACOS ANNUITY ASIN ATAN .It BASECONVERT \%BIT-OF \%BIT-TO-CHAR \%BOOLEAN-OF-INTEGER \%BYTE-LENGTH .It CHAR \%CHAR-NATIONAL \%COMBINED-DATETIME CONCAT CONVERT COS \%CURRENT-DATE .It \%DATE-OF-INTEGER \%DATE-TO-YYYYMMDD \%DAY-OF-INTEGER \%DAY-TO-YYYYDDD \%DISPLAY-OF .It E \%EXCEPTION-FILE \%EXCEPTION-FILE-N \%EXCEPTION-LOCATION \%EXCEPTION-LOCATION-N \%EXCEPTION-STATEMENT \%EXCEPTION-STATUS EXP EXP10 .It FACTORIAL \%FIND-STRING \%FORMATTED-CURRENT-DATE \%FORMATTED-DATE \%FORMATTED-DATETIME \%FORMATTED-TIME \%FRACTION-PART .It \%HEX-OF \%HEX-TO-CHAR \%HIGHEST-ALGEBRAIC .It INTEGER \%INTEGER-OF-BOOLEAN \%INTEGER-OF-DATE \%INTEGER-OF-DAY \%INTEGER-OF-FORMATTED-DATE \%INTEGER-PART .It LENGTH \%LOCALE-COMPARE \%LOCALE-DATE \%LOCALE-TIME \%LOCALE-TIME-FROM-SECONDS LOG LOG10 \%LOWER-CASE \%LOWEST-ALGEBRAIC .It MAX MEAN MEDIAN MIDRANGE MIN MOD \%MODULE-NAME .It \%NATIONAL-OF NUMVAL \%NUMVAL-C \%NUMVAL-F ORD .It \%ORD-MAX \%ORD-MIN .It PI \%PRESENT-VALUE .It RANDOM RANGE REM REVERSE .It \%SECONDS-FROM-FORMATTED-TIME \%SECONDS-PAST-MIDNIGHT SIGN SIN \%SMALLEST-ALGEBRAIC SQRT \%STANDARD-COMPARE \%STANDARD-DEVIATION SUBSTITUTE SUM .It TAN \%TEST-DATE-YYYYMMDD \%TEST-DAY-YYYYDDD \%TEST-FORMATTED-DATETIME \%TEST-NUMVAL \%TEST-NUMVAL-C \%TEST-NUMVAL-F TRIM .It ULENGTH UPOS \%UPPER-CASE USUBSTR USUPPLEMENTARY UUID4 UVALID UWIDTH .It VARIANCE .It \%WHEN-COMPILED .It \%YEAR-TO-YYYY .El . .Ss "نمایش DISPLAY ممیز شناور دودویی (Binary floating point DISPLAY)" نحوه نمایش اعداد ممیز شناور دودویی توسط دستور DISPLAY به مقدار آن بستگی دارد. .Pp هنگامی که یک مقدار شش یا تعداد کمتری رقم اعشاری در سمت چپ نقطه اعشار داشته باشد، به صورت .Em 123456.789... نمایش داده می‌شود. .Pp هنگامی که مقدار کمتر از ۱ باشد و بیش از سه صفر در سمت راست نقطه اعشار نداشته باشد، به صورت .Em 0.0001234... نمایش داده می‌شود. .Pp در غیر این صورت، از نماد علمی (نمایی) استفاده می‌شود: .Em 1.23456E+7 . .Pp در همه موارد، صفرهای انتهایی در سمت راست عدد از مقدار نمایش‌داده‌شده حذف می‌شوند. .Pp .Bl -tag -compact -width FLOAT-EXTENDED .It COMP-1 با ۹ رقم اعشاری نمایش داده می‌شود. .It COMP-2 با ۱۷ رقم اعشاری نمایش داده می‌شود. .It FLOAT-EXTENDED با ۳۶ رقم اعشاری نمایش داده می‌شود. .El .Pp این تعداد ارقام با الزامات استاندارد IEEE 754 برای تبادل اطلاعات مطابقت دارد. به عنوان یک نمونه، توضیحات مربوط به مقادیر binary64 در COMP-2 (طبق ویکی‌پدیا). .Pp اگر یک عدد ممیز شناور با دقت مضاعف IEEE 754 به یک رشته اعشاری با حداقل ۱۷ رقم بااهمیت (معنادار) تبدیل شود، و سپس دوباره به نمایش دقت مضاعف بازگردانده شود، نتیجه نهایی باید با عدد اصلی مطابقت داشته باشد. .Pp عدد ۱۷ رقم از آن جهت انتخاب شده است که دستور .Sy DISPLAY محتوای یک متغیر COMP-2 را بدون پنهان کردن هیچ اطلاعاتی نشان دهد. . .Ss "انتقال MOVE ممیز شناور دودویی (Binary floating point MOVE)" در حین اجرای دستور .Sy MOVE ، ممکن است یک مقدار ممیز شناور کوتاه (ترانکیت) شود. تغییر مقادیر Numeric Display هنگام انتقال از طریق یک مقدار ممیز شناور غیرعادی نخواهد بود. .Pp این برنامه: .Bd -literal 01 PICV999 PIC 9999V999. 01 COMP2 COMP-2. PROCEDURE DIVISION. MOVE 1.001 to PICV999 MOVE PICV999 TO COMP2 DISPLAY "The result of MOVE " PICV999 " TO COMP2 is " COMP2 MOVE COMP2 to PICV999 DISPLAY "The result of MOVE COMP2 TO PICV999 is " PICV999 .Ed .Pp این نتیجه را تولید می‌کند: .Bd -literal The result of MOVE 0001.001 TO COMP2 is 1.00099999999999989 The result of MOVE COMP2 TO PICV999 is 0001.000 .Ed .Pp با این حال، پیاده‌سازی داخلی می‌تواند نتایجی تولید کند که ممکن است شگفت‌آور به نظر برسد: .Bd -literal The result of MOVE 0055.110 TO COMP2 is 55.1099999999999994 The result of MOVE COMP2 TO PICV999 is 0055.110 .Ed .Pp منشأ این ناسازگاری روش ذخیره‌سازی و تبدیل اعداد در کامپایلر .Nm است. تبدیل مقدار ممیز شناور به مقدار نمایشی عددی 0055110 از طریق ضرب 55.109999...\& در 1000 و سپس کوتاه کردن (ترانکیت) نتیجه به یک عدد صحیح انجام می‌شود. و مشخص شده است که با وجود اینکه 55.11 نمی‌تواند به عنوان یک مقدار دقیق در ممیز شناور نمایش یابد، حاصلضرب این ضرب، یعنی 55110، یک مقدار دقیق است. .Pp در مواردی که داشتن نتایج قابل پیش‌بینی برای تبدیلات اهمیت دارد، باید بتوانیم گرد کردن را اعمال کنیم، که این کار را می‌توان با یک دستور محاسباتی انجام داد: .Bd -literal MOVE 1.001 to PICV999 MOVE PICV999 TO COMP2 DISPLAY "The result of MOVE " PICV999 " TO COMP2 is " COMP2 MOVE COMP2 to PICV999 DISPLAY "The result of MOVE COMP2 TO PICV999 is " PICV999 ADD COMP2 to ZERO GIVING PICV999 ROUNDED DISPLAY "The result of ADD COMP2 to ZERO GIVING PICV999 ROUNDED is " PICV999 .sp The result of MOVE 0001.001 TO COMP2 is 1.00099999999999989 The result of MOVE COMP2 TO PICV999 is 0001.000 The result of ADD COMP2 to ZERO GIVING PICV999 ROUNDED is 0001.001 .Ed .Ss "محاسبات ممیز شناور دودویی (Binary floating point computation)" کامپایلر .Nm تلاش می‌کند تا در صورت امکان محاسبات داخلی را با استفاده از اعداد صحیح باینری انجام دهد. بدین ترتیب، محاسبات ریاضی ساده بین مقادیر باینری و مقادیر نمایش عددی با نتایج میانی باینری پایان می‌یابند. .Pp اگر یک مقدار ممیز شناور در میان متغیرهای مشخص‌شده برای یک محاسبه قرار گیرد، نتیجه میانی به یک مقدار ممیز شناور ۱۲۸ بیتی تبدیل می‌شود. . .Ss "هشداری در مورد مقایسه ممیز شناور دودویی (A warning about binary floating point comparison)" قاعده بنیادین هنگام انجام مقایسه‌های شامل مقادیر ممیز شناور: هرگز و تحت هیچ شرایطی تساوی دقیق را بررسی نکنید. این کار اصلاً ارزش دردسرهایش را ندارد. .Pp برای نمونه: .Bd -literal WORKING-STORAGE SECTION. 01 COMP1 COMP-1 VALUE 555.11. 01 COMP2 COMP-2 VALUE 555.11. PROCEDURE DIVISION. DISPLAY "COMPARE " COMP1 " with " COMP2 IF COMP1 EQUAL COMP2 DISPLAY "Equal" ELSE DISPLAY "Not equal" END-IF .sp MOVE COMP1 to COMP2 DISPLAY "COMPARE " COMP1 " with " COMP2 IF COMP1 EQUAL COMP2 DISPLAY "Equal" ELSE DISPLAY "Not equal" END-IF .Ed .Pp نتایج: .Bd -literal COMPARE 555.1099854 with 555.110000000000014 Not equal COMPARE 555.1099854 with 555.1099853515625 Equal .Ed .Pp چرا؟ باز هم این موضوع به ساختار داخلی .Nm مربوط می‌شود. هنگامی که مقادیر ممیز شناور با اندازه‌های مختلف باید با هم مقایسه شوند، ابتدا به ممیز شناور ۱۲۸ بیتی تبدیل می‌شوند. و مشخص شده است که وقتی یک COMP1 به یک COMP2 منتقل می‌شود، و هر دو به FLOAT-EXTENDED تبدیل می‌گردند، دو مقدار حاصل (احتمالاً) برابر خواهند بود. .Pp از بررسی تساوی اجتناب کنید مگر اینکه واقعاً بدانید چه کار می‌کنید و کد را کاملاً آزمایش کرده باشید. و حتی پس از آن نیز بهتر است از آن دوری کنید. .Pp در نهایت، به طور مشهودی مشخص است که پیاده‌سازی تبدیل‌ها و مقایسه‌های ممیز شناور در .Nm دقیقاً با رفتار سایر کامپایلرهای \*[lang] یکسان نیست. .Pp این هشدار را جدی بگیرید. . .Sh "محیط (ENVIRONMENT)" .Bl -tag -width COBPATH .It Ev COBPATH در صورت تعریف شدن، مسیرهای پوشه‌ای را مشخص می‌کند که باید توسط کتابخانه زمان اجرای .Nm ، یعنی .Pa libgcobol.so ، برای یافتن اشیاء مشترک (shared objects) استفاده شوند. همانند .Ev LD_LIBRARY_PATH ، می‌تواند شامل چندین نام پوشه باشد که با دونقطه .Pq Ql \&: از هم جدا شده‌اند. ابتدا .Ev COBPATH جستجو می‌شود و به دنبال آن .Ev LD_LIBRARY_PATH . توجه داشته باشید که .Ev COBPATH محل جستجوی پیونددهنده زمان اجرا را برای یافتن خود .Pa libgcobol.so تغییر نمی‌دهد. نحوه جستجوی پیونددهنده زمان اجرا برای .Pa libgcobol.so هنگام بارگذاری پرونده اجرایی توسط .Xr ld.so 8 کنترل می‌شود، نه توسط libgcobol. .Pp هر پوشه برای یافتن پرونده‌هایی که نام آن‌ها به .Ql ".so" ختم می‌شود جستجو می‌گردد. برای هر پرونده‌ای از این دست، فراخوانی .Xr dlopen 3 آزموده می‌شود و در صورت موفقیت، فراخوانی .Xr dlsym 3 . هیچ رابطه‌ای بین نام نماد و نام پرونده تعریف نشده است. .Pp بدون .Ev COBPATH ، پرونده‌های باینری تولیدشده توسط .Nm همان‌گونه رفتار می‌کنند که از هر برنامه کامپایل‌شده با gcc انتظار می‌رود. هر شیء مشترکی که مورد نیاز برنامه باشد در خط فرمان با گزینه .Fl l Ns Ar library ذکر می‌شود و با دنبال کردن .Pa RPATH پرونده اجرایی یا طبق پیکربندی پیونددهنده زمان اجرا، .Xr ld.so 8 ، یافت می‌گردد. . .It Ev UPSI زبان \*[lang] یک سوییچ نشانگر وضعیت قابل برنامه‌ریزی توسط کاربر (UPSI) را تعریف می‌کند. در .Nm ، این تنظیمات با .Sy UPSI-0 تا .Sy UPSI-7 مشخص می‌شوند که در آن 0 تا 7 نشان‌دهنده موقعیت بیت است. مقدار سوییچ‌های UPSI از متغیر محیطی .Ev UPSI گرفته می‌شود که مقدار آن رشته‌ای از حداکثر هشت کاراکتر 1 و 0 است. نخستین کاراکتر نشان‌دهنده مقدار .Sy UPSI-0 است و مقادیر ناموجود برابر با 0 در نظر گرفته می‌شوند. برای نمونه، مقدار .Sy UPSI=1000011 در محیط، بیت‌های 0، 5 و 6 را روشن می‌کند؛ به این معنا که .Sy UPSI-0 ، .Sy UPSI-5 و .Sy UPSI-6 روشن هستند. .It Ev GCOBOL_TEMPDIR باعث می‌شود هر پرونده موقتی که در حین پردازش CDF ایجاد می‌شود در پرونده‌ای نوشته شود که نام آن در مقدار .Ev GCOBOL_TEMPDIR مشخص شده است. اگر مقدار آن تنها .Dq / باشد، اثر متفاوتی دارد: خواندن هر copybook در خروجی خطای استاندارد گزارش می‌شود. این ویژگی برای کمک به عیب‌یابی خطاهای ناشناخته copybook طراحی شده است. .El . .Ss "متغیرها برای توسعه‌دهندگان (Variables for Developers)" .Bl -tag -compact .It Ev GCOBOL_SHOW ردیابی از فراخوانی‌های داخلی انجام‌شده توسط تجزیه‌کننده برای آماده‌سازی درخت GENERIC را تولید می‌کند. .It Ev GCOBOL_TRACE در زمان کامپایل، پرونده اجرایی را تولید می‌کند که اجرا را ردیابی کرده و آن را به همان توابع تولید کدی نگاشت می‌کند که در .Ev GCOBOL_SHOW مشاهده می‌شود، و همچنین مقادیر اقلام داده و شرایط انشعاب را ردیابی می‌نماید. .El . .Sh "فایل‌ها (FILES)" پرونده‌های اجرایی تولیدشده توسط .Nm به کتابخانه پشتیبانی زمان اجرای .Pa libgcobol نیاز دارند که هم به عنوان کتابخانه ایستا و هم به عنوان شیء مشترک ارائه می‌شود. . .Sh "سازگاری (COMPATIBILITY)" استاندارد ISO تعیین ساختار پیش‌فرض پرونده‌ها را بر عهده پیاده‌سازی گذاشته است؛ در .Nm ، حالت پیش‌فرض .Sy "SEQUENTIAL" است. . .Ss "قالب روی دیسک (On-Disk Format)" هرگونه توانایی در استفاده از پرونده‌های تولیدشده توسط سایر کامپایلرهای \*[lang]، یا استفاده آن کامپایلرها از پرونده‌های تولیدشده توسط .Nm ، حاصل شانس و شهود است. کامپایلرهای گوناگون استاندارد ISO را به شکل‌های متفاوتی تفسیر می‌کنند و متن استاندارد همواره قطعی نیست. .Pp برای پرونده‌های با ساختار .Sy "ORGANIZATION IS LINE SEQUENTIAL" (به صراحت یا به صورت پیش‌فرض)، .Nm در صورت نبود دستورالعمل خاص، یک پرونده متنی معمولی لینوکس تولید می‌کند: برای هر WRITE، داده‌ها نوشته شده و به دنبال آن‌ها یک کاراکتر خط جدید ASCII NL (هگز 0A) می‌آید. در هنگام READ، رکورد تا اندازه رکورد مشخص‌شده یا تا رسیدن به NL خوانده می‌شود، هر کدام که زودتر رخ دهد. کاراکتر NL در داده‌های واردشده به بافر رکورد گنجانده نمی‌شود؛ این کاراکتر تنها به عنوان نشانگر پایان رکورد روی دیسک عمل می‌کند. در نتیجه، پرونده‌های .Sy SEQUENTIAL و .Sy "LINE SEQUENTIAL" به یک شکل کار می‌کنند: برنامه \*[lang] هرگز نشانگر پایان رکورد را نمی‌بیند. .Pp با این حال، هنگامی که .Sy READ و .Sy WRITE همراه با .Sy ADVANCING استفاده می‌شوند، شرایط تغییر می‌کند. اگر .Sy ADVANCING همراه با پرونده‌های .Sy "LINE SEQUENTIAL" به کار رود، توسط .Nm رعایت می‌شود. .Pp سایر کامپایلرها ممکن است چنین عمل نکنند. طبق استاندارد ISO، در دستور .Sy WRITE (بخش 14.9.47.3 قواعد عمومی)، عبارت .Sy ADVANCING برای پرونده‌هایی که .Dq "پرونده فیزیکی از موقعیت‌یابی عمودی پشتیبانی نمی‌کند" نادیده گرفته می‌شود .Em (ignored) Ns . همچنین بیان می‌دارد که در صورت عدم وجود .Sy ADVANCING ، دستور .Sy WRITE به گونه‌ای عمل می‌کند که گویی .Dq "کاربر عبارت AFTER ADVANCING 1 LINE را مشخص کرده است" . برخی پیاده‌سازی‌های دیگر این را بدین معنا تفسیر می‌کنند که نخستین .Sy WRITE در یک پرونده .Sy "LINE SEQUENTIAL" منجر به درج یک NL در ابتدای خط اول می‌شود، و هیچ NL پایانی در خط آخر درج نمی‌گردد. برخی نیز فراتر رفته و استفاده از .Sy ADVANCING را با پرونده‌های .Sy "LINE SEQUENTIAL" ممنوع می‌دانند. . .Sh "همچنین ببینید (SEE ALSO)" .Xr gcc 1 . .Sh "استانداردها (STANDARDS)" استاندارد مرجع برای .Nm برابر با \*[isostd] است. .Bl -bullet -compact .It اگر .Nm کدی مطابق با این استاندارد را کامپایل کند، برنامه حاصل باید به درستی اجرا شود؛ هر نتیجه دیگری یک باگ محسوب می‌شود. .It اگر .Nm کدی را کامپایل کند که با این استاندارد سازگار نیست، اما بر اساس مشخصات دیگری به درستی اجرا شود، این نشان‌دهنده یک افزونه غیراستاندارد است. در آینده گزینه .Fl pedantic برای چنین کدهایی پیام‌های تشخیصی تولید خواهد کرد. .It اگر .Nm کدی را رد کند که با آن استاندارد سازگار است، نشان‌دهنده جنبه‌ای از \*[lang] است که در فهرست کارهای آینده قرار دارد (یا ندارد). اگر مایلید کامپایل شدن آن را ببینید، لطفاً با توسعه‌دهندگان تماس بگیرید. .El . .Ss "وضعیت آزمون‌های اعتبارسنجی کامپایلر NIST کوبول (Status of NIST COBOL Compiler Verification Suite)" .Bl -tag -compact -width "\0\0100% NC" .It NC 100% هسته اصلی (Nucleus) .It SQ 100% ورودی/خروجی ترتیبی (Sequential I/O) .It RL 100% ورودی/خروجی نسبی (Relative I/O) .It IX 100% ورودی/خروجی شاخص‌دار (Indexed I/O) .It IC 100% ارتباط بین برنامه‌ها (Inter-Program Communication) .It ST 100% مرتب‌سازی و ادغام (Sort-Merge) .It SM 100% دستکاری متن منبع RW \en گزارش‌نویس (Report Writer) .It CM ارتباطات (Communication) .It DB to do? اشکال‌زدایی (Debug) .It SG بخش‌بندی (Segmentation) .It IF 100% توابع درونی (Intrinsic Function) .El .Pp در جایی که .Nm ۱۰۰٪ آزمون‌ها را در یک ماژول با موفقیت پشت سر می‌گذارد، ما آزمون‌های (اندک) مربوط به ویژگی‌های منسوخ را مستثنی می‌کنیم. سازندگان ویژگی‌هایی را که در سال ۱۹۸۵ منسوخ شده بودند، امروزه کاملاً و واقعاً منسوخ می‌دانند و آن‌ها را پیاده‌سازی نکرده‌اند. . .Ss "ویژگی‌های به تعویق افتاده قابل توجه (Notable deferred features)" ماژول‌های CCVS-85 که در بالا با وضعیتی مشخص نشده‌اند (CM و SG) در فهرست .Dq "شاید محتمل" قرار دارند، به این معنی که در انتظار اعلام نیاز طرف علاقه‌مندی هستند که کدهای واقعی با استفاده از آن ویژگی داشته باشد. .Pp کامپایلر .Nm بخش‌های Report Writer یا Screen Section را پیاده‌سازی نمی‌کند. . .Ss "فراتر از COBOL/85 (Beyond COBOL/85)" کامپایلر .Nm به طور فزاینده‌ای \*[isostd] را پیاده‌سازی می‌کند. برای نمونه، .Sy DECLARATIVES توسط CCVS-85 آزمایش نمی‌شود، اما توسط .Nm پیاده‌سازی شده است. به همین ترتیب، شرایط خطا (Exception Conditions) در سال ۱۹۸۵ تعریف نشده بودند، و .Nm شامل تعداد فزاینده‌ای از آن‌ها است. .Pp سازندگان به خوبی آگاه هستند که یک کامپایلر کامل و خالص \*[lang]-85 بیشتر کدهای موجود \*[lang] را کامپایل نخواهد کرد. هر شرکتی افزونه‌هایی را ارائه کرده (و می‌کند)، و بیشتر محیط‌ها به انواع پیش‌پردازنده‌ها و سیستم‌های کمکی تعریف‌شده در خارج از استاندارد متکی هستند. هدف صریح افزودن یک فرانت‌اند استاندارد ISO \*[lang] به GCC، ایجاد پایه‌ای است که بر روی آن بتوان هرگونه افزونه مورد نیاز را بنا کرد. . .Sh "تاریخچه (HISTORY)" زبان \*[lang] ممکن است به خوبی قدیمی‌تر از خواننده این متن باشد. تا جایی که نویسندگان آگاهی دارند، کامپایلرهای آزاد \*[lang] نخستین بار در سال ۲۰۰۰ ظاهر شدند. در همان زمان پروژه قبلی \*[lang] برای GCC موسوم به .br .Lk https://cobolforgcc.sourceforge.net cobolforgcc به موفقیت‌هایی دست یافت، اما هرگز به طور رسمی در GCC ادغام نشد. .Pp این کامپایلر، .Nm ، توسط .Lk https://www.cobolworx.com COBOLworx در پاییز ۲۰۲۱ آغاز شد. این پروژه پیاده‌سازی کامل ویژگی‌های اصلی زبان را در دسامبر ۲۰۲۲ اعلام کرد. . .Sh "نویسندگان (AUTHORS)" .Bl -tag -compact .It "James K. Lowden" (jklowden@cobolworx.com) مسئول تجزیه‌کننده (parser) است. .It "Robert Dubner" (rdubner@cobolworx.com) مسئول تولید درخت GIMPLE است که ورودی بخش انتهایی (back-end) کامپایلر GCC محسوب می‌شود. .El . .Sh "هشدارها (CAVEATS)" .Bl -bullet -compact .It کامپایلر .Nm تنها بر روی پردازنده‌های x64 و Apple M1 تحت سیستم‌عامل لینوکس در حالت ۶۴ بیتی آزمایش شده است. .It پشتیبانی از ورودی/خروجی (I/O) به طور گسترده آزمایش نشده است و بسیاری از ویژگی‌های مرتبط با VSAM و سایر زیرسیستم‌های مین‌فریم را پیاده‌سازی یا شبیه‌سازی نمی‌کند. در حالی که پرونده‌های LINE-SEQUENTIAL پرونده‌های متنی معمولی هستند که می‌توان آن‌ها را با ابزارهای استاندارد دستکاری کرد، پرونده‌های INDEXED و RELATIVE تولیدشده توسط .Nm با پرونده‌های هیچ کامپایلر دیگر \*[lang] سازگار نیستند. بهبود و ارتقای پشتیبانی از I/O به آسانی برای مشتریان تجاری در دسترس خواهد بود. .El .