home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
rtsi.com
/
2014.01.www.rtsi.com.tar
/
www.rtsi.com
/
OS9
/
OSK
/
EFFO
/
forum7.lzh
/
C
/
VC
/
prog.c
< prev
next >
Wrap
Text File
|
1988-09-06
|
2KB
|
112 lines
/* Mark Weiser, humble programmer. */
/* $Log: prog.c,v $
* Revision 1.1 84/12/10 23:17:20 mark
* Initial revision
*
* Adapted to OS9 by Uwe Simon August 1988
* */
static char rcsid[] = "$Header: /g/mark/vc/prog.c,v 1.1 84/12/10 23:17:20 mark Exp $";
#include <stdio.h>
#include "sc.h"
char pipename[]= "/PIPE/VCXXXXXX";
char s[10240],ts[128];
struct lnode * newlist(e)
struct enode *e;
{
struct lnode *r;
r = (struct lnode *)malloc(sizeof(struct lnode));
r->num = 1;
r->lptr[0] = e;
return r;
}
struct lnode * addlist(l,e)
struct lnode *l;
struct enode *e;
{
if (l->num >= MAXLPTR)
error("Too many arguments");
l->lptr[l->num] = e;
l->num += 1;
return l;
}
double executeprogram(e)
struct enode *e;
{
char *name;
struct lnode *l;
double d,eval();
FILE *stream,*fopen();
struct enode *p;
int i;
name = (char *)(e->e.o.left) ;
l = (struct lnode *)(e->e.o.right) ;
strcpy(s,name);
strcat(s," ");
if (l)
{
for (i=0; i < l->num; i += 1)
{
p = l->lptr[i];
if (p -> op == 's') /* new type string */
strcat(s,p->e.o.left);
else {
sprintf(ts,"%g",eval(p));
strcat(s,ts);
}
strcat(s," ");
}
}
strcat(s, ">-");
mktemp(pipename);
strcat(s, pipename);
system(s);
stream = fopen(pipename,"r");
d = 0.0;
fgets(s,80,stream);
d=atof(s);
while(fgets(s,80,stream)); /* ueberlese den Rest der Daten */
fclose(stream);
return d;
}
saveprogram(v,s,l)
struct ent *v;
char *s;
struct lnode *l;
{
v->expr = new('p', s, l);
v->flags |= (is_changed|is_valid);
changed++;
modflg++;
}
pfree(e)
struct enode *e;
{
struct enode *p;
struct lnode *l;
int i;
free(e->e.o.left);
l = (struct lnode *)(e->e.o.right);
for(i = l->num; i>0 ; i -= 1)
{
p = (struct enode *)l->lptr[i];
if (p->op == 's')
{
free(p->e.o.left);
free(p);
}
else efree(l->lptr[i]);
}
free(e->e.o.right);
free(e);
}