From 830a7b4ff5d08f408a3df56846d8b336d17fa979 Mon Sep 17 00:00:00 2001 From: tomsmeding Date: Thu, 19 Jan 2017 11:05:59 +0100 Subject: ui ++ --- main.c | 47 ++++++++++++++++++++++++++++++++++++++++++----- tcp.c | 5 +++++ tcp.h | 1 + 3 files changed, 48 insertions(+), 5 deletions(-) diff --git a/main.c b/main.c index 1dcdc1f..0b7a639 100644 --- a/main.c +++ b/main.c @@ -42,6 +42,22 @@ static void exit_cleanup(void){ } } +char* show_prompt(int x,int y,int w,const char *title){ + Promptwidget *prw=prw_make(x,y,w,title); + char *line=NULL; + while(line==NULL){ + redraw(); + int key=tgetkey(); + if(key==KEY_ESC)break; + line=prw_handlekey(prw,key); + } + prw_destroy(prw); + return line; +} + +static void room_create(const char *name){} +static void room_join(const char *name){} + int main(void){ int sock=tcp_connect(HOSTNAME,PORT); if(sock==-1){ @@ -66,10 +82,10 @@ int main(void){ while(true){ i64 sel=showmenu("REGEXBATTLE", - "List public rooms","Create a room","Join a room", + "List open public games","Create a new game","Join an open game", "Quit",NULL); switch(sel){ - case 0:{ + case 0: { tcp_send_line(sock,"room_list " GAMENAME); TcpList *list=tcp_read_list(sock,"room_list"); if(list==NULL)die("Protocol error: receiving list"); @@ -77,13 +93,34 @@ int main(void){ fillrect(0,7,termsize.w,termsize.h-7,' '); moveto(0,7); for(i64 i=0;initems&&i+7items[i]); + tprintf("Public games: %s\n",list->items[i]); + } + tcp_list_destroy(list); + break; + } + + case 1: { + char *line=show_prompt(2,8,20,"Game name to create"); + Size termsize=gettermsize(); + fillrect(0,7,termsize.w,termsize.h-7,' '); + if(line!=NULL){ + room_create(line); + free(line); + } + break; + } + + case 2: { + char *line=show_prompt(2,8,20,"Game name to join"); + Size termsize=gettermsize(); + fillrect(0,7,termsize.w,termsize.h-7,' '); + if(line!=NULL){ + room_join(line); + free(line); } break; } - case 1: break; - case 2: break; case 3: return 0; } } diff --git a/tcp.c b/tcp.c index a254b99..ae3d704 100644 --- a/tcp.c +++ b/tcp.c @@ -132,6 +132,11 @@ TcpList* tcp_read_list(int sock,const char *tag){ return list; } +void tcp_list_destroy(TcpList *list){ + free(list->items); + free(list); +} + static const char* itoa(int n){ static char buf[64]; diff --git a/tcp.h b/tcp.h index a09732a..dd368cb 100644 --- a/tcp.h +++ b/tcp.h @@ -25,6 +25,7 @@ typedef struct TcpList{ //Returns NULL on error instead of -1. TcpList* tcp_read_list(int sock,const char *tag); +void tcp_list_destroy(TcpList *list); //Returns the socket. -- cgit v1.2.3