003 File Manager
Current Path:
/usr/src/contrib/dialog
usr
/
src
/
contrib
/
dialog
/
📁
..
📄
CHANGES
(108.53 KB)
📄
COPYING
(25.81 KB)
📄
README
(2.78 KB)
📄
VERSION
(20 B)
📄
aclocal.m4
(195.3 KB)
📄
argv.c
(3.54 KB)
📄
arrows.c
(6.8 KB)
📄
buildlist.c
(31.36 KB)
📄
buttons.c
(16.19 KB)
📄
calendar.c
(24.45 KB)
📄
checklist.c
(17.98 KB)
📄
columns.c
(4.17 KB)
📄
config.guess
(43.14 KB)
📄
config.hin
(75 B)
📄
config.sub
(34.92 KB)
📄
configure
(666.11 KB)
📄
configure.in
(7.57 KB)
📄
demo.pl
(11.44 KB)
📄
dialog-config.in
(4.31 KB)
📄
dialog.1
(60.51 KB)
📄
dialog.3
(124.54 KB)
📄
dialog.c
(52.45 KB)
📄
dialog.h
(37.7 KB)
📄
dialog.lsm
(1.1 KB)
📄
dialog.pl
(15.08 KB)
📄
dlg_colors.h
(6.87 KB)
📄
dlg_keys.c
(20.68 KB)
📄
dlg_keys.h
(5.23 KB)
📄
editbox.c
(16.81 KB)
📄
formbox.c
(23.3 KB)
📄
fselect.c
(22.06 KB)
📄
guage.c
(10.26 KB)
📄
headers-sh.in
(5.35 KB)
📄
headers.sh
(3.6 KB)
📄
help.c
(1.4 KB)
📄
inputbox.c
(7.04 KB)
📄
inputstr.c
(17.73 KB)
📄
install-sh
(6.96 KB)
📄
makefile.in
(10.07 KB)
📄
menubox.c
(20.26 KB)
📄
mixedform.c
(3.39 KB)
📄
mixedgauge.c
(9.6 KB)
📄
mouse.c
(3.5 KB)
📄
mousewget.c
(2.19 KB)
📄
msgbox.c
(4.99 KB)
📁
package
📄
pause.c
(6.53 KB)
📁
po
📄
prgbox.c
(2.73 KB)
📄
progressbox.c
(9.88 KB)
📄
rangebox.c
(10.54 KB)
📄
rc.c
(15 KB)
📄
rename.sh
(3.04 KB)
📁
samples
📄
tailbox.c
(9.53 KB)
📄
textbox.c
(24.86 KB)
📄
timebox.c
(10.27 KB)
📄
trace.c
(5.72 KB)
📄
treeview.c
(16.55 KB)
📄
ttysize.c
(2.28 KB)
📄
ui_getc.c
(14.03 KB)
📄
util.c
(64.44 KB)
📄
version.c
(1.01 KB)
📄
yesno.c
(4.28 KB)
Editing: columns.c
/* * $Id: columns.c,v 1.10 2011/10/20 20:53:55 tom Exp $ * * columns.c -- implements column-alignment * * Copyright 2008-2010,2011 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to * Free Software Foundation, Inc. * 51 Franklin St., Fifth Floor * Boston, MA 02110, USA. */ #include <dialog.h> #define each(row, data) \ row = 0, data = target; \ row < num_rows; \ ++row, data = next_row(data, per_row) static char * column_separator(void) { char *result = 0; if ((result = dialog_vars.column_separator) != 0) { if (*result == '\0') result = 0; } return result; } static char ** next_row(char **target, int per_row) { char *result = (char *) target; result += per_row; return (char **) (void *) result; } static char * next_col(char *source, unsigned offset) { char *mark = column_separator(); char *result = source + offset; if (offset) result += strlen(mark); return strstr(result, mark); } /* * Parse the source string, storing the offsets and widths of each column in * the corresponding arrays. Return the number of columns. */ static unsigned split_row(char *source, unsigned *offsets, unsigned *widths) { int mark = (int) strlen(column_separator()); char *next = 0; unsigned result = 0; unsigned offset = 0; do { if (result) { offset = (unsigned) (mark + next - source); widths[result - 1] = offset - offsets[result - 1] - (unsigned) mark; } offsets[result] = offset; ++result; } while ((next = next_col(source, offset)) != 0); offset = (unsigned) strlen(source); widths[result - 1] = offset - offsets[result - 1]; return result; } /* * The caller passes a pointer to a struct or array containing pointers * to strings that we may want to copy and reformat according to the column * separator. */ void dlg_align_columns(char **target, int per_row, int num_rows) { int row; if (column_separator()) { char **value; unsigned numcols = 1; size_t maxcols = 0; unsigned *widths; unsigned *offsets; unsigned *maxwidth; unsigned realwidth; unsigned n; /* first allocate arrays for workspace */ for (each(row, value)) { size_t len = strlen(*value); if (maxcols < len) maxcols = len; } ++maxcols; widths = dlg_calloc(unsigned, maxcols); offsets = dlg_calloc(unsigned, maxcols); maxwidth = dlg_calloc(unsigned, maxcols); assert_ptr(widths, "dlg_align_columns"); assert_ptr(offsets, "dlg_align_columns"); assert_ptr(maxwidth, "dlg_align_columns"); /* now, determine the number of columns and the column-widths */ for (each(row, value)) { unsigned cols = split_row(*value, offsets, widths); if (numcols < cols) numcols = cols; for (n = 0; n < cols; ++n) { if (maxwidth[n] < widths[n]) maxwidth[n] = widths[n]; } } realwidth = numcols - 1; for (n = 0; n < numcols; ++n) { realwidth += maxwidth[n]; } /* finally, construct reformatted strings */ for (each(row, value)) { unsigned cols = split_row(*value, offsets, widths); unsigned offset = 0; char *text = dlg_malloc(char, realwidth + 1); assert_ptr(text, "dlg_align_columns"); memset(text, ' ', (size_t) realwidth); for (n = 0; n < cols; ++n) { memcpy(text + offset, *value + offsets[n], (size_t) widths[n]); offset += maxwidth[n] + 1; } text[realwidth] = 0; *value = text; } free(widths); free(offsets); free(maxwidth); } } /* * Free temporary storage used while making column-aligned data. */ void dlg_free_columns(char **target, int per_row, int num_rows) { int row; char **value; if (column_separator()) { for (each(row, value)) { free(*value); } } }
Upload File
Create Folder