/*--------------------------------------------------------------------------------------------
ASSIGNMENT NO : 6
TITLE : WRITE A C PROGRAM FOR PC TO PC SERIAL COMMUNICATION.
1)FILE TRANSFER
2)FULL DUPLEX CHARACTER TRANSFER (CHAT APPLICATION)
--------------------------------------------------------------------------------------------*/
/* ------------------------------------------------
HEADER FILES
-------------------------------------------------*/
#include<stdio.h>
#include<conio.h>
#include<bios.h>
#include<io.h>
#define COM1 0
#define DATA_READY 0x100
#define TRUE 1
#define FALSE 0
#define SETTINGS (0x80|0x02|0x00|0x00)
// (1200BAUD RATE|7 DATA BITS|1 STOP BIT|NO PARITY)
/* ------------------------------------------------
PREDECLARATION OF FUNCTIONS
-------------------------------------------------*/
void msgpassing();
void menu();
void filetransfer();
void accept();
/* ------------------------------------------------
MAIN FUNCTION
-------------------------------------------------*/
void main()
{
int ch;
clrscr();
while(1)
{
menu();
scanf("%d",&ch);
switch(ch)
{
case 1: msgpassing();
break;
case 2: filetransfer();
break;
case 3: accept();
break;
case 4: exit(0);
}
}
}
/* ------------------------------------------------
FUNCTION FOR MENU
-------------------------------------------------*/
void menu()
{
printf("\\n---------------------------");
printf("\\n\\t MENU ");
printf("\\n---------------------------");
printf("\\n 1. MESSAGE PASSING : ");
printf("\\n 2. FILE TRANSFER : ");
printf("\\n 3. FILE RECEIVE : ");
printf("\\n 4. EXIT : ");
printf("\\n---------------------------");
printf("\\n\\n Enter Your Choice : ");
}
/* ------------------------------------------------
FILE TRANSER
-------------------------------------------------*/
void filetransfer()
{
FILE *fp;
int i=0;
char ch,data,fname[50];
flushall();
printf("\\n\\n Enter the File Name with Path to Transfer : ");
for(i=0;(ch=getchar())!=\'\\n\';i++)
fname[i]=ch;
flushall();
bioscom(0,SETTINGS,COM1);
fp=fopen(fname,"r+"); //FILE OPEN FOR READING
fseek(fp,SEEK_SET,0);
do
{
data=fgetc(fp);
putch(data);
bioscom(1,data,COM1);
}while(data!=EOF);
bioscom(1,27,COM1);
fclose(fp);
}
/* ------------------------------------------------
ACCEPT FUNCITON
-------------------------------------------------*/
void accept()
{
int status ,out;
char fname[80]="C:\\tc\\a.txt";
FILE *fp;
fp=fopen(fname,"w+"); //FILE OPENED FOE WRITING
bioscom(0,SETTINGS,COM1);
while (1)
{
status=bioscom(3,0,COM1);
if(status & DATA_READY)
if((out=bioscom(2,0,COM1) & 0x7F)!=0)
{
if(out!=27)
fprintf(fp,"%c",out);
putch(out);
}
if(out==27)
break;
}
fclose(fp);
printf("\\n\\n FILE IS RECEIVED..! ");
}
void msgpassing()
{
int i,in,out,status,DONE=FALSE;
int flag=0;
int flag1=0;
char msg[50];
char condition;
clrscr();
bioscom(0,SETTINGS,COM1);
while(!DONE)
{
status=bioscom(3,0,COM1);
if(status & DATA_READY)
if((out=bioscom(2,0,COM1) & 0x7F)!=0) //receive mode
{
if(flag1==0 && (out!=10 || out!=13))
{
printf("\\n RECEIVER : ");
printf("\\n ßßßßßßßßßßßßß \\n");
flag1=1;
}
if(out==13)
{
flag1=0;
flag=0;
}
putch(out);
}
if(flag==0)
{
printf("\\n SENDER : ");
printf("\\n ßßßßßßßßßßßßß \\n");
flag=1;
}
if(kbhit())
{
if((in=getch())==27)
{
DONE=TRUE;
}
putch(in);
gets(msg);
bioscom(1,in,COM1);
i=0;
while(msg[i]!=\'\\0\')
{
bioscom(1,msg[i],COM1);
i++;
}
if(msg[i]==\'\\0\')
{
bioscom(1,10,COM1);
bioscom(1,13,COM1);
flag=0;
}
}
}
}
/* ------------------------------------------------
END OF THE PROGRAM
-------------------------------------------------*/