Annotation of 43BSD/contrib/icon/functions/tab.c, revision 1.1.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.