1 1.1 christos /* change further to gtkviwindow have no knowledge of ipvi */ 2 1.1 christos #include "config.h" 3 1.1 christos 4 1.1 christos #include <gdk/gdkkeysyms.h> 5 1.1 christos #include <gtk/gtk.h> 6 1.1 christos #if 0 7 1.1 christos #ifdef HAVE_ZVT 8 1.1 christos #include <zvt/zvtterm.h> 9 1.1 christos #include <zvt/vt.h> 10 1.1 christos #endif 11 1.1 christos #endif 12 1.1 christos 13 1.1 christos #include "../common/common.h" 14 1.1 christos #include "../ipc/ip.h" 15 1.1 christos 16 1.1 christos #include "gtkvi.h" 17 1.1 christos #include "gtkviscreen.h" 18 1.1 christos #include "gtkviwindow.h" 19 1.2 christos #include "gtk_extern.h" 20 1.1 christos 21 1.1 christos enum { 22 1.1 christos RENAME, 23 1.1 christos LAST_SIGNAL 24 1.1 christos }; 25 1.1 christos 26 1.1 christos static void gtk_vi_window_class_init (GtkViWindowClass *klass); 27 1.1 christos static void gtk_vi_window_init (GtkViWindow *vi); 28 1.1 christos static void gtk_vi_window_destroy (GtkObject *object); 29 1.1 christos 30 1.1 christos static int vi_key_press_event __P((GtkWidget*, GdkEventKey*, GtkViWindow*)); 31 1.1 christos static void vi_map __P((GtkWidget *, GtkWidget*)); 32 1.1 christos static void vi_resized __P((GtkWidget *, int, int, IPVIWIN*)); 33 1.1 christos static void vi_adjustment_value_changed __P((GtkAdjustment *, IPVIWIN *)); 34 1.1 christos 35 1.1 christos static void vi_input_func __P((gpointer , gint , GdkInputCondition)); 36 1.1 christos 37 1.1 christos static void vi_init_window __P((GtkViWindow *window, int)); 38 1.1 christos 39 1.1 christos static int vi_addstr __P((IPVIWIN*, const char *, u_int32_t)); 40 1.1 christos static int vi_waddstr __P((IPVIWIN*, const CHAR_T *, u_int32_t)); 41 1.1 christos static int vi_attribute __P((IPVIWIN*,u_int32_t ,u_int32_t )); 42 1.1 christos static int vi_bell __P((IPVIWIN*)); 43 1.1 christos static int vi_busyon __P((IPVIWIN*, const char *, u_int32_t)); 44 1.1 christos static int vi_busyoff __P((IPVIWIN*)); 45 1.1 christos static int vi_clrtoeol __P((IPVIWIN*)); 46 1.1 christos static int vi_deleteln __P((IPVIWIN*)); 47 1.1 christos static int vi_discard __P((IPVIWIN*)); 48 1.1 christos static int vi_editopt __P((IPVIWIN*, const char *, u_int32_t, 49 1.1 christos const char *, u_int32_t, u_int32_t)); 50 1.1 christos static int vi_insertln __P((IPVIWIN*)); 51 1.1 christos static int vi_move __P((IPVIWIN*, u_int32_t, u_int32_t)); 52 1.1 christos static int vi_quit __P((IPVIWIN*)); 53 1.1 christos static int vi_redraw __P((IPVIWIN*)); 54 1.1 christos static int vi_refresh __P((IPVIWIN*)); 55 1.1 christos static int vi_rename __P((IPVIWIN*, const char *, u_int32_t)); 56 1.1 christos static int vi_rewrite __P((IPVIWIN*, u_int32_t)); 57 1.1 christos static int vi_scrollbar __P((IPVIWIN*, u_int32_t, u_int32_t , u_int32_t )); 58 1.1 christos static int vi_select __P((IPVIWIN*, const char *, u_int32_t)); 59 1.1 christos static int vi_split __P((IPVIWIN*)); 60 1.1 christos static int vi_ex_init __P((IPVIWIN*)); 61 1.1 christos static int vi_vi_init __P((IPVIWIN*)); 62 1.1 christos static int vi_fork __P((IPVIWIN*)); 63 1.1 christos 64 1.1 christos static GtkWidgetClass *parent_class = NULL; 65 1.1 christos static guint vi_window_signals[LAST_SIGNAL] = { 0 }; 66 1.1 christos 67 1.1 christos GtkType 68 1.1 christos gtk_vi_window_get_type (void) 69 1.1 christos { 70 1.1 christos static GtkType vi_window_type = 0; 71 1.1 christos 72 1.1 christos if (!vi_window_type) 73 1.1 christos { 74 1.1 christos static const GtkTypeInfo vi_window_info = 75 1.1 christos { 76 1.1 christos "GtkViWindow", 77 1.1 christos sizeof (GtkViWindow), 78 1.1 christos sizeof (GtkViWindowClass), 79 1.1 christos (GtkClassInitFunc) gtk_vi_window_class_init, 80 1.1 christos (GtkObjectInitFunc) gtk_vi_window_init, 81 1.1 christos /* reserved_1 */ NULL, 82 1.1 christos /* reserved_2 */ NULL, 83 1.1 christos (GtkClassInitFunc) NULL, 84 1.1 christos }; 85 1.1 christos 86 1.1 christos vi_window_type = gtk_type_unique (GTK_TYPE_NOTEBOOK, &vi_window_info); 87 1.1 christos } 88 1.1 christos 89 1.1 christos return vi_window_type; 90 1.1 christos } 91 1.1 christos 92 1.1 christos static void 93 1.1 christos gtk_vi_window_class_init (GtkViWindowClass *class) 94 1.1 christos { 95 1.1 christos GtkObjectClass *object_class; 96 1.1 christos 97 1.1 christos object_class = (GtkObjectClass*) class; 98 1.1 christos parent_class = gtk_type_class (GTK_TYPE_WIDGET); 99 1.1 christos 100 1.1 christos vi_window_signals[RENAME] = 101 1.1 christos gtk_signal_new ("rename", 102 1.1 christos GTK_RUN_FIRST, 103 1.1 christos GTK_CLASS_TYPE(object_class), 104 1.1 christos GTK_SIGNAL_OFFSET (GtkViScreenClass, rename), 105 1.1 christos gtk_marshal_VOID__STRING, 106 1.1 christos GTK_TYPE_NONE, 1, GTK_TYPE_STRING, 0); 107 1.1 christos 108 1.1 christos #ifndef HAVE_PANGO 109 1.1 christos gtk_object_class_add_signals(object_class, vi_window_signals, LAST_SIGNAL); 110 1.1 christos #endif 111 1.1 christos 112 1.1 christos object_class->destroy = gtk_vi_window_destroy; 113 1.1 christos } 114 1.1 christos 115 1.1 christos static void 116 1.1 christos gtk_vi_window_init (GtkViWindow *vi) 117 1.1 christos { 118 1.1 christos } 119 1.1 christos 120 1.1 christos GtkWidget * 121 1.1 christos gtk_vi_window_new (GtkVi *vi) 122 1.1 christos { 123 1.1 christos GtkViWindow* window; 124 1.1 christos GtkWidget *vi_widget; 125 1.1 christos GtkWidget *vscroll; 126 1.1 christos GtkWidget *table; 127 1.1 christos GtkWidget *term; 128 1.1 christos int fd; 129 1.1 christos #ifdef HAVE_ZVT 130 1.1 christos int pty[2]; 131 1.1 christos #endif 132 1.1 christos 133 1.1 christos window = gtk_type_new(gtk_vi_window_get_type()); 134 1.1 christos 135 1.1 christos window->vi = vi; 136 1.1 christos //vi->vi_window = GTK_WIDGET(window); 137 1.1 christos 138 1.1 christos vi_widget = gtk_vi_screen_new(NULL); 139 1.1 christos gtk_widget_show(GTK_WIDGET(vi_widget)); 140 1.1 christos /* 141 1.1 christos vi->vi = vi_widget; 142 1.1 christos */ 143 1.1 christos window->vi_screen = vi_widget; 144 1.1 christos 145 1.1 christos vscroll = gtk_vscrollbar_new(GTK_VI_SCREEN(vi_widget)->vadj); 146 1.1 christos gtk_widget_show(vscroll); 147 1.1 christos 148 1.1 christos table = gtk_table_new(2, 2, FALSE); 149 1.1 christos gtk_table_attach_defaults(GTK_TABLE(table), GTK_WIDGET(vi_widget), 150 1.1 christos 0, 1, 0, 1); 151 1.1 christos gtk_table_attach(GTK_TABLE(table), vscroll, 1, 2, 0, 1, 152 1.1 christos (GtkAttachOptions)0, GTK_FILL, 0, 0); 153 1.1 christos gtk_widget_show(table); 154 1.1 christos gtk_signal_connect(GTK_OBJECT(table), "map", GTK_SIGNAL_FUNC(vi_map), 155 1.1 christos vi_widget/*->ipvi*/); 156 1.1 christos window->table = table; 157 1.1 christos 158 1.1 christos 159 1.1 christos gtk_notebook_set_show_tabs(GTK_NOTEBOOK(window), FALSE); 160 1.1 christos gtk_notebook_set_show_border(GTK_NOTEBOOK(window), FALSE); 161 1.1 christos gtk_notebook_append_page(GTK_NOTEBOOK(window), table, NULL); 162 1.1 christos 163 1.1 christos term = 0; 164 1.1 christos fd = -1; 165 1.1 christos 166 1.1 christos #if 0 167 1.1 christos #ifdef HAVE_ZVT 168 1.1 christos term = zvt_term_new(); 169 1.1 christos zvt_term_set_blink(ZVT_TERM(term), FALSE); 170 1.1 christos zvt_term_get_ptys(ZVT_TERM(term), 0, pty); 171 1.1 christos fd = pty[1]; /* slave */ 172 1.1 christos gtk_widget_show(term); 173 1.1 christos gtk_notebook_append_page(GTK_NOTEBOOK(window), term, NULL); 174 1.1 christos #endif 175 1.1 christos #endif 176 1.1 christos window->term = term; 177 1.1 christos 178 1.1 christos vi_init_window(window, fd); 179 1.1 christos 180 1.1 christos gtk_signal_connect(GTK_OBJECT(vi_widget), "resized", 181 1.1 christos GTK_SIGNAL_FUNC(vi_resized), window->ipviwin); 182 1.1 christos gtk_signal_connect(GTK_OBJECT(vi_widget), "key_press_event", 183 1.1 christos (GtkSignalFunc) vi_key_press_event, window); 184 1.1 christos window->value_changed = 185 1.1 christos gtk_signal_connect(GTK_OBJECT(GTK_VI_SCREEN(vi_widget)->vadj), 186 1.1 christos "value_changed", 187 1.1 christos (GtkSignalFunc) vi_adjustment_value_changed, window->ipviwin); 188 1.1 christos 189 1.1 christos return GTK_WIDGET(window); 190 1.1 christos } 191 1.1 christos 192 1.1 christos static void 193 1.1 christos gtk_vi_window_destroy (GtkObject *object) 194 1.1 christos { 195 1.1 christos GtkViWindow *vi_window; 196 1.1 christos 197 1.1 christos g_return_if_fail (object != NULL); 198 1.1 christos g_return_if_fail (GTK_IS_VI_WINDOW (object)); 199 1.1 christos 200 1.1 christos vi_window = (GtkViWindow*) object; 201 1.1 christos 202 1.1 christos if (vi_window->table) { 203 1.1 christos gtk_signal_disconnect_by_data(GTK_OBJECT(vi_window->table), 204 1.1 christos vi_window->vi_screen); 205 1.1 christos vi_window->table = 0; 206 1.1 christos } 207 1.1 christos 208 1.1 christos if (vi_window->vi_screen) { 209 1.1 christos gtk_signal_disconnect_by_data(GTK_OBJECT(vi_window->vi_screen), 210 1.1 christos vi_window->ipviwin); 211 1.1 christos gtk_signal_disconnect(GTK_OBJECT(GTK_VI_SCREEN(vi_window->vi_screen)->vadj), 212 1.1 christos vi_window->value_changed); 213 1.1 christos gtk_widget_destroy(vi_window->vi_screen); 214 1.1 christos vi_window->vi_screen = 0; 215 1.1 christos } 216 1.1 christos 217 1.1 christos GTK_OBJECT_CLASS(parent_class)->destroy (object); 218 1.1 christos } 219 1.1 christos 220 1.1 christos void 221 1.1 christos gtk_vi_window_scrollbar(GtkViWindow *vi, guint top, guint size, guint max) 222 1.1 christos { 223 1.1 christos GtkViScreen *vi_screen; 224 1.1 christos /* work around gcc bug */ 225 1.1 christos volatile guint mymax = max; 226 1.1 christos volatile guint mysize = size; 227 1.1 christos 228 1.1 christos vi_screen = GTK_VI_SCREEN(vi->vi_screen); 229 1.1 christos vi_screen->vadj->value = top; 230 1.1 christos vi_screen->vadj->upper = mymax; 231 1.1 christos vi_screen->vadj->page_size = 232 1.1 christos vi_screen->vadj->page_increment = mysize; 233 1.1 christos gtk_signal_handler_block(GTK_OBJECT(vi_screen->vadj), vi->value_changed); 234 1.1 christos gtk_adjustment_changed(vi_screen->vadj); 235 1.1 christos /* 236 1.1 christos gtk_adjustment_value_changed(vi_screen->vadj); 237 1.1 christos */ 238 1.1 christos gtk_signal_handler_unblock(GTK_OBJECT(vi_screen->vadj), vi->value_changed); 239 1.1 christos } 240 1.1 christos 241 1.1 christos /* 242 1.1 christos * PUBLIC: void gtk_vi_quit __P((GtkViWindow*, gint)); 243 1.1 christos */ 244 1.1 christos void 245 1.1 christos gtk_vi_quit(vi, write) 246 1.1 christos GtkViWindow *vi; 247 1.1 christos gint write; 248 1.1 christos { 249 1.1 christos if (write) 250 1.1 christos vi->ipviwin->wq(vi->ipviwin); 251 1.1 christos else 252 1.1 christos vi->ipviwin->quit(vi->ipviwin); 253 1.1 christos } 254 1.1 christos 255 1.1 christos /* 256 1.1 christos * PUBLIC: void gtk_vi_show_term __P((GtkViWindow*, gint)); 257 1.1 christos */ 258 1.1 christos void 259 1.1 christos gtk_vi_show_term(window, show) 260 1.1 christos GtkViWindow *window; 261 1.1 christos gint show; 262 1.1 christos { 263 1.1 christos gtk_notebook_set_page(GTK_NOTEBOOK(window), show ? 1 : 0); 264 1.1 christos } 265 1.1 christos 266 1.1 christos /* 267 1.1 christos * PUBLIC: void gtk_vi_key_press_event __P((GtkViWindow*, GdkEventKey*)); 268 1.1 christos */ 269 1.1 christos void 270 1.1 christos gtk_vi_key_press_event(window, event) 271 1.1 christos GtkViWindow *window; 272 1.1 christos GdkEventKey *event; 273 1.1 christos { 274 1.1 christos #if 0 275 1.1 christos static struct { 276 1.1 christos guint key; 277 1.1 christos gint offset; 278 1.1 christos } table[] = { 279 1.1 christos {GDK_Home, GTK_STRUCT_OFFSET(IPVI, c_bol) }, 280 1.1 christos //{VI_C_BOTTOM, GTK_STRUCT_OFFSET(IPVI, c_bottom) }, 281 1.1 christos {GDK_End, GTK_STRUCT_OFFSET(IPVI, c_eol) }, 282 1.1 christos {GDK_Insert, GTK_STRUCT_OFFSET(IPVI, c_insert) }, 283 1.1 christos {GDK_Left, GTK_STRUCT_OFFSET(IPVI, c_left) }, 284 1.1 christos {GDK_Right, GTK_STRUCT_OFFSET(IPVI, c_right) }, 285 1.1 christos //{VI_C_TOP, GTK_STRUCT_OFFSET(IPVI, c_top) }, 286 1.1 christos }; 287 1.1 christos #endif 288 1.1 christos static struct { 289 1.1 christos guint keyval; 290 1.1 christos char key; 291 1.1 christos } table[] = { 292 1.1 christos { GDK_Left, 'h' }, 293 1.1 christos { GDK_Right, 'l' }, 294 1.1 christos { GDK_Up, 'k' }, 295 1.1 christos { GDK_Down, 'j' }, 296 1.1 christos { GDK_Page_Up, 'B' - '@' }, 297 1.1 christos { GDK_Page_Down, 'F' - '@' }, 298 1.1 christos }; 299 1.1 christos char key = event->keyval; 300 1.1 christos int i; 301 1.1 christos 302 1.1 christos #if 0 303 1.1 christos for (i = 0; i < sizeof(table)/sizeof(*table); ++i) 304 1.1 christos if (table[i].key == event->keyval) { 305 1.1 christos int (*fun) __P((IPVI*)) = 306 1.1 christos *(int (**) __P((IPVI*)) )(((char *)vi->ipvi)+table[i].offset); 307 1.1 christos fun(vi->ipvi); 308 1.1 christos return; 309 1.1 christos } 310 1.1 christos #endif 311 1.1 christos for (i = 0; i < sizeof(table)/sizeof(*table); ++i) 312 1.1 christos if (table[i].keyval == event->keyval) { 313 1.1 christos window->ipviwin->string(window->ipviwin, &table[i].key, 1); 314 1.1 christos return; 315 1.1 christos } 316 1.1 christos 317 1.1 christos if (event->state & GDK_CONTROL_MASK) { 318 1.1 christos if ((key >= 'a') && (key <= 'z')) 319 1.1 christos key -= 'a' - 'A'; 320 1.1 christos key -= '@'; 321 1.1 christos } 322 1.1 christos /* 323 1.1 christos fprintf(stderr, "key_press %d %d %d %c %p\n", 324 1.1 christos event->length, event->keyval, event->keyval, key, ipvi); 325 1.1 christos */ 326 1.1 christos if (event->length > 0) 327 1.1 christos window->ipviwin->string(window->ipviwin, &key, 1); 328 1.1 christos } 329 1.1 christos 330 1.1 christos 331 1.1 christos 332 1.1 christos static int 333 1.1 christos vi_key_press_event(vi_screen, event, vi) 334 1.1 christos GtkViWindow *vi; 335 1.1 christos GtkWidget *vi_screen; 336 1.1 christos GdkEventKey *event; 337 1.1 christos { 338 1.1 christos gint handled; 339 1.1 christos 340 1.1 christos handled = gtk_accel_groups_activate (GTK_OBJECT (vi), 341 1.1 christos event->keyval, (GdkModifierType) event->state); 342 1.1 christos if (handled) 343 1.1 christos return 1; 344 1.1 christos 345 1.1 christos gtk_vi_key_press_event(vi, event); 346 1.1 christos gtk_signal_emit_stop_by_name(GTK_OBJECT(vi_screen), "key_press_event"); 347 1.1 christos /* handled */ 348 1.1 christos return 1; 349 1.1 christos } 350 1.1 christos 351 1.1 christos static void 352 1.1 christos vi_map(table, vi_screen) 353 1.1 christos GtkWidget *vi_screen; 354 1.1 christos GtkWidget *table; 355 1.1 christos { 356 1.1 christos gtk_widget_grab_focus(vi_screen); 357 1.1 christos } 358 1.1 christos 359 1.1 christos static void 360 1.1 christos vi_resized(vi_screen, rows, cols, ipviwin) 361 1.1 christos int rows,cols; 362 1.1 christos IPVIWIN *ipviwin; 363 1.1 christos GtkWidget *vi_screen; 364 1.1 christos { 365 1.1 christos GtkViWindow *vi_window = GTK_VI_WINDOW((GtkVi*)(ipviwin->private_data)); 366 1.1 christos 367 1.1 christos ipviwin->resize(ipviwin, rows, cols); 368 1.1 christos vi_window->resized = 1; 369 1.1 christos } 370 1.1 christos 371 1.1 christos static void 372 1.1 christos vi_adjustment_value_changed (adjustment, ipviwin) 373 1.1 christos GtkAdjustment *adjustment; 374 1.1 christos IPVIWIN *ipviwin; 375 1.1 christos { 376 1.1 christos GtkViWindow *vi_window = GTK_VI_WINDOW((GtkVi*)(ipviwin->private_data)); 377 1.1 christos 378 1.1 christos if (vi_window->resized) 379 1.1 christos ipviwin->c_settop(ipviwin, adjustment->value); 380 1.1 christos } 381 1.1 christos 382 1.1 christos 383 1.1 christos static void 384 1.1 christos vi_input_func (gpointer data, gint source, GdkInputCondition condition) 385 1.1 christos { 386 1.1 christos IPVIWIN *ipviwin = (IPVIWIN *) data; 387 1.1 christos 388 1.1 christos (void)ipviwin->input(ipviwin, source); 389 1.1 christos } 390 1.1 christos 391 1.1 christos static void 392 1.1 christos vi_init_window (GtkViWindow *window, int fd) 393 1.1 christos { 394 1.1 christos static struct ip_si_operations ipsi_ops_gtk = { 395 1.1 christos vi_addstr, 396 1.1 christos vi_attribute, 397 1.1 christos vi_bell, 398 1.1 christos vi_busyoff, 399 1.1 christos vi_busyon, 400 1.1 christos vi_clrtoeol, 401 1.1 christos vi_deleteln, 402 1.1 christos vi_discard, 403 1.1 christos vi_editopt, 404 1.1 christos vi_insertln, 405 1.1 christos vi_move, 406 1.1 christos vi_quit, 407 1.1 christos vi_redraw, 408 1.1 christos vi_refresh, 409 1.1 christos vi_rename, 410 1.1 christos vi_rewrite, 411 1.1 christos vi_scrollbar, 412 1.1 christos vi_select, 413 1.1 christos vi_split, 414 1.1 christos (IPFunc_a)vi_waddstr, 415 1.1 christos }; 416 1.1 christos GtkVi *vi = window->vi; 417 1.1 christos 418 1.1 christos vi->ipvi->new_window(vi->ipvi, &window->ipviwin, fd); 419 1.1 christos 420 1.1 christos window->ipviwin->private_data = window; 421 1.1 christos window->ipviwin->set_ops(window->ipviwin, &ipsi_ops_gtk); 422 1.1 christos window->input_func = gtk_input_add_full(window->ipviwin->ifd, 423 1.1 christos GDK_INPUT_READ, 424 1.1 christos vi_input_func, 0, (gpointer)window->ipviwin, 0); 425 1.1 christos } 426 1.1 christos 427 1.1 christos static int 428 1.1 christos vi_addstr(ipviwin, str, len) 429 1.1 christos IPVIWIN *ipviwin; 430 1.1 christos const char *str; 431 1.1 christos u_int32_t len; 432 1.1 christos { 433 1.1 christos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data); 434 1.1 christos 435 1.1 christos gtk_vi_screen_addstr(GTK_VI_SCREEN(vi->vi_screen), str, len); 436 1.1 christos return (0); 437 1.1 christos } 438 1.1 christos 439 1.1 christos static int 440 1.1 christos vi_waddstr(ipviwin, str, len) 441 1.1 christos IPVIWIN *ipviwin; 442 1.1 christos const CHAR_T *str; 443 1.1 christos u_int32_t len; 444 1.1 christos { 445 1.1 christos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data); 446 1.1 christos 447 1.1 christos gtk_vi_screen_waddstr(GTK_VI_SCREEN(vi->vi_screen), str, len/sizeof(CHAR_T)); 448 1.1 christos return (0); 449 1.1 christos } 450 1.1 christos 451 1.1 christos static int 452 1.1 christos vi_attribute(ipviwin,attribute,on) 453 1.1 christos IPVIWIN *ipviwin; 454 1.1 christos u_int32_t attribute, on; 455 1.1 christos { 456 1.1 christos GtkViWindow* window = (GtkViWindow*)(ipviwin->private_data); 457 1.1 christos 458 1.1 christos if (attribute == SA_ALTERNATE) { 459 1.1 christos gtk_vi_show_term(window, !on); 460 1.1 christos } 461 1.1 christos else 462 1.1 christos gtk_vi_screen_attribute(GTK_VI_SCREEN(window->vi_screen), attribute, on); 463 1.1 christos return (0); 464 1.1 christos } 465 1.1 christos 466 1.1 christos static int 467 1.1 christos vi_bell(ipbp) 468 1.1 christos IPVIWIN *ipbp; 469 1.1 christos { 470 1.1 christos /* 471 1.1 christos fprintf(stderr, "vi_bell\n"); 472 1.1 christos */ 473 1.1 christos #if 0 474 1.1 christos /* 475 1.1 christos * XXX 476 1.1 christos * Future... implement visible bell. 477 1.1 christos */ 478 1.1 christos XBell(XtDisplay(__vi_screen->area), 0); 479 1.1 christos #endif 480 1.1 christos return (0); 481 1.1 christos } 482 1.1 christos 483 1.1 christos static int 484 1.1 christos vi_busyon (IPVIWIN* ipviwin, const char *a, u_int32_t s) 485 1.1 christos { 486 1.1 christos /* 487 1.1 christos fprintf(stderr, "vi_busyon\n"); 488 1.1 christos */ 489 1.1 christos #if 0 490 1.1 christos __vi_set_cursor(__vi_screen, 1); 491 1.1 christos #endif 492 1.1 christos return (0); 493 1.1 christos } 494 1.1 christos 495 1.1 christos static int 496 1.1 christos vi_busyoff(ipbp) 497 1.1 christos IPVIWIN *ipbp; 498 1.1 christos { 499 1.1 christos /* 500 1.1 christos fprintf(stderr, "vi_busyoff\n"); 501 1.1 christos */ 502 1.1 christos #if 0 503 1.1 christos __vi_set_cursor(__vi_screen, 0); 504 1.1 christos #endif 505 1.1 christos return (0); 506 1.1 christos } 507 1.1 christos 508 1.1 christos static int 509 1.1 christos vi_clrtoeol(ipviwin) 510 1.1 christos IPVIWIN *ipviwin; 511 1.1 christos { 512 1.1 christos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data); 513 1.1 christos 514 1.1 christos gtk_vi_screen_clrtoel(GTK_VI_SCREEN(vi->vi_screen)); 515 1.1 christos return 0; 516 1.1 christos } 517 1.1 christos 518 1.1 christos static int 519 1.1 christos vi_deleteln(ipviwin) 520 1.1 christos IPVIWIN *ipviwin; 521 1.1 christos { 522 1.1 christos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data); 523 1.1 christos 524 1.1 christos gtk_vi_screen_deleteln(GTK_VI_SCREEN(vi->vi_screen)); 525 1.1 christos return (0); 526 1.1 christos } 527 1.1 christos 528 1.1 christos static int 529 1.1 christos vi_editopt (IPVIWIN* a, const char *b, u_int32_t c, 530 1.1 christos const char *d, u_int32_t e, u_int32_t f) 531 1.1 christos { 532 1.1 christos /* 533 1.1 christos fprintf(stderr, "%p %p vi_editopt\n", a, a->private_data); 534 1.1 christos */ 535 1.1 christos #if 0 536 1.1 christos /* XXX: Nothing. */ 537 1.1 christos #endif 538 1.1 christos return (0); 539 1.1 christos } 540 1.1 christos 541 1.1 christos 542 1.1 christos static int 543 1.1 christos vi_discard(ipbp) 544 1.1 christos IPVIWIN *ipbp; 545 1.1 christos { 546 1.1 christos /* 547 1.1 christos fprintf(stderr, "vi_discard\n"); 548 1.1 christos */ 549 1.1 christos #if 0 550 1.1 christos /* XXX: Nothing. */ 551 1.1 christos #endif 552 1.1 christos return (0); 553 1.1 christos } 554 1.1 christos 555 1.1 christos static int 556 1.1 christos vi_insertln(ipviwin) 557 1.1 christos IPVIWIN *ipviwin; 558 1.1 christos { 559 1.1 christos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data); 560 1.1 christos 561 1.1 christos gtk_vi_screen_insertln(GTK_VI_SCREEN(vi->vi_screen)); 562 1.1 christos return (0); 563 1.1 christos } 564 1.1 christos 565 1.1 christos static int 566 1.1 christos vi_move(ipviwin, row, col) 567 1.1 christos IPVIWIN *ipviwin; 568 1.1 christos u_int32_t row; 569 1.1 christos u_int32_t col; 570 1.1 christos { 571 1.1 christos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data); 572 1.1 christos 573 1.1 christos gtk_vi_screen_move(GTK_VI_SCREEN(vi->vi_screen), row, col); 574 1.1 christos return (0); 575 1.1 christos } 576 1.1 christos 577 1.1 christos static int 578 1.1 christos vi_redraw(ipviwin) 579 1.1 christos IPVIWIN *ipviwin; 580 1.1 christos { 581 1.1 christos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data); 582 1.1 christos 583 1.1 christos gtk_widget_draw(GTK_WIDGET(vi->vi_screen), NULL); 584 1.1 christos return (0); 585 1.1 christos } 586 1.1 christos 587 1.1 christos static int 588 1.1 christos vi_refresh(ipviwin) 589 1.1 christos IPVIWIN *ipviwin; 590 1.1 christos { 591 1.1 christos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data); 592 1.1 christos 593 1.1 christos gtk_vi_screen_refresh(GTK_VI_SCREEN(vi->vi_screen)); 594 1.1 christos return (0); 595 1.1 christos } 596 1.1 christos 597 1.1 christos static int 598 1.1 christos vi_quit(ipviwin) 599 1.1 christos IPVIWIN *ipviwin; 600 1.1 christos { 601 1.1 christos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data); 602 1.1 christos 603 1.1 christos gtk_input_remove(vi->input_func); 604 1.1 christos gtk_widget_destroy(GTK_WIDGET(vi)); 605 1.1 christos return (0); 606 1.1 christos } 607 1.1 christos 608 1.1 christos static int 609 1.1 christos vi_rename(ipviwin, str, len) 610 1.1 christos IPVIWIN *ipviwin; 611 1.1 christos const char *str; 612 1.1 christos u_int32_t len; 613 1.1 christos { 614 1.1 christos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data); 615 1.1 christos 616 1.1 christos gchar* name = g_strndup(str, len); 617 1.1 christos gtk_signal_emit_by_name(GTK_OBJECT(vi), "rename", name); 618 1.1 christos g_free(name); 619 1.1 christos return (0); 620 1.1 christos } 621 1.1 christos 622 1.1 christos static int 623 1.1 christos vi_rewrite(ipviwin, row) 624 1.1 christos IPVIWIN *ipviwin; 625 1.1 christos u_int32_t row; 626 1.1 christos { 627 1.1 christos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data); 628 1.1 christos 629 1.1 christos gtk_vi_screen_rewrite(GTK_VI_SCREEN(vi->vi_screen), row); 630 1.1 christos return (0); 631 1.1 christos } 632 1.1 christos 633 1.1 christos 634 1.1 christos static int 635 1.1 christos vi_scrollbar(ipviwin, top, size, max) 636 1.1 christos IPVIWIN *ipviwin; 637 1.1 christos u_int32_t top, size, max; 638 1.1 christos { 639 1.1 christos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data); 640 1.1 christos 641 1.1 christos gtk_vi_window_scrollbar(vi, top, size, max); 642 1.1 christos 643 1.1 christos return (0); 644 1.1 christos } 645 1.1 christos 646 1.1 christos static int vi_select (IPVIWIN* a, const char * b, u_int32_t c) 647 1.1 christos { 648 1.1 christos /* 649 1.1 christos fprintf(stderr, "vi_select\n"); 650 1.1 christos */ 651 1.1 christos #if 0 652 1.1 christos /* XXX: Nothing. */ 653 1.1 christos #endif 654 1.1 christos return (0); 655 1.1 christos } 656 1.1 christos 657 1.1 christos static int 658 1.1 christos vi_split(ipbp) 659 1.1 christos IPVIWIN *ipbp; 660 1.1 christos { 661 1.1 christos fprintf(stderr, "vi_split\n"); 662 1.1 christos #if 0 663 1.1 christos /* XXX: Nothing. */ 664 1.1 christos #endif 665 1.1 christos return (0); 666 1.1 christos } 667 1.1 christos 668 1.1 christos static int 669 1.1 christos vi_ex_init(ipviwin) 670 1.1 christos IPVIWIN *ipviwin; 671 1.1 christos { 672 1.1 christos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data); 673 1.1 christos 674 1.1 christos /* 675 1.1 christos gtk_vi_show_term(vi, 1); 676 1.1 christos */ 677 1.1 christos return 0; 678 1.1 christos } 679 1.1 christos 680 1.1 christos static int 681 1.1 christos vi_vi_init(ipviwin) 682 1.1 christos IPVIWIN *ipviwin; 683 1.1 christos { 684 1.1 christos GtkViWindow* vi = (GtkViWindow*)(ipviwin->private_data); 685 1.1 christos 686 1.1 christos /* 687 1.1 christos gtk_vi_show_term(vi, 0); 688 1.1 christos */ 689 1.1 christos return 0; 690 1.1 christos } 691