comparison src/eval.c @ 685:d7e33248b9c8 v7.0206

updated for version 7.0206
author vimboss
date Fri, 24 Feb 2006 23:53:04 +0000
parents 9364d114ed8d
children d7860ee7eb7e
comparison
equal deleted inserted replaced
684:a8caf7dd853d 685:d7e33248b9c8
14932 typval_T *argvars; 14932 typval_T *argvars;
14933 typval_T *rettv; 14933 typval_T *rettv;
14934 { 14934 {
14935 int nr = 1; 14935 int nr = 1;
14936 #ifdef FEAT_WINDOWS 14936 #ifdef FEAT_WINDOWS
14937 tabpage_T *tp;
14938 char_u *arg; 14937 char_u *arg;
14939 14938
14940 if (argvars[0].v_type != VAR_UNKNOWN) 14939 if (argvars[0].v_type != VAR_UNKNOWN)
14941 { 14940 {
14942 arg = get_tv_string_chk(&argvars[0]); 14941 arg = get_tv_string_chk(&argvars[0]);
14943 nr = 0; 14942 nr = 0;
14944 if (arg != NULL) 14943 if (arg != NULL)
14945 { 14944 {
14946 if (STRCMP(arg, "$") == 0) 14945 if (STRCMP(arg, "$") == 0)
14947 for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) 14946 nr = tabpage_index(NULL);
14948 ++nr;
14949 else 14947 else
14950 EMSG2(_(e_invexpr2), arg); 14948 EMSG2(_(e_invexpr2), arg);
14951 } 14949 }
14952 } 14950 }
14953 else 14951 else
14954 for (tp = first_tabpage; tp != curtab; tp = tp->tp_next) 14952 nr = tabpage_index(curtab);
14955 ++nr;
14956 #endif 14953 #endif
14957 rettv->vval.v_number = nr; 14954 rettv->vval.v_number = nr;
14958 } 14955 }
14959 14956
14960 14957
15614 rettv->vval.v_number = ret; 15611 rettv->vval.v_number = ret;
15615 } 15612 }
15616 15613
15617 /* 15614 /*
15618 * Translate a String variable into a position. 15615 * Translate a String variable into a position.
15616 * Returns NULL when there is an error.
15619 */ 15617 */
15620 static pos_T * 15618 static pos_T *
15621 var2fpos(varp, lnum) 15619 var2fpos(varp, lnum)
15622 typval_T *varp; 15620 typval_T *varp;
15623 int lnum; /* TRUE when $ is last line */ 15621 int lnum; /* TRUE when $ is last line */
15624 { 15622 {
15625 char_u *name; 15623 char_u *name;
15626 static pos_T pos; 15624 static pos_T pos;
15627 pos_T *pp; 15625 pos_T *pp;
15626
15627 /* Argument can be [lnum, col]. */
15628 if (varp->v_type == VAR_LIST)
15629 {
15630 list_T *l;
15631 listitem_T *li;
15632 int len;
15633
15634 l = varp->vval.v_list;
15635 if (l == NULL)
15636 return NULL;
15637
15638 /* Get the line number */
15639 li = list_find(l, 0L);
15640 if (li == NULL)
15641 return NULL;
15642 pos.lnum = get_tv_number(&li->li_tv);
15643 if (pos.lnum <= 0 || pos.lnum > curbuf->b_ml.ml_line_count)
15644 return NULL; /* invalid line number */
15645
15646 /* Get the column number */
15647 li = list_find(l, 1L);
15648 if (li == NULL)
15649 return NULL;
15650 pos.col = get_tv_number(&li->li_tv);
15651 len = (long)STRLEN(ml_get(pos.lnum));
15652 if (pos.col <= 0 || ((len == 0 && pos.col > 1)
15653 || (len > 0 && pos.col > len)))
15654 return NULL; /* invalid column number */
15655
15656 pos.col--;
15657 return &pos;
15658 }
15628 15659
15629 name = get_tv_string_chk(varp); 15660 name = get_tv_string_chk(varp);
15630 if (name == NULL) 15661 if (name == NULL)
15631 return NULL; 15662 return NULL;
15632 if (name[0] == '.') /* cursor */ 15663 if (name[0] == '.') /* cursor */