icon Top 9 categories map      RocketAware > man pages >

unvis(3)

Tips: Browse or Search all pages for efficient awareness of more than 6000 of the most popular reusable and open source applications, functions, libraries, and FAQs.


The "RKT couplings" below include links to source code, updates, additional information, advice, FAQs, and overviews.


Home

Search all pages


Subjects

By activity
Professions, Sciences, Humanities, Business, ...

User Interface
Text-based, GUI, Audio, Video, Keyboards, Mouse, Images,...

Text Strings
Conversions, tests, processing, manipulation,...

Math
Integer, Floating point, Matrix, Statistics, Boolean, ...

Processing
Algorithms, Memory, Process control, Debugging, ...

Stored Data
Data storage, Integrity, Encryption, Compression, ...

Communications
Networks, protocols, Interprocess, Remote, Client Server, ...

Hard World
Timing, Calendar and Clock, Audio, Video, Printer, Controls...

File System
Management, Filtering, File & Directory access, Viewers, ...

    

RocketLink!--> Man page versions: OpenBSD FreeBSD Others



UNVIS(3)                  OpenBSD Programmer's Manual                 UNVIS(3)

NAME
     unvis, strunvis - decode a visual representation of characters



SYNOPSIS
     #include <vis.h>

     int
     unvis(char *cp, char c, int *astate, int flag);

     int
     strunvis(char *dst, char *src);

DESCRIPTION
     The unvis() and strunvis() functions are used to decode a visual repre-
     sentation of characters, as produced by the vis(3) function, back into
     the original form.  unvis() is called with successive characters in c un-
     til a valid sequence is recognized, at which time the decoded character
     is available at the character pointed to by cp.

     strunvis() decodes the characters pointed to by src into the buffer
     pointed to by dst.

     The strunvis() function simply copies src to dst, decoding any escape se-
     quences along the way, and returns the number of characters placed into
     dst, or -1 if an invalid escape sequence was detected.  The size of dst
     should be equal to the size of src (that is, no expansion takes place
     during decoding).

     The unvis() function implements a state machine that can be used to de-
     code an arbitrary stream of bytes.  All state associated with the bytes
     being decoded is stored outside the unvis() function (that is, a pointer
     to the state is passed in), so calls decoding different streams can be
     freely intermixed.  To start decoding a stream of bytes, first initialize
     an integer to zero.  Call unvis() with each successive byte, along with a
     pointer to this integer, and a pointer to a destination character.  The
     unvis() function has several return codes that must be handled properly.
     They are:

     0 (zero)         Another character is necessary; nothing has been recog-
                      nized yet.

     UNVIS_VALID      A valid character has been recognized and is available
                      at the location pointed to by cp.

     UNVIS_VALIDPUSH  A valid character has been recognized and is available
                      at the location pointed to by cp; however, the character
                      currently passed in should be passed in again.

     UNVIS_NOCHAR     A valid sequence was detected, but no character was pro-
                      duced.  This return code is necessary to indicate a log-
                      ical break between characters.

     UNVIS_SYNBAD     An invalid escape sequence was detected, or the decoder
                      is in an unknown state.  The decoder is placed into the
                      starting state.

     When all bytes in the stream have been processed, call unvis() one more
     time with flag set to UNVIS_END to extract any remaining character (the
     character passed in is ignored).

EXAMPLES
     The following code fragment illustrates a proper use of unvis().

           int state = 0;
           char out;

           while ((ch = getchar()) != EOF) {
           again:
                   switch(unvis(&out, ch, &state, 0)) {
                   case 0:
                   case UNVIS_NOCHAR:
                           break;
                   case UNVIS_VALID:
                           (void) putchar(out);
                           break;
                   case UNVIS_VALIDPUSH:
                           (void) putchar(out);
                           goto again;
                   case UNVIS_SYNBAD:
                           (void)fprintf(stderr, "bad sequence!\n");
                           exit(1);
                   }
           }
           if (unvis(&out, (char)0, &state, UNVIS_END) == UNVIS_VALID)
                   (void) putchar(out);

SEE ALSO
     unvis(1),  vis(1),  vis(3)

HISTORY
     The unvis() function first appeared in 4.4BSD.

OpenBSD 2.6                    December 11, 1993                             2

Source: OpenBSD 2.6 man pages. Copyright: Portions are copyrighted by BERKELEY
SOFTWARE DESIGN, INC., The Regents of the University of California, Massachusetts
Institute of Technology, Free Software Foundation, FreeBSD Inc., and others.



(Corrections, notes, and links courtesy of RocketAware.com)


[Detailed Topics]
FreeBSD Sources for unvis(3) functions
OpenBSD sources for unvis(3)


[Overview Topics]

Up to: NUL Terminated String processing - NUL terminated string operations (strcpy, strlen, etc)
Up to: Character Tests and Operations - isblank, toupper, etc.


RocketLink!--> Man page versions: OpenBSD FreeBSD Others






Rapid-Links: Search | About | Comments | Submit Path: RocketAware > man pages > unvis.3/
RocketAware.com is a service of Mib Software
Copyright 1999, Forrest J. Cavalier III. All Rights Reserved.
We welcome submissions and comments