Annotation of researchv10dc/630/src/string.c, revision 1.1

1.1     ! root        1: #include <jerq.h>
        !             2: #include <layer.h>
        !             3: #include <queue.h>
        !             4: #include "jerqproc.h"
        !             5: #include "frame.h"
        !             6: 
        !             7: #define        MAXROOM 1024    /* maximum extra number of chars after insure() */
        !             8: 
        !             9: char *
        !            10: GCalloc(n, p, pp)
        !            11:        int n;
        !            12:        char **p;
        !            13:        struct Proc *pp;
        !            14: {
        !            15:        while(realgcalloc((unsigned long)n, p, pp)==0){
        !            16:                mesg("out of memory; clean up bitmaps and hit a button\n");
        !            17:                for(;;){
        !            18:                        sleep(30);
        !            19:                        Uwait(MOUSE);
        !            20:                        if(button123())
        !            21:                                break;
        !            22:                }
        !            23:                mesg("trying again\n", TRUE);
        !            24:        }
        !            25: }
        !            26: insure(p, n, pp)
        !            27:        register String *p;
        !            28:        register short n;
        !            29:        struct Proc *pp;
        !            30: {
        !            31:        register i;
        !            32:        char *old;
        !            33:        if (p->size < n) {      /* p needs to grow */
        !            34:                for (i = 1; i < n; i <<= 1)
        !            35:                        ;
        !            36:                if(i > n+MAXROOM)
        !            37:                        i = n+MAXROOM;
        !            38:                if(p->s==0)
        !            39:                        old=0;
        !            40:                else{
        !            41:                        GCalloc(p->n, &old, pp);
        !            42:                        movstring(p->n, p->s, old);
        !            43:                        gcfree(p->s);
        !            44:                }
        !            45:                GCalloc(i, &p->s, pp);
        !            46:                if(old){
        !            47:                        movstring(p->n, old, p->s);
        !            48:                        gcfree(old);
        !            49:                }
        !            50:                p->size = i;
        !            51:        }
        !            52: }
        !            53: #define        MINCHARS 64     /* for efficiency; min size of a string we'll alloc */
        !            54: strzero(p)
        !            55:        String *p;
        !            56: {
        !            57:        if(p->s && p->size>MINCHARS){
        !            58:                p->n=0;
        !            59:                p->size=0;      /* forces strinsure to free the old stuff */
        !            60:        }
        !            61:        insure(p, MINCHARS, P);
        !            62:        p->n = 0;
        !            63: }
        !            64: insstring(p, i, q)
        !            65:        register String *p, *q;
        !            66:        register short i;
        !            67: {
        !            68:        insure(p, p->n+q->n, P);
        !            69:        movstring(i-p->n, p->s+p->n, p->s+p->n+q->n);
        !            70:        movstring(q->n, q->s, p->s+i);
        !            71:        p->n += q->n;
        !            72: }
        !            73: delstring(p, i, j)
        !            74:        register String *p;
        !            75:        register short i, j;
        !            76: {
        !            77:        register n = j-i;
        !            78:        movstring(p->n-j, p->s+j, p->s+i);
        !            79:        p->n -= n;
        !            80: }
        !            81: movstring(i, s, d)
        !            82:        register short i;
        !            83:        register char *s, *d;
        !            84: {
        !            85:        if (i > 0)
        !            86:                do
        !            87:                        *d++ = *s++;
        !            88:                while (--i > 0);
        !            89:        else {
        !            90:                if (i++ < 0)            /* transfer -i chars in loop */
        !            91:                        do
        !            92:                                *--d = *--s;
        !            93:                        while (i++ < 0);
        !            94:        }
        !            95: }

unix.superglobalmegacorp.com

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