diff options
| -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.  | 
