#include <stdlib.h>
#include <stdio.h>
double atof();
FILE *fpcli;
#define MAX_LEN_SBOX 25
main()
{
char bob[256];
double t=12.3456;
fpcli=stdin;
/* pcli=fopen("junk.cmd","r"); */
while(1){
fgets(bob,255,fpcli);
if(strncmp(bob,"fq",2)==0){
if(cli_yesno("Are you sure"))
break;
}
}
set_up_eq_range();
new_float("Total",&t);
printf("Total=%g\n",t);
}
cli_yesno(char *query)
{
char ans[25];
printf("%s (y/n)?",query);
fgets(ans,20,fpcli);
if(ans[0]=='y'||ans[0]=='Y')
return 1;
return 0;
}
render_string_box(n,row,col,title,names,values,maxchar)
int n,row,col,maxchar;
char **names,values[][MAX_LEN_SBOX],*title;
{
int i,k=0,id,dif;
int j,ll;
char item[256];
char dum[256];
char sname[50];
printf("%s\n\n",title);
for(i=0;i<row;i++){
for(j=0;j<col;j++){
if(names[k][0]=='*')
sprintf(sname,"*%s",names[k]+2);
else
sprintf(sname,"%s",names[k]);
sprintf(item,"%d: %s=%s",k,sname,values[k]);
ll=MAX_LEN_SBOX-strlen(item);
sprintf(dum," ");
if(ll>2){
for(id=0;id<=ll;id++)
dum[id]=' ';
dum[id]=0;
}
if(j<(col-1))
printf("%s%s",item,dum);
else
printf("%s",item);
k++;
if(k>=n)break;
}
printf("\n\n");
}
}
do_string_box(n,row,col,title,names,values,maxchar)
int n,row,col,maxchar;
char **names,values[][MAX_LEN_SBOX],*title;
{
char bob[256];
char sname[45];
char newval[128];
int i,k,ilist;
render_string_box(n,row,col,title,names,values,maxchar);
while(1){
printf("(#:value), (r)eview (c)ancel,(d)one? ");
fgets(bob,255,fpcli);
k=strlen(bob);
if(bob[k-1]=='\n')bob[k-1]=' ';
switch(bob[0]){
case 'r':
render_string_box(n,row,col,title,names,values,maxchar);
break;
case 'c':
return(-1);
break;
case 'd':
return(1);
break;
default:
get_newval_entry(bob,&i,newval);
if(i<n){
if(newval[0]=='*'){
if(names[i][0]=='*'){
ilist=atoi(names[i]+1);
list_possibility(ilist);
break;
}
else
break;
}
strcpy(values[i],newval);
if(names[i][0]=='*')
sprintf(sname,"%s",names[i]+2);
else
sprintf(sname,"%s",names[i]);
printf("set %d:%s=%s\n",i,sname,values[i]);
}
break;
}
}
}
list_possibility(int il)
{
printf("Choice %d \n",il);
}
get_newval_entry(char *s,int *i,char *v)
{
int n=strlen(s);
int j=0,k=0,flag=0;
char c,e[10];
while(1){
c=s[j];
if(c==':'){
e[k]=0;
k=0;
flag=1;
*i=atoi(e);
j++;
continue;
}
if(flag==1)
v[k]=c;
else
e[k]=c;
j++;
k++;
if(j>=n){
v[k]=0;
break;
}
}
}
set_up_eq_range()
{
static char *n[]={"*2Range over","Steps","Start","End",
"Shoot (Y/N)",
"Stability col","Movie (Y/N)"};
char values[7][MAX_LEN_SBOX];
int status,i;
sprintf(values[0],"%s","alpha");
sprintf(values[1],"%d",20);
sprintf(values[2],"%g",0.0);
sprintf(values[3],"%g",1.7);
sprintf(values[4],"%s","N");
sprintf(values[5],"%d",-1);
sprintf(values[6],"%s","N");
status=do_string_box(7,4,2,"Range Equilibria",n,values,45);
}
new_string(name,value)
char *name;
char *value;
{
char bob[256];
int n;
printf("%s <%s>:",name,value);
fgets(bob,255,fpcli);
n=strlen(bob);
if(bob[n-1]=='\n')
bob[n-1]=' ';
if(n==1)
return 0;
strcpy(value,bob);
return 1;
}
new_float(name,value)
char *name;
double *value;
{ int done;
int flag;
double newz;
char tvalue[200];
sprintf(tvalue,"%.16g",*value);
done=new_string(name,tvalue);
if(done==0||strlen(tvalue)==0)return -1;
if(tvalue[0]=='%')
{
flag=do_calc(&tvalue[1],&newz);
if(flag!=-1)*value=newz;
return(0);
}
*value=atof(tvalue);
return(0);
}
do_calc(s,v)
char *s;
double *v;
{
return(1);
}
new_int(name,value)
char *name;
int *value;
{
char svalue[200];
sprintf(svalue,"%d",*value);
if(new_string(name,svalue)==0||strlen(svalue)==0)return(-1);
*value=atoi(svalue);
return(0);
}
syntax highlighted by Code2HTML, v. 0.9.1