۱۲-کاربا btrieve و نوشتن ابزار

برای آشنایی با بانک اطلاعاتی btrieve یک کتاب به زبان انگلیسی بود، که باید کپی می گرفتیم.خود برنامه یکبار اجرا می شد و در حافظه جا خوش می کرد. یک فایل obj داشت که باید در پروژه cpp اضافه می کردی و با بانک اطلاعاتی ارتباط می گرفتی، کد خیلی پیچیده و مبهمی داشت برای هر کاری باید کلی کد نا خوانا می نوشتی و در دسر های زیاد واقعا شاید یک گزارش ساده که الان با یک دستور select نوشته میشه هزار خط کد می شد.خب یک جوجه برنامه نویس پر ادعا تصمیم گرفت یک کلاس یا object برای این بنویسه.بامفاهیم نیم بندی که از کلاس ها یادگرفته بودم با کمک چند دوست شروع کردیم، این شد یکی از ابزارهایی که خیلی کمکمون کرد و تازمانی که با DOS برنامه می نوشتیم هم ازش استفاده کردیم.این کلاس یک structure داشت که در اصل همون فیلد های جدول رو شامل می شد. و برای هر جدول از کلاس اصلی یک فرزند می ساختیم که این structure در فرزند متفاوت بود.بعد یکسری متد داشت مثل insert و get_first و get_next و ... که می شد اطلاعات رو از جدول استخراج کرد.وجودش لطف بزرگی بود چون دیگه لازم نبود با آدرس اطلاعات کار کنی در انتخاب ایندکس ها محاسبات عجیب و غریب به خرج بدی و ...در همین دوران با چند نفر از هم دانشگاهی ها که شروع کرده بودن به نوشتن یک برنامه برای دفاتر اسناد رسمی هم تیم شدم، به ظاهر تحلیل خوبی هم داشتند که این مجموعه ها هنوز نرم افزار ندارند و هیچ گروهی هنوز برای دفاتر اسناد رسمی برنامه ننوشته. البته ما از این مساله اطلاع نداشتیم که کلا این مراکز باید همه چیز را در دفاتر و با دست خط ثبت کنند وسیستم قضایی کشور هیچ نرم افزاری رو قبول نمی کرد، در نتیجه این نرم افزار هم هیچ مشتری نداشت.تلاش هایی هم خودم کردم جهت تولید نرم افزار معاملات املاک،دفترچه تلفن و... که یا درحد یکی دوجا نصب شد یا بی مشتری ماند.با معرفی یکی از همکلاسی ها در یک شرکت نرم افزاری استخدام شدم در ابتدا بعنوان پشتیبان برنامه پاسکال.بعنوان کار آموز من و یک نفر دیگه پیش یکی از کارکنان شروع کردیم به آموزش دیدن نرم افزار حسابداری شرکت و بعد از دو سه هفته اون شخص از شرکت رفت تازه من و کارآموز دوم متوجه شدیم جایگزین شخصی شدیم که از شرکت رفته و هنوز کار باسیستم و مطالب اولیه رو نفهمیدیم باید بریم محل مشتری رفع ایراد کنیم و به مشتری آموزش بدیم.واحد پشتیبانی شرکت به تعداد کارکنان کامپیوتر نداشت و یک یا دو کامپیوتر بود که نوبتی کار می کردیم و اگر باگی گزارش می شد باید اول تست می کردیم و به واحد نرم افزار گزارش می دادیم.اون زمان شرکت قفل های سخت افزاری داشت که بر روی پورت پارالل نصب می شد در واقع قبل از کابل چاپگر.قفل سخت افزارییک همچین چیزی بود. با آشنایی که با اسمبلی و نرم افزار debug داشتم در وقت اضافه نرم افزار رو باز کردم و روال های کنترل قفل رو پیدا کردم با چند تغییر کوچیک در کد ماشین فایل های exe قفل ها رو شکوندم و برنامه رو بدون قفل اجرا کردم.مدیر پشتیبانی که با مدیر نرم افزار رقابت داشت و آدم زیرآب زنی هم بود رفت این رو به عنوان یک دست آورد به مدیرعامل گفت، که دیدم مدیر عامل توی یک جلسه با مدیر نرم افزار من رو صدا کرد و مساله رو مطرح کرد.این قضیه باعث شد یک کامپیوتر مستقل در واحد نرم افزار به من بدن که روی این مساله کار کنم و به قوی شدن قفل ها کمک کنم.یک مشکل دیگه هم نرم افزار های پاسکال شرکت داشت که بدلیل حجم زیاد مجبور شده بودند نرم افزار رو تبدیل به چند فایل اجرایی بکنند تا حافظه کم نیاد. من یک راهکار داشتم که هر دو مشکل رو حل کنم استفاده از فایل های overlay.پاسکال برای رفع این مشکل یک راهکار عالی داشت شما می تونستی برنامه رو به بخش های کوچکتر تبدیل کنی و اونها رو در فایلهایی با پسوند ovr ترجمه کنی هر زمان به یکی از این ovr ها نیاز داشتی اون رو در حافظه بار می کردی برنامه رو اجرا می کردی و بعد دوباره می بستی و می رفتی سراغ بعدی. مشکل ققل چطور حل شد اینکه روتین قفل رو به یکی از ovr ها منقل کردم زمان کنترل قفل بار می شد و قفل رو چک می کرد این عملکرد برنامه رو در دیباگ پیچیده می کرد و البته کمی هم بازی در الگوریتم در آوردم که کار رو پیچیده کنم. یک فلگ وجود داره به نام t کارش این هست که به پردازنده می گه برنامه داره trace می شه پس هر دستور رو جداگانه اجرا کن حالا بین کد ها یک کد اسمبلی اضافه کردم که این فلگ رو چک کنه وقتی با debug برنامه اجرا می شد این flag کد یک بود و من کاربر رو می فرستادم تو یک روتین غیر واقعی و پیام قفل موجود نیست یا همچین چیزی می دادم اگر هم کسی به این روتین دست میزد روتین اصلی کارش رو می کرد.بعد از حل این مشکل رفتم سراغ exe های جدا شده و هرکدوم رو تبدیل به ovr کردم و یک برنامه ایجاد کردم که اونها رو اجرا کنه.برنامه کلا متحول شد و من شدم یکی از برنامه نویس های شرکت.یک بخش از برنامه های شرکت با CPP بود که اتفاقا بخش بزرگی بود و درآمد شرکت هم از اون بخش بیشتر بود و برنامه نویس های سی همیشه احترام بیشتری نسبت به ما داشتند. قدم بعدی نشون دادم خودم به برنامه نویس های C بود که در قسمت بعد می گم چطور موقعیت فراهم شد.