Annotation of researchv9/jtools/src/sam/string.c, revision 1.1

1.1     ! root        1: #include "sam.h"
        !             2: 
        !             3: #define        MINSIZE 16              /* minimum number of chars allocated */
        !             4: #define        MAXSIZE BLOCKSIZE       /* maximum number of chars for an empty string */
        !             5: 
        !             6: strinit(p)
        !             7:        String *p;
        !             8: {
        !             9:        gcnew(p->s, MINSIZE);
        !            10:        p->n=0;
        !            11:        p->size=MINSIZE;
        !            12: }
        !            13: strclose(p)
        !            14:        String *p;
        !            15: {
        !            16:        gcfree(p->s);
        !            17: }
        !            18: strzero(p)
        !            19:        register String *p;
        !            20: {
        !            21:        if(p->size>MAXSIZE){
        !            22:                (void)gcrealloc(p->s, (ulong)MAXSIZE);  /* throw away the garbage */
        !            23:                p->size=MAXSIZE;
        !            24:        }
        !            25:        p->n=0;
        !            26: }
        !            27: strdup(p, s)   /* copies the null */
        !            28:        register String *p;
        !            29:        register uchar *s;
        !            30: {
        !            31:        strinsure(p, (ulong)(p->n=strlen(s)+1));
        !            32:        bcopy((uchar *)s, s+p->n, p->s, 1);
        !            33: }
        !            34: strdupstr(p, q)        /* will copy the null if there's one there */
        !            35:        register String *p, *q;
        !            36: {
        !            37:        strinsure(p, (ulong)q->n);
        !            38:        p->n=q->n;
        !            39:        bcopy(q->s, q->s+q->n, p->s, 1);
        !            40: }
        !            41: straddc(p, c)
        !            42:        register String *p;
        !            43:        register c;
        !            44: {
        !            45:        strinsure(p, (ulong)p->n+1);
        !            46:        p->s[p->n++]=c;
        !            47: }
        !            48: strinsure(p, n)
        !            49:        register String *p;
        !            50:        register ulong n;
        !            51: {
        !            52:        register i;
        !            53:        if(n>=32767)
        !            54:                error(Etoolong);
        !            55:        if(p->size<n){  /* p needs to grow */
        !            56:                for(i=1; i<n; i<<=1)
        !            57:                        ;
        !            58:                gcrenew(p->s, i);
        !            59:                p->size=i;
        !            60:        }
        !            61: }
        !            62: strinsert(p, q, p0)
        !            63:        register String *p, *q;
        !            64:        register Posn p0;
        !            65: {
        !            66: if(p0>p->n) panic("strinsert");
        !            67:        strinsure(p, (ulong)(p->n+q->n));
        !            68:        bcopy(p->s+p0, p->s+p->n, p->s+p0+q->n, -1);
        !            69:        bcopy(q->s, q->s+q->n, p->s+p0, 1);
        !            70:        p->n+=q->n;
        !            71: }
        !            72: strdelete(p, p1, p2)
        !            73:        register String *p;
        !            74:        register Posn p1, p2;
        !            75: {
        !            76: if(p1>p->n || p2>p->n || p1>p2) panic("strdelete");
        !            77:        bcopy(p->s+p2, p->s+p->n, p->s+p1, 1);
        !            78:        p->n-=(p2-p1);
        !            79: }
        !            80: strncmp(s1, s2, n)
        !            81:        register uchar *s1, *s2;
        !            82:        register n;
        !            83: {
        !            84:        while (--n >= 0 && *s1 == *s2++)
        !            85:                if (*s1++ == '\0')
        !            86:                        return(0);
        !            87:        return(n<0 ? 0 : *s1 - *--s2);
        !            88: }
        !            89: strcmp(s1, s2)
        !            90:        register uchar *s1, *s2;
        !            91: {
        !            92:        while (*s1 == *s2++)
        !            93:                if (*s1++=='\0')
        !            94:                        return(0);
        !            95:        return(*s1 - *--s2);
        !            96: }
        !            97: strcpy(s1, s2)
        !            98:        register uchar *s1, *s2;
        !            99: {
        !           100:        while (*s1++ = *s2++)
        !           101:                ;
        !           102: }
        !           103: strlen(s)
        !           104:        register uchar *s;
        !           105: {
        !           106:        register n=0;
        !           107:        while(*s++)
        !           108:                n++;
        !           109:        return n;
        !           110: }
        !           111: String *
        !           112: tempstr(s, n)
        !           113:        uchar *s;
        !           114: {
        !           115:        static String p;
        !           116:        p.s=s;
        !           117:        p.n=n;
        !           118:        p.size=n;
        !           119:        return &p;
        !           120: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.