sffhdr (Sat Oct 25 2014 01:31:01)

sffhdr				- to read from stdin
or sffhdr filename - to read from file filename
or sffhdr -s "zczc" -e ".n" filename
or sffhdr -s "01" -e "02" -o newfile filename
or cat rhubarb | cut 1-20 | sffhdr -o /world/ruby -
or sffhdr -z pramfile filename

Simple program to read in a file, split off a defined header, read certain hdr
fields and output those and (optionally) the text.

Header strings start with a keyword up to a delimiter. eg:
add_resource_fork=never
And are assumed to be on a single line (called line separator)

The program expects a file to be in the format of :
(start of header string) - optional
Header
(end of header string) - optional
Text - optional

It expects each line in the header to be in the format of :
(keyword) (delimiter or separator) (optional parameter field) (end of line)
There can be leading spaces before the keyword which may or may not, be
ignored.
The delimitor is a single chr and is optional

If there are no input switches the input is piped in via stdin and output will
be just the text (ie strip the header)

The contents of the keywords are normally output in the order specified in the
parameter file or input switch line. (ie 1st specified or topmost in the
parameter file is output first then the next and so on). The order can also be
in that the data arrives using the -r input switch or 'dataorder:' keyword.

A parameter file in sfftables can be specified with the following :
; comment line
keyword: Keywords to scan for in the input default: none
There can be up to 40 keywords specified.
soh: Start of header string used in the input default: no soh
eoh: End of header string used in the input default: ~n
eoln: End of line string used in the input default: any CR NL combination
outname: output file path and queue default: stdout (ie to screen)
fiphdr: File is Fip Style Header (including filename) default: no
delim: Delimitor chr between keyword and parameter default: ':'
outsep: The end-of-a-field chr default: n
A single chr signifying the end of each header field
(with any associative data)
striptext: strip the text default: output text
keepspc: do NOT ignore leading spaces default: strip them
preceding a keyword
casesens: Keywords are case sensitive default: no they are not
ie field : 'ARDVARK' is not the same as 'aardvark'
textlen: length of text to display. default: 0 meaning all text
This is the maximum no of chrs of text to display.
nltextlen: length of text to display. default: 0 meaning all text
This is the maximum no of chrs of text to display.
Up to the end of the first non-blank line
spctext: Convert any non-printing chr default: leave text as is
(including CR and NL) to SPC
before-file: Template file in FipSeq default:none
to be added before the 'befhdr', hdr and text
after-file: Template file in FipSeq default:none
to be added after the text (and 'afttxt')
befhdr: String to add at the top of output file. default: none
afthdr: String to add after the end of output file default: none
beftxt: String to add at the top of output file default: none
afttxt: String to add after the end of output file default: none
dataorder: Output fields in the order the data arrives. default: in parameter
file order
keepoutspc: Preserve leading and trailing Spaces default: delete
from each output field and text.
preserve-duplicates: If outputting to a file, default: overwrite
the default is to Overwrite any file with the same name.
This flag forces a new file to be created.
selector-client-file: Path/Filename for a Selector file default: none
This also needs a selector header field
The syntax of the file is :
; comment
(key) # (bit offset 1) # (bit offset 2) # (name)
bt#24#25#Bar Flys Visen

selector-group-file: Path/Filename for a Selector file default: none
This also needs a selector header field
The syntax of the file is :
; comment
(group-key) # (selector codes) # (group-name)
002#0001001111111111111111110010101....#Online

selector-FipHdr-input: FipHdr field holding the default: none
destinations to select on.
eg selector-fiphdr-input:AE
and AE holds AE:dm+ag+we+zz
selector-FipHdr-output: FipHdr field holding the default: none
resultant selector
eg selector-fiphdr-output:AZ

Input switches :
filename input filename is always last (if needed)
If there is at least one switch, use '-' to signal input is from stdin.

-z : parameter file default: none

Either -o : output file path and queue default: stdout (ie to screen)
Or -f : single field to output default: none
Syntax: -f add_resource_fork
Remember to quote spaces and funny chrs
There can be up to 40 '-f' - if vi can handle it !
Either -h : File is Fip Style Header (including filename) default: no
Or -H : A FipHdr string default: no
Or -s : start-of-header string default: none
-e : end-of-header string default: ~n

-l : line separator string default: any CR NL combination
-d : delimiter chr between keyword and parameter default: ':'
-D : output delimiter chr default: n
A single chr separator between fields (and text)
if more than one was specified.
-X : strip the text default: output text
-Z : do NOT ignore leading spaces default: strip them
preceding a keyword
-c : Keywords are case sensitive default: no they are not
ie field : 'ARDVARK' is not the same as 'aardvark'
-t : length of text to display default: 0 meaning all text
This is the maximum no of chrs of text to display.
-T : length of text to display default: 0 meaning all text
This is the maximum no of chrs of text to display.
Up to the end of the first non-blank line
-r : output in data order default: parameter file order
-R : add FipHdr field and output file default: no
with fiphdr and data as per input
-v : version and exit
For those switches with parameters, the parameter MUST be separated by a space.

Note that if defining Unix escape chrs in scripts, you will probably need to
escape the escapes ! eg : n becomes \n

Note you can preserve the output filename for the output when using