h2pas(1) Free Pascal C header conversion utility h2pas(1)

h2pas - برنامه تبدیل فایل‌های هدر C به یونیت‌های pascal

h2pas [options] filename

دستور h2pas تلاش می‌کند یک فایل هدر C را به یک یونیت pascal تبدیل کند. این برنامه می‌تواند اکثر ساختارهای C موجود در یک فایل هدر C را مدیریت کرده و آن‌ها را به معادل‌هایشان در pascal ترجمه کند. برای توضیحات کامل درباره آنچه این مترجم پشتیبانی می‌کند، بخش ساختارها (CONSTRUCTS) را ببینید.

ابزار H2pas یک ابزار خط فرمانی است که یک فایل هدر C را به یک یونیت pascal ترجمه می‌کند. این برنامه فایل هدر C را خوانده و اعلان‌های C را به اعلان‌های معادل در pascal ترجمه می‌کند که می‌توان از آن‌ها برای دسترسی به کدهای نوشته‌شده به زبان C استفاده کرد.

خروجی برنامه h2pas در فایلی با همان نام فایل هدر C ورودی، اما با پسوند .pp ذخیره می‌شود. فایل خروجی ایجادشده توسط h2pas را می‌توان با استفاده از گزینه‌های متعدد به روش‌های مختلفی سفارشی‌سازی کرد.

خروجی h2pas را می‌توان با گزینه‌های زیر کنترل کرد:

استفاده از external; برای اعلان تمام procedureها و functionها.
استفاده از external libname name 'func_name' برای اعلان‌های function و procedure.
تولید مجموعه‌ای از ثوابت به جای یک نوع شمارشی (enumeration) برای ساختار enum در C.
ایجاد یک فایل include به جای یک unit (سرآیند unit حذف می‌شود).
مشخص کردن نام کتابخانه برای اعلان‌های توابع خارجی (external).
مشخص کردن نام فایل خروجی. مقدار پیش‌فرض، نام فایل ورودی با جایگزینی پسوند آن با .pp است.
استفاده از حرف P در ابتدای پارامترهای نوع اشاره‌گر به جای «^».
حذف کامنت‌ها از فایل ورودی. به‌طور پیش‌فرض کامنت‌ها به کامنت تبدیل می‌شوند، اما ممکن است جابه‌جا شوند؛ چرا که کامنت‌ها توسط اسکنر پردازش می‌شوند.
افزودن حرف T به ابتدای نام انواع typedef (برای پیروی از شیوه نام‌گذاری Borland مبنی بر اینکه همه نوع‌ها باید با T تعریف شوند).
جایگزینی پارامترهای اشاره‌گر با پارامترهای فراخوانی با ارجاع (call by reference). با احتیاط استفاده شود، زیرا برخی فراخوانی‌ها ممکن است انتظار یک اشاره‌گر NIL را داشته باشند.
فایل هدر یک فایل هدر win32 است (پشتیبانی از برخی ماکروهای ویژه را اضافه می‌کند).
مدیریت SYS_TRAP در فایل‌های هدر PalmOS.

اعلان‌ها و دستورهای C زیر شناسایی می‌شوند:

دستورهای define در صورتی که ساده باشند، به ثوابت pascal تبدیل می‌شوند. ماکروها تا حد امکان به تابع تغییر می‌یابند؛ با این حال، آرگومان‌ها همگی عدد صحیح (integer) در نظر گرفته می‌شوند، بنابراین باید به صورت دستی اصلاح شوند. عبارت‌های ساده در دستورهای define و همچنین بیشتر عملگرهای حسابی شناسایی می‌شوند: جمع، تفریق، ضرب، تقسیم، عملگرهای منطقی، عملگرهای مقایسه‌ای و عملگرهای شیفت (انتقال بیتی). ساختار C عملگر شرطی ( A ? B : C) نیز شناسایی شده و به یک ساختار pascal همراه با دستور IF ترجمه می‌شود (البته این مورد دارای اشکالاتی است).
دستورهای پیش‌پردازنده شرطی شناسایی شده و به دستورالعمل‌های معادل کامپایلر pascal ترجمه می‌شوند. دستور خاص #ifdef __cplusplus نیز شناسایی و حذف می‌شود.
یک دستور typedef به یک دستور type در pascal تبدیل می‌شود. نوع‌های پایه زیر شناسایی می‌شوند:
به char تبدیل می‌شود.
به real (معادل double در free pascal) تبدیل می‌شود.
به longint تبدیل می‌شود.
به longint تبدیل می‌شود.
long int
به longint تبدیل می‌شود.
به integer تبدیل می‌شود.
به cardinal تبدیل می‌شود.
unsigned char
به byte تبدیل می‌شود.
unsigned int
به cardinal تبدیل می‌شود.
unsigned long int
به cardinal تبدیل می‌شود.
unsigned short
به word تبدیل می‌شود.
نادیده گرفته می‌شود.
این نوع‌ها در صورتی که در آرگومان‌های یک function یا procedure نیز ظاهر شوند، تغییر می‌یابند.
توابع و رویه‌ها نیز ترجمه می‌شوند؛ نوع‌های اشاره‌گر می‌توانند با استفاده از آرگومان خط فرمان -p به آرگومان‌های فراخوانی با ارجاع (با استفاده از آرگومان var ) تغییر یابند. توابعی که تعداد متغیری از آرگومان‌ها دارند به تابعی با یک آرگومان array of const تبدیل می‌شوند.
مشخص‌کننده extern شناسایی می‌شود؛ با این حال، نادیده گرفته خواهد شد. مشخص‌کننده packed نیز شناسایی شده و با دستورالعمل PACKRECORDS جایگزین می‌گردد. همچنین مشخص‌کننده const شناسایی شده ولی نادیده گرفته می‌شود.
در صورت مشخص شدن گزینه -w ، اصلاح‌کننده‌های زیر طبق تعریف هدرهای win32 شناسایی می‌شوند: STDCALL , CDECL , CALLBACK , PASCAL , WINAPI , APIENTRY , WINGDIAPI همچنین اگر گزینه -x نیز مشخص شده باشد، مشخص‌کننده SYS_TRAP هم شناسایی می‌شود.
ساختارهای enum به نوع‌های شمارشی (enumeration) تبدیل می‌شوند؛ به یاد داشته باشید که در C می‌توان مقادیری را به نوع‌های شمارشی اختصاص داد؛ Free Pascal نیز تا حد معینی این امکان را می‌دهد. اگر می‌دانید که مقادیری به enumها تخصیص یافته است، بهتر است از گزینه -e برای تبدیل enumها به مجموعه‌ای از ثوابت عدد صحیح استفاده کنید.
نوع‌های union به رکوردهای variant تبدیل می‌شوند.
به رکوردهای pascal با بسته‌بندی (packing) از نوع C تبدیل می‌شوند.

ppc386(1) ppumove(1)
12 Dec 1999 Free Pascal