// N.B.: gtkserver has been started and switched to another process before running this program import std.date; import std.socket; import std.string; import std.socketstream; void main (char[][] args) { char [] tmp; char [] win, table, button, entry, text, radio1, radio2, event; InternetAddress gtksockaddr = new InternetAddress("localhost", 50000); TcpSocket gtksocket = new TcpSocket(gtksockaddr); SocketStream gtkserver = new SocketStream (gtksocket); gtkserver.writeString("gtk_init NULL NULL"); tmp = gtkserver.readLine(); printf ("01 tmp = <<%s>>.\n", toStringz(tmp)); gtkserver.writeString("gtk_window_new 0"); win = gtkserver.readLine(); printf ("02 win = <<%s>>\n", toStringz(win)); gtkserver.writeString("gtk_window_set_title " ~ win ~ " D Demo program with TCP "); tmp = gtkserver.readLine(); printf ("03 tmp = <<%s>>.\n", toStringz(tmp)); gtkserver.writeString("gtk_widget_set_usize " ~ win ~ " 450 400"); tmp = gtkserver.readLine(); printf ("04 tmp = <<%s>>.\n", toStringz(tmp)); gtkserver.writeString("gtk_table_new 50 50 1"); table = gtkserver.readLine(); printf ("05 table = <<%s>>.\n", toStringz(table)); gtkserver.writeString("gtk_container_add " ~ win ~ " " ~ table); tmp = gtkserver.readLine(); printf ("06 tmp = <<%s>>.\n", toStringz(tmp)); // the EXIT button gtkserver.writeString("gtk_button_new_with_label Exit"); button = gtkserver.readLine(); printf ("07 button = <<%s>>.\n", toStringz(button)); gtkserver.writeString("gtk_table_attach_defaults " ~ table ~ " " ~ button ~ " 41 49 45 49"); tmp = gtkserver.readLine(); printf ("08 tmp = <<%s>>.\n", toStringz(tmp)); // an entry field gtkserver.writeString("gtk_entry_new"); entry = gtkserver.readLine(); printf ("09 entry = <<%s>>.\n", toStringz(entry)); gtkserver.writeString("gtk_table_attach_defaults " ~ table ~ " " ~ entry ~ " 1 40 45 49"); tmp = gtkserver.readLine(); printf ("10 tmp = <<%s>>.\n", toStringz(tmp)); // a text field gtkserver.writeString("gtk_text_new NULL NULL"); text = gtkserver.readLine(); printf ("11 text = <<%s>>.\n", toStringz(text)); gtkserver.writeString("gtk_table_attach_defaults " ~ table ~ " " ~ text ~ " 1 49 8 44"); tmp = gtkserver.readLine(); printf ("12 tmp = <<%s>>.\n", toStringz(tmp)); // now some radio buttons gtkserver.writeString("gtk_radio_button_new_with_label_from_widget NULL Yes"); radio1 = gtkserver.readLine(); printf ("13 radio1 = <<%s>>.\n", toStringz(radio1)); gtkserver.writeString("gtk_table_attach_defaults " ~ table ~ " " ~ radio1 ~ " 1 10 1 4"); tmp = gtkserver.readLine(); printf ("14 tmp = <<%s>>.\n", toStringz(tmp)); gtkserver.writeString("gtk_radio_button_new_with_label_from_widget " ~ radio1 ~ " No"); radio2 = gtkserver.readLine(); printf ("13 radio2 = <<%s>>.\n", toStringz(radio2)); gtkserver.writeString("gtk_table_attach_defaults " ~ table ~ " " ~ radio2 ~ " 1 10 4 7"); tmp = gtkserver.readLine(); printf ("14 tmp = <<%s>>.\n", toStringz(tmp)); // the widgets have been created, so show them gtkserver.writeString("gtk_widget_show_all " ~ win); tmp = gtkserver.readLine(); printf ("15 tmp = <<%s>>.\n", toStringz(tmp)); gtkserver.writeString("gtk_widget_grab_focus " ~ entry); tmp = gtkserver.readLine(); printf ("16 tmp = <<%s>>.\n", toStringz(tmp)); event = ""; while (event != button) { gtkserver.writeString("gtk_server_callback WAIT"); event = gtkserver.readLine(); printf ("17 event = <<%s>>.\n", toStringz(tmp)); if (event == entry) { gtkserver.writeString("gtk_entry_get_text " ~ entry); tmp = gtkserver.readLine(); tmp = "" ~ '"' ~ tmp ~ "\\n" ~ '"'; printf ("18:value entered in entry = <<%s>>.\n", toStringz(tmp)); // gtk_text_insert, NONE, NONE, 6, WIDGET, NULL, NULL, NULL, STRING, LONG gtkserver.writeString("gtk_text_insert " ~ text ~ " NULL NULL NULL " ~ tmp ~ " -1"); tmp = gtkserver.readLine(); printf ("19 tmp = <<%s>>.\n", toStringz(tmp)); gtkserver.writeString("gtk_entry_set_text " ~ entry ~ '"' ~ " " ~'"'); tmp = gtkserver.readLine(); printf ("20 tmp = <<%s>>.\n", toStringz(tmp)); } } gtkserver.writeString("gtk_exit 0"); gtkserver.close(); }