#include #include #include #include static int sflag; static char *str; static int len; static int have; static void **strings; static int nhave; static int nused; static const char *ssep; static void bubble_up(int size, void **ptrs, int (*cmp)(const void *, const void *)) { int i; int p; void *temp; i = size; while (1) { if (i == 0) { return; } p = (i - 1) >> 1; if ((*cmp)(ptrs[i],ptrs[p]) > 0) { temp = ptrs[i]; ptrs[i] = ptrs[p]; ptrs[p] = temp; i = p; } else { return; } } } static void bubble_down(int size, void **ptrs, int (*cmp)(const void *, const void *)) { int i; int j; int l; int r; int cl; int cr; void *temp; i = 0; while (1) { if (i >= size) { return; } l = i + i + 1; r = l + 1; cl = (l >= size) ? 1 : ((*cmp)(ptrs[i],ptrs[l]) >= 0); cr = (r >= size) ? 1 : ((*cmp)(ptrs[i],ptrs[r]) >= 0); switch ((cl<<1)|cr) { case 0: j = ((*cmp)(ptrs[l],ptrs[r]) > 0) ? l : r; break; case 1: j = l; break; case 2: j = r; break; case 3: return; } temp = ptrs[j]; ptrs[j] = ptrs[i]; ptrs[i] = temp; i = j; } } static void hs(void **ptrs, int nels, int (*cmp)(const void *, const void *)) { int size; void *temp; if (nels <= 1) { return; } size = 1; while (size < nels) { bubble_up(size,ptrs,cmp); size ++; } while (size > 1) { size --; temp = ptrs[size]; ptrs[size] = ptrs[0]; ptrs[0] = temp; bubble_down(size,ptrs,cmp); } } static void app_str_c(char c) { if (len >= have) str = realloc(str,1+(have=len+8)); str[len++] = c; } static int vstrcmp(const void *a1, const void *a2) { return(strcmp(a1,a2)); } int main(int, char **); int main(int ac, char **av) { int c; sflag = 0; for (ac--,av++;ac&&('-'==**av);ac--,av++) { if (!strcmp(*av,"-s")) { sflag = 1; } } if (ac > 0) { ssep = *av; } else { ssep = "="; } str = malloc(1); len = 0; have = 0; strings = 0; nhave = 0; nused = 0; while (1) { c = getchar(); if (c == EOF) { if (len == 0) { int i; int at; int any; int len; at = 0; any = 0; for (i=0;i 72) { printf("\\\n"); at = 0; } printf(" %s",(char *)strings[i]); at += 1 + len; } putchar('\n'); exit(0); } else { c = ' '; } } if (isspace(c)) { if (len == 0) { continue; } if (c == '\n') { if (str[len-1] == '\\') { len --; continue; } } if (nhave <= nused) { strings = realloc(strings,(nhave=nused+8)*sizeof(void *)); } str[len] = '\0'; strcpy(strings[nused++]=malloc(len+1),str); len = 0; } else { app_str_c(c); } } }