Annotation of 43BSD/contrib/icon/functions/tab.c, revision 1.1

1.1     ! root        1: #include "../h/rt.h"
        !             2: 
        !             3: /*
        !             4:  * tab(i) - set &pos to i, return substring of &subject spanned.
        !             5:  *  Reverses effects if resumed..
        !             6:  */
        !             7: 
        !             8: Xtab(nargs, oldsubj, arg1, arg0)
        !             9: int nargs;
        !            10: struct descrip oldsubj, arg1, arg0;
        !            11:    {
        !            12:    register int i, j;
        !            13:    int t, oldpos;
        !            14:    long l1;
        !            15: 
        !            16:    /*
        !            17:     * i must be an integer.
        !            18:     */
        !            19:    if (cvint(&arg1,&l1) == NULL)
        !            20:       runerr(101, &arg1);
        !            21: 
        !            22:    /*
        !            23:     * Convert j to an absolute position.
        !            24:     */
        !            25:    j = cvpos(l1, STRLEN(k_subject));
        !            26: 
        !            27:    /*
        !            28:     * Save old &subject and &pos.  Local variable i holds &pos
        !            29:     *  before the tab.
        !            30:     */
        !            31:    oldsubj = k_subject;
        !            32:    oldpos = i = k_pos;
        !            33: 
        !            34:    /*
        !            35:     * Set new &pos.
        !            36:     */
        !            37:    k_pos = j;
        !            38: 
        !            39:    /*
        !            40:     *  Make j the length of the substring &subject[i:j]
        !            41:     */
        !            42:    if (i > j) {
        !            43:       t = i;
        !            44:       i = j;
        !            45:       j = t - j;
        !            46:       }
        !            47:    else
        !            48:       j = j - i;
        !            49: 
        !            50:    /*
        !            51:     * Suspend the portion of &subject that was tabbed over.
        !            52:     */
        !            53:    STRLOC(arg0) = STRLOC(k_subject) + i - 1;
        !            54:    STRLEN(arg0) = j;
        !            55:    suspend();
        !            56: 
        !            57:    /*
        !            58:     * If tab is resumed, restore the old subject and position
        !            59:     *  and fail.
        !            60:     */
        !            61:    k_subject = oldsubj;
        !            62:    k_pos = oldpos;
        !            63:    fail();
        !            64:    }
        !            65: 
        !            66: Procblock(tab,2)

unix.superglobalmegacorp.com

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