پرش به مطلب اصلی

کتابخانه توابع پیشنهادی


از آنجا که PAWN به عنوان یک زبان توسعه برنامه هدف‌گذاری شده است، بیشتر توابعی که برای برنامه‌های PAWN قابل دسترسی هستند، مختص برنامه میزبان خواهند بود. با این حال، مجموعه کوچکی از توابع ممکن است برای بسیاری از محیط‌ها مفید باشد.

• توابع اصلی

ماژول "اصلی" شامل مجموعه‌ای از توابع است که از زبان پشتیبانی می‌کنند. چندین تابع برای استخراج آرگومان‌ها از یک لیست آرگومان متغیر مورد نیاز هستند (صفحه 80 را ببینید).

clampیک مقدار را در یک محدوده قرار می‌دهد
نحوclamp(value, min=cellmin, max=cellmax)
valueمقداری که باید در محدوده قرار گیرد
minحد پایین محدوده.
maxحد بالای محدوده.
برمی‌گرداندvalue اگر در محدوده min – max باشد؛ min اگر value کمتر از min باشد؛ و max اگر value بیشتر از max باشد.
همچنین ببینیدmax، min
funcidxشاخص یک تابع عمومی را برمی‌گرداند
نحوfuncidx(const name[])
برمی‌گرداندشاخص تابع عمومی با نام مشخص شده. اگر هیچ تابع عمومی با نام داده شده وجود نداشته باشد، funcidx مقدار −1 را برمی‌گرداند.
نکات:یک برنامه میزبان یک تابع عمومی را از اسکریپت با ارسال شاخص تابع عمومی به amx_Exec اجرا می‌کند. با این تابع، اسکریپت می‌تواند شاخص یک تابع عمومی را پرس و جو کند، و بدین ترتیب "تابع بعدی برای فراخوانی" را به برنامه برگرداند.
getargدریافت یک آرگومان
نحوgetarg(arg, index=0)
argشماره ترتیب آرگومان، برای اولین آرگومان از 0 استفاده کنید.
indexشاخص، در صورتی که arg به یک آرایه اشاره کند.
برمی‌گرداندمقدار آرگومان
نکات:این تابع یک آرگومان را از یک لیست آرگومان متغیر بازیابی می‌کند. وقتی آرگومان یک آرایه است، پارامتر index شاخص آرایه را مشخص می‌کند. مقدار برگشتی آرگومان بازیابی شده است.
همچنین ببینیدnumargs، setarg
heapspaceفضای آزاد هیپ را برمی‌گرداند
نحوheapspace()
برمی‌گرداندفضای آزاد روی هیپ. پشته و هیپ یک فضای حافظه مشترک را اشغال می‌کنند، بنابراین این مقدار تعداد بایت‌هایی را نشان می‌دهد که برای پشته یا هیپ باقی مانده است.
نکات:در صورت عدم وجود بازگشت، تجزیه‌کننده pawn همچنین می‌تواند تخمینی از فضای پشته/هیپ مورد نیاز ارائه دهد.
maxبزرگترین مقدار از بین دو عدد را برمی‌گرداند
نحوmax(value1, value2)
value1
value2دو مقداری که می‌خواهید بزرگترین عدد را برای آنها پیدا کنید.
برمی‌گرداندمقدار بزرگتر از value1 و value2
همچنین ببینیدclamp، min
minکوچکترین مقدار از بین دو عدد را برمی‌گرداند
نحوmin(value1, value2)
value1
value2دو مقداری که می‌خواهید کوچکترین عدد را برای آنها پیدا کنید.
برمی‌گرداندمقدار کوچکتر از value1 و value2
همچنین ببینیدclamp، max
numargsتعداد آرگومان‌ها را برمی‌گرداند
نحوnumargs()
برمی‌گرداندتعداد آرگومان‌های ارسال شده به یک تابع؛ numargs در توابع با لیست آرگومان متغیر مفید است
همچنین ببینیدgetarg، setarg
randomیک عدد شبه-تصادفی را برمی‌گرداند
نحوrandom(max)
maxمحدودیت برای عدد تصادفی
برمی‌گرداندیک عدد شبه-تصادفی در محدوده 0 - max-1
نکات:مولد عدد تصادفی استاندارد pawn احتمالاً یک مولد عدد شبه-تصادفی خطی هم‌نهشتی با محدوده و دوره 2³¹ است. مولدهای عدد شبه-تصادفی خطی هم‌نهشتی از همبستگی سریالی رنج می‌برند (به ویژه در بیت‌های پایین) و برای برنامه‌هایی که به اعداد تصادفی با کیفیت بالا نیاز دارند، مناسب نیستند.
setarg
نحوsetarg(arg, index=0, value)
argشماره ترتیب آرگومان، برای اولین آرگومان از 0 استفاده کنید
indexشاخص، در صورتی که arg به یک آرایه اشاره کند
valueمقداری که آرگومان باید به آن تنظیم شود
برمی‌گردانددر صورت موفقیت true و در صورت نامعتبر بودن آرگومان یا شاخص، false
نکات:این تابع مقدار یک آرگومان را از یک لیست آرگومان متغیر تنظیم می‌کند. وقتی آرگومان یک آرایه است، پارامتر index شاخص آرایه را مشخص می‌کند.
همچنین ببینیدgetarg، numargs
swapcharsبایت‌ها را در یک cell جابجا می‌کند
نحوswapchars(c)
cمقداری که بایت‌های آن باید جابجا شوند
برمی‌گرداندمقداری که در آن بایت‌های پارامتر "c" جابجا شده‌اند (بایت پایین‌ترین تبدیل به بایت بالاترین می‌شود)
tolowerیک کاراکتر را به حروف کوچک تبدیل می‌کند
نحوtolower(c)
cکاراکتری که باید به حروف کوچک تبدیل شود.
برمی‌گرداندنسخه حروف بزرگ کاراکتر ورودی، اگر وجود داشته باشد، یا کد کاراکتر بدون تغییر "c" اگر حرف "c" معادل حروف کوچک نداشته باشد.
نکات:پشتیبانی از کاراکترهای اکسنت‌دار وابسته به پلتفرم است
همچنین ببینیدtoupper
toupperیک کاراکتر را به حروف بزرگ تبدیل می‌کند
نحوtoupper(c)
cکاراکتری که باید به حروف بزرگ تبدیل شود.
برمی‌گرداندنسخه حروف کوچک کاراکتر ورودی، اگر وجود داشته باشد، یا کد کاراکتر بدون تغییر "c" اگر حرف "c" معادل حروف بزرگ نداشته باشد.
نکات:پشتیبانی از کاراکترهای اکسنت‌دار وابسته به پلتفرم است
همچنین ببینیدtolower

خصوصیات، نام‌ها یا مقادیر با هدف عمومی هستند. روال‌های لیست خصوصیات یک لیست از این جفت‌های نام/مقدار را نگهداری می‌کنند که بین تمام ماشین‌های انتزاعی به اشتراک گذاشته می‌شود. بنابراین لیست خصوصیات راهی برای ماشین‌های انتزاعی همزمان برای تبادل اطلاعات است.

همه توابع "نگهداری خصوصیات" یک پارامتر اختیاری "id" دارند. می‌توانید از این پارامتر برای نشان دادن اینکه خصوصیت به کدام ماشین انتزاعی تعلق دارد، استفاده کنید. (یک برنامه میزبان که از ماشین‌های انتزاعی همزمان پشتیبانی می‌کند، معمولاً به هر ماشین انتزاعی یک شناسه منحصر به فرد می‌دهد.) هنگام پرس و جو (یا حذف) یک خصوصیت، مقدار id که وارد می‌کنید با مقادیر id لیست مطابقت داده می‌شود.

یک خصوصیت با "شناسه ماشین انتزاعی" آن به علاوه یک نام یا یک مقدار شناسایی می‌شود. رابط مبتنی بر نام به شما امکان می‌دهد یک مقدار (مثلاً دسته یک شیء) را به نامی به انتخاب خود متصل کنید. رابط مبتنی بر مقدار به شما امکان می‌دهد یک رشته را به یک عدد متصل کنید. تفاوت بین این دو اساساً کلید جستجو در مقابل پارامتر خروجی است.

همه توابع نگهداری خصوصیات یک پارامتر "name" و یک پارامتر "value" دارند. فقط یکی از این جفت باید پر شود. وقتی مقدار را می‌دهید، تابع getprop- erty نتیجه را در آرگومان رشته ذخیره می‌کند و تابع setproperty رشته را برای ذخیره از آرگومان رشته می‌خواند.

