#/bin/sh #/bin/sh mkdir Mk sys # To unbundle, sh this file echo fast.fwd.inc.c 1>&2 sed 's/.//' >fast.fwd.inc.c <<'//GO.SYSIN DD fast.fwd.inc.c' -/* - search routine generated by gen. - skip=fast, match=fwd (using fwdr), shift=inc -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; - int lastchar; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - pat.lastchar = *p; - skipc = (CHARTYPE *)p; -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - int lastdelta; - register k; - register CHARTYPE *p, *q; - register CHARTYPE *ep; - register n1 = pat.patlen-1; - - lastdelta = n+pat.patlen; - d0[pat.lastchar] = lastdelta; /* guaranteed to break s < e loop */ - s = base+pat.patlen-1; - e = base+n; - ep = pat.pat + pat.patlen-1; - while(s < e){ -#ifdef STATS - for(;;){ - stats.jump++; - if((s += (k = d0[*s])) >= e) break; - stats.step[k]++; - } - if(s < e+pat.patlen) - stats.step[k]++; -#else - while((s += d0[*s]) < e) - ; -#endif - if(s < e+pat.patlen) /* no match */ - break; - s -= lastdelta; -#ifdef STATS - stats.slow++; -#endif - for(p = pat.pat, q = s-n1; p < ep; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*q++ != *p++) - goto mismatch; - } - nmatch++; - mismatch: - s++; -#ifdef STATS - stats.step[1]++; -#endif - } - return(nmatch); -} //GO.SYSIN DD fast.fwd.inc.c echo fast.rev.d12.c 1>&2 sed 's/.//' >fast.rev.d12.c <<'//GO.SYSIN DD fast.rev.d12.c' -/* - search routine generated by gen. - skip=fast, match=rev (using revr), shift=d12 -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; - int lastchar; - Tab delta1[256]; - Tab delta2[257]; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - register Tab *d2; - register q1, tp, t, qp, jp, kp; - Tab f[256], f1[256]; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - pat.lastchar = *p; - skipc = (CHARTYPE *)p; - d2 = pat.delta1; - for(j = 0; j < 256; j++) - d2[j] = m; - for(j = 0; j < m; j++) - d2[base[j]] = m-1-j; - d2 = pat.delta2; - for(j = 1; j < m; j++) - d2[j] = 2*m-j; - for(j = m, t = m+1; j > 0; j--, t--){ - f[j] = t; - while((t <= m) && (base[t-1] != base[j-1])){ - if((m-j) < d2[t]) - d2[t] = m-j; - t = f[t]; - } - } - q1 = t; - t = m+1-q1; - qp = 1; - for(jp = 1, kp = 0; kp < t; jp++, kp++){ - f1[jp] = kp; - while((kp >= 1) && (base[jp-1] != base[kp-1])) - kp = f1[kp]; - } - while(q1 < m){ - for(j = qp; j <= q1; j++) - if(m+q1-j < d2[j]) - d2[j] = m+q1-j; - qp = q1+1; - q1 += t-f1[t]; - t = f1[t]; - } -/*for(j=1; j<=m; j++)printf("[%d]=%d ", j, d2[j]); printf("\n");/**/ - d2[0] = m+1; /* the case where the match succeeded */ -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - int lastdelta; - register k; - register CHARTYPE *p, *q; - register CHARTYPE *prev = pat.pat+pat.patlen-1; - register Tab *d1 = pat.delta1; - register Tab *d2 = pat.delta2+1; - register k1, k2; - - lastdelta = n+pat.patlen; - d0[pat.lastchar] = lastdelta; /* guaranteed to break s < e loop */ - s = base+pat.patlen-1; - e = base+n; - while(s < e){ -#ifdef STATS - for(;;){ - stats.jump++; - if((s += (k = d0[*s])) >= e) break; - stats.step[k]++; - } - if(s < e+pat.patlen) - stats.step[k]++; -#else - while((s += d0[*s]) < e) - ; -#endif - if(s < e+pat.patlen) /* no match */ - break; - s -= lastdelta; -#ifdef STATS - stats.slow++; -#endif -#define RH s - for(p = prev, q = RH; p > pat.pat; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*--q != *--p) - goto mismatch; - } - nmatch++; - mismatch: - k2 = d2[p-pat.pat]; - k1 = d1[*q]; - if(k2 < k1) - k2 = k1; - k2 = q+k2-RH; -#ifdef STATS - stats.step[k2]++; stats.jump++; -#endif - s += k2; - } - return(nmatch); -} //GO.SYSIN DD fast.rev.d12.c echo lC.fwd.inc.c 1>&2 sed 's/.//' >lC.fwd.inc.c <<'//GO.SYSIN DD lC.fwd.inc.c' -/* - search routine generated by gen. - skip=lC, match=fwd, shift=inc -*/ -#include "freq.h" -#include "sd.h" -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#define TABTYPE unsigned char -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; - int loopoffset; /* patlen-1 - skip loop char */ -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *pb; - register int j, r; - register Tab *d; - double tmax, fr; - extern double tcmp; - extern option; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - if(sd[m] == 0){ - for(j = m; sd[j] == 0; j--) - sd[j] = 12; - } - d = pat.delta; - tmax = 2+tcmp; - for(pb = pat.pat, pe = pb+pat.patlen-1; pb <= pe; pb++){ - fr = (1+tcmp*freq[*pb])/sd[pb-pat.pat]; -#ifdef STATS -/*printf("i=%d: f=%.4f freq[%c]=%.5f sd=%.1f\n", (pb-pat.pat), fr, *pb, freq[*pb], sd[pb-pat.pat]);/**/ -#endif - if(tmax > fr){ - tmax = fr; - r = pb-pat.pat; - } - } - pat.loopoffset = m-1-r; -if(option >= 0) pat.loopoffset=option; - skipc = &pat.pat[m-1-pat.loopoffset]; - for(j = 0; j < 256; j++) - d[j] = m-pat.loopoffset; - for(pb = pat.pat, pe = pb+m-1-pat.loopoffset; pb <= pe; pb++){ - d[*pb] = pe-pb; - } -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k, s_offset; - register CHARTYPE *p, *q; - register CHARTYPE *ep; - - k = pat.patlen-1-pat.loopoffset; /* k is char we loop on */ - s = base+k; - e = base+n; - memset(e, pat.pat[k], pat.patlen); - s_offset = -k; - ep = pat.pat + pat.patlen; - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } - if(s >= e) - return(nmatch); -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } - if(s >= e) - return(nmatch); -#endif -#ifdef STATS - stats.slow++; -#endif - for(p = pat.pat, q = s+s_offset; p < ep; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*q++ != *p++) - goto mismatch; - } - nmatch++; - mismatch: - s++; -#ifdef STATS - stats.step[1]++; -#endif - } - return(nmatch); -} //GO.SYSIN DD lC.fwd.inc.c echo lC.fwdg.md2.c 1>&2 sed 's/.//' >lC.fwdg.md2.c <<'//GO.SYSIN DD lC.fwdg.md2.c' -/* - search routine generated by gen. - skip=lC, match=fwd, guard=guard, shift=md2 -*/ -#include "freq.h" -#include "sd.h" -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#define TABTYPE unsigned char -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; - int loopoffset; /* patlen-1 - skip loop char */ - int rarec, rareoff; - int md2; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *pb; - register int j, r; - register Tab *d; - double tmax, fr; - extern double tcmp; - extern option; - int rrr, rr; - register CHARTYPE *pmd2; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - if(sd[m] == 0){ - for(j = m; sd[j] == 0; j--) - sd[j] = 12; - } - d = pat.delta; - tmax = 2+tcmp; - for(pb = pat.pat, pe = pb+pat.patlen-1; pb <= pe; pb++){ - fr = (1+tcmp*freq[*pb])/sd[pb-pat.pat]; -#ifdef STATS -/*printf("i=%d: f=%.4f freq[%c]=%.5f sd=%.1f\n", (pb-pat.pat), fr, *pb, freq[*pb], sd[pb-pat.pat]);/**/ -#endif - if(tmax > fr){ - tmax = fr; - r = pb-pat.pat; - } - } - pat.loopoffset = m-1-r; -if(option >= 0) pat.loopoffset=option; - skipc = &pat.pat[m-1-pat.loopoffset]; - for(j = 0; j < 256; j++) - d[j] = m-pat.loopoffset; - for(pb = pat.pat, pe = pb+m-1-pat.loopoffset; pb <= pe; pb++){ - d[*pb] = pe-pb; - } - rrr = 0; - for(rr = 1; rr < m; rr++){ - if(freq[pat.pat[rr]] < freq[pat.pat[rrr]]) - rrr = rr; - } - pat.rarec = pat.pat[rrr]; - pat.rareoff = rrr; - for(pmd2 = skipc-1; pmd2 >= pat.pat; pmd2--) - if (*pmd2 == *skipc) break; - pat.md2 = skipc - pmd2; /* *pmd2 is first leftward reoccurance of *pe */ -#ifdef STATS - stats.extra += pat.md2; -#endif -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k, s_offset; - register ro, rc; - register CHARTYPE *p, *q; - register CHARTYPE *ep; - register md2 = pat.md2; - - k = pat.patlen-1-pat.loopoffset; /* k is char we loop on */ - s = base+k; - e = base+n; - memset(e, pat.pat[k], pat.patlen); - s_offset = -k; - ro = pat.rareoff+s_offset; - rc = pat.rarec; - ep = pat.pat + pat.patlen; - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } - if(s >= e) - return(nmatch); -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } - if(s >= e) - return(nmatch); -#endif -#ifdef STATS - stats.slow++; -#endif - if(s[ro] != rc) - goto mismatch; - for(p = pat.pat, q = s+s_offset; p < ep; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*q++ != *p++) - goto mismatch; - } - nmatch++; - mismatch: -#ifdef STATS - stats.step[md2]++; stats.jump++; -#endif - s += md2; - } - return(nmatch); -} //GO.SYSIN DD lC.fwdg.md2.c echo lc.fwd.inc.c 1>&2 sed 's/.//' >lc.fwd.inc.c <<'//GO.SYSIN DD lc.fwd.inc.c' -/* - search routine generated by gen. - skip=lc, match=fwd, shift=inc -*/ -#include "freq.h" -#include "sd.h" -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; - int loopoffset; /* patlen-1 - skip loop char */ -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *pb; - register int j, r; - register Tab *d; - double tmax, fr; - extern double tcmp; - extern option; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - if(sd[m] == 0){ - for(j = m; sd[j] == 0; j--) - sd[j] = 12; - } - d = pat.delta; - tmax = 2+tcmp; - for(pb = pat.pat, pe = pb+pat.patlen-1; pb <= pe; pb++){ - fr = (1+tcmp*freq[*pb])/sd[pb-pat.pat]; -#ifdef STATS -/*printf("i=%d: f=%.4f freq[%c]=%.5f sd=%.1f\n", (pb-pat.pat), fr, *pb, freq[*pb], sd[pb-pat.pat]);/**/ -#endif - if(tmax > fr){ - tmax = fr; - r = pb-pat.pat; - } - } - pat.loopoffset = m-1-r; -if(option >= 0) pat.loopoffset=option; - skipc = &pat.pat[m-1-pat.loopoffset]; - for(j = 0; j < 256; j++) - d[j] = m-pat.loopoffset; - for(pb = pat.pat, pe = pb+m-1-pat.loopoffset; pb <= pe; pb++){ - d[*pb] = pe-pb; - } -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k, s_offset; - register CHARTYPE *p, *q; - register CHARTYPE *ep; - - k = pat.patlen-1-pat.loopoffset; /* k is char we loop on */ - s = base+k; - e = base+n; - memset(e, pat.pat[k], pat.patlen); - s_offset = -k; - ep = pat.pat + pat.patlen; - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } - if(s >= e) - return(nmatch); -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } - if(s >= e) - return(nmatch); -#endif -#ifdef STATS - stats.slow++; -#endif - for(p = pat.pat, q = s+s_offset; p < ep; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*q++ != *p++) - goto mismatch; - } - nmatch++; - mismatch: - s++; -#ifdef STATS - stats.step[1]++; -#endif - } - return(nmatch); -} //GO.SYSIN DD lc.fwd.inc.c echo lc.fwdg.md2.c 1>&2 sed 's/.//' >lc.fwdg.md2.c <<'//GO.SYSIN DD lc.fwdg.md2.c' -/* - search routine generated by gen. - skip=lc, match=fwd, guard=guard, shift=md2 -*/ -#include "freq.h" -#include "sd.h" -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; - int loopoffset; /* patlen-1 - skip loop char */ - int rarec, rareoff; - int md2; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *pb; - register int j, r; - register Tab *d; - double tmax, fr; - extern double tcmp; - extern option; - int rrr, rr; - register CHARTYPE *pmd2; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - if(sd[m] == 0){ - for(j = m; sd[j] == 0; j--) - sd[j] = 12; - } - d = pat.delta; - tmax = 2+tcmp; - for(pb = pat.pat, pe = pb+pat.patlen-1; pb <= pe; pb++){ - fr = (1+tcmp*freq[*pb])/sd[pb-pat.pat]; -#ifdef STATS -/*printf("i=%d: f=%.4f freq[%c]=%.5f sd=%.1f\n", (pb-pat.pat), fr, *pb, freq[*pb], sd[pb-pat.pat]);/**/ -#endif - if(tmax > fr){ - tmax = fr; - r = pb-pat.pat; - } - } - pat.loopoffset = m-1-r; -if(option >= 0) pat.loopoffset=option; - skipc = &pat.pat[m-1-pat.loopoffset]; - for(j = 0; j < 256; j++) - d[j] = m-pat.loopoffset; - for(pb = pat.pat, pe = pb+m-1-pat.loopoffset; pb <= pe; pb++){ - d[*pb] = pe-pb; - } - rrr = 0; - for(rr = 1; rr < m; rr++){ - if(freq[pat.pat[rr]] < freq[pat.pat[rrr]]) - rrr = rr; - } - pat.rarec = pat.pat[rrr]; - pat.rareoff = rrr; - for(pmd2 = skipc-1; pmd2 >= pat.pat; pmd2--) - if (*pmd2 == *skipc) break; - pat.md2 = skipc - pmd2; /* *pmd2 is first leftward reoccurance of *pe */ -#ifdef STATS - stats.extra += pat.md2; -#endif -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k, s_offset; - register ro, rc; - register CHARTYPE *p, *q; - register CHARTYPE *ep; - register md2 = pat.md2; - - k = pat.patlen-1-pat.loopoffset; /* k is char we loop on */ - s = base+k; - e = base+n; - memset(e, pat.pat[k], pat.patlen); - s_offset = -k; - ro = pat.rareoff+s_offset; - rc = pat.rarec; - ep = pat.pat + pat.patlen; - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } - if(s >= e) - return(nmatch); -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } - if(s >= e) - return(nmatch); -#endif -#ifdef STATS - stats.slow++; -#endif - if(s[ro] != rc) - goto mismatch; - for(p = pat.pat, q = s+s_offset; p < ep; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*q++ != *p++) - goto mismatch; - } - nmatch++; - mismatch: -#ifdef STATS - stats.step[md2]++; stats.jump++; -#endif - s += md2; - } - return(nmatch); -} //GO.SYSIN DD lc.fwdg.md2.c echo no.fwd.inc.c 1>&2 sed 's/.//' >no.fwd.inc.c <<'//GO.SYSIN DD no.fwd.inc.c' -/* - search routine generated by gen. - skip=no, match=fwd, shift=inc -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register int s_offset; - register CHARTYPE *p, *q; - register CHARTYPE *ep; - - s = base+pat.patlen-1; - e = base+n; - s_offset = 1-pat.patlen; - ep = pat.pat + pat.patlen; - while(s < e){ -#ifdef STATS - stats.slow++; -#endif - for(p = pat.pat, q = s+s_offset; p < ep; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*q++ != *p++) - goto mismatch; - } - nmatch++; - mismatch: - s++; -#ifdef STATS - stats.step[1]++; -#endif - } - return(nmatch); -} //GO.SYSIN DD no.fwd.inc.c echo no.fwd.sd1.c 1>&2 sed 's/.//' >no.fwd.sd1.c <<'//GO.SYSIN DD no.fwd.sd1.c' -/* - search routine generated by gen. - skip=no, match=fwd, shift=sd1r -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab sdelta1[256]; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register Tab *sd1; - register js1; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - sd1 = pat.sdelta1; - for(js1 = 0; js1 < 256; js1++) - sd1[js1] = m+1; - for(js1 = 0; js1 < m; js1++) - sd1[base[js1]] = m-js1; -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register int s_offset; - register CHARTYPE *p, *q; - register CHARTYPE *ep; - register Tab *sd1 = pat.sdelta1; - register m; - - s = base+pat.patlen-1; - e = base+n; - s_offset = 1-pat.patlen; - ep = pat.pat + pat.patlen; - m = pat.patlen; - while(s < e){ -#ifdef STATS - stats.slow++; -#endif - for(p = pat.pat, q = s+s_offset; p < ep; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*q++ != *p++) - goto mismatch; - } - nmatch++; - mismatch: -#ifdef STATS - stats.step[sd1[s[1]]]++; -#endif - s += sd1[s[1]]; - } - return(nmatch); -} //GO.SYSIN DD no.fwd.sd1.c echo no.rev.d12.c 1>&2 sed 's/.//' >no.rev.d12.c <<'//GO.SYSIN DD no.rev.d12.c' -/* - search routine generated by gen. - skip=no, match=rev, shift=d12 -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta1[256]; - Tab delta2[257]; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register Tab *d2; - register q1, tp, t, qp, jp, kp; - Tab f[256], f1[256]; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d2 = pat.delta1; - for(j = 0; j < 256; j++) - d2[j] = m; - for(j = 0; j < m; j++) - d2[base[j]] = m-1-j; - d2 = pat.delta2; - for(j = 1; j < m; j++) - d2[j] = 2*m-j; - for(j = m, t = m+1; j > 0; j--, t--){ - f[j] = t; - while((t <= m) && (base[t-1] != base[j-1])){ - if((m-j) < d2[t]) - d2[t] = m-j; - t = f[t]; - } - } - q1 = t; - t = m+1-q1; - qp = 1; - for(jp = 1, kp = 0; kp < t; jp++, kp++){ - f1[jp] = kp; - while((kp >= 1) && (base[jp-1] != base[kp-1])) - kp = f1[kp]; - } - while(q1 < m){ - for(j = qp; j <= q1; j++) - if(m+q1-j < d2[j]) - d2[j] = m+q1-j; - qp = q1+1; - q1 += t-f1[t]; - t = f1[t]; - } -/*for(j=1; j<=m; j++)printf("[%d]=%d ", j, d2[j]); printf("\n");/**/ - d2[0] = m+1; /* the case where the match succeeded */ -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register int s_offset; - register CHARTYPE *p, *q; - register n1 = pat.patlen-1; - register CHARTYPE *ep; - register Tab *d1 = pat.delta1; - register Tab *d2 = pat.delta2+1; - register k1, k2; - - s = base+pat.patlen-1; - e = base+n; - s_offset = 1-pat.patlen; - ep = pat.pat; - while(s < e){ -#ifdef STATS - stats.slow++; -#endif -#define RH (s+n1+s_offset) - for(p = pat.pat+n1, q = RH; p >= ep; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*q-- != *p--){ - q++, p++; - goto mismatch; - } - } - nmatch++; - mismatch: - k2 = d2[p-pat.pat]; - k1 = d1[*q]; - if(k2 < k1) - k2 = k1; - k2 = q+k2-RH; -#ifdef STATS - stats.step[k2]++; stats.jump++; -#endif - s += k2; - } - return(nmatch); -} //GO.SYSIN DD no.rev.d12.c echo sfC.fwd.inc.c 1>&2 sed 's/.//' >sfC.fwd.inc.c <<'//GO.SYSIN DD sfC.fwd.inc.c' -/* - search routine generated by gen. - skip=sfC, match=fwd (using fwdl), shift=inc -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - skipc = &pat.pat[0]; -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register CHARTYPE ch; - register np1; - extern char *memchr(); - register CHARTYPE *p, *q; - register CHARTYPE *ep; - - s = base; - e = base + n - pat.patlen; - np1 = n+1; - ch = pat.pat[0]; - base[n] = ch; - ep = pat.pat + pat.patlen; - while(s < e){ -#ifdef STATS - while(ch != *s++) - stats.jump++; - stats.jump++; - if(--s > e) - break; -#else - s = (CHARTYPE *)memchr(s, ch, np1); /* must find it */ - if(s > e) - break; -#endif -#ifdef STATS - stats.slow++; -#endif - for(p = pat.pat+1, q = s+1; p < ep; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*q++ != *p++) - goto mismatch; - } - nmatch++; - mismatch: - s++; -#ifdef STATS - stats.step[1]++; -#endif - } - return(nmatch); -} //GO.SYSIN DD sfC.fwd.inc.c echo sfc.fwd.inc.c 1>&2 sed 's/.//' >sfc.fwd.inc.c <<'//GO.SYSIN DD sfc.fwd.inc.c' -/* - search routine generated by gen. - skip=sfc, match=fwd (using fwdl), shift=inc -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - skipc = &pat.pat[0]; -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register CHARTYPE ch; - register CHARTYPE *p, *q; - register CHARTYPE *ep; - - s = base; - e = base + n - pat.patlen; - ch = pat.pat[0]; - base[n] = ch; - ep = pat.pat + pat.patlen; - while(s < e){ -#ifdef STATS - while(ch != *s++) - stats.jump++; - stats.jump++; -#else - while(ch != *s++) - ; -#endif - if(s > e) - break; -#ifdef STATS - stats.slow++; -#endif - for(p = pat.pat+1, q = s; p < ep; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*q++ != *p++) - goto mismatch; - } - nmatch++; - mismatch: - ; -#ifdef STATS - stats.step[1]++; -#endif - } - return(nmatch); -} //GO.SYSIN DD sfc.fwd.inc.c echo slfC.fwd.inc.c 1>&2 sed 's/.//' >slfC.fwd.inc.c <<'//GO.SYSIN DD slfC.fwd.inc.c' -/* - search routine generated by gen. - skip=slfC, match=fwd, shift=inc -*/ -#include "freq.h" -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - int rarest; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - double mfreq; - int lf; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - mfreq = freq[pat.pat[pat.rarest = 0]]; - for(lf = 1; lf < m; lf++) - if(freq[pat.pat[lf]] < mfreq){ - pat.rarest = lf; - mfreq = freq[pat.pat[lf]]; - } - skipc = &pat.pat[pat.rarest]; -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register CHARTYPE ch; - register np1; - register s_offset; - extern char *memchr(); - register CHARTYPE *p, *q; - register CHARTYPE *ep; - - s = base; - e = base + n - (pat.patlen - pat.rarest); - ch = pat.pat[pat.rarest]; - np1 = n+1; - base[n] = ch; - s_offset = -pat.rarest; - ep = pat.pat + pat.patlen; - while(s < e){ -#ifdef STATS - while(ch != *s++) - stats.jump++; - stats.jump++; - if(--s > e) - break; -#else - s = (CHARTYPE *)memchr(s, ch, np1); /* must find it */ - if(s > e) - break; -#endif -#ifdef STATS - stats.slow++; -#endif - for(p = pat.pat, q = s+s_offset; p < ep; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*q++ != *p++) - goto mismatch; - } - nmatch++; - mismatch: - s++; -#ifdef STATS - stats.step[1]++; -#endif - } - return(nmatch); -} //GO.SYSIN DD slfC.fwd.inc.c echo slfc.fwd.inc.c 1>&2 sed 's/.//' >slfc.fwd.inc.c <<'//GO.SYSIN DD slfc.fwd.inc.c' -/* - search routine generated by gen. - skip=slfc, match=fwd, shift=inc -*/ -#include "freq.h" -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - int rarest; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - double mfreq; - int lf; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - mfreq = freq[pat.pat[pat.rarest = 0]]; - for(lf = 1; lf < m; lf++) - if(freq[pat.pat[lf]] < mfreq){ - pat.rarest = lf; - mfreq = freq[pat.pat[lf]]; - } - skipc = &pat.pat[pat.rarest]; -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register CHARTYPE ch; - register s_offset; - register CHARTYPE *p, *q; - register CHARTYPE *ep; - - s = base + pat.rarest; - e = base + n - (pat.patlen - pat.rarest); - ch = pat.pat[pat.rarest]; - base[n] = ch; - s_offset = -pat.rarest; - ep = pat.pat + pat.patlen; - while(s < e){ -#ifdef STATS - while(ch != *s++) - stats.jump++; - stats.jump++; -#else - while(ch != *s++) - ; -#endif - if(--s > e) - break; -#ifdef STATS - stats.slow++; -#endif - for(p = pat.pat, q = s+s_offset; p < ep; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*q++ != *p++) - goto mismatch; - } - nmatch++; - mismatch: - s++; -#ifdef STATS - stats.step[1]++; -#endif - } - return(nmatch); -} //GO.SYSIN DD slfc.fwd.inc.c echo uF.fwd.inc.c 1>&2 sed 's/.//' >uF.fwd.inc.c <<'//GO.SYSIN DD uF.fwd.inc.c' -/* - search routine generated by gen. - skip=uF, match=fwd (using fwdr), shift=inc -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#define TABTYPE CHARTYPE -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - d[*p] = 0; - skipc = (CHARTYPE *)p; -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k; - register CHARTYPE *p, *q; - register CHARTYPE *ep; - register n1 = pat.patlen-1; - - s = base+pat.patlen-1; - e = base+n; - memset(e, pat.pat[pat.patlen-1], pat.patlen); - ep = pat.pat + pat.patlen-1; - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } -#endif - if(s >= e) - break; -#ifdef STATS - stats.slow++; -#endif - for(p = pat.pat, q = s-n1; p < ep; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*q++ != *p++) - goto mismatch; - } - nmatch++; - mismatch: - s++; -#ifdef STATS - stats.step[1]++; -#endif - } - return(nmatch); -} //GO.SYSIN DD uF.fwd.inc.c echo uf.fwd.inc.c 1>&2 sed 's/.//' >uf.fwd.inc.c <<'//GO.SYSIN DD uf.fwd.inc.c' -/* - search routine generated by gen. - skip=uf, match=fwd (using fwdr), shift=inc -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - d[*p] = 0; - skipc = (CHARTYPE *)p; -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k; - register CHARTYPE *p, *q; - register CHARTYPE *ep; - register n1 = pat.patlen-1; - - s = base+pat.patlen-1; - e = base+n; - memset(e, pat.pat[pat.patlen-1], pat.patlen); - ep = pat.pat + pat.patlen-1; - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } -#endif - if(s >= e) - break; -#ifdef STATS - stats.slow++; -#endif - for(p = pat.pat, q = s-n1; p < ep; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*q++ != *p++) - goto mismatch; - } - nmatch++; - mismatch: - s++; -#ifdef STATS - stats.step[1]++; -#endif - } - return(nmatch); -} //GO.SYSIN DD uf.fwd.inc.c echo uf.fwd.md2.c 1>&2 sed 's/.//' >uf.fwd.md2.c <<'//GO.SYSIN DD uf.fwd.md2.c' -/* - search routine generated by gen. - skip=uf, match=fwd (using fwdr), shift=md2 -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; - int md2; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - register CHARTYPE *pmd2; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - d[*p] = 0; - skipc = (CHARTYPE *)p; - for(pmd2 = skipc-1; pmd2 >= pat.pat; pmd2--) - if (*pmd2 == *skipc) break; - pat.md2 = skipc - pmd2; /* *pmd2 is first leftward reoccurance of *pe */ -#ifdef STATS - stats.extra += pat.md2; -#endif -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k; - register CHARTYPE *p, *q; - register CHARTYPE *ep; - register n1 = pat.patlen-1; - register md2 = pat.md2; - - s = base+pat.patlen-1; - e = base+n; - memset(e, pat.pat[pat.patlen-1], pat.patlen); - ep = pat.pat + pat.patlen-1; - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } -#endif - if(s >= e) - break; -#ifdef STATS - stats.slow++; -#endif - for(p = pat.pat, q = s-n1; p < ep; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*q++ != *p++) - goto mismatch; - } - nmatch++; - mismatch: -#ifdef STATS - stats.step[md2]++; stats.jump++; -#endif - s += md2; - } - return(nmatch); -} //GO.SYSIN DD uf.fwd.md2.c echo uf.fwdg.inc.c 1>&2 sed 's/.//' >uf.fwdg.inc.c <<'//GO.SYSIN DD uf.fwdg.inc.c' -/* - search routine generated by gen. - skip=uf, match=fwd (using fwdr), guard=guardr (using guard), shift=inc -*/ -#include "freq.h" -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; - int rarec, rareoff; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - int rrr, rr; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - d[*p] = 0; - skipc = (CHARTYPE *)p; - rrr = 0; - for(rr = 1; rr < m; rr++){ - if(freq[pat.pat[rr]] < freq[pat.pat[rrr]]) - rrr = rr; - } - pat.rarec = pat.pat[rrr]; - pat.rareoff = rrr - (m-1); -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k; - register ro, rc; - register CHARTYPE *p, *q; - register CHARTYPE *ep; - register n1 = pat.patlen-1; - - s = base+pat.patlen-1; - e = base+n; - memset(e, pat.pat[pat.patlen-1], pat.patlen); - ro = pat.rareoff; - rc = pat.rarec; - ep = pat.pat + pat.patlen-1; - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } -#endif - if(s >= e) - break; -#ifdef STATS - stats.slow++; -#endif - if(s[ro] != rc) - goto mismatch; - for(p = pat.pat, q = s-n1; p < ep; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*q++ != *p++) - goto mismatch; - } - nmatch++; - mismatch: - s++; -#ifdef STATS - stats.step[1]++; -#endif - } - return(nmatch); -} //GO.SYSIN DD uf.fwdg.inc.c echo uf.fwdg.md2.c 1>&2 sed 's/.//' >uf.fwdg.md2.c <<'//GO.SYSIN DD uf.fwdg.md2.c' -/* - search routine generated by gen. - skip=uf, match=fwd (using fwdr), guard=guardr (using guard), shift=md2 -*/ -#include "freq.h" -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; - int rarec, rareoff; - int md2; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - int rrr, rr; - register CHARTYPE *pmd2; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - d[*p] = 0; - skipc = (CHARTYPE *)p; - rrr = 0; - for(rr = 1; rr < m; rr++){ - if(freq[pat.pat[rr]] < freq[pat.pat[rrr]]) - rrr = rr; - } - pat.rarec = pat.pat[rrr]; - pat.rareoff = rrr - (m-1); - for(pmd2 = skipc-1; pmd2 >= pat.pat; pmd2--) - if (*pmd2 == *skipc) break; - pat.md2 = skipc - pmd2; /* *pmd2 is first leftward reoccurance of *pe */ -#ifdef STATS - stats.extra += pat.md2; -#endif -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k; - register ro, rc; - register CHARTYPE *p, *q; - register CHARTYPE *ep; - register n1 = pat.patlen-1; - register md2 = pat.md2; - - s = base+pat.patlen-1; - e = base+n; - memset(e, pat.pat[pat.patlen-1], pat.patlen); - ro = pat.rareoff; - rc = pat.rarec; - ep = pat.pat + pat.patlen-1; - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } -#endif - if(s >= e) - break; -#ifdef STATS - stats.slow++; -#endif - if(s[ro] != rc) - goto mismatch; - for(p = pat.pat, q = s-n1; p < ep; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*q++ != *p++) - goto mismatch; - } - nmatch++; - mismatch: -#ifdef STATS - stats.step[md2]++; stats.jump++; -#endif - s += md2; - } - return(nmatch); -} //GO.SYSIN DD uf.fwdg.md2.c echo uf.fwdm.inc.c 1>&2 sed 's/.//' >uf.fwdm.inc.c <<'//GO.SYSIN DD uf.fwdm.inc.c' -/* - search routine generated by gen. - skip=uf, match=fwdm (using fwdmr), shift=inc -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - d[*p] = 0; - skipc = (CHARTYPE *)p; -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k; -#ifdef STATS - register CHARTYPE *p, *q; - register CHARTYPE *ep; -#else - register CHARTYPE *sp; -#endif - register n1; - - s = base+pat.patlen-1; - e = base+n; - memset(e, pat.pat[pat.patlen-1], pat.patlen); - n1 = pat.patlen-1; -#ifdef STATS - ep = pat.pat + n1; -#else - sp = pat.pat; -#endif - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } -#endif - if(s >= e) - break; -#ifdef STATS - stats.slow++; -#endif -#ifdef STATS - for(p = pat.pat, q = s-n1; p < ep; ){ - stats.cmp++; - if(*q++ != *p++) - goto mismatch; - } -#else - if(memcmp(sp, s-n1, n1)) /* warning: some memcmps don't care for n1==0 */ - goto mismatch; -#endif - nmatch++; - mismatch: - s++; -#ifdef STATS - stats.step[1]++; -#endif - } - return(nmatch); -} //GO.SYSIN DD uf.fwdm.inc.c echo uf.fwdmg.inc.c 1>&2 sed 's/.//' >uf.fwdmg.inc.c <<'//GO.SYSIN DD uf.fwdmg.inc.c' -/* - search routine generated by gen. - skip=uf, match=fwdm (using fwdmr), guard=guardr (using guard), shift=inc -*/ -#include "freq.h" -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; - int rarec, rareoff; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - int rrr, rr; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - d[*p] = 0; - skipc = (CHARTYPE *)p; - rrr = 0; - for(rr = 1; rr < m; rr++){ - if(freq[pat.pat[rr]] < freq[pat.pat[rrr]]) - rrr = rr; - } - pat.rarec = pat.pat[rrr]; - pat.rareoff = rrr - (m-1); -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k; - register ro, rc; -#ifdef STATS - register CHARTYPE *p, *q; - register CHARTYPE *ep; -#else - register CHARTYPE *sp; -#endif - register n1; - - s = base+pat.patlen-1; - e = base+n; - memset(e, pat.pat[pat.patlen-1], pat.patlen); - ro = pat.rareoff; - rc = pat.rarec; - n1 = pat.patlen-1; -#ifdef STATS - ep = pat.pat + n1; -#else - sp = pat.pat; -#endif - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } -#endif - if(s >= e) - break; -#ifdef STATS - stats.slow++; -#endif - if(s[ro] != rc) - goto mismatch; -#ifdef STATS - for(p = pat.pat, q = s-n1; p < ep; ){ - stats.cmp++; - if(*q++ != *p++) - goto mismatch; - } -#else - if(memcmp(sp, s-n1, n1)) /* warning: some memcmps don't care for n1==0 */ - goto mismatch; -#endif - nmatch++; - mismatch: - s++; -#ifdef STATS - stats.step[1]++; -#endif - } - return(nmatch); -} //GO.SYSIN DD uf.fwdmg.inc.c echo uf.om.inc.c 1>&2 sed 's/.//' >uf.om.inc.c <<'//GO.SYSIN DD uf.om.inc.c' -/* - search routine generated by gen. - skip=uf, match=om (using omr), shift=inc -*/ -#include "freq.h" -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -static struct om -{ - int loc; - CHARTYPE c; -}; - -om_pcmp(p1, p2) - register struct om *p1, *p2; -{ - register float f = freq[p1->c] - freq[p2->c]; - - if(f < 0) - return(-1); - else if(f > 0) - return(1); - return(p2->loc - p1->loc); -} -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; - struct om om[1024]; - int nom; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - register struct om *op; - register CHARTYPE *opb, *ope; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - d[*p] = 0; - skipc = (CHARTYPE *)p; - for(op = pat.om, opb = pat.pat, ope = opb+m-1; opb < ope; opb++){ - op->loc = opb - ope; - op->c = *opb; - op++; - } - qsort(pat.om, pat.nom = op-pat.om, sizeof(pat.om[0]), om_pcmp); -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k; - register struct om *op, *oep; - - s = base+pat.patlen-1; - e = base+n; - memset(e, pat.pat[pat.patlen-1], pat.patlen); - oep = pat.om+pat.nom; - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } -#endif - if(s >= e) - break; -#ifdef STATS - stats.slow++; -#endif - for(op = pat.om; op < oep; ++op){ -#ifdef STATS - stats.cmp++; -#endif - if(op->c != s[op->loc]) - goto mismatch; - } - nmatch++; - mismatch: - s++; -#ifdef STATS - stats.step[1]++; -#endif - } - return(nmatch); -} //GO.SYSIN DD uf.om.inc.c echo uf.om.md2.c 1>&2 sed 's/.//' >uf.om.md2.c <<'//GO.SYSIN DD uf.om.md2.c' -/* - search routine generated by gen. - skip=uf, match=om (using omr), shift=md2 -*/ -#include "freq.h" -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -static struct om -{ - int loc; - CHARTYPE c; -}; - -om_pcmp(p1, p2) - register struct om *p1, *p2; -{ - register float f = freq[p1->c] - freq[p2->c]; - - if(f < 0) - return(-1); - else if(f > 0) - return(1); - return(p2->loc - p1->loc); -} -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; - struct om om[1024]; - int nom; - int md2; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - register struct om *op; - register CHARTYPE *opb, *ope; - register CHARTYPE *pmd2; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - d[*p] = 0; - skipc = (CHARTYPE *)p; - for(op = pat.om, opb = pat.pat, ope = opb+m-1; opb < ope; opb++){ - op->loc = opb - ope; - op->c = *opb; - op++; - } - qsort(pat.om, pat.nom = op-pat.om, sizeof(pat.om[0]), om_pcmp); - for(pmd2 = skipc-1; pmd2 >= pat.pat; pmd2--) - if (*pmd2 == *skipc) break; - pat.md2 = skipc - pmd2; /* *pmd2 is first leftward reoccurance of *pe */ -#ifdef STATS - stats.extra += pat.md2; -#endif -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k; - register struct om *op, *oep; - register md2 = pat.md2; - - s = base+pat.patlen-1; - e = base+n; - memset(e, pat.pat[pat.patlen-1], pat.patlen); - oep = pat.om+pat.nom; - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } -#endif - if(s >= e) - break; -#ifdef STATS - stats.slow++; -#endif - for(op = pat.om; op < oep; ++op){ -#ifdef STATS - stats.cmp++; -#endif - if(op->c != s[op->loc]) - goto mismatch; - } - nmatch++; - mismatch: -#ifdef STATS - stats.step[md2]++; stats.jump++; -#endif - s += md2; - } - return(nmatch); -} //GO.SYSIN DD uf.om.md2.c echo uf.rev.d1.c 1>&2 sed 's/.//' >uf.rev.d1.c <<'//GO.SYSIN DD uf.rev.d1.c' -/* - search routine generated by gen. - skip=uf, match=rev (using revr), shift=d1 -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; - Tab delta1[256]; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - register Tab *d1; - register j1; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - d[*p] = 0; - skipc = (CHARTYPE *)p; - d1 = pat.delta1; - for(j1 = 0; j1 < 256; j1++) - d1[j1] = m; - for(j1 = 0; j1 < m; j1++) - d1[base[j1]] = m-1-j1; -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k; - register CHARTYPE *p, *q; - register CHARTYPE *prev = pat.pat+pat.patlen-1; - register Tab *d1 = pat.delta1; - register k1; - - s = base+pat.patlen-1; - e = base+n; - memset(e, pat.pat[pat.patlen-1], pat.patlen); - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } -#endif - if(s >= e) - break; -#ifdef STATS - stats.slow++; -#endif -#define RH s - for(p = prev, q = RH; p > pat.pat; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*--q != *--p) - goto mismatch; - } - nmatch++; - mismatch: - k1 = q+d1[*q]-RH; - if(k1 < 1) - k1 = 1; -#ifdef STATS - stats.step[k1]++; stats.jump++; -#endif - s += k1; - } - return(nmatch); -} //GO.SYSIN DD uf.rev.d1.c echo uf.rev.d12.c 1>&2 sed 's/.//' >uf.rev.d12.c <<'//GO.SYSIN DD uf.rev.d12.c' -/* - search routine generated by gen. - skip=uf, match=rev (using revr), shift=d12 -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; - Tab delta1[256]; - Tab delta2[257]; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - register Tab *d2; - register q1, tp, t, qp, jp, kp; - Tab f[256], f1[256]; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - d[*p] = 0; - skipc = (CHARTYPE *)p; - d2 = pat.delta1; - for(j = 0; j < 256; j++) - d2[j] = m; - for(j = 0; j < m; j++) - d2[base[j]] = m-1-j; - d2 = pat.delta2; - for(j = 1; j < m; j++) - d2[j] = 2*m-j; - for(j = m, t = m+1; j > 0; j--, t--){ - f[j] = t; - while((t <= m) && (base[t-1] != base[j-1])){ - if((m-j) < d2[t]) - d2[t] = m-j; - t = f[t]; - } - } - q1 = t; - t = m+1-q1; - qp = 1; - for(jp = 1, kp = 0; kp < t; jp++, kp++){ - f1[jp] = kp; - while((kp >= 1) && (base[jp-1] != base[kp-1])) - kp = f1[kp]; - } - while(q1 < m){ - for(j = qp; j <= q1; j++) - if(m+q1-j < d2[j]) - d2[j] = m+q1-j; - qp = q1+1; - q1 += t-f1[t]; - t = f1[t]; - } -/*for(j=1; j<=m; j++)printf("[%d]=%d ", j, d2[j]); printf("\n");/**/ - d2[0] = m+1; /* the case where the match succeeded */ -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k; - register CHARTYPE *p, *q; - register CHARTYPE *prev = pat.pat+pat.patlen-1; - register Tab *d2 = pat.delta2+1; - register k1; - - s = base+pat.patlen-1; - e = base+n; - memset(e, pat.pat[pat.patlen-1], pat.patlen); - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } -#endif - if(s >= e) - break; -#ifdef STATS - stats.slow++; -#endif -#define RH s - for(p = prev, q = RH; p > pat.pat; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*--q != *--p) - goto mismatch; - } - nmatch++; - mismatch: - k = d2[p-pat.pat]; - k1 = d0[*q]; - if(k < k1) - k = k1; -#ifdef STATS - stats.step[q+k-s]++; stats.jump++; -#endif - s = q+k; - } - return(nmatch); -} //GO.SYSIN DD uf.rev.d12.c echo uf.rev.d2.c 1>&2 sed 's/.//' >uf.rev.d2.c <<'//GO.SYSIN DD uf.rev.d2.c' -/* - search routine generated by gen. - skip=uf, match=rev (using revr), shift=d2 -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; - Tab delta2[257]; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - register Tab *d2; - register q1, tp, t, qp, jp, kp; - Tab f[256], f1[256]; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - d[*p] = 0; - skipc = (CHARTYPE *)p; - d2 = pat.delta2; - for(j = 1; j < m; j++) - d2[j] = 2*m-j; - for(j = m, t = m+1; j > 0; j--, t--){ - f[j] = t; - while((t <= m) && (base[t-1] != base[j-1])){ - if((m-j) < d2[t]) - d2[t] = m-j; - t = f[t]; - } - } - q1 = t; - t = m+1-q1; - qp = 1; - for(jp = 1, kp = 0; kp < t; jp++, kp++){ - f1[jp] = kp; - while((kp >= 1) && (base[jp-1] != base[kp-1])) - kp = f1[kp]; - } - while(q1 < m){ - for(j = qp; j <= q1; j++) - if(m+q1-j < d2[j]) - d2[j] = m+q1-j; - qp = q1+1; - q1 += t-f1[t]; - t = f1[t]; - } -/*for(j=1; j<=m; j++)printf("[%d]=%d ", j, d2[j]); printf("\n");/**/ - d2[0] = m+1; /* the case where the match succeeded */ -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k; - register CHARTYPE *p, *q; - register CHARTYPE *prev = pat.pat+pat.patlen-1; - register Tab *d2 = pat.delta2+1; - register k2; - - s = base+pat.patlen-1; - e = base+n; - memset(e, pat.pat[pat.patlen-1], pat.patlen); - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } -#endif - if(s >= e) - break; -#ifdef STATS - stats.slow++; -#endif -#define RH s - for(p = prev, q = RH; p > pat.pat; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*--q != *--p) - goto mismatch; - } - nmatch++; - mismatch: - k2 = q+d2[p-pat.pat]-RH; -#ifdef STATS - stats.step[k2]++; stats.jump++; -#endif - s += k2; - } - return(nmatch); -} //GO.SYSIN DD uf.rev.d2.c echo uf.rev.gd2.c 1>&2 sed 's/.//' >uf.rev.gd2.c <<'//GO.SYSIN DD uf.rev.gd2.c' -/* - search routine generated by gen. - skip=uf, match=rev (using revr), shift=gd2 -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; - Tab dg[MAXPAT][128]; /* bad size but the 386 is small (128 is charset) */ -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - register j0, k, q, i, jj; - int endof[MAXPAT], rmin[MAXPAT]; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - d[*p] = 0; - skipc = (CHARTYPE *)p; - /* - endof[k] is the maximal integer such that k is not a period - rmin[jj] is the minimal period of p[0,m-1] > jj - rmin[0] is the period of pat - */ - - for(i=0; i= 0; k--){ - for(i = k, jj = m-1; pat.pat[i] == pat.pat[jj]; i--, jj--) - ; - if((i >= 0) && (pat.dg[jj][pat.pat[i]]>=m)) - pat.dg[jj][pat.pat[i]] = m-1-i; - } -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k; - register CHARTYPE *p, *q; - register CHARTYPE *prev = pat.pat+pat.patlen-1; - register kg; - - s = base+pat.patlen-1; - e = base+n; - memset(e, pat.pat[pat.patlen-1], pat.patlen); - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } -#endif - if(s >= e) - break; -#ifdef STATS - stats.slow++; -#endif -#define RH s - for(p = prev, q = RH; p > pat.pat; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*--q != *--p) - goto mismatch; - } - nmatch++; - mismatch: - if(p < pat.pat) - kg = pat.patlen+1; - else - kg = pat.dg[p-pat.pat][*q]; -#ifdef STATS - stats.step[q+kg-s]++; stats.extra++; -#endif - s = q+kg; - } - return(nmatch); -} //GO.SYSIN DD uf.rev.gd2.c echo uf.rev.inc.c 1>&2 sed 's/.//' >uf.rev.inc.c <<'//GO.SYSIN DD uf.rev.inc.c' -/* - search routine generated by gen. - skip=uf, match=rev (using revr), shift=inc -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - d[*p] = 0; - skipc = (CHARTYPE *)p; -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k; - register CHARTYPE *p, *q; - register CHARTYPE *prev = pat.pat+pat.patlen-1; - - s = base+pat.patlen-1; - e = base+n; - memset(e, pat.pat[pat.patlen-1], pat.patlen); - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } -#endif - if(s >= e) - break; -#ifdef STATS - stats.slow++; -#endif -#define RH s - for(p = prev, q = RH; p > pat.pat; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*--q != *--p) - goto mismatch; - } - nmatch++; - mismatch: - s++; -#ifdef STATS - stats.step[1]++; -#endif - } - return(nmatch); -} //GO.SYSIN DD uf.rev.inc.c echo uf.rev.md2.c 1>&2 sed 's/.//' >uf.rev.md2.c <<'//GO.SYSIN DD uf.rev.md2.c' -/* - search routine generated by gen. - skip=uf, match=rev (using revr), shift=md2 -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; - int md2; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - register CHARTYPE *pmd2; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - d[*p] = 0; - skipc = (CHARTYPE *)p; - for(pmd2 = skipc-1; pmd2 >= pat.pat; pmd2--) - if (*pmd2 == *skipc) break; - pat.md2 = skipc - pmd2; /* *pmd2 is first leftward reoccurance of *pe */ -#ifdef STATS - stats.extra += pat.md2; -#endif -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k; - register CHARTYPE *p, *q; - register CHARTYPE *prev = pat.pat+pat.patlen-1; - register md2 = pat.md2; - - s = base+pat.patlen-1; - e = base+n; - memset(e, pat.pat[pat.patlen-1], pat.patlen); - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } -#endif - if(s >= e) - break; -#ifdef STATS - stats.slow++; -#endif -#define RH s - for(p = prev, q = RH; p > pat.pat; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*--q != *--p) - goto mismatch; - } - nmatch++; - mismatch: -#ifdef STATS - stats.step[md2]++; stats.jump++; -#endif - s += md2; - } - return(nmatch); -} //GO.SYSIN DD uf.rev.md2.c echo uf.rev.sd1.c 1>&2 sed 's/.//' >uf.rev.sd1.c <<'//GO.SYSIN DD uf.rev.sd1.c' -/* - search routine generated by gen. - skip=uf, match=rev (using revr), shift=sd1r -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; - Tab sdelta1[256]; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - register Tab *sd1; - register js1; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - d[*p] = 0; - skipc = (CHARTYPE *)p; - sd1 = pat.sdelta1; - for(js1 = 0; js1 < 256; js1++) - sd1[js1] = m+1; - for(js1 = 0; js1 < m; js1++) - sd1[base[js1]] = m-js1; -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k; - register CHARTYPE *p, *q; - register CHARTYPE *prev = pat.pat+pat.patlen-1; - register Tab *sd1 = pat.sdelta1; - register m; - - s = base+pat.patlen-1; - e = base+n; - memset(e, pat.pat[pat.patlen-1], pat.patlen); - m = pat.patlen; - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } -#endif - if(s >= e) - break; -#ifdef STATS - stats.slow++; -#endif -#define RH s - for(p = prev, q = RH; p > pat.pat; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*--q != *--p) - goto mismatch; - } - nmatch++; - mismatch: -#ifdef STATS - stats.step[sd1[s[1]]]++; -#endif - s += sd1[s[1]]; - } - return(nmatch); -} //GO.SYSIN DD uf.rev.sd1.c echo uf.rev.sdmd2.c 1>&2 sed 's/.//' >uf.rev.sdmd2.c <<'//GO.SYSIN DD uf.rev.sdmd2.c' -/* - search routine generated by gen. - skip=uf, match=rev (using revr), shift=sdmd2r -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; - Tab sdelta1[256]; - int md2; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - register Tab *d1; - register j1, j2; - register CHARTYPE *pmd2; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - d[*p] = 0; - skipc = (CHARTYPE *)p; - d1 = pat.sdelta1; - for(pmd2 = skipc-1; pmd2 >= pat.pat; pmd2--) - if (*pmd2 == *skipc) break; - j2 = skipc - pmd2; /* *pmd2 is first leftward reoccurance of *pe */ - if(j2 < m+1) - j2 = m+1; - for(j1 = 0; j1 < 256; j1++) - d1[j1] = j2; - j2 = skipc - pmd2; /* *pmd2 is first leftward reoccurance of *pe */ - for(j1 = 0; j1 < m; j1++) - d1[base[j1]] = ((m-j1)= e) - break; -#ifdef STATS - stats.slow++; -#endif -#define RH s - for(p = prev, q = RH; p > pat.pat; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*--q != *--p) - goto mismatch; - } - nmatch++; - mismatch: -#ifdef STATS - stats.step[d1[s[1]]]++; -#endif - s += d1[s[1]]; - } - return(nmatch); -} //GO.SYSIN DD uf.rev.sdmd2.c echo uf.revg.inc.c 1>&2 sed 's/.//' >uf.revg.inc.c <<'//GO.SYSIN DD uf.revg.inc.c' -/* - search routine generated by gen. - skip=uf, match=rev (using revr), guard=guardr (using guard), shift=inc -*/ -#include "freq.h" -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; - int rarec, rareoff; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - int rrr, rr; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - d[*p] = 0; - skipc = (CHARTYPE *)p; - rrr = 0; - for(rr = 1; rr < m; rr++){ - if(freq[pat.pat[rr]] < freq[pat.pat[rrr]]) - rrr = rr; - } - pat.rarec = pat.pat[rrr]; - pat.rareoff = rrr - (m-1); -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k; - register ro, rc; - register CHARTYPE *p, *q; - register CHARTYPE *prev = pat.pat+pat.patlen-1; - - s = base+pat.patlen-1; - e = base+n; - memset(e, pat.pat[pat.patlen-1], pat.patlen); - ro = pat.rareoff; - rc = pat.rarec; - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } -#endif - if(s >= e) - break; -#ifdef STATS - stats.slow++; -#endif - if(s[ro] != rc) - goto mismatch; -#define RH s - for(p = prev, q = RH; p > pat.pat; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*--q != *--p) - goto mismatch; - } - nmatch++; - mismatch: - s++; -#ifdef STATS - stats.step[1]++; -#endif - } - return(nmatch); -} //GO.SYSIN DD uf.revg.inc.c echo uf1.fwd.inc.c 1>&2 sed 's/.//' >uf1.fwd.inc.c <<'//GO.SYSIN DD uf1.fwd.inc.c' -/* - search routine generated by gen. - skip=uf1, match=fwd (using fwdr), shift=inc -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - d[*p] = 0; - skipc = (CHARTYPE *)p; -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k; - register CHARTYPE *p, *q; - register CHARTYPE *ep; - register n1 = pat.patlen-1; - - s = base+pat.patlen-1; - e = base+n; - memset(e, pat.pat[pat.patlen-1], pat.patlen); - ep = pat.pat + pat.patlen-1; - while(s < e){ - k = d0[*s]; -#ifdef STATS - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } -#else - while(k = d0[*(s += k)]) - ; -/* while(k){ - k = d0[*(s += k)]; - } -*/ -#endif - if(s >= e) - break; -#ifdef STATS - stats.slow++; -#endif - for(p = pat.pat, q = s-n1; p < ep; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*q++ != *p++) - goto mismatch; - } - nmatch++; - mismatch: - s++; -#ifdef STATS - stats.step[1]++; -#endif - } - return(nmatch); -} //GO.SYSIN DD uf1.fwd.inc.c echo uf2.fwd.inc.c 1>&2 sed 's/.//' >uf2.fwd.inc.c <<'//GO.SYSIN DD uf2.fwd.inc.c' -/* - search routine generated by gen. - skip=uf2, match=fwd (using fwdr), shift=inc -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - d[*p] = 0; - skipc = (CHARTYPE *)p; -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k; - register CHARTYPE *p, *q; - register CHARTYPE *ep; - register n1 = pat.patlen-1; - - s = base+pat.patlen-1; - e = base+n; - memset(e, pat.pat[pat.patlen-1], pat.patlen); - ep = pat.pat + pat.patlen-1; - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } -#endif - if(s >= e) - break; -#ifdef STATS - stats.slow++; -#endif - for(p = pat.pat, q = s-n1; p < ep; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*q++ != *p++) - goto mismatch; - } - nmatch++; - mismatch: - s++; -#ifdef STATS - stats.step[1]++; -#endif - } - return(nmatch); -} //GO.SYSIN DD uf2.fwd.inc.c echo uf3.fwd.inc.c 1>&2 sed 's/.//' >uf3.fwd.inc.c <<'//GO.SYSIN DD uf3.fwd.inc.c' -/* - search routine generated by gen. - skip=uf3, match=fwd (using fwdr), shift=inc -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - d[*p] = 0; - skipc = (CHARTYPE *)p; -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k; - register CHARTYPE *p, *q; - register CHARTYPE *ep; - register n1 = pat.patlen-1; - - s = base+pat.patlen-1; - e = base+n; - memset(e, pat.pat[pat.patlen-1], pat.patlen); - ep = pat.pat + pat.patlen-1; - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } -#endif - if(s >= e) - break; -#ifdef STATS - stats.slow++; -#endif - for(p = pat.pat, q = s-n1; p < ep; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*q++ != *p++) - goto mismatch; - } - nmatch++; - mismatch: - s++; -#ifdef STATS - stats.step[1]++; -#endif - } - return(nmatch); -} //GO.SYSIN DD uf3.fwd.inc.c echo uf4.fwd.inc.c 1>&2 sed 's/.//' >uf4.fwd.inc.c <<'//GO.SYSIN DD uf4.fwd.inc.c' -/* - search routine generated by gen. - skip=uf4, match=fwd (using fwdr), shift=inc -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - d[*p] = 0; - skipc = (CHARTYPE *)p; -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k; - register CHARTYPE *p, *q; - register CHARTYPE *ep; - register n1 = pat.patlen-1; - - s = base+pat.patlen-1; - e = base+n; - memset(e, pat.pat[pat.patlen-1], pat.patlen); - ep = pat.pat + pat.patlen-1; - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } -#endif - if(s >= e) - break; -#ifdef STATS - stats.slow++; -#endif - for(p = pat.pat, q = s-n1; p < ep; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*q++ != *p++) - goto mismatch; - } - nmatch++; - mismatch: - s++; -#ifdef STATS - stats.step[1]++; -#endif - } - return(nmatch); -} //GO.SYSIN DD uf4.fwd.inc.c echo uf5.fwd.inc.c 1>&2 sed 's/.//' >uf5.fwd.inc.c <<'//GO.SYSIN DD uf5.fwd.inc.c' -/* - search routine generated by gen. - skip=uf5, match=fwd (using fwdr), shift=inc -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - d[*p] = 0; - skipc = (CHARTYPE *)p; -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k; - register CHARTYPE *p, *q; - register CHARTYPE *ep; - register n1 = pat.patlen-1; - - s = base+pat.patlen-1; - e = base+n; - memset(e, pat.pat[pat.patlen-1], pat.patlen); - ep = pat.pat + pat.patlen-1; - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } -#endif - if(s >= e) - break; -#ifdef STATS - stats.slow++; -#endif - for(p = pat.pat, q = s-n1; p < ep; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*q++ != *p++) - goto mismatch; - } - nmatch++; - mismatch: - s++; -#ifdef STATS - stats.step[1]++; -#endif - } - return(nmatch); -} //GO.SYSIN DD uf5.fwd.inc.c echo uf6.fwd.inc.c 1>&2 sed 's/.//' >uf6.fwd.inc.c <<'//GO.SYSIN DD uf6.fwd.inc.c' -/* - search routine generated by gen. - skip=uf6, match=fwd (using fwdr), shift=inc -*/ -/* - * The authors of this software are Andrew Hume and Daniel Sunday. - * - * Copyright (c) 1991 by AT&T and Daniel Sunday. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef CHARTYPE -#define CHARTYPE unsigned char -#endif -#define MAXPAT 256 - -#include "stats.h" - -#ifndef TABTYPE -#define TABTYPE long -#endif -typedef TABTYPE Tab; - -static struct -{ - int patlen; - CHARTYPE pat[MAXPAT]; - Tab delta[256]; -} pat; - -prep(base, m) - CHARTYPE *base; - register m; -{ - CHARTYPE *skipc; - register CHARTYPE *pe, *p; - register int j; - register Tab *d; - - pat.patlen = m; - if(m > MAXPAT) - abort(); - memcpy(pat.pat, base, m); - skipc = 0; - stats.len = m; - d = pat.delta; - for(j = 0; j < 256; j++) - d[j] = pat.patlen; - for(p = pat.pat, pe = p+m-1; p < pe; p++) - d[*p] = pe-p; - d[*p] = 0; - skipc = (CHARTYPE *)p; -} - -exec(base, n) - CHARTYPE *base; -{ - int nmatch = 0; - register CHARTYPE *e, *s; - register Tab *d0 = pat.delta; - register k; - register CHARTYPE *p, *q; - register CHARTYPE *ep; - register n1 = pat.patlen-1; - - s = base+pat.patlen-1; - e = base+n; - memset(e, pat.pat[pat.patlen-1], pat.patlen); - ep = pat.pat + pat.patlen-1; - while(s < e){ -#ifdef STATS - k = d0[*s]; - stats.jump++; - while(k){ - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - stats.jump++; stats.step[k]++; - k = d0[*(s += k)]; - } -#else - k = d0[*s]; - while(k){ - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - k = d0[*(s += k)]; - } -#endif - if(s >= e) - break; -#ifdef STATS - stats.slow++; -#endif - for(p = pat.pat, q = s-n1; p < ep; ){ -#ifdef STATS - stats.cmp++; -#endif - if(*q++ != *p++) - goto mismatch; - } - nmatch++; - mismatch: - s++; -#ifdef STATS - stats.step[1]++; -#endif - } - return(nmatch); -} //GO.SYSIN DD uf6.fwd.inc.c # To unbundle, sh this file echo stats.h 1>&2 sed 's/.//' >stats.h <<'//GO.SYSIN DD stats.h' -#define NSTEP 100 -extern struct stats -{ - int len; - long step[NSTEP]; - long cmp, jump; - long slow; - long extra; -} stats; //GO.SYSIN DD stats.h echo freq.h 1>&2 sed 's/.//' >freq.h <<'//GO.SYSIN DD freq.h' -double freq[256] = { /* from bible */ - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0.19678944589340289, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0.068624293966110375, 0.012012576603676977, 0.013604653023345121, 0.039255884282445558, 0.10223990751556075, 0.020664991919612141, 0.013721658639614701, - 0.070510384498455925, 0.047949301566475193, 0.0022361073331519914, 0.005534265644750948, 0.032310550906443511, 0.019892954861833369, 0.05602168904107397, 0.060073883546410231, - 0.010594508536409747, 0.00022101060850920844, 0.041845008560410901, 0.046876250060002879, 0.078988791461990171, 0.020636990575547628, 0.0075783637614605503, 0.016154775429220603, - 0.00037401795286173736, 0.014536697761492553, 0.00075103604973038708, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; //GO.SYSIN DD freq.h echo sd.h 1>&2 sed 's/.//' >sd.h <<'//GO.SYSIN DD sd.h' -static float sd[104] = { - 1.00, 1.96, 2.85, 3.73, 4.54, 5.29, 6.02, 6.73, - 7.40, 8.03, 8.65, 9.25, 9.88, 10.55, 11.04, 11.75, - 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, - 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, - 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, - 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, - 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, - 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, - 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, - 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, - 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, - 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, - 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, 11.75, -}; //GO.SYSIN DD sd.h echo main.c 1>&2 sed 's/.//' >main.c <<'//GO.SYSIN DD main.c' -#include -#include "stats.h" - -#define NTIME 1000 - -struct stats stats; -char buf[1001025]; -char wbuf[101000]; -long tm[NTIME+1]; -int nbuf; -extern int hz; -int option = -1; - -cmp(a, b) - long *a, *b; -{ - if(*a < *b) - return(-1); - else - return((*a > *b)? 1:0); -} - -main(argc, argv) - char **argv; -{ - int c, cnt; - int npreproc = 1; - int nexec = 1; - long tp, te, t; - long *tmp = tm; - int nmatched, len; - long nf, nw; - long nstep, tstep; - double var, mean; - char *s, *ss, *sys = "?"; - int percent = 0; - extern char *optarg; - extern int optind; - - while((c = getopt(argc, argv, "%e:p:s:o:")) != -1) - switch(c) - { - case 'p': npreproc = atoi(optarg); break; - case 'e': nexec = atoi(optarg); break; - case 's': sys = optarg; break; - case 'o': option = atoi(optarg); break; - case '%': percent = 1; break; - default: goto usage; - } - if((optind >= argc) || (optind+2 < argc)){ -usage: - fprintf(stderr, "usage: %s [-e nexec] [-p npreproc] [string] file\n", argv[0]); - exit(1); - } - if((c = open(argv[argc-1], 0)) < 0){ - perror(argv[argc-1]); - exit(1); - } - nbuf = read(c, buf+1, sizeof buf-1025); - close(c); - if(optind+2 == argc){ - te = strlen(argv[optind]); - strcpy(wbuf, argv[optind]); - wbuf[te+1] = 0; - } else { - s = wbuf; - while((c = getchar()) != EOF) - *s++ = (c=='\n')? 0:c; - *s = 0; - } - tp = te = 0; - nf = nw = 0; - var = 0; -#ifdef STATS - for(c = 0; c < NSTEP; c++) - stats.step[c] = 0; - stats.jump = 0; - stats.cmp = 0; - stats.slow = 0; - stats.extra = 0; - nmatched = 0; -#endif - for(s = wbuf; *s;){ - nw++; - /* convert # to \n so we can do multiword matches */ - ss = s; - while(*s){ - if(*s == '#') - *s = '\n'; - s++; - } - len = s-ss; - s++; - startclock(); - for(c = 0; c < npreproc; c++) - prep(ss, len); - tp += stopclock(); - startclock(); - for(c = 0; c < nexec; c++){ - if(cnt = exec(buf+1, nbuf)) - nmatched++; - nf += cnt; - } - te += (t = stopclock()); - if(tmp < &tm[NTIME]) - *tmp++ = t; - var += t*1.0*t; - } -#ifdef STATS - for(nstep = tstep = 0, c = 0; c < NSTEP; c++) - if(stats.step[c]){ -/* printf("n(%d)=%d\n", c, stats.step[c]);/**/ - nstep += stats.step[c]; - tstep += stats.step[c]*c; - } - printf("sys=%s alg=%s match=%d ninput=%d step=%.2f cmp+jump=%.1f(%.1f%%)(%.1f+%.1f) slow=%.1f nmatched=%d extra=%.2f\n", sys, argv[0], nf, nbuf, - tstep/(nstep*(float)nexec), - 1.*(stats.cmp+stats.jump)/nw, (stats.cmp+stats.jump)*100./(nbuf*nw), - 1.*stats.cmp/nw, 1.0*stats.jump/nw, 1.0*stats.slow/nw, nmatched, - 1.0*stats.extra/nw); -#else - printf("sys=%s alg=%s nw=%d match=%d p=%.4fs(%d/%d) e=%.4fs(%d/%d)\n", - sys, argv[0], nw, nf/nexec, - (tp*1.0)/(hz*npreproc), tp, npreproc, - (te*1.0)/(hz*nexec), te, nexec); - if(percent){ - mean = te/nw; - printf("%% %.8e", (var/nw-mean*mean)/(hz*hz*nexec)); - qsort(tm, nw, sizeof(tm[0]), cmp); - tm[nw] = tm[nw-1]; - for(c = 0; c <= 20; c++) - printf(" %.4e", (1.0*tm[(c*nw)/20])/(hz*nexec)); - printf("\n"); - } -#endif - exit(0); -} //GO.SYSIN DD main.c echo Mk/370 1>&2 sed 's/.//' >Mk/370 <<'//GO.SYSIN DD Mk/370' -COPT=-O -CFLAGS= //GO.SYSIN DD Mk/370 echo Mk/386 1>&2 sed 's/.//' >Mk/386 <<'//GO.SYSIN DD Mk/386' -COPT=-O -CFLAGS= //GO.SYSIN DD Mk/386 echo Mk/68k 1>&2 sed 's/.//' >Mk/68k <<'//GO.SYSIN DD Mk/68k' -COPT=-O4 -CFLAGS=-Usun //GO.SYSIN DD Mk/68k echo Mk/common 1>&2 sed 's/.//' >Mk/common <<'//GO.SYSIN DD Mk/common' -.SUFFIXES: .c .t .s - -.c.t: - $(CC) $(CFLAGS) $(COPT) $*.c sys/$(SYS).c main.c -o $*.t -.c.s: - rm -f $*.s; $(CC) $(CFLAGS) -DSTATS $*.c sys/$(SYS).c main.c -o $*.s - -clean: - rm -f *.[oustx] *.Addrs *.Counts *.pixie core *.pix - -src: *.[ch] Mk/* sys/*.[ch] mk runall - (echo mkdir Mk sys; bundle runall *.[ch] Mk/* sys/*.[ch] mk rand.500 bible; echo chmod 777 mk runall) > src //GO.SYSIN DD Mk/common echo Mk/cray 1>&2 sed 's/.//' >Mk/cray <<'//GO.SYSIN DD Mk/cray' -COPT=-O -CFLAGS= //GO.SYSIN DD Mk/cray echo Mk/mips 1>&2 sed 's/.//' >Mk/mips <<'//GO.SYSIN DD Mk/mips' -COPT=-O3 -CFLAGS= //GO.SYSIN DD Mk/mips echo Mk/sparc 1>&2 sed 's/.//' >Mk/sparc <<'//GO.SYSIN DD Mk/sparc' -COPT=-O4 -CFLAGS=-Usun //GO.SYSIN DD Mk/sparc echo Mk/vax 1>&2 sed 's/.//' >Mk/vax <<'//GO.SYSIN DD Mk/vax' -COPT=-O -CFLAGS= //GO.SYSIN DD Mk/vax echo sys/370.c 1>&2 sed 's/.//' >sys/370.c <<'//GO.SYSIN DD sys/370.c' -#include -#include -#include - -int hz = HZ; -double tcmp = 3.0; - -static struct tms start; - -startclock() -{ - times(&start); -} - -stopclock() -{ - struct tms t; - - times(&t); - return(t.tms_utime - start.tms_utime); -} //GO.SYSIN DD sys/370.c echo sys/386.c 1>&2 sed 's/.//' >sys/386.c <<'//GO.SYSIN DD sys/386.c' -#include -#include -#include - -int hz = HZ; -double tcmp = 4.91; - -static struct tms start; - -startclock() -{ - times(&start); -} - -stopclock() -{ - struct tms t; - - times(&t); - return(t.tms_utime - start.tms_utime); -} //GO.SYSIN DD sys/386.c echo sys/68k.c 1>&2 sed 's/.//' >sys/68k.c <<'//GO.SYSIN DD sys/68k.c' -#include -#include -#include - -int hz = HZ; -double tcmp = 2.97; - -static struct tms start; - -startclock() -{ - times(&start); -} - -stopclock() -{ - struct tms t; - - times(&t); - return(t.tms_utime - start.tms_utime); -} //GO.SYSIN DD sys/68k.c echo sys/cray.c 1>&2 sed 's/.//' >sys/cray.c <<'//GO.SYSIN DD sys/cray.c' -#include -#include -#include - -int hz = HZ; -double tcmp = 3.34; - -static struct tms start; - -startclock() -{ - times(&start); -} - -stopclock() -{ - struct tms t; - - times(&t); - return(t.tms_utime - start.tms_utime); -} //GO.SYSIN DD sys/cray.c echo sys/mips.c 1>&2 sed 's/.//' >sys/mips.c <<'//GO.SYSIN DD sys/mips.c' -#include -#include -#include - -int hz = HZ; -double tcmp = 3.29; - -static struct tms start; - -startclock() -{ - times(&start); -} - -stopclock() -{ - struct tms t; - - times(&t); - return(t.tms_utime - start.tms_utime); -} //GO.SYSIN DD sys/mips.c echo sys/sparc.c 1>&2 sed 's/.//' >sys/sparc.c <<'//GO.SYSIN DD sys/sparc.c' -#include -#include -#include - -int hz = HZ; -double tcmp = 3.04; - -static struct tms start; - -startclock() -{ - times(&start); -} - -stopclock() -{ - struct tms t; - - times(&t); - return(t.tms_utime - start.tms_utime); -} //GO.SYSIN DD sys/sparc.c echo sys/vax.c 1>&2 sed 's/.//' >sys/vax.c <<'//GO.SYSIN DD sys/vax.c' -#include -#include - -int hz = 60; -double tcmp = 3.86; - -static struct tms start; - -startclock() -{ - times(&start); -} - -stopclock() -{ - struct tms t; - - times(&t); - return(t.tms_utime - start.tms_utime); -} //GO.SYSIN DD sys/vax.c echo mk 1>&2 sed 's/.//' >mk <<'//GO.SYSIN DD mk' -#! /bin/sh -SYS="${SYS-mips}" -make -f Mk/$SYS -f Mk/common SYS="$SYS" "$@" //GO.SYSIN DD mk echo README 1>&2 sed 's/.//' >README <<'//GO.SYSIN DD README' - This testing harness stuff supports two portability problems. - -1) how do you tell the time? This is solved in Posix but we don't have those - yet. Until then, you have to supply startclock/stopclock functions. -2) what is the fastest compiler? (or which compiler would you like to use?) - again, no common answer. - - So, you wanna port this to a new system? Easy. First, pick a new -system name, say ``poot''. You have to create a Mk/poot which specifies the -compiler and options of your choice. Set COPT to be a flag like -O -and if you need weird flags (like -g or something), set CFLAGS. And of course, -if needed, set CC. These are all parts of a makefile. - - secondly, create a sys/poot.c, most likely by copying an existing -such file. all it does is define startclock and stopclock and an integer ``hz''. -stopclock has to return the number of ticks since startclock was called. -there are hz ticks per second. For various unsatisfactory reasons, you also -have to define a double ``tcmp''; set it to 3.3 unless you know better. - - that's it. now, executing ``runall poot'' will generate a timing -run. if you accumulate a bunch, say 3 or 4, of these timing outputs, -the shell script ``ave.times'' will convert them into a summarised form -(which regrettably is only of much use to me). I would certainly -appreciate getting such output, together with some details about the system. - - As always, I would also appreciate hearing about suggestions -and bugs, preferably by email to andrew@research.att.com. //GO.SYSIN DD README chmod 777 mk