By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
429,384 Members | 673 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 429,384 IT Pros & Developers. It's quick & easy.

Looking for a library to split pathnames

P: n/a
Hi

Does anybody know of a library that offers a function to split
pathnames. It should work somewhat like the following code snippet:

-----------------
char *path = "/home/user/Documents/Textdocuments/Bills";
char **dirs;

splitPath(path, dirs);
------------------

`dirs' should then consist of:
dirs[0] == "home"
dirs[1] == "user"
....
dirs[4] == "Bills"

Does anybody know of a function like that?
Thanks for your help.

Sven-Thorsten Fahrbach

P.S.: It could also be a C++ function if there exists a better
equivalent or if it's easier to use. I come from a Perl background and
I'm not that comfortable with string manipulation in C.
Sep 21 '06 #1
Share this Question
Share on Google+
22 Replies


P: n/a

Sven-Thorsten Fahrbach wrote:
Hi

Does anybody know of a library that offers a function to split
pathnames. It should work somewhat like the following code snippet:
I suspect someone will be along shortly to say this is Off-Topic :-)

The dirname() and basename() functions on un*x systems will do most of
what you need here.

If this is a homework question (it smells a bit like one), I'd look at
the following questions:-

* how do you work out how many elements are in the pathname?
* how do you allocate space to hold the array of pointers?
* how do you fill the array of pointers?

If you are going to work with C you may as well get to grips with
string handling. It's not _that_ difficult.

Sep 21 '06 #2

P: n/a
ma**********@pobox.com wrote:
Sven-Thorsten Fahrbach wrote:
>Hi

Does anybody know of a library that offers a function to split
pathnames. It should work somewhat like the following code snippet:

I suspect someone will be along shortly to say this is Off-Topic :-)
Oops, sorry. I'm not a regular usenet user ;). I just didn't know where
else to post this.
>
The dirname() and basename() functions on un*x systems will do most of
what you need here.
Thanks, I'll have a look into that!
>
If this is a homework question (it smells a bit like one) [...]
No, it's not, honestly. ;) I'm trying to write a small tool which needs
to do this job. I'd have used Perl but I fear it might be too slow for
my purposes.
I'd look at
the following questions:-

* how do you work out how many elements are in the pathname?
* how do you allocate space to hold the array of pointers?
* how do you fill the array of pointers?

If you are going to work with C you may as well get to grips with
string handling. It's not _that_ difficult.
I know. I just haven't got enough practise. But even though it's not a
homework question it might still be a good exercise!

Thanks for your help!

Sven-Thorsten Fahrbach
Sep 21 '06 #3

P: n/a

Sven-Thorsten Fahrbach wrote:
ma**********@pobox.com wrote:
Sven-Thorsten Fahrbach wrote:
Hi

Does anybody know of a library that offers a function to split
pathnames. It should work somewhat like the following code snippet:
I suspect someone will be along shortly to say this is Off-Topic :-)
Oops, sorry. I'm not a regular usenet user ;). I just didn't know where
else to post this.
If it's about things which are part of the portable C standard, this is
a good place. If it's more platform-specific, somewhere else may be
better (comp.unix.programmer?).

However, if we take it as a string handling and memory allocation
exercise, it's probably on-topic :-)

The dirname() and basename() functions on un*x systems will do most of
what you need here.
Thanks, I'll have a look into that!
If this is a homework question (it smells a bit like one) [...]
No, it's not, honestly. ;) I'm trying to write a small tool which needs
to do this job. I'd have used Perl but I fear it might be too slow for
my purposes.
I'd look at
the following questions:-

* how do you work out how many elements are in the pathname?
* how do you allocate space to hold the array of pointers?
* how do you fill the array of pointers?

If you are going to work with C you may as well get to grips with
string handling. It's not _that_ difficult.
I know. I just haven't got enough practise. But even though it's not a
homework question it might still be a good exercise!
OK - I'd count the number of elements by a pass through the string
counting "/" characters, and adjust appropriately for the possibility
of relative pathnames (no leading "/") and a null basename (a trailing
"/"), then malloc() or calloc() the space for the array of pointers.
Depending on whether you want to use a count of paths or have a null
pointer to delimit the array, you may need an extra slot in the array
(I quite like using a null as a delimiter).

Are you clear in your mind how you want to handle relative pathnames
and null basenames, by the way?

Then you could use strtok() - not the nicest function, but it would
work, to walk through the pathname picking out the individual elements
in turn.

Sep 21 '06 #4

P: n/a
Sven-Thorsten Fahrbach wrote:
Hi

Does anybody know of a library that offers a function to split
pathnames. It should work somewhat like the following code snippet:
I know this isn't _exactly_ what you asked for, but this is what I
generally use:

----------

#include <stdio.h>

int explode( char *str, char delim, char *parts[], int numparts )
{
char *c = str;
int p = 0;

parts[p++] = c;
while ( *c && p < numparts )
{
if ( *c == delim )
{
*c = '\0';
parts[p++] = c+1;
}
c++;
}

return p;
}

int main( int argc, char *argv[] )
{
int p,i;
char *dirs[20];
char path[] = "/home/user/Documents/Textdocuments/Bills";

p = explode( path, '/', dirs, 20 );

for ( i = 0; i < p; i++ )
printf( "%s\n", dirs[i] );

return 0;
}

----------

On the bad side, the string you pass in is changed by the function (all
of the delimiter characters have been set to nil). Also, you must guess
the maximum number of parts in advance. On the plus side, if you do not
mind those limitations, you do not have to deal with dynamic memory
allocation in the explode function.

Most of the time, those limitations are not a problem at all. It works
great as a quick CSV parser (I have a slightly more involved version
that deals with quotes).

Also note that as a path parser, path[0] is returned as an empty
string, since there is nothing before the first delimiter.

--Sean

Sep 21 '06 #5

P: n/a
Sven-Thorsten Fahrbach wrote:
>
Does anybody know of a library that offers a function to split
pathnames. It should work somewhat like the following code snippet:

-----------------
char *path = "/home/user/Documents/Textdocuments/Bills";
char **dirs;

splitPath(path, dirs);
------------------

`dirs' should then consist of:
dirs[0] == "home"
dirs[1] == "user"
...
dirs[4] == "Bills"

