Index: app/src/gue/main.cc
===================================================================
--- app/src/gue/main.cc	(revision 8abee07844d88c22efa7b75d8c6b2ea4d5b34308)
+++ app/src/gue/main.cc	(revision 10c74af18d1db99b7373ceafcb3c13352fe80320)
@@ -117,70 +117,159 @@
 	      char* parms_end = parms;
 	      char last_lemma[MAX_LINE];
-	      
-	      while ((i=tab.next()) != -1 && count++<guess_count) {
-		/* if we have "one-line" flag then everything goes in one segment as many fields,
-		 * if we have "one-field" flag everything goes in one segment as ONE field:
-		 * - diferent lemmas are separated with ';', sequent descriptions to one lemma
-		 *   are separated with ','
-		 */
-		if ((!first) && (tab[i].w_suf() < cut_off) || (tab[i].w_suf() < delta * last_weight)) {
+
+	      count = 1;
+	      
+	      while (count < tab.count() && count <= guess_count)
+		if (first || tab[count].w_suf() >= cut_off && tab[count].w_suf() >= delta * last_weight)
+		  {
+		    first=0;
+		    last_weight = tab[i].w_suf();
+		    count++;
+		  }
+		else
 		  break;
+	      
+	      // drukujemy count pierwszych z tab
+
+
+	      if(one_line)
+		{
+		  char* descp=desc;
+		  for (int i=0; i< count; ++i)
+		    {
+		      descp += sprintf(descp," %s%s,%s", output_field_prefix, tab[i].lemma(), tab[i].descr());
+		      if(weights) descp += sprintf(descp,":%d",(int)tab[i].w_suf());
+		    }
+		  strcpy(outline,line);
+		  outline[strlen(outline)-1]='\0';
+		  strcat(outline,desc);
+		  strcat(outline,"\n");
+		  fputs(outline, outputf);
+		  if (copy_processed)
+		    fputs(line,outputf);
 		}
-		if (first) {
-		  parms_end += sprintf(parms_end, "%s", field_prefix);
-		} else if (!args.one_field_flag)
-		  parms_end += sprintf(parms_end, "%s", field_prefix);
-		
-		if (!args.one_field_flag || strcmp(last_lemma, tab[i].lemma()) != 0) {
-		  if (args.one_field_flag && !first)
-		    parms_end += sprintf(parms_end, ";");
-		  parms_end += sprintf(parms_end, "%s", tab[i].lemma());
-		  strcpy(last_lemma, tab[i].lemma());
+	      else if(one_field)
+		{
+		  char* descp=desc;
+		  for (int i=0; i< count; ++i)
+		    if(i==0)
+		      {
+			descp += sprintf(descp," %s%s,%s", output_field_prefix, tab[i].lemma(), tab[i].descr());
+			if(weights) descp += sprintf(descp,":%d",(int)tab[i].w_suf());
+		      }
+		    else
+		      {
+			if(strcmp(tab[i].lemma(),tab[i-1].lemma())==0)
+			  descp += sprintf(descp,",%s",tab[i].descr());
+			else
+			  descp += sprintf(descp,";%s,%s",tab[i].lemma(),tab[i].descr());
+			if(weights) descp += sprintf(descp,":%d",(int)tab[i].w_suf());
+		      }
+		  
+		  strcpy(outline,line);
+		  outline[strlen(outline)-1]='\0';
+		  strcat(outline,desc);
+		  strcat(outline,"\n");
+		  fputs(outline, outputf);
+		  if (copy_processed)
+		    fputs(line,outputf);
 		}
-		
-		first=0;
-		
-		last_weight = tab[i].w_suf();
-		if (!weights)
-		  parms_end += sprintf(parms_end, ",%s:%d",  tab[i].descr(), (int)tab[i].w_suf());
-		else
-		  parms_end += sprintf(parms_end, ",%s", tab[i].descr());
-		
-		if (!args.one_field_flag) {
-		  seg.addfield(parms);
-		  parms_end = parms;
+	      else
+		{
+		  for (int i=0; i< tab.count(); ++i)
+		    {
+		      // kolejne opisy - kolejne linie.
+		      char* descp=desc;
+		      descp += sprintf(desc, " %s%s,%s\n", output_field_prefix, tab[i].lemma(), tab[i].descr());
+		      if(weights) descp += sprintf(descp,":%d",(int)tab[i].w_suf());
+		      strcpy(outline,line);
+		      outline[strlen(outline)-1]='\0';
+		      strcat(outline,desc);
+		      fputs(outline, outputf);
+		    }
+		  if (copy_processed)
+		    fputs(line,outputf);
 		}
-		
-		if (!(args.one_field_flag || args.one_line_flag)) {
-		  seg.print(outline);
-		  fputs(outline, outputf);
-		  --seg.auxn;
-		}
-		//if (copy_processed)
-		//  fputs(outline, stdout);
-	      } //while
-	      
-	      if (args.one_field_flag)
-		seg.addfield(parms);
-	      
-	      if (args.one_field_flag || args.one_line_flag){
-		seg.print(outline);
-		fputs(outline, outputf);
-	      }
-	    } else { // if (process_segment)
-	    // jak to nie jest wyraz - to przepisz token na wyjscie.
-	    //      printtok(line, start, len, cat, form);
-	    seg.print(outline);
-	    fputs(outline, outputf);
-	    if (copy_processed)
-	      fputs(outline, stdout);
-	  }
+	    }
 	}
-      time_t end_time = time(NULL);
-      if (per_info) {
-	printf("Liczba sÂ³Ã³w: %d\n", words_count);
-	printf("Czas analizy: %d sekund\n", end_time-start_time);
-      }
-      cmdline_parser_free(&args);
+      if(args.interactive_flag) 
+	fflush(outputf), fflush(failedf);
+      
     }
-  
+  cmdline_parser_free(&args);
+}
+
+
+
+
+
+
+
+
+// 	      while ((i=tab.next()) != -1 && count++<guess_count) {
+// 		/* if we have "one-line" flag then everything goes in one segment as many fields,
+// 		 * if we have "one-field" flag everything goes in one segment as ONE field:
+// 		 * - diferent lemmas are separated with ';', sequent descriptions to one lemma
+// 		 *   are separated with ','
+// 		 */
+// 		if ((!first) && (tab[i].w_suf() < cut_off) || (tab[i].w_suf() < delta * last_weight)) {
+// 		  break;
+// 		}
+// 		if (first) {
+// 		  parms_end += sprintf(parms_end, "%s", output_field_prefix);
+// 		} else if (!args.one_field_flag)
+// 		  parms_end += sprintf(parms_end, "%s", output_field_prefix);
+		
+// 		if (!args.one_field_flag || strcmp(last_lemma, tab[i].lemma()) != 0) {
+// 		  if (args.one_field_flag && !first)
+// 		    parms_end += sprintf(parms_end, ";");
+// 		  parms_end += sprintf(parms_end, "%s", tab[i].lemma());
+// 		  strcpy(last_lemma, tab[i].lemma());
+// 		}
+		
+// 		first=0;
+		
+// 		last_weight = tab[i].w_suf();
+// 		if (!weights)
+// 		  parms_end += sprintf(parms_end, ",%s:%d",  tab[i].descr(), (int)tab[i].w_suf());
+// 		else
+// 		  parms_end += sprintf(parms_end, ",%s", tab[i].descr());
+		
+// 		if (!args.one_field_flag) {
+// 		  seg.addfield(parms);
+// 		  parms_end = parms;
+// 		}
+		
+// 		if (!(args.one_field_flag || args.one_line_flag)) {
+// 		  seg.print(outline);
+// 		  fputs(outline, outputf);
+// 		  --seg.auxn;
+// 		}
+// 		//if (copy_processed)
+// 		//  fputs(outline, stdout);
+// 	      } //while
+	      
+// 	      if (args.one_field_flag)
+// 		seg.addfield(parms);
+	      
+// 	      if (args.one_field_flag || args.one_line_flag){
+// 		seg.print(outline);
+// 		fputs(outline, outputf);
+// 	      }
+// 	    } else { // if (process_segment)
+// 	    // jak to nie jest wyraz - to przepisz token na wyjscie.
+// 	    //      printtok(line, start, len, cat, form);
+// 	    seg.print(outline);
+// 	    fputs(outline, outputf);
+// 	    if (copy_processed)
+// 	      fputs(outline, stdout);
+// 	  }
+// 	}
+//       time_t end_time = time(NULL);
+//       if (per_info) {
+// 	printf("Liczba sÂ³Ã³w: %d\n", words_count);
+// 	printf("Czas analizy: %d sekund\n", end_time-start_time);
+//       }
+//       cmdline_parser_free(&args);
+//     }
+  
