📄 dialog.c
字号:
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <stdio.h>
#include <fcntl.h>
#include <termio.h>
#include <unistd.h>
#include <string.h>
#include "nfcnet.h"
void strtoup(char *strp);
void strtolo(char *strp);
void dlg_help(char *p1, char *p2,char *p3,char *p4,char *p5);
void wrt_bufx(int imk,int semid);
int semset(void);
int semopena(int semset_semid,int semset_semno);
int semopenr(int semset_semid,int semset_semno);
int semclose(int semset_semid,int semset_semno);
char bufx[3072],buf1[1024],cmd_line[128];
main()
{ int semid,cmd_mark,cmd_len;
int i,j,k;
char *p1,*p2,*p3;
char *zcrern=" ";
char *zcpble=" ";
char *reptro=" ";
char *showor=" ";
char *showro=" ";
semid=semset();
printf("Semid is %d .\n",semid);
/*
To initial the buffers .
*/
for(i=0;i<3072;i++)bufx[i]=0;
for(i=0;i<1024;i++)buf1[i]=0;
sprintf(zcrern,"RERN %c%c%c",*(P_TELFIX1),*(P_TELFIX1+1),0);
sprintf(zcpble,"PBLE %c%c%c",*(P_TELFIX1+1),*(P_TELFIX1),0);
sprintf(reptro,"REPT %c%c%c",*(P_TELFIX1+1),*(P_TELFIX1),0);
sprintf(showor,"SHOW %c%c%c",*(P_TELFIX1),*(P_TELFIX1+1),0);
sprintf(showro,"SHOW %c%c%c",*(P_TELFIX1+1),*(P_TELFIX1),0);
/*
To display the help .
*/
dlg_help(zcrern,zcpble,reptro,showor,showro);
/*
The cycle for get command and performance .
*/
for(;;)
{ for(i=0;i<128;i++)cmd_line[i]=0;
printf("DLG$ "); gets(cmd_line);
strtoup(cmd_line);
cmd_len=strlen(cmd_line);
for(i=0;i<cmd_len;i++)
{
if(cmd_line[i]< 32)cmd_line[i]=' ';
if(cmd_line[i]>126)cmd_line[i]=' ';
}
/*
To delete space at head of command line .
*/
for(;;)
{ if(cmd_line[0]!=' ')break;
cmd_len=strlen(cmd_line);
for(i=0;i<cmd_len;i++)cmd_line[i]=cmd_line[i+1];
cmd_line[cmd_len-1]=0;
}
/*
To delete space at last of command line .
*/
for(;;)
{ cmd_len=strlen(cmd_line);
if(cmd_line[cmd_len-1]!=' ')break;
cmd_line[cmd_len-1]=0;
}
cmd_mark=0;
if(strlen(cmd_line)==0)continue;
if(!strncmp(cmd_line,"AUTOPBT",7))
{ cmd_mark=1;
printf("The command, AUTOPBT, is invalid !\n");
continue;
}
if(!strncmp(cmd_line,"AUTOPCD",7))
{ cmd_mark=1;
printf("The command, AUTOPCD, is invalid !\n");
continue;
}
if(!strncmp(cmd_line,"BKBK",4))
{ cmd_mark=1;
sprintf(bufx,"ZCZC BKBK NNNN%c",0);
wrt_bufx(0,semid);
}
if(!strncmp(cmd_line,"EXIT",4))
{ cmd_mark=1;
break;
}
if(!strncmp(cmd_line,"GAFM",4))
{ cmd_mark=1;
sprintf(bufx,"ZCZC GAFM NNNN%c",0);
wrt_bufx(0,semid);
}
if(!strncmp(cmd_line,"HELP",4))
{ cmd_mark=1;
dlg_help(zcrern,zcpble,reptro,showor,showro);
continue;
}
if(!strncmp(cmd_line,"LAST",4))
{ cmd_mark=1;
sprintf(bufx,"ZCZC LAST NNNN%c",0);
wrt_bufx(0,semid);
}
if(!strncmp(cmd_line,zcpble,7))
{ cmd_mark=1;
cmd_len=strlen(cmd_line);
if((cmd_len!=11)&&(cmd_len!=16))
{ printf("The command, %s, is error at length !\n",cmd_line);
continue;
}
if(cmd_len==11)
{ for(i=7;i<11;i++)
if((cmd_line[i]<'0')||(cmd_line[i]>'9'))
{ if(cmd_mark==1)
printf("The command, %s, is error at flow NO. !\n",cmd_line);
cmd_mark=0;
}
if(cmd_mark==0)continue;
}
if(cmd_len==16)
{ for(i=7;i<11;i++)
if((cmd_line[i]<'0')||(cmd_line[i]>'9'))
{ if(cmd_mark==1)
printf("The command, %s, is error at flow NO.(1) !\n",cmd_line);
cmd_mark=0;
}
if(cmd_mark==0)continue;
if(cmd_line[11]!='-')
{ printf("The command, %s, is error at flow NO.(-) !\n",cmd_line);
continue;
}
for(i=12;i<16;i++)
if((cmd_line[i]<'0')||(cmd_line[i]>'9'))
{ if(cmd_mark==1)
printf("The command, %s, is error at flow NO.(2) !\n",cmd_line);
cmd_mark=0;
}
if(cmd_mark==0)continue;
}
sprintf(bufx,"ZCZC %s NNNN%c",cmd_line,0);
wrt_bufx(0,semid);
}
if(!strncmp(cmd_line,"PUBLIC",6))
{ cmd_mark=1;
printf("The command, PUBLIC, is invalid !\n");
/*
wrt_bufx(1,semid);
*/
continue;
}
if(!strncmp(cmd_line,reptro,7))
{ cmd_mark=1;
printf("The command, %s, is invalid !\n",reptro);
/*
wrt_bufx(0,semid);
*/
continue;
}
if(!strncmp(cmd_line,zcrern,7))
{ cmd_mark=1;
cmd_len=strlen(cmd_line);
if((cmd_len!=11)&&(cmd_len!=16))
{ printf("The command, %s, is error at length !\n",cmd_line);
continue;
}
if(cmd_len==11)
{ for(i=7;i<11;i++)
if((cmd_line[i]<'0')||(cmd_line[i]>'9'))
{ if(cmd_mark==1)
printf("The command, %s, is error at flow NO. !\n",cmd_line);
cmd_mark=0;
}
if(cmd_mark==0)continue;
}
if(cmd_len==16)
{ for(i=7;i<11;i++)
if((cmd_line[i]<'0')||(cmd_line[i]>'9'))
{ if(cmd_mark==1)
printf("The command, %s, is error at flow NO.(1) !\n",cmd_line);
cmd_mark=0;
}
if(cmd_mark==0)continue;
if(cmd_line[11]!='-')
{ printf("The command, %s, is error at flow NO.(-) !\n",cmd_line);
continue;
}
for(i=12;i<16;i++)
if((cmd_line[i]<'0')||(cmd_line[i]>'9'))
{ if(cmd_mark==1)
printf("The command, %s, is error at flow NO.(2) !\n",cmd_line);
cmd_mark=0;
}
if(cmd_mark==0)continue;
}
sprintf(bufx,"ZCZC %s NNNN%c",cmd_line,0);
wrt_bufx(0,semid);
}
if(!strncmp(cmd_line,"RESEND",6))
{ cmd_mark=1;
printf("The command, RESEND, is invalid !\n");
continue;
}
if(!strncmp(cmd_line,"SEND",4))
{ cmd_mark=1;
printf("The command, SEND, is invalid !\n");
continue;
}
if(!strncmp(cmd_line,showor,7))
{ cmd_mark=1;
printf("The command, %s, is invalid !\n",showor);
continue;
}
if(!strncmp(cmd_line,showro,7))
{ cmd_mark=1;
printf("The command, %s, is invalid !\n",showro);
continue;
}
if(!strncmp(cmd_line,"TEST",4))
{ cmd_mark=1;
sprintf(bufx,"ZCZC TEST NNNN%c",0);
wrt_bufx(0,semid);
}
if(cmd_mark==0)
{ printf("The command, %s, is error !\n",cmd_line);
}
/*
To clear the buffer BUFX .
*/
cmd_len=strlen(bufx);
for(i=0;i<cmd_len;i++)bufx[i]=0;
}
}
/*
Parameter order ... zcrern,zcpble,reptro,showor,showro .
*/
void dlg_help(char *p1,char *p2,char *p3,char *p4,char *p5)
{
printf("=======================================\n");
printf("| |\n");
printf("| 01)GAFM 02)TEST 03)LAST 04)BKBK |\n");
printf("| 05)HELP 06)SEND 07)EXIT 08)RESEND |\n");
printf("| |\n");
printf("| 11)%sdddd 12)%sdddd-dddd |\n",p1,p1);
printf("| 13)%sdddd 14)%sdddd-dddd |\n",p2,p2);
printf("| 15)%sdddd |\n",p3);
printf("| |\n");
printf("| 21)%sdddd 22)%sdddd-dddd |\n",p4,p4);
printf("| 23)%sdddd 24)%sdddd-dddd |\n",p5,p5);
printf("| |\n");
printf("| 31)PUBLIC 32)AUTOPBT 33)AUTOPCD |\n");
printf("| |\n");
printf("=======================================\n");
}
void wrt_bufx(int imk,int semid)
/*
imk=0 ... ... write bufx into /nfcnet/temp/sendtele.tmp only;
imk=1 ... ... write bufx into /nfcnet/temp/sendtele.tmp &
/nfcnet/tele/dgyymmdd.tel;
*/
{ int iy,im,id,ih,imm,is;
FILE *fp;
long file_len;
int statusx;
for(;;)
{
fp=fopen("/nfcnet/temp/sendtele.tmp","r");
if(fp!=NULL)
{
fseek(fp,0,SEEK_END);
file_len=ftell(fp);
if(file_len==0){fclose(fp);break;}
fclose(fp);
sleep(5);
printf("%DIALOG-I-Waiting for sending(%ld) !\n",file_len);
continue;
}
else
{break;}
}
statusx=semopena(semid,P_SENDTEL);
if(imk==0)
{
fp=fopen("/nfcnet/temp/sendtele.tmp","w+");
fprintf(fp,"%s",bufx);
fclose(fp);
}
if(imk==1)
{
}
statusx=semclose(semid,P_SENDTEL);
}
void strtoup(char *strp)
{ int s_length,i,ich;
s_length=strlen(strp);
if(s_length != 0)
for(i=0;i<s_length;i++)
{ ich=*(strp+i);
*(strp+i)=toupper(ich);
}
}
void strtolo(char *strp)
{ int s_length,i,ich;
s_length=strlen(strp);
if(s_length != 0)
for(i=0;i<s_length;i++)
{ ich=*(strp+i);
*(strp+i)=tolower(ich);
}
}
int semset(void)
{ int semset_semid;
key_t semset_key= P_SEMSKEY;
int semset_nsems= P_SEMNUMB;
int semset_semflg= IPC_CREAT|P_SEMACCESS;
semset_semid=semget(semset_key,semset_nsems,semset_semflg);
return semset_semid;
}
int semopena(int semset_semid,int semset_semno)
{ extern int errno; int status;
int semset_semflg=P_SEMACCESS;
struct sembuf *semset_sops;
struct sembuf semset_sopsbuf;
size_t semset_nsops=1;
semset_sops=&semset_sopsbuf;
semset_sopsbuf.sem_num=semset_semno;
semset_sopsbuf.sem_op=-1;
semset_sopsbuf.sem_flg=semset_semflg;
status=semop(semset_semid,semset_sops,semset_nsops);
if(status==-1) {return -1;} else {return 0;}
}
int semopenr(int semset_semid,int semset_semno)
{ extern int errno; int status;
int semset_semflg=P_SEMACCESS|IPC_NOWAIT;
struct sembuf *semset_sops;
struct sembuf semset_sopsbuf;
size_t semset_nsops=1;
semset_sops=&semset_sopsbuf;
semset_sopsbuf.sem_num=semset_semno;
semset_sopsbuf.sem_op=-1;
semset_sopsbuf.sem_flg=semset_semflg;
status=semop(semset_semid,semset_sops,semset_nsops);
if(status==-1) {return -1;} else {return 0;}
}
int semclose(int semset_semid, int semset_semno)
{ extern int errno; int status;
int semset_semflg=P_SEMACCESS|IPC_NOWAIT;
struct sembuf *semset_sops;
struct sembuf semset_sopsbuf;
size_t semset_nsops=1;
semset_sops=&semset_sopsbuf;
semset_sopsbuf.sem_num=semset_semno;
semset_sopsbuf.sem_op=1;
semset_sopsbuf.sem_flg=semset_semflg;
status=semop(semset_semid,semset_sops,semset_nsops);
if(status==-1) {return -1;} else {return 0;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -