براي استفاده از Mouse در Dos مي بايست از وقفه 33 كمك گرفت . بنابراين در اين مقاله قبل از توضيح بكارگيري مويس در C ابتدا به تشريح بكارگيري وقفه ها در C مي پردازيم.
كساني كه با زبان برنامه نويسي اسمبلي كار كرده اند ، با كار وقفه ها به خوبي آشنايي دارند . در واقع در زبان اسمبلي تمامي كارها با فراخواني وقفه ها انجام ميشود چرا كه اين زبان يك زبان سطح پايين است . اما در زبانهاي سطح بالا مثل C وقفه ها از چشم كاربر دور شده اند تا زبان برنامه نويسي به زبان محاوره اي انسان نزديكتر شود . با اين حال فراخواني وقفه ها در C براي برنامه نويس امكان پذير است .
در زبان C ايتدا بايد يك متغير از نوع رجيستر تعريف شود تا بتوان به كمك آن به رجيستر ها دستيابي داشت :
در تعريف بالا متغير r از نوع Register تعريف شده كه اين نوع در سرفايل Dos.h قرار دارد.
حال براي دستيابي به يك رجيستر مانند AX و يا اجزاي آن يعني AH , AL يك يونيون در Dos.h تعريف شده است كه ساختمان داخلي x در آن براي دستيابي به رجيستر 2 بايتي (رجيستر كامل ) مانند AX و ساختمان داخلي h براي دستيابي به اجزاي رجيستر 2 بايتي يعني AH , AL كه يك بايتي هستند ، مي باشند:
پس اگر بخواهيم به رجيستر AX و مانند آن دستيابي پيدا كنيم مي نويسيم :
و براي اجزاي آن مي نويسيم :
پس از مقدار دهي رجيستر ها و مشخص كردن شماره تابع يا سرويس ، نوبت به فراخواني وقفه يا اينتراپت مي رسد كه با فرمان زير انجام مي شود :
(آدرس متغير رجيستر خروجي,آدرس متغير رجيستر ورودي,شماره وقفه در مبناي 16);
اعداد مبناي 16 در C با 0x شروع مي شوند . مثلا اگر بخواهيم تابع شماره 1 از وقفه 33 را فراخواني كنيم بايد شماره تابع را در AH قرار داده و سپس وقفه را فراخواني كنيم :
كه البته در مثال بالا از آنجايي كه AH جزوي از AX مي باشد و در سمت راست مقدار دهي مي شود از AX استفاده شده است . در واقع AX=01 يعني AL=0 و AH=1 .
متغير in شامل ورودي هاي وقفه است و چنانچه وقفه خروجي هم داشته باشد خروجي هاي آن در out قرار مي گيرد.
حال به استفاده از Mouse مي پردازيم .
1- راه اندازي Mouse : تابع 0 از وقفه 33 : اگر پس از اجراي وقفه مقدار AX برابر 0 باشد يعني مويس راه اندازي نشده است .
لازم به ذكر است كه قبل از فراخواني اين تابع بايد درايور مويس در داس را اجرا كنيد مثلا : GMouse.com
2 - نمايش كرسر مويس : تابع 1 از وقفه 33 : پس از راه اندازي مويس اجرا مي شود .
3- مخفي كردن كرسر مويس : تابع 2 از وقفه 33 :
4-بدست آوردن مختصات مكان نماي مويس : تابع 3 از وقفه 33 : پس از اجراي وقفه شماره ستون در CX و سطر در DX قرار مي گيرد .
5- انتقال كرسر : تابع 4 از وقفه 33 : قبل از فراخواني مي بايست شماره ستون مورد نظر در CX و شماره سطر در DX قرار گيرد .
6- تست كليك شدن مويس : تابع 5 از وقفه 33 : شماره كليد مويس بايد در BX قرار گيرد ( 0 براي چپ - 1 براي راست و 2 براي وسط ) . اگر كليك شده باشد مقدار 1 در BX و گرنه 0 در آن قرار مي گيرد.
توابع گفته شده سرويسهاي مهم بكارگيري مويس بود . ساير توابع را مي توانيد در جدول وقفه هاي داس در ستون وقفه 33 بيابيد .
منبع پارسی فوروم. البته هر سوالی داشتید سعی میکنم جواب بدم با معلوماتی که دارم.
علاقه مندی ها (بوک مارک ها)