Does anybody know of a function like that?
The following routine (published here before) should do it. Simply
use '/' as the token delimiter. Wrap it in something that
allocates the memory for dirs[n] to point to. strdup() may come in
handy here. (strdup is non-standard, but available on many
systems, or you can write it yourself).

If you are not worried about re-entrancy and/or altering the
original string, see strtok() (which is standard).

/* ------- file toksplit.h ----------*/
#ifndef H_toksplit_h
# define H_toksplit_h

# ifdef __cplusplus
extern "C" {
# endif

#include <stddef.h>

/* copy over the next token from an input string, after
skipping leading blanks (or other whitespace?). The
token is terminated by the first appearance of tokchar,
or by the end of the source string.

The caller must supply sufficient space in token to
receive any token, Otherwise tokens will be truncated.

Returns: a pointer past the terminating tokchar.

This will happily return an infinity of empty tokens if
called with src pointing to the end of a string. Tokens
will never include a copy of tokchar.

released to Public Domain, by C.B. Falconer.
Published 2006-02-20. Attribution appreciated.
*/

const char *toksplit(const char *src, /* Source of tokens */
char tokchar, /* token delimiting char */
char *token, /* receiver of parsed token */
size_t lgh); /* length token can receive */
/* not including final '\0' */

# ifdef __cplusplus
}
# endif
#endif
/* ------- end file toksplit.h ----------*/

/* ------- file toksplit.c ----------*/
#include "toksplit.h"

/* copy over the next token from an input string, after
skipping leading blanks (or other whitespace?). The
token is terminated by the first appearance of tokchar,
or by the end of the source string.

The caller must supply sufficient space in token to
receive any token, Otherwise tokens will be truncated.

Returns: a pointer past the terminating tokchar.

This will happily return an infinity of empty tokens if
called with src pointing to the end of a string. Tokens
will never include a copy of tokchar.

A better name would be "strtkn", except that is reserved
for the system namespace. Change to that at your risk.

released to Public Domain, by C.B. Falconer.
Published 2006-02-20. Attribution appreciated.
Revised 2006-06-13
*/

const char *toksplit(const char *src, /* Source of tokens */
char tokchar, /* token delimiting char */
char *token, /* receiver of parsed token */
size_t lgh) /* length token can receive */
/* not including final '\0' */
{
if (src) {
while (' ' == *src) src++;

while (*src && (tokchar != *src)) {
if (lgh) {
*token++ = *src;
--lgh;
}
src++;
}
if (*src && (tokchar == *src)) src++;
}
*token = '\0';
return src;
} /* toksplit */