تعداد خصوصیاتی که می‌توانید اضافه کنید فقط توسط حافظه موجود محدود می‌شود.

getproperty(id=0, const name[]="", value=cellmin, string[]="")

هنگامی که نام وارد می‌شود، مقدار یک خصوصیت را برمی‌گرداند؛ هنگامی که مقدار وارد می‌شود، آرگومان رشته را پر می‌کند. رشته نام ممکن است یک رشته packed یا unpacked باشد. اگر خصوصیت وجود نداشته باشد، این تابع صفر برمی‌گرداند.

setproperty(id=0, const name[]="", value=cellmin, const string[]="")

یک خصوصیت جدید اضافه می‌کند یا یک خصوصیت موجود را تغییر می‌دهد.

deleteproperty(id=0, const name[]="", value=cellmin)

مقدار خصوصیت را برمی‌گرداند و سپس آن را حذف می‌کند. اگر خصوصیت وجود نداشته باشد، تابع صفر برمی‌گرداند.

existproperty(id=0, const name[]="", value=cellmin)

اگر خصوصیت وجود داشته باشد true و در غیر این صورت false برمی‌گرداند.

• توابع کنسول

برای اهداف آزمایشی، توابع کنسول که ورودی کاربر را می‌خوانند و رشته‌ها را در یک پنجره قابل اسکرول یا روی یک نمایشگر ترمینال استاندارد خروجی می‌دهند، اغلب مناسب هستند. همه انواع ترمینال و پیاده‌سازی‌ها ممکن است همه توابع را پیاده‌سازی نکنند —به ویژه توابعی که صفحه را پاک می‌کنند، رنگ‌های پیش‌زمینه و پس‌زمینه را تنظیم می‌کنند و موقعیت مکان‌نما را کنترل می‌کنند، به یک کنترل ترمینال گسترده نیاز دارند.

getchar(echo=true)

یک کاراکتر از صفحه کلید می‌خواند و آن را برمی‌گرداند. تابع می‌تواند به صورت اختیاری کاراکتر را در پنجره کنسول نمایش دهد.

getstring(string[], size=sizeof string, bool

pack=false): یک رشته از صفحه کلید می‌خواند. تابع getstring هنگامی که کلید enter فشرده شود یا حداکثر طول به دست آید، خواندن را متوقف می‌کند. حداکثر طول در cell ها (نه کاراکترها) است و شامل یک کاراکتر نول پایانی است. تابع می‌تواند هم رشته‌های packed و هم unpacked را بخواند؛ هنگام خواندن یک رشته packed، تابع ممکن است کاراکترهای بیشتری نسبت به آنچه پارامتر size مشخص می‌کند بخواند، زیرا هر cell چندین کاراکتر را نگه می‌دارد. مقدار برگشتی تعداد کاراکترهای خوانده شده، به استثنای کاراکتر نول پایانی است.

getvalue(base=10, end=' r', ...)

یک مقدار (یک عدد با علامت) از صفحه کلید می‌خواند. تابع getvalue به شما امکان می‌دهد یک مبنای عددی از 2 تا 36 (پارامتر base) با مبنای دهدهی به صورت پیش‌فرض بخوانید.

به طور پیش‌فرض ورودی هنگامی که کاربر کلید enter را فشار دهد پایان می‌یابد، اما یک یا چند کلید متفاوت ممکن است انتخاب شوند (پارامتر end و موارد بعدی). در لیست کلیدهای پایانی، یک عدد مثبت (مانند '\r') کلید را نمایش می‌دهد و ورودی را پایان می‌دهد، و یک عدد منفی ورودی را بدون نمایش کلید پایانی پایان می‌دهد.

print(const string[], foreground=-1, background=-1)

یک رشته ساده را روی کنسول چاپ می‌کند. رنگ‌های پیش‌زمینه و پس‌زمینه ممکن است به صورت اختیاری تنظیم شوند (اما توجه داشته باشید که یک ترمینال یا یک برنامه میزبان ممکن است از رنگ‌ها پشتیبانی نکند). برای لیست رنگ‌ها، setattr را در زیر ببینید.

printf(const format[], ...)

یک رشته با کدهای تعبیه شده چاپ می‌کند:

%b یک عدد را در این موقعیت در مبنای باینری چاپ می‌کند

%c یک کاراکتر در این موقعیت

%d یک عدد را در این موقعیت در مبنای دهدهی چاپ می‌کند

%f یک عدد نقطه شناور را در این موقعیت چاپ می‌کند (با فرض اینکه پشتیبانی نقطه شناور وجود داشته باشد)

%q یک عدد نقطه ثابت را در این موقعیت چاپ می‌کند (با فرض اینکه پشتیبانی نقطه ثابت وجود داشته باشد)

%r یا یک عدد نقطه شناور یا یک عدد نقطه ثابت را در این موقعیت چاپ می‌کند، بسته به آنچه در دسترس است؛ اگر هم پشتیبانی نقطه شناور و هم پشتیبانی نقطه ثابت وجود داشته باشد، %r معادل %f است (یعنی چاپ یک عدد نقطه شناور)

%s یک رشته کاراکتری را در این موقعیت چاپ می‌کند

%x یک عدد را در این موقعیت در مبنای هگزادسیمال چاپ می‌کند

تابع printf مشابه تابع printf زبان C کار می‌کند.

clrscr()

کنسول را پاک می‌کند و مکان‌نما را در گوشه بالا سمت چپ قرار می‌دهد.

clreol()

خطی را که مکان‌نما در آن قرار دارد، از موقعیت مکان‌نما تا حاشیه راست کنسول پاک می‌کند. این تابع مکان‌نما را حرکت نمی‌دهد.

gotoxy(x=1, y=1)

موقعیت مکان‌نما را روی کنسول تنظیم می‌کند. گوشه بالا سمت چپ در (1,1) است.

setattr(foreground=-1, background=-1)

رنگ‌های پیش‌زمینه و پس‌زمینه را برای متن نوشته شده روی کنسول تنظیم می‌کند. وقتی هر یک از دو پارامتر منفی باشد (یا حذف شود)، تنظیم رنگ مربوطه تغییر نخواهد کرد. مقدار رنگ باید مقداری بین صفر و هفت باشد، مطابق با دنباله‌های Escape ANSI، ISO 6429.

ثابت‌های از پیش تعریف شده برای رنگ‌ها عبارتند از سیاه (0)، قرمز (1)، سبز (2)، زرد (3)، آبی (4)، ارغوانی (5)، فیروزه‌ای (6) و سفید (7).

• توابع تاریخ/زمان

توابع برای دریافت و تنظیم تاریخ و زمان فعلی، و همچنین یک تایمر "رویداد" با دقت میلی‌ثانیه در یک یادداشت برنامه با عنوان "کتابخانه توابع زمان" که به صورت جداگانه در دسترس است، توضیح داده شده‌اند.

• ورودی/خروجی فایل

توابع برای مدیریت فایل‌های متنی و باینری، با پشتیبانی مستقیم از فایل‌های متنی UTF-8، در یک یادداشت برنامه با عنوان "کتابخانه پشتیبانی ورودی/خروجی فایل" که به صورت جداگانه در دسترس است، توضیح داده شده‌اند.

• محاسبات نقطه ثابت

ماژول محاسبات اعشاری نقطه ثابت برای pawn در یک یادداشت برنامه با عنوان "کتابخانه پشتیبانی نقطه ثابت" که به صورت جداگانه در دسترس است، توضیح داده شده است.

• محاسبات نقطه شناور

ماژول محاسبات نقطه شناور برای pawn در یک یادداشت برنامه با عنوان "کتابخانه پشتیبانی نقطه شناور" که به صورت جداگانه در دسترس است، توضیح داده شده است.

• دستکاری رشته

یک مجموعه عمومی از توابع دستکاری رشته، که هم روی رشته‌های packed و هم unpacked کار می‌کنند، در یک یادداشت برنامه با عنوان "کتابخانه دستکاری رشته" که به صورت جداگانه در دسترس است، توضیح داده شده است.

• رابط فراخوانی DLL

نسخه ماشین انتزاعی که به عنوان یک کتابخانه پیوند پویا برای Microsoft Windows ساخته شده است، یک تابع با هدف عمومی برای فراخوانی یک تابع از هر DLL در حافظه دارد. دو تابع همراه، یک DLL را از دیسک به حافظه بارگذاری می‌کنند و آن را تخلیه می‌کنند. توابع به گونه‌ای تنظیم شده‌اند که امکان اجرای همان اسکریپت کامپایل شده در هر دو نسخه 16 بیتی و 32 بیتی Microsoft Windows وجود دارد.

