1/*********************************************************************** 2* * 3* This software is part of the ast package * 4* Copyright (c) 1985-2010 AT&T Intellectual Property * 5* and is licensed under the * 6* Common Public License, Version 1.0 * 7* by AT&T Intellectual Property * 8* * 9* A copy of the License is available at * 10* http://www.opensource.org/licenses/cpl1.0.txt * 11* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 12* * 13* Information and Software Systems Research * 14* AT&T Research * 15* Florham Park NJ * 16* * 17* Glenn Fowler <gsf@research.att.com> * 18* David Korn <dgk@research.att.com> * 19* Phong Vo <kpv@research.att.com> * 20* * 21***********************************************************************/ 22#pragma prototyped 23/* 24 * Glenn Fowler 25 * AT&T Bell Laboratories 26 * 27 * string vector load support 28 */ 29 30#include <ast.h> 31#include <vecargs.h> 32 33/* 34 * load a string vector from lines in buf 35 * buf may be modified on return 36 * 37 * each line in buf is treated as a new vector element 38 * lines with # as first char are comments 39 * \ as the last char joins consecutive lines 40 * 41 * the vector ends with a 0 sentinel 42 * 43 * the string array pointer is returned 44 */ 45 46char** 47vecload(char* buf) 48{ 49 register char* s; 50 register int n; 51 register char** p; 52 char** vec; 53 54 vec = 0; 55 n = (*buf == '#') ? -1 : 0; 56 for (s = buf;; s++) 57 { 58 if (*s == '\n') 59 { 60 if (s > buf && *(s - 1) == '\\') *(s - 1) = *s = ' '; 61 else 62 { 63 *s = 0; 64 if (*(s + 1) != '#') 65 { 66 n++; 67 if (!*(s + 1)) break; 68 } 69 } 70 } 71 else if (!*s) 72 { 73 n++; 74 break; 75 } 76 } 77 if (n < 0) n = 0; 78 if (p = newof(0, char*, n + 3, 0)) 79 { 80 *p++ = s = buf; 81 vec = ++p; 82 if (n > 0) for (;;) 83 { 84 if (*s != '#') 85 { 86 *p++ = s; 87 if (--n <= 0) break; 88 } 89 while (*s) s++; 90 s++; 91 } 92 *p = 0; 93 *(vec - 1) = (char*)p; 94 } 95 return(vec); 96} 97