manpagez: man pages & more
man transform(n)
Home | html | info | man
transform(n)                                                      transform(n)



______________________________________________________________________________


NAME

       transform - Tcl level transformations


SYNOPSIS

       package require Tcl  ?8.2?

       package require Trf  ?2.1.4?

       transform ?options...? ?data?

       callback operation data

_________________________________________________________________


DESCRIPTION

       The  command transform reflects the API for a stack channel transforma-
       tion into the tcl level, thus enabling the writing  of  transformations
       in tcl.


       transform ?options...? ?data?

              -mode read|write
                     This  option is accepted by the command if and only if it
                     is used in immediate mode.  See section IMMEDIATE  versus
                     ATTACHED for an explanation of the term.

                     The  argument  value specifies whether to run the read or
                     the write part of the transformation specified via option
                     -command on the immediate data.

                     Beyond the argument values listed above all unique abbre-
                     viations are recognized too.

              -command cmd
                     This option has to be present and is  always  understood.
                     Its  argument  is  a  command prefix. This command prefix
                     will be called by internally whenever some  operation  of
                     the  transformation  has  to be executed. An empty cmd is
                     not allowed.

                     The exact nature of the various possible calls and  their
                     expected  results is described later, in section CALLBACK
                     API.

              -attach channel
                     The presence/absence of this option determines  the  main
                     operation mode of the transformation.

                     If  present  the  transformation will be stacked onto the
                     channel whose handle was given to the option and  run  in
                     attached  mode. More about this in section IMMEDIATE ver-
                     sus ATTACHED.

                     If the option is absent the  transformation  is  used  in
                     immediate  mode  and  the options listed below are recog-
                     nized.  More  about  this  in  section  IMMEDIATE  versus
                     ATTACHED.

              -in channel
                     This  options  is legal if and only if the transformation
                     is used in immediate mode. It provides the handle of  the
                     channel the data to transform has to be read from.

                     If  the  transformation  is  in  immediate  mode and this
                     option is absent the data to transform is expected as the
                     last argument to the transformation.

              -out channel
                     This  options  is legal if and only if the transformation
                     is used in immediate mode. It provides the handle of  the
                     channel  the  generated  transformation result is written
                     to.

                     If the transformation  is  in  immediate  mode  and  this
                     option  is  absent  the generated data is returned as the
                     result of the command itself.



IMMEDIATE VERSUS ATTACHED

       The transformation distinguishes between two main  ways  of  using  it.
       These are the immediate and attached operation modes.

       For  the  attached  mode  the  option  -attach is used to associate the
       transformation with an existing channel. During the  execution  of  the
       command  no transformation is performed, instead the channel is changed
       in such a way, that from then on all data written to or  read  from  it
       passes  through  the  transformation and is modified by it according to
       the definition above.  This attachment can be revoked by executing  the
       command unstack for the chosen channel. This is the only way to do this
       at the Tcl level.

       In the second mode, which can be detected  by  the  absence  of  option
       -attach, the transformation immediately takes data from either its com-
       mandline or a channel, transforms it, and returns the result either  as
       result  of the command, or writes it into a channel.  The mode is named
       after the immediate nature of its execution.

       Where the data is taken from, and delivered  to,  is  governed  by  the
       presence  and  absence of the options -in and -out.  It should be noted
       that this ability to immediately read from and/or write to a channel is
       an  historic  artifact  which  was introduced at the beginning of Trf's
       life when Tcl version 7.6 was current as this and earlier versions have
       trouble  to  deal with \0 characters embedded into either input or out-
       put.


