تبليغاتX
برنامه نویسی ویندوز
برنامه نویسی ویندوز

طراحی و تولید برنامه های کاربردی ویندوز ... و البته بعضاً چیزهای نامربوط

مردان بزرگي مانند اينشتين زندگي زناشويي خوبي نداشتند و اغلب به طلاق انجاميده است. چون واقعاً زن نه هميشه بلكه اغلب مانع پيشرفت مرد است! 


پ ن:

دليل اينكه قاره آمريكا كشف شد اين بود كه كريستفر كلمب زن نداشت چون اگر ميداشت:

کجا داری میری؟ - با کی داری می ری؟ - واسه چی می ری؟ - چطوری می ری؟ - کشف؟ -برای کشف چی می ری؟ - چرا فقط تو می ری؟ - تا تو برگردی من چیکار کنم؟! - می تونم منم باهات بیام؟! -راستشو بگو توی کشتی زن هم دارین؟ - بده لیستو ببینم! - حالا کِی برمی گردی؟ - واسم چی میاری؟ - تو عمداً این برنامه رو بدون من ریختی٬ اینطور نیست؟! - جواب منو بده؟ - منظورت از این نقشه چیه؟ - نکنه می خوای با کسی در بری؟ - چطور ازت خبر داشته باشم؟ - چه می دونم تا اونجا چه غلطی می کنی؟ - راستی گفتی توی کشتی زن هم دارین؟! - من اصلا نمی فهمم این کشف درباره چیه؟ - مگه غیر از تو آدم پیدا نمی شه؟ - تو همیشه اینجوری رفتار می کنی! - خودتو واسه خود شیرینی می ندازی جلو؟! - من هنوز نمی فهمم٬ مگه چیز دیگه ایی هم برای کشف کردن مونده! -چرا قلب شکسته ی منو کشف نمی کنی؟ - اصلا من می خوام باهات بیام! - فقط باید یه ماه صبر کنی تا مامانم اینا از مسافرت بیان! - واسه چی؟؟ خوب دوست دارم اونا هم باهامون بیان! - آخه مامانم اینا تا حالا جایی رو کشف نکردن! - خفه خون بگیر!!!! تو به عنوان داماد وظیفته! - راستی گفتی تو کشتی زن هم دارین؟

91/01/13 | |

... بـوی عیـدی، بـوی تـوپ 
بـوی کـاغـذ رنـگی 
بـوی یـاس جـانـمـاز تـرمـه مـادربـزرگ 
شـادی شـکسـتـن قـلک پـول 
وحشـت کـم شـدن سـکـه عـیـدی از شـمـردن زیـاد 
بـوی اسـکنـاس تـا نـخـورده لای کـتـاب 
بـا ایـنـا زمسـتـونـو سـر مـی کـنـم 
بـا ایـنـا خسـتـگیـمـو در مـی کـنـم ...

سال نو پیشاپیش مبارکـــــــــــــ

90/12/27 | |

آزارم ميدهد ديدن آن منظره كه مادري كودكش راسيلي ميزند
ولي كودك بازهم دامانش را رها نميكند،
كجاست آن قاضي تا حكم كند كه مادر منبع محبت است؟ يا كودك ؟!!


زنده یاد حسین پناهی

 

90/12/23 | |

پاك چو آورده اي ام، پاك بر، پاك به مهماني افلاك بر
آتش پيچيده ي در هستي ام، سوختن است اين نه شبِ مستي ام...
بهر چه در خويشتن آشفته ام؟ بي خبر از خويش چرا خفته ام؟
خواب ز شبگرديِ عاشق جداست، عاشقي و خواب چه ناآشناست...

90/12/17 | |

عجب دورانی بود یادش به خیر عهد شباب! اگه کسی از بچه ها تونست خودشو بشناسه!!! خبر بده ببینم کجاست چیکار میکنه اصلاً زنده است یا نه؟ 

90/12/11 | |

برنامه نویسان امروزی ویژوال بیسک دات نت! دلتان میخواهد اولین ورژن ویژوال بیسیک محصول 1991 میلادی را ببینید؟! سبکبال و سبکبار تنها در ۴۳۸ کیلوبایت بدون نیاز به نصب! هنوز هم میتوان باهاش برای ویندوز برنامه نوشت، اون هم برنامه هایی پرتابل که در WIN 3.1 گرفته تا WIN7 قابل اجرا هستند.

از اینجا دانلود کنید.

Visual Basic 1.0 for Microsoft Windows.

90/11/05 | |

 این هم روش و شبه کدهای مربوط به پروژه نه چندان آسان بازيابي فضاي فايل با استفاده از پشته پيوندي که دوستان زیادی خواسته بودند تا در سی پلاس انجام دهم.

عمليات مورد نياز:

·        جستجوي ترتيبي براي پيدا کردن رکوردي با يک فيلد معين

·        انجام عمل درج و حذف رکورد

·        بازيابي فضاي فايل با استفاده از پشته پيوندي

نکته: براي سادگي طول رکوردها ثابت فرض شود.

اصول پیاده سازی:

در این روش وقتی رکوردی حذف می شود، آدرس رکورد حذف شده قدیمی از هیدر به مکان رکورد در حال حذف فعلی نوشته می شود (در یکی از فیلدهای آن که بهتر است فیلد وضعیت باشد)، این آدرس معمولاً در ابتدا که چیزی حذف نشده عدد منهای یک است که در هیدر قرار دارد.

سپس بلافاصله آدرس رکورد در حال حذف کنونی به هیدر منتقل می شود.

 

//Writen by: Saleh , www.winprog.blogfa.com

void Person_Manager::Delete()

{

                 int found=0;

                 long RecordAddress;

                 char LstName[16];

                 clrscr();

                 cout<<"Enter LastName To Find And Delete It's Record: ";

                 cin>>LstName;

                 clrscr();

                 FILE *File;

                 File=fopen("DataBase.dat","r+b");

                 while (fread(&person, sizeof(person),1,File))

                 {

                                   if (strcmp(person.LastName, LstName) == 0 && strcmp(person.Status, "OK") == 0)

                                   {

                                                                RecordAddress = ftell(File)-sizeof(person);

                                                                fseek(File, RecordAddress, 0);

                                                                ltoa(GetHeaderValue(), person.Status, 10); // Write address of last deleted record from header to here...

                                                                fwrite(&person, sizeof(person), 1, File);

                                                                found=1;

                                                                break;

                                   }

                 }

                 SetHeaderValue(RecordAddress);  // Save Current Deleted Record Address To Header...

                 fclose(File);

                 if (found == 0) cout<<"'"<

                 cout<<"Press Enter...";

                 getch();

}

 بازیابی فضای فایل با استفاده از پشته پیوندی

 

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

 

//Writen by: Saleh , www.winprog.blogfa.com

void Person_Manager::Add()

{

                 clrscr();

                 strcpy(person.Status, "OK");

                 cout<<"Enter LastName: ";

                 cin>>person.LastName;

                 cout<<"Enter FirstName: ";

                 cin>>person.FirstName;

                 cout<<"Enter Address: ";

                 cin>>person.Address;

                 cout<<"Enter City: ";

                 cin>>person.City;

                 cout<<"Enter State: ";

                 cin>>person.State;

                 cout<<"Enter PostCode: ";

                 cin>>person.PostCode;

                 long HdrValue = GetHeaderValue();

                 if (HdrValue == -1) // There is no deleted record...

                 {

                                fstream File("DataBase.dat",ios::app | ios::binary);

                                File.write((char *) &person, sizeof(person));

                                File.close();

                 }

                 else

                 {

                                // Move file pointer to place that header say... And get last deleted record address

                                Person per;

                                FILE *file;

                                file=fopen("DataBase.dat","r+b");

                                fseek(file, HdrValue, 0);

                                fread(&per, sizeof(per),1,file);

                                fseek(file, HdrValue, 0);

                                fwrite(&person, sizeof(person), 1, file);

                                fclose(file);

                                // Set header value to the last deleted address

                                SetHeaderValue(atol(per.Status));

                 }

}

 بازیابی فضای فایل با استفاده از پشته پیوندی

 

در این صورت است که ما فضای زائد و حذف شده فایل را دوباره بازیابی کرده و مورد استفاده قرار می دهیم، روش فوق زمانی جواب می دهد که طول رکوردها ثابت فرض شود.

 ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

ارادتمند شما، صالح

 

90/09/30 | |

گاهی که به خیال خود به خوشبختی رسیده ای، بیشتر اندیشه کن و گاهی که در اندیشه خود بدبختی بیشتر به حکمت خداوند بیاندیش....

از باغ می برند چراغانی‌ات کنند
تا کاج جشنهای زمستانی‌ات کنند 
پوشانده‌اند «صبح» تو را «ابرهای تار»
تنها به این بهانه که بارانی‌ات کنند
یوسف! به این رها شدن از چاه دل مبند
این بار می‌برند که زندانی‌ات کنند
ای گل گمان مکن به شب جشن می‌روی
شاید به خاک مرده‌ای ارزانی‌ات کنند
یک نقطه بیش فرق رحیم و رجیم نیست
ز نقطه‌ای بترس که شیطانی‌ات کنند
آب طلب نکرده همیشه مراد نیست
گاهی بهانه‌ای است که قربانی‌ات کنند

90/08/04 | |

یه موقع شدیداً معتقد بودم که پول، طرفدار و طرفدار  قدرت می آورد، اما الان دیگه با ديدن تصوير بالا نظرم کلاً عوض شده، تازه فهمیدم که همه قدرتهای زمینی از هر اندازه و بزرگی که باشند پوشالی اند و نباید گول خورده و دچار توهم شویم! موقعی که قدرت دستمونه نه صرفاً برا رضای خدا بلکه به خاطر خودمون هم که شده مراقب باشیم تا مورچه ای رو له نکنیم!!!!!!

90/08/02 | |

ای مهربان تر از برگ در بوسه های باران

بیداری ستاره در چشم جویباران

آینه نگاهت پیوند صبح و ساحل

لبخند گاه گاهت صبح ستاره باران

باز آ که در هوایت خاموشی جنونم

فریادها برانگیخت از سنگ کوهساران

ای جویبار جاری زین سایه برگ مگریز

کاینگونه فرصت از کف دادند بیشماران

گفتی به روزگاری مهری نشسته گفتم

بیرون نمیتوان کرد حتی به روزگاران

بیگانگی ز حد رفت ای آشنا مپرهیز

زین عاشق پشیمان سرخیل شرمساران

پیش از من و تو بسیار بودند و نقش بستند

دیوار زندگی را زینگونه یادگاران

وین نغمه محبت بعد از من و تو ماند

تا در زمانه باقیست آواز باد و باران

90/06/05 | |

جهان سست است و بی بنیاد، از این فرهاد کش فریاد...

 


90/05/15 |

 

فقط قابل توجه برنامه نویسان ویندوز :

بلاخره بعد از ماه ها کار طاقت فرسای من و همکارانم در شرکت نرم افزاری مبین ملکان، یکی از ارزشمندترین محصولات این شرکت پا به عرصه وجود گذاشت (Mobinsoft Native Farsi Framework) چهار چوب کاری فارسی بومی برای پلت فورمهای ویندوز با نام تجاری اختصاری NFF.

اما این چهارچوب کاری به چه دردی می خورد، همه برنامه نویسان تجربه کرده اند که وقتی نرم افزاری به زبان فارسی می نویسند همیشه برای نشر آن مشکل داشته و دارند مثل عدم پشتیبانی ویندوز مشتری از زبانهای راست به چپ و عدم وجود فونتهای فارسی، به هم ریختگی کاراکترها، مشکلات تاریخ شمسی و یونیکد و ...، حتماً همیشه در پشتیبانی نرم افزارهایی که به فارسی نوشته اید دچار مشکل هستید و گاهی شاید بارها مجبور شوید که فقط جهت نصب برنامه تیم پشتیبانی را روانه محل کار مشتری کنید. حالا این فریم ورک همه این مشکلات را حل کرده است طوری که با داشتن آن می توانید بدون نگرانی از نوع سکوی ویندوز (انگلیسی یا فارسی یا...) نرم افزار فارسی طراحی کنید کنترلهایی همراه این فریم ورک ارائه شده اند که کاملاً بومی فارسی هستند یعنی فارسی را ذاتاً پشتیبانی می کنند اگر عبارت فینگلیش هم در خصوصیت متن آنها قرار دهید اتوماتیک به فارسی یونیکد نمایش و اکسپورت می دهند نیز از راست به چپ بدون توجه به سیستم عامل پشتیبانی می کنند این کنترلها شامل کنترلهای استاندارد نظیر لیبل و تکست باکس و لیست باکس و کمبو باکس و دیتا گرید و...می باشند.

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

نمونه ای از یک دیتاگرید از این فریم ورک:

mobinsoft native farsi framework NFF

توجه کنید که مطابق کد های زیر این دیتاگرید بدلیل عدم پشتیبانی سیستم عامل از فارسی با کارکترهای فینگلیش ایجاد شده مثلاً فینگلیش 'ردیف' شده vndt اما ملاحضه می کنید که کنترل فوق چگونه بومی فارسی شده است:

Me.FarsiGrid1.Cols = 3
Me.FarsiGrid1.ColWidth(1) = 1000
Me.FarsiGrid1.ColWidth(2) = 1800
Me.FarsiGrid1.ColWidth(3) = 2200


Me.FarsiGrid1.ColText(1) = "vndt"
Me.FarsiGrid1.ColText(2) = "jhdlv"
Me.FarsiGrid1.ColText(3) = "j,qdphj"

Me.FarsiGrid1.embFontIndex = 1
Me.FarsiGrid1.FontSize = 12
Me.FarsiGrid1.RowsHeight = 500

For i = 1 To 50000
    Me.FarsiGrid1.AddListItem i & vbTab & Timer & vbTab & Date$
Next i


http://www.mobinsoft.com

90/03/23 | |

سلام

پروژه شبیه سازی شبکه تلفن های سلولی (همراه) که در ويژوال بیسیک کلاسیک نوشته ام، این پروژه زیرساخت کلیه امکانات صوتی یک شبکه تلفن سلولی را در بر میگیرد فقط اینجا به جای امواج حامل موبایل در لایه فیزیکی از پکت های آی پی استفاده شده است. ازامکانات آن می توان به تعریف و ایجاد شماره تلفن های جدید در سرور ثبت شماره و تعریف پین کد (شبیه سازی سیمکارت) گرفته تا کالر آیدی و تشخیص خاموش بودن گوشی (نرم افزار کلاینت مقابل)  و تعیین کیفیت صدا با توجه به سرعت شبکه اشاره کرد، پی سی باید دارای میکروفون و بلندگو (کارت صوتی) باشد. در حال حاضر می توان توسط این نرم افزار در هر سازمانی که دارای شبکه محلی است یک سیستم تلفن سانترال با هزینه صفر برپا کرد.

http://www.mobinsoft.com

شبیه سازی زیرساخت شبکه های تلفن همراه سلولی

90/03/17 | |

آمدن عید مبارک بادت، وان مواعید که کردی نرود از یادت.

ای شاهد افلاکی در مستی و در پاکی

من چشم ترا مانم تو اشک مرا مانی

در سینه سوزانم مستوری و مهجوری

در دیده بیدارم پیدایی و پنهانی

من زمزمه عودم تو زمزمه پردازی

من سلسله موجم تو سلسله جنبانی

از آتش سودایت دارم من و دارد دل

داغی که نمی بینی دردی که نمی دانی

89/12/28 | |

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

نگرانی بزرگترین حماقت بشر است چون باور کنید ۹۹ درصد نگرانیهای ما هرگز به وقوع نمی پیوندند.

89/12/21 | |

مرد را دردی اگر باشد خوش است                  درد بی دردی علاجش آتش است

بی دردی ابتذال می آورد و ابهّت و شکوه مردانگی را از بین می برد...

آتش

89/12/20 | |

اگر برنامه نویس ویژوال بیسیک هستید و فایلی دارید که برنامه شما در زمان اجرا به آن نیاز خواهد داشت و دوست دارید که آن را به فایل اجرایی تولید شده تان الحاق کنید (Embed) برنامه زیر را دانلود کنید، این برنامه را برای این منظور برای خودم نوشته بودم که همینک در اختیار شما دوستان عزیز هم قرار می دهم. برای مثال من فونتی داشتم که با کمک این برنامه تبدیل به یک ماژول کد کردم و هر موقع لازم بود دستور اکسترکت آن را فراخوانی می کردم و فونت را مورد استفاده قرار می دادم بدون اینکه نگران وجود آن در پوشه فونت ویندوز بوده باشم.

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

لینک دانلود

89/12/16 | |

مدتی است روی یک پروژه انیمیشن سه بعدی ایرانی کار می کنم، کار نسبتاً زیادی لازم نبود تا به کاراکتر سمت چپ پوشش اسلامی دهم، در واقع کاراکتر سمت راست حالت با حجاب کاراکتر سمت چپ است. زیبایی زن زمانی که در حجاب است دوچندان می شود یا نه؟

حجاب و زیبایی

89/12/07 | |

دمي با غم به سر بردن جهان يک سر نمي‌ارزد

به مي بفروش دلق ما کز اين بهتر نمي‌ارزد

شکوه تاج سلطاني که بيم جان در او درج است

کلاهي دلکش است اما به ترک سر نمي‌ارزد

89/11/29 | |

کار تولید انیمیشن فضیل عیاض از امروز بیست و ششم بهمن در دستور کار واحد انیمیشن شرکت نرم افزاری مبین ملکان قرار گرفت، قرار است این انیمیشن تاریخی 30 دقیقه ای تا اوایل تابستان سال آینده آماده اکران شود.

داستان فیلمنامه، بخشهایی از زندگی فضیل بن عیاض می باشد. فضیل که در عصر امام صادق (ع) زندگی می کرد، در ابتدا به راهزنی و دزدی مشغول بود. اما بر اثر یک انقلاب روحی که در او پدید آمد، راهزنی و دزدی را کنار گذاشت و توبه کرد و در زمره ی عارفان و مردان حق قرار گرفت. آنچه که در زندگی این عارف بزرگ، قابل تأمل می باشد؛ توجه به این نکته است که تغییر و تحول در ابعاد شخصیتی یک انسان، تصادفی نیست و انسان باید زمینه های این تغییر و تحولات را در خود ایجاد کرده باشد. درونمایه و هدف اصلی این انیمیشن نیز، بررسی این زمینه ها در شخص فضیل عیاض می باشد. نقل است که فضیل، در عین حال که به غارت اموال کاروانها و دزدی می پرداخت، نمازهای واجب روزانه را به جماعت اقامه می کرد. هرکسی از یارانش نیز در نماز جماعت، حاضر نمی شد؛ او را از خود می راند. به یارانش توصیه ی اکید کرده بود که در هنگام هجوم به کاروانها برای غارت اموال آنها، با زنان و کودکان کاروان کاری نداشته باشند و کوچکترین آزاری به آنها نرسانند. هر کسی از یارانش از این توصیه، تعدی و سرپیچی می کرد، سخت تنبیه می شد. به هنگام غارت اموال کاروانها، همه ی دارایی افراد را به غارت نمی برد و بخشی از آن مال را برای صاحبش باقی می گذاشت. نسبت به ادای نماز در اول وقت آن، حساسیت عجیبی داشت و...
در یک توصیف کلی از شخصیت فضیل بن عیاض- قبل از تحول روحی که در او پدید آمد – می توان گفت که در عین حال که به کار ناپسند و غیر شرعی دزدی و راهزنی، مشغول بود، انسان جوانمرد و «دل رحمی» به شمار می رفت...
قسمت پایانی انیمیشن، صحنه ای را نشان می دهد که فضیل با شنیدن آیه ای از قرآن، متحول می شود و توبه می کند. دزدی و راهزنی را کنار می گذارد و در زمره ی عارفان در می آید.


انیمیشن فضیل
89/11/26 | |

سلام

طراحی سیستم عامل کار بسیار طاقت فرسایی است، دانش زیاد و پشتکار فراوانی می خواهد. در هر حال اگر به این فکر افتادید که خودتان سیستم عامل طراحی کنید می توانید کیت توسعه سیستم های عامل دیسکی Disk Operating System شرکت نرم افزاری مبین ملکان را سفارش دهید، این کیت به همراه ابزارگان مربوطه شامل آموزش های لازم نیز می باشد توسط این کیت می توانید پس از ساختن سیستم عامل، بسته ای جهت نصب سیستم کنار سیستم عامل هایی چون XP و Seven ایجاد کنید به طوری که کاربر ان از طریق منوی انتخاب سیستم عاملها در شروع به کار کامپیوتر سیستم عامل شما را انتخاب و بارگذاری خواهند کرد.

 سیستم عامل بسیار ساده زیر را در زبان اسمبلی نوشته ام که فقط از دو دستور Cls و Reboot پشتیبانی می کند.

 

سیستم عامل ساده صالح

 

این هم کدهای این سیستم عامل بسیار ساده در اسمبلی:

1 - کد های هسته (Kernel.asm) :

include MobinLib.inc
.model small
.stack 100h
.data
message db "Saleh's Simple OS Version 1.0", 10, 13, "(C) Copyright 2010-2011 by Saleh hajiaghazadeh!.", 0h
prompt  db 10,13,"Shell>", 0h
bad_cmd db 10,13,"Bad command or filename.", 0h
cmd_size equ 256
cmd  db cmd_size dup(?)
boot_cmd db "reboot"
cls_cmd db "cls"
.code
main proc
 ; Load ds with data segment
     mov ax, @data                
     mov ds, ax
 cls
 print_si message
 get_cmd:
 print_si  prompt
 get_string cmd, cmd_size
 strcompare cmd, boot_cmd, 6, 0
 je restart
 strcompare cmd, cls_cmd, 3, 0
 je clearscr
 print_si bad_cmd
 jmp get_cmd
 jmp done
 restart:
 reboot
 clearscr:
 cls
 gotoxy 0h,-1h
 jmp get_cmd
 done:
main endp


end main

2 - کتابخانه ماکرو (MobinLib.inc) :

mobindata segment para 'data'
 boot_vector       DW 00000h                 ; Offset of reboot vector
              DW 0FFFFh
mobindata ends
;********** print string **************
print_si macro str_to_print
 local print, done
 lea si, str_to_print
 print:
 mov al, [si]
 cmp al, 0h ; if 0 null is detected then it is end of string
 jz done
 mov ah,0eh
 int 10h
 inc si
 jmp print
 done:
endm
print_si2 macro
 local print, done
 print:
 mov al, [si]
 cmp al, 0h
 jz done
 mov ah,0eh
 int 10h
 inc si
 jmp print
 done:
endm
;********** cls , set 80x25 color text mode ************
cls macro
 mov ah,0h
 mov al,03h
 int 10h
endm
;************* wait for a key *********
wait_for_key macro
 mov ah, 0h
 int 16h
endm
;*************** reboot *********
reboot macro
 assume ds:mobindata
 mov ax,40h
 mov es,ax
 mov word ptr es:[72h], 1234h
 jmp dword ptr boot_vector
endm
;******************* get string ************
get_string macro input_buffer, buffer_size
 local empty_buffer, wait_for_a_key, add_to_buffer, empty_buffer, exit
 lea di, input_buffer
 mov dx, buffer_size
 mov     cx, 0                   ; char counter.
 cmp     dx, 1                   ; buffer too small?
 jbe     empty_buffer            ;
 dec     dx                      ; reserve space for last zero.
 wait_for_a_key:
 mov     ah, 0                   ; get pressed key.
 int     16h
 cmp     al, 0Dh                  ; 'return' pressed?
 jz      exit
 cmp     al, 8                   ; 'backspace' pressed?
 jne     add_to_buffer
 jcxz    wait_for_a_key            ; nothing to remove!
 dec     cx
 dec     di
 putc    8                       ; backspace.
 putc    ' '                     ; clear position.
 putc    8                       ; backspace again.
 jmp     wait_for_a_key
 add_to_buffer:
         cmp     cx, dx          ; buffer is full?
              jae     wait_for_a_key    ; if so wait for 'backspace' or 'return'...
              mov     [di], al
              inc     di
              inc     cx
              mov     ah, 0eh         ; print the key
              int     10h
 jmp     wait_for_a_key
 exit:
 mov al,0h ; null byte
 mov     [di],al ; mark end of input string
 mov     di, 0 ; terminate by null
 empty_buffer:
endm
;************************* putc ************
putc   macro  char
        mov     al, char
        mov     ah, 0eh
        int     10h    
endm
;*************************** gotoxy
gotoxy  macro   col, row
        mov     ah, 02h
        mov     bh,0h ; page number   
        mov     dh, row
        mov     dl, col
        int     10h
endm
;************************** getxy
getxy macro
 mov ah,03h
 mov bh,00h; page number
 int 10h
 ;x=dl    dh=y    begl=cl  endl=ch
endm
;****************************** string compare, caution the str1 must have null byte (0h) at the end, and str1>str2 *****************
StrCompare macro str1, str2, size
 local  done, comp_age
 mov ah,size
 lea si,str1
 lea di,str2
 dec di
 comp_age:
 inc di
 dec ah
 lodsb ;load al with next char from str1
 cmp [di],al
 jne done
 cmp ah,0h
 jne comp_age
 done:
 lodsb
 cmp al,0 ; check to terminator char it is usally 0h (null byte)
 ;use je to jump if str1=str2
endm

 

89/10/28 | |

 
سلام
 
مسئله : تعیین حاصلضرب دو ماتریس n ×n که در آن n توانی از 2 است.
پیچیدگی این الگوریتم از لحاظ ضرب، جمع و تفریق بهتر از پیچیدگی درجه سوم است.
نکته : روش استراسن در مورد ضرب ماتریس های 2×2 ارزش چندانی ندارد.
   
سورس کد مربوط را می توانید از اینجا دانلود کنید. و در توربو سی اجرا کنید.
89/09/02 | |

سلام

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

89/09/02 | |

این یک پیاده سازی صف با استفاده از لیست پیوندی است در سی پلاس، نوشتم برای دوستانی که هنوز ساختمان داده را پاس نکرده اند.

#include "iostream.h"
#include "conio.h"
struct List *Rear=NULL;
struct List *Front=NULL;
struct List
{
 int Data;
 struct List *Link;
};
void Insert(int Item)
{
 struct List *Temp;
 Temp=new List;
 if (Rear!=NULL)
 {
  Temp->Data=Item;
  Temp->Link=Rear->Link;
  Rear->Link=Temp;
 }
 else
 {
  Temp->Data=Item;
  Rear=Temp;
  Front=Temp;
  Temp->Link=NULL;
 }
}
int Delete()
{
 int Item;
 struct List *Temp;
 Temp=Front;
 if (Front==NULL)
 {
  cout<<"Quee is empty.";
  return -1;
 }
 else
 {
  Item=Temp->Data;
  Front=Front->Link;
  delete Temp;
  if (Front==NULL) Rear=NULL;
  return Item;
 }
 return -1;
}
void main()
{
 while(1)
 {
  clrscr();
  cout<<"Quee Implementation using a 'Linked List':\n";
  cout<<"1 - Insert\n";
  cout<<"2 - Delete\n";
  cout<<"3 - About\n";
  cout<<"4 - Exit";
  char c=getch();
  if (c=='4')break;
  switch (c)
  {
  case '1':
  int item;
  clrscr();
  cout<<"Enter item to Insert: ";
  cin>>item;
  Insert(item);
  break;
  case '2':
  clrscr();
  int ret=Delete();
  if (ret!=-1) cout<  getch();
  break;
  case '3':
  clrscr();
  cout<<"Writen by Saleh hajiaghazadeh.";
  getch();
  break;
  }
 }
}

89/07/24 | |

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

باصدای سراج 

89/06/31 | |

اکثر برنامه نویسان، ترس مرموزی از PHP دارند و کمتر کسی دوروبرش می پلکد، ولی واقعاً اینگونه است؟ نه خیر! اگر تا به حال با C برنامه نویسی کرده باشید باید بگم که PHP خیلی از سختگیری های C را حذف کرده و خیلی امکانات به درد به خوری هم به آن اضافه کرده در واقع کسی که C می داند کمتر از یک روز کاری برای یاد گیری PHP نیاز دارد. از نظر امنیت کد شاید عده ای برایش خرده گرفته اند ولی نرم افزارهایی هستند که چنان تغییراتی در سورس اولیه می دهند که خود برنامه نویسش هم 100 سال زمان می خواهد تا سورس را بازیابی کند تازه خیلی از نرم افزارها نظیر جاوا و حتی سی شارپ نیز روی امنیت کد پافشاری نمی کنند.

تنها مشکلی که PHP داره مثل برخی آدم های بدقیافه بدشانس ظاهر نامرتب و خشن کدهاست که آن هم بیشتر بدلیل انعطاف بیش از حد آن است. مثلاً در این زبان برای چسپاندن رشته ها به هم از نقطه (.) استفاده می شود و از " و ' همزمان می تواند استفاده کند که در سایر زبانها دیده نمی شود.

$str = "ali " . "is a good boy." . ' he is "5" years old.' . "from 'tehran'." . '\'yes.\'';

result:  ali is a good boy.he is "5" years old.from 'tehran'.'yes.'

یا امکان زیر که نام تابع را از رشته بگیری و فراخوانی کنی امکانیه که در هر زبانی به سادگی میسر نیست:

function func1()

{

return "test1";

}

function func2()

{

return "test2";

}

if ($x==1) $fnc="func1"; else $fnc="func2";

$fnc();

به هر حال اینها را گفتم که بدانید من روزی به کمتر از سی شارپ برای طراحی سایت رضایت نمی دادم و همیشه از ظاهر PHP وحشت داشتم ولی مدت کوتاهی است که به PHP روی آورده ام و از قدرت نهفته آن واقعاً شگفت زده شدم، باید بگم که سی شارپ با امکانات آماده خودش بسیاری از ما برنامه نویسان را بدآموز کرده. آیا تا به حال به پشت پرده یک دیتاگرید که از آماده اش در سی شارپ استفاده می کنید فکر کردید آیا تا به حال به فکرتان خطور کرده که خودتان همانند آن را در سطح LOWLEVEL بسازید. شاید فکر کنید چه فایده! اما اگر روزی خواستید یک سایت فوق العاده امن نظیر سایتی که اطلاعات مهمی را پردازش و تحویل کاربر می دهد (مثلاٌ روی یک دیتا گرید) به طوری که نباید در طول مسیر انتقال شنود شود تازه خواهید فهمید که یک دیتا گرید در سطح LOWLEVEL باید ساخت که برخی سلول های آن قابلیت استفاده از RSA را داشته باشند. و اینکار در PHP به سادگی قابل پیاده سازی است.

89/06/15 | |

سلام

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

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

 اگر مردید یا شیرزنید از این ویروسها بنویسید! و تورا به خدا بیشتر از این حال مردم را به هم نزنید.

89/05/16 | |

سلام

این هم یک نرم افزار جالب که در VB6 طراحی کردم و اسمش هم را بلاگفا ریلیتید گذاشتم که کارش بدست آوردن سریع لیست آخرین وبلاگهای به روز شده و آدرس آخرین پست آنها به همراه لینک نظردهی به آخرین پست ارسال شده هر کدام از وبلاگهاست، شاید فکر کنید این یک اسپامر است اما من اینطور فکر نمی کنم.

بلاگفا ریلیتد

blogfa related

blogfa related

در صورت نیاز با آدرس winprgadv@gmail.com تماس بگیرید.

89/04/17 | |

سلام

عده ای از دوستان کدهای اسکرول رشته در اسمبلی را خواسته بودند که امروز در اختیارشان قرار میدهم، کدهایی که در زیر می بینید کارهایی فراتر از اسکرول ساده را انجام می دهند و روتینهای ارزشمندی از اسمبلی هستند که ممکن است خیلی به دردتان بخورد.

این هم سورس کد برنامه ای که در اسمبلی نوشته ام تا متن را با کمک کلیدهای جهتی اسکرول کند، جهت کامپایل و اجرای صحیح از Masm استفاده کنید.

.286p

MaxString Equ 81

Code Segment Byte Public
Code Ends

Data Segment Word Public
Data Ends

Stak Segment Word Stack
DW  256 DUP (?)
Stak Ends

Dummy Segment Para Public
Dummy Ends


Code Segment
Assume CS:Code,DS:Data,ES:Nothing,SS:Stak


Mov  BX,Seg Data
Mov  DS,BX               ;Set data segment
Mov  BX,Seg Dummy        ;End of pgm
Mov  AX,CS               ;Start of pgm
Sub  BX,AX               ;Calc pgm size
Add  BX,16               ;Paragraphs in Stack + 1
Mov  AH,4AH              ;Shrink mem
Int  21h                 ;Thru Dos
Push DS
Pop  AX                 
Mov  ES,AX               ;Set ES to DS
Mov  DefSeg,AX           ;DefSeg defaults to DS
Mov  $DataSeg,AX         ;Set $DataSeg to DS
Call GetCursor
     Push 3
     Call Screen
     Mov  SI,Offset $tring_01
     Call PrintStr
     Call SetCursor
     Call DoCrLf
     Mov  SI,Offset $tring_02
     Call PrintStr
     Call SetCursor
     Call DoCrLf
     Mov  SI,Offset $tring_03
     Call PrintStr
     Call SetCursor
     Call DoCrLf
     Call DoCrLf
     Mov  SI,Offset $tring_04
     Call PrintStr
     Call SetCursor
     Call DoCrLf
     Call DoCrLf
     Mov  SI,Offset $tring_05
     Call PrintStr
     Call KBInput
     Mov  SI,Offset $_0_
     Mov  DI,Offset A1$
     Call MoveStr
     Mov  SI,Offset $tring_07
     Call PrintStr
     Call KBInput
     Mov  SI,Offset $_0_
     Mov  DI,Offset A2$
     Call MoveStr
     Mov  SI,Offset $tring_09
     Call PrintStr
     Call KBInput
     Mov  SI,Offset $_0_
     Mov  DI,Offset A3$
     Call MoveStr
     Mov  SI,Offset $tring_11
     Call PrintStr
     Call KBInput
     Mov  SI,Offset $_0_
     Mov  DI,Offset A4$
     Call MoveStr
     Call ShowGuid
     Mov  $Ycur,12
     Mov  $Xcur,35
     Call ClrWork
     Mov  SI,Offset A1$
     Mov  AX,1
     Mov  BX,10
     Call Mid$
     Call Concat_2
     Mov  DI,Offset S$
     Call Assign
     Mov  SI,Offset S$
     Call PrintStr
     Call SetCursor
     Call DoCrLf
     Mov  $Ycur,13
     Mov  $Xcur,35
     Call ClrWork
     Mov  SI,Offset A2$
     Mov  AX,1
     Mov  BX,10
     Call Mid$
     Call Concat_2
     Mov  DI,Offset S$
     Call Assign
     Mov  SI,Offset S$
     Call PrintStr
     Call SetCursor
     Call DoCrLf
     Mov  LK,-72
DoLoop_01:
     Xor  AX,AX
     Call GetKey
     Mov  K,AX
     Cmp  K,27
     Je   _True_01
     Jmp  _EndIf_01
_True_01:
     Mov  AL,0
     Mov  AH,4Ch
     Int  21h
_EndIf_01:
     Cmp  K,-80
     Je   _True_02
     Jmp  _EndIf_02
_True_02:
     Call ShowGuid
     Mov  $Ycur,12
     Mov  $Xcur,35
     Call ClrWork
     Mov  SI,Offset A3$
     Mov  AX,1
     Mov  BX,10
     Call Mid$
     Call Concat_2
     Mov  DI,Offset S$
     Call Assign
     Mov  SI,Offset S$
     Call PrintStr
     Call SetCursor
     Call DoCrLf
     Mov  $Ycur,13
     Mov  $Xcur,35
     Call ClrWork
     Mov  SI,Offset A4$
     Mov  AX,1
     Mov  BX,10
     Call Mid$
     Call Concat_2
     Mov  DI,Offset S$
     Call Assign
     Mov  SI,Offset S$
     Call PrintStr
     Call SetCursor
     Call DoCrLf
     Mov  AX,K
     Mov  LK,AX
_EndIf_02:
     Cmp  K,-72
     Je   _True_03
     Jmp  _EndIf_03
_True_03:
     Call ShowGuid
     Mov  $Ycur,12
     Mov  $Xcur,35
     Call ClrWork
     Mov  SI,Offset A1$
     Mov  AX,1
     Mov  BX,10
     Call Mid$
     Call Concat_2
     Mov  DI,Offset S$
     Call Assign
     Mov  SI,Offset S$
     Call PrintStr
     Call SetCursor
     Call DoCrLf
     Mov  $Ycur,13
     Mov  $Xcur,35
     Call ClrWork
     Mov  SI,Offset A2$
     Mov  AX,1
     Mov  BX,10
     Call Mid$
     Call Concat_2
     Mov  DI,Offset S$
     Call Assign
     Mov  SI,Offset S$
     Call PrintStr
     Call SetCursor
     Call DoCrLf
     Mov  AX,K
     Mov  LK,AX
_EndIf_03:
     Cmp  K,-77
     Je   _True_04
     Jmp  _EndIf_04
_True_04:
     Cmp  LK,-72
     Je   _True_05
     Jmp  _EndIf_05
_True_05:
     Call ShowGuid
     Mov  $Ycur,12
     Mov  $Xcur,35
     Call ClrWork
     Mov  SI,Offset A1$
     Mov  AX,11
     Mov  BX,20
     Call Mid$
     Call Concat_2
     Mov  DI,Offset S$
     Call Assign
     Mov  SI,Offset S$
     Call PrintStr
     Call SetCursor
     Call DoCrLf
     Mov  $Ycur,13
     Mov  $Xcur,35
     Call ClrWork
     Mov  SI,Offset A2$
     Mov  AX,11
     Mov  BX,20
     Call Mid$
     Call Concat_2
     Mov  DI,Offset S$
     Call Assign
     Mov  SI,Offset S$
     Call PrintStr
     Call SetCursor
     Call DoCrLf
     Jmp _EndIf_05A
_EndIf_05:
     Call ShowGuid
     Mov  $Ycur,12
     Mov  $Xcur,35
     Call ClrWork
     Mov  SI,Offset A3$
     Mov  AX,11
     Mov  BX,20
     Call Mid$
     Call Concat_2
     Mov  DI,Offset S$
     Call Assign
     Mov  SI,Offset S$
     Call PrintStr
     Call SetCursor
     Call DoCrLf
     Mov  $Ycur,13
     Mov  $Xcur,35
     Call ClrWork
     Mov  SI,Offset A4$
     Mov  AX,11
     Mov  BX,20
     Call Mid$
     Call Concat_2
     Mov  DI,Offset S$
     Call Assign
     Mov  SI,Offset S$
     Call PrintStr
     Call SetCursor
     Call DoCrLf
_EndIf_05A:
_EndIf_04:
     Cmp  K,-75
     Je   _True_06
     Jmp  _EndIf_06
_True_06:
     Cmp  LK,-72
     Je   _True_07
     Jmp  _EndIf_07
_True_07:
     Call ShowGuid
     Mov  $Ycur,12
     Mov  $Xcur,35
     Call ClrWork
     Mov  SI,Offset A1$
     Mov  AX,1
     Mov  BX,10
     Call Mid$
     Call Concat_2
     Mov  DI,Offset S$
     Call Assign
     Mov  SI,Offset S$
     Call PrintStr
     Call SetCursor
     Call DoCrLf
     Mov  $Ycur,13
     Mov  $Xcur,35
     Call ClrWork
     Mov  SI,Offset A2$
     Mov  AX,1
     Mov  BX,10
     Call Mid$
     Call Concat_2
     Mov  DI,Offset S$
     Call Assign
     Mov  SI,Offset S$
     Call PrintStr
     Call SetCursor
     Call DoCrLf
     Jmp _EndIf_07A
_EndIf_07:
     Call ShowGuid
     Mov  $Ycur,12
     Mov  $Xcur,35
     Call ClrWork
     Mov  SI,Offset A3$
     Mov  AX,1
     Mov  BX,10
     Call Mid$
     Call Concat_2
     Mov  DI,Offset S$
     Call Assign
     Mov  SI,Offset S$
     Call PrintStr
     Call SetCursor
     Call DoCrLf
     Mov  $Ycur,13
     Mov  $Xcur,35
     Call ClrWork
     Mov  SI,Offset A4$
     Mov  AX,1
     Mov  BX,10
     Call Mid$
     Call Concat_2
     Mov  DI,Offset S$
     Call Assign
     Mov  SI,Offset S$
     Call PrintStr
     Call SetCursor
     Call DoCrLf
_EndIf_07A:
_EndIf_06:
     Jmp DoLoop_01
    
DoLoop_01A:
    
ExitToDos:
    
     Mov  AH,4Ch
     Xor  AL,AL
     Int  21h
    
    
    
    
     Showguid Proc Near
     Public Showguid
     Push BP
     Mov  BP,SP
     Call Cls
     Mov  SI,Offset $tring_16
     Call PrintStr
     Call SetCursor
     Call DoCrLf
     Mov  SP,BP
     Pop  BP
     Ret
     Showguid Endp
    
    
    
     GetCursor Proc Near
     Mov  AH,3
     Xor  BH,BH
     Int  10h
     Xor  AX,AX
     Mov  AL,DL
     Inc  AL
     Mov  $Xcur,AX
     Mov  AL,DH
     Inc  AL
     Mov  $Ycur,AX
     Ret
     GetCursor Endp
    
    
    
    
     SetCursor Proc Near
     Mov  DX,$Xcur
     Dec  DL
     Mov  AX,$Ycur
     Mov  DH,AL
     Dec  DH
     Mov  AH,2
     Int  10h
     Ret
     SetCursor Endp
    
    
    
    
     MoveStr Proc Near
     Cld
MoveStr1:
     Lodsb
     Stosb
     Or  AL,AL
     Jnz MoveStr1
     Ret
     MoveStr Endp
    
    
    
    
     Len Proc Near
     Push CX
     Push SI
     Push DI
     Mov  DI,SI
     Xor  AL,AL
     Mov  CX,0ffffh
     Cld
     Repnz Scasb
     Not  CX
     Dec  CX
     Mov  AX,CX
     Pop  DI
     Pop  SI
     Pop  CX
     Ret
     Len Endp
    
    
    
    
     Concat Proc Near
     Push CX
     Push DI
     Push SI
     Push SI
     Push DI
     Pop  SI
     Call Len
     Mov  BX,AX
     Pop  SI
     Call Len
     Mov  CX,AX
     Inc  CX
     Pop  SI
     Pop  DI
     Add  DI,BX
     Cld
     Rep  Movs Byte Ptr[DI],Byte Ptr ES:[SI]
     Pop  CX
     Ret
     Concat Endp
    
    
    
    
     Concat_2 Proc Near
     Mov  SI,Offset $_1_
     Mov  DI,Offset $_0_
     Call Concat
     Ret
     Concat_2 Endp
    
    
    
    
     Cls Proc Near
     Push BP
     Mov  $Xcur,1
     Mov  $Ycur,1
     Mov  AH,0Fh
     Int  10h
     Cmp  AL,3
     Jg   ClsGraphics
     Mov  AH,06
     Xor  AL,AL
     Mov  BX,$Attr
     Mov  BH,BL
     Xor  CX,CX
     Mov  DH,24
     Mov  DL,79
     Int  10h
     Xor  BX,BX
     Xor  DX,DX
     Mov  AH,02
     Int  10h
     Jmp  ClsEnd
ClsGraphics:
     Mov  BX,BgColor
     Xchg BH,BL
     Xor  CX,CX
     Mov  DL,79
     Mov  DH,43
     Mov  AX,0600h
     Int  10h
ClsEnd:
     Pop  BP
     Ret
     Cls  Endp
    
    
    
    
     PrintStr Proc Near
     Call Len
     Push AX
     Mov  CX,AX
     Cmp  CX,0
     Jle  PS_3
     Mov  BX,$Attr
     Mov  AX,$Ycur
     Mov  DI,$Xcur
     Push DS
     Push ES
     Dec  AX
     Dec  DI
     Cmp  DI,0
     Jg   PS_1
     Xor  DI,DI
PS_1:
     Mov  DX,80
     Mul  DX
     Add  DI,AX
     Shl  DI,1
     Mov  AX,0B000H
     Mov  ES,AX
     Mov  AH,0FH
     Int  10H
     Cmp  AL,07H
     Je   PS_2
     Mov  AX,0B800H
     Mov  ES,AX
PS_2:
     Cld
     Movsb
     Mov  ES:[DI],BL
     Inc  DI
     Loop PS_2
     Pop  ES
     Pop  DS
PS_3:
     Pop  AX
     Add  $Xcur,AX
     Ret
     PrintStr Endp
    
    
    
    
     DoCrLf Proc Near
     Mov  $Xcur,1
     Inc  $Ycur
     Cmp  $Ycur,26
     Jne  CrLf_1
     Dec  $Ycur
CrLf_1:
     Mov  DX,Offset $CrLf
     Mov  AH,9
     Int  21h
     Mov  BX,$Xcur
     Mov  DL,BL
     Dec  DL
     Mov  BX,$Ycur
     Mov  DH,BL
     Dec  DH
     Xor  BX,BX
     Mov  AH,2
     Int  10h
     Ret
     DoCrLf Endp
    
    
    
    
     kbInput Proc Near
     Mov  AX,$Xcur
     Mov  $Var1,AX
     Mov  AX,$Ycur
     Mov  $Var2,AX
     Call SetCursor
     Xor  BX,BX
     Mov  CX,255
     Mov  DX,Offset $_0_
     Mov  AH,3fh
     Int  21h
     Mov  $Var3,AX
     Mov  SI,Offset $_0_
     Dec  SI
KBFindCR:
     Inc  SI
     Mov  AL,ES:[SI]
     Cmp  AL,13
     Jne  KBFindCR
     Xor  AX,AX
     Mov  ES:[SI],AL
     Call GetCursor
     Ret
     kbInput Endp
    
    
    
    
     ClrWork Proc Near
     Mov  DI,Offset $_0_
     Xor  AX,AX
     Mov  [DI],AX
     Ret
     ClrWork Endp
    
    
    
    
     Assign Proc Near
     Mov  SI,Offset $_0_
     Call MoveStr
     Ret
     Assign Endp
    
    
    
    
     Mid$ Proc Near
     Push BX
     Push AX
     Call ClrWork
     Cld
     Mov  DI,Offset $_1_
     Pop  AX
     Add  SI,AX
     Dec  SI
     Pop  CX
     Rep  Movs Byte Ptr[DI],Byte Ptr ES:[SI]
     Mov  [DI],Byte Ptr 0
     Ret
     Mid$ Endp
    
    
    
    
     Getkey Proc Near
     Xor  AX,AX
     Int  16h
     Cmp  AL,0
     Je   GetKey_1
     Xor  AH,AH
     Jmp  GetKey_2
GetKey_1:
     Mov  AL,AH
     Xor  AH,AH
     Neg  AX
GetKey_2:
     Ret
     GetKey Endp
    
    
    
    
     Screen Proc Near
     Push BP
     Mov  BP,SP
     Mov  AL,[BP+4]
     Xor  AH,AH
     Int  10h
     Mov  AX,1
     Mov  $Xcur,AX
     Mov  $Ycur,AX
     Pop  BP
     Ret  02
     Screen Endp
    
    
    
    
     ShowHideCursor Proc Near
     Cmp  AX,0
     Je   Sh1
     Mov  CL,13
     Mov  CH,12
     Mov  AH,01
     Int  10h
     Jmp  Sh2
Sh1:
     Xor  CL,CL
     Mov  CH,1
     Mov  AH,1
     Int  10h
Sh2:
     Ret
     ShowHideCursor Endp
    
    
Code Ends


Data Segment


$Xcur        DW 1
$Ycur        DW 1
$Attr        DW 7
$CrLf        DB 13,10,'$'
$CrLf2       DB 13,10,0
FgColor      DW 7
BgColor      DW 0
Err          DW 0
DefSeg       DW 0
$DataSeg     DW 0
$Empty       DB 0,0
$Var0        DW 0
$Var1        DW 0
$Var2        DW 0
$Var3        DW 0


$tring_01     DB  "Multiline Text Scrolling Program",0
$tring_02     DB  "Writen by : Saleh hajiaghazadeh",0
$tring_03     DB  "Well Compile with Microsoft Masm 5.10",0
$tring_04     DB  "You can enter 4 line, each line must be contain 20 character!",0
$tring_05     DB  "Please enter text line 1 : ",0
$tring_07     DB  "Please enter text line 2 : ",0
$tring_09     DB  "Please enter text line 3 : ",0
$tring_11     DB  "Please enter text line 4 : ",0
LK            DW  0
K             DW  0
$tring_16     DB  "Press arrow keys to view lines and ESC for exit",0


$_0_         DB  MaxString DUP(?)
$_1_         DB  MaxString DUP(?)


A1$           DB  MaxString  DUP(?)
A2$           DB  MaxString  DUP(?)
A3$           DB  MaxString  DUP(?)
A4$           DB  MaxString  DUP(?)
S$            DB  MaxString  DUP(?)
Data Ends

End

89/04/06 | |

سلام همکلاسیهای عزیز:

دانلود جواب تمرینات به صورت زیپ

اگر به هر دلیل موفق به دانلود نشدید به ادامه مطلب مراجعه فرمایید تا مستقیماً تمرینات را مشاهده نمایید، امیدوارم مفید واقع شود.


:ادامه مطلب:
89/03/31 | |