?? get_a_re.c
字號:
* called by : take_all_record()
* output : 1 -- successful in connection
* 0 -- unsuccessful
* date : 1993.9.25
*/
UC ConnTermAndCPU(UC port)
{
int i;
char hand_shake[9] = "\xb0YWHQCSN\xfc";
UC msg[20];
UC suc, flag = 0;
UL GoalTick;
sprintf(msg, "正在聯機(%d)...", port+1);
hz16_disp(H_BX+H_XAD, H_BY+H_YAD/2, msg, BLACK); /* connecting */
if(port == 0 || port == 1)
outportb(SIO_IER[port],0x1); /* Enable Receive Int */
CheckPort(port);
SIORecHead[port] = SIORecTail[port] = CmdCount[port] = 0;
for(i=0; i<9; i++)
ToCPU(port, 0xb0);
GoalTick = *Tick_cnt_ptr + TimeOut;
for(;;)
{
if(kbhit() && (get_key0()==ESC))
{
flag = 0;
break;
}
CheckPort(port);
if(!CmdCount[port]) /* receiving buffer is still empty */
{
if(*Tick_cnt_ptr > GoalTick) /* time out and no valid data received */
{
message(CONN_ERR); /* error in connection */
flag = 0;
break;
}
else
continue;
}
suc = GetCmdFromBuf(port); /* data have been received */
if(suc != 1) /* not the valid data */
{
message(CONN_ERR);
flag = 0;
break;
}
for(i = 0; i < 9; i++) /* compare with the hand_shake infor*/
if(CmdBuf[port][i] != hand_shake[i]) /* not the same */
break;
if(i<9)
{
message(CONN_ERR);
flag = 0;
break;
}
ToCPU(port,0xb6); /* successful in connection */
clr_scr(H_BX+H_XAD,H_BY+H_YAD/2,H_BX+2*H_XAD,H_BY+H_YAD,BLACK,LIGHTGRAY);
flag = 1;
break;
} /* end of "for(;;)" */
return(flag);
}
/* function : receive data and command from SIORecBuf
* called by : ConnTermAndCPU(),take_record(),take_immediate_record()
* output : 0 -- not the valid data received
* 1 -- successful
* date : 1993.9.25
*/
UC GetCmdFromBuf(UC port)
{
int i, j, k;
CheckPort(port);
if(SIORecHead[port] == SIORecTail[port])
{
for(i = 0; i < CMD_BUF_SIZE; i++)
CmdBuf[port][i] = 0;
CmdCount[port]--;
return(0);
}
i = 0;
while(SIORecHead[port] != SIORecTail[port])
{
CmdBuf[port][i] = SIORecBuf[port][SIORecHead[port]++]; /* move data to CmdBuf */
if( SIORecHead[port] >= SIO_BUF_SIZE)
SIORecHead[port] -= SIO_BUF_SIZE;
i++;
}
k = 0;
for( ; ; )
{
if((CmdBuf[port][0] != 0xf0) && (CmdBuf[port][0] != 0xb0) &&
(CmdBuf[port][0] != 0xb4) && (CmdBuf[port][0] != 0xb7) &&
// (CmdBuf[port][0] != 0xb5) && (CmdBuf[port][0] != 0xb2) &&
(CmdBuf[port][0] != 0xb8)) /* not the valid command head */
{
for(j=0;j<i;j++) /* move forward */
CmdBuf[port][j]=CmdBuf[port][j+1];
k++;
if(k==i)
return(0); /* error in received data */
}
else
break;
}
for(; i < CMD_BUF_SIZE; i++)
CmdBuf[port][i]=0;
CmdCount[port]--;
return(1);
}
/* function : take records from Exchanger
* called by : take_all_record()
* output : 0 -- unsuccessful in taking data
* 1 -- successful
* date : 1993.9.25
*/
UC take_record(void)
{
int i, k;
UC SendB2=0;
UL LastTick;
long len;
FILE *fp, *fperror;
UI rec_len=23;
UC port, B4Rtn, UsedPorts;
B4Rtn = 0;
UsedPorts = 0;
for(port=0; port<PORT_NUM; port++)
if(Sys_mode.com_m[port])
UsedPorts++;
TRCount = 0;
hz16_disp(H_BX+H_XAD,H_BY+H_YAD/2,"正在接收...",BLACK); /* receiving */
fp = fopen("pabx.chg","wb"); /* original record file */
LastTick = *Tick_cnt_ptr;
for(; ;)
{
if(kbhit() && (get_key0()==ESC))
{
fclose(fp);
outportb(SIO_IER[0],0);
outportb(SIO_IER[1],0);
return(0);
}
for(port=0; port<PORT_NUM; port++) {
if(Sys_mode.com_m[port]) {
CheckPort(port);
if(CmdCount[port])
{
LastTick = *Tick_cnt_ptr;
break;
}
}
}
if(port == PORT_NUM)
{
if(*Tick_cnt_ptr > LastTick + TimeOut)
{
fclose(fp);
outportb(SIO_IER[0],0);
outportb(SIO_IER[1],0);
message(REC_TIMEOUT); /* TimeOut */
return(0);
}
else
continue;
}
else {
GetCmdFromBuf(port);
if((CmdBuf[port][0]==0xf0) && (CmdBuf[port][rec_len-1]==0xfd)) /* a telephone record*/
{
CmdBuf[port][0] = 0;
for(i = 1; i < rec_len-2; i++) /* CmdBuf[25]=check sum */
CmdBuf[port][0] += CmdBuf[port][i];
CmdBuf[port][0] = CmdBuf[port][0] & 0x7f;
if(CmdBuf[port][0] == CmdBuf[port][rec_len-2]) /* a valid phone record */
{
TRCount++;
outf(H_BX+3*H_XAD/2,H_BY+H_YAD,7,BLACK,"<< %-5u>>",TRCount);
CmdBuf[port][rec_len-2] = 0xfd;
CmdBuf[port][0] = port;
fwrite(CmdBuf[port],rec_len-1,1,fp);
SendB2 = 0;
ToCPU(port, 0xb5); /* a verify information */
} /* end of "if(CmdBuf[0] == CmfBuf[25])" */
else
{
if(SendB2 < 5)
{
SendB2++;
ToCPU(port, 0xb2);
}
else
{
fperror = fopen("error.dat","ab");
fwrite(CmdBuf[port],sizeof(UC),rec_len,fperror);
fclose(fperror);
SendB2 = 0;
ERRCount++;
ToCPU(port, 0xb5);
}
} /* end of "else if(CmdBuf[0] != CmfBuf[25])" */
} /* end of "if((CmdBuf[0]==0xf0) && (CmdBuf[26]==0xfd))"*/
else if(CmdBuf[port][0] == 0xb4) /* no more records */
{
if(Menu_path == 300) /* all record method */
{
ToCPU(port, 0xb1); ToCPU(port, 0xb1); ToCPU(port, 0xb1);
ToCPU(port, 0xb1); ToCPU(port, 0xb1); ToCPU(port, 0xb1);
ToCPU(port, 0xb1); ToCPU(port, 0xb1); ToCPU(port, 0xb1);
}
else /* go to immediate method */
{
ToCPU(port, 0xb7); ToCPU(port, 0xb7); ToCPU(port, 0xb7);
ToCPU(port, 0xb7); ToCPU(port, 0xb7); ToCPU(port, 0xb7);
ToCPU(port, 0xb7); ToCPU(port, 0xb7); ToCPU(port, 0xb7);
/* read returned B7 */
while(SIORecHead[port] == SIORecTail[port] )
{
CheckPort(port);
if(_bios_keybrd(_KEYBRD_READY) )
if(_bios_keybrd(_KEYBRD_READ) == ESC) break;
}
if(SIORecHead[port] == SIORecTail[port])
warn_mesg("錯誤","通訊超時");
else if(SIORecBuf[port][SIORecHead[port]] == 0xB7) { /* success */
}
else
warn_mesg("錯誤","設置錯誤");
}
if(port <2)
outportb(SIO_IER[port],0); /* disable interruption */
B4Rtn++;
if(B4Rtn < UsedPorts ) continue;
fclose(fp);
k = open("pabx.chg",O_RDONLY|O_BINARY);
len = filelength(k); /* take file length */
close(k);
fp = fopen("pabx.lth","wb");
fwrite(&len,sizeof(long),1,fp);
fclose(fp);
clr_scr(H_BX+H_XAD, H_BY+H_YAD/2,\
H_BX+3*H_XAD-20,H_BY+2*H_YAD-20,BLACK,LIGHTGRAY);
if(TRCount == 0) /* No record */
{
hz16_disp(H_BX+H_XAD,H_BY+H_YAD/2,"無 信 息!",BLACK);
delay_10ms(100);
}
else
{
hz16_disp(H_BX+H_XAD,H_BY+H_YAD/2,"接 收 完 畢!",BLACK);
message_disp(8,"正在分揀, 請稍候...");
all_record_transfer();
message_end();
}
return(1);
}
else if(CmdBuf[port][0] == 0xb7) /* returned B7 */
{
}
else
{
fperror = fopen("error.dat","ab");
fwrite(CmdBuf[port],sizeof(UC),rec_len,fperror);
fclose(fperror);
ERRCount++;
ToCPU(port, 0xb5);
}
} /* end of "port"*/
} /* end of "for(;;)" */
}
/* function : copy *.tmp to *.dat
* called by : take_all_record(), take_immediate_record()
* output : 0 -- successful, others -- unsuccessful
* date : 1993.9.25
*/
UC tmp_to_dat(void)
{
int flag;
struct ffblk fblk;
message_disp(8,"正在存盤, 請稍候..."); /* saving, please wait...*/
flag = findfirst("idd.tmp",&fblk,FA_ARCH);
if(flag == 0)
fcopy("idd.tmp","idd.dbf");
flag = findfirst("ddd.tmp",&fblk,FA_ARCH);
if(flag == 0)
fcopy("ddd.tmp","ddd.dbf");
flag = findfirst("ldd.tmp",&fblk,FA_ARCH);
if(flag == 0)
fcopy("ldd.tmp","ldd.dbf");
message_end();
return(flag);
}
/* function : copy *.dat to *.tmp
* called by : take_all_record(), take_immediate_record()
* output : 0 -- successful, others -- unsuccessful
* date : 1993.9.25
*/
UC dat_to_tmp(void)
{
int flag;
struct ffblk fblk;
message_disp(8,"正在存盤, 請稍候..."); /* saving, please wait...*/
flag = findfirst("idd.dbf",&fblk,FA_ARCH);
if(flag == 0)
fcopy("idd.dbf","idd.tmp");
else
remove("idd.tmp");
flag = findfirst("ddd.dbf",&fblk,FA_ARCH);
if(flag == 0)
fcopy("ddd.dbf","ddd.tmp");
else
remove("ddd.tmp");
flag = findfirst("ldd.dbf",&fblk,FA_ARCH);
if(flag == 0)
fcopy("ldd.dbf","ldd.tmp");
else
remove("ldd.tmp");
message_end();
return(flag);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -