TEXT *delete_SGML_tag(SGML *sg, TEXT *str) { TEXT *b; int a; if (sg->num_tags == 0) return(NULL); if (*(str+1) != '/') return(NULL); if ((b = TEXT_strchr(str+2,'>')) == NULL) return(NULL); if (TEXT_strncmp(sg->tags[sg->num_tags-1].name,str+2,b - (str+2)) != 0) return(NULL); /* delete the last SGML tag */ sg->num_tags --; for (a=0; a<sg->tags[sg->num_tags].attrib_num; a++){ free_singarr(sg->tags[sg->num_tags].attrib_value[a],TEXT); free_singarr(sg->tags[sg->num_tags].attrib_name[a],TEXT); } sg->tags[sg->num_tags].attrib_num = 0; return(sg->tags[sg->num_tags].name); }
void release_WORD(void *p){ WORD *tw = (WORD *)p; if (tw == NULL_WORD) return; tw->use --; if (tw->use != 0) return; if (tw->value != NULL_TEXT) TEXT_free(tw->value); if (tw->intern_value != NULL_TEXT) TEXT_free(tw->intern_value); if (tw->tag1 != NULL_TEXT) TEXT_free(tw->tag1); if (tw->tag2 != NULL_TEXT) TEXT_free(tw->tag2); free_singarr(tw,WORD); }
static void destroy_NET_ALIGN(NET_ALIGN **net_ali){ char *proc = "destroy_NET_ALIGN"; if (db >= 1) printf("Entering %s:\n",proc); /* free the cell array */ free_2dimarr((*net_ali)->cell,(*net_ali)->arcset_a.max,CELL); /* the arcsets */ free_ARCSET(&((*net_ali)->arcset_a)); free_ARCSET(&((*net_ali)->arcset_b)); /* the structure */ free_singarr((*net_ali),NET_ALIGN); *net_ali = (NET_ALIGN *)0; }
static void print_gnu_range_graph(RANK *rank, char *percent_desc, char *testname, char *base, int for_blks, int feedback) { int b,t; FILE *fp_dat, *fp_mean, *fp_plt, *fp_median; double sum; TEXT *mean_name = (TEXT *)0, *dat_name = (TEXT *)0; TEXT *plt_name = (TEXT *)0, *basename = (TEXT *)0; TEXT *median_name = (TEXT *)0; double *pctt, *rnkk; int *ind; alloc_singarr(pctt,MAX( rank->n_blk , rank->n_trt ),double); alloc_singarr(rnkk,MAX( rank->n_blk , rank->n_trt ),double); alloc_singarr(ind,MAX( rank->n_blk , rank->n_trt ),int); basename = TEXT_strdup((TEXT *)rsprintf("%s%s",(strcmp(base,"-")==0) ? "STATS" : base, (for_blks) ? ".spk" : ".sys")); dat_name = TEXT_strdup((TEXT *)rsprintf("%s%s",basename,".dat")); /* make the datafiles for the treatements */ if ((fp_dat = fopen(dat_name,"w")) == (FILE *)0){ fprintf(stderr,"Error: unable to open GNUPLOT data file %s\n", dat_name); exit(1); } else if (feedback >= 1) printf(" Output written to '%s.*'\n",basename); mean_name = TEXT_strdup((TEXT *)rsprintf("%s%s",basename,".mean")); if ((fp_mean = fopen(mean_name,"w")) == (FILE *)0){ fprintf(stderr,"Error: unable to open GNUPLOT data file %s\n", mean_name); exit(1); } median_name = TEXT_strdup((TEXT *)rsprintf("%s%s",basename,".median")); if ((fp_median = fopen(median_name,"w")) == (FILE *)0){ fprintf(stderr,"Error: unable to open GNUPLOT data file %s\n", median_name); exit(1); } plt_name = TEXT_strdup((TEXT *)rsprintf("%s%s",basename,".plt")); if ((fp_plt = fopen(plt_name,"w")) == (FILE *)0){ fprintf(stderr,"Error: unable to open GNUPLOT file %s\n", plt_name); exit(1); } fprintf(fp_plt,"set yrange [%d:0]\n", 1 + ((for_blks) ?rank->n_blk :rank->n_trt )); fprintf(fp_plt,"set xrange [0:100]\n"); fprintf(fp_plt,"set title \"%s\"\n",testname); fprintf(fp_plt,"set key\n"); fprintf(fp_plt,"set ylabel \"%s\"\n",(for_blks) ? "Speaker ID" :"Systems"); fprintf(fp_plt,"set xlabel \"%s\"\n",percent_desc); fprintf(fp_plt,"set ytics ("); if (for_blks){ for (b=0;b< rank->n_blk ;b++){ double medianval=0.0; sum = 0.0; for (t=0;t< rank->n_trt ;t++){ fprintf(fp_dat,"%d %f\n", b+1,rank->pcts [ rank->trt_srt_ind [ b ] ][ t ] ); pctt[t] = rank->pcts [ rank->trt_srt_ind [ b ] ][ t ] ; sum += rank->pcts [ rank->trt_srt_ind [ b ] ][ t ] ; } rank_double_arr(pctt, rank->n_trt ,ind,rnkk,INCREASING); if ( rank->n_trt % 2 == 0) { /* handle the even arr len */ medianval = (pctt[ind[ rank->n_trt / 2]] + pctt[ind[( rank->n_trt / 2) - 1]]) / 2.0; } else { /* handle the odd arr len */ medianval = pctt[ind[ rank->n_trt / 2]]; } fprintf(fp_mean,"%d %f\n",b+1,sum / (double)( rank->n_trt )); fprintf(fp_median,"%d %f\n",b+1,medianval); fprintf(fp_plt,"\"%s\" %d",rank->blk_name[rank->trt_srt_ind[b]], b+1); if (b !=rank->n_blk -1) fprintf(fp_plt,","); } fprintf(fp_plt,")\n"); } else { for (t=0;t< rank->n_trt ;t++){ double medianval=0.0; sum = 0.0; for (b=0;b< rank->n_blk ;b++){ fprintf(fp_dat,"%d %f\n", t+1,rank->pcts [ b ][ rank->blk_srt_ind [ t ] ] ); pctt[b] = rank->pcts [ b ][ rank->blk_srt_ind [ t ] ] ; sum += rank->pcts [ b ][ rank->blk_srt_ind [ t ] ] ; } rank_double_arr(pctt, rank->n_blk ,ind,rnkk,INCREASING); if ( rank->n_blk % 2 == 0) { /* handle the even arr len */ medianval = (pctt[ind[ rank->n_blk / 2]] + pctt[ind[( rank->n_blk / 2) - 1]]) / 2.0; } else { /* handle the odd arr len */ medianval = pctt[ind[ rank->n_blk / 2]]; } fprintf(fp_mean,"%d %f\n",t+1,sum / (double)(rank->n_blk )); fprintf(fp_median,"%d %f\n",t+1,medianval); fprintf(fp_plt,"\"%s\" %d",rank->trt_name[rank->blk_srt_ind[t]], t+1); if (t !=rank->n_trt -1) fprintf(fp_plt,","); } fprintf(fp_plt,")\n"); } fprintf(fp_plt,"plot \"%s\" using 2:1 title \"Mean %s\" with lines,", mean_name, percent_desc); fprintf(fp_plt,"\"%s\" using 2:1 title \"Median %s\" with lines,", median_name, percent_desc); fprintf(fp_plt,"\"%s\" using 2:1 title \"Individual %s\"\n",dat_name, percent_desc); fclose(fp_dat); fclose(fp_mean); fclose(fp_median); fclose(fp_plt); free_singarr(mean_name , TEXT); free_singarr(dat_name , TEXT); free_singarr(plt_name , TEXT); free_singarr(basename , TEXT); free_singarr(median_name, TEXT); free_singarr(pctt,double); free_singarr(rnkk,double); free_singarr(ind,int); }