diff --git a/src/move.c b/src/move.c
index 232a875..0df4fe5 100644
--- a/src/move.c
+++ b/src/move.c
@@ -1189,6 +1189,96 @@
     curwin->w_valid |= VALID_WCOL|VALID_WROW|VALID_VIRTCOL;
 }
 
+#if defined(FEAT_EVAL) || defined(PROTO)
+/*
+ * Compute the screen position of text character at "pos" in window "wp"
+ * The resulting values are one-based, zero when character is not visible.
+ */
+    static void
+textpos2screenpos(
+	win_T	*wp,
+	pos_T	*pos,
+	int	*rowp,	// screen row
+	int	*scolp,	// start screen column
+	int	*ccolp,	// cursor screen column
+	int	*ecolp)	// end screen column
+{
+    colnr_T	scol = 0, ccol = 0, ecol = 0;
+    int		row = 0;
+    int		rowoff = 0;
+    colnr_T	coloff = 0;
+
+    if (pos->lnum >= wp->w_topline && pos->lnum < wp->w_botline)
+    {
+	colnr_T off;
+	colnr_T col;
+	int     width;
+
+	row = plines_m_win(wp, wp->w_topline, pos->lnum - 1) + 1;
+	getvcol(wp, pos, &scol, &ccol, &ecol);
+
+	// similar to what is done in validate_cursor_col()
+	col = scol;
+	off = win_col_off(wp);
+	col += off;
+	width = wp->w_width - off + win_col_off2(wp);
+
+	/* long line wrapping, adjust row */
+	if (wp->w_p_wrap
+		&& col >= (colnr_T)wp->w_width
+		&& width > 0)
+	{
+	    /* use same formula as what is used in curs_columns() */
+	    rowoff = ((col - wp->w_width) / width + 1);
+	    col -= rowoff * width;
+	}
+	col -= wp->w_leftcol;
+	if (col >= width)
+	    col = -1;
+	if (col >= 0)
+	    coloff = col - scol + wp->w_wincol + 1;
+	else
+	    // character is left or right of the window
+	    row = scol = ccol = ecol = 0;
+    }
+    *rowp = wp->w_winrow + row + rowoff;
+    *scolp = scol + coloff;
+    *ccolp = ccol + coloff;
+    *ecolp = ecol + coloff;
+}
+
+/*
+ * "screenpos({winid}, {lnum}, {col})" function
+ */
+    void
+f_screenpos(typval_T *argvars UNUSED, typval_T *rettv)
+{
+    dict_T	*dict;
+    win_T	*wp;
+    pos_T	pos;
+    int		row = 0;
+    int		scol = 0, ccol = 0, ecol = 0;
+
+    if (rettv_dict_alloc(rettv) != OK)
+	return;
+    dict = rettv->vval.v_dict;
+
+    wp = find_win_by_nr_or_id(&argvars[0]);
+    if (wp == NULL)
+	return;
+
+    pos.lnum = tv_get_number(&argvars[1]);
+    pos.col = tv_get_number(&argvars[2]) - 1;
+    pos.coladd = 0;
+    textpos2screenpos(wp, &pos, &row, &scol, &ccol, &ecol);
+
+    dict_add_number(dict, "row", row);
+    dict_add_number(dict, "col", scol);
+    dict_add_number(dict, "curscol", ccol);
+    dict_add_number(dict, "endcol", ecol);
+}
+#endif
+
 /*
  * Scroll the current window down by "line_count" logical lines.  "CTRL-Y"
  */
