/* Copyright (C) 1998-2003 XIAO, Gang of Universite de Nice - Sophia Antipolis
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* Interface Plouffe's Inverter to wims */
/*************** Customization: change values hereafter ****************/
/* limit of parameter string */
#define parmlim 131072
/* Address of Plouffe's Inverter */
#define WebPlouffe "<a target=wims_external href=\"http://oldweb.cecm.sfu.ca/cgi-bin/isc/lookup?lookup_type=simple&number=%s\">"
/* minimal and maximal lengths of a number to interface */
#define Plouffe_min 6
#define Plouffe_max 22
char *langs[]={"en","fr","cn"};
#define lang_no (sizeof(langs)/sizeof(langs[0]))
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Winvalid-source-encoding"
char *post_msg[lang_no]={
" <small>(click on a value to check its meaning in another window)</small> ",
" <small>(cliquez sur une valeur pour voir sa signification dans une autre fenêtre)</small> ",
" <small>(ÔÚÊý×ÖÉϵ¥»÷¿É¹©ÄãÔÚÁíÒ»ÊÓ´°ÄÚ²éÔÄÆäÒâÒå)</small> "
};
#pragma GCC diagnostic pop
/***************** Nothing should need change hereafter *****************/
#include "../includes.h"
char *parm;
int getlang(void)
{
char *p;
int i;
p
=getenv("w_module_language");
if(p
==NULL
|| *p
==0) p
=getenv("w_lang");
if(p==NULL || *p==0) return 0; /* English is default */
for(i
=0;i
<lang_no
&& strcmp(p
,langs
[i
])!=0;i
++);
if(i<lang_no) return i; else return 0;
}
int main(int argc,char *argv[])
{
char *p,*pp,*p2,*p3,*ps,*last;
char buf[parmlim];
int i,got;
parm
=getenv("wims_exec_parm");
/* nothing to do if no parameter */
if(parm==NULL || *parm==0) return 0;
i
=strlen(parm
); if(i
<0 || i
>parmlim
) {
fprintf(stderr
,"Plouffe: parameter too long. \n"); exit(1);
}
got=0;
for(p=last=parm;*p!=0;p++) {
if(*p=='<') {
for(;*p!=0 && *p!='>'; p++);
if(*p==0) p--;
continue;
}
for(i
=0,pp
=p
;isdigit(*pp
) || *pp
=='.';pp
++) if(*pp
=='.') i
++;
if(i>1) { /* several decimal points. */
p=pp-1;continue;
}
for(p2=pp-1;p2>=p && (*p2=='.' || *p2=='0');p2--);
p2++;
for(i=0,p3=p;p3<p2 && *p3!='.';p3++);
for(i=0,ps=p;ps<p2 && (*ps=='0' || *ps=='.'); ps++);
if(p3>=p2 || p2<ps+Plouffe_min) {
p=pp-1;continue;
}
memmove(buf
,last
,p
-last
);buf
[p
-last
]=0;
i=p2-p;if(i>Plouffe_max) i=Plouffe_max;
got=1;p=pp-1;
continue;
}
if(*last
!=0) printf("%s",last
);
if(got
) printf("%s",post_msg
[getlang
()]);
return 0;
}