-= Run Length Encoding =-    





#include
#include
#include
#include
#include
#pragma inline

void main (void)
{
int beir(int,char*,char*,char*);
int szam, i, j, l, s;
char str1[100],str2[1024],seged[20],kar;
szam=1;
j=0;
char nyit='(';
char zar=')';

clrscr();
printf("\n.:.: RLE ALGORITMUST DEMONSTRALO PROGRAM :.:.\n");
printf("\nKérem adjon meg egy maximum 100 hosszusagu sztringet:");
gets(str1);
l=strlen(str1);
l=l-1;

for(i=0,i<=l,i++)
{
if(str1[i]==str1[i+1])
{
kar=str1[i];
szam=szam+1;
seged[0]='#';
s=beir(szam,kar,&str2[j],seged);
j=j+s;
}
else
{
szam=1;
str2[j]='1';
j=j+1;
str2[j]=nyit;
j=j+1;
str2[j]=str1[i];
j=j+1;
str2[j]=zar;
j=j+1;
}
}

printf("\n\nA forras kodolva:");
puts(str2);
getch();
}
int beir(int szam,char*kar,char*str2,char*seged)
{
asm{
xor di,di
xor bx,bx
xor cx,cx
xor dx,dx
xor si,si
mov ax,[szam]
mov cl,10
}

oszt:
asm{
div cl
cmp ah,'0'
je masol0
cmp ah,'1'
je masol1
cmp ah,'2'
je masol2
cmp ah,'3'
je masol3
cmp ah,'4'
je masol4
cmp ah,'5'
je masol5
cmp ah,'6'
je masol6
cmp ah,'7'
je masol7
cmp ah,'8'
je masol8
cmp ah,'9'
je masol9
}
osztpont:
asm{
cmp al,'0'
je atrak
mov dl,al
xor ax,ax
jmp oszt
}

masol0:
asm{
mov bx,seged[si]
inc si
mov seged[si],bx
mov seged[si-1],'0'
jmp osztpont
}
masol1:
asm{
mov bx,seged[si]
inc si
mov seged[si],bx
mov seged[si-1],'1'
jmp osztpont
}
masol2:
asm{
mov bx,seged[si]
inc si
mov seged[si],bx
mov seged[si-1],'2'
jmp osztpont
}
masol3:
asm{
mov bx,seged[si]
inc si
mov seged[si],bx
mov seged[si-1],'3'
jmp osztpont
}
masol4:
asm{
mov bx,seged[si]
inc si
mov seged[si],bx
mov seged[si-1],'4'
jmp osztpont
}
masol5:
asm{
mov bx,seged[si]
inc si
mov seged[si],bx
mov seged[si-1],'5'
jmp osztpont
}
masol6:
asm{
mov bx,seged[si]
inc si
mov seged[si],bx
mov seged[si-1],'6'
jmp osztpont
}
masol7:
asm{
mov bx,seged[si]
inc si
mov seged[si],bx
mov seged[si-1],'7'
jmp osztpont
}
masol8:
asm{
mov bx,seged[si]
inc si
mov seged[si],bx
mov seged[si-1],'8'
jmp osztpont
}
masol9:
asm{
mov bx,seged[si]
inc si
mov seged[si],bx
mov seged[si-1],'9'
jmp osztpont
}

atrak:
asm{
xor si,si
cmp seged[si],'#'
je over
mov str2[di],seged[si]
inc si
inc di
jmp atrak
}

over:
asm{
mov str2[di],'('
inc di
mov str2[di],[kar]
inc di
mov str2[di],')'
xor bx,bx
xor si,si
}

szamol:
asm{
cmp seged[si],'#'
je kilep
add bx,1
inc si
jmp szamol
}

kilep:
asm{
mov ax,bx
return(_AX)
}
}