r2c.c revision 3f54fd611f536639ec30dd53c48e5ec1897cc7d9
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder/***********************************************************************
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder* This software is part of the ast package *
1549f3abf73c1122acff724f718b615c82fa3648Till Mossakowski* Copyright (c) 1998-2011 AT&T Intellectual Property *
97018cf5fa25b494adffd7e9b4e87320dae6bf47Christian Maeder* and is licensed under the *
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder* Eclipse Public License, Version 1.0 *
b4fbc96e05117839ca409f5f20f97b3ac872d1edTill Mossakowski* by AT&T Intellectual Property *
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder* A copy of the License is available at *
f3a94a197960e548ecd6520bb768cb0d547457bbChristian Maeder* http://www.eclipse.org/org/documents/epl-v10.html *
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder* Information and Software Systems Research *
1549f3abf73c1122acff724f718b615c82fa3648Till Mossakowski* AT&T Research *
1549f3abf73c1122acff724f718b615c82fa3648Till Mossakowski* Florham Park NJ *
1549f3abf73c1122acff724f718b615c82fa3648Till Mossakowski* Glenn Fowler <gsf@research.att.com> *
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder***********************************************************************/
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder * Glenn Fowler
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder * AT&T Research
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maeder * convert delimited/terminated flat file from
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder * row major to col major order
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowskistatic const char id[] = "\n@(#)$Id: r2c (AT&T Research) 1998-11-08 $\0\n";
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski * flush output to op
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder if ((col = state.cols) && sfstrtell(col->sp))
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder if (sfwrite(op, sfstrseek(col->sp, 0, SEEK_SET), n) != n || sfsync(op))
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maeder * convert one file from ip to op
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maederr2c(const char* file, Sfio_t* ip, Sfio_t* op)
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski register char* s;
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski register char* e;
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maeder register int d;
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maeder register int q;
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maeder register int t;
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian Maeder error(2, "%s: input record larger than window size", file);
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder if (!(col = newof(0, Col_t, 1, 0)) || !(col->sp = sfstropen()))
4601edb679f0ba530bbb085b25d82a411cd070aaChristian Maeder error(ERROR_SYSTEM|3, "out of space [column]");
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder if (q && *s == q)
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder while (++b < e)
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder else if (e = memchr(s, d, n))
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder m = e - s + 1;
612749008484b6773aedf4d6bbc85b8d074d15c6Christian Maeder error(ERROR_SYSTEM|2, "%s: column write error");
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian Maeder error(2, "%s: last record incomplete", file);
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski switch (optget(argv, "d:[delimiter]l#[compression-level]q:[quote]t:[terminator]vw#[window-size]T#[test-mask]"))
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder if (state.level > 0 && sfdcgzip(sfstdout, state.level) < 0)
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder error(3, "output compress discipline error");
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder error(ERROR_SYSTEM|2, "%s: cannot read", file);