sffhdr
sffhdr - to read from stdin
or sffhdr filename - to read from file filename
or sffhdr -s "zczc" -e ".\n" filename
or sffhdr -s "\001" -e "\002" -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 '-o' by
specifying the FipHdr file ZN which is added at the end. (Remember the dbl \\),
-o /fip/spool/2brouted/\\ZN
Example :
Incoming file
afpsvr=EtherDibble
atalkd = "le0:99"
xxx
somerandomtextline which goes onandonandonandon ....
Program : cat Piddle | sffhdr -f afpsvr -e xxx -s "" -X -d"|"
Gives : 'EtherDibble|'
Other env varis can be used to define where the system is :
SFF_HOME where the home or top queue is. default: /fip
eg setenv SFF_HOME /ripexpress/underware
SFF_LOG where the log files queue is default: (SFF_HOME)/log
SFF_SPOOL where the data queues are default: (SFF_HOME)/spool
SFF_TMP where the tmp data queues is default: (SFF_HOME)/x
THIS MUST BE ON THE SAME UNIX VOLUME as SFF_SPOOL queues.
ie if spools are on /data99 which is hard disk /dev/sd0, you MUST also
have the TMP queue on the same disk/partition
NOTE that for all BUT SFF_HOME, if the parameter starts with a '/' then it is a
hard, absolute path; if not then the spool area is under SFF_HOME.
eg setenv SFF_SPOOL /data7 will look under /data7 for queues
while setenv SFF_SPOOL data7 will look under /fip/data7
(copyright) 2025 and previous years FingerPost Ltd.