السلام عليكم ورحمة الله تعالى وبركاته
إن الحمد لله نحمده ونستعينه ونستغفره ، ونعوذ بالله من شرور أنفسنا وسيئات أعمالنا ، من يهده الله فلا مضل له ومن يضلل
فلا هادي له ، وأشهد أن لا إلـه إلا الله وحده لا شريك له وأشهد أن محمـدا عبده ورسوله صلى الله عليه وعلى آله وصحبه
وسلم تسليما كثيرا إلى يوم الدين .
أما بعد ، فأهدي سلامي لكل أعضاء وزوار منتدى ArabTeam .
1 - مستلزمات الموضوع :
أولا وقبل كل شيء عليكم تحميل برنامج التيربو سي++ ، الذي سنحتاجه في هذه السهرة المهيبة
2 - نبذة خفيفة :
كثير من هواة البرمجة (مثلي) ، يفضلون المحررات الشهيرة ( les Editeurs : DEV-C++ , CodeBlocks ,ETC)
ويتحاشون استعمال برنامج التيربو السي ++ ، لكن ما لا يعلمونه هو أن هذه المترجمات السالفة الذكر (أقصد gcc ) تقوم بإنشاء برامج 32 بت
أما برنامج التيربو سي ++ فينتج برامج من نوع 16 بت .
ولكي لا نقع في مشادات كلامية تحت ما يسمى " من الأفضل ؟ " ، فإنني سأقتصر على توضيح الغايات من استعمال هذا البرنامج :
-
يوفر لنا هذا البرنامج دوال عديدة من أبرزها gotoxy و clrscr وغيرها.
-
لا يوفر مكتبة " windows.h " لأنه ينتج برامج من نوع الكونسول أو الغرافيك مما يضمن تعامل واسع مع الدوس ومع كارت الشاشة مباشرة .
-
يسهل علينا برمجة الرسوميات و برامج الجرافيك .
3 - الموضوع الخاص : Command Line Arguments:
هلا تأملتم جيدا هذه الصورة ؟

لاحظوا أننا قمنا بكتابة اسم المترجم ثم أضفنا من بعده الأوامر اللازمة لترجمة برنامج بلغة السي .
ألم تدركوا لحد الآن ما أصبو إليه ؟
ألم تتساءلوا يوما عن الكيفية التي يتعامل بها المترجم مع هذه الأوامر ؟
هذا ما سنتطرق إليه هذا اليوم ، فلتشدوا الرحال ها قد بدأنا ...
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 وبالتالي يتم قراءة البرنامج ، لكن هذه العملية تحتاج إلى تغيير بسيط في هذه الإعدادات :
الشرح بالصور :

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

والآن نختار برنامجي ليكون القارئ الرئيسي لهذا الملف .
و أخيرا لا يسعني إلى أن أقول لكم تمتعوا بروعة الجرافيسك التي يقدمها البرنامج .
سورس كود البرنامج :
#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;
}
}
أتمنى من كل قلبي أن يعجبكم الموضوع ![]()
دمتم في رعاية الله و حفظه ، والسلام عليكم ورحمة الله تعالى وبركاته .
