1 /* Public Domain Curses */
5 RCSID("$Id: pdcdisp.c,v 1.46 2008/07/14 04:24:52 wmcbrine Exp $")
11 # define A(x) ((chtype)x | A_ALTCHARSET)
15 A(0), A(1), A(2), A(3), A(4), A(5), A(6), A(7), A(8), A(9), A(10),
16 A(11), A(12), A(13), A(14), A(15), A(16), A(17), A(18), A(19),
17 A(20), A(21), A(22), A(23), A(24), A(25), A(26), A(27), A(28),
18 A(29), A(30), A(31), ' ', '!', '"', '#', '$', '%', '&', '\'', '(',
22 0x2192, 0x2190, 0x2191, 0x2193,
35 '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=',
36 '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
37 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
38 'X', 'Y', 'Z', '[', '\\', ']', '^', '_',
49 0x00b0, 0x00b1, 0x2591, 0x00a4, 0x2518, 0x2510, 0x250c, 0x2514,
50 0x253c, 0x23ba, 0x23bb, 0x2500, 0x23bc, 0x23bd, 0x251c, 0x2524,
51 0x2534, 0x252c, 0x2502, 0x2264, 0x2265, 0x03c0, 0x2260, 0x00a3,
54 A(7), A(8), '#', 0xa4, A(11), A(12), A(13), A(14), A(15), A(16),
55 A(17), A(18), A(19), A(20), A(21), A(22), A(23), A(24), A(25),
56 A(26), A(27), A(28), A(29), A(30), 0xb7,
66 int PDC_display_cursor(int oldrow
, int oldcol
, int newrow
, int newcol
,
72 PDC_LOG(("%s:PDC_display_cursor() - called: NEW row %d col %d, vis %d\n",
73 XCLOGMSG
, newrow
, newcol
, visibility
));
77 /* Only send the CURSES_DISPLAY_CURSOR message, no data */
79 idx
= CURSES_DISPLAY_CURSOR
;
80 memcpy(buf
, &idx
, sizeof(int));
86 memcpy(buf
, &idx
, sizeof(int));
89 pos
= oldrow
+ (oldcol
<< 8);
90 memcpy(buf
+ idx
, &pos
, sizeof(int));
93 pos
= newrow
+ (newcol
<< 8);
94 memcpy(buf
+ idx
, &pos
, sizeof(int));
99 if (XC_write_socket(xc_display_sock
, buf
, idx
) < 0)
100 XCursesExitCursesProcess(1, "exiting from PDC_display_cursor");
105 /* position hardware cursor at (y, x) */
107 void PDC_gotoyx(int row
, int col
)
109 PDC_LOG(("PDC_gotoyx() - called: row %d col %d\n", row
, col
));
111 PDC_display_cursor(SP
->cursrow
, SP
->curscol
, row
, col
, SP
->visibility
);
114 /* update the given physical line to look like the corresponding line in
117 void PDC_transform_line(int lineno
, int x
, int len
, const chtype
*srcp
)
119 PDC_LOG(("PDC_transform_line() - called: line %d\n", lineno
));
121 XC_get_line_lock(lineno
);
123 memcpy(Xcurscr
+ XCURSCR_Y_OFF(lineno
) + (x
* sizeof(chtype
)), srcp
,
124 len
* sizeof(chtype
));
126 *(Xcurscr
+ XCURSCR_START_OFF
+ lineno
) = x
;
127 *(Xcurscr
+ XCURSCR_LENGTH_OFF
+ lineno
) = len
;
129 XC_release_line_lock(lineno
);
131 XCursesInstructAndWait(CURSES_REFRESH
);