همه پارامترهای رشته ممکن است هم به فرم packed و هم unpacked باشند.

calldll(const dllname[], const function[], const typestr[], ...)

پارامتر dllname نام ماژول DLL است، معمولاً این همان نام فایل است. اگر DLL پیدا نشود، calldll دوباره تلاش می‌کند پس از افزودن "16" یا "32" به نام فایل، بسته به اینکه نسخه 16 بیتی یا 32 بیتی ماشین انتزاعی را اجرا می‌کنید. به عنوان مثال، اگر dllname را "USER" تنظیم کنید، calldll به USER در نسخه 16 بیتی ماشین انتزاعی و به USER32 در نسخه 32 بیتی متصل می‌شود.

پارامتر function نام تابع در DLL است. در نسخه 16 بیتی، این نام به بزرگی و کوچکی حروف حساس نیست، اما در نسخه 32 بیتی Microsoft Windows، نام‌های توابع صادر شده به بزرگی و کوچکی حروف حساس هستند. در نسخه 32 بیتی ماشین انتزاعی، اگر function پیدا نشود، calldll یک "A" بزرگ به نام اضافه می‌کند و دوباره تلاش می‌کند

—بسیاری از توابع در Windows 32 بیتی در دو نوع وجود دارند: ANSI و "Wide"، و این توابع به ترتیب با "A" یا "W" پسوند دارند. بنابراین اگر function "MessageBox" باشد، calldll MessageBox را در نسخه 16 بیتی Windows و MessageBoxA را در نسخه 32 بیتی فراخوانی می‌کند.

پارامتر رشته typestr تعداد آرگومان‌هایی را که تابع (در DLL) می‌گیرد و نوع آنها را نشان می‌دهد. برای هر آرگومان، یک حرف به رشته typestr اضافه می‌کنید:

h یک "handle" ویندوز (HWND، HDC، HPALETTE، HMEM و غیره)

i یک عدد صحیح با "اندازه بومی" (16 بیتی یا 32 بیتی، بسته به "بیتی بودن" ماشین انتزاعی).

l یک عدد صحیح 32 بیتی

p یک رشته packed

s یک رشته unpacked

w یک عدد صحیح 16 بیتی بدون علامت

وقتی حرف با حروف کوچک باشد، پارامتر مربوطه "با مقدار" منتقل می‌شود؛ وقتی با حروف بزرگ باشد، "با ارجاع" منتقل می‌شود. تفاوت بین رشته‌های packed و unpacked فقط زمانی مربوط است که پارامتر با ارجاع منتقل شود.

loaddll(const dllname[])

DLL مشخص شده را به حافظه بارگذاری می‌کند (یا شمارش استفاده آن را افزایش می‌دهد اگر قبلاً بارگذاری شده باشد). نام در پارامتر dllname ممکن است شامل یک مسیر کامل باشد. اگر هیچ مسیری مشخص نشده باشد، Microsoft Windows در دایرکتوری‌های سیستم خود برای DLL جستجو می‌کند. مشابه تابع calldll، این

تابع "16" یا "32" را به نام DLL اضافه می‌کند اگر DLL پیدا نشود، و سپس دوباره تلاش می‌کند.

freedll(const dllname[])

شمارش استفاده DLL را کاهش می‌دهد و اگر شمارش به صفر برسد، DLL را از حافظه حذف می‌کند. نام در پارامتر dllname ممکن است شامل یک مسیر کامل باشد، اما اطلاعات مسیر نادیده گرفته می‌شود. مشابه تابع calldll، این تابع "16" یا "32" را به نام DLL اضافه می‌کند اگر DLL پیدا نشود، و سپس دوباره تلاش می‌کند.

iswin32()

اگر ماشین انتزاعی نسخه 32 بیتی باشد (در حال اجرا در یک نسخه 32 بیتی از Microsoft Windows) true برمی‌گرداند؛ اگر ماشین انتزاعی نسخه 16 بیتی باشد (در حال اجرا در Windows 3.1x یا هر نسخه بعدی از Microsoft Windows) false برمی‌گرداند.


amx_Exec: به "راهنمای پیاده‌سازی کننده" مراجعه کنید


برگشت به فهرست