برنامه نویس پیر
برنامه نویس پیر
خواندن ۳ دقیقه·۳ سال پیش

چالش فارسی سازی چاپگر های لیزری در سیستم عامل Dos

اگر سیستم Dos را به خاطر داشته باشید، اکثر گزارشات بصورت فایل های متنی آماده می شد و به چاپگر ارسال می شد.

اکثر چاپگر های آن زمان چاپگر های سوزنی پر سرو صدا بودند با کیفیت های پایین که برای چاپ فارسی مانند صفحه نمایش باید یک برنامه فارسی ساز برای آنها اجرا می کردیم.

چاپگر سوزنی 24 پین اپسون
چاپگر سوزنی 24 پین اپسون

کند بودن پر سرو صدا بودن همراه با تکان خوردن و گران بودن از مشخصات این چاپگر ها بود.

چاپگر ها یک زبان مربوط به خودشون داشتند که با کد های خاصی مشخص می کردید مثلا چه کاراکتری را می خواهید تعریف کنید و بعد یک ماتریس از شماره سوزنهایی که باید برای فونت فعال می شدند را ارسال می کردیم.

به مرور چاپگر های لیزری به بازار آمدند و قیمت آنها ارزانتر شد. HP Laserjet 4L و 5L از اولین نسخه هایی بود که متداول شد.

LaserJet 5L
LaserJet 5L

این چاپگر ها هنوز فارسی ساز نداشت. زبان آنها با چاپگر های سوزنی متفاوت بود. مدتی درگیر فارسی کردن این ها بودیم با نمایندگی HP تماس گرفتیم شرکت خیابان حافظ و نزدیک یکی از ساختمان های دانشگاه ما بود.

مسئول فنی شرکت گفت هنوز فارسی ساز نداریم اما چند شرکت برای خودشان فارسی ساز نوشتند. کتابی هم داشتند از زبان PCL5 مربوط به همین چاپگر ها که اگر می خواستیم باید از آن کپی می گرفتیم چون فقط یک نسخه موجود بود.

رفتم شرکت کتاب رو گرفتم و از قسمتهایی که لازم داشتم کپی گرفتم زبان این چاپگر ها از چاپگر سوزنی سخت تر بود امکانات خوبی اضافه شده بود اما کار پیچیده بود.بعضی از این امکانات

  • امکان تعریف کردن فونت برداری(vector) داشت
  • سایز کاراکتر ها متفاوت بود مثلا 'الف' می توانست عرض کمتری از 'سین'
  • این امکان بود به عقب برگردید و از هر جای کاغذ می خواید مجدد شروع به چاپ یا کشیدن گرافیک کنید(چون صفحه اول در حافظه چاپگر ایجاد می شد و بعد کاغذ برای چاپ کشیده می شد داخل چاپگر)

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

یک راهی به ذهن من رسید توضیحات یک کم فنی میشه اگر سخت بود این بخش رو نخونید.

  • در DOS ارسال هر داده ای به چاپگر باعث صدا کردن یک وقفه می شه که شماره خاصی داره، کافی بود اون وقفه باز نویسی بشه ما دیتای ارسالی رو بجای چاپگر دریافت کنیم و به برنامه پیامی بدیم که فکر کنه چاپگر دستور رو درست اجرا کرده و دستور بعدیی رو ارسال کنه و در نهایت این دیتا ها را در فایل ذخیره و برای چاپگر دیگر در برنامه خودمان ارسال کنیم.

مشکل دوم کمی سخت تر بود زمانی که ما برنامه رو اجرا می کردیم کنترل دست اون برنامه بود و ما نمی تونستیم همزمان برنامه خودمون رو اجرا کنیم.(DOS سیستم عامل مولتی تسک نیست)

  • برای این مورد هم راه حلی داشتم برنامه رو بصورت مقیم در حافظه بنویسم و فعال شدنش رو به اون وقفه مربوط کنم(برنامه های مقیم در حافظه: بطور معمولی خاتمه پیدا نمی کنند و در واقع در بخشی از حافظه داس خودشون رو پنهان می کنند تا در زمان لازم فعال بشن)

بالاخره راهکار تو ذهنم شکل گرفت و برای برنامه نویسی رفتم سراغ زبان اسمبلی یک برنامه آماده کردم و به دوستی که در اون شرکت کار می کرد دادم و با یک فلاپی که قرار بود دیتای مورد نیاز من روی سکتور های اون بشینه البته نه بصورت فایل چون در برنامه رزیدنت با ایجاد فایل کمی مشکل داشتم.

فلاپی
فلاپی

کاری که خواستم رو انجام داد و برای من فلاپی رو آورد. داده ها رو استخراج کردم یک برنامه کوچک با پاسکال نوشتم که این داده ها رو به چاپگر می فرستاد و در کمال تعجب چاپگر فارسی شد.(برای من موفقیت بزرگی بود اون زمان هنوز شاغل نبودم) به فکر کسب در آمد از این فارسی ساز افتادم اما مساله این بود که می تونه کپی بشه. به اولین قفل نرم افزاری که می تونستم بسازم فکر کردم.

داستانی بعدی نحوه ساخت این قفل رو می گم.


برنامه نویسیچاپگراسمبلیخاطرات برنامه نویسی
برنامه نویس از سال 1370 - متخصص و علاقه مند به بانکهای اطلاعاتی مخصوصا MS SQL Server - علاقه مند به بلاک چین(بی سواد علاقه مند)-مدیر فنی و عضو هیات مدیره بامداد
شاید از این پست‌ها خوشتان بیاید