0% found this document useful (0 votes)
420 views23 pages

Write A C Program To Simulate Bit Stuffing and De-Stuffing

The C program simulates communication between two PCs by sending characters over the COM1 port using BIOS interrupts. It continuously checks if data is available to send or receive on COM1. If send data is ready, it gets a character from the keyboard and transmits it over COM1. If receive data is ready, it receives a character from COM1 and displays it. It exits if the ESC key is pressed.

Uploaded by

supriya
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
420 views23 pages

Write A C Program To Simulate Bit Stuffing and De-Stuffing

The C program simulates communication between two PCs by sending characters over the COM1 port using BIOS interrupts. It continuously checks if data is available to send or receive on COM1. If send data is ready, it gets a character from the keyboard and transmits it over COM1. If receive data is ready, it receives a character from COM1 and displays it. It exits if the ESC key is pressed.

Uploaded by

supriya
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 23

1. Write a C program to simulate bit stuffing and de-stuffing.

#include<stdio.h>

#include<conio.h>

#include<string.h>

void main()

int si=0,di=8,once=0;

char src[100],dest[100];

char flagbyte[]="01111110";

clrscr();

printf("Enter frame data in binary\n");

gets(src);

strcpy(dest,flagbyte);

while(src[si]!='\0')

if(src[si]=='1')

once++;

else once=0;

dest[di++]=src[si++];

if(once==5)

dest[di++]='0';

once=0;

dest[di++]='\0';
strcat(dest,flagbyte);

printf("\n After stuffing %s",dest);

getch();

for(si=0,di=8,once=0;di<(strlen(dest)-8);di++)

src[si++]=dest[di];

if(dest[di]=='1')

once++;

else once=0;

if(once==5)

di++;

once=0;

src[si++]='\0';

printf("\n After destuffing\n %s",src);

getch();

}
2)CHARACTER STUFFING

#include<stdio.h>

#include<conio.h>

#define DLE 0X10

#define STX 0X02

#define ETX 0X03

void main()

int msg[100],smsg[200],dmsg[100];

int i,mc=0,smc,j,len;

clrscr();

printf("enter 10 hexadecimal no \n");

for(i=0;i<10;i++)

scanf("%2X",&msg[i]);

smsg[0]=DLE;

smsg[1]=STX;

mc=10;

smc=2;

for(i=0;i<mc;i++)

smsg[smc]=msg[i];

smc++;

if(msg[i]==DLE)
{

smsg[smc]=DLE;

smc++;

smsg[smc++]=DLE;

smsg[smc++]=ETX;

smsg[smc]='\0';

printf("%2X",smsg[i]);

len=smc;

for(i=0,j=2;j<(len-2);j++)

dmsg[i++]=smsg[j];

if(smsg[j]==DLE)

j++;

printf("\n destuffed msg is \n");

for(j=0;j<10;j++)

printf("%2X",dmsg[j]);

getch();

}
Figure 10.14 CRC encoder and decoder

10.59

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#include<string.h>

char in[100],out[100],gen[100],temp[100],zero[100];

int i,ch,flag=0;

void main()

void mod();

clrscr();

for(i=0;i<=16;i++)
{

gen[i]='0';

gen[i]='\0';

gen[0]=gen[5]=gen[12]=gen[16]='1';

printf("enter the message polynomial(4 bit)\n");

scanf("%s",&in);

strcpy(temp,in);

for(i=0;i<(strlen(gen)-1);i++)

zero[i]='0';

zero[i]='\0';

strcat(temp,zero);

mod();

strcpy(out,in);

strcat(out,temp);

printf("crc polynomial is %s\n",out);

printf("enter the recieved frame\n");

scanf("%s",&temp);

mod();

for(i=0;temp[i]!='\0';i++)

if(temp[i]!='0')

flag=1;
}

if(flag==1)

printf("errors are recieved in frame\n");

else

printf("no errors recieved in frame\n");

getch();

void mod()

while(strlen(temp)>=strlen(gen))

if(temp[0]=='0')

for(i=0;temp[i]!='\0';i++)

temp[i]=temp[i+1];

else

for(i=0;i<strlen(gen);i++)

temp[i]=(char)(((int)temp[i]-48)^((int)gen[i]-48))+48;

}
4)dijk

//shortest path(Dijkstra algorithm)

#include<stdio.h>

#include<conio.h>

int n,c[10][10],d[10],s[10],src;

void read();

void write();

void dijkstra();

void main()

clrscr();

read();

dijkstra();

write();

getch();

void read()

int i,j,x,y,k,e;

printf("enter the value for n\n");

scanf("%d",&n);
for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

c[i][j]=999;

c[i][i]=0;

printf("enter the no of edges\n");

scanf("%d",&e);

printf("enter vertex1 to vertex2=cost\n");

for(i=1;i<=e;i++)

scnf("%d%d%d",&x,&y,&k);

c[x][y]=k;

printf("enter the source vertex\n");

scanf("%d",&src);

void dijkstra()

int i,j,min,u,v;

for(i=1;i<=n;i++)

d[i]=c[src][i];

s[i]=0;
}

s[src]=1;

for(i=1;i<=n;i++)

m=999;

u=-1;

for(j=1;j<=n;j++)

if(s[j]==0)

if(d[j]<min)

min=d[j];

u=j;

if(u==-1)

return;

s[u]=1;

for(v=1;v<=n;v++)

if (s[v]==0)

if(d[u]+c[u][v]<d[v])

d[v]=d[u]+c[u][v];
}

void write()

int i,j;

printf("cost matrix is\n");

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

printf("%d\t",c[i][j]);

printf ("\n");

printf("shorter distance\n");

for(i=1;i<=n;i++)

if(i!=src)

