9 append(char *p, char *s)
17 matchlen(char *a, char *b)
21 for(n=0; *a==*b; a++, b++, n++)
30 prose(char *s, char *desc[][2], short index[])
38 if(p >= buf+sizeof buf)
41 if(p>buf && p[-1]!=' ')
50 if(s[0]=='M' && '0'<=s[1] && s[1]<='9'){ /* Messier tag */
52 continue; /* below will copy the number */
54 if((i=index[*s]) == -1){
58 while(*s && *s!=',' && *s!=' ')
62 case '0': case '1': case '2': case '3': case '4':
63 case '5': case '6': case '7': case '8': case '9':
64 while('0'<=*s && *s<='9')
66 if(*s=='\'' || *s=='s')
72 case '&': case '-': case '+':
77 if('0'<=s[1] && s[1]<='9'){
81 while('0'<=*s && *s<='9')
88 if(s[0]==',' && s[1]==' ' && '0'<=s[2] && s[2]<='9'){
95 if(s[1]=='.' && s[2]=='.'){
104 p = append(p, "m star");
112 p = append(p, "triple star ");
115 p = append(p, "double star ");
120 p = append(p, "star ");
126 for(max=-1; desc[i][0] && desc[i][0][0]==*s; i++){
127 k = matchlen(desc[i][0], s);
134 for(k=0; desc[j][1][k]; k++)
148 prdesc(char *s, char *desc[][2], short index[])
154 for(c=1, j=0; c<128; c++)
155 if(desc[j][0]==0 || desc[j][0][0]>c)
157 else if(desc[j][0][0] == c){
159 while(desc[j][0] && desc[j][0][0] == c)
162 fprint(2, "scat: internal error: too many prose entries\n");
167 Bprint(&bout, "\t%s [%s]\n", prose(s, desc, index), s);