الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

| محرر نصوص بالسي 16 بت |

بدأه The Hidden Ghost في 18 سبتمبر 2012 · 13 رد · 1,535 مشاهدة · في مشاريع ومسابقات القسم
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله تعالى وبركاته

إن الحمد لله نحمده ونستعينه ونستغفره ، ونعوذ بالله من شرور أنفسنا وسيئات أعمالنا ، من يهده الله فلا مضل له ومن يضلل

فلا هادي له ، وأشهد أن لا إلـه إلا الله وحده لا شريك له وأشهد أن محمـدا عبده ورسوله صلى الله عليه وعلى آله وصحبه

وسلم تسليما كثيرا إلى يوم الدين .

أما بعد ، فأهدي سلامي لكل أعضاء وزوار منتدى ArabTeam .

1 - مستلزمات الموضوع :

أولا وقبل كل شيء عليكم تحميل برنامج التيربو سي++ ، الذي سنحتاجه في هذه السهرة المهيبة

wink.gif.

2 - نبذة خفيفة :

كثير من هواة البرمجة (مثلي) ، يفضلون المحررات الشهيرة ( les Editeurs : DEV-C++ , CodeBlocks ,ETC)

ويتحاشون استعمال برنامج التيربو السي ++ ، لكن ما لا يعلمونه هو أن هذه المترجمات السالفة الذكر (أقصد gcc ) تقوم بإنشاء برامج 32 بت

أما برنامج التيربو سي ++ فينتج برامج من نوع 16 بت .

ولكي لا نقع في مشادات كلامية تحت ما يسمى " من الأفضل ؟ " ، فإنني سأقتصر على توضيح الغايات من استعمال هذا البرنامج :

  • يوفر لنا هذا البرنامج دوال عديدة من أبرزها gotoxy و clrscr وغيرها.

  • لا يوفر مكتبة " windows.h " لأنه ينتج برامج من نوع الكونسول أو الغرافيك مما يضمن تعامل واسع مع الدوس ومع كارت الشاشة مباشرة .

  • يسهل علينا برمجة الرسوميات و برامج الجرافيك .

3 - الموضوع الخاص : Command Line Arguments:

هلا تأملتم جيدا هذه الصورة ؟

V9Qjh.png

لاحظوا أننا قمنا بكتابة اسم المترجم ثم أضفنا من بعده الأوامر اللازمة لترجمة برنامج بلغة السي .

ألم تدركوا لحد الآن ما أصبو إليه ؟

ألم تتساءلوا يوما عن الكيفية التي يتعامل بها المترجم مع هذه الأوامر ؟

هذا ما سنتطرق إليه هذا اليوم ، فلتشدوا الرحال ها قد بدأنا ...

Let's Goooooooooo

4 - argv[1] in some lines :

كثيرا ما يهمل أحدنا كتابة هذه المتغيرات في الدالة الرئيسية لبرنامج بلغة السي :

int main(int argc ,char *argv[]); // Main Program

حيث نكتفي بكتابة :

int main(); // Simple Main

ونخرج من الباب الواسع بكل بساطة ، لكن ما يخفيه ويواريه عنا هذا المتغير (argv) ، يستلزم علينا إعادة النظر في تقاريرنا تجاهه

إذ يحوي سرا من أسرار البرامج الشهيرة و أيضا الفيروسات الخبيثة :

