سلام!
هدف : فارسی نویسی Native در Graphicآ LCD
پلاتفورم : AVR
زبان برنامه نویسی : C و تحت استاندارد GNU99
کامپایلر : AVR-GCC
سعی میکنم یکسری توضیحات و نکات رو درباره استفاده از این کتابخونه بنویسم ، اگر سوالی داشتید که توضیح ندادم بگید .
توضیحات و نکات :
توسط این کتابخانه شما میتونید مستقیما در برنامه تون فارسی بنویسید و اونو نمایش بدید . برای اینکار کافیه فقط کتابخونه + موارد مورد نیاز دیگر را در سورس C تو Include کنین .
این کتابخونه در حال حاضر فقط قادر به تشخیص کرکتر های UNICODE دوبایتی می باشد .
درحال حاظر برای این کتابخونه یک فونت کامل بیشتر طراحی نشده و اون هم کوچکترین فونت قابل استفاده یعنی فونت 8*8 هست . البطه دو فونت دیگر هم طراحی شده که در حقیقت نمونه فونت Zar و Zeylan هست و با سایز 38pt و 18ptکه در حال حاضر فقط اعداد رو در بر میگیره .
2 الگوریتم رندر در این کتابخونه وجود داره ، یکی الگوریتم چپ به راست معمولی ( فونتی که توسط نرم افزار LFGآ تولید میشود ، هر 8 نقطه عمودی یک بایت ) و دیگری الگوریتم بیتی بالا به پایین ( فونتی که توسط نرم افزار FontGen تولید میشود ، هر 8 نقطه افقی یک بایت ) . اگر شما از فونتی استفاده کنید که فقط از یکی از این الگوریتم ها استفاده کنه الگوریتم دیگر بطور خودکار حذف میشه و ججم کتابخونه رو کمتر میکنه .
شما برای استفاده از فونت ها باید اول اونها را در برنامه include کنید ، اینکار باید قبل از include کردن فایل هدر کتابخانه صورت بگیره ، اگر شما هیچ فونتی را include نکرده باشید ، با خطای "you have to include at least one font" روبرو میشید .
اگر شما از چیپ KS0108 استفاده نمیکنید یا اینکه دوست دارید از درایور خودتون استفاده کنید میتونید خیلی راحت توابع درایور خودتون را با توابع درایور پیشفرض عوض کنید . کافیه در فایل هدر اونها را عوض کنید .
شما میتونید فونت های با هر سایز دلخواه ( مضرب 8 ) را برای خودتون با یکی از دو نرم افزار ی که بالا گفتم طراحی کنید و با استفاده از الگویی در فونت پیشفرض موجود فایل هدر مربوط به فونت خودتون را بسازید . کافیه نوع رندر ، سایز طول و عرض و ... مشخص کنید .
این کتابخونه قابلیت سویچ بین فونت ها را دارا می باشد . یعنی فونت را عوض کنید و با فونت جدید چیز دیگری در LCD بنویسید .
برای نوشتن توسط کتابخانه شما باید متن مورد نظر را از طریق stream تایین شده به کتابخونه تزریق کنید . اینکار دلایلی داره ، فعلانه بخاطر وجود یک سری محدودیت ها امکانش نیست که به صورت دایرکت متن را بنوسین .
وقتی شما متنی را از طریق vprintf به استریم تزریق میکنید ، بعد از انجام جایگزینی های لازم و کلا تغییرات بر روی رشته ، استریم کرکتر ها رو دونه دونه به کتابخونه میفرسته ، و از اونجایی که یونیکد دو بایتی هست ما در هر دوبار که استریم وارپر تابع را صدا میزنه 1 کرکتر را تشخیص میدیم و اونو چاپ میکنیم .
لازم به ذکر است شما میتوانید با تابع gpprintf ( در حقیقت ماکرو ) همانند printf و sprintf و کلا اعضای این خانواده رفتار کنید !
مثلا برای اینکه توی GLCD بنویسیم " امروز پنجشنبه 1 دی 1386 " اینطور مینویسیم :
gpprintf("امروز %s %i %s %i","پنجشنبه",1,"دی",1386 );
بعد از نوشتن عدد ها در صورتی که بعد از اونها هیچ چیز دیگری در GLCD نمی نویسید حتما تابع flushBufferedNumbers را صدا بزنید تا اعداد بافر شده نمایش داده بشن .
بعد از نوشتن کلمات در صورتی که بعد از اونها هیچ کرکتر دیگری در GLCD نمی نویسید حتما تابع ( ماکرو ) closeWord را صدا بزنید تا اخرین کرکتر بسته شود .
با استفاده از تابع SetFont می توانید فونت را تغییر بدید ، اولین ارگیومنت این تابع مشخص کننده فونت مورد نظر هست ، که باید بجای اون ارگیومنت نام struct اون فونت را قرار بدید . مثال ها را ببنید متوجه میشید .
بدلیل استفاده از یک سری قابلیت های AVR-LIBC فعلانه نمیشه اونو برای کدویژن تبدیل کرد
مشکلات :
- بزرگترین اشکال این کتابخونه اینه که نمیتونه کلمات شکسته رو بیاره به خط بعدی ! مثلا اگر من بخوام متن " کتابخانه فارسی نویسی " رو چاپ کنم ، " کتابخانه فارسی نو " رو در خط اول و " ویسی" رو در خط دوم نشون میده . در صورتی که اگر این مشکل برطرف بشه کلمه نویسی به خط بعد انتقال پیدا میکنه . برای رفع این مشکل باید الگوریتم اصلی برنامه یکم تغییر بکنه و یک بافر برای کرکتر ها هم اضافه بشه . ( البطه با استفاده از روش های غیر اصولی میشه این مشکل رو برطرف کرد ولی من از ماست مالی خوشم نمیاد ! ).
ایراد بعدی که به این کتابخونه وارده اینه که ، اگر شما یک متنی رو چاپ کنید ، و اگر بعد از اون هیچ متن دیگه ای رو چاپ نکنید ، کتابخونه اخرین حرف رو به اصتلاح نمیبنده مثلا کلمه فارسی به صورت فارسیـ در میاد ، برای رفع این مشکل شما میتونید یه فاصله بعد از متنتون بزارید .
این مشکل هم در اینده حل خواهد شد ، برنامه به اصتلاح End of line یا End of File رو نمیتونه تشخیص بده .
و چندین مشکل دیگر در رابطه با ویژگی های زبان فارسی .
از این به بعد تمامی اپدیت ها در پست اول قرار میگیرند + یک پست برای بالا امدن تاپیک .
دریافت نسخه 0.3 : http://www.jahandar.ir/tools/plib_0_3.rar
اخرین تغییرات : 6 فروردین 1387
هدف : فارسی نویسی Native در Graphicآ LCD
پلاتفورم : AVR
زبان برنامه نویسی : C و تحت استاندارد GNU99
کامپایلر : AVR-GCC
سعی میکنم یکسری توضیحات و نکات رو درباره استفاده از این کتابخونه بنویسم ، اگر سوالی داشتید که توضیح ندادم بگید .
توضیحات و نکات :
توسط این کتابخانه شما میتونید مستقیما در برنامه تون فارسی بنویسید و اونو نمایش بدید . برای اینکار کافیه فقط کتابخونه + موارد مورد نیاز دیگر را در سورس C تو Include کنین .
این کتابخونه در حال حاضر فقط قادر به تشخیص کرکتر های UNICODE دوبایتی می باشد .
درحال حاظر برای این کتابخونه یک فونت کامل بیشتر طراحی نشده و اون هم کوچکترین فونت قابل استفاده یعنی فونت 8*8 هست . البطه دو فونت دیگر هم طراحی شده که در حقیقت نمونه فونت Zar و Zeylan هست و با سایز 38pt و 18ptکه در حال حاضر فقط اعداد رو در بر میگیره .
2 الگوریتم رندر در این کتابخونه وجود داره ، یکی الگوریتم چپ به راست معمولی ( فونتی که توسط نرم افزار LFGآ تولید میشود ، هر 8 نقطه عمودی یک بایت ) و دیگری الگوریتم بیتی بالا به پایین ( فونتی که توسط نرم افزار FontGen تولید میشود ، هر 8 نقطه افقی یک بایت ) . اگر شما از فونتی استفاده کنید که فقط از یکی از این الگوریتم ها استفاده کنه الگوریتم دیگر بطور خودکار حذف میشه و ججم کتابخونه رو کمتر میکنه .
شما برای استفاده از فونت ها باید اول اونها را در برنامه include کنید ، اینکار باید قبل از include کردن فایل هدر کتابخانه صورت بگیره ، اگر شما هیچ فونتی را include نکرده باشید ، با خطای "you have to include at least one font" روبرو میشید .
اگر شما از چیپ KS0108 استفاده نمیکنید یا اینکه دوست دارید از درایور خودتون استفاده کنید میتونید خیلی راحت توابع درایور خودتون را با توابع درایور پیشفرض عوض کنید . کافیه در فایل هدر اونها را عوض کنید .
شما میتونید فونت های با هر سایز دلخواه ( مضرب 8 ) را برای خودتون با یکی از دو نرم افزار ی که بالا گفتم طراحی کنید و با استفاده از الگویی در فونت پیشفرض موجود فایل هدر مربوط به فونت خودتون را بسازید . کافیه نوع رندر ، سایز طول و عرض و ... مشخص کنید .
این کتابخونه قابلیت سویچ بین فونت ها را دارا می باشد . یعنی فونت را عوض کنید و با فونت جدید چیز دیگری در LCD بنویسید .
برای نوشتن توسط کتابخانه شما باید متن مورد نظر را از طریق stream تایین شده به کتابخونه تزریق کنید . اینکار دلایلی داره ، فعلانه بخاطر وجود یک سری محدودیت ها امکانش نیست که به صورت دایرکت متن را بنوسین .
وقتی شما متنی را از طریق vprintf به استریم تزریق میکنید ، بعد از انجام جایگزینی های لازم و کلا تغییرات بر روی رشته ، استریم کرکتر ها رو دونه دونه به کتابخونه میفرسته ، و از اونجایی که یونیکد دو بایتی هست ما در هر دوبار که استریم وارپر تابع را صدا میزنه 1 کرکتر را تشخیص میدیم و اونو چاپ میکنیم .
لازم به ذکر است شما میتوانید با تابع gpprintf ( در حقیقت ماکرو ) همانند printf و sprintf و کلا اعضای این خانواده رفتار کنید !
مثلا برای اینکه توی GLCD بنویسیم " امروز پنجشنبه 1 دی 1386 " اینطور مینویسیم :
gpprintf("امروز %s %i %s %i","پنجشنبه",1,"دی",1386 );
بعد از نوشتن عدد ها در صورتی که بعد از اونها هیچ چیز دیگری در GLCD نمی نویسید حتما تابع flushBufferedNumbers را صدا بزنید تا اعداد بافر شده نمایش داده بشن .
بعد از نوشتن کلمات در صورتی که بعد از اونها هیچ کرکتر دیگری در GLCD نمی نویسید حتما تابع ( ماکرو ) closeWord را صدا بزنید تا اخرین کرکتر بسته شود .
با استفاده از تابع SetFont می توانید فونت را تغییر بدید ، اولین ارگیومنت این تابع مشخص کننده فونت مورد نظر هست ، که باید بجای اون ارگیومنت نام struct اون فونت را قرار بدید . مثال ها را ببنید متوجه میشید .
بدلیل استفاده از یک سری قابلیت های AVR-LIBC فعلانه نمیشه اونو برای کدویژن تبدیل کرد
مشکلات :
- بزرگترین اشکال این کتابخونه اینه که نمیتونه کلمات شکسته رو بیاره به خط بعدی ! مثلا اگر من بخوام متن " کتابخانه فارسی نویسی " رو چاپ کنم ، " کتابخانه فارسی نو " رو در خط اول و " ویسی" رو در خط دوم نشون میده . در صورتی که اگر این مشکل برطرف بشه کلمه نویسی به خط بعد انتقال پیدا میکنه . برای رفع این مشکل باید الگوریتم اصلی برنامه یکم تغییر بکنه و یک بافر برای کرکتر ها هم اضافه بشه . ( البطه با استفاده از روش های غیر اصولی میشه این مشکل رو برطرف کرد ولی من از ماست مالی خوشم نمیاد ! ).
ایراد بعدی که به این کتابخونه وارده اینه که ، اگر شما یک متنی رو چاپ کنید ، و اگر بعد از اون هیچ متن دیگه ای رو چاپ نکنید ، کتابخونه اخرین حرف رو به اصتلاح نمیبنده مثلا کلمه فارسی به صورت فارسیـ در میاد ، برای رفع این مشکل شما میتونید یه فاصله بعد از متنتون بزارید .
این مشکل هم در اینده حل خواهد شد ، برنامه به اصتلاح End of line یا End of File رو نمیتونه تشخیص بده .
و چندین مشکل دیگر در رابطه با ویژگی های زبان فارسی .
از این به بعد تمامی اپدیت ها در پست اول قرار میگیرند + یک پست برای بالا امدن تاپیک .
دریافت نسخه 0.3 : http://www.jahandar.ir/tools/plib_0_3.rar
اخرین تغییرات : 6 فروردین 1387
دیدگاه