CALLBACK API

       Here we describe the API  of  the  callback  command  implementing  the
       actual transformation.


       callback operation data
              The callback is always called with two arguments, first an oper-
              ation code followed by data. The latter will be empty  for  some
              operations.

              The known operations are listed below, together with an explana-
              tion of the arguments, what is expected of them, and  how  their
              results are handled.

              create/write
                     When  called  data  is  empty.  The result of the call is
                     ignored.

                     This is the first operation executed for the  write  side
                     of the transformation. It has to initialize the internals
                     of this part of  the  transformation  and  ready  it  for
                     future calls.

              delete/write
                     When  called  data  is  empty.  The result of the call is
                     ignored.

                     This is the last operation executed for the write side of
                     the  transformation.  It has to shutdown the internals of
                     this part of the transformation and release any resources
                     which  were acquired over the lifetime of the transforma-
                     tion.

              write  The operation is called whenever data is written  to  the
                     channel.

                     At  the  time  of the call the argument data will contain
                     the bytes to transform. The result of the call  is  taken
                     as  the  result  of  the transformation and handed to the
                     next stage down in the stack of transformation associated
                     with the channel.

                     This  operation  has  to  transform the contents of data,
                     using whatever data was left over from the last  call  of
                     the  operation.  The  transformation is allowed to buffer
                     incomplete data.

              flush/write
                     When called data is empty. The operation has to transform
                     any  incomplete  data  it  has buffered internally on the
                     write side. The result of the call is taken as the result
                     of  the  transformation and handed to the next stage down
                     in the stack of transformation associated with the  chan-
                     nel.

              clear/write
                     When  called  data  is  empty.  The result of the call is
                     ignored.

                     The write side of the transformation  has  to  clear  its
                     internal  buffers. This operation is called when the user
                     seeks on the channel, thus  invalidating  any  incomplete
                     transformation.

              create/read
                     When  called  data  is  empty.  The result of the call is
                     ignored.

                     This is the first operation executed for the read side of
                     the transformation. It has to initialize the internals of
                     this part of the transformation and ready it  for  future
                     calls.

              delete/read
                     When  called  data  is  empty.  The result of the call is
                     ignored.

                     This is the last operation executed for the write side of
                     the  transformation.  It has to shutdown the internals of
                     this part of the transformation and release any resources
                     which  were acquired over the lifetime of the transforma-
                     tion.

              read   The operation is called whenever data is  read  from  the
                     channel.

                     At  the  time  of the call the argument data will contain
                     the bytes to transform. The result of the call  is  taken
                     as  the  result  of  the transformation and posted to the
                     next stage up in the stack of  transformation  associated
                     with the channel.

                     This  operation  has  to  transform the contents of data,
                     using whatever data was left over from the last  call  of
                     the  operation.  The  transformation is allowed to buffer
                     incomplete data.

              flush/read
                     When called data is empty. The operation has to transform
                     any  incomplete  data  it  has buffered internally on the
                     read side. The result of the call is taken as the  result
                     of  the transformation and posted to the next stage up in
                     the stack of transformation associated with the  channel.

              clear/read
                     When  called  data  is  empty.  The result of the call is
                     ignored.

                     The read side of the  transformation  has  to  clear  its
                     internal  buffers. This operation is called when the user
                     seeks on the channel, thus  invalidating  any  incomplete
                     transformation.

              query/maxRead
                     When  called  data  is  empty.  The result of the call is
                     interpreted as integer number. This operation is used  by
                     the  generic  layer  to  determine  if the transformation
                     establishes a limit  on  the  number  of  bytes  it  (the
                     generic  layer)  is allowed read from the transformations
                     lower in the stack. A negative result unsets any limit.

                     This has to be used if a transformation employs some kind
                     of  end-of-data marker. We cannot allow the generic layer
                     to overshoot this marker because any data read  after  it
                     cannot be stuffed back into the core buffers, causing the
                     I/O  system  to  loose  data  if  the  transformation  is
                     unstacked  after  it recognized the end of its data. This
                     is a limitation of the I/O system in the tcl core.

                     Returning a positive value will cause the I/O  system  to
                     slow down, but also ensures that no data is lost.

                     Two examples for such transformations are the data decom-
                     pressors for zip and bz2. They use the C-level equivalent
                     of this operation to prevent the overshooting.



SEE ALSO

       trf-intro(n)


KEYWORDS

       general transform


COPYRIGHT

       Copyright (c) 1996-2003, Andreas Kupries <andreas_kupries@users.sourceforge.net>




Trf transformer commands             2.1.4                        transform(n)

Mac OS X 10.8 - Generated Sat Sep 15 06:09:05 CDT 2012
© manpagez.com 2000-2025
Individual documents may contain additional copyright information.