📄 srt_tele.c
字号:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
# include <string.h>
#include "nfcnet.h"
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);
void get_map(void);
void sort_tel(FILE *fp, FILE *fpt);
void out_tele(int i);
void mod_last(int i);
void get_pfnew(int i);
void get_stt(void);
int ana_obj(int i, int j);
int ana_stt(void);
int fline(FILE *fp);
char tele[3072]={0},pfnew[8]={0},stt[6]={0};
int pfnewno;
char *p0,*p1,*p2,*p3;
char *tzm[22]={"(R)", "01110","02220","03330",
"04440","11111","12221","13331",
"14441","15551","16661","17771",
"21112","22222","23332","24442",
"25552","26662","31113","32223",
"87778","88888"};
char map[P_STTNUMB][P_STTOBJM]={0};
char allmap[P_SENDOBJ+2]={0};
int statusx,semid;
void main()
{ char fni[50];
FILE *fp,*fpt;
int in,i,j,ijk;
semid=semset();
printf("Semid is %d\n",semid);
for(i=0;i<3072;i++)tele[i]=0;
p0=&tele[0];
/* To get station object bits map .*/
get_map();
ijk=0;
for(;;)
{
statusx=semopenr(semid,P_PR_SORT);
if(statusx==0)
{ if((fp=fopen("/nfcnet/temp/pr_sort0.tmp","rb+"))==NULL)
{ fp=fopen("/nfcnet/temp/pr_sort0.tmp","a+");
fclose(fp);
fp=fopen("/nfcnet/temp/pr_sort0.tmp","rb+");}
fpt=fopen("/nfcnet/temp/pr_sort1.tmp","ab+");
for(;;){in=fgetc(fp); if(in==EOF)break; fputc(in,fpt);}
fp=freopen("/nfcnet/temp/pr_sort0.tmp","w+",fp);
fclose(fp);
fclose(fpt);
/* sleep(1); */ /* for testing */
statusx=semclose(semid,P_PR_SORT);
}
if(statusx==-1) printf("SRT_TELE(P_PR) semopenr is error !\n");
statusx=semopenr(semid,P_NP_SORT);
if(statusx==0)
{ if((fp=fopen("/nfcnet/temp/np_sort0.tmp","rb+"))==NULL)
{ fp=fopen("/nfcnet/temp/np_sort0.tmp","a+");
fclose(fp);
fp=fopen("/nfcnet/temp/np_sort0.tmp","rb+");}
fpt=fopen("/nfcnet/temp/np_sort1.tmp","ab+");
for(;;){in=fgetc(fp); if(in==EOF)break; fputc(in,fpt);}
fp=freopen("/nfcnet/temp/np_sort0.tmp","w+",fp);
fclose(fp);
fclose(fpt);
/* sleep(1); */ /* for testing */
statusx=semclose(semid,P_NP_SORT);
}
if(statusx==-1) printf("SRT_TELE(P_NP) semopenr is error !\n");
statusx=semopena(semid,P_S0);
statusx=semopena(semid,P_SR_TRAN);
fpt=fopen("/nfcnet/temp/sr_tran0.tmp","a+");
fp=fopen("/nfcnet/temp/pr_sort1.tmp","r+");
sort_tel(fp,fpt);
fp=freopen("/nfcnet/temp/pr_sort1.tmp","w+",fp);
fclose(fp);
fp=fopen("/nfcnet/temp/np_sort1.tmp","r+");
sort_tel(fp,fpt);
fp=freopen("/nfcnet/temp/np_sort1.tmp","w+",fp);
fclose(fp);
statusx=semopenr(semid,P_MA_SORT);
if(statusx==0)
{ if((fp=fopen("/nfcnet/temp/ma_sort1.tmp","r+"))==NULL)
fp=fopen("/nfcnet/temp/ma_sort1.tmp","a+");
sort_tel(fp,fpt);
fp=freopen("/nfcnet/temp/ma_sort1.tmp","w+",fp);
fclose(fp);
statusx=semclose(semid,P_MA_SORT);}
if(statusx==-1) printf("SRT_TELE(P_MA) semopenr is error !\n");
fclose(fpt);
/* sleep(1); */ /* for testing */
statusx=semclose(semid,P_SR_TRAN);
statusx=semclose(semid,P_S0);
printf("SRT_TELE Waiting for (%d) mins(%d) .\n",P_SLEEPTIME,ijk);
ijk++;
if(ijk==1000)ijk=0;
sleep(P_SLEEPTIME*60);
}
}
/*
To get object map from file OBJECT.MAP .
*/
void get_map(void)
{ FILE *fp; int in; int i,j;
if((fp=fopen("/nfcnet/sysd/stat_obj.map","rb"))!=NULL)
{ for(i=0; i<P_STTNUMB; i++)
for(j=0; j<P_STTOBJM;j++)
{ if((in=fgetc(fp))!=EOF) map[i][j]=(char)in;
else { printf("SRT_TELE file, stat_obj.map, is error !\n"); exit(1);}
}
}
else { printf("SRT_TELE file, stat_obj.map, is not found !\n"); exit(1); }
if((fp=fopen("/nfcnet/sysd/sendall.map","rb"))!=NULL)
{ for(i=1; i<=P_SENDOBJ; i++)
{ if((in=fgetc(fp))!=EOF)
{ allmap[i]=(char)in;
if(in != 'Y' && in != 'N')
{ printf("SRT_TELE file, sendall.map, is error !\n"); exit(1); }
}
else
{ printf("SRT_TELE file, sendall.map, is error !\n"); exit(1);}
}
}
else
{ printf("SRT_TELE file, sendall.map, is not found !\n"); exit(1); }
}
/*
To sort the telegram onto sending file .
*/
void sort_tel(FILE *fp, FILE *fpt)
{ int i,j,k,imk;
/*To get a telegram from fni .*/
for (;;)
{ imk=fline(fp);
if(imk==EOF)break;
fprintf(fpt,"%s\n",p0);
/* for stat_obj.map */
get_stt();
j=ana_stt();
if(j!=-1)
{ for(i=1;i<=P_SENDOBJ;i++)
{ k=ana_obj(i,j); /* k=1/yes k=0/no */
if(k==1)
{ get_pfnew(i);
out_tele(i);
mod_last(i);
}
}
}
/* for sendall.map */
for(i=1;i<=P_SENDOBJ;i++)
{ if(allmap[i]=='Y')
{ get_pfnew(i);
out_tele(i);
mod_last(i);
}
}
}
}
int fline(FILE *fp)
{ int ch, i;
i=0;
for(;;)
{ if((ch=fgetc(fp))==EOF){return EOF;}
if(ch>=' '){tele[i]=(char)ch;i++;}
if(ch=='\n'){tele[i]=0; return i;}
}
}
void get_stt(void)
{ int i;
p1=strstr(p0," ");p1++;
p2=strstr(p1," ");p2++;
for(i=0;i<22;i++){p3=strstr(p1,tzm[i]);if(p1==p3){p1=p2;break;}}
p2=strstr(p1," ");
if((p2-p1)!=5){for(i=0;i<6;i++)stt[i]=0;}
else { for(i=0;i<6;i++)stt[i]=*(p1+i);}
}
int ana_stt(void)
{ int i,j,k;
k=-1;
for(i=0;i<P_STTNUMB;i++)
{ for(j=0;j<5;j++){if(stt[j]!=map[i][j])k=-2;}
if(k==-1)k=i; if(k==-2)k=-1;
if(k!=-1){break;}
}
return k;
}
int ana_obj(int i, int j)
{ int i1,i2,k,k1,k2;
i1=i/8; i2=i%8;
if(i2==0){i1=i1-1;i2=8;}
k2=1; for(k1=1;k1<=i2;k1++)k2=k2*2; k2=k2/2;
k1=map[j][i1+5];
k=k1&k2; if(k!=0)k=1;
return k;
}
void get_pfnew(int i)
{ char fnord[50];
int ilst;
FILE *fp1;
sprintf(fnord,"/nfcnet/sysd/last%03d.dat",i);
if((fp1=fopen(fnord,"r"))!=NULL)
{ fscanf(fp1,"%d",&ilst); fclose(fp1);}
else { ilst=0;}
ilst++; if(ilst==10000)ilst=1;
sprintf(pfnew,"%s%04d %c",P_NEWFIX1,ilst,0);
pfnewno=ilst;
}
void out_tele(int i)
{ char fnsnd[50];
FILE *fp1;
sprintf(fnsnd,"/nfcnet/nets/s%03d0.dat",i);
for(;;){ if((fp1=fopen(fnsnd,"a+"))!=NULL)break;}
fprintf(fp1,"%s%s\n",pfnew,p0);
fclose(fp1);
}
void mod_last(int i)
{ char fnlst[50],fnord[50];
FILE *fp1;
sprintf(fnord,"/nfcnet/sysd/last%03d.dat",i);
sprintf(fnlst,"/nfcnet/nets/s%03dlast.dat",i);
for(;;){if((fp1=fopen(fnlst,"w+"))!=NULL)break;}
fprintf(fp1,"%s",pfnew);
fclose(fp1);
for(;;){if((fp1=fopen(fnord,"w+"))!=NULL)break;}
fprintf(fp1,"%d",pfnewno);
fclose(fp1);
}
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 + -