glenda.party
term% ls -F
term% cat index.txt
SCRIBBLE(2)                   System Calls Manual                  SCRIBBLE(2)

NAME
       scribblealloc, recognize - character recognition

SYNOPSIS
       #include <u.h>
       #include <libc.h>
       #include <draw.h>
       #include <scribble.h>

       Scribble    *scribblealloc(void);
       Rune        recognize(Scribble *);

DESCRIPTION
       The  scribble  library  implements  simple  character recognition.  All
       characters are drawn using a single stroke of the pen (mouse button  1)
       as on a palmtop computer.

       The library is not really intended for standalone use.  Its primary use
       is by the scribble graphical control (see control(2)).

       Scribblealloc allocates and returns an appropriately initialized Scrib‐
       ble structure:

              #define CS_LETTERS          0
              #define CS_DIGITS           1
              #define CS_PUNCTUATION  2

              struct Scribble {
                  /* private state */
                  Point           *pt;
                  int         ppasize;
                  Stroke     ps;
                  Graffiti        *graf;
                  int         capsLock;
                  int         puncShift;
                  int         tmpShift;
                  int         ctrlShift;
                  int         curCharSet;
              };

       This  structure  encodes  the  points making up the stroke to be recog‐
       nized, as well as the character group in which  the  stroke  should  be
       searched.

       There  are  three  such  groups: letters, digits, and punctuation.  The
       current group is encoded in the curCharSet field of the Scribble struc‐
       ture.  Special strokes are recognized to switch between groups.  In ad‐
       dition, the charater recognized is influenced by  mode  parameters  and
       modifies  them.   These are identified by the capsLock, puncShift, tmp‐
       Shift, and ctrlShift fields of the Scribble structure.  When  puncShift
       is  non-zero,  the character is recognized in the punctuation character
       set.  Similarly, when the character recognized is printable  and  ctrl‐
       Shift  is  set,  the associated control character is returned as if the
       control key were depressed, and when the character is a letter and cap‐
       sLock or tmpShift is set, the  upper-case  version  is  returned.   The
       puncShift  and  tmpShift flags are turned off once a character has been
       recognized; the others are left set.

       The character to be recognized is encoded as an array of pen_points  in
       the  ps field.  To allow easy drawing of the stroke as it is drawn, the
       pt and ppasize fields are available to the application code for storing
       an array of points for a call to poly (see draw(2)).

       Recognize recognizes the character provided in  the  ps  field  of  the
       Scribble  structure;  it returns the rune or zero if nothing was recog‐
       nized.

FILES
       /sys/lib/scribble/classifiers contains the stroke definitions.

SOURCE
       /sys/src/libscribble

       This library is adapted from software reproduced by permission:

       Graffiti.c is  based  on  the  file  Scribble.c  copyrighted  by  Keith
       Packard:

              Copyright © 1999 Keith Packard

       Permission to use, copy, modify, distribute, and sell this software and
       its  documentation  for any purpose is hereby granted without fee, pro‐
       vided that the above copyright notice appear in  all  copies  and  that
       both  that  copyright  notice and this permission notice appear in sup‐
       porting documentation, and that the name of Keith Packard not  be  used
       in  advertising or publicity pertaining to distribution of the software
       without specific, written prior permission.   Keith  Packard  makes  no
       representations about the suitability of this software for any purpose.
       It is provided "as is" without express or implied warranty.

       Portions of the software Copyright © 1994 by Sun Microsystems Computer
       Company.

       Portions  of the software Copyright © 2000 by Compaq Computer Corpora‐
       tion.

SEE ALSO
       Keyboard and prompter in bitsyload(1), draw(2), control(2)

                                                                   SCRIBBLE(2)