السلام عليكم ورحمه الله وبركاته
أرجو منكم مساعدتي في تعديل هذا الكود بارك الله فيكم ورزقكم الجنه قولوا أمين ,
البرنامج فكرته بسيطة , وهو لضغط او تقليل حجم ملفات التيكست بطريقة Run Length Enc0ding , بمعني اخر , يري الحروف المتكررة في النص مهما كان عددها , ويستبدلها بحرفين فقط , او حرف ورقم , الحرف هو الحرف المتكرر , والرقم هو عدد مرات تكرارة
مثال :
CCCOOOZAASSSS
إذن تكرر حرف الــ C ثلاث مرات , وحرف ال O ثلاث مرات, وبعدهما حرف ال Z مرة , وحرف الـ A مرتان وحرف الS اربعه
طبعا بما أن حرف ال A تكرر مرتان , وأنا سأعوض عن اي تكرار بحرف ورقم اي خانتين , اذا لا داعي للتعويض هنا
ويصبح النص بعد الضغط
C4\O3\ZAA\S4
ومن ثم كود اخر لعملية فك الضغط بالقيام بالخطوات السابقه بصورة عكسية ..
لقد وجدت كود جاهز مكتوب بلغه السي , وهو شبيه بالمعني السابق , ولكني لا افهمه تماما , بالإضافة الي ان كاتب الكود أضاف له بعض السطور لمنع حذف اسمة ,
طبعا ينبغي علينا حمايه حقوق الاخرين , ولكن في حالتي هذه ان ابقيت علي اسمه , ماذا سيتفيد هو ؟؟ هذا برنامج خاص بمشروعي سأسلمة وبعد ذلك انساه للابد ...بالإضافة الي اني لا اعرف من هو لكي أسأله ,لا اعرف غير اسمه Bindesh , والكود بسيط مايستاهل , ولن أأخذ درجه المشروع للاسف ..
ما اطلبه منكم رجااااء رجااااااء :
1 - انتزاع الكود الخاص بالحقوق
2 - ماهي طريقة عمل GUI لهذا البرنامج , عن طريق وضع زر لإستعراض الملفات واختيار الملف المراد ضغطة بدلا من ادخاله في شاشه الكونسول السوداء
الأكواد هنا :
كود ملف الضغط : compressor
#include<stdio.h>
#include "mymacros.bmf"
#pragma pack(1)
#define MSB 10 /* MSB = Minimum Similar Bytes */
/************************************************/
struct _rlcblock
{
char sig[7];
char freqbyte;
unsigned int freq;
}rb;
/************************************************/
main()
{
FILE *fs,*ft; int fbr=1,ob,nb,x=0; unsigned int i=1;
char fsname[128],ftname[128];
strcpy(rb.sig,"Bindesh");
ME(); puts("Run length compressor. By Bindesh Kumar Singh. Mail me your comments");
puts("Enter file to compress.");gets(fsname); CREATEFILE(fs,fsname,"rb");
puts("Compressed file will be saved as:(don't give extension). write no/NO to use source derived name.");gets(ftname);
if((strcmp(ftname,"no")) == 0 || (strcmp(ftname,"NO")) == 0){strcat(fsname,".RLC");CREATEFILE(ft,fsname,"wb");}
else {strcat(ftname,".RLC");CREATEFILE(ft,ftname,"wb");}
while(1)
{
if(fbr==1)ob=fgetc(fs);
if(fbr==1 && ob==EOF)break;
nb=fgetc(fs);
if(ob == nb){fbr=0;i++;continue;}
if(fbr == 0)
{
if(i>MSB)
{
rb.freqbyte = ob; rb.freq = i; fwrite(&rb,sizeof(rb),1,ft); fbr=1;i=1; if(nb == EOF)break;
fputc(nb,ft);continue;
}
else
{
for(x=1;x<=i;x++)
fputc(ob,ft);
fbr=1;i=1;if(nb==EOF)break; fputc(nb,ft);continue;
}
}
else
{
fputc(ob,ft); if(nb==EOF)break;
fputc(nb,ft);fbr=1;i=1;
}
}
fclose(fs);fclose(ft);
puts("File compressed sunccessfully");
getch();
}ملف فك الضغط decompressor
/* Developer: Bindesh Kumar Singh DATE: 15|09|2006 */
/* Compiler used: Dev c++ 4.0 */
#include<stdio.h>
#include "mymacros.bmf"
#pragma pack(1)
#define MSB 10 /* MSB = Minimum Similar Bytes */
/************************************************/
struct _rlcblock
{
char freqbyte;
unsigned int freq;
}rb;
/************************************************/
main()
{
FILE *fs,*ft; int ch,tmp,i=0; long int pos=0;
char fsname[128],ftname[128]; char sig[7];
ME(); puts(" -RLC- decompressor. By Bindesh Kumar Singh. Mail me your comments");
puts("Enter file to decompress. < SAVED WITH EXTENSION *.RLC >");gets(fsname);
puts("Decompressed file will be saved as:");gets(ftname);
CREATEFILE(fs,fsname,"rb");
CREATEFILE(ft,ftname,"wb");
while(1)
{
ch = fgetc(fs); if(ch == EOF)break;
if(ch == 'B') /* now check next 6 bytes */
{
pos = ftell(fs); fscanf(fs,"%6s",&sig); /* Save position. Read next 6 bytes */
if(strcmp(sig,"indesh") == 0)
{
fread(&rb,sizeof(rb),1,fs);
for(i=1;i<=rb.freq;i++)
fputc(rb.freqbyte,ft);
continue;
}
else {fputc(ch,ft); fseek(fs,pos,SEEK_SET);continue;} /*If not the signature write 'B' and set position after 'B' */
}
else fputc(ch,ft);
}
fclose(fs);fclose(ft);
puts("File Decompressed sunccessfully");
getch();
}ملف ثالث لا أعرف ما وظيفته إسمة mymacros.BMF
/******************** MACRO LIST created by Bindesh Kumar Singh (11:47 PM 6/3/2006) **********************/
#define ME() puts("Created by Bindesh kumar Singh");puts("Contact: bindesh_youneedme@yahoo.co.in"); puts("");
#define CREATEFILE(HANDLE,FILENAME,MODE) if((HANDLE=fopen(FILENAME,MODE))== 0){printf("Error creating/opening file %s\n",FILENAME);getch();exit(0);}
#define COPYFILE(FS,FT,BUFF) while(BUFF!=EOF){BUFF=fgetc(FS);fputc(BUFF,FT);}</div></div>
