ecu - SCO XENIX V/{2,3}86 Extended CU part 20/47
Warren Tucker
wht at tridom.uucp
Tue Oct 10 09:35:33 AEST 1989
---- Cut Here and unpack ----
#!/bin/sh
# this is part 20 of a multipart archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file regexp.c continued
#
CurArch=20
if test ! -r s2_seq_.tmp
then echo "Please unpack part 1 first!"
exit 1; fi
( read Scheck
if test "$Scheck" != $CurArch
then echo "Please unpack part $Scheck next!"
exit 1;
else exit 0; fi
) < s2_seq_.tmp || exit 1
echo "x - Continuing file regexp.c"
sed 's/^X//' << 'SHAR_EOF' >> regexp.c
X return(advance(p1,p2));
X }
X /* fast check for first character */
X if(*p2==CCHR)
X {
X c = p2[1];
X do
X {
X if(*p1 != c)
X continue;
X if(advance(p1,p2))
X {
X match_start = p1;
X return(1);
X }
X } while(*p1++);
X return(0);
X }
X /* regular algorithm */
X do
X {
X if(advance(p1,p2))
X {
X match_start = p1;
X return(1);
X }
X } while(*p1++);
X return(0);
X}
X
Xadvance(lp,ep)
Xregister char *lp,*ep;
X{
X register char *curlp;
X char c;
X char *bbeg;
X int ct;
X
X while(1)
X switch(*ep++)
X {
X
X case CCHR:
X if(*ep++ == *lp++)
X continue;
X return(0);
X
X case CDOT:
X if(*lp++)
X continue;
X return(0);
X
X case CDOL:
X if(*lp==0)
X continue;
X return(0);
X
X case CCEOF:
X match_end = lp;
X return(1);
X
X case CCL:
X c = *lp++ & 0177;
X if(ISTHERE(c))
X {
X ep += 16;
X continue;
X }
X return(0);
X case CBRA:
X braslist[*ep++] = lp;
X continue;
X
X case CKET:
X braelist[*ep++] = lp;
X continue;
X
X case CCHR|RNGE:
X c = *ep++;
X getrnge(ep);
X while(low--)
X if(*lp++ != c)
X return(0);
X curlp = lp;
X while(size--)
X if(*lp++ != c)
X break;
X if(size < 0)
X lp++;
X ep += 2;
X goto star;
X
X case CDOT|RNGE:
X getrnge(ep);
X while(low--)
X if(*lp++ == '\0')
X return(0);
X curlp = lp;
X while(size--)
X if(*lp++ == '\0')
X break;
X if(size < 0)
X lp++;
X ep += 2;
X goto star;
X
X case CCL|RNGE:
X getrnge(ep + 16);
X while(low--)
X {
X c = *lp++ & 0177;
X if(!ISTHERE(c))
X return(0);
X }
X curlp = lp;
X while(size--)
X {
X c = *lp++ & 0177;
X if(!ISTHERE(c))
X break;
X }
X if(size < 0)
X lp++;
X ep += 18; /* 16 + 2 */
X goto star;
X
X case CBACK:
X bbeg = braslist[*ep];
X ct = braelist[*ep++] - bbeg;
X
X if(ecmp(bbeg,lp,ct))
X {
X lp += ct;
X continue;
X }
X return(0);
X
X case CBACK|STAR:
X bbeg = braslist[*ep];
X ct = braelist[*ep++] - bbeg;
X curlp = lp;
X while(ecmp(bbeg,lp,ct))
X lp += ct;
X
X while(lp >= curlp)
X {
X if(advance(lp,ep)) return(1);
X lp -= ct;
X }
X return(0);
X
X
X case CDOT|STAR:
X curlp = lp;
X while(*lp++);
X goto star;
X
X case CCHR|STAR:
X curlp = lp;
X while(*lp++ == *ep);
X ep++;
X goto star;
X
X case CCL|STAR:
X curlp = lp;
X do
X {
X c = *lp++ & 0177;
X } while(ISTHERE(c));
X ep += 16;
X goto star;
X
Xstar:
X do
X {
X if(--lp == locs)
X break;
X if(advance(lp,ep))
X return(1);
X } while(lp > curlp);
X return(0);
X
X }
X}
X
Xgetrnge(regexp)
Xregister char *regexp;
X{
X low = *regexp++ & 0377;
X size = ((*regexp & 0377) == 255) ? 20000 : (*regexp & 0377) - low;
X}
X
Xecmp(a,b,count)
Xregister char *a,*b;
Xregister count;
X{
X while(count--)
X if(*a++ != *b++)
X return(0);
X return(1);
X}
X
X/*+-------------------------------------------------------------------------
X itmp = regexp_compile(regexp,cmpbuf,cmpbuf_size,emsg)
X
Xreturns 0 if no compile error,
Xelse error occurred (*emsg points to error message text)
X--------------------------------------------------------------------------*/
Xint
Xregexp_compile(regexp,cmpbuf,cmpbuf_size,emsg)
Xchar *regexp;
Xchar *cmpbuf;
Xint cmpbuf_size;
Xchar **emsg;
X{
X register int itmp;
X static char errm[40];
X
X if(itmp = setjmp(compile_error_jmpbuf))
X {
X switch(itmp)
X {
X case 11:
X *emsg = "Range endpoint too large";
X break;
X case 16:
X *emsg = "Bad number";
X break;
X case 25:
X *emsg = "\"\\digit\" out of range";
X break;
X case 36:
X *emsg = "Illegal or missing delimiter";
X break;
X case 41:
X *emsg = "No previous regular expression";
X break;
X case 42:
X *emsg = "More \\)'s than \\('s in regular expression";
X break;
X case 43:
X *emsg = "More \\('s than \\)'s in regular expression";
X break;
X case 44:
X *emsg = "More than 2 numbers in \\{ \\}";
X break;
X case 45:
X *emsg = "} expected after \\";
X break;
X case 46:
X *emsg = "First number exceeds second in \\{ \\}";
X break;
X case 49:
X *emsg = "[] imbalance";
X break;
X case 50:
X *emsg = "Regular expression too complex";
X break;
X default:
X sprintf(errm,"Unknown regexp compile error %d",itmp);
X *emsg = errm;
X break;
X }
X return(itmp);
X }
X
X compile(regexp,cmpbuf,cmpbuf + cmpbuf_size,0);
X return(0);
X} /* end of regexp_compile */
X
X/*+-------------------------------------------------------------------------
X regexp_scan(cmpbuf,str_to_search,&match,&matchlen)
Xreturn 1 if string match found, else 0
Xif string matches, match receives pointer to first byte, matchlen = length
Xof matching string
X--------------------------------------------------------------------------*/
Xregexp_scan(cmpbuf,str_to_search,match,matchlen)
Xchar *cmpbuf;
Xchar *str_to_search;
Xchar **match;
Xint *matchlen;
X{
X register int itmp = step(str_to_search,cmpbuf);
X if(itmp)
X {
X *match = match_start;
X *matchlen = (int)(match_end - match_start);
X }
X return(itmp);
X} /* end of regexp_scan */
X
X#define CMPBUF_SIZE 256
Xchar cmpbuf[CMPBUF_SIZE];
X
X/*+-------------------------------------------------------------------------
X regexp_operation(match_str,regexp_str,rtn_value)
X--------------------------------------------------------------------------*/
Xint
Xregexp_operation(match_str,regexp_str,rtn_value)
Xchar *match_str;
Xchar *regexp_str;
Xlong *rtn_value;
X{
Xchar *emsg;
Xchar *match;
Xint matchlen;
X
X if(regexp_compile(regexp_str,cmpbuf,sizeof(cmpbuf),&emsg))
X {
X pprintf("compile 1 error: %s\n",emsg);
X return(eFATAL_ALREADY);
X }
X
X if(regexp_scan(cmpbuf,match_str,&match,&matchlen))
X {
X *rtn_value = (long)(match - match_str);
X iv[0] = (long)matchlen;
X if(proc_level && proctrace)
X pprintf("%match set $i00 = %ld\n",iv[0]);
X }
X else
X *rtn_value = -1;
X
X return(0);
X} /* end of regexp_operation */
X
X/* vi: set tabstop=4 shiftwidth=4: */
X/* end of regexp.c */
SHAR_EOF
echo "File regexp.c is complete"
chmod 0644 regexp.c || echo "restore of regexp.c fails"
echo "x - extracting smap.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > smap.c &&
X/* CHK=0x3FFC */
X/*
X * @(#)smap.c 1.2 30/08/88 16:28:19 agc
X *
X * Copyright 1988, Joypace Ltd., UK. This product is "careware".
X * If you find it useful, I suggest that you send what you think
X * it is worth to the charity of your choice.
X *
X * Alistair G. Crooks, +44 5805 3114
X * Joypace Ltd.,
X * 2 Vale Road,
X * Hawkhurst,
X * Kent TN18 4BU,
X * UK.
X *
X * UUCP Europe ...!mcvax!unido!nixpbe!nixbln!agc
X * UUCP everywhere else ...!uunet!linus!nixbur!nixpbe!nixbln!agc
X *
X * smap.c - source file for debugging aids.
X */
X/*+:EDITS:*/
X/*:07-03-1989-22:57-wht------------- ecu 2.00 ---------------- */
X/*:06-24-1989-16:52-wht-flush edits --- ecu 1.95 */
X
X#include <stdio.h>
X#include <signal.h>
X#include "stdio_lint.h"
X#include "lint_args.h"
X
Xtypedef struct _slotstr
X{
X char *s_ptr; /* the allocated area */
X unsigned int s_size; /* its size */
X char s_freed; /* whether it's been freed yet */
X char s_blkno; /* program block reference number */
X} SLOT;
X
X#ifndef MAXSLOTS
X#define MAXSLOTS 4096
X#endif /* MAXSLOTS */
X
Xstatic SLOT slots[MAXSLOTS];
Xstatic int slotc;
Xstatic int blkno;
X
X#define WARNING(s1, s2) (void) fprintf(stderr, s1, s2)
X
Xchar *malloc();
Xchar *calloc();
Xchar *realloc();
Xvoid _abort();
X
X/*+-------------------------------------------------------------------------
X _dump_malloc()
X--------------------------------------------------------------------------*/
Xvoid
X_dump_malloc()
X{
Xregister islot;
Xregister slot_count = 0;
Xchar dfile[32];
Xchar title[64];
XFILE *fp;
XSLOT *slot;
X
X sprintf(dfile,"/tmp/m%05d.dmp",getpid());
X fp = fopen(dfile,"w");
X fprintf(stderr,"\r\n\n\ndumping to %s\r\n",dfile);
X for(islot = 0; islot < slotc; islot++)
X {
X slot = &slots[islot];
X if(slot->s_freed)
X continue;
X sprintf(title,"%d (%d) %08x size %u",
X slot_count,islot,slot->s_ptr,slot->s_size);
X hex_dump_fp(fp,slot->s_ptr,slot->s_size,title,0);
X slot_count++;
X }
X fclose(fp);
X fprintf(stderr,"done\r\n");
X
X} /* end of _dump_malloc */
X
X
X/*
X * _malloc - wrapper around malloc. Warns if unusual size given, or the
X * real malloc returns a NULL pointer. Returns a pointer to the
X * malloc'd area
X */
Xchar *
X_malloc(size)
Xunsigned int size;
X{
X SLOT *sp;
X char *ptr;
X int i;
X
X if(size == 0)
X WARNING("_malloc: unusual size %d bytes\r\n",size);
X if((ptr = (char *) malloc(size)) == (char *) NULL)
X _abort("_malloc: unable to malloc %u bytes\r\n",size);
X for(i = 0,sp = slots ; i < slotc ; i++,sp++)
X if(sp->s_ptr == ptr)
X break;
X if(i == slotc)
X {
X if(slotc == MAXSLOTS - 1)
X {
X _dump_malloc();
X _abort("_malloc: run out of slots\r\n",(char *) NULL);
X }
X sp = &slots[slotc++];
X }
X else if(!sp->s_freed)
X WARNING("_malloc: malloc returned a non-freed pointer\r\n",NULL);
X sp->s_size = size;
X sp->s_freed = 0;
X sp->s_ptr = ptr;
X sp->s_blkno = blkno;
X#ifndef NO_EXTRA_HELP
X memset(sp->s_ptr,0x12,sp->s_size);
X#endif
X return(sp->s_ptr);
X}
X
X
X/*
X * _calloc - wrapper for calloc. Calls _malloc to allocate the area, and
X * then sets the contents of the area to NUL bytes. Returns its address.
X */
Xchar *
X_calloc(nel,size)
Xint nel;
Xunsigned int size;
X{
X unsigned int tot;
X char *ptr;
X char *cp;
X
X tot = nel * size;
X ptr = _malloc(tot);
X if((cp = ptr) == (char *) NULL)
X return((char *) NULL);
X while(tot--)
X *cp++ = 0;
X return(ptr);
X}
X
X
X/*
X * _realloc - wrapper for realloc. Checks area already alloc'd and
X * not freed. Returns its address
X */
Xchar *
X_realloc(ptr,size)
Xchar *ptr;
Xunsigned int size;
X{
X SLOT *sp;
X int i;
X
X for(i = 0,sp = slots ; i < slotc ; i++,sp++)
X if(sp->s_ptr == ptr)
X break;
X if(i == slotc)
X _abort("_realloc: realloc on unallocated area\r\n",(char *) NULL);
X if(sp->s_freed)
X WARNING("_realloc: realloc on freed area\r\n",(char *) NULL);
X if((sp->s_ptr = (char *) realloc(ptr,size)) == (char *) NULL)
X WARNING("_realloc: realloc failure %d bytes\r\n",size);
X sp->s_size = size;
X sp->s_blkno = blkno;
X return(sp->s_ptr);
X}
X
X
X/*
X * _free - wrapper for free. Loop through allocated slots, until you
X * find the one corresponding to pointer. If none, then it's an attempt
X * to free an unallocated area. If it's already freed, then tell user.
X */
Xvoid
X_free(ptr)
Xchar *ptr;
X{
X SLOT *sp;
X int i;
X
X for(i = 0,sp = slots ; i < slotc ; i++,sp++)
X if(sp->s_ptr == ptr)
X break;
X if(i == slotc)
X _abort("_free: free not previously malloc'd\r\n",(char *) NULL);
X if(sp->s_freed)
X _abort("_free: free after previous freeing\r\n",(char *) NULL);
X (void) free(sp->s_ptr);
X sp->s_freed = 1;
X}
X
X
X/*
X * _blkstart - start of a program block. Increase the block reference
X * number by one.
X */
Xvoid
X_blkstart()
X{
X blkno += 1;
X}
X
X
X/*
X * _blkend - end of a program block. Check all areas allocated in this
X * block have been freed. Decrease the block number by one.
X */
Xvoid
X_blkend()
X{
X SLOT *sp;
X int i;
X
X if(blkno == 0)
X {
X WARNING("_blkend: unmatched call to _blkend\r\n",NULL);
X return;
X }
X for(i = 0,sp = slots ; i < slotc ; i++,sp++)
X if(sp->s_blkno == blkno && !sp->s_freed)
X WARNING("_blkend: %d bytes unfreed\r\n",sp->s_size);
X blkno -= 1;
X}
X
X
X/*
X * _blkignore - find the slot corresponding to ptr, and set its block
X * number to zero, to avoid _blkend picking it up when checking.
X */
Xvoid
X_blkignore(ptr)
Xchar *ptr;
X{
X SLOT *sp;
X int i;
X
X for(i = 0,sp = slots ; i < slotc ; i++,sp++)
X if(sp->s_ptr == ptr)
X break;
X if(i == slotc)
X WARNING("_blkignore: pointer has not been allocated\r\n",NULL);
X else
X sp->s_blkno = 0;
X}
X
X/*
X * _abort - print a warning on stderr, and send a SIGQUIT to ourself
X */
X#if !defined(BUILDING_LINT_ARGS)
Xstatic void
X_abort(s1,s2)
Xchar *s1;
Xchar *s2;
X{
X WARNING(s1,s2);
X (void) kill(getpid(),SIGQUIT); /* core dump here */
X}
X#endif
SHAR_EOF
chmod 0644 smap.c || echo "restore of smap.c fails"
echo "x - extracting sysdep.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > sysdep.c &&
X/* CHK=0x2755 */
X/*+-------------------------------------------------------------------------
X sysdep.c -- system dependency aid
X--------------------------------------------------------------------------*/
X/*+:EDITS:*/
X/*:07-06-1989-15:06-wht-added i386 */
X/*:02-27-1989-21:59-wht-add M_I286 and M_I386 */
X/*:11-17-1988-15:17-wht-creation */
X
X#include <stdio.h>
X
Xchar *defines[] =
X{
X#if defined(M_XENIX)
X "M_XENIX",
X#endif
X#if defined(M_I386)
X "M_I386",
X#endif
X#if defined(M_I286)
X "M_I286",
X#endif
X#if defined(pyr)
X "pyr",
X#endif
X#if defined(i386)
X "i386",
X#endif
X (char *)0
X};
X
X/*+-------------------------------------------------------------------------
X pos_in_ztermed_list(test,list)
X--------------------------------------------------------------------------*/
Xint
Xpos_in_ztermed_list(test,list)
Xchar *test;
Xchar **list;
X{
X register int itmp = 0;
X
X while(*list)
X {
X if(!strcmp(*list++,test))
X return(itmp);
X itmp++;
X }
X return(-1);
X} /* end of pos_in_ztermed_list */
X
X/*+-------------------------------------------------------------------------
X main(argc,argv,envp)
X--------------------------------------------------------------------------*/
Xmain(argc,argv,envp)
Xint argc;
Xchar **argv;
Xchar **envp;
X{
X register int iargv;
X
X for(iargv = 1; iargv < argc; iargv++)
X {
X if(*argv[iargv] == '=')
X {
X if(pos_in_ztermed_list(argv[iargv] + 1,defines) >= 0)
X break;
X }
X }
X if(iargv == argc)
X {
X fprintf(stderr,"\n\nsysdep: no system match\n\n");
X exit(1);
X }
X
X while(++iargv <argc)
X {
X if(*argv[iargv] == '=')
X break;
X fputs(argv[iargv],stdout);
X fputc(' ',stdout);
X }
X fputs("\n",stdout);
X exit(0);
X} /* end of main */
X
SHAR_EOF
chmod 0644 sysdep.c || echo "restore of sysdep.c fails"
echo "x - extracting var.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > var.c &&
X/* CHK=0x2B08 */
X/*+-------------------------------------------------------------------------
X var.c - ecu variable routines
X Copyright 1989 Warren H. Tucker, III. All Rights Reserved
X
X Defined functions:
X alloc_MKV(name)
X build_mkvi(param)
X build_mkvs(param)
X cmd_mkvar(param)
X find_mkvi(name,pplong)
X find_mkvs(name,ppesd)
X free_mkvi(mkv)
X free_mkvs(mkv)
X get_ivptr(param,ppiv)
X get_svptr(param,ppsv)
X mkv_proc_starting(pcb)
X mkv_proc_terminating(pcb)
X var_init()
X
X--------------------------------------------------------------------------*/
X/*+:EDITS:*/
X/*:07-03-1989-22:57-wht------------- ecu 2.00 ---------------- */
X/*:06-27-1989-21:37-wht-start on mkv */
X/*:06-24-1989-16:53-wht-flush edits --- ecu 1.95 */
X
X#include "ecu.h"
X#include "esd.h"
X#define VDECL
X#include "var.h"
X#include "proc.h"
X#include "ecukey.h"
X#include "ecuerror.h"
X
Xchar *malloc();
X
Xextern int proc_level;
X
Xtypedef union mkvu_type
X{
X ESD *sv;
X long iv;
X} MKVU;
X
Xtypedef struct mkv_type
X{
X MKVU item; /* pointer to esd if sv or long if iv */
X struct mkv_type *next; /* next MKV in chain; if==NULL, no more in chain */
X struct mkv_type *prev; /* previous MKV in chain; if==NULL, top of chain */
X char *name; /* name of variable */
X} MKV;
X
XMKV *mkvi_last = (MKV *)0;
XMKV *mkvs_last = (MKV *)0;
X
X/*+-------------------------------------------------------------------------
X var_init()
X--------------------------------------------------------------------------*/
Xvoid
Xvar_init()
X{
Xregister itmp;
X
X for(itmp = 0; itmp < SVQUAN; itmp++)
X {
X if((sv[itmp] = make_esd(SVLEN)) == (ESD *)0)
X {
X pputs("out of memory\n");
X exit(1);
X }
X }
X
X for(itmp = 0; itmp < IVQUAN; itmp++)
X iv[itmp] = 0;
X
X} /* end of var_init */
X
X/*+-------------------------------------------------------------------------
X alloc_MKV(name)
X--------------------------------------------------------------------------*/
XMKV *
Xalloc_MKV(name)
Xchar *name;
X{
XMKV *mkv;
X if((mkv = (MKV *)malloc(sizeof(MKV))) == (MKV *)0)
X return((MKV *)0);
X if((mkv->name = malloc(strlen(name) + 1)) == (char *)0)
X {
X free((char *)mkv);
X return((MKV *)0);
X }
X strcpy(mkv->name,name);
X mkv->item.iv = 0;
X
X} /* end of alloc_MKV */
X
X/*+-------------------------------------------------------------------------
X build_mkvi(param)
X--------------------------------------------------------------------------*/
Xbuild_mkvi(param)
XESD *param;
X{
Xregister erc;
Xchar name[16];
XMKV *mkv;
X
X if(erc = get_alphanum_zstr(param,name,sizeof(name)))
X return(erc);
X
X if((mkv = alloc_MKV(name)) == (MKV *)0)
X return(eNoMemory);
X
X if(mkvi_last)
X mkvi_last->next = mkv;
X mkv->prev = mkvi_last;
X mkv->next = (MKV *)0;
X mkvi_last = mkv;
X return(0);
X
X} /* end of build_mkvi */
X
X/*+-------------------------------------------------------------------------
X build_mkvs(param)
X--------------------------------------------------------------------------*/
Xbuild_mkvs(param)
XESD *param;
X{
Xregister erc;
Xchar name[16];
XMKV *mkv = (MKV *)0;
XESD *text = (ESD *)0;
Xulong length;
X
X if(erc = get_alphanum_zstr(param,name,sizeof(name)))
X return(erc);
X
X if(erc = skip_paren(param,1))
X return(erc);
X if(erc = gint(param,&length))
X return(erc);
X if(length > 5120)
X {
X pprintf("max string size is 5120 ... cannot make %lu byte string\n",
X length);
X return(eFATAL_ALREADY);
X }
X if(erc = skip_paren(param,0))
X return(erc);
X
X if((text = make_esd((int)length)) == (ESD *)0)
X return(eNoMemory);
X
X if((mkv = alloc_MKV(name)) == (MKV *)0)
X {
X free_esd(text);
X return(eNoMemory);
X }
X
X mkv->item.sv = text;
X
X if(mkvs_last)
X mkvs_last->next = mkv;
X mkv->prev = mkvs_last;
X mkv->next = (MKV *)0;
X mkvs_last = mkv;
X return(0);
X
X} /* end of build_mkvs */
X
X/*+-------------------------------------------------------------------------
X cmd_mkvar(param)
X
Xmkvar i<name>
Xmkvar s<name>(<size-int>)
X--------------------------------------------------------------------------*/
Xint
Xcmd_mkvar(param)
XESD *param;
X{
Xregister erc;
Xchar vartype;
X
X if(!proc_level)
X return(eNotExecutingProc);
X
X do {
X if(erc = get_cmd_char(param,&vartype))
X return(erc);
X if(vartype == '$')
X {
X if(erc = get_cmd_char(param,&vartype))
X return(erc);
X }
X vartype = to_lower(vartype);
X switch(vartype)
X {
X case 'i':
X erc = build_mkvi(param);
X break;
X case 's':
X erc = build_mkvs(param);
X break;
X default:
X return(eIllegalVarType);
X }
X if(erc)
X return(erc);
X } while(!skip_comma(param));
X
X if(!end_of_cmd(param))
X return(eSyntaxError);
X
X return(0);
X
X} /* end of cmd_mkvar */
X
X/*+-------------------------------------------------------------------------
X free_mkvi(mkv)
X--------------------------------------------------------------------------*/
Xvoid
Xfree_mkvi(mkv)
XMKV *mkv;
X{
X free(mkv->name);
X free((char *)mkv);
X} /* end of free_mkvi */
X
X/*+-------------------------------------------------------------------------
X free_mkvs(mkv)
X--------------------------------------------------------------------------*/
Xvoid
Xfree_mkvs(mkv)
XMKV *mkv;
X{
X free_esd(mkv->item.sv);
X free(mkv->name);
X free((char *)mkv);
X} /* end of free_mkvs */
X
X/*+-------------------------------------------------------------------------
X mkv_proc_starting(pcb)
X--------------------------------------------------------------------------*/
Xvoid
Xmkv_proc_starting(pcb)
XPCB *pcb;
X{
X pcb->mkvs_last = (char *)mkvs_last;
X pcb->mkvi_last = (char *)mkvi_last;
X} /* end of mkv_proc_starting */
X
X/*+-------------------------------------------------------------------------
X mkv_proc_terminating(pcb)
X--------------------------------------------------------------------------*/
Xvoid
Xmkv_proc_terminating(pcb)
XPCB *pcb;
X{
XMKV *pmkv;
X
X while(mkvi_last != (MKV *)pcb->mkvi_last)
X {
X pmkv = mkvi_last->prev;
X free_mkvi(mkvi_last);
X mkvi_last = pmkv;
X }
X while(mkvs_last != (MKV *)pcb->mkvs_last)
X {
X pmkv = mkvs_last->prev;
X free_mkvs(mkvs_last);
X mkvs_last = pmkv;
X }
X
X} /* end of mkv_proc_terminating */
X
X/*+-------------------------------------------------------------------------
X find_mkvs(name,ppesd)
X--------------------------------------------------------------------------*/
Xint
Xfind_mkvs(name,ppesd)
Xchar *name;
XESD **ppesd;
X{
XMKV *mkv = mkvs_last;
X
X while(mkv)
X {
X if(!strcmp(name,mkv->name))
X {
X *ppesd = mkv->item.sv;
X return(0);
X }
X mkv = mkv->prev;
X }
X return(eNoSuchVariable);
X
X} /* end of find_mkvs */
X
X/*+-------------------------------------------------------------------------
X find_mkvi(name,pplong)
X--------------------------------------------------------------------------*/
Xint
Xfind_mkvi(name,pplong)
Xchar *name;
Xlong **pplong;
X{
XMKV *mkv = mkvi_last;
X
X while(mkv)
X {
X if(!strcmp(name,mkv->name))
X {
X *pplong = &mkv->item.iv;
X return(0);
X }
X mkv = mkv->prev;
X }
X return(eNoSuchVariable);
X
X} /* end of find_mkvi */
X
X/*+-------------------------------------------------------------------------
X get_subscript(param,psubscript)
Xonly called when '[' at pb + index
X--------------------------------------------------------------------------*/
Xget_subscript(param,psubscript)
XESD *param;
Xulong *psubscript;
X{
Xregister erc;
X
X param->index++;
X if(erc = gint(param,psubscript))
X return(erc);
X if(skip_cmd_char(param,']'))
X return(eSyntaxError);
X
X} /* end of get_subscript */
X
X/*+-------------------------------------------------------------------------
X get_ivptr(param,ppiv)
Xcallled with index set to $i.....
X ^
X--------------------------------------------------------------------------*/
Xget_ivptr(param,ppiv)
XESD *param;
Xlong **ppiv;
X{
Xregister erc;
Xulong varnum;
Xchar name[16];
X
X if(end_of_cmd(param))
X return(eSyntaxError);
X else if(!get_numeric_value(param,&varnum))
X goto TEST_VARNUM;
X else if(*(param->pb + param->index) == '[')
X {
X if(erc = get_subscript(param,&varnum))
X return(erc);
XTEST_VARNUM:
X if(varnum >= IVQUAN)
X return(eIllegalVarNumber);
X *ppiv = &iv[(int)varnum];
X return(0);
X }
X else if(get_alphanum_zstr(param,name,sizeof(name)))
X return(eInvalidVarName);
X
X return(find_mkvi(name,ppiv));
X
X} /* end of get_ivptr */
X
X/*+-------------------------------------------------------------------------
X get_svptr(param,ppsv)
Xcallled with index set to $s.....
X ^
X--------------------------------------------------------------------------*/
Xget_svptr(param,ppsv)
XESD *param;
XESD **ppsv;
X{
Xregister erc;
Xulong varnum;
Xchar name[16];
X
X if(end_of_cmd(param))
X return(eSyntaxError);
X else if(!get_numeric_value(param,&varnum))
X goto TEST_VARNUM;
X else if(*(param->pb + param->index) == '[')
X {
X if(erc = get_subscript(param,&varnum))
X return(erc);
XTEST_VARNUM:
X if(varnum >= SVQUAN)
X return(eIllegalVarNumber);
X *ppsv = sv[(int)varnum];
X return(0);
X }
X if(get_alphanum_zstr(param,name,sizeof(name)))
X return(eInvalidVarName);
X return(find_mkvs(name,ppsv));
X
X} /* end of get_svptr */
X
X/* vi: set tabstop=4 shiftwidth=4: */
X/* end of var.c */
SHAR_EOF
chmod 0644 var.c || echo "restore of var.c fails"
echo "x - extracting dialer.h (Text)"
sed 's/^X//' << 'SHAR_EOF' > dialer.h &&
X/* CHK=0x8F3C */
X/*+-------------------------------------------------------------------------
X dialer.h - HDB UUCP dialer program return code error codes
X Copyright 1989 Warren H. Tucker, III. All Rights Reserved
X--------------------------------------------------------------------------*/
X/*+:EDITS:*/
X/*:07-03-1989-22:57-wht------------- ecu 2.00 ---------------- */
X/*:07-01-1989-21:56-wht-creation */
X
X#define RC_FAIL 0x80 /* 1 = failed to connect */
X#define RCE_NULL 0 /* general purpose or unknown error code */
X#define RCE_INUSE 1 /* line in use */
X#define RCE_SIG 2 /* signal aborted dialer */
X#define RCE_ARGS 3 /* invalid arguments */
X#define RCE_PHNO 4 /* invalid phone number */
X#define RCE_SPEED 5 /* invalid baud rate -or- bad connect baud */
X#define RCE_OPEN 6 /* can't open line */
X#define RCE_IOCTL 7 /* ioctl error */
X#define RCE_TIMOUT 8 /* timeout */
X#define RCE_NOTONE 9 /* no dial tone */
X#define RCE_BUSY 13 /* phone is busy */
X#define RCE_NOCARR 14 /* no carrier */
X#define RCE_ANSWER 15 /* no answer */
X
X/* code writing aid */
X#ifdef NEVER
X case RCE_NULL: /* general purpose or unknown error code */
X case RCE_INUSE: /* line in use */
X case RCE_SIG: /* signal aborted dialer */
X case RCE_ARGS: /* invalid arguments */
X case RCE_PHNO: /* invalid phone number */
X case RCE_SPEED: /* invalid baud rate -or- bad connect baud */
X case RCE_OPEN: /* can't open line */
X case RCE_IOCTL: /* ioctl error */
X case RCE_TIMOUT: /* timeout */
X case RCE_NOTONE: /* no dial tone */
X case RCE_BUSY: /* phone is busy */
X case RCE_NOCARR: /* no carrier */
X case RCE_ANSWER: /* no answer */
X#endif
X
X/* vi: set tabstop=4 shiftwidth=4: */
X/* end of dialer.h */
SHAR_EOF
chmod 0644 dialer.h || echo "restore of dialer.h fails"
echo "x - extracting dvent.h (Text)"
sed 's/^X//' << 'SHAR_EOF' > dvent.h &&
X/* CHK=0x9039 */
X/*+-------------------------------------------------------------------------
X dvent.h - HDB UUCP Devices file entry (a la pwent.h)
X Copyright 1989 Warren H. Tucker, III. All Rights Reserved
X--------------------------------------------------------------------------*/
X/*+:EDITS:*/
X/*:07-03-1989-22:57-wht------------- ecu 2.00 ---------------- */
X/*:07-01-1989-14:50-wht-creation */
X
Xstruct dvent
X{
X char *type; /* ACU or Direct */
X char *line; /* tty name "ttyxx"-style */
X char *dialer; /* "801" dialer line */
X uint low_baud; /* lowest baud rate */
X uint high_baud; /* highest baud rate */
X char *dialprog; /* dialer program */
X};
X
Xstruct dvent *getdvent();
Xstruct dvent *getdvbaud();
Xstruct dvent *getdvline();
Xvoid enddvent();
X
X/* vi: set tabstop=4 shiftwidth=4: */
X/* end of dvent.h */
SHAR_EOF
chmod 0644 dvent.h || echo "restore of dvent.h fails"
echo "x - extracting ecu.h (Text)"
sed 's/^X//' << 'SHAR_EOF' > ecu.h &&
X/* CHK=0xECCF */
X/*+-----------------------------------------------------------------------
X ecu.h -- TuckerWare Extended Calling Unit
X Copyright 1986,1989 Warren H. Tucker, III. All Rights Reserved
X------------------------------------------------------------------------*/
X/*+:EDITS:*/
X/*:07-03-1989-22:57-wht------------- ecu 2.00 ---------------- */
X/*:06-24-1989-16:53-wht-flush edits --- ecu 1.95 */
X
X#if !defined(STDIO_H_INCLUDED)
X#include <stdio.h>
X#endif
X#include <signal.h>
X#include <ctype.h>
X#include <sys/types.h>
X#include <sys/errno.h>
X
X#include "ecuhangup.h"
X
X#define MALLOC_3X
X#if defined(MALLOC_3X)
X#include <malloc.h>
X#endif
X
X#if defined(M_XENIX)
X#include <memory.h>
X#include <sys/stat.h>
X#include <string.h>
X#include <fcntl.h>
X#if !defined(OMIT_TERMIO_REFERENCES)
X#include <sys/ioctl.h>
X#include <termio.h>
X#endif
X#endif
X
X#if defined(pyr)
X#include <sys/stat.h>
X#include <sys/file.h>
X#if !defined(OMIT_TERMIO_REFERENCES)
X#include <sys/termio.h>
X#endif
X#include <strings.h>
X#define strchr index
X#define strrchr rindex
X#define memcpy(a,b,c) bcopy(b,a,c)
X#endif
X
X#if !defined(ushort)
X#define ushort unsigned short
X#endif
X#if !defined(uchar)
X#define uchar unsigned char
X#endif
X#if !defined(uint)
X#define uint unsigned int
X#endif
X#if !defined(ulong)
X#define ulong unsigned long
X#endif
X
X/* for better source line utilization, frequent use of 'fprintf' and 'stderr'
X warrants the following */
X#define pf printf
X#define ff fprintf
X#define se stderr
X#define so stdout
X
X#define DEFAULT_BAUD_RATE 2400
X#define TTYIN 0
X#define TTYOUT 1 /* ditto tty output */
X#define TTYERR 2 /* ditty tty output error channel */
X
X/* xbell codes */
X#if defined(M_XENIX)
X#define XBELL_DEEDLE 1 /* octaves */
X#define XBELL_ATTENTION 2 /* morse .-.-.- ATTENTION */
X#define XBELL_C 3 /* morse -.-. C */
X#define XBELL_3T 4 /* 3 morse T's */
X#endif
X
X/* lopen() and related routines error codes */
X#define LOPEN_INVALID -1 /* for invalid tty name */
X#define LOPEN_UNKPID -2 /* unknown pid using line */
X#define LOPEN_LCKERR -3 /* lock file open error */
X#define LOPEN_NODEV -4 /* device does not exist */
X#define LOPEN_OPNFAIL -5 /* could not open line */
X#define LOPEN_ALREADY -6 /* line already open */
X#define LOPEN_ENABLED -7 /* line enabled for login */
X#define LOPEN_ENABLED_IN_USE -8 /* line in use by incoming login */
X#define LOPEN_DIALOUT_IN_USE -9 /* line in use by another dial out */
X
X#if defined(DECLARE_LINEVARS_PUBLIC)
Xint Ladd_nl_incoming; /* when in ksr mode, add nl to cr on receive */
Xint Ladd_nl_outgoing; /* when in ksr mode, add nl to cr on xmit */
Xint Lfull_duplex; /* if non-zero, full duplex else half */
Xint Liofd; /* file descriptor for line */
Xint Lmodem_already_init; /* true if modem already initialized */
Xint Lmodem_off_hook; /* we try to keep accurate */
SHAR_EOF
echo "End of part 20"
echo "File ecu.h is continued in part 21"
echo "21" > s2_seq_.tmp
exit 0
--
-------------------------------------------------------------------
Warren Tucker, Tridom Corporation ...!gatech!emory!tridom!wht
Ker-au'-lo-phon. An 8-foot partial flue-stop, having metal pipes
surmounted by adjustable rings, and with a hole bored near the top
of each pipe, producing a soft and "reedy" tone.
More information about the Alt.sources
mailing list