Annotation of researchv10no/cmd/basic/bite/src/sub.c, revision 1.1

1.1     ! root        1: /* Copyright Bell Telephone Laboratories Whippany, N.J.
        !             2: 
        !             3:  *     ******************************************************
        !             4:  *     ******************************************************
        !             5:  *     *** SUBSTITUTE COMMAND SIMILAR TO UNIX EDITORS 's' ***
        !             6:  *     ************ R. B. Drake WH 8C-005 X4163 *************
        !             7:  *     ************** Sun Aug 26 11:51:03 1979 **************
        !             8:  *     ******************************************************
        !             9:  *     ******************************************************
        !            10: 
        !            11: */
        !            12: /*   "@(#) sub.c:  V 1.1  12/21/80" */
        !            13: 
        !            14: /* routine to do character substitution for the editor */
        !            15: #include "bas.h"
        !            16: #define ertst if(ifnul(work)) return(-1)
        !            17: char temp[80];
        !            18: extern char _string[];
        !            19: int line;
        !            20: sub()
        !            21: {
        !            22:        char *strptr,c,*op;
        !            23:        char *lp,*work,*from,*to,*isthere(),what[80],with[80],delim;
        !            24:        lp=what;
        !            25:        work= expr;
        !            26:        while(num(*work))
        !            27:                *lp++ = *work++; /* get the line number to work on */
        !            28:        ertst;
        !            29:        *lp='\0';
        !            30:        line = atoi(what);
        !            31:        ertst;
        !            32:        while((c= *work) == ' ' || c == '\t')
        !            33:        {
        !            34:                ertst;
        !            35:                work++;
        !            36:        }
        !            37:        delim= *work++; /* get the delimeter */
        !            38:        from=what;
        !            39:        to=with;
        !            40:        while(*work != delim)
        !            41:            {
        !            42:                ertst;
        !            43:                *from++ = *work++;
        !            44:        }
        !            45:        *from='\0';
        !            46:        work++; /* bump past delimeter */
        !            47:        while (*work != delim && *work != '\0')
        !            48:                *to++ = *work++;
        !            49:        *to++ = '\0';
        !            50:        fetch(line,&lbdptr); /* get the line to be edited */
        !            51:        if(inst.thing.linno != line) /* if no such line , complain and exit */
        !            52:            {
        !            53:                error(line,0);
        !            54:                return(-1);
        !            55:        }
        !            56:        expand(); /* expand the expression part of program line */
        !            57:        op = decode(inst.thing.opcode.lobyte);
        !            58:        if(op[0] == '\010')
        !            59:        sprintf(temp,"%d %s\n",inst.thing.linno,linbuf);
        !            60:        else
        !            61:        sprintf(temp,"%d %s %s\n",inst.thing.linno,op,linbuf);
        !            62:        if((lp=isthere(what,temp,0)) == 0)
        !            63:            {
        !            64:                error(0,1);
        !            65:                return(-1); /* no such expression in that line */
        !            66:        }
        !            67:        strptr= _string;
        !            68:        from=temp;
        !            69:        to=with;
        !            70:        while( *from != '\n')
        !            71:        {
        !            72:                if( from == lp)
        !            73:                {
        !            74:                        from += strlen(what);
        !            75:                        while(*to)
        !            76:                                *strptr++ = *to++;
        !            77:                }
        !            78:                else
        !            79:                        *strptr++ = *from++;
        !            80:        }
        !            81:        *strptr++= '\n';
        !            82:        *strptr = '\0';
        !            83:        bed((FILE *)0);
        !            84:        fetch(line,&lbdptr);
        !            85:        prin();
        !            86:        return(0);
        !            87: }
        !            88: ifnul(work)
        !            89: char *work;
        !            90: {
        !            91:        if(*work == '\0')
        !            92:        {
        !            93:                error(0,20);
        !            94:                return(1);
        !            95:        }
        !            96:        return(0);
        !            97: }
        !            98: /* undo the last substitute or single line delete */
        !            99: undo()
        !           100: {
        !           101:        char *strptr,*from;
        !           102:        strptr=_string;
        !           103:        from=temp;
        !           104:        while(*from != '\0')
        !           105:                *strptr++ = *from++;
        !           106:        *strptr='\0';
        !           107:        bed((FILE *)0);
        !           108:        fetch(line,&lbdptr);
        !           109:        prin();
        !           110:        return(0);
        !           111: }

unix.superglobalmegacorp.com

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