Skip to content

Orc/secho

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

**Secho** was inspired by a post to the [Plan 9][] mailing list,
where, after a round of bashing on the Unix implementation of [`echo`][echo],
the discussion went to bashing a hypothetical FSF-style implementation of `echo`
and eventually to:

> > ##NAME##
> > 
> > echo: echo arguments
> > 
> > ##SYNOPSIS##
> > 	
> > echo [-1abCDEeilmNnOqrtuVvwXx] [-B base] [-c cmd] [-d char] [-f file] [-L len] [-o file] [-S voice] [-s char] [args...]
> > 
> > ##DESCRIPTION##
> > 	
> > echo outputs its arguments. It takes the following switches:
> > 
> > =-1=
> >     One argument per line.
> > =-a=
> >     Output in ASCII. The default.
> > =-B base=
> >     Output in given base, 2..32. Unless `-u` also given, base > 10 shows lowercase.
> > =-b=
> >     Output in binary.
> > =-C=
> >     Don't echo anything, just print the number of fields.
> > =-c cmd=
> >     Run cmd on each argument, replacing `$?` with the argument itself.
> > =-D=
> >     Output in decimal.
> > =-d char=
> >     Field delimiter. Default is end of argument.
> > =-E=
> >     Print to standard error instead of to standard output.
> > =-e=
> >     Allow escape sequences
> > =-f file=
> >     Read from file, then from command line (if any).
> > =-i=
> >     Read arguments from standard input.
> > =-L len=
> >     Line width set to len. Default is to ignore line lengths.
> > =-l=
> >     Turn uppercase to lowercase.
> > =-m=
> >     Multi-column output.
> > =-N=
> >     One field per line, numbering each field.
> > =-n=
> >     Suppress newline.
> > =-O=
> >     Output in octal.
> > =-o file=
> >     Write to file instead of standard output.
> > =-q=
> >     "Quiet mode:" redirect output to `/dev/null` if not to a file.
> > =-r=
> >     Print every string that matches each regular expression. Regular expressions cannot contain `+` or `*` modifiers.
> > =-S voice=
> >     Send to speaker, having the given voice say it. If voice is a null string, use the default voice.
> > =-s char=
> >     Separate fields with char, default space.
> > =-t=
> >     Separate fields with tabs.
> > =-u=
> >     Convert lowercase to uppercase. With `-B`, output in uppercase letters for base > 10.
> > =-V=
> >     Strip non-printing characters.
> > =-v=
> >     Make non-printing characters visible.
> > =-w=
> >     If `-L` is given, word wrap instead of character wrap. Otherwise, ignored.
> > =-X=
> >     Output in uppercase hexadecimal.
> > =-x=
> >     Output in lowercase hexadecimal.
> 
> Test for everyone: write this echo in as little code as possible. C or rc is permitted. The rules:
> 
> - for C: either Standard C (no other libraries) or only libc (no other Plan 9 libraries)
> - for rc: only use programs in the core Plan 9 distribution - no programs that I have to get myself
> - match the behavior EXACTLY as above
> - shortest code and fastest run time wins
> 
> Winner gets something cool.


"_Oh ho_," said I, "_A challenge!_"