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 |
|
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 |
|
43 | char *parm, *p1, *p2, c1, c2; |
44 |
|
44 | char pbuf[1024]; |
45 |
|
45 | int i,j,k; |
46 |
|
46 | double dt; |
47 | 47 | ||
48 |
|
48 | parm=getenv("wims_exec_parm"); |
49 |
|
49 | if(parm==NULL || *parm==0) errorquit("no_parameter"); |
50 |
|
50 | snprintf(pbuf,sizeof(pbuf),"%s",parm); |
51 |
|
51 | p1=find_word_start(pbuf); p2=find_word_end(p1); |
52 |
|
52 | if(*p2!=0) *p2++=0; |
53 |
|
53 | ch=atoi(p1); p1=find_word_start(p2); |
54 |
|
54 | if(ch!=2 && ch!=3 && ch!=5 && ch!=7) errorquit("bad_characteristics"); |
55 |
|
55 | p2=find_word_end(p1); if(*p2!=0) *p2++=0; |
56 |
|
56 | p2=find_word_start(p2); *find_word_end(p2)=0; |
57 |
|
57 | degree=strlen(p1); |
58 |
|
58 | if(degree!=strlen(p2)) errorquit("unequal_degrees"); |
59 |
|
59 | if(degree>MAX_DEGREE) errorquit("degree_too_high"); |
60 |
|
60 | dt=pow(ch,degree); |
61 |
|
61 | if(dt>=(double) MAX_LENGTH) errorquit("length_overflow"); |
62 |
|
62 | length=dt-1-degree; |
63 |
|
63 | for(i=0;i<degree;i++) { |
64 |
|
64 | c1=*(p1+i); c2=*(p2+i); |
65 |
|
65 | if(!isdigit(c1) || c1>=ch+'0') errorquit("bad_polynomial"); |
66 |
|
66 | if(!isdigit(c2) || c2>=ch+'0') errorquit("bad_chain"); |
67 |
|
67 | poly[i]=ch-(c1-'0'); chain[i]=c2-'0'; |
68 |
|
68 | } |
69 |
|
69 | for(i=0;i<length;i++) { |
70 |
|
70 | for(j=k=0;j<degree;k+=poly[j]*chain[j],j++); |
71 |
|
71 | k%=ch; printf("%d",k); |
72 |
|
72 | memmove(chain,chain+1,degree-1); chain[degree-1]=k; |
73 |
|
73 | } |
74 |
|
74 | return 0; |
75 | } |
75 | } |