#ifdef TESTING
#include <stdio.h>

#define ABRsize 6 /* length of acceptable token abbreviations */

/* ---------------- */

static void showtoken(int i, char *tok)
{
putchar(i + '1'); putchar(':');
puts(tok);
} /* showtoken */

/* ---------------- */

int main(void)
{
char teststring[] = "This is a test, ,, abbrev, more";

const char *t, *s = teststring;
int i;
char token[ABRsize + 1];

puts(teststring);
t = s;
for (i = 0; i < 4; i++) {
t = toksplit(t, ',', token, ABRsize);
showtoken(i, token);
}

puts("\nHow to detect 'no more tokens' while truncating");
t = s; i = 0;
while (*t) {
t = toksplit(t, ',', token, 3);
showtoken(i, token);
i++;
}

puts("\nUsing blanks as token delimiters");
t = s; i = 0;
while (*t) {
t = toksplit(t, ' ', token, ABRsize);
showtoken(i, token);
i++;
}
return 0;
} /* main */

#endif
/* ------- end file toksplit.c ----------*/

--
"The most amazing achievement of the computer software industry
is its continuing cancellation of the steady and staggering
gains made by the computer hardware industry..." - Petroski

--
Posted via a free Usenet account from http://www.teranews.com

Sep 21 '06 #6

P: n/a
"sbaker48" <sb**************@gmail.comwrites:
Sven-Thorsten Fahrbach wrote:
>Hi

Does anybody know of a library that offers a function to split
pathnames. It should work somewhat like the following code snippet:

I know this isn't _exactly_ what you asked for, but this is what I
generally use:

----------

#include <stdio.h>

int explode( char *str, char delim, char *parts[], int numparts ) {
char *c = str;
int p = 0;

parts[p++] = c;
while ( *c && p < numparts ) {
if ( *c == delim ) {
*c = '\0';
parts[p++] = c+1;
}
c++;
}

return p;
}

On the bad side, the string you pass in is changed by the function (all
of the delimiter characters have been set to nil).
Duplicating the string shouldn't be a problem.
Also, you must guess the maximum number of parts in advance.
You can first scan the string and count how many delims are there.
Also note that as a path parser, path[0] is returned as an empty
string, since there is nothing before the first delimiter.
Unless the path is relative. :]

#v+
#include <string.h>

char **explode(char *str, const char *delim, size_t *num) {
size_t capacity = 16, n;
char **arr = malloc(capacity * sizeof *arr);

arr[0] = strtok(str, delim);
while (arr[n]) {
if (++n >= capacity) {
capacity += 16;
arr = (char**)realloc(arr, capacity * sizeof *arr);
}
arr[n] = strtok(0, delim);
}

if (num) *num = n;
return arr;
}
#v-

Returns a NULL terminated array of pointers to each item. In
aditional, if num is not NULL saves there number of elements.
--
Best regards, _ _
.o. | Liege of Serenly Enlightened Majesty of o' \,=./ `o
..o | Computer Science, Michal "mina86" Nazarewicz (o o)
ooo +--<mina86*tlen.pl>--<jid:mina86*jabber.org>--ooO--(_)--Ooo--
Sep 21 '06 #7

P: n/a
Op Thu, 21 Sep 2006 17:24:28 +0200 schreef Michal Nazarewicz:
"sbaker48" <sb**************@gmail.comwrites:
>Sven-Thorsten Fahrbach wrote:
>>Hi

Does anybody know of a library that offers a function to split
pathnames. It should work somewhat like the following code snippet:

I know this isn't _exactly_ what you asked for, but this is what I
generally use:

----------

#include <stdio.h>

int explode( char *str, char delim, char *parts[], int numparts ) {
char *c = str;
int p = 0;

parts[p++] = c;
while ( *c && p < numparts ) {
if ( *c == delim ) {
*c = '\0';
parts[p++] = c+1;
}
c++;
}

return p;
}

On the bad side, the string you pass in is changed by the function (all
of the delimiter characters have been set to nil).

Duplicating the string shouldn't be a problem.
>Also, you must guess the maximum number of parts in advance.

You can first scan the string and count how many delims are there.
>Also note that as a path parser, path[0] is returned as an empty
string, since there is nothing before the first delimiter.

Unless the path is relative. :]

#v+
Non-standard directive, <OT>gcc complains</OT>
#include <string.h>

