diff options
author | tomsmeding <tom.smeding@gmail.com> | 2017-01-19 11:05:59 +0100 |
---|---|---|
committer | tomsmeding <tom.smeding@gmail.com> | 2017-01-19 11:05:59 +0100 |
commit | 830a7b4ff5d08f408a3df56846d8b336d17fa979 (patch) | |
tree | 641284be9bd5c7876929fb4c920b586da64b2568 | |
parent | 6b260962eef4caa486ceee9a60b61c67269025c6 (diff) |
ui ++
-rw-r--r-- | main.c | 47 | ||||
-rw-r--r-- | tcp.c | 5 | ||||
-rw-r--r-- | tcp.h | 1 |
3 files changed, 48 insertions, 5 deletions
@@ -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;i<list->nitems&&i+7<termsize.h;i++){ - tprintf("Room: %s\n",list->items[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; } } @@ -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]; @@ -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. |