
//	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();
}

