vcalias.c revision 3f54fd611f536639ec30dd53c48e5ec1897cc7d9
57221209d11b05aa0373cc3892d5df89ba96ebf9Christian Maeder/***********************************************************************
53bd0c89aa4743dc41a6394db5a90717c1ca4517Liam O'Reilly* This software is part of the ast package *
53bd0c89aa4743dc41a6394db5a90717c1ca4517Liam O'Reilly* Copyright (c) 2003-2011 AT&T Intellectual Property *
53bd0c89aa4743dc41a6394db5a90717c1ca4517Liam O'Reilly* and is licensed under the *
98890889ffb2e8f6f722b00e265a211f13b5a861Corneliu-Claudiu Prodescu* Eclipse Public License, Version 1.0 *
53bd0c89aa4743dc41a6394db5a90717c1ca4517Liam O'Reilly* by AT&T Intellectual Property *
53bd0c89aa4743dc41a6394db5a90717c1ca4517Liam O'Reilly* A copy of the License is available at *
53bd0c89aa4743dc41a6394db5a90717c1ca4517Liam O'Reilly* http://www.eclipse.org/org/documents/epl-v10.html *
53bd0c89aa4743dc41a6394db5a90717c1ca4517Liam O'Reilly* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
53bd0c89aa4743dc41a6394db5a90717c1ca4517Liam O'Reilly* Information and Software Systems Research *
53bd0c89aa4743dc41a6394db5a90717c1ca4517Liam O'Reilly* AT&T Research *
33bdce26495121cdbce30331ef90a1969126a840Liam O'Reilly* Florham Park NJ *
57221209d11b05aa0373cc3892d5df89ba96ebf9Christian Maeder* Phong Vo <kpv@research.att.com> *
66bc8d6e69cde43f1ccbeb76104cf7b8038acd6cChristian Maeder***********************************************************************/
66bc8d6e69cde43f1ccbeb76104cf7b8038acd6cChristian Maeder/* Collection of functions to translate command line arguments,
a00461fcf7432205a79a0f12dbe6c1ebc58bc000Christian Maeder** aliases, etc. to list of transforms and arguments suitable for
33bdce26495121cdbce30331ef90a1969126a840Liam O'Reilly** data tranformation by vcsfio().
53bd0c89aa4743dc41a6394db5a90717c1ca4517Liam O'Reilly** The syntax is like this:
648fe1220044aac847acbdfbc4155af5556063ebChristian Maeder** Transformation Method1,Method2,...
648fe1220044aac847acbdfbc4155af5556063ebChristian Maeder** Method method.arg1.arg2....
f21c7417bdd1c0282025cba0f5cb0ff5bc5c98eeLiam O'Reilly** arg name=value
648fe1220044aac847acbdfbc4155af5556063ebChristian Maeder** method alphanumeric string specifying a transform
ee48a7a67da604356b665e51aa7545536a09b737Christian Maeder** name alphanumeric string specifying an argument
33bdce26495121cdbce30331ef90a1969126a840Liam O'Reilly** value any string, quotable with [], C-style chars
33bdce26495121cdbce30331ef90a1969126a840Liam O'Reilly** Written by Kiem-Phong Vo.
648fe1220044aac847acbdfbc4155af5556063ebChristian Maederstatic char *Dfltalias[] =
648fe1220044aac847acbdfbc4155af5556063ebChristian Maeder "tv = ama,table,mtf,rle.0,huffgroup",
648fe1220044aac847acbdfbc4155af5556063ebChristian Maeder "tss7 = ss7,table,mtf,rle.0,huffpart",
648fe1220044aac847acbdfbc4155af5556063ebChristian Maeder "tnls = ama.nls,rtable,mtf,rle.0,huffgroup",
648fe1220044aac847acbdfbc4155af5556063ebChristian Maeder "tnl = ama.nl,table,mtf,rle.0,huffgroup",
648fe1220044aac847acbdfbc4155af5556063ebChristian Maeder "tbdw = bdw,ama,table,mtf,rle.0,huffgroup",
648fe1220044aac847acbdfbc4155af5556063ebChristian Maeder "t = table,mtf,rle.0,huffgroup",
648fe1220044aac847acbdfbc4155af5556063ebChristian Maeder "rte = strip.nl.head=1.tail=1,rdb.pad.plain.whole,table,mtf,rle.0,huffgroup",
648fe1220044aac847acbdfbc4155af5556063ebChristian Maeder "rt = rtable,mtf,rle.0,huffgroup",
648fe1220044aac847acbdfbc4155af5556063ebChristian Maeder "qv = ama,transpose,rle,huffman",
4314e26a12954cb1c9be4dea10aa8103edac5bbbChristian Maeder "qnl = ama.nl,transpose,rle,huffman",
d5833d2ee7bafcbf2fdd2bdfd9a728c769b100c7Christian Maeder "q = transpose,rle,huffman",
d5833d2ee7bafcbf2fdd2bdfd9a728c769b100c7Christian Maeder "netflow = netflow,mtf,rle.0,huffgroup",
9aeda2b3ae8ce0b018955521e4ca835a8ba8a27bLiam O'Reilly "flatrdb = rdb,bwt,mtf,rle.0,huffgroup",
9aeda2b3ae8ce0b018955521e4ca835a8ba8a27bLiam O'Reilly "fixedrdb = rdb.full,table,mtf,rle.0,huffgroup",
33bdce26495121cdbce30331ef90a1969126a840Liam O'Reilly "dna = sieve.reverse.map=ATGCatgc,huffgroup",
648fe1220044aac847acbdfbc4155af5556063ebChristian Maeder "delta = sieve.delta,bwt,mtf,rle.0,huffgroup",
648fe1220044aac847acbdfbc4155af5556063ebChristian Maeder "b = bwt,mtf,rle.0,huffgroup",
fa373bc327620e08861294716b4454be8d25669fChristian Maeder/* create aliases, text lines of the form 'name = value' */
fa373bc327620e08861294716b4454be8d25669fChristian Maeder/* create file name extension mappings, text lines of the form 'pattern : value' */
fa373bc327620e08861294716b4454be8d25669fChristian Maederstatic void zipalias(char* s)
fa373bc327620e08861294716b4454be8d25669fChristian Maederchar* s; /* spec of new aliases */
648fe1220044aac847acbdfbc4155af5556063ebChristian Maeder for(n = s ? strlen(s) : 0; n > 0; )
d5833d2ee7bafcbf2fdd2bdfd9a728c769b100c7Christian Maeder { /* skip starting blanks */
7857a35e3af533dfbd0f0e18638ebd211e6358a0Christian Maeder if(!isalnum(*s) ) /* invalid alias specification */
e7cd36335f0f7be9ed5005e71d94c2856b588d62Christian Maeder /* get the name */
e7cd36335f0f7be9ed5005e71d94c2856b588d62Christian Maeder for(a = 0; a < n; ++a)
648fe1220044aac847acbdfbc4155af5556063ebChristian Maeder for(v = a; v < n; ++v)
648fe1220044aac847acbdfbc4155af5556063ebChristian Maeder if(s[v] == '=')
648fe1220044aac847acbdfbc4155af5556063ebChristian Maeder else if(s[v] == ':')
648fe1220044aac847acbdfbc4155af5556063ebChristian Maeder /* get the value */
648fe1220044aac847acbdfbc4155af5556063ebChristian Maeder for(v += 1; v < n; ++v)
648fe1220044aac847acbdfbc4155af5556063ebChristian Maeder for(w = v; w < n; ++w)
eb48217dfa67ddb87b8fbd846de293d0636bd578Christian Maeder if(!(al = (Vcalias_t*)malloc(sizeof(Vcalias_t) + a+1 + (w-v)+1)) )
648fe1220044aac847acbdfbc4155af5556063ebChristian Maeder memcpy(al->value, s+v, w-v); al->value[w-v] = 0;
4314e26a12954cb1c9be4dea10aa8103edac5bbbChristian Maeder for(; n > 0; --n, ++s)
648fe1220044aac847acbdfbc4155af5556063ebChristian Maeder if(*s == '\n')
648fe1220044aac847acbdfbc4155af5556063ebChristian Maeder/* initialize a list of aliases */
2a5b885d9350ec6dd8bc4992ee91d2f68aa592f4Christian Maeder if(pathpath(ALIASES, "", PATH_REGULAR, file, sizeof(file)) && (sf = sfopen(0, file, "")) )
7857a35e3af533dfbd0f0e18638ebd211e6358a0Christian Maeder /* $HOME/.vcziprc */
7857a35e3af533dfbd0f0e18638ebd211e6358a0Christian Maeder if((sp = getenv("HOME")) && (z = strlen(sp)) > 0 && (z+1+strlen(VCZIPRC)+1) <= PATH_MAX )
580f1724640a78be687e79d0ec95dd2665e77e91Liam O'Reilly /* other default aliases */
f19dc06364e8d6ea36f7c170e1f7a0677de63184Liam O'Reilly/* map an alias. Arguments are passed onto the first method of the aliased spec */
f21c7417bdd1c0282025cba0f5cb0ff5bc5c98eeLiam O'Reillychar* vcgetalias(char* spec, char* meth, ssize_t mtsz)
bc350328e6ac2d9074317e222b4207a6aa49afeaLiam O'Reilly /* must be of the form xxx.yyy.zzz... only */
bc350328e6ac2d9074317e222b4207a6aa49afeaLiam O'Reilly if(!(args = vcsubstring(spec, VC_METHSEP, name, sizeof(name), 0)) || *args != 0 )
bc350328e6ac2d9074317e222b4207a6aa49afeaLiam O'Reilly /* find the extent of the alias name */
580f1724640a78be687e79d0ec95dd2665e77e91Liam O'Reilly for(n = 0; name[n]; ++n)
7d96b1ef2b8597330aedee6713615ec15508edcfLiam O'Reilly /* see if that matches an alias */
bc350328e6ac2d9074317e222b4207a6aa49afeaLiam O'Reilly if(!*args || !meth || !mtsz) /* no new arguments */
f19dc06364e8d6ea36f7c170e1f7a0677de63184Liam O'Reilly /* copy the spec of the first transform to meth[] */
f19dc06364e8d6ea36f7c170e1f7a0677de63184Liam O'Reilly if(!(rest = vcsubstring(alias->value, VC_METHSEP, meth, mtsz, 0)) )
bc350328e6ac2d9074317e222b4207a6aa49afeaLiam O'Reilly /* copy additional arguments */
ee48a7a67da604356b665e51aa7545536a09b737Christian Maeder if(r > 0) /* copy the rest of the alias */
bc350328e6ac2d9074317e222b4207a6aa49afeaLiam O'Reilly/* match a file name */
2a5b885d9350ec6dd8bc4992ee91d2f68aa592f4Christian Maederchar* vcgetfname(char* name, char* meth, ssize_t mtsz)
fa373bc327620e08861294716b4454be8d25669fChristian Maeder if(fnmatch(al->name, name, FNM_PATHNAME) == 0 )
fa373bc327620e08861294716b4454be8d25669fChristian Maeder return NIL(char*);
fa373bc327620e08861294716b4454be8d25669fChristian Maeder/* walk an alias list */
fa373bc327620e08861294716b4454be8d25669fChristian Maederstatic int vcwalklist(Vcalias_t* al, Vcwalk_f walkf, Void_t* disc)
fa373bc327620e08861294716b4454be8d25669fChristian Maeder if((rv = (*walkf)((Void_t*)0, al->name, al->value, disc)) < 0 )
fa373bc327620e08861294716b4454be8d25669fChristian Maeder/* walk the list of aliases */
fa373bc327620e08861294716b4454be8d25669fChristian Maederint vcwalkalias(Vcwalk_f walkf, Void_t* disc)
2a5b885d9350ec6dd8bc4992ee91d2f68aa592f4Christian Maeder/* walk the list of fnames */