#include #include #include #include #define ch2num(ch) (isdigit(ch)?ch-'0':isupper(ch)?ch-'A'+10:ch-'a'+36) static char P[]="ykzsizkakzkolzmeznelzjäzviizkuuzseitzsezmänzkahzdekzsanzy" "hzsänzkymznenztoiszmenztäzsaztaaztuzhatztazmilzjooznaznaazjarzdizdiazbilz" "trilzkvazdrilzkvinztilzsekszsepzokznozvilzdezkilzunzduoztrezkvatzorztenzv" "izginznolzla",L[]="RzYzZzabzcdzedzfdzgdzhizjkzljkzmjkznjkzoOpjkzcjkzAjkzf" "qjkzmjrsdzljrsdzrsd",mp[]="STzSUzVWzVX",T[]="OPzOPQ",K[]="tuz01z21z34z56z" "71z81z9ABzCDEzFDG",Y[]="H4IzHKLzJQ",S[]="MQzMN",spneed=0,*t,*Usage= "sig2b - Copyright (C) 1992,1999 Bisqwit (http://iki.fi/bisqwit/)\n" "Sanoo lukuja suomeksi. Käyttö: sig2b \n"; static char *G(char *s, int num) { if(t=NULL,num>58) { for(;num>59;++s)for(--num;*s&&*s-'z';++s); for(t=s;*s&&*s^'z';s++);*s=0; } else for(s=G(s,num+59);*s;++s)printf(G(P,spneed=59+ch2num((int)*s))); return t; } static int kolmio(char *s, int p1, int p0) { int a=atoi(s), sat=a/100, r=a; return (sat ? p0=(sat!=1&&G(K, sat))&0,G(S, sat!=(p1=1)),a%=100:0), (a==10 ? G(Y,0) : a<20 ? ((!a&&p0)||(a==1&&p1)||(a>1) ? G(K, a%10):0), (a>9?G(Y,2):0):(G(K, a/10),G(Y,1),(a%10?G(K, a%10):0))), r; } static void tavuta(const char *s) { int sis, pituus=strlen(s), tl; if(pituus > 126)printf("Iso luku."); else for(sis=0; pituus>0; s+=tl, pituus-=tl) { char Buf[4]={0,0,0,0}; int yx=pituus-1,n=yx/6-1,jj=(yx/3)&1,lisaa=(n>=0||jj); if(!(tl=pituus%3))tl=3; (yx=kolmio(strncpy(Buf,s,tl), !lisaa, !lisaa&&!sis)) ? spneed?spneed=0,putchar(' '):0,sis=1, n<0?jj?G(T,yx!=1):0:G(mp,jj*2+(G(L,n),yx!=1)), spneed?spneed=0,putchar(' '):0:0; } } #ifndef TOISTOLIMIT /* Not part of BisqBot's sourcecode? */ int main(int argc, const char **argv) { const char *s=NULL; while(--argc) *(s=*++argv)-'-' ? tavuta(s),printf(spneed?".\n":"\b.\n") : printf(Usage); if(!s)printf(Usage); return 0; } #endif