⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dialog.c

📁 unix下进行电报传输的源码。采用信号灯技术避免文件冲突等等
💻 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 + -