= filter: data processing interface include "filter.m"; filter := load Filter filterpath; Rq: adt { pick { Start => pid: int; Fill or Result => buf: array of byte; reply: chan of int; Finished => buf: array of byte; Info => msg: string; Error => e: string; } }; init: fn(); start: fn(param: string): chan of ref Rq;Filter defines a general module interface for byte-streamprocessing. This manual page documents how to use the inter‐face, and by implication how a Filter module should behave.There is a different implementation module for each filtertype and algorithm (eg, for compression or line encoding).All implementations are instances of type Filter, loaded fromthe Dis file filterpath, given in the manual page for eachstandard filter (or you can write your own to match thisspecification). For details of each existing filter module,see filter-deflate(2) and following manual pages.Init must be called before any other operation of a filtermodule.Start sets the filter going; param can be used to pass anyfilter-specific information to the processor. Start spawns anew thread to do the processing; it returns a channel that isused to receive requests from the filter. The first messagesent is always Rq.Start; pid is the process id of the newprocess spawned.Subsequent messages are:Rq.Fill A request by the filter to fill buf with data. The number of bytes that have actually been placed in the buffer should be sent on reply. If -1 is sent, the filter will terminate. If the value is 0, the filter will terminate once it has processed all its input.Rq.Result Buf contains data from the filter. Receipt of the the data must be acknowledged by sending a value on reply. If the value is -1, the filter will terminate.Rq.Finished The filter has finished processing. Buf contains any data that was not consumed by the filter. The filter terminates after sending this message.Rq.Info This message is used to send a string of arbitrary information from the filter during the course of its processing.Rq.Error The filter has encountered an error when processing. E is a string describing the error. The filter termi‐ nates after sending this message.== source/module/filter.m== see ALSOgzip(1), filter-deflate(2), filter-slip(2)
= filter: data processing interface
include "filter.m";
filter := load Filter filterpath;
Rq: adt {
pick {
Start =>
pid: int;
Fill or Result =>
buf: array of byte;
reply: chan of int;
Finished =>
buf: array of byte;
Info =>
msg: string;
Error =>
e: string;
}
};
init: fn();
start: fn(param: string): chan of ref Rq;
Filter defines a general module interface for byte-stream
processing. This manual page documents how to use the inter‐
face, and by implication how a Filter module should behave.
There is a different implementation module for each filter
type and algorithm (eg, for compression or line encoding).
All implementations are instances of type Filter, loaded from
the Dis file filterpath, given in the manual page for each
standard filter (or you can write your own to match this
specification). For details of each existing filter module,
see filter-deflate(2) and following manual pages.
Init must be called before any other operation of a filter
module.
Start sets the filter going; param can be used to pass any
filter-specific information to the processor. Start spawns a
new thread to do the processing; it returns a channel that is
used to receive requests from the filter. The first message
sent is always Rq.Start; pid is the process id of the new
process spawned.
Subsequent messages are:
Rq.Fill
A request by the filter to fill buf with data. The
number of bytes that have actually been placed in the
buffer should be sent on reply. If -1 is sent, the
filter will terminate. If the value is 0, the filter
will terminate once it has processed all its input.
Rq.Result
Buf contains data from the filter. Receipt of the the
data must be acknowledged by sending a value on reply.
If the value is -1, the filter will terminate.
Rq.Finished
The filter has finished processing. Buf contains any
data that was not consumed by the filter. The filter
terminates after sending this message.
Rq.Info
This message is used to send a string of arbitrary
information from the filter during the course of its
processing.
Rq.Error
The filter has encountered an error when processing.
E is a string describing the error. The filter termi‐
nates after sending this message.
== source
/module/filter.m
== see ALSO
gzip(1), filter-deflate(2), filter-slip(2)