display api improvements - to be continued
[my-code/ivac.git] / src / ivac.c
index 9d2b216..60338ee 100644 (file)
@@ -21,8 +21,6 @@
  *
  */
 
-// #define USE_GTK
-
 #include "ivac.h"
 
 int usage(void) {
@@ -34,7 +32,9 @@ int usage(void) {
   puts("-h \t\t show this help");
   puts("-n <name> \t specify your name");
   puts("-p <port> \t specify port to listen for incoming connections");
+  puts("-u <port> \t specify udp data port");
   puts("-d <device> \t specify audio device");
+  puts("-i <iface> \t specify network interface");
   puts("");
 
   return SUCCESS;
@@ -50,7 +50,9 @@ int main(int argc,char **argv) {
   /* default values */
   strcpy(ivac.username,"ivac");
   ivac.net.l_port=IVAC_LISTEN_PORT;
+  ivac.net.l_udp_port=IVAC_UDP_PORT;
   strcpy(ivac.audio.dsp_dev,SOUND_DEVICE);
+  strcpy(ivac.net.nic,"eth0");
  
   /* parse argv and change default values */
   for(i=1;i<argc;i++) {
@@ -65,9 +67,14 @@ int main(int argc,char **argv) {
         case 'p':
           ivac.net.l_port=atoi(argv[++i]);
           break;
+        case 'u':
+          ivac.net.l_udp_port=atoi(argv[++i]);
+          break;
         case 'd':
           strncpy(ivac.audio.dsp_dev,argv[++i],MAX_CHAR_DEVICE);
           break;
+        case 'i':
+          strncpy(ivac.net.nic,argv[++i],MAX_NIC_DEVICE);
         default:
           usage();
           return ERROR;
@@ -104,9 +111,11 @@ int main(int argc,char **argv) {
     ivac_shutdown(&ivac);
     return ERROR;
   }
+  network_udp_listen_init(&(ivac.net));
 
-  /* add listening port + stdin to (read) event system */
+  /* add listening port(s) + stdin to (read) event system */
   event_math(ivac.net.l_fd,&(ivac.event),READ,ADD);
+  event_math(ivac.net.l_udp_fd,&(ivac.event),READ,ADD);
   event_math(0,&(ivac.event),READ,ADD);
 
   /* display init */
@@ -121,7 +130,13 @@ int main(int argc,char **argv) {
   audio_setup(&(ivac.audio));
 
   /* display */
-  ivac_display(&(ivac.display));
+#ifdef XXX_GUI
+  /* "constant" graphics */
+  ivac_display_head(&ivac);
+  ivac_display_box(&ivac);
+  ivac_display_console(&ivac);
+#endif
+  ivac_display(&ivac);
 
   /* start event system - callbacks used: ivac_event_cb + ivac_regular_cb */
   event_start(&(ivac.event),(void *)&ivac,ivac_event_cb,ivac_regular_cb);
@@ -132,6 +147,7 @@ int main(int argc,char **argv) {
 int ivac_shutdown(t_ivac *ivac) {
 
   network_shutdown(&(ivac->net));
+  network_udp_shutdown(&(ivac->net));
   input_shutdown(&(ivac->input));
   event_stop(&(ivac->event));
   audio_shutdown(&(ivac->audio));
@@ -263,7 +279,7 @@ int ivac_event_cb(t_event *event,void *ptr) {
       event_math(ivac->net.connection[channel].fd,event,READ,ADD);
       ivac_send_info(channel,ivac);
     }
-    ivac_display_content(ivac);
+    ivac_display(ivac);
   }
 
   /* wait for user info */
@@ -277,7 +293,7 @@ int ivac_event_cb(t_event *event,void *ptr) {
           sprintf(c_str,"channel %02d: broken pipe - disconnected",channel);
           ivac_add_to_monitor(ivac,c_str);
         }
-        ivac_display_content(ivac);
+        ivac_display(ivac);
       }
     }
   } 
@@ -310,7 +326,7 @@ int ivac_parse_command(t_input *input,void *ptr) {
   data=input->content;
   valid=0;
 
-  /* refresh prompt content only! */
+  /* refresh prompt content only */
   ivac_display_prompt_content(ivac);
 
   /* parse command routines */
@@ -443,7 +459,7 @@ int ivac_parse_command(t_input *input,void *ptr) {
     ivac_add_to_monitor(ivac,c_str);
 
     /* refresh whole display content */
-    ivac_display_content(ivac);
+    ivac_display(ivac);
 
     /* delete content buffer + reset counter */
     memset(input->content,0,input->c_count-1);
@@ -454,16 +470,26 @@ int ivac_parse_command(t_input *input,void *ptr) {
   return SUCCESS;
 }
 
-int ivac_display_head(t_display *display) {
+int ivac_display_head(t_ivac *ivac) {
 
-  puts("#########################################################");
+#ifndef XXX_GUI
+  display_term_line(&(ivac->display),'#');
   puts("##### ivac - -  Copyright (C) 2004 Frank Zirkelbach #####");
   puts("#########################################################");
+#endif
 
   return SUCCESS;
 }
 
-int ivac_display_box(t_display *display) {
+int ivac_display_box(t_ivac *ivac) {
+
+#ifndef XXX_GUI
+  puts("---------------------------------------------------------------------");
+  printf("username: %s, capabilities: %02x|%04x\n",ivac->username,ivac->g_cap,
+                                                   ivac->av_cap);
+  puts("---------------------------------------------------------------------");
+  puts("connections:");
+#endif
  
   return SUCCESS;
 }
@@ -477,10 +503,26 @@ int ivac_display_box_content(t_ivac *ivac) {
     if(ivac->challenger[channel].name[0]==0)
       strcpy(ivac->challenger[channel].name,"<empty>");
 
+#ifndef XXX_GUI
+  for(channel=0;channel<MAX_CONNECTIONS;channel++) {
+    if(ivac->net.connection[channel].status&C_INFO_A)
+      printf("channel %02d: %s:%d, status: %02x, name: %s\n",channel,
+             ivac->net.connection[channel].ip,
+             ivac->net.connection[channel].port,
+             ivac->net.connection[channel].status,
+             ivac->challenger[channel].name);
+  }
+#endif
+
   return SUCCESS;
 }
 
-int ivac_display_console(t_display *display) {
+int ivac_display_console(t_ivac *ivac) {
+
+#ifndef XXX_GUI
+  puts("---------------------------------------------------------------------");
+  puts("console messages:");
+#endif
 
   return SUCCESS;
 }
@@ -489,54 +531,58 @@ int ivac_display_console_content(t_ivac *ivac) {
 
   int i;
 
+#ifndef XXX_GUI
   for(i=0;i<IVAC_CONSOLE_LEN;i++)
-    printf("[ivac] console line %d: %s\n",i,ivac->console[i]);
+    printf("| %s\n",ivac->console[i]);
+#endif
 
   return SUCCESS;
 }
 
-int ivac_display_prompt(t_display *display) {
+int ivac_display_prompt(t_ivac *ivac) {
+
+#ifndef XXX_GUI
+  puts("---------------------------------------------------------------------");
+  printf("prompt: ");
+#endif
 
   return SUCCESS;
 }
 
 int ivac_display_prompt_content(t_ivac *ivac) {
 
+#ifndef XXX_GUI
   printf("%c",ivac->input.content[ivac->input.c_count-1]);
   fflush(NULL);
+#endif
 
   return SUCCESS;
 }
 
-int ivac_display(t_display *display) {
+int ivac_display(t_ivac *ivac) {
 
   int x,y;
 
+#ifndef XXX_GUI
   /* display head */
-  ivac_display_head(display);
+  ivac_display_head(ivac);
 
   /* display box */
-  ivac_display_box(display);
-
-  /* display console */
-  ivac_display_console(display);
-
-  /* display command prompt */
-  ivac_display_prompt(display);
-
-  return SUCCESS;
-}
-
-int ivac_display_content(t_ivac *ivac) {
-
-  /* display box content */
+  ivac_display_box(ivac);
+#endif
   ivac_display_box_content(ivac);
 
-  /* display console content */
+#ifndef XXX_GUI
+  /* display console */
+  ivac_display_console(ivac);
+#endif
   ivac_display_console_content(ivac);
 
-  /* display prompt content */
-  ivac_display_prompt_content(ivac);
+#ifndef XXX_GUI
+  /* display command prompt */
+  ivac_display_prompt(ivac);
+#endif
+  fflush(NULL);
 
   return SUCCESS;
 }