有谁帮忙翻译一段C程序??? (100分)

  • 主题发起人 主题发起人 YangFuHome
  • 开始时间 开始时间
Y

YangFuHome

Unregistered / Unconfirmed
GUEST, unregistred user!
unsigned char *combuf; /*模拟控制器程序内存的缓冲区指针*/
unsigned int asta,aend,par[130];/*asta内存开始地址,aend内存结束地址*/

char *buf1 = "COM1",*buf2 = "COM2";/*PC机串行口的标志*/

unsigned int comp;/*PC机串行口地址的偏移*/
unsigned int Wdey;
long int Sdey;

char dd,fname[20];

lfile()
{

FILE *fp;
char rbuf[80],ss[2],ad[4],ch;
unsigned char lengh,ad0,ad1,ad2,ad3;
unsigned int sadd,ladd,lladd,address,i;

sadd=60000;/*缓冲区开始地址初值*/
lladd=0; /*缓冲区结束地址判别初值*/

fp=fopen(fname,"r");
if(fp==NULL) goto ee;/*打开文件不正确*/

fgets(rbuf,80,fp); /*读一个文件记录*/
if(rbuf[0]!=':') goto ee2;/*文件格式不正确,记录是以':'开头*/
goto l1; /*开始处理文件一个记录*/
l2: fgets(rbuf,80,fp); /*读一个文件记录*/

l1: if(rbuf[1]<60) ss[0]=rbuf[1]-48;else ss[0]=rbuf[1]-55;/*将字符串长度高位代表的字符转换为数值*/
if(rbuf[2]<60) ss[1]=rbuf[2]-48;else ss[1]=rbuf[2]-55;/*将字符串长度低位代表的字符转换为数值*/

lengh=ss[0]*16+ss[1]; /*计算长度*/
if(lengh==0) goto ee1; /*长度为零,表示文件结束*/

for (i=0;i<=3;i++){
if(rbuf[i+3]<60) ad=rbuf[i+3]-48;else ad=rbuf[i+3]-55;}/*将数据开始地址的字符串转换为数值*/
address=ad[0]*4096+ad[1]*256+ad[2]*16+ad[3];/*计算开始地址*/

if(address>lladd) {lladd=address;ladd=address+lengh-1;}/*计算缓冲区结束地址*/
if(address<sadd) sadd=address; /*计算缓冲区开始地址*/

for (i=0;i<=lengh-1;i++){
if(rbuf[i*2+ 9]<60) ss[0]=rbuf[i*2+ 9]-48;else ss[0]=rbuf[i*2+ 9]-55;
if(rbuf[i*2+10]<60) ss[1]=rbuf[i*2+10]-48;else ss[1]=rbuf[i*2+10]-55;
combuf[address+i]=ss[0]*16+ss[1];} /*将一个记录的数据写入缓冲区*/
goto l2;

ee2: gotoxy(20,15);printf(" File format error !");goto ee3;
ee: gotoxy(20,15);printf(" No the filename or path error !");goto ee3;
ee1: asta=(sadd/128)*128; /*计算开始页地址*/
aend=(ladd/128)*128+127;/*计算结束页地址*/
goto ee4;
ee3: gotoxy(40,19); printf("press any key......");
dd=11;/*文件处理错误标志*/
ee4: fclose(fp);

}
 
没什么难点的,我觉得你自己可以翻译的。
 
这个东西这么简单,你不会?是懒惰把!·
 
不会C语言而且半路出家的人见过没有??
不帮忙我也不会怪你
千万不要冷嘲热讽的,你以为你什么都比别人强呀??
 
很久没有看见用goto了。
 
我试一试。看翻得过来不。
 
这么简单,可惜我没有时间呀
 
后退
顶部