1: #include "../h/rt.h"
   2: 
   3: /*
   4:  * move(i) - move &pos by i, return substring of &subject spanned.
   5:  *  Reverses effects if resumed.
   6:  */
   7: Xmove(nargs, oldsubj, arg1, arg0)
   8: int nargs;
   9: struct descrip oldsubj, arg1, arg0;
  10:    {
  11:    register int i, j;
  12:    long l;
  13:    int oldpos;
  14: 
  15:    /*
  16:     * i must be a (non-long) integer.
  17:     */
  18:    switch (cvint(&arg1, &l)) {
  19:       case T_INTEGER:  j = (int)l; break;
  20: #ifdef LONGS
  21:       case T_LONGINT:  fail();
  22: #endif LONGS
  23:       default:         runerr(101, &arg1);
  24:       }
  25: 
  26:    /*
  27:     * Save old &subject and &pos.  Local variable i holds &pos
  28:     *  before the move.
  29:     */
  30:    oldsubj = k_subject;
  31:    oldpos = i = k_pos;
  32: 
  33:    /*
  34:     * If attempted move is past either end of the string, fail.
  35:     */
  36:    if (i + j <= 0 || i + j > STRLEN(k_subject) + 1)
  37:       fail();
  38: 
  39:    /*
  40:     * Set new &pos.
  41:     */
  42:    k_pos += j;
  43: 
  44:    /*
  45:     * Make sure j >= 0.
  46:     */
  47:    if (j < 0) {
  48:       i += j;
  49:       j = -j;
  50:       }
  51: 
  52:    /*
  53:     * Suspend substring of &subject that was moved over.
  54:     */
  55:    STRLEN(arg0) = j;
  56:    STRLOC(arg0) = STRLOC(k_subject) + i - 1;
  57:    suspend();
  58: 
  59:    /*
  60:     * If move is resumed, restore the old subject and position
  61:     *  and fail.
  62:     */
  63:    k_subject = oldsubj;
  64:    k_pos = oldpos;
  65:    fail();
  66:    }
  67: 
  68: Procblock(move,2)

Defined functions

Xmove defined in line 7; never used
Last modified: 1984-11-18
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 794
Valid CSS Valid XHTML 1.0 Strict