PDA

View Full Version : link into C



msofali
شنبه 21 آبان 1384, 09:50 صبح
سلام دوستان - من قطعه برنامه ای رو با سی نیازدارم که دو کامپیوتر رو به هم لینک کنه و بشه یه فایلی رو بین دو پورت com این کامپیوتر ها رد و بدل کرد . ممنون

mzjahromi
شنبه 21 آبان 1384, 15:44 عصر
یه قطعه برنامه می خوای یا می خوای بنویسی؟
من شش هفت سال پیش یه همچین برنامه ای نوشتم. باید تو Archive هام بگردم ولی فکر نمی کنم پیداشون کنم. در هر حال دو تا راه داری:
1- با وقفه های Bios که سرعت بیشتر از 9600 رو پشتیبانی نمی کنه
2 به صورت Low Level که تا 115000 سرعت داری ولی دردسرش خیلی زیاده

اگر هم تو ویندوز باشه که کاری نداره

mzjahromi
شنبه 21 آبان 1384, 16:07 عصر
این فایل اصلی اش هست. یه فایل دیگه هم کنارش بوده که کارای گرافیکی اش رو انجام می داده ولی الان نیستش. حالا اونا رو یا خودت باید شبیه سازی کنی یا حذفشون کنی


#include<fstream.h>
#include<bios.h>
#include<conio.h>
#include<dos.h>
union charlong
{
struct
{
char chr[4];
}ch;
unsigned long int lnt;
};
void WRITE_PHANTOM(void);
//================================================== =================
class scom
{
unsigned int CPN;
public:
scom(int);
void send_file(void);
void read_file(void);
char chkinp(void);
char read_char(void);
void send_char(char chr);
};
scom::scom(int a)
{
CPN=a;
asm{
mov ah,0
mov dx,a
mov al,0e3h
int 14h
}
}
//================================================== =================
class win
{
int x,y;
int a,b,c,d;
char attr;
void roundline();
public:
win(int,int,int,int,char);
void cls(void);
void active(void);
void putchar(char);
};
win::win(int a1,int b1,int c1,int d1,char attrb)
{

textattr(attrb);
a=a1;
b=b1;
c=c1;
d=d1;
x=1;
y=1;
attr=attrb;
window(a,b,c,d);
clrscr();
roundline();
}
//================================================== =================
class subwin
{
struct text_info ti;
char *buf,a,b,c,d;
void roundline(int,int,int,int);
public:
void percent(int);
subwin(int,int,int,int,char);
~subwin(void);
};
//-------------------------------------------------------------------
subwin::~subwin(void)
{
puttext(a,b,c+2,d+1,buf);
window(ti.winleft,ti.wintop,ti.winright,ti.winbott om);
textattr(ti.attribute);
delete[] buf;
}
//33333333333333333333333333333333333333333333333333 33333333333333333
void main(void)
{
textattr(WHITE|RED*16);
clrscr();
win wn1(1,1,80,12,WHITE|GREEN*16),wn2(1,14,80,25,WHITE |BLUE*16);
wn1.cls();
wn2.cls();
char chr;
scom serial(0);
wn2.active();
do{
if(serial.chkinp())
{
chr=serial.read_char();
if(chr==1)
serial.read_file();
else
wn1.putchar(chr);
}
if(bioskey(1))
{
chr=getch();
if(chr==27) break;
if(chr==0){
chr=getch();
if(chr==33)
serial.send_file();
continue;
}
wn2.putchar(chr);
wn2.active();
serial.send_char(chr);
}
}while(1);
textattr(WHITE|BLACK*16);
window(1,1,80,25);
clrscr();
}
//================================================== =================
char scom::chkinp(void)
{
char r;
unsigned int cpn=CPN;
asm{
mov ah,3
mov dx,cpn
int 14h
and ah,01
mov r,ah
}
return r;
}
//-------------------------------------------------------------------
void scom::send_char(char chr)
{
unsigned int cpn=CPN;
asm{
mov ah,01
mov al,chr
mov dx,cpn
int 14h
}
}
//-------------------------------------------------------------------
char scom::read_char(void)
{
unsigned int cpn=CPN;
char chr;
asm{
mov ah,02
mov dx,cpn
int 14h
mov chr,al
}
return chr;
}
//-------------------------------------------------------------------
void win::roundline()
{
int i;
window(a,b,c,d);
for(i=2;i<c-a+1;i++)
{
gotoxy(i,1);
putch(205);
gotoxy(i,d-b+1);
putch(205);
}
gotoxy(2,1);
putch(201);
gotoxy(2,d-b+1);
putch(200);
gotoxy(c-a,1);
putch(187);
gotoxy(c-a,d-b+1);
putch(188);
for(i=2;i<(d-b+1);i++)
{
gotoxy(2,i);
putch(186);
gotoxy(c-a,i);
putch(186);
}
window(a+3,b+1,c-3,d-1);
}
void subwin::roundline(int a,int b,int c,int d)
{
int i;
window(a,b,c,d);
for(i=2;i<c-a+1;i++)
{
gotoxy(i,1);
putch(205);
gotoxy(i,d-b+1);
putch(205);
}
gotoxy(2,1);
putch(201);
gotoxy(2,d-b+1);
putch(200);
gotoxy(c-a,1);
putch(187);
gotoxy(c-a,d-b+1);
putch(188);
for(i=2;i<(d-b+1);i++)
{
gotoxy(2,i);
putch(186);
gotoxy(c-a,i);
putch(186);
}
window(a+3,b+1,c-3,d-1);
}
//-------------------------------------------------------------------
void win::cls(void)
{
struct text_info ti;
gettextinfo(&ti);
active();
clrscr();
x=1;
y=1;
window(ti.winleft,ti.wintop,ti.winright,ti.winbott om);
textattr(ti.attribute);
}
//-------------------------------------------------------------------
void win::active(void)
{
window(a+3,b+1,c-3,d-1);
gotoxy(x,y);
textattr(attr);
}
//-------------------------------------------------------------------
void win::putchar(char chr)
{
struct text_info ti;
gettextinfo(&ti);
active();
if(chr==13)
{
putch('\n');
y++;
x=0;
}
else if(chr==8)
{
cprintf("\b \b");
x-=2;
if(x<0)
x=0;
}
else if(chr=='~')
{
cls();
window(ti.winleft,ti.wintop,ti.winright,ti.winbott om);
textattr(ti.attribute);
gotoxy(ti.curx,ti.cury);
return;
}
else
putch(chr);
x++;
if(x>(c-a-5))
{
x=1;
y++;
}
if(y>d-b-1){
y=d-b-1;
x=1;
}
window(ti.winleft,ti.wintop,ti.winright,ti.winbott om);
textattr(ti.attribute);
gotoxy(ti.curx,ti.cury);
}
//-------------------------------------------------------------------
subwin::subwin(int a1,int b1,int c1,int d1,char attr)
{
a=a1;b=b1;c=c1;d=d1;
gettextinfo(&ti);
buf=new char[(c-a+2)*(d-b+1)*2];
gettext(a,b,c+2,d+1,buf);
/* int k;
for(k=((c-a-6)/2);k>=0;k--)
{
window(a+k,b,c-k,d);
textattr(attr);
clrscr();
roundline(a+k,b,c-k,d);
delay(20);
}
window(a+2,b+1,c+2,d+1);
for(k=1;k<(d-b+1);k++)
{
gotoxy(c-a,k);
_DL=0x08;
_CX=2;
WRITE_PHANTOM();
}
gotoxy(1,d-b+1);
_DL=0x08;
_CX=c-a+1;
WRITE_PHANTOM(); */
window(a,b,c,d);
textattr(attr);
clrscr();
roundline(a,b,c,d);
}
//-------------------------------------------------------------------
void scom::send_file(void)
{
char fln1[15],fln2[15],i;
unsigned long int lnt,j;
unsigned char chr;
ifstream sf;
{
subwin win1(20,9,60,16,WHITE|RED*16);
cprintf("\r\nFilename befor send:");
cprintf("\r\n\nFilename after send:");
gotoxy(21,2);
cin.getline(fln1,15);
sf.open(fln1,ios::binary);
if(!sf)
return;
sf.seekg(0,ios::end);
lnt=sf.tellg();
sf.seekg(0,ios::beg);
gotoxy(21,4);
cin.getline(fln2,15);
}
subwin win1(15,9,66,16,WHITE|7*16);
textattr(BLACK|CYAN*16);
clrscr();
gotoxy(1,1);cprintf(" Send file : %s",fln1);
send_char(1);
for(i=0;fln2[i];i++)
{
send_char(fln2[i]);
while(!chkinp());
if(read_char()!=fln2[i]){
clrscr();
cprintf(" \n\r Verify Error:\n\r can not send filename");
sf.close();
delay(2000);
return;
}
}
send_char(0);
while(!chkinp());
if((unsigned char)read_char()==0xff){
clrscr();
cprintf(" \n\r Verify Error:\n\r can not open target file.");
delay(2000);
return;
}
union charlong cnv;
cnv.lnt=lnt;
for(i=0;i<4;i++)
{
chr=cnv.ch.chr[i];
send_char(chr);
while(!chkinp());
if(read_char()!=chr){
clrscr();
cprintf(" \n\r Verify Error:\n\r can not send lenght of file");
sf.close();
delay(2000);
return;
}
}
for(j=0;j<lnt;j++)
{
chr=sf.get();
send_char(chr);
while(!chkinp());
if(!(j%1000))
{gotoxy(2,3);win1.percent(100*(j+1)/lnt);}
if(read_char()!=chr){
clrscr();
cprintf(" \n\r Verify Error:\n\r can not send character");
sf.close();
delay(2000);
return;
}
}
gotoxy(2,3);win1.percent(100);
sf.close();
cprintf("\n\r file successfuly transfered");
delay(2000);
}
//-------------------------------------------------------------------
void scom::read_file(void)
{
char fln1[15],i,flag;
unsigned long int lnt,j;
unsigned char chr;
ofstream tf;
subwin win1(15,10,66,16,WHITE|RED*16);
for(i=0;;i++)
{
while(!chkinp());
fln1[i]=read_char();
if(!fln1[i])
break;
send_char(fln1[i]);
}
tf.open(fln1,ios::binary|ios::out);
if(!tf){
send_char(0xff);
return;
}
else send_char(0);
union charlong cnv;
for(i=0;i<4;i++)
{
while(!chkinp());
chr=read_char();
cnv.ch.chr[i]=chr;
send_char(chr);
}
lnt=cnv.lnt;
cprintf("\r recieving file :%s",fln1);
for(j=0;j<lnt;j++)
{
while(!chkinp());
chr=read_char();
tf.put(chr);
send_char(chr);
if(!(j%1000))
{gotoxy(2,3);win1.percent(100*(j+1)/lnt);}
}
gotoxy(2,3);win1.percent(100);
tf.close();
cprintf("\n\r file successfuly recieved");
delay(2000);
}
//-------------------------------------------------------------------
void subwin::percent(int n)
{
int i,num;
num=40*n/100;
for(i=1;i<=num;i++)
putch(178);
for(i;i<=40;i++)
putch(176);
cprintf(" %d%",n);
}
//-------------------------------------------------------------------

mzjahromi
شنبه 21 آبان 1384, 16:11 عصر
ظاهرا همه چیز هست بجز WRITE_PHANTOM که میاد و زیر پنجره ها رو سایه می اندازه میتونی بدون هیچ مشکلی حذفش کنی