char **explode(char *str, const char *delim, size_t *num) {
size_t capacity = 16, n;
char **arr = malloc(capacity * sizeof *arr);
What if the allocation fails?
>
arr[0] = strtok(str, delim);
while (arr[n]) {
if (++n >= capacity) {
capacity += 16;
arr = (char**)realloc(arr, capacity * sizeof *arr);
arr = realloc(arr, capacity * sizeof *arr);
What if the allocation fails?
}
arr[n] = strtok(0, delim);
}

if (num) *num = n;
return arr;
}
#v-
Non-standard directive, <OT>gcc complains</OT>
--
Coos
Sep 21 '06 #8

P: n/a
Michal Nazarewicz wrote:
"sbaker48" <sb**************@gmail.comwrites:
>Sven-Thorsten Fahrbach wrote:
>>>
Does anybody know of a library that offers a function to split
pathnames. It should work somewhat like the following code snippet:
.... snip ...
>
#v+
#include <string.h>

char **explode(char *str, const char *delim, size_t *num) {
size_t capacity = 16, n;
char **arr = malloc(capacity * sizeof *arr);
You failed to test the result of this malloc, so the following
statment may well cause explosions, nasal demons, whatnot.
>
arr[0] = strtok(str, delim);
while (arr[n]) {
if (++n >= capacity) {
capacity += 16;
arr = (char**)realloc(arr, capacity * sizeof *arr);
Very bad code. First, never cast realloc (or malloc). You hid the
error of failing to #include <stdlib.h>. Never capture the result
of realloc in the original pointer, you should use something like:

if (tmp = realloc(arr, newsize)) arr = tmp;
else {
/* out of memory error recovery */
}
}
arr[n] = strtok(0, delim);
}

if (num) *num = n;
return arr;
}
#v-
What in heavens name are the #v+ and #v- for, apart from creating a
syntax error?

--
Some informative links:
news:news.announce.newusers
http://www.geocities.com/nnqweb/
http://www.catb.org/~esr/faqs/smart-questions.html
http://www.caliburn.nl/topposting.html
http://www.netmeister.org/news/learn2quote.html

--
Posted via a free Usenet account from http://www.teranews.com

Sep 21 '06 #9

P: n/a
CBFalconer <cb********@yahoo.comwrites:
Michal Nazarewicz wrote:
> char **arr = malloc(capacity * sizeof *arr);
You failed to test the result of this malloc, so the following
statment may well cause explosions, nasal demons, whatnot.
True, but real operating systems terminates process with SIGSEGV. :P
> arr = (char**)realloc(arr, capacity * sizeof *arr);
Very bad code. First, never cast realloc (or malloc). You hid the
error of failing to #include <stdlib.h>. Never capture the result
of realloc in the original pointer, you should use something like:
True, cast was inserted by mistake.
What in heavens name are the #v+ and #v- for, apart from creating a
syntax error?
They say intelligent news- and mailreaders that the text between is
a source code listing or alike which ought to be displayed with
monospace font.

--
Best regards, _ _
.o. | Liege of Serenly Enlightened Majesty of o' \,=./ `o
..o | Computer Science, Michal "mina86" Nazarewicz (o o)
ooo +--<mina86*tlen.pl>--<jid:mina86*jabber.org>--ooO--(_)--Ooo--
Sep 21 '06 #10

P: n/a
Sven-Thorsten Fahrbach wrote:
Does anybody know of a library that offers a function to split
pathnames. It should work somewhat like the following code snippet:

-----------------
char *path = "/home/user/Documents/Textdocuments/Bills";
char **dirs;

splitPath(path, dirs);
------------------

`dirs' should then consist of:
dirs[0] == "home"
dirs[1] == "user"
...
dirs[4] == "Bills"

Does anybody know of a function like that?
This is a straight forward one-liner when using Bstrlib:

#include "bstrlib.h"
...
struct tagbstring path = bsStatic
("/home/user/Documents/Textdocuments/Bills");
struct bstrList dirs = bsplit (&path, '/');

Now, dirs->qty == 5; dirs->entry[0]->data == "home",
dirs->entry[1]->data = "user" etc.

You can get "The Better String Library" here: http://bstring.sf.net/

--
Paul Hsieh
http://www.pobox.com/~qed/
http://bstring.sf.net/

Sep 22 '06 #11

P: n/a
On Fri, 22 Sep 2006 00:45:59 +0200, in comp.lang.c , Michal Nazarewicz
<mi****@tlen.plwrote:
>CBFalconer <cb********@yahoo.comwrites:
>What in heavens name are the #v+ and #v- for, apart from creating a
syntax error?

They say intelligent news- and mailreaders that the text between is
a source code listing or alike which ought to be displayed with
monospace font.
Thats a new one on me. Who decided on this "standard"?

--
Mark McIntyre

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are,
by definition, not smart enough to debug it."
--Brian Kernighan
Sep 22 '06 #12

P: n/a
>>CBFalconer <cb********@yahoo.comwrites:
>>What in heavens name are the #v+ and #v- for, apart from creating a
syntax error?
On Fri, 22 Sep 2006 00:45:59 +0200, in comp.lang.c , Michal Nazarewicz
<mi****@tlen.plwrote:
>>They say intelligent news- and mailreaders that the text between is
a source code listing or alike which ought to be displayed with
monospace font.
Mark McIntyre <ma**********@spamcop.netwrites:
Thats a new one on me. Who decided on this "standard"?
Don't know but I've seen several people using it plus Gnus supports it
when displaying message.

--
Best regards, _ _
.o. | Liege of Serenly Enlightened Majesty of o' \,=./ `o
..o | Computer Science, Michal "mina86" Nazarewicz (o o)
ooo +--<mina86*tlen.pl>--<jid:mina86*jabber.org>--ooO--(_)--Ooo--
Sep 22 '06 #13

P: n/a
Michal Nazarewicz wrote:
They say intelligent news- and mailreaders that the text between is
a source code listing or alike which ought to be displayed with
monospace font.
It doesn't do anything for Thunderbird, Evolution, trn, or slrn.

Are my newsreaders unintelligent?

On the other hand, I don't let any of them use a proportional font in
the first place.
Sep 22 '06 #14

P: n/a
Coos Haak wrote:
Non-standard directive, <OT>gcc complains</OT>
It would be less annoying to see

_________o/____[snip]_________________
O\

Or even

<code>
....
</code>
But what would be wrong with:

/** code begins here **/
....
/** code ends here **/
or even, if you insist on the #v{+-}
/*
#v+
*/

/*
#v-
*/
Sep 22 '06 #15

P: n/a
jmcgill wrote:
Michal Nazarewicz wrote:
They say intelligent news- and mailreaders that the text between is
a source code listing or alike which ought to be displayed with
monospace font.

It doesn't do anything for Thunderbird, Evolution, trn, or slrn.

Are my newsreaders unintelligent?
It's nothing I've ever heard of. XanaNews does nothing special with it
either.
>
On the other hand, I don't let any of them use a proportional font in
the first place.
Yeah, I've always set my newsreaders to fixed-width font. Switching
temporarily to a proportional font didn't seem to make any difference
either.

Brian
Sep 22 '06 #16

P: n/a
Michal Nazarewicz wrote:
>
CBFalconer <cb********@yahoo.comwrites:
.... snip ...
>
>What in heavens name are the #v+ and #v- for, apart from creating
a syntax error?

They say intelligent news- and mailreaders that the text between
is a source code listing or alike which ought to be displayed with
monospace font.
All usenet communications should be in plain text (no html). No
sane newsreader should ever use a proportional font.

--
Some informative links:
news:news.announce.newusers
http://www.geocities.com/nnqweb/
http://www.catb.org/~esr/faqs/smart-questions.html
http://www.caliburn.nl/topposting.html
http://www.netmeister.org/news/learn2quote.html

--
Posted via a free Usenet account from http://www.teranews.com

Sep 23 '06 #17

P: n/a
jmcgill <jm*****@email.arizona.edukirjoitti 22.09.2006:
Michal Nazarewicz wrote:
>They say intelligent news- and mailreaders that the text between is
a source code listing or alike which ought to be displayed with
monospace font.

It doesn't do anything for Thunderbird, Evolution, trn, or slrn.
The version of slrn that I use displays such blocks in a different
color.

Sep 23 '06 #18

P: n/a
>CBFalconer <cb********@yahoo.comwrites:
>>What in heavens name are the #v+ and #v- for, apart from creating
a syntax error?
Michal Nazarewicz wrote:
>They say intelligent news- and mailreaders that the text between
is a source code listing or alike which ought to be displayed with
monospace font.
CBFalconer <cb********@yahoo.comwrites:
All usenet communications should be in plain text (no html).
And as such it will remain.
No sane newsreader should ever use a proportional font.
Why? Because proportional fonts are easier to read and Usnet is only
for hardcore Internet users? It's very unlikely that I'll ever use
them but I see no reason to ban them.

--
Best regards, _ _
.o. | Liege of Serenly Enlightened Majesty of o' \,=./ `o
..o | Computer Science, Michal "mina86" Nazarewicz (o o)
ooo +--<mina86*tlen.pl>--<jid:mina86*jabber.org>--ooO--(_)--Ooo--
Sep 23 '06 #19

P: n/a
Michal Nazarewicz wrote:
CBFalconer <cb********@yahoo.comwrites:
.... snip ...
>
>All usenet communications should be in plain text (no html).

And as such it will remain.
>No sane newsreader should ever use a proportional font.

Why? Because proportional fonts are easier to read and Usnet is
only for hardcore Internet users? It's very unlikely that I'll
ever use them but I see no reason to ban them.
Because they are a monstrous variable, and prevent the use of Ascii
graphics, schematics, diagrams, indentation, etc.

--
Some informative links:
<news:news.announce.newusers
<http://www.geocities.com/nnqweb/>
<http://www.catb.org/~esr/faqs/smart-questions.html>
<http://www.caliburn.nl/topposting.html>
<http://www.netmeister.org/news/learn2quote.html>
<http://cfaj.freeshell.org/google/>

Sep 23 '06 #20

P: n/a
>CBFalconer <cb********@yahoo.comwrites:
>>No sane newsreader should ever use a proportional font.
Michal Nazarewicz wrote:
>Why? Because proportional fonts are easier to read and Usnet is
only for hardcore Internet users? It's very unlikely that I'll
ever use them but I see no reason to ban them.
CBFalconer <cb********@yahoo.comwrites:
Because they are a monstrous variable, and prevent the use of Ascii
graphics, schematics, diagrams, indentation, etc.
And that's why someone introduced "#v+" and "#v-".

--
Best regards, _ _
.o. | Liege of Serenly Enlightened Majesty of o' \,=./ `o
..o | Computer Science, Michal "mina86" Nazarewicz (o o)
ooo +--<mina86*tlen.pl>--<jid:mina86*jabber.org>--ooO--(_)--Ooo--
Sep 24 '06 #21

P: n/a
On Sun, 24 Sep 2006 12:08:13 +0200, in comp.lang.c , Michal Nazarewicz
<mi****@tlen.plwrote:
>>CBFalconer <cb********@yahoo.comwrites:
No sane newsreader should ever use a proportional font.
>Michal Nazarewicz wrote:
>>Why? Because proportional fonts are easier to read and Usnet is
only for hardcore Internet users? It's very unlikely that I'll
ever use them but I see no reason to ban them.

CBFalconer <cb********@yahoo.comwrites:
>Because they are a monstrous variable, and prevent the use of Ascii
graphics, schematics, diagrams, indentation, etc.

And that's why someone introduced "#v+" and "#v-".
And AFAICS this is a figment of someone's overheated imagination over
in one of the PHP groups. If you can point to the RFC that defines
this new tag, then great.

--
Mark McIntyre

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are,
by definition, not smart enough to debug it."
--Brian Kernighan
Sep 24 '06 #22

P: n/a
>>>CBFalconer <cb********@yahoo.comwrites:
>>>>No sane newsreader should ever use a proportional font.
>>Michal Nazarewicz wrote:
Why? Because proportional fonts are easier to read and Usnet is
only for hardcore Internet users? It's very unlikely that I'll
ever use them but I see no reason to ban them.
>>CBFalconer <cb********@yahoo.comwrites:
>>Because they are a monstrous variable, and prevent the use of Ascii
graphics, schematics, diagrams, indentation, etc.
On Sun, 24 Sep 2006 12:08:13 +0200, in comp.lang.c , Michal Nazarewicz
<mi****@tlen.plwrote:
>>And that's why someone introduced "#v+" and "#v-".
Mark McIntyre <ma**********@spamcop.netwrites:
And AFAICS this is a figment of someone's overheated imagination over
in one of the PHP groups. If you can point to the RFC that defines
this new tag, then great.
I cannot and at the same time I don't care.

--
Best regards, _ _
.o. | Liege of Serenly Enlightened Majesty of o' \,=./ `o
..o | Computer Science, Michal "mina86" Nazarewicz (o o)
ooo +--<mina86*tlen.pl>--<jid:mina86*jabber.org>--ooO--(_)--Ooo--
Sep 25 '06 #23

This discussion thread is closed

Replies have been disabled for this discussion.