|
|
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)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.