printf("from %d to %d=%d\n",src,i,d[i]);

}
5)encryp_substitute

#include<ctype.h>

#include<stdio.h>

#include<conio.h>

void main()

int shift,pi,ci,mi;

char plain[100],cipher[100],msg[100];

clrscr();

printf("Enter the plain text");

gets(plain);

while(1)

printf("\n enter key for encryption\n ");

scanf("%d",&shift);

if(shift<1||shift>25)

printf("bad input enter key between 1 and 25");


else

break;

printf("After removing non alphabetical character and capitalizing");

for(ci=0,pi=0;plain[pi]!='\0';pi++)

if(isalpha(plain[pi]))

putchar(toupper(plain[pi]));

cipher[ci++]=((toupper(plain[pi])-'A')+shift%26)%26+'A';

cipher[ci]='\0';

printf("After encryption\n: %s",cipher);

while(1)

printf("\n enter key for decryption");

scanf("%d",&shift);

if(shift<1||shift>25)

printf("bad input enter a key between 1 and 25");

else

break;

for(pi=0,ci=0;cipher[ci]!='\0';ci++)

plain[pi++]=((cipher[ci]-'A')+26-shift)%26+'A';

plain[pi]='\0';

for(pi=0,mi=0;plain[pi]!='\0';pi++)

msg[mi++]=tolower(plain[pi]);
}

msg[mi]='\0';

printf("after decryption\%s",plain);

getch();

6)encryp_trans

#include<stdio.h>

#include<conio.h>

#include<ctype.h>

#include<string.h>

void getkey(char* msg, char* key);

void transpose(char* src, char* key, char* dest, int oper);

void main()

char plain[100],cipher[100],key[100];

clrscr();

printf("enter the plain text\n");

gets(plain);

getkey("enter the key for encryption",key);

transpose(plain,key,cipher,1);
printf("\n after encryption:\n%s\n",cipher);

getkey("enter key for decryption",key);

transpose(cipher,key,plain,0);

printf("\n After decryption:\n%s\n",plain);

getch();

void transpose(char* src, char* key, char* dest, int oper)

int klen,plen,i,ch,j,k=0;

klen=strlen(key);

plen=strlen(src);

for(ch='A';ch<='Z';ch++)

for(i=0;i<klen;i++)

if(toupper(key[i])==ch)

for(j=i;j<plen;j+=klen)

if(oper!=0)

dest[k++]=src[j];

else

dest[j]=src[k++];

dest[k]='\0';

}
void getkey(char* msg, char* key)

int i;

while(1)

printf("\n%s",msg);

gets(key);

for(i=0;i<strlen(key);i++)

if(!isalpha(key[i]))

break;

if(i!= strlen(key))

printf("bad input,the key must containany alphabe");

else

break;

}
7)fork//Using fork function creates 2 processes and communicates between them

#include<stdio.h>

#include<stdlib.h>

#include<unistd.h>

#include<sys/wait.h>

int main(void)

pid_t childpid; // pid_t is signed integer data type which represents process ID

childpid=fork();

if(childpid==-1)

perror(failed to fork);

return1;

if (childid==0)

execl(/bin/ls,ls,-l,NULL);

perror(child failed to execl);

return1;

if(childpid!=wait(NULL))

perror(parent failed to wait due to signal or error);

return1;

return0;
}

8)//minimun spanning tree

#include<stdio.h>

#include<process.h>

#include<conio.h>

void prims(int n,int cost[10][10])

int i,j,u,v,min;

int sum;

int k,src;

int t[10][2];

int p[10], d[10], s[10],

min=9999;

src=0;

for(i=0;i<n;i++)

for(j=0;j<n;j++)

if(cost[i][j]!=0 && cost[i][j]<=min)

min=cost[i][j];

src=i;

}
}

for(i=0;i<n;i++)

d[i]=cost[src][i];

s[i]=0;

p[i]=src;

s[src]=1;

sum=0;

k=0;

for(i=1;i<n;i++)

min=9999;

u=-1;

for(j=0;j<n;j++)

if(s[j]==0)

if (d[j]<=min)

min=d[j];

u=j;

}
t[k][0]=u;

t[k][1]=p[u];

k++;

sum+=cost[u][p[u]];

s[u]=1;

for(v=0;v<n;v++)

if (s[v]==0 && cost[u][v]<d[v])

d[v]=cost[u][v];

p[v]=u;

if(sum>=9999)

printf("spanning tree does not exist\n");

else

printf("spanning tree exist & tree is\n");

for(i=0;i<n-1;i++)

printf("%d %d\n",t[i][0],t[i][1]);

printf("cost of spanning tree=%d\n",sum);

}
void read(int n,int a[10 ][10])

int i,j;

for(i=0;i<n;i++)

for(j=0;j<n;j++)

scanf("%d",&a[i][j]);

void main()

int n,cost[10][10];

clrscr();

printf("Enter the number of nodes\n");

scanf("%d",&n);

printf("Enter te cost adjacent matrix\n");

read(n,cost);

prims(n,cost);

getch();

}
9)pc-pc

#include<stdio.h>

#include<conio.h>

#include<bios.h>

#include<stdlib.h>

#define txready 0x2000

#define rxready 0x0100

#define com1 0

#define send 1

#define receive 2

#define settings (0xE0|0x03|0x00|0x00)

void main()

char ch;

clrscr();

bioscom(0,settings,com1);

while(1)

if(bioscom(3,0,com1) & txready)

{
if(kbhit())

ch=getch();

if(ch=='\r')

ch='\n';

putch(ch);

bioscom(send,ch,com1);

if(bioscom(3,0,com1)& rxready)

ch=bioscom(receive,0,com1);

putch(ch);

if(ch==27)

exit(1);

You might also like