Subversion Repositories wimsdev

Rev

Rev 8185 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 8185 Rev 12248
Line 33... Line 33...
33
int ch,degree,length;
33
int ch,degree,length;
34
char poly[MAX_DEGREE], chain[MAX_DEGREE];
34
char poly[MAX_DEGREE], chain[MAX_DEGREE];
35
 
35
 
36
void errorquit(char *msg)
36
void errorquit(char *msg)
37
{
37
{
38
    fprintf(stderr,"%s\n",msg); exit(1);
38
  fprintf(stderr,"%s\n",msg); exit(1);
39
}
39
}
40
 
40
 
41
int main(int argc, char *argv[])
41
int main(int argc, char *argv[])
42
{
42
{
43
    char *parm, *p1, *p2, c1, c2;
43
  char *parm, *p1, *p2, c1, c2;
44
    char pbuf[1024];
44
  char pbuf[1024];
45
    int i,j,k;
45
  int i,j,k;
46
    double dt;
46
  double dt;
47
 
47
 
48
    parm=getenv("wims_exec_parm");
48
  parm=getenv("wims_exec_parm");
49
    if(parm==NULL || *parm==0) errorquit("no_parameter");
49
  if(parm==NULL || *parm==0) errorquit("no_parameter");
50
    snprintf(pbuf,sizeof(pbuf),"%s",parm);
50
  snprintf(pbuf,sizeof(pbuf),"%s",parm);
51
    p1=find_word_start(pbuf); p2=find_word_end(p1);
51
  p1=find_word_start(pbuf); p2=find_word_end(p1);
52
    if(*p2!=0) *p2++=0;
52
  if(*p2!=0) *p2++=0;
53
    ch=atoi(p1); p1=find_word_start(p2);
53
  ch=atoi(p1); p1=find_word_start(p2);
54
    if(ch!=2 && ch!=3 && ch!=5 && ch!=7) errorquit("bad_characteristics");
54
  if(ch!=2 && ch!=3 && ch!=5 && ch!=7) errorquit("bad_characteristics");
55
    p2=find_word_end(p1); if(*p2!=0) *p2++=0;
55
  p2=find_word_end(p1); if(*p2!=0) *p2++=0;
56
    p2=find_word_start(p2); *find_word_end(p2)=0;
56
  p2=find_word_start(p2); *find_word_end(p2)=0;
57
    degree=strlen(p1);
57
  degree=strlen(p1);
58
    if(degree!=strlen(p2)) errorquit("unequal_degrees");
58
  if(degree!=strlen(p2)) errorquit("unequal_degrees");
59
    if(degree>MAX_DEGREE) errorquit("degree_too_high");
59
  if(degree>MAX_DEGREE) errorquit("degree_too_high");
60
    dt=pow(ch,degree);
60
  dt=pow(ch,degree);
61
    if(dt>=(double) MAX_LENGTH) errorquit("length_overflow");
61
  if(dt>=(double) MAX_LENGTH) errorquit("length_overflow");
62
    length=dt-1-degree;
62
  length=dt-1-degree;
63
    for(i=0;i<degree;i++) {
63
  for(i=0;i<degree;i++) {
64
      c1=*(p1+i); c2=*(p2+i);
64
    c1=*(p1+i); c2=*(p2+i);
65
      if(!isdigit(c1) || c1>=ch+'0') errorquit("bad_polynomial");
65
    if(!isdigit(c1) || c1>=ch+'0') errorquit("bad_polynomial");
66
      if(!isdigit(c2) || c2>=ch+'0') errorquit("bad_chain");
66
    if(!isdigit(c2) || c2>=ch+'0') errorquit("bad_chain");
67
      poly[i]=ch-(c1-'0'); chain[i]=c2-'0';
67
    poly[i]=ch-(c1-'0'); chain[i]=c2-'0';
68
    }
68
  }
69
    for(i=0;i<length;i++) {
69
  for(i=0;i<length;i++) {
70
      for(j=k=0;j<degree;k+=poly[j]*chain[j],j++);
70
    for(j=k=0;j<degree;k+=poly[j]*chain[j],j++);
71
      k%=ch; printf("%d",k);
71
    k%=ch; printf("%d",k);
72
      memmove(chain,chain+1,degree-1); chain[degree-1]=k;
72
    memmove(chain,chain+1,degree-1); chain[degree-1]=k;
73
    }
73
  }
74
    return 0;
74
  return 0;
75
}
75
}