summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortomsmeding <tom.smeding@gmail.com>2017-01-19 11:05:59 +0100
committertomsmeding <tom.smeding@gmail.com>2017-01-19 11:05:59 +0100
commit830a7b4ff5d08f408a3df56846d8b336d17fa979 (patch)
tree641284be9bd5c7876929fb4c920b586da64b2568
parent6b260962eef4caa486ceee9a60b61c67269025c6 (diff)
ui ++
-rw-r--r--main.c47
-rw-r--r--tcp.c5
-rw-r--r--tcp.h1
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;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;
}
}
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.