📄 rpg.c
字号:
current_underage = report_just.width - report_just.col[current_just].min_just_width; /* first set pointers the the values and compute the column sizes and column text sizes */ if (static_rpt_dbg) printf(" Row %d: Just:%d #C:%d Adj:%d Widths ",r,current_just,current_num_col, current_underage); current_add = 0; for (c=0 ; c<current_num_col; c++){ if (report_just.col[current_just].col_just[c] != 'a'){ if (report_just.col[current_just].col_lock[c] == LOCKED){ desc_column_text_size[c]=report_just.max_col_sizes[current_num_col][c]; desc_column_size[c]=(space_pad*2) + desc_column_text_size[c]; } else { desc_column_ptr[c] = report_just.cell_values[c][r]; size_adjustment = 0; if (c != current_num_col-1){ size_adjustment = (int)(((float)current_underage / (float)current_num_unlocked) * (float)(c + num_span_col(current_just,c) + 1)) - current_add; current_add += size_adjustment; } else { size_adjustment += current_underage - current_add; } desc_column_text_size[c]=report_just.max_col_sizes[current_num_col][c]; desc_column_size[c]=(space_pad*2) + desc_column_text_size[c] + size_adjustment; /* compute the size for this value */ for (c2=c+1; (c2 < current_num_col) && (report_just.col[current_just].col_just[c2] == 'a'); c2++){ if (c != current_num_col-1){ size_adjustment = (int)(((float)current_underage / (float)current_num_col) * (float)(c + num_span_col(current_just,c) + 1)) - current_add; current_add += size_adjustment; } else { size_adjustment += current_underage - current_add; } desc_column_size[c] += report_just.max_col_sizes[current_num_col][c2] + space_pad*2 + 1 + size_adjustment; desc_column_text_size[c] += report_just.max_col_sizes[current_num_col][c2] + space_pad*2 + 1; } } } else { desc_column_ptr[c] = ""; desc_column_text_size[c] = desc_column_size[c] = 0; } if (static_rpt_dbg) printf(" C%d:%d-%d(%d) ",c,desc_column_text_size[c], desc_column_size[c],current_add); } if (static_rpt_dbg) printf("\n"); for (p=report_just.before_row_separations[r]; *p != '\0'; p++) { /* add a row separation */ if (CENTER_PAGE && (report_just.width < PAGE_WIDTH)) print_spaces((PAGE_WIDTH - report_just.width)/2, fp); fprintf(fp,"|"); for (c=0 ; c<current_num_col; c++){ if (report_just.col[current_just].col_just[c] != 'a'){ for (x=0; x< desc_column_size[c]; x++) fprintf(fp,"%c",*p); if (! is_last_just_col(current_just,c)){ int sp; sp = num_span_col(current_just,c); if ( report_just.col[current_just].col_inter_space[sp + c] != ' '){ if (*p == ' ') fprintf(fp,"%c", report_just.col[current_just].col_inter_space[sp + c]); else if ((report_just.col[current_just].col_inter_space[sp + c] == '|') && (*p == '-') && ((r > 0) && (report_just.col[report_just.row_just[r-1]].col_inter_space[sp + c] == '|'))) fprintf(fp,"+"); else fprintf(fp,"%c", *p); } else fprintf(fp,"%c", *p); } } } fprintf(fp,"|\n"); } while (row_not_done){ row_not_done = 0; if (CENTER_PAGE && (report_just.width < PAGE_WIDTH)) print_spaces((PAGE_WIDTH - report_just.width)/2, fp); fprintf(fp,"|"); for (c=0 ; c< current_num_col; c++){ column_width=desc_column_size[c]; text_width=desc_column_text_size[c]; if (report_just.col[current_just].col_just[c] != 'a'){ switch (report_just.col[current_just].col_just[c]){ case 'c': case 'C': *fmt_str1='\0'; sprintf(fmt_str1,"%s%%%ds%s", spaces+SPACES_LEN-((column_width-text_width)/2),text_width, spaces+SPACES_LEN-(column_width-text_width - ((column_width-text_width)/2))); fprintf(fp,fmt_str1, center(get_next_string_value(&(desc_column_ptr[c]),text_width),text_width)); if (*desc_column_ptr[c] != '\0') row_not_done = 1; break; case 'r': case 'R': *fmt_str1='\0'; sprintf(fmt_str1,"%s%%%ds%s",spaces+SPACES_LEN-((column_width-text_width)/2),text_width, spaces+SPACES_LEN-(column_width-text_width - ((column_width-text_width)/2))); fprintf(fp,fmt_str1,get_next_string_value(&(desc_column_ptr[c]),text_width)); if (*desc_column_ptr[c] != '\0') row_not_done = 1; break; case 'l': case 'L': *fmt_str1='\0'; sprintf(fmt_str1,"%s%%-%ds%s",spaces+SPACES_LEN-((column_width-text_width)/2),text_width, spaces+SPACES_LEN-(column_width-text_width - ((column_width-text_width)/2))); fprintf(fp,fmt_str1,get_next_string_value(&(desc_column_ptr[c]),text_width)); if (*desc_column_ptr[c] != '\0') row_not_done = 1; break; default: fprintf(fp,"undefined inter column space\n"); } if (! is_last_just_col(current_just,c)){ int sp; sp = num_span_col(current_just,c); if ( report_just.col[current_just].col_inter_space[sp + c] != ' ') fprintf(fp,"%c", report_just.col[current_just].col_inter_space[sp + c]); else fprintf(fp," "); } } } fprintf(fp,"|\n"); } for (p=report_just.after_row_separations[r]; *p != '\0'; p++) { /* add a row separation */ if (CENTER_PAGE && (report_just.width < PAGE_WIDTH)) print_spaces((PAGE_WIDTH - report_just.width)/2, fp); fprintf(fp,"|"); for (c=0 ; c<current_num_col; c++){ if (report_just.col[current_just].col_just[c] != 'a'){ for (x=0; x< desc_column_size[c]; x++) fprintf(fp,"%c",*p); if (! is_last_just_col(current_just,c)){ int sp; sp = num_span_col(current_just,c); if ( report_just.col[current_just].col_inter_space[sp + c] != ' '){ if (*p == ' ') fprintf(fp,"%c", report_just.col[current_just].col_inter_space[sp + c]); else if ((report_just.col[current_just].col_inter_space[c] == '|') && (*p == '-') && ((r > 0) && (report_just.col[report_just.row_just[r-1]].col_inter_space[sp + c] == '|'))) fprintf(fp,"+"); else fprintf(fp,"%c", *p); } else fprintf(fp,"%c", *p); } } } fprintf(fp,"|\n"); } } if (CENTER_PAGE && (report_just.width < PAGE_WIDTH)) print_spaces((PAGE_WIDTH - report_just.width)/2, fp); print_final_line(report_just.width,fp);}int is_last_just_col(int just, int col){ int c; if (col == report_just.col[just].num_col-1) return(1); c = col+1; while ((c < report_just.col[just].num_col) && ( report_just.col[just].col_just[c] == 'a')) c++; if ((c == report_just.col[just].num_col)) return(1); return(0); }int is_last_span_col(int just, int col){ if ((col+1 < report_just.col[just].num_col) && ( report_just.col[just].col_just[col] == 'a')) return(0); return(1);}void print_line(int wid, FILE *fp){ int i; fprintf(fp,"|"); for (i=0; i<wid-2; i++) fprintf(fp,"-"); fprintf(fp,"|\n");}void print_blank_line(int wid, FILE *fp){ int i; fprintf(fp,"|"); for (i=0; i<wid-2; i++) fprintf(fp," "); fprintf(fp,"|\n");}void print_double_line(int wid, FILE *fp){ int i; fprintf(fp,"|"); for (i=0; i<wid-2; i++) fprintf(fp,"="); fprintf(fp,"|\n");}void print_start_line(int wid, FILE *fp){ int i; fprintf(fp,","); for (i=0; i<wid-2; i++) fprintf(fp,"-"); fprintf(fp,".\n");}void print_final_line(int wid, FILE *fp){ int i; fprintf(fp,"`"); for (i=0; i<wid-2; i++) fprintf(fp,"-"); fprintf(fp,"'\n");}void Desc_add_row_separation(char chr, int row_attach){ char *p; if (row_attach == BEFORE_ROW){ for (p = report_just.before_row_separations[report_just.tot_num_row]; (*p != '\0') && (p < report_just.before_row_separations[report_just.tot_num_row] + MAX_SEP); p++) ; if (p == report_just.before_row_separations[report_just.tot_num_row] + MAX_SEP){ fprintf(stderr,"Error: Too many separations for row %d\n",report_just.tot_num_row); exit(-1); } *p = chr; *(p+1) = '\0'; } else { for (p = report_just.after_row_separations[report_just.tot_num_row]; (*p != '\0') && (p < report_just.after_row_separations[report_just.tot_num_row] + MAX_SEP); p++) ; if (p == report_just.after_row_separations[report_just.tot_num_row] + MAX_SEP){ fprintf(stderr,"Error: Too many separations for row %d\n",report_just.tot_num_row); exit(-1); } *p = chr; *(p+1) = '\0'; }}int num_span_col(int just, int col){ int c, span=0; if (col == report_just.col[just].num_col-1) return(0); c = col+1; while ((c < report_just.col[just].num_col) && ( report_just.col[just].col_just[c] == 'a')){ c++; span++; } return(span);}static int iter_num_val=0;static char iter_val[MAX_COL][MAX_VALUE_LEN];static char iter_fmt[MAX_VALUE_LEN];void Desc_set_iterated_format(char *format){ strcpy(iter_fmt,format);}void Desc_set_iterated_value(char *str){ strcpy(iter_val[iter_num_val++],str);}void Desc_flush_iterated_row(void){ switch (iter_num_val){ case 1: Desc_add_row_values(iter_fmt,iter_val[0]); break; case 2: Desc_add_row_values(iter_fmt,iter_val[0],iter_val[1]); break; case 3: Desc_add_row_values(iter_fmt,iter_val[0],iter_val[1],iter_val[2]); break; case 4: Desc_add_row_values(iter_fmt,iter_val[0],iter_val[1],iter_val[2],iter_val[3]); break; case 5: Desc_add_row_values(iter_fmt,iter_val[0],iter_val[1],iter_val[2],iter_val[3],iter_val[4]); break; case 6: Desc_add_row_values(iter_fmt,iter_val[0],iter_val[1],iter_val[2],iter_val[3],iter_val[4],iter_val[5]); break; case 7: Desc_add_row_values(iter_fmt,iter_val[0],iter_val[1],iter_val[2],iter_val[3],iter_val[4],iter_val[5],iter_val[6]); break; case 8: Desc_add_row_values(iter_fmt,iter_val[0],iter_val[1],iter_val[2],iter_val[3],iter_val[4],iter_val[5],iter_val[6],iter_val[7]); break; case 9: Desc_add_row_values(iter_fmt,iter_val[0],iter_val[1],iter_val[2],iter_val[3],iter_val[4],iter_val[5],iter_val[6],iter_val[7],iter_val[8]); break; case 10: Desc_add_row_values(iter_fmt,iter_val[0],iter_val[1],iter_val[2],iter_val[3],iter_val[4],iter_val[5],iter_val[6],iter_val[7],iter_val[8],iter_val[9]); break; case 11: Desc_add_row_values(iter_fmt,iter_val[0],iter_val[1],iter_val[2],iter_val[3],iter_val[4],iter_val[5],iter_val[6],iter_val[7],iter_val[8],iter_val[9],iter_val[10]); break; case 12: Desc_add_row_values(iter_fmt,iter_val[0],iter_val[1],iter_val[2],iter_val[3],iter_val[4],iter_val[5],iter_val[6],iter_val[7],iter_val[8],iter_val[9],iter_val[10],iter_val[11]); break; case 13: Desc_add_row_values(iter_fmt,iter_val[0],iter_val[1],iter_val[2],iter_val[3],iter_val[4],iter_val[5],iter_val[6],iter_val[7],iter_val[8],iter_val[9],iter_val[10],iter_val[11],iter_val[12]); break; case 14: Desc_add_row_values(iter_fmt,iter_val[0],iter_val[1],iter_val[2],iter_val[3],iter_val[4],iter_val[5],iter_val[6],iter_val[7],iter_val[8],iter_val[9],iter_val[10],iter_val[11],iter_val[12],iter_val[13]); break; case 15: Desc_add_row_values(iter_fmt,iter_val[0],iter_val[1],iter_val[2],iter_val[3],iter_val[4],iter_val[5],iter_val[6],iter_val[7],iter_val[8],iter_val[9],iter_val[10],iter_val[11],iter_val[12],iter_val[13],iter_val[14]); break; case 16: Desc_add_row_values(iter_fmt,iter_val[0],iter_val[1],iter_val[2],iter_val[3],iter_val[4],iter_val[5],iter_val[6],iter_val[7],iter_val[8],iter_val[9],iter_val[10],iter_val[11],iter_val[12],iter_val[13],iter_val[14],iter_val[15]); break; case 17: Desc_add_row_values(iter_fmt,iter_val[0],iter_val[1],iter_val[2],iter_val[3],iter_val[4],iter_val[5],iter_val[6],iter_val[7],iter_val[8],iter_val[9],iter_val[10],iter_val[11],iter_val[12],iter_val[13],iter_val[14],iter_val[15],iter_val[16]); break; case 18: Desc_add_row_values(iter_fmt,iter_val[0],iter_val[1],iter_val[2],iter_val[3],iter_val[4],iter_val[5],iter_val[6],iter_val[7],iter_val[8],iter_val[9],iter_val[10],iter_val[11],iter_val[12],iter_val[13],iter_val[14],iter_val[15],iter_val[16],iter_val[17]); break; case 19: Desc_add_row_values(iter_fmt,iter_val[0],iter_val[1],iter_val[2],iter_val[3],iter_val[4],iter_val[5],iter_val[6],iter_val[7],iter_val[8],iter_val[9],iter_val[10],iter_val[11],iter_val[12],iter_val[13],iter_val[14],iter_val[15],iter_val[16],iter_val[17],iter_val[18]); break; case 20: Desc_add_row_values(iter_fmt,iter_val[0],iter_val[1],iter_val[2],iter_val[3],iter_val[4],iter_val[5],iter_val[6],iter_val[7],iter_val[8],iter_val[9],iter_val[10],iter_val[11],iter_val[12],iter_val[13],iter_val[14],iter_val[15],iter_val[16],iter_val[17],iter_val[18],iter_val[19]); break; } iter_num_val=0;}#ifdef __STDC__void Desc_add_row_values(char *format , ...)#elsevoid Desc_add_row_values(va_alist)va_dcl#endif{ va_list args; char *str; int col=0;#ifndef __STDC__ char *format;#endif#ifdef __STDC__ va_start(args,format);#else va_start(args); format = va_arg(args,char *);#endif if (report_just.tot_num_row >= MAX_ROW){ fprintf(stderr,"Error: Too many rows > %d\n",MAX_ROW); exit(-1); } if (static_parse_dbg) printf("Desc_add_row_values\n"); report_just.row_just[report_just.tot_num_row] = Desc_set_justification(format); if (static_parse_dbg) printf(" Format %s id %d\n",format, report_just.row_just[report_just.tot_num_row]); for (col=0; col<report_just.col[report_just.row_just[report_just.tot_num_row]].num_col; col++){ if (report_just.col[report_just.row_just[report_just.tot_num_row]].col_just[col] != 'a'){ str = va_arg(args, char *); strcpy(report_just.cell_values[col][report_just.tot_num_row],str); if (static_parse_dbg) printf(" value %d %s\n",col,str); } } va_end(args); report_just.tot_num_row ++;}int Desc_dump_ascii_report(char *file){ int c, r; char *p; FILE *fp; if (strcmp(file,"") == 0) return(1); if ((fp=fopen(file,"w")) == (FILE *)NULL){ fprintf(stderr,"Error: unable to open ascii report file '%s'\n",file); return(1); } if (CENTER_PAGE) fprintf(fp,"center_page %d\n",report_just.width); for (r=0; r<report_just.tot_num_row; r++){ for (p = report_just.before_row_separations[r]; (*p != '\0'); p++) fprintf(fp,"separate \"%c\" BEFORE_ROW\n",*p); for (p = report_just.after_row_separations[r]; (*p != '\0'); p++) fprintf(fp,"separate \"%c\" AFTER_ROW\n",*p); fprintf(fp,"row \"%s\"",report_just.col[report_just.row_just[r]].format_str); for (c=0; c<report_just.col[report_just.row_just[r]].num_col; c++) if (report_just.col[report_just.row_just[r]].col_just[c] != 'a') fprintf(fp," \"%s\"",report_just.cell_values[c][r]); fprintf(fp,"\n"); } fclose(fp); return(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -