major bugfixes, still need clean up + improvements, not to mention speex and video...
[my-code/ivac.git] / src / ivac.c
index 281b1a5..12e5f59 100644 (file)
@@ -138,7 +138,7 @@ int main(int argc,char **argv) {
 
   /* display init */
   display_init(&(ivac.display));
+
   /* display */
   ivac_display(&ivac);
   ivac_display_content(&ivac);
@@ -315,6 +315,10 @@ int ivac_event_cb(t_event *event,void *ptr) {
 
 int ivac_regular_cb(t_event *event,void *ptr) {
 
+  t_ivac *ivac;
+
+  ivac=(t_ivac *)ptr;
+
   /* usual jobs like audio & video transmit ... */
 
   return SUCCESS;
@@ -329,35 +333,29 @@ int ivac_parse_command(t_input *input,void *ptr) {
   char *data,valid;
   char c_str[IVAC_CONSOLE_STRING_LEN];
   char arg[IVAC_ARG_COUNT][IVAC_ARG_LEN];
-  char debug_string[128];
+#ifdef DEBUG
+  char debug_string[IVAC_CONSOLE_STRING_LEN];
+#endif
 
   ivac=(t_ivac *)ptr;
   data=input->content;
   valid=0;
 
   /* refresh prompt content only */
-  ivac_display_prompt_content(ivac);
-  ivac_display_draw(ivac);
-
-#ifdef DEBUG
-  ivac_add_to_monitor(ivac,"nach display refresh");
-#endif
-
-#ifdef DEBUG
-  ivac_add_to_monitor(ivac,"nach display refresh");
-#endif 
-
 #ifdef DEBUG
-  
-  strcpy(debug_string,"hahahaha!");
+  sprintf(debug_string,"-> %02x c_count = %d",input->content[input->c_count-1],
+                       input->c_count);
   ivac_add_to_monitor(ivac,debug_string);
 #endif
+  ivac_display_prompt_content(ivac);
+  ivac_display_draw(ivac);
 
   /* parse command routines */
-  if(data[input->c_count-1]=='\n' || data[input->c_count-1]=='\r') {
+  if(data[input->c_count-1]=='\n'||data[input->c_count-1]=='\r') {
 
 #ifdef DEBUG
-    ivac_add_to_monitor(ivac,"got newline or carriage return!");
+    sprintf(debug_string,"got %02x",data[input->c_count-1]);
+    ivac_add_to_monitor(ivac,debug_string);
 #endif
 
     /* delete console string + args */
@@ -366,21 +364,28 @@ int ivac_parse_command(t_input *input,void *ptr) {
 
     /* get args */
     len=0;
-    while(data[len]!='\n') len++;
+    while(data[len]!='\n'&&data[len]!='\r') len++;
+#ifdef DEBUG
+    sprintf(debug_string,"len = %d\n",len);
+    ivac_add_to_monitor(ivac,debug_string);
+#endif
     i=0; j=0;
     while((i<len) && (j<IVAC_ARG_COUNT)) {
       k=0;
-      while((data[i+k]!=' ')&&(data[i+k]!='\n')) {
+      while(data[i+k]==' ') i++;
+      while(data[i+k]!=' '&&data[i+k]!='\n'&&data[i+k]!='\r') {
         arg[j][k]=data[i+k];
         k++;
       }
       arg[j][k]='\0';
       j++;
-      /* skip all ' ' */
-      while(data[i+k]==' ') k++;
       i+=k;
     }
 
+#ifdef DEBUG
+    sprintf(debug_string,"got args: %s ...",arg[0]);
+    ivac_add_to_monitor(ivac,debug_string);
+#endif
 
     /* parse command  aka arg[0] */
     if(!(strncmp(arg[0],"quit",4))) {
@@ -421,13 +426,16 @@ int ivac_parse_command(t_input *input,void *ptr) {
           sprintf(c_str,"channel %02d: connection in use",channel);
         else if(i==N_E_NO_INFO)
           sprintf(c_str,"channel %02d: channel not configured",channel);
-        else {
+        else if(i==N_SUCCESS) {
           sprintf(c_str,"channel %02d: connected to %s:%d",channel,
                   ivac->net.connection[channel].ip,
                   ivac->net.connection[channel].port);
           event_math(ivac->net.connection[channel].fd,&(ivac->event),READ,ADD);
           ivac_send_info(channel,ivac);
         }
+        else if(i==N_E_CONNECT)
+          sprintf(c_str,"channel %02d: connection error - %s",
+                        channel,sys_errlist[errno]);
       }
       else sprintf(c_str,"invalid argument: '%s'",arg[1]);
     } 
@@ -487,18 +495,15 @@ int ivac_parse_command(t_input *input,void *ptr) {
     /* add console string to console buffer */
     ivac_add_to_monitor(ivac,c_str);
 
-    /* refresh whole display content */
-    ivac_display_content(ivac);
-    ivac_display_draw(ivac);
-
     /* delete input content buffer + reset counter */
     memset(input->content,0,input->c_count-1);
     input->c_count=0;
 
+    /* refresh whole display content */
+    ivac_display_content(ivac);
+    ivac_display_draw(ivac);
   }
 
-  ivac_add_to_monitor(ivac,"debug: end of parse function");
-
   return SUCCESS;
 }
 
@@ -566,14 +571,17 @@ int ivac_display_console(t_ivac *ivac) {
 
 int ivac_display_console_content(t_ivac *ivac) {
 
-  int i;
+  int i,size;
   char string[IVAC_CONSOLE_STRING_LEN];
 
   for(i=0;i<IVAC_CONSOLE_LEN;i++) {
-    snprintf(string,IVAC_CONSOLE_STRING_LEN,"%s\n",ivac->console[i]);
+    size=strlen(ivac->console[i]);
+    size=(size<IVAC_CONSOLE_STRING_LEN)?size:IVAC_CONSOLE_STRING_LEN;
+    memcpy(string,ivac->console[i],size);
+    memset(string+size,' ',IVAC_CONSOLE_STRING_LEN-size);
     display_string(&(ivac->display),
                    0,ivac->display.max_y-IVAC_PROMPT_LEN-IVAC_CONSOLE_LEN+1+i,
-                   string,strlen(string));
+                   string,IVAC_CONSOLE_STRING_LEN);
   }
 
   return SUCCESS;
@@ -593,10 +601,11 @@ int ivac_display_prompt_content(t_ivac *ivac) {
 
   for(count=0;count<ivac->input.c_count;count++)
     string[count]=ivac->input.content[count];
-  for(;count<ivac->display.max_x-8;count++) string[count]=' ';
+  for(count=ivac->input.c_count;count<IVAC_CONSOLE_STRING_LEN-8;count++)
+    string[count]=' ';
   display_string(&(ivac->display),8,ivac->display.max_y-1,
-                 string,ivac->display.max_x);
-  
+                 string,IVAC_CONSOLE_STRING_LEN-8);
+
   return SUCCESS;
 }