/* Z3func04 - Zcpr3 access functions for C */ #include #include "z3env.h" #ifndef BDSC struct env *envadr; #endif /* Append to end of mcl. Return TRUE if successful, FALSE if buffer didn't have enough room. */ int appcl(cmd) char *cmd; { int i,j; struct mcl *p, *packmcl(); char *s; p = packmcl(); j = strlen(p->first); i = p->bufsiz - j; /* space available */ if(i > strlen(cmd)) { s=p->first+j; *s++ = ';'; strcpy(s, cmd); return(TRUE); } else return(FALSE); } /* Clear multiple command line */ void clrcl() { struct mcl *getcl1(), *p; p = getcl1(); p->first = &(p->cline); p->cline = '\0'; } /* Insert at start of mcl. Return TRUE if successful, FALSE if buffer didn't have enough room. */ int putcl(cmd) char *cmd; { int i,j; struct mcl *p, *packmcl(); char *s; p = packmcl(); s = p->first; i = strlen(s); j = strlen(cmd); if(p->bufsiz - i > j) { movmem(s,s+j+1,i+1); for(;*s++ = *cmd++;--j); *(--s) = ';'; return(TRUE); } else return(FALSE); } /* return pointer to start of mcl */ struct mcl *getcl1() { #ifdef BDSC struct env *zenv(); return(zenv().z3mcl); #else return(envadr->z3mcl); #endif } /* return pointer to next command in mcl */ char *getcl2() { #ifdef BDSC struct env *zenv(); return(zenv().z3mcl->first); #else return(envadr->z3mcl->first); #endif } /* Pack mcl */ struct mcl *packmcl() { struct mcl *getcl1(), *p; int i; p = getcl1(); if(i = p->first - &(p->cline)) { movmem(p->first,&(p->cline),i); p->first = &(p->cline); } return(p); }