jpj.h
Code:
/* dynamically copy string or exit if malloc fails */
char *estrdup( const char *str);
/* have to declare this somewhere... */
extern void yyerror( const char *msg);
typedef struct iosig
{
int signal_name;
int signal_sub;
}IoSignal;
typedef struct contsig
{
int diff; /* 1, 2, etc. 0 if no derivative */
int power; /* 2, 3, etc. 1 if no power */
IoSignal iosig;
struct contsig *next;
}ContSig;
typedef struct contterm
{
double coeff;
ContSig *csig, *csig_tail; /* could be NULL if just const coeff */
struct contterm *next;
}ContTerm;
typedef struct Conteqn
{
double coeff;
ContTerm *cterm, *cterm_tail; /* could be NULL if just const coeff */
struct conteqn *next;
}ContEqn;
extern ContEqn *new_conteqn(int i,ContTerm *cterm);
extern ContTerm *new_cterm( ContSig *csig);
extern ContSig * new_csig ( int i,IoSignal iosig,int j);
extern IoSignal iosign( int i,int j);
extern void append_conteqn( ContEqn *conteqn,ContTerm *cterm);
extern void append_cterm( ContEqn *conteqn, int sig ,ContTerm *cterm);
extern void append_csig( ContTerm *cterm,ContSig *csig);
void print_fn();
jpj.c :
Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "jpj.h"
/* dynamically copy string or exit if malloc fails */
char *estrdup( const char *str)
{
char *s = malloc( strlen(str) + 1);
if( s == NULL)
{
yyerror( "estrdup: malloc failed");
exit(1);
}
strcpy( s, str);
return s;
}
ContEqn *new_conteqn(int i,ContTerm *cterm)
{
struct ContEqn *e = malloc( sizeof( struct ContEqn ));
if( e == NULL)
{
yyerror( "new_node: malloc failed");
exit(1);
}
e->coeff = i;
e->cterm = e->cterm_tail = cterm;
e->next = NULL;
return e;
}
void append_conteqn( ContEqn *conteqn,ContTerm *cterm)
{
conteqn->cterm_tail->next =cterm;
conteqn->cterm_tail=cterm;
}
ContTerm *new_cterm( ContSig *csig)
{
struct ContTerm *e = malloc( sizeof( struct ContTerm) );
if( e == NULL)
{
yyerror( "new_node: malloc failed");
exit(1);
}
e->coeff = e->coeff;
e->csig = e->csig_tail = csig;
e->next = NULL;
return e;
}
void append_cterm( ContEqn *conteqn, int sig ,ContTerm *cterm)
{
conteqn->cterm_tail->next =cterm;
conteqn->cterm_tail=cterm;
conteqn->coeff = sig;
conteqn->next = NULL;
}
ContSig * new_csig ( int i, IoSig iosig, int j)
{
struct ContSig *e = malloc( sizeof( struct ContSig));
if( e == NULL)
{
yyerror( "new_node: malloc failed");
exit(1);
}
e->iosig = iosig;
e->diff=i;
e->power =j;
e->next = NULL;
return e;
}
void append_csig(ContTerm *cterm,ContSig *csig)
{
cterm->csig_tail->next = csig;
cterm->csig_tail = csig;
cterm->next = NULL;
cterm->coeff = cterm->coeff;
}
IoSignal iosign( int i,int j)
{
IoSignal x;
x.signal_name = i;
x.signal_sub = j;
return x;
}
void print_fn()
{
printf("dummy");
}
Regards,
cutelucks