من حيث الفيروسات : تستعمل ال (argv[0] // EXE path) حيث يتم استخراج مسار تشغيل الفايروس ومن ثم

ينسخ الفايروس نفسه في كل بقاع الجهاز .

من حيث البرامج الشهيرة : تستخدم (argv[1] // Commands) لفتح الملفات أو ترجمة البرامج بالإعتماد على

الأوامر بعد البرنامج أو من خلال المسارات المعطاة للبرنامج .

لا تذهبوا بعيدا فالسهرة لا زالت مستمرة ...

5 - برنامج اليوم : Magic - Reader

لقد قمت بخلط لغة الأسمبلي مع لغة السي و الذي أنتج خليطا متجانسا ثمثل في برنامج قادر على قراءة الملفات ليس بفتحها من طرف المستخدم

ولكن من خلال النقر على الملف المراد قراءته ( مثل برنامج النوتباد ) ، وهناك ميزة أخرى للبرنامج وهي ميزة زحلقة الملفات (glissage)

فوق برنامجي لكي يتم قراءتها أيضا .

حيث يخزن مسار الملف في argv[1] ; File Path وبالتالي يتم قراءة البرنامج ، لكن هذه العملية تحتاج إلى تغيير بسيط في هذه الإعدادات :

الشرح بالصور :

zyxWV.png

أنا اخترت ملفا بصيغة hmz وتعني حمزة هههههههه ، نضغط على modifier

4O5o1.png

والآن نختار برنامجي ليكون القارئ الرئيسي لهذا الملف .

و أخيرا لا يسعني إلى أن أقول لكم تمتعوا بروعة الجرافيسك التي يقدمها البرنامج .

سورس كود البرنامج :


#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
/* Programmed By Hamza Qdider */
/* Magic-Reader*/
void ReadFiles(char Path[100]) ; //déclaration d'une fonction
void options();
int main(int argc, char *argv[])
{
clrscr(); // vider l'écran
_AX=0x13; // Aller au mode graphice (la fonction 13)
geninterrupt(0x10); // Appel de l'interruption 10h
ReadFiles(argv[1]); // Appel du fonction
return 0;
}
void ReadFiles(char Path[100])
{
char text[2000];
FILE *file; // déclaration d'un Fichier
textmode(2); // changer la taille de la police
textcolor(6); // la coleur du texte sera en orange
file=fopen(Path,"r"); // Ouvrir le fichier Pour la lecture seulement
if(file!=NULL) // si le fichier est trouv‚
{
while(!feof(file)) // la lecture jusqu'a la fin
{
fgets(text,1024,file); // stacker le texte dans le variable 'text'
printf("%s",text); // Affichier le texte
}
options();
fclose(file); // Fermer le fichier
}
else // si le fichier n'est pas trouv‚
{
gotoxy(24,11); // Aller … X = 24 ; Y = 11
cprintf("Ton Fichier n'est pas Trouvé !!!");// écrire la phrase en coleur orange
gotoxy(49,25);
textcolor(2);
cprintf("Programmer Par : Hamza Qdider");
getch();
}
}
void options()
{
textcolor(4);
gotoxy(3,25);
cprintf("F2 - Sortir ");
gotoxy(16,25);
cprintf("pour voir un texte avec une petite taille .Cliquer sur Alt+Enter");
sort :
asm{
mov ah,0x10 // getch();
int 16h
}
switch(_AX) // Analyser les code ASCII des touches cliqués
{
case 0x3C00 /* F2 */ : // si F2 est cliqué
exit(0);
default:
goto sort;
break;
}
}

Magic-Reader.zip

أتمنى من كل قلبي أن يعجبكم الموضوع laugh.gif

دمتم في رعاية الله و حفظه ، والسلام عليكم ورحمة الله تعالى وبركاته .

تم تعديل هذه المشاركة بواسطة Hamza+C+ASM في 18 سبتمبر 2012 في 15:47

3
rS3eY.png
#2

هل جرب أحدكم البرنامج ؟ happy.gif + هل من اقتراحات إضافية ؟smile.gif

rS3eY.png
#3

السلام عليكم

للأسف, لا أملك حالياً نسخة من Turbo 16 bits لذا لم أستطع ترجمة الكود.

لكن بطبيعة الحال, لن يمنعني هذا من إضافة بعض الملاحظات الصغيرة عن وسائط الدالة الرئيسية main :)

وسائط الدالة الرئيسية تمثل حلقة وصل بين لغة C و نظام التشغيل و بالأخص النظام الأب UNIX.

في الــ UNIX يتم إرسال الوسائط من طرف الــ Shell في أغلب الحالات ( و بالتحديد من طرف إحدى الدوال ذات النوع exec(3) ).

إذا كتبنا الكود الآتي في ملف اسمه prog :

int main(int argc, char **argv, char **envp);

ثم ذهبنا إلى الـ Ms-Dos و كتبنا :

/bin/prog argument1 argument2

فإن قيمة argc ستكون 3 أما argv فهي عبارة عن مصفوفة مؤشرات حرفية تُشير إلى قيم أو محتوى الوسائط المُمررة و هي على التوالي :

"/bin/prog", "argument1" and "argument2"

الــ envp تحتوي على لائحة بكافة متغيرات النظام (Environment Variables) المُستدعاة, يتم تخزين هذه الأخيرة تحت الشكل : VAR=value.

في الــ Ms-Dos على سبيل المثال, نجد أن PATH=C:\DOS;C:\;C:\TC\BIN.

يمكن الحصول على متغيرات النظام بكل سهولة باستخدام الدالة getenv الموجودة في المكتبة stdlib.h.

يُمكن أيضا أن تجد في Unix التوقيع التالي:

int main (int argc, char* argv[], char** arge);

عند الحاجة إلى استخدام Shell Environment Variables. لكن, هذا التوقيع ليس محمولا (portable) و لا قياسيا أيضا (standard).

أخيرا, كملاحظة فقط, الوسائط القياسية الثلاثة هي اختصار لــ :

argument count, argument values and environment pointer

المبرمج له الحرية في اختيار أسماء الوسائط, أما النوع و الترتيب فهما إلزاميان.

تم تعديل هذه المشاركة بواسطة أحمد الشنقيطي في 19 سبتمبر 2012 في 02:10 — السبب: تنسيق المشاركة.

2
#4

شكرا على الإضافة أخي أحمد smile.gif + لن تحتاج لترجمة الكود لأن الملف التنفيذي مرفق laugh.gif

دائما أرفق الملف التنفيذي لكي لا أعذبكم باعادة الترجمة وما يشوبها من شوائب smile.gif

rS3eY.png
#5

قمت بتحميل المرفقات, لكن لم أستطع تشغيل البرنامج :

post-219439-066896100 1348047142_thumb.p
المرفقات
Err.png
#6

حسب الرسالة فنظامك لا يدعم الFullScreenMode أخي أحمد smile.gif

rS3eY.png
#7

كيف ؟ :blink:

أنا كنتُ أعمل سابقا على التربو 16 و في وضع الــ Full Screen أيضا :)

#8

أخي أحمد laugh.gif ،، يعمل لدي البرنامج في أحسن حال smile.gif + دعك منه فهو برنامج بسيط happy.gif

rS3eY.png
#9
Hamza+C+ASM كتب:

دعك منه فهو برنامج بسيط happy.gif

لم يدعه ان أراد يمكنه استخدام VM

GoodBye

#10
اقتباس
يمكنه استخدام VM

تقصد الــ Virtual Machines ؟ :)

#11
أحمد الشنقيطي كتب:

تقصد الــ Virtual Machines ؟ :)

نعم

vmware

GoodBye

#13

لتجربة البرنامج حيث يمكنك تنصيب نظام (Windows) اخر يدعم Full Screen

GoodBye

#14

لا حاجة إلى كل هذا أخي محمد :)

يُمكنني تشغيل البرنامج بمجرد حذف الدالة المسؤولة عن وضع الــ FullScreen.

خصوصا و أن فكرة الكود لا تعتمد على ملء الشاشة.

مواضيع مشابهة