Ctalk

Previous:   [Index]

Top

Ctalk Language Reference

This document describes the Ctalk programming language, version 0.66 2021-02-02.


Next: , Previous: , Up: Top   [Index]

Invoking

Invoking Ctalk

Ctalk has two parts: a preprocessor and interpreter that translates Ctalk code into C, which a compiler can use to create an executable program, and a run-time library, which the compiler links with the executable.

Ctalk has its own C99 compatible preprocessor, ctpp, which is described in its Texinfo manual, ctpp.info.

To use ctalk, you must provide at least the name of the input file. Normally, you also provide the name of the output file with the ‘-o’ option. If you use the conventions followed by GNU C, the output file is normally the base name of the input file with the extension ‘.i’, as in this example.

$ ctalk myprog.c -o myprog.i

The ctalk program preprocesses myprog.c and translates it into standard C. After ctalk has finished, you can compile and link the output of ctalk to produce an executable program.

$ gcc myprog.i -o myprog -lctalk

More conveniently, the ctcc command combines these operations, with the appropriate command line options, to build an executable program.

$ ctcc myprog.c -o myprog

If you need to build a program for debugging, the ctdb command builds executables that you can debug with gdb. See Debugging.

For more information, refer to the ctalk(1), ctcc(1), ctdb(1), gcc(1), and gdb(1) manual pages.

Command Line Options

--clearpreload

Clear preloaded methods so they can be rewritten.

-E

Preprocess the input and exit.

-h, --help

Print a help message and exit.

-I dir

Add dir to the ctalk include search path.

--keeppragmas

Write pragmas untranslated to the output.

--nolibinc

Do not include Ctalk’s system headers in the output.

--nopreload

Do not use preloaded methods.

-o file

Write the ctalk output to file.

--printlibdirs

Print the library directories and exit.

--printtemplates

Print the templates that Ctalk loads and caches (but does not necessarily send to the output).

--progress

Print dots to indicate Ctalk’s progress.

-P

Do not output line number information.

-s dir

Add dir to the compiler system include search path.

-V

Print the Ctalk version number and exit.

-v
--verbose

Print verbose warnings. This option also sets the --warnextension, --warnduplicatenames and --warnunresolvedselexpr options.

--warnclasslibs

Print the names of class libraries as they are loaded.

--warnduplicatenames

Print a warning when an object duplicates a C variable name. Because of the way Ctalk’s just-in-time interpreter works, the front end prints warnings of any duplicate names. The variables and objects need not be in the same scope. Usually, though, Ctalk can make an intelligent decision about how to process objects and variables with duplicate names. This option does not affect errors caused by duplicate symbols or shadowing.

--warnextension

Print warnings for some compiler extensions.

--warnunresolvedselfexpr

Prints warnings if self appears in an argument block with either an instance variable label or an unresolvable method label following it. In expressions like these, the class of each element of a collection, when represented by self within the argument block, often can’t be determined until run time.

You can specify a class for self by placing a class cast expression (described in the section Class casting) before the self keyword. See Class casting.

For example, if a program contains an expression like this:


List new textLines;

   ...The program adds items to textLines...

textLines map {

  if (self length > 0) {

    ...do something...

  }

}

Then the expression, self length would generate a warning due to the label, length, because the class membership of, self, which represents each successive element of the, textLines, list, normally isn’t determined until run time, and so the receiver class of length is also undetermined.

However, if you know that textLines contains only String objects, then you can add a class cast expression in the argument block.


textLines map {

  if ((String *)self length > 0) {

    ...do something...

  }

}

This tells the program to treat length's receiver, self, as a String object, so it’s possible to determine, before the program is actually executed, whether, self length, is a valid expression.


Next: , Previous: , Up: Top   [Index]

Classes

Classes

Class library files contain class and method definitions and are located in the classes subdirectory. After installation, the libraries are in a ctalk include subdirectory defined by the macro CLASSLIBDIR when the program is built.


Next: , Up: Classes   [Index]

Object

Object Class

Ctalk defines the Object class by default at run time. All other classes are subclasses of Object.

Instance Variables

value

The value of the object. For classes that correspond to the C data types: Character, Float, Integer, LongInteger, and String, ctalk formats the value as it would appear as if output by the C printf function.

When you use one of these classes in a C expression, ctalk translates the object’s value to its C data type.

Other classes may define value to return class specific data.

Null Objects

To help make Ctalk compatible with C, Ctalk defines the macro STR_IS_NULL, which checks whether the object’s value evaluates to false in C. That means that objects that have the value ‘(null)’, are an empty string, or if the object’s value is a NULL pointer, all evaluate similarly. The STR_IS_NULL macro is defined in the include file ctalkdefs.h, so to use it, add the following line at the start of a class library.


#include <ctalk/ctalkdefs.h>

Ctalk also assigns an object the value of ‘(null)’ when an object is created or when Ctalk encounters a C NULL in an expression (which is a macro that expands to ‘((void *)0)’).

Instance Methods

! (void)

Overloads the ‘!’ prefix operator.

!= (Object arg)

Returns a Boolean value of False if the receiver and the argument are the same object, True otherwise. Also returns False if the receiver and argument’s values both evaluate to False.

& (void)

When used to overload C’s “address of” (‘&’) operator, is synonymous with the addressOf method, below.

-> (String member_name)

Given the name of an a C OBJECT * member name, like __o_name, __o_classname, __o_class and so on, return a String, Integer, or Symbol with the value of that member. See OBJECT typedef.

The class of the returned object depends on which OBJECT * is selected. Some of the results are returned as references contained in Symbol objects, which avoids unexpectedly changing the target object.

OBJECT Member        Expression                  Class of Result Object
-------------        ----------                  ----------------------
__o_name             obj -> __o_name             String
__o_classname        obj -> __o_classname        String
__o_superclassname   obj -> __o_superclassname   String
__o_value            obj -> __o_value            String
__o_class            obj -> __o_class            <obj's> class
__o_superclass       obj -> __o_superclass       <obj's> superclass
instancevars         obj -> instancevars         Symbol 
classvars            obj -> classvars            <obj's> class
__o_p_obj            obj -> __o_p_obj            <obj's> parent's class
scope                obj -> scope                Integer
attrs                obj -> attrs                Integer
nrefs                obj -> nrefs                Integer

The method sets the OBJECT_IS_DEREF_RESULT attribute on objects that the method creates.

The result of retrieving an object’s instance or class variables depends on the object. If the object is not a class object, then the classvars member will be NULL. The class of an instance variable is the parent object, so the Ctalk library returns the address of the first instance variable. If you want to check each variable, it is much easier to use the methods mapInstanceVariables or mapClassVariables, below.

Examples


/* Set a Symbol object and an Object instance to
   another object's class, and display the classes'
   name. */
int main () {

  String new myObject;
  Symbol new optr;
  Object new classObj;
  
  myObject = "String"; /*Needed by classObject, below.*/

  printf ("%p\n", myObject -> __o_class);
  printf ("%s\n", myObject -> __o_class -> __o_name);

  *optr = myObject -> __o_class;
  printf ("%p\n", (*optr) -> __o_class);
  printf ("%s\n", (*optr) -> __o_class -> __o_name);

  classObj = (*optr) classObject;
  printf ("%p\n", classObj);
  printf ("%s\n", classObj -> __o_name);

  classObj = myObject classObject;
  printf ("%p\n", classObj);
  printf ("%s\n", classObj -> __o_name);

}

/* To print an object's value. */
int main () {

  String new s;
 
  s = "StringValue";
 
  printf ("%s\n", s -> __o_value);

}

/* To save an object's scope to an Integer object, and
   print them. */
int main () {

  String new s;
  Integer new scopeInt;
  

  scopeInt = s -> scope;

  printf ("%d == %d\n", s -> scope, scopeInt);

}


/* To save an object's attributes to an Integer and
   print them. */

int main () {

  Integer new attrsInt;
  List new l;
  String new member1;
  String new member2;
  

  l = member1, member2;

  /* Check for an OBJECT_IS_MEMBER_OF_PARENT_COLLECTION attribute
     (currently its definition is (1 << 7), or 128), which is set
     in each of the list's Key objects. (The '->' operator in the
     expressions has a higher precedence than '*', so parentheses
     are necessary.) */
  attrsInt = (*l) -> attrs;

  printf ("%d == %d\n", (*l) -> attrs, attrsInt);
}


Note: The use of __o_classname and __o_superclassname as separate object member is being superceded by the CLASSNAME and SUPERCLASSNAME definitions. The -> method recognizes both the old and new names, but if -> is used with an OBJECT * as a C operator, then the program must use the CLASSNAME or SUPERCLASSNAME macros. See CLASSNAMEMacro.

= (Object new_object)

A basic assignment method. Assigns new_object so that the receiver label can refer to it.

== (Object arg)

Returns a Boolean value of True if the receiver and the argument are the same object, False otherwise.

As a special case, the method returns True if the receiver and argument’s values evaluate to a C NULL. Refer to the description of null objects above. See NullObjects.

addInstanceVariable (char *name, OBJECT *value)

Add instance variable name with value to the receiver.

addressOf (void)

Return a Symbol that contains the address of the receiver. This method is functionally equivalent to the C language ‘&’ operator.

asFloat (void)

Return a Float object with the value of the receiver.

asString (void)

Return a String object of the receiver.

asSymbol (void)

If the value of the receiver is an object reference, return a Symbol object with that reference. Otherwise, return a Symbol object with a reference to the receiver.

backgroundMethodObjectMessage (Method method_object)

Send the message defined in method_object to the receiver as a new process, which runs concurrently until method_object returns.

The argument, method_object, is a previously defined method which takes no arguments. The return value, if any is not saved when the background process exits.

Here is a brief example that opens an ObjectInspector on a process.


Object instanceMethod bgMethod (void) {
  self inspect "bgMethod> ";
  printf ("bgMethod printed this.\n");
}

int main () {
  Integer new i;
  Method new bgMethodObject;
  int status;

  bgMethodObject definedInstanceMethod "Object", "bgMethod";
  i backgroundMethodObjectMessage bgMethodObject;

  wait (&status);  /* Returns when the background */
                   /* process exits.              */

}

basicNew (char *name)
basicNew (char *name, char *value_expr)
basicNew (char *name, char *classname, char *superclassname, char *value_expr)

If given with one argument, the receiver must be a class object, and the method creates a new object with the name given as the argument and a value of ‘(null)’.

With two arguments, create a new object with the name and value given in the arguments, and with the class and superclass of the receiver, which needs to be a class object in this case also.

If the method is used with four arguments, create a new object with the name, class, superclass and value given by the arguments - in this case, basicNew doesn’t use the class and superclass of the receiver.

In each case, the newly created object contains all of the instance variables defined by the class object and has a scope of LOCAL_VAR|METHOD_USER_OBJECT and a reference count of 1.

Note: The addition of the receiver’s instance variables means you need to be careful when the receiver is not a class object. The basicNew method does not check for cascading or circular instance variables. So if you’re creating and then pushing a lot of items, make sure the method’s receiver is a class object, and assigning the new object using a Symbol is more robust that assigning other types of objects.

That is, a set of statements like


*tokSym = String basicNew "token", valuebuf;
myList push *tokSym;

is much more reliable than, say


myTok = myString basicNew "token", valuebuf;
myList push myTok;

become (OBJECT *original_object)

Make the receiver a duplicate of the argument object.

callStackTrace (void)

Print a call stack trace.

class (char *classname)

Declare a new class classname. The class declaration consists of a superclass name, the class keyword, the name of the new class, and an optional documentation string. For example;


FileStream new WriteFileStream;

... or, with a docstring between the class name and semicolon ...

FileStream new WriteFileStream
"Defines the methods and instance variables that write data to files. Also
defines the class variables stdoutStream and stderrStream, which are the 
object representation of the standard output and standard error streams.";

className (void)

Return a String object containing the class name of the receiver.

classObject (void)

Return the class object named by the receiver’s value. Normally the receiver should be a String object - the method uses the C value of the receiver to retrieve the class object by its name. If the receiver is a class object, the method returns the receiver itself.

copy (Object source_object)

Copy source_object to the receiver. This method replaces the receiver, which received the message, with a completely new copy of the source_object argument. The original receiver object no longer exists.

decReferenceCount (void)

Decrease the receiver object’s reference count by one.

delete (void)

Delete the receiver object and its instance variables.

For some of the details of how Ctalk deletes objects, refer to the __ctalkDeleteObject () API function. See __ctalkDeleteObject.

disableExceptionTrace (void)

Disable method walkback displays when handling exceptions.

docDir (void)

Returns a String that contains the path where the Ctalk-specific documentation is installed on the system (i.e., documentation other than man pages and Texinfo manuals).

dump (void)

Create an ObjectInspector object and print the object’s contents on the terminal. This is a convenience method for the ObjectInspector : formatObject method.

enableExceptionTrace (void)

Enable method walkback displays when handling exceptions.

getReferenceCount (void)

Return an Integer with the receiver’s reference count.

hasPointerContext (void)

Returns a Boolean value of True if the receiver appears in a pointer context; i.e., on the left-hand side of an assignment operator in an expression with some dereferencing method (usually a “*”), as in this example.


Symbol new myNewObjectPtr;
Symbol new myOldObjectPtr;


*myNewObjectPtr = myOldObjectPtr;

incReferenceCount (void)

Increase the receiver object’s reference count by one.

inspect (void)
inspect (String promptStr)

Open an inspector on the receiver object. At the prompt, typing ‘?’ or ‘help’ displays a list of the inspector’s commands. If given a String object as its argument, displays the string as the inspector’s command prompt. This method is a shortcut for inspect in ObjectInspector class. See ObjectInspector_inspect.

is (char *className)

Return TRUE if the receiver is a member of the class given in the argument, FALSE otherwise. Note: Don’t use an expression like, ‘obj is Class’. The argument must be a valid, defined class, which simplifies the method considerably.

To determine if an object is a class object, use isClassObject, which is mentioned below. This example illustrates the difference.


if (myObject is String) {   /* OK - String is a defined class. */
 ...
}

if (myObject is Class) {    /* Not OK - 'Class' is not a defined class. */
 ...
}

if (myObject isClassObject) {  /* OK - Just check whether the object is
 ...                              its own class object. */
}

isClassMethod (char *classMethodName)

Return TRUE if the receiver’s class defines an instance method named classMethodName, FALSE otherwise. If the receiver is an instance or class variable, look for the method in the class of the receiver’s value.

isClassObject (void)

Returns a Boolean value of True if the receiver is a class object, False otherwise.

isInstanceMethod (char *instanceMethodName)

Return TRUE if the receiver’s class defines an instance method named instanceMethodName, FALSE otherwise. If the receiver is an instance or class variable, look for the method in the class of the receiver’s value.

isInstanceVariable (char *instanceVariableName)

Return TRUE if the receiver has an instance variable named instanceVariableName, FALSE otherwise.

instanceMethod (char *alias, char *name, (args)

Declare a method of the receiver’s class with the name name, with the arguments args, and, optionally, with the alias alias. See Methods.

isNull (void)

Return TRUE if the receiver is a null result object, FALSE otherwise.

isNullValue (void)

Return TRUE if the receiver’s value is NULL, ‘(null)’, or ‘0’, FALSE otherwise. Note that this method is here for compatibility with older programs. New programs should not need it.

isSubClassOf (String classname)

Returns True if the reciever’s is a member of classname or one of its subclasses, False otherwise.

libraryPath (void)

Return the file path name of the receiver’s class library.

mapClassVariables (OBJECT *(*fn)())

Apply the argument, fn to each of the class variables in the receiver’s class object. The argument may be either a method or a code block. Refer to the Ctalk Tutorial for examples of inline method messages using methods like map and mapInstanceVariables.

mapInstanceVariables (OBJECT *(*fn)())

Apply the argument, fn, to each of an object’s instance variables. The argument may be either a method or a code block. Refer to the Ctalk Tutorial for examples of inline method messages using methods like map and mapInstanceVariables.

methodObjectMessage (Method method_object)
methodObjectMessage (Method method_object, Object arg1, Object arg2)

Perform a method call with a Method class object. The method_object argument and its own arguments must have been previously defined. See Method.

methodPoolMax (void)
methodPoolMax (Integer new_max_size)

Set (with one argument) and retrieve (with no arguments) the maximum number of objects in each method’s object pool. When a method’s pool size reaches this number of objects, the pool deletes the the oldest object in the pool to make room for the new object.

Generally, the default pool size is suitable for the language tools and demonstration programs that come packaged with Ctalk. Some of the test programs in the test/expect subdirectory that run through many iterations (i.e., thousands of iterations) require a larger pool size. This is especially true if a program uses many C variables when iterating through its operations, and whether the C variables are simply scalar or constant values (e.g., ints, doubles, and literal strings), and whether the variables are pointers to objects in memory.

The default maximum pool size is set when the Ctalk library is built. This size is reported in the configure status report during the build process.

methodObjectMessage (Method methodObject)
methodObjectMessage (Method methodObject, Object arg1, Object arg2)

With three arguments, the method uses the second and third arguments as the method instance’s arguments, without previous calls to the withArg method (defined in Method class).

Method instances with two arguments are commonly used in graphical event dispatchers. They’re found mostly in X11PaneDispatcher class, and the three-parameter form of methodObjectMessage allows the method instance calls to be more efficient.

The following examples of method calls shows how to call method instances with and without using the withArg method first.

This example is from X11PaneDispatcher class.


  /* This example pushes the arguments separately. */
__subPane handleKbdInput withArg __subPane;
__subPane handleKbdInput withArg __event;
__subPane methodObjectMessage __subPane handleKbdInput;

  /* The three-argument form of methodObjectMessage allows
     passing two arguments to a method instance with only
     a single expression. */
__subPane methodObjectMessage __subPane handleKbdInput,
  __subPane, __event;

This example is the demos/ipc/sockproc.c demonstration program, which shows how to define and start a method instance as a separate process.


#define SOCK_BASENAME "testsocket.$$"

String new gSocketPath; /* The socket path is common to both
			   processes. */

Object instanceMethod startTimeServer (void) {
  UNIXNetworkStreamReader new reader;
  String new utcTimeString;
  CalendarTime new timeNow;
  SystemErrnoException new ex;

  reader openOn gSocketPath;
  if (ex pending) {
    ex handle;
    return ERROR;
  }

  while (1) {
    utcTimeString = reader sockRead;
    if (ex pending) {
      ex handle;
      return ERROR;
    }
    if (utcTimeString length > 0) {
      timeNow = utcTimeString asInteger;
      timeNow localTime;
      printf ("%s\n", timeNow cTimeString);
    }
  }
}

int main (int argc, char **argv) {

  CTime new thisTime;
  CTime new prevTime;
  UNIXNetworkStream new strObject;
  UNIXNetworkStreamWriter new client;
  Method new timeServerInit;
  Integer new childPID;
  SystemErrnoException new ex;
  Object new procRcvr;

  gSocketPath = strObject makeSocketPath SOCK_BASENAME;

  timeServerInit definedInstanceMethod "Object", 
    "startTimeServer";
  childPID = 
    procRcvr backgroundMethodObjectMessage timeServerInit;

  sleep (1); /* Wait a sec while the reader process creates the
		socket. This interval might be system dependent. */

  client openOn gSocketPath;
  if (ex pending) {
    ex handle;
    return ERROR;
  }

  prevTime utcTime;

  while (1) {

    thisTime utcTime;

    if (thisTime != prevTime) {

      client sockWrite (thisTime asString);

      if (ex pending) {
	ex handle;
	return ERROR;
      }
      
      prevTime = thisTime;

    }
    usleep (1000);
  }
  exit (0);
}

methods (Boolean findClassMethods)

Return a string containing the methods defined by the receiver’s class, one method per line. If findClassMethods is True, return a list of class methods in the class. If the argument is False, return a list of the class’s instance methods.

name (void)

Return the name of the receiver as a String object.

new (newObject1, newObject2, newObject3...)

Create an object or object’s of the receiver’s class with the names newObject1, etc. For example:


String new myString1, myString2, myString3;

printSelfBasic (void)

Print the contents of the receiver to the program’s standard error output.

setReferenceCount (Integer refCnt)

Set the receiver’s reference count to the value given as the argument. Note, however, that the reference count given as the argument does not include any changes in the reference count as this method is executed. If you’re unsure about how to adjust the reference count it’s safer to use incReferenceCount and decReferenceCount instead, or use the __objRefCntSet () library function directly. See objRefCntSet.

sizeof (Object)

Overloads the C sizeof operator when the argument is an object. If the argument is a C variable or a type expression, then Ctalk uses the compiler’s sizeof operator.

superclassName (void)

Return a String that contains the name of the object’s superclass, or ‘(null)’ if the receiver is an instance of Object class, which has no superclass.

traceEnabled (void)

Return TRUE if exception walkback displays are enabled, FALSE otherwise.

value (void)

Returns the value of the receiver object. When you use an object without a method, ctalk uses the value message to return the object’s value. For example,

  printf ("%s", stringObject);

is the same as,

  printf ("%s", stringObject value);

Next: , Previous: , Up: Classes   [Index]

Bitmap

Bitmap Class


Next: , Previous: , Up: Classes   [Index]

DisplayFont

DisplayFont Class


Next: , Previous: , Up: Classes   [Index]

X11Font

X11Font Class

A X11Font object provides information about a X Window System font, like its resource ID, width, height, and X Logical Font Descriptor (XLFD) string. Normally, a pane or X window does not use font glyphs directly but uses Pane methods to display text using the font resource. See X11Pane.

For variable width fonts, the maxWidth instance variable provides the width of the widest character in the set.

For more information about X’s font naming scheme, the xfontsel(1) manual page is a good place to begin.

Instance Variables

ascent
descent

Integer objects that contain the number of pixels the character set extends above and below the baseline. These dimensions are typically used to determine interline spacing.

fontDesc

A String containing the X Logical Font Descriptor of the receiver’s font. After a call to getFontInfo (below), contains the XLFD of the actual font.

fontId

An Integer that contains the X Window System’s resource ID of the font.

height

An Integer that contains the sum of the maximum descent and ascent; that is, the height of the font’s tallest character.

maxLBearing

An Integer that contains the maximum distance in pixels from a character’s drawing origin to its glyph.

maxRBearing

An Integer that contains the maximum distance in pixels between the right side of a font’s character glyphs to the right-hand edge of the character space.

maxWidth

An Integer that contains the width of the font’s widest character glyph. Note that these metrics’ uses differ for different fonts, and can vary a lot, especially in foreign language character sets. Generally, though, for Western, monospaced fonts, the width in pixels of a character plus its horizontal spacing is:


myFont maxLBearing + myFont maxWidth;

Instance Methods

getFontInfo (String fontDesc)

Fills in the font metrics (height, maxWidth, ascent, descent, X font ID) for the font named by fontDesc. Also fills in the receiver’s fontDesc instance variable with the string given as the argument.

textWidth (String text)

Returns an Integer with the width of text in pixels when rendered in the reciever’s font. The program should call the getFontInfo method before calling this method.


Next: , Previous: , Up: Classes   [Index]

X11Cursor

X11Cursor Class

The X11Cursor class represents cursor objects and provides wrapper methods that create X11 cursor resources. A X11Cursor object’s value is the ID of the newly created cursor resource.

To display the cursor in a X11Pane object’s window, see the useCursor method in X11Pane class. This example shows the sequence of expressions. See X11Pane.


X11Pane new xPane;        /* Create our objects. */
X11Cursor new waitCursor;

...

waitCursor watch;         /* Get the resource ID of a wait cursor
                             (normally, a watch or a spinner). */
...

xPane useCursor waitCursor;  /* Display the wait cursor on the xPane's
                                window. */

The defaultCursor method (class X11Pane) restores the window’s cursor to its parent window’s cursor, which is the default cursor for new windows. See X11Pane.


xPane defaultCursor;

Instance Methods

arrow (void)

Sets the cursor to the upward-left pointing arrow that is the default for most new windows.

grabMove (void)

Creates a grab cursor.

scrollArrow (void)

Creates a scrollbar vertical double arrow cursor.

watch (void)

Creates a cursor that displays a small watch.

xterm (void)

Creates a xterm cursor. That is, the vertical bar used for editing text.


Next: , Previous: , Up: Classes   [Index]

X11FreeTypeFont

X11FreeTypeFont Class

This class contains the methods that handle FreeType fonts using the Xft and Fontconfig libraries. In classes and methods that use fonts, FreeType fonts take priority if they are available and the program has initialized the library with the initFontLib method, which is described in further detail below. Otherwise, applications use the X Window System’s builtin bitmap fonts.

Internally Ctalk uses the Fontconfig library to locate the system’s fonts.conf file. The fonts.conf file’s default location is configured when the library is built. Generally, the font.conf file’s path is /etc/fonts/fonts.conf or /usr/local/etc/fonts/fonts.conf.

However, an alternate fonts.conf pathname may be set in the environment with the ‘FONTCONFIG_FILE’ environment variable. If its value begins with a ‘~’, the path is relative to the user’s ‘HOME’ directory. If the name doesn’t start with a ‘/’, then the pathname is relative to the fontconfig libraries’ default installation directory. This directory can be changed by setting the ‘FONTCONFIG_PATH’ environment variable to an alternate directory.

Classes that use X Window System graphics (that is, X11Pane and its subclasses) can use either the X libraries’ built-in bitmap fonts (via the pane’s fontVar instance variable), or the scalable Freetype fonts (via the pane’s ftFontVar instance variable).

The default is to use X’s built in bitmap fonts. These fonts are initialized when the program connects to the display server.

However, to enable drawing with scalable fonts, programs need to call the initFontLib method during program initialization, with a line similar to this one.


myMainWindow ftFontVar initFontLib;

Fontconfig Font Selection

Fontconfig font descriptions have their own syntax. A Fontconfig pattern has the following elements.


<fontfamily>[-<fontsize>][:[[<name>=]<value>] ...]

Here are a few examples.


DejaVu Sans Mono
Nimbus Sans L-12
Ubuntu Mono-10.0:italic
FreeMono-10:slant=italic:weight=bold
Ubuntu Mono-10.0:italic
Roboto-12:style=bold

These font descriptors work with the selectFontFromFontConfig method. The receiver, of course, must be a X11FreetypeFont object, or the pane object’s ftFontVar instance variable. Here is an example


myWindow ftFontVar selectFontFromFontConfig "DejaVu Sans Mono-12"

The Fontconfig user guide describes the library’s font selection syntax. The documentation is available from many software package archives and also on the web at http://freedesktop.org/fontconfig.

Basic fonts.conf Files

Ctalk also uses a subset of the fonts.conf tag syntax and the older style of finding a system’s or users’ fonts.conf file:

1.

The file path named by the ‘$XFT_CONFIG’ environment variable.

2.

$HOME/.fonts.conf

3.

$XDG_CONFIG_HOME/fontconfig/fonts.conf

4.

/etc/fonts/fonts.conf

5.

The file /usr/X11R6/lib/X11/XftConfig

If you want to write your own font config file, the Ctalk libraries can use a subset of the fonts.conf markup.

In this case, the entries simply cause the libraries to add the fonts in the directories to the internal font database.


<fontconfig>
<dir>/usr/share/fonts/truetype/dejavu</dir>
<dir>/usr/share/fonts/truetype/freefont</dir>
<dir>/usr/share/fonts/type1/gsfonts</dir>
</fontconfig>

There is a sample ‘XftConfig’ file in the Ctalk source distribution, doc/XftConfig.sample. The fonts.conf (5) manual page and the Xft user and developer documentation provide even more information.

Further Information About Fontconfig and libXft

For further information about the the Fontconfig libraries, refer to: https://freedesktop.org/fontconfig. Information about Xft is available at http://freedesktop.org/wiki/Software/Xft.

Instance Variables

family

A String that contains the family of the currently selected font. See String.

fgRed
fgGreen
fgBlue
fgAlpha

The parameters of the font’s RGBA color. The variables are Integers and can have a range of 0 - 0xffff. See Integer.

rotation
scaleX
scaleY

Float instance variables that control the scaling and rotation of the rendered fonts.

slant
weight
dpi

Integers that contain the slant, weight, and dpi resolution of the receiver font. For a description of the Xft library’s constants, refer to the selectFont method entry, below. See Integer.

style

A String that contains the selected style parameter, if any.

pointSize

A Float that contains the font’s point size. See Float.

ascent

An Integer that contains the font’s height in pixels above the baseline.

descent

An Integer that contains the font’s height in pixels below the baseline.

handle

A Symbol that contains the value of the font’s handle. Normally this is set by X11FreeTypeFont : saveSelectedFont. The handle’s value is a cast from a XftFont * in a normal setup, like the Ctalk library’s default when the Xft libraries are enabled during installation.

height

An Integer that contains the dimensions in pixels of the font’s total height, both above and below the baseline, and any extra vertical spacing.

maxAdvance

An Integer that contains the maximum width in pixels of a font’s characters horizontal dimensions.

Instance Methods

alpha (Integer value)

Set the current Xft font’s foreground alpha channel. The argument value must be an unsigned short int; i.e., in the range 0 - 65535 (0xffff hex).

blue (Integer value)

Set the current Xft font’s foreground blue channel. The argument value must be an unsigned short int; i.e., in the range 0 - 65535 (0xffff hex).

currentDescStr (void)

Returns a String containing a font descriptor for the currently selected font. The descriptor contains the attributes that the Ctalk libraries use to select fonts: family, point size, slant, and weight.

For the complete descriptor that the Freetype library derives from the selected font’s pattern, refer to the X11FreeTypeFont : selectedFont method.

errors (void)

This is a shortcut for


myFont notifyLevel XFT_NOTIFY_ERRORS

Refer the the X11FreeTypeFont : notifyLevel method for more information.

green (Integer value)

Set the current Xft font’s foreground green channel. The argument value must be an unsigned short int; i.e., in the range 0 - 65535 (0xffff hex).

initFontLib (void)

Initializes the font library and sets the reciever’s instance variables to the default selected font. Apps need to use this method before most of the other other methods in this class.

Programs should call this method before any of the attachTo methods, so the methods can set their drawing parameters before the program starts to receive X events.

If the system is not configured to use outline fonts then the library prints a message and exits the program with a non-zero value. See ctalkXftInitLib. If the library is already initialized, then the method returns ‘0’.

isMonospace (void)

Returns a read-only Boolean value of true if the application’s selected font is monospace, false otherwise.

libIsInitialized (void)

Returns a non-zero Integer value if the Xft libraries are initialized and a font is selected.

listFonts (String pattern)

List the font descriptors in the FreeType library that contain pattern. If pattern is an empty string ‘""’ or a ‘*’, match every font descriptor.

loadNotify (void)

This is a shortcut for


myFont notifyLevel XFT_NOTIFY_LOAD

This causes methods like selectFont to display the family and size given to them, and a brief font descriptor that contains the font parameters that Ctalk uses to select fonts: family, point size, slant, and weight.

Refer to the X11FreeTypeFont : notifyLevel method for a description of information and error message levels. To return a string containing the font descriptor that the Freetype libraries derive from the selected font’s pattern, refer to the X11FreeTypeFont : selectedFont method.

namedX11Color (String colorName)

Sets the selected font’s red, green, and blue values from the X11 color name given as the argument.

Note: For a list of the colors that the X Window System recognizes, consult the file rgb.txt, which is often stored with the server’s configuration files when the GUI is installed.

notifyLevel (Integer level)

Set the Xft libraries’ notification level to level. Ctalk defines the following constants in /ctalk/ctalkdefs.h.


XFT_NOTIFY_NONE
XFT_NOTIFY_ERRORS
XFT_NOTIFY_LOAD
XFT_NOTIFY_VERBOSE

These definitions produce the following information and warning messages.

XFT_NOTIFY_NONE

The font libraries produce no output when the program is run.

XFT_NOTIFY_ERRORS

The font libraries display a warning if the library’s selected font does not match the user or appication defined font specification.

XFT_NOTIFY_LOAD

The font library displays a message containing information about the requested font, and a brief font descriptor that contains the attributes that the Ctalk libraries use to select fonts: family, point size, slant, and weight.

XFT_NOTIFY_VERBOSE

The font library displays a message that contains information about the requested font, and the complete font descriptor that the font libraries derive from the selected font’s patterm.

Note: programs should call this method before launching any processes. Generally this is before the X11Pane : openInputStream method. Otherwise, the program only displays font loads for the process it was called from.

qualifyName (String xftpattern)

Returns a fully qualified String containing a fully qualified Xft font descriptor that matches xftpattern.

quiet (void)

Sets the font libraries’ reporting level to XFT_NOTIFY_NONE. For a description of the libraries’ notification levels, refer to the notifyLevel method.

red (Integer value)

Set the current Xft font’s foreground red channel. The argument value must be an unsigned short int; i.e., in the range 0 - 65535 (0xffff hex).

saveSelectedFont (void)

This method does the work of setting the receiver’s instance variables to the values of the selected font.

selectedFont (void)

Returns the String with the descriptor of the selected font. Because a complete font descriptor contains a lot of information, this method can generate a lot of output.

RGBAColor (void)
RGBAColor (int red, int green, int blue, int alpha)

If given with no arguments, sets the current font’s color to the values of the receiver’s ‘ftRed, fgGreen, fgBlue,’ and ‘fgAlpha’ values. If the method is used with arguments, set’s the current font’s color to their values. The values are Integers and can have a range of 0-0xffff.

selectFont (void)
selectFont (String family, Integer slant, Integer weight, Integer dpi, Float pointSize)

If used without arguments, selects the font named by the receiver’s instance variables. If the statement provides arguments, only the family argument needs to describe an actual font family; that is, it has no default value. Defaults for the other arguments are described below. In this case, the method sets the receiver’s instance variables to the selected font.

For the slant and weight arguments, the Xft library defines the constants and their meanings as the following.

      SLANT
 0    Roman
 100  Italic
 110  Oblique

      WEIGHT
 0    Light
 100  Medium
 180  Demibold
 200  Bold
 210  Black

The dpi parameter should be set to the resolution of the display.

An easier way to describe a font may be to use the selectFontFromFontConfig method, which takes a FontConfig format font specification as its argument. See selectFontFromFontConfig.

Refer to the X11FreeTypeFont : notifyLevel method for a description of information and error message levels. To return a string containing the font descriptor that the Freetype libraries derive from the selected font’s pattern, refer to the X11FreeTypeFont : selectedFont method.

selectFontFromXLFD (String xlfd)

Similar to selectFont, above, except that its argument is a string in XLFD format. That is, the method translates the XLFD argument into the Xft library’s font metrics. This makes possible font descriptions like the following.


-*-DejaVu Sans-medium-r-*-*-12-72-72-*-*-*-*-*

As with all of the selectFont* methods, refer to the X11FreeTypeFont : notifyLevel method for a description of information and error message levels. To return a string containing the font descriptor that the Freetype libraries derive from the selected font’s pattern, refer to the X11FreeTypeFont : selectedFont method.

selectFontFromFontConfig (String font_config_string)

Selects a font using the FontConfig specification given as its argument.

Refer to the beginning of the X11FreeTypeFont section for a description of Fontconfig descriptors.

Again, as with all of the selectFont* methods, refer to the X11FreeTypeFont : notifyLevel method for a description of information and error message levels. To return a string containing the font descriptor that the Freetype libraries derive from the selected font’s pattern, refer to the X11FreeTypeFont : selectedFont method.

textHeight (String text)

Return an Integer with the height in pixels of text in the currently selected FreeType font. If the Xft library is not available or not initialized, the method returns 0.

textRBearing (String text)

Return an Integer with the right bearing (the distance between the rightmost segment of a character glyph and the right edge of its character box) in pixels of text in the currently selected FreeType font. If the Xft library is not available or not initialized, or the application has not selected a font, the method returns 0.

textWidth (String text)

Return an Integer with the width in pixels of text in the currently selected FreeType font. If the Xft library is not available or not initialized, the method returns 0.

textHeight (Symbol displayPtr, Integer drawable, Integer GCPtr, String str)
textWidth (Symbol displayPtr, Integer drawable, Integer GCPtr, String str)

These methods return the width and height of str in the currently selected font. Unlike the textWidth and textHeight methods, which work within the client app’s process space, these methods direct the server process to perform the measurements.

verbose

Causes the Ctalk libraries to output verbose information about font selection and loading, like the complete font descriptor that the Freetype libraries derive from the currently selected font’s pattern. Refer to the X11FreeTypeFont : notifyLevel method for more information about this class’ notification levels..

verbosity (void)

Returns an Integer with the Xft libraries’ reporting level. The possible values, which are defined in ctalk/ctalkders.h, are:


XFT_NOTIFY_NONE
XFT_NOTIFY_ERRORS
XFT_NOTIFY_LOAD
XFT_NOTIFY_VERBOSE


Next: , Previous: , Up: Classes   [Index]

X11Bitmap

X11Bitmap Class

A X11Bitmap object is similar to a Bitmap object - it contains the address of a bitmap in memory. In addition, a X11Bitmap object has its own X11 graphics context for graphics operations.

Instance Variables

backgroundColor

A String that contains the name of a X color. Setting this variable does not affect the color of a displayed bitmap - programs should call the X11Bitmap : background method, which also sets this variable.

depth

An Integer that contains the depth of the bitmap.

displayPtr

A Symbol that contains the address of the connection to the X server that was returned by a call to XOpenDisplay. This is generally the address of the main window pane’s displayPtr instance variable, and in this class, it is expressly set in the create method.

height

An Integer that contains the height of the bitmap.

modal

A Boolean that helps determine how Ctalk draws graphics on the X11Bitmap. True for X11Bitmap objects that are displayed in popup windows, false otherwise.

parentDrawable

An Integer that contains the window ID of the bitmap’s parent drawable. Normally this is set by the create method, below.

width

An Integer that contains the width of the bitmap.

xGC

A Symbol object that contains the address of the X11 graphics context.

xID

The X resource ID of the Pixmap associated with this object.

Instance Methods

background (String color)

Set the background color of the receiver to color. Note: When changing foreground and background color, make sure that an application has is receiving and processing events, using the openEventStream method in class X11Pane.

Clear the receiver to the background color.

clearRectangle (Integer x, Integer y, Integer width, Integer height)

Clear the specified area to the background color.

Copies the contents of srcBitmap to the receiver’s drawing surface. The source dimensions are determined by srcX, srcY, srcWidth, and srcHeight. The method draws the source bitmap’s contents with the source’s upper left-hand corner at destX, destY.

initialize (void *displayPtr, int parentWindow, int width, int height, int depth)

Create a X11Bitmap object and its graphics data.

delete (void)

Delete a pixmap and its graphics data.

drawCircle (Circle aCircle, Integer filled, String bgColor)
drawCircle (Circle aCircle, Pen aPen, Integer filled, String bgColor)

Draw the circle defined by aCircle in the receiver’s paneBuffer. If filled is true, draws a filled circle. If the aPen argument is given, draws the circle with the color and the line width defined by the aPen, and fills the interior of the circle with bgColor.

drawFilledRectangle (Rectangle aRect, Pen aPen)

Draw a filled rectangle with the dimensions given in aRect, using the color given by aPen. For other variations on this method refer to drawRectangle.

drawLine (Integer xStart, Integer yStart, Integer xEnd, Integer yEnd, Pen aPen)
drawLine (Line aLine, Pen aPen)

Draw a point on the receiver’s drawing surface between the points xStart,yStart and xEnd,yEnd using the color, width, and transparency defined by the argument aPen. See Pen.

If a program uses the two-argument form of the method, aLine is a member of class Line. See Line.

drawPoint (Integer x, Integer y, Pen aPen)

Draw a point on the receiver’s drawing surface at x,y using the color, width, and transparency defined by the argument aPen. See Pen.

drawFilledRectangle (Rectangle aRect, Pen aPen)
drawFilledRectangle (Rectangle aRect, Pen aPen,

Integer fill, Integer corner_radius)

drawFilledRectangle (Integer xOrg, Integer yOrg, Integer xSize, Integer ySize, Ineter fill,

Integer line_width, String color, Integer corner_radius) Draw a rectangle on the receiver bitmap. The fill argument, if given, draws a filled rectangle if the argument is true. If fill is false, use the pen_width argument to determine the line width. If radius is non-zero, draw the rectangle with rounded corners with the radius in pixels given by the argument.

entryIcon (int iconID)
entryIconEye (void)
entryIconEyeSlashed (void)

Draws an eye or slashed eye icon on the receiver bitmap. The bitmap should already be created with a call to the X11Bitmap : create method, and should have the dimensions ‘ENTRY_ICON_WIDTH_PX’ by ‘ENTRY_ICON_HEIGHT_PX’. These values are defined in ctalkdefs.h, which can be included in programs and classes with the line:


#include <ctalk/ctalkdefs.h>

In the case of the entryIcon method, the iconID argument should have one of the following values.


ENTRY_ICON_EYE_NONE
ENTRY_ICON_EYE_OK
ENTRY_ICON_EYE_SLASHED

These constants are also defined in ctalkdefs.h.

faceRegular (void)
faceBold (void)
faceItalic (void)
faceBoldItalic (void)

Selects the typeface of the currently selected font. The font should have been selected by a previous call to font, below, which loads the regular, bold, italic (or oblique), and bold italic flavors of the selected font if they are available.

font (String font_desc)

Set the font of the receiver.

foreground (String color)

Set the foreground color of the receiver. Note: When changing foreground and background color, make sure that an application has is receiving and processing events, using the openEventStream method in class X11Pane.

icon (int iconID)
iconStop (void)
iconCaution (void)
iconInfo (void)

These methods draw a 64x64 dialog icon on the receiver’s drawing surface. In the case of the icon method, the iconID argument can be one of the following.


ICON_NONE
ICON_STOP
ICON_CAUTION
ICON_INFO

Before calling any of these methods, a program must have created the pane’s drawing surface with the create method. It is also generally necessary to set the pane’s background color to that of the surrounding window. Here is an example.


myIcon create aPane displayPtr, aPane paneBuffer xID,
  ICON_WIDTH_PX, ICON_HEIGHT_PX, pPane paneBuffer depth;
myIcon background "blue";

Because icons are generally rendered off-screen, the program should use the parent pane’s display connection, paneBuffer xID, and depth. Then the program can use the X11Bitmap : copy method to draw the bitmap on the surround pane’s buffer. Here’s another example.

aPane paneBuffer copy myIcon, 0, 0, ICON_WIDTH_PX, ICON_HEIGHT_PX,
      iconLeftOrigin, iconTopOrigin;

The constants ICON_WIDTH_PX and ICON_HEIGHT_PX are defined in ctalkdefs.h, so programs and classes that use icons should add this line near the top of the source module.


#include <ctalk/ctalkdefs.h>

putStr (Integer x, Integer y, String text)
putStr (Integer x, Integer y, String text, String font_desc)
putStr (Integer x, Integer y, String text, String font_desc, String colorName)

Print text on the receiver’s drawable X resource, at x,y.

If font_desc, (which is either a X Logical Font Descriptor if using X bitmap fonts or a Fontconfig descriptor if using Freetype fonts), is given, use that font to display the text.

For information about Fontconfig descriptors, refer to the X11FreeTypeFont section See X11FreeTypeFont. For information about X Logical Font Descriptors, refer to the X11Font section See X11Font.

If colorName is also given, render the text using that color.

pixmapFromData (int x_org, int y_org, char *xpm_data[])

Draw the X pixmap defined by xpm_data with the upper left corner at x_org,y_org on the receiver’s pane buffer.

The xpm_data argument is the name of the array declared at the start of a xpm file’s data array.

In Ctalk’s standard libraries, the image will appear on a X11CanvasPane object, and programs can use the pixmapFromData method in X11CanvasPane instead of calling this method directly. See X11CanvasPane_pixmapFromData.

resize (Integer parentVisual, Integer new_width, Integer new_height)

Resize the receiver Pixmap. This method is normally called by an event handler in a parent class (typically, that’s a X11CanvasPane). If you need to resize a graphics pane’s buffers, then the program should also call subPaneNotify (class X11Pane), which invokes the handler for a RESIZENOTIFY event.

Here is the X11CanvasPane classes’ RESIZENOTIFY event handler.


X11CanvasPane instanceMethod subPaneResize (Object __subPane, 
					  InputEvent __event) {
  "Resize the receiver pane.  This is the resize event
  handler called by the parent window's pane
  dispatcher."

  if (__ctalkX11ResizeWindow (__subPane, __event xEventData3,
			      __event xEventData4,
			      __subPane depth) > 0) {
    /* refreshReframe uses viewWidth and viewHeight, refresh uses size x
       and size y */
    __subPane viewWidth = __event xEventData3;
    __subPane viewHeight = __event xEventData4;
    __subPane size x = __event xEventData3;
    __subPane size y = __event xEventData4;
    (X11Bitmap *)self paneBuffer resize self xWindowID,
      __event xEventData3, __event xEventData4;
    (X11Bitmap *)self paneBackingStore resize self xWindowID,
      __event xEventData3, __event xEventData4;
  }

  return NULL;
}

For an example of how a program can handle RESIZENOTIFY events, refer to the examples in the X11CanvasPane section. See X11CanvasPane.

xpmInfoFromData (char **xpm_data, Array dataReturn)

Fills in the Array dataReturn with the information from the X pixmap data referred to by xpm_data: [width, height, colors, characters_per_color];

xpmCharsPerColorFromData (char **xpm_data)

Returns an Integer with the number characters per color in the X pixmap referred to by xpm_data.

xpmColorsFromData (char **xpm_data)

Returns an Integer with the number of colors in the X pixmap referred to by xpm_data.

xpmHeightFromData (char **xpm_data)

Returns an Integer with the height of the X pixmap referred to by xpm_data.

xpmWidthFromData (char **xpm_data)

Returns an Integer with the width of the X pixmap referred to by xpm_data.


Next: , Previous: , Up: Classes   [Index]

Boolean

Boolean Class

Boolean class objects are used mainly as the return values of methods of various classes that test equality, like <, >, ==, !=, &&, and ||.

An expression can treat Boolean methods differently than methods that perform numerical calculations, which usually return objects of Magnitude class and its subclasses.

Methods can return one of the Boolean class variables, boolTrue or boolFalse. In addition, methods can also define their own Boolean objects to return. The API function __ctalkRegisterBoolReturn () does this automatically when it encounters a return statement in a method that has declared a Boolean return value.

Class Variables

boolFalse
boolTrue

Objects that represent the logical values true and false. The objects can be used as return values in methods that return boolean values and in API functions like __ctalkRegisterBoolReturn (). See ctalkRegisterBoolReturn.

Instance Methods

!= (Integer i)

Return a Boolean value of ‘True’ if the values of the receiver and the argument are different, ‘False’ otherwise.

&& (Boolean b)

Returns a Boolean value of ‘True’ if both the receiver and the method’s operand evaluate to true.

= (Integer i)

Sets the value of the receiver to True or False. The method uses the Ctalk library to perform the numeric conversion of the argument to a C int, then casts the result to True or False.

== (Integer i)

Return a Boolean value of ‘True’ if the values of the receiver and the argument are the same, ‘False’ otherwise.

|| (Boolean b)

Returns a Boolean value of ‘True’ if either the receiver or the method’s operand evaluate to true.


Next: , Previous: , Up: Classes   [Index]

Collection

Collection Class

The Collection class is the superclass of all objects that contain groups of objects.

Internally, a Collection is made up of a series of Key objects. See Key. The only function of Key has is to maintain a reference to one of the collection’s items. The Key objects have no other references, while the contents that they refer to may be used elsewhere.

But programs can also refer to Key objects individually. Most of the math operators that are overloaded to work with Collections actually work on Key objects.

If you write a method that adds objects to collections, it’s important to add the attribute OBJECT_IS_MEMBER_OF_PARENT_COLLECTION to each Key object, which tells Ctalk that the Key object can be referred to individually, and not just by its parent object. See Attributes.

Instance Methods

* (void)

When used as a unary operator to overload C’s dereference (‘*’) prefix operator, returns the first element of the array or Collection. This method is actually a shortcut for the method head, below.

+ (Integer n)

Returns the nth member of the receiver Collection. This method is actually a shortcut for the following expressions.


Collection new myCollection;

.....  /* Add members to the collection. */

if (*(myCollection + 1)) {
...
}

Collection instanceMethod + nth (Integer new n) {
  Key new k;

  k = *self;
  k += n;
  return k;
}

at (char *keyString)

Retrieve the element of the receiver Collection at keyString.

atPut (char * keyString, OBJECT *elemObject)

Add elemObject to the receiver with the key keyString.

delete (void)

Remove all of the items in the receiver collection, leaving an empty collection. If any of the items are temporary (for example, a C variable alias), delete the item also.

getValue (void)

Return the value of the receiver, a Key object.

integerAt (String keyName)

Returns the value for keyString as an Integer. The method does not do any checking to make sure that the value is a valid Integer object; the program should ensure that the collection element is either an Integer object or is validly translatable to an Integer.

isEmtpy (void)

Return TRUE if the receiver collection is emtpy, FALSE otherwise.

head (void)

Return the first Key in the receiver collection, or NULL if the collection is empty.

keyExists (String keyName)

Return an Integer value of True if the key given as the argument is present in the receiver collection, False otherwise.

map (OBJECT *(*method)())

Execute method, an instance method of class AssociativeArray, for each key/value pair of the receiver array. The receiver of method is a Key object with the parent class of AssociativeArray. The return value of mapKeys is NULL.

removeAt (String key_name)

Remove the object stored at key_name from the receiver collection and return it. Returns NULL if the entry isn’t present in the receiver collection. In that case, the method does not create a new entry, so programs should then call the atPut method.

replaceAt (String key_name, Object new_value)

Replace the value at key_name in the receiver collection. Returns the old value object, or NULL if the key doesn’t exist. In that case, the method does not create a new entry, so in that case it’s necessary to add the key/value entry to the receiver collection using atPut.

size (void)

Return an Integer with the number of items in the receiver collection.

tail (void)

Return the last Key object that was added to the receiver collection.


Next: , Previous: , Up: Classes   [Index]

Array

Array Class

The Array class contains objects ordered by index from 0... n.

Instances of Array objects store unique copies of objects, so they can be added and deleted without worrying too much if an Array member is referred to by another object (unless the program later refers to the Array member; i.e., after it’s been stored with a method like atPut).

So most statements on Array members are safe, but you should be careful when using multiple Array operations in the same expression. For example, the following expression is not safe.


  myArray atPut 0, ((myArray at 0) - 3);

That’s because the atPut method replaces the element at 0 while the original element is still being used as an argument. It’s safer to use another object to work on an Array element.


  tmpInt = ((myArray at 0) - 3);
  myArray atPut 0, tmpInt;

Instance Variables

value

The value is the name of the array.

0... n

These instance variables refer to the elements of the array.

Instance Methods

= (Array a)

Set the receiver array’s elements equal to the argument array’s elements.

asString (void)

Returns the contents of the receiver Array as a String object. If any member of the receiver is a Character object, unquotes the Character object’s value and concatenates the character to the result string. Otherwise the method concatenates each of the receiver Array’s values into the result string.

at (int n)

Retrieve the nth element of the receiver array.

atPut (int index, OBJECT *item)

Add item to the receiver at index.

map (method)

Executes method with each element of the receiver.

The argument, method, is a method that should belong to the same class as the receiver. When method is executed, its receiver is each successive array element, and method can refer to it with self.

size (void)

Return the number of elements in the receiver.


Next: , Previous: , Up: Classes   [Index]

List

List Class

Objects of class List allow sets of objects to be sequentially added, removed, and used as method receivers.

Instance Methods

+= (Object obj1, ...)

Add the items given in the argument to the receiver List. For example:

int main () {
  List new l;

  l = "first", "second", "third", "fourth";
  l += "fifth", "sixth", "seventh", "eighth";

  l map {
    printf ("%s\n", self);
v  }
}
= (Object obj1, ...)

Push the arguments on to the receiver List. The arguments are a comma separated list of objects. For example:

int main () {
  List new l;

  l = "first", "second", "third", "fourth";

  l map {
    printf ("%s\n", self);
  }
}

The = method initializes a list with only the objects that are given as arguments. The memthod deletes any previous list contents.

append (Object obj1, ...)

Add the objects given in the argument to the receiver List. This is a synonym for the += method, above.

init (Object obj1, ...)

This is a synonym for the = method, above.

map (OBJECT *(*method)())
map (OBJECT *(*method)(), Object argument)
map (OBJECT *(*method)(), Object argument1, Object argument2)

Execute method, an instance method of class List, for each member of the receiver List. Within method, self refers to each successive list element. Here is an example.


List instanceMethod printElement (void) {
  printf ("%s\n", self);  /* Here, for each call to the printElement
                             method, "self" is each of myList's
                             successive members, which are String
                             objects. */
}

int main () {

  List new myList;

  myList = "item1", "item2", "item3";  /* Initialize the List with
                                          three String objects. */
  myList map printElement;

}

The map method can also use a code block as its argument. The example above, written with a code block, would look like this.


int main () {

  List new myList;

  myList = "item1", "item2", "item3";  /* Initialize the List with
                                          three String objects. */
  myList map {
    printf ("%s\n", self);
  }

}

If given with two arguments, method’s parameter list must have one parameter. The parameter’s class is significant within method; that is, map can use any class of object for argument. Here is the example above with one argument for the printElement method;


List instanceMethod printElement (String leftMargin) {
  printf ("%s%s\n", leftMargin, self);

}

int main () {

  List new myList;
  String new leftMargin;

  myList = "item1", "item2", "item3";  /* Initialize the List with
                                          three String objects. */
  leftMargin = "- ";

  myList map printElement, leftMargin;

}

Calling map with three arguments works similarly. The map methods in List class all return NULL.

mapRev (OBJECT *(*method)())

Like map, except that it executes method for the last member that was added to the receiver List, then the previous member, and so on until the mapRev executes method for the first member of the list before returning.

new (list1, list2, list3, ...;)

Create the List objects list1, etc. For example:


List new list1, list2, list3;

pop (void)

Remove the object from the end of the receiver’s list and return the object.

popItemRef (void)

Here for backward compatibility; it is now the same as pop.

push (OBJECT *(*object)(int))

Add object to the end of the receiver’s list contents.

pushItemRef (OBJECT *(*object)(int))

Also here for backward compatibility, this method is now the same as push.

shift (OBJECT *(*object)(int))

Add object as the first element of the receiver’s list contents.

sortAscending (void)
sortDescending (void)
sortAscendingByName (void)
sortDescendingByName (void)

Sorts the receiver list based on either the members’ values or names, in ascending or descending order. The sort algorithm is very simple minded, but due to the mechanics of determining earlier/later List members, the methods are as fast for small and medium Lists as more complex sort algorithms.

If possible, you should try to add members in order rather than try to re-arrange a List later. For this, refer to the methods in SortedList class See SortedList.

unshift (void)

Remove the first object from the receiver’s list and return the object.

value (void)

Class List objects have no value instance variable. Instead, return the List object’s contents, or NULL if the list is empty.


Next: , Previous: , Up: Classes   [Index]

AssociativeArray

AssociativeArray Class

Objects of class AssociativeArray contain members that are stored and retrieved using Key objects. See Key.

AssociativeArray objects use the atPut and at methods in Collection class to store and retrieve objects. See Collection.

The keyAt method returns the key/value pair of the array element named as its argument.

The map method maps over each object stored in an AssociativeArray, and provides that element as the receiver to the method or code block given as the argument.

If you want to work with the object stored in the array and the key it is stored with, the mapKeys method iterates over each key/value pair of the AssociativeArray

The following example shows how to retreive the keys and values stored in an AssociativeArray. Each value that is stored in the array is a String object, so the program does not need to check for different classes of objects that are stored in the array.


AssociativeArray instanceMethod printValue (void) {

  printf ("%s\t", self name);
  printf ("%s\n", self value);
  return NULL;
}

AssociativeArray instanceMethod printKeyValue (void) {

  String new valueObject;
  printf ("%s =>\t", self name);
  valueObject = self getValue;
  printf ("%s\n", valueObject);
  return NULL;
}

int main () {
  AssociativeArray new assocArray;
  String new s1;
  String new s2;
  String new s3;

  WriteFileStream classInit;
  
  s1 = "string1 value";
  s2 = "string2 value";
  s3 = "string3 value";

  assocArray atPut "string1", s1;
  assocArray atPut "string2", s2;
  assocArray atPut "string3", s3;

  stdoutStream printOn ("%s\n%s\n%s\n\n", (assocArray at "string1"),
			(assocArray at "string2"),
			(assocArray at "string3"));
  stdoutStream printOn "%s\n%s\n%s\n\n", (assocArray at "string1"),
    (assocArray at "string2"),
    (assocArray at "string3");
  stdoutStream printOn "%s\n%s\n%s\n\n", assocArray at "string1",
    assocArray at "string2",
    assocArray at "string3";

  assocArray map printValue;

  assocArray mapKeys printKeyValue;

  return 0;
}

Instance Methods

at (char *key)

Retrieve the element of the receiver array stored at key.

init (...)
= (...)

Append the arguments to the receiver AssociativeArray. The argument list may be any number of key,value pairs. Here is an example.


myAssocArray init "key1", "first", "key2", "second", "key3", "third", 
  "key4", "fourth";
myAssocArray append "key5", "fifth", "key6", "sixth", "key7", "seventh", 
  "key8", "eigth";

... or ... 

myAssocArray = "key1", "first", "key2", "second", "key3", "third", 
  "key4", "fourth";
myAssocArray += "key5", "fifth", "key6", "sixth", "key7", "seventh", 
  "key8", "eigth";

atPut (char *key, OBJECT *item)

Add item to the receiver at key.

init (...)
= (...)

Initializes the receiver AssociativeArray to the values given as the arguments, which may be composed of any number of key,value pairs. Here is an example.


myAssocArray init "key1", "value1", key2", "value2", "key3", "value3";

... or ... 

myAssocArray = "key1", "value1", key2", "value2", "key3", "value3";

keyAt (String keyName)

Returns the Key object named by keyName.

map (OBJECT *(*method)())

Execute method, an instance method of class AssociativeArray, for each member of the receiver array. Each time method is executed, self refers to the object stored in the associativeArray. This method returns NULL.

setValue (void)

A wrapper method for getValue in class Key. If received by an instance of Collection or its subclasses instead of a Key object, this method generates an exception.


Next: , Previous: , Up: Classes   [Index]

SortedList

SortedList Class

Instance Methods

+= (Object obj1, ...)

Add the items given in the argument to the receiver list. For example:

int main () {
  SortedList new l;

  l = "first", "second", "third", "fourth";
  l += "fifth", "sixth", "seventh", "eighth";

  l map {
    printf ("%s\n", self);
  }
}
= (Object obj1, ...)

Push the arguments on to the receiver list. The arguments are a comma separated list of objects. For example:

int main () {
  SortedList new l;

  l = "first", "second", "third", "fourth";

  l map {
    printf ("%s\n", self);
  }
}

The = method initializes a list with only the objects that are given as arguments. The memthod deletes any previous list contents.

append (Object obj1, ...)

Add the objects given in the argument to the receiver list. This is a synonym for the += method, above.

init (Object obj1, ...)

This is a synonym for the = method, above.

pushAscending (Object new_item)
pushDescending (Object new_item)

Adds new_item to the receiver list at the point where its value maintains the receiver list items’ ascending or descending sort order.


Next: , Previous: , Up: Classes   [Index]

Stream

Stream Class

Stream class is the superclass of classes that provide sequential read and write access to objects and I/O devices.

The subclasses of Stream class are listed here. This manual describes each class in its own section.


  Stream
   FileStream
    DirectoryStream
    ReadFileStream
    WriteFileStream
   TerminalStream
    ANSITerminalStream
    Win32TerminalStream
    X11TerminalStream
   NetworkStream
    UNIXNetworkStream
     UNIXNetworkStreamReader
     UNIXNetworkStreamWriter
    TCPIPV6NetworkStream
     TCPIPV6NetworkStreamReader
     TCPIPV6NetworkStreamWriter
    TCPIPNetworkStream
     TCPIPNetworkStreamReader
     TCPIPNetworkStreamWriter


Previous: , Up: Classes   [Index]

FileStream

FileStream Class

FileStream and its subclasses contain methods and variables that read and write to files and other I/O devices.

Instance Variables

streamMode (Class Integer)

File permissions mode.

streamDev (Class Integer)

Device ID of a file.

streamRdev (Class Integer)

Device ID if a special file.

streamSize (Class LongInteger)

File size in bytes.

streamAtime (Class LongInteger)

Time of last file access.

streamMtime (Class LongInteger)

Time of last file modification.

streamCtime (Class LongInteger)

Time of last file status change.

streamPos (Class LongInteger)

Offset of read or write operation in the file, if a regular file.

streamErrno

System error number of the last file operation, EOF at the end of the file, or 0 on success.

streamPath

A String object, containing the path name of a regular file.

Class Variables

None.

Instance Methods

= (arg)

Assign the value of the file stream in the argument to the receiver. This method does not duplicate the file handle.

closeStream (void)

Close the receiver’s input file stream. Note that closeStream does not delete the receiver object. You must call delete (Class Object) to delete the object explicitly. Deleting global and local objects is still not complete - you must check the receiver and argument stacks, and the local variables of the function or method, to make sure that the object is removed from its dictionary.

deleteFile (String file_path)

Deletes the file given as the argument. If the deletion is not successful, the method raises a SystemErrnoException which an application can check for.

exists (char *__path_name)

Return TRUE if the file exists, FALSE otherwise.

isDir (void)

Return an Integer object that evaluates to TRUE if the receiver is a directory, FALSE otherwise.

renameFile (String oldname, String newname)

Renames the file named by oldname to newname. Raises a SystemErrnoException if renaming the file causes an error.

seekTo (Integer file_pos)

Reposition the file’s reading and writing position indicator at file_pos. If the request is unsuccessful, the method raises a SystemErrnoException that a program can check for.

seekToBeginning (void)

Reposition the file’s reading and writing position indicator at the beginning of a file. If the request is unsuccessful, the method raises a SystemErrnoException that a program can check for.

seekToEnd (void)

Reposition the file’s reading and writing position indicator at the end of a file. If unsuccessful, the method raises a SystemErrnoException that programs can check for.

size (void)

Returns the size of the receiver’s file as a LongInteger.

statFile (String file_path)

A wrapper method for the C stat(2) function. This method fills in the receiver stream’s streamMode, streamDev, StreamRdev, streamSize, streamAtime, streamMtime, and streamCtime instance variables. The stream does not need to be opened on the file given by file_path.

The method returns an Integer with a value of ‘0’ on success, or if an error occurs, returns ‘-1’ and raises a SystemErrnoException.

statStream (void)

Another wrapper method for the C stat(2) function. The method fills in the streamMode, streamDev, StreamRdev, streamSize, streamAtime, streamMtime, and streamCtime instance variables of the receiver, an open file stream.

The method returns an Integer with a value of ‘0’ on success, or if an error occurs, returns ‘-1’ and raises a SystemErrnoException.

streamEof (void)

Returns a non-zero Integer object if at the end of the receiver’s file stream, a zero-value Integer otherwise.

Class Methods

None.


Next: , Up: Classes   [Index]

DirectoryStream

DirectoryStream Class

The DirectoryStream class contains methods for creating and deleting directories, and for reading files in directories.

On machines which have library support for file globbing, DirectoryStream provides methods that read directories and files that match patterns which contain metacharacters like ‘*’, ‘?’, and ‘[’. This is in addition to whatever file pattern expansion the shell performs on file patterns provided on the command line. See below for more details.

Metacharacter Expansion.

If a command provides a file specification that contains a metacharacter, often the shell expands the pattern into a list of files that the program receives in the function main's argv array.

If the command line provides a quoted metacharacter as one of the program’s arguments, however, the program can use the DirectoryStream methods globPattern and globCwd to expand the pattern into a list of filenames.


$ myfileprog some_arg *    # The shell expands '*' into a list of files.

$ myfileprog some_arg '*'  # The shell adds a literal '*' to the app's
                           # arguments.

Not all shells provide metacharacter expansion before the program executes main, however, and so the app should check for metacharacters as arguments also. The following example shows one way to do this.


List new fileNames;

String instanceMethod globFile (void) {

  DirectoryStream new d;
  List new globFiles;

  if (d hasMeta self) {  /* The argv entry contains a wildcard character. */
    d globPattern self, globFiles;
    globFiles map {
      fileNames push self;
    }
  } else {             /* The argv entry is an unambiguous file name. */
    fileNames push self;
  }

}

int main (int argc, char *argv[]) {
  
  int i;

  for (i = 1; i < argc; ++i) {
    argv[i] globFile;
  }
  
  fileNames map {
    printf ("%s\n", self);
  }
}

Directory Modes

The default mode for new directories is 0755 (‘drwxr-xr-x’) modified by the user’s UMASK. Programs can change the default directory permissions by redefining the macro CTALK_DIRECTORY_MODE.

Error Handling

The methods chDir, mkDir, and rmDir raise a SystemErrnoException on error and return an Integer with the value -1.

Instance Methods

chDir (char *dir)

Change to the directory dir.

directoryList (char *dirname, List dirlist)

List directory dirname, and store it in the List dirlist. The order of the elements in the list depends on the operating system. To expressly create a sorted directory listing, see the sortedDirectoryList method.

getCwd (void)

Return the current directory as a String object.

globPattern (String file_name_pattern, List matching_file_names)

Adds the file names that match file_name_pattern to matching_file_names. This method uses the machine’s glob library call, if it is available, to do the pattern matching. If the system doesn’t support filename pattern matching in its C library, the method prints a warning message and returns. For more information about how the machine expands file globbing patterns into file names, refer to the glob(3) and glob(7) manual pages.

hasMeta (String file_name_pattern)

Returns a Boolean value of True if file_name_pattern contains one of the opening metacharacters ‘*’, ‘?’, or ‘[’, False otherwise.

mkDir (char *directoryname)

Create the directory directoryname.

rmDir (char *directoryname)

Delete the directory directoryname.

sortedDirectoryList (char *dirname, SortedList dirlist)

List directory dirname, and store it in the SortedList dirlist. The members of the directory listing are stored in ascending order.


Next: , Previous: , Up: Classes   [Index]

ReadFileStream

ReadFileStream Class

The ReadFileStream class contains methods and objects for reading files.

Instance Variables

None

Class Variables

stdinStream

The stdinStream object contains the value of the application’s standard input channel.

Instance Methods

new (stream1, stream2, stream3,...)

Creates one or more new ReadFileStream objects with the names given in the argument list; e.g.,


ReadFileStream new stream1, stream2, stream3;

openOn (String path)

Open file path with mode ‘r’ and set the receiver’s value to the file input stream.

readAll (void)

Returns a String with the contents of the receiver’s file stream.

readChar (void)

Returns a Character from the stream defined by the receiver, or ‘EOF’ at the end of the input.

readFormat (char *fmt, ...)

Read formatted input from the receiver and store in the objects given as arguments.

readLine (void)

Returns a String of characters up to and including the next newline of the stream defined by the receiver, or a String containing ‘EOF’ at the end of the input.

readRec (Integer record_length)

Return a String that contains record_length characters from the receiver’s input stream.

readVec (LongInteger data_length)

Reads data_length bytes from the receiver stream and returns a new Vector object that points to the data. This is useful for reading binary data which may have embedded NULLs and other non-human readable characters. See Vector.

value

Returns the receiver’s value instance variable.

Class Methods

classInit

Called automatically by new when the first ReadFileStream object is created. Initializes stdinStream.


Previous: , Up: Classes   [Index]

WriteFileStream

WriteFileStream Class

Class WriteFileStream provides objects and methods for writing to files, including the application’s stdout and stderr output channels.

Because the way UNIX and Linux file stream modes work, a WriteFileStream opens file non-destructively; that is, for reading and writing, which means that programs can actually perform both reads and writes from a WriteFileStream.

All of the methods for reading files are defined in ReadFileStream class, however. See ReadFileStream. It’s safer to handle existing files when they are opened for reading; i.e., as a ReadFileStream object.

That means openOn won’t truncate an existing file. To start with a new file, use deleteFile (class FileStream). See FileStream.

In that case, and also any time that openOn doesn’t find a file with that path name, it creates the file first.


  writeFile deleteFile "my/file/path";
  writeFile openOn "my/file/path";

To append to an existing file, use seekToEnd (also in FileStream class). See FileStream.


  writeFile openOn "my/file/path";
  writeFile seekToEnd;
  writeFile writeStream appendLine;
  writeFile closeStream;

Instance Variables

None

Class Variables

stdoutStream

The stdoutStream object contains the application’s standard output channel.

stderrStream

The stderrStream object contains the application’s standard error channel.

Instance Methods

new (stream1, stream2, stream3, ...;)

Creates one or more new WriteFileStream objects with the names given in the argument list; e.g.,


WriteFileStream new stream1, stream2, stream3;

openOn (String path_name)

Open file path and set the receiver’s value to the file output stream. The file is created if it does not exist. Raises a systemErrnoException if an error occurs.

printOn (char *fmt, ...)

Format and print the method’s arguments to the receiver, which must be a WriteFileStream object that has been opened with openOn.

value

Returns the receiver’s value instance variable.

writeChar char

Writes char to the receiver’s output file stream.

writeFormat (char *fmt, ...)

Writes its arguments to the receiver using format fmt.

writeStream string

Write string to the receiver’s output file stream.

writeVec (Vector vector_object)

Write the contents of vector_object to the receiver stream. The length of the data written is determined by vector_object’s length instance variable. This allows the method to write binary data that may contain NULLs and other non-human readable characters. See Vector.


Up: Classes   [Index]

TerminalStream

TerminalStream Class

TerminalStream is the superclass of terminal classes that provide terminal and console input and output capabilities.

This class implements the input queue for its subclasses. The queue is a List object whose members are InputEvent objects. See InputEvent.

Instance Variables

inputQueue

A List contains that contains InputEvent objects.

inputQueueMax

The maximum number of InputEvent objects in the inputQueue

nInputEvents;

The actual number of InputEvent objects in the inputQueue

Instance Methods

inputPending (void)

Returns TRUE if a terminal stream has pending input objects.

isATty (void)

Return TRUE if the receiver’s stream is a tty device, FALSE otherwise.

nextInputEvent (void)

Return the next InputEvent object from the stream’s input queue.

queueInput (void)

Turn on queueing of input events.

queueInputEvent (void)

Queue this input event.


Up: Classes   [Index]

ANSITerminalStream

ANSITerminalStream Class

ANSITerminalStream objects and their methods provides basic I/O capabilities for consoles that use standard input and output input, as well as serial terminals.

ANSITerminalStream also provides basic input translation and output formatting for ANSI, VT100, XTerm, and similar terminal types.

ANSITerminalStream does not provide curses-like screen buffering methods. The class’s output methods output characters correctly whether the terminal is in canonical or raw mode.

If a program sets the terminal to raw mode (either with the rawMode or getCh methods), it should also output characters with printOn, and restore the terminal before exiting, as this example illustrates.

int main () {
  ANSITerminalStream new term;
  Character new c;

  term rawMode;
  term clear;
  term gotoXY 1, 1;

  while ((c = term getCh) != EOF)
    term printOn "%c", c;

  term restoreTerm;
}

If a program needs to handle cursor and other non-alphanumeric keys, then it must open the TerminalStream input queue (with the openInputQueue method) and read input events. See TerminalStream.

At present, Ctalk recognizes the following input event classes.

KBDCHAR        # ASCII Characters
KBDCUR         # Cursor Keys.  

When reading an InputEvent (with nextInputEvent in TerminalStream class), the event class is stored in the eventClass instance variable of the InputEvent object.

Here is an example of a program that opens a terminal input queue and reads characters by retrieving input event objects from the queue.

int main () {
  ANSITerminalStream new term;
  Character new c;
  InputEvent new iEvent;

  term rawMode;
  term clear;
  term cursorPos 1, 1;
  term openInputQueue;

  while ((c = term getCh) != EOF) {
    iEvent become (term nextInputEvent);
    if (iEvent eventClass == KBDCHAR) {
      term printOn "<KEY>%c", iEvent eventData;
    }
    if (iEvent eventClass == KBDCUR) {
      term printOn "<CURSOR>%c", iEvent eventData;
    }
  }
}

Because ANSITerminalStream objects wait until the user has typed a key, programs can read input events synchronously, but programs that use other input stream classes may read the input queue asynchronously.

Newly created ANSITerminalStream objects use standard input and standard output as their file streams. Programs that read and write to serial terminals can open the terminal’s serial line with openOn, and set the communication parameters with setTty, as in this example.

int main () {
  ANSITerminalStream new term;
  SystemErrnoException new s;

  term openOn "/dev/ttyS1";
  if (s pending)
    s handle;

  term setTty 9600, 8, N, 1;
  term printOn "Hello, world!\r\nHello, world!\r\n";
  term closeStream;
}

However, programs also need to take note of the differences between xterms, console displays, and serial terminals. For example, some serial terminals won’t send an ‘ESC’ (0x1b hex) character until another character is typed at the terminal to flush the terminal’s output. Also, programs should not depend on a particular terminal’s newline translation protocol, and some terminals echo tab characters without special configuration. Some terminal parameters are tunable in the ANSITerminalStrea class, but if a program needs special character handling, you may need to write a subclass of ANSITerminalStream for a particular terminal.

Instance Variables

inputHandle

A ReadFileStream object that contains the terminal’s input stream. The handle is initialized to standard input when the ANSITerminalStream object is created. Also refer to the information for outputHandle, below.

outputHandle

A WriteFileStream object that contains the terminal’s output stream. The handle is initialized to standard output when the ANSITerminalStream object is created. Programs can use the methods openOn and setTty (below), to open and configure handles for serial terminals.

In practice, objects that are instances of ANSITerminalPane and its subclasses use the inputHandle stream for both input and output with serial terminals, but programs can configure ouputHandle independenly if necessary.

queueInput

True if queueing input events.

rawModeFlag

True if the terminal stream parameters are set to raw mode.

termioCIFlag
termioCOFlag
termioCLFlag
termioCCFlag

Terminal settings. These variables are set with the current terminal parameters when creating an ANSITerminalStream object with new, and restored by the restoreTerm method.

ttyDevice

A String containing the path terminal’s device file, if different than stdinStream and stdoutStream. This variable is currently unused.

Instance Methods

clear (void)

Clear the terminal stream.

closeStream (void)

Close a terminal stream that was previously opened with openOn, below.

cursorPos (int row, int column)

Set the cursor position to row, column. The upper left-hand corner of screen is 1,1.

getCh (void)

Get a character from the terminal without echoing it. This method handles C-c, C-d, and C-z control characters by exiting. This method calls rawMode, so the application must call restoreTerm before exiting.

gotoXY (int row, int column)

Set the cursor position to row, column. The upper left-hand corner of screen is 1,1. This method is a synonym for cursorPos, above.

new (stream1, stream2, ... streamN; )

Create one or more new ANSITerminalStream objects and initialize their input and output handles to stdinStream. See ReadFileStream, and stdoutStream. See WriteFileStream. For example,


ANSITerminalStream new stream1, stream2;

openInputQueue (void)

Begin queueing input events. See InputEvent.

openOn (char *tty_device_name)

Open a tty device for the receiver.

printOn (char *fmt, ...)

Print the formatted output to the receiver’s output stream.

rawMode (void)

Set the terminal input and output streams to raw mode.

readChar (void)

Read a character from the receiver’s input stream.

readLine (void)

Read a line of text from the receiver’s input stream and return a String object with the text.

restoreTerm (void)

Restore the terminal parameters to the values when the ANSITerminalStream object was created. Applications must call this method after using the getCh and rawMode methods, or the terminal may be unusable after the the application exits.

setGraphics (char attribute)

Set the graphics attribute for the following characters. The attribute argument can be one of the following characters.

0       Attributes Off
1       Bold
4       Underscore
5       Blink
7       Reverse
setTty (int speed, int data_bits, char parity, int stop_bits)

Set the communication parameters of a terminal device opened with openOn, above.


Up: Classes   [Index]

Win32TerminalStream

Win32TerminalStream Class

The Win32TerminalStream class provides keyboard input capabilities for Win32 cmd.exe consoles. It also provides basic output formatting capabilities using DJGPP’s conio.h functions. This class does not provide curses-style output buffering.

This class is not strictly a stream, and is likely to remain limited to displays in the cmd.exe window until Ctalk can implement a genuine fork(3) system call for non-POSIX systems.

Win32TerminalStream simulates raw terminal I/O using BDOS and C library function calls. If the program needs to handle extended keys like cursor and keypad keys, it should open the TerminalStream input queue (with the openInputQueue method) and read input events. See TerminalStream.

At present, Ctalk recognizes the following input event classes. In Win32TerminalStream class, the getCh method generates a KBDCUR input events for all extended keys.

KBDCHAR        # ASCII Characters
KBDCUR         # Extended keys (first character read returns 0).

For examples of how to read characters from the keyboard, see the program listings in the ANSITerminalStream class section of the manual. See ANSITerminalStream.

Instance Variables

queueInput

True if queueing input events. The current state of the keyboard’s modifier keys. Set by the biosKey and getShiftState methods, below.

Instance Methods

Waits for a key and returns the scan code of a BIOS Int 16h, function 0 call. Also sets the shift state in the receiver’s shiftState instance variable. See the getShiftState method, below.

cGetStr (void)

Returns a String object that contains input typed by the user. The input is echoed to the console.

clear (void)

Clears the terminal window and moves the cursor to the upper left-hand corner.

cPutStr (char *str

Prints str to the console at the current cursor position.

cusorPos (int x, inty)

Positions the cursor at character position x, y. The upper left-hand corner of the screen is row 1, column 1. This is a synonym for gotoXY, below.

getCh (void)

Essentially a wrapper for the BDOS character input without echo function. This method handles C-c, C-d, and C-z by exiting the application.

getShiftState (void)

Get the state of the keyboard’s modifier keys with by calling BIOS Int 0x16, function 12h. Stores the result in the receiver’s shiftState instance variable.

gotoXY (int x, inty)

Positions the cursor at character position x, y. The upper left-hand corner of the screen is row 1, column 1.

openInputQueue (void)

Begin queueing input events. See InputEvent.

printOn (char *fmt, ...)

Print the formatted output to the receiver’s output stream.

screenColor (char *fgcolor, char*bgcolor)

Sets the window’s foreground and background colors for following writes using cPutStr, above. The arguments are class String, and may have the following values.

black
blue
green
cyan
red
magenta
brown
lightgray
darkgray
lightblue
lightgreen
lightcyan
lightred
yellow
white

Next: , Up: Classes   [Index]

X11TerminalStream

X11TerminalStream Class

X11TerminalStream objects and methods handle input events from X Window System displays. Ctalk’s X11 support focuses on the windows themselves, so this class should almost always be used with a X11Pane object. See X11Pane.

Here is an example program that uses InputEvent objects created by the window’s input stream, xPane, to configure the dimensions of the pane’s window. The X11TerminalStream object is contained in the X11Pane’s inputStream instance variable.

int main () {

  X11Pane new xPane;
  InputEvent new e;

  xPane initialize 25, 30, 100, 100;
  xPane map;
  xPane raiseWindow;
  xPane openEventStream;

  WriteFileStream classInit;

  while (TRUE) {
    xPane inputStream queueInput;
    if (xPane inputStream eventPending) {
      e become xPane inputStream inputQueue unshift;
      switch (e eventClass value) 
	{
	case CONFIGURENOTIFY:
	  stdoutStream printOn "ConfigureNotify\t%d\t%d\t%d\t%d\n",
	    e xEventData1, 
	    e xEventData2, 
	    e xEventData3, 
	    e xEventData4;
	  stdoutStream printOn "Window\t\t%d\t%d\t%d\t%d\n",
	    xPane origin x, 
	    xPane origin y, 
	    xPane size x,
	    xPane size y;
	  break;
	case WINDELETE:
	  xPane deleteAndClose;
	  exit (0);
	  break;
	default:
	  break;
	}
    }
  }
}

When compiling this program, you might also need to add the directory that contains the X include files to the include search path. For example:

$ ctcc -I /usr/include/X11 windemo.c -o windemo       # Recent Linux

Ctalk’s libraries are linked with the system’s X libraries during installation if they are present, but applications may also need to link with X libraries directly in some cases.

Event Classes

A X11TerminalStream object recognizes the following input event classes, and returns the following information in the xEventData instance variables, which are defined in InputEvent class. See InputEvent.

Event Class     xEventData1 xEventData2 xEventData3 xEventData4 xEventData5 xEventData6
BUTTONPRESS     x           y           state       button      root_x      root_y
BUTTONRELEASE   x           y           state       button      root_x      root_y
KEYPRESS        x           y           state       keycode     x_keycode[1]
KEYRELEASE      x           y           state       keycode     x_keycode[1]
CONFIGURENOTIFY x           y           height      width       border
MOVENOTIFY      x           y           height      width       border
RESIZENOTIFY    x           y           height      width       border
MOTIONNOTIFY    x           y           state       is_hint     -
MAPNOTIFY       event       window      -           -           -
EXPOSE          x           y           width       height      count
SELECTIONREQUEST -          -           -           -           -
SELECTIONCLEAR  -           -           -           -           -
WINDELETE       -           -           -           -           -

[1] The values of X keycodes are defined in X11/keysymdefs.h.

The x and y coordinates of the key and button events are relative to the window’s origin. The x and y coordinates of a CONFIGURENOTIFY event are relative to the origin of the root window, normally the upper left-hand corner of the display.

The MOVENOTIFY and RESIZENOTIFY events are both derived from CONFIGURENOTIFY events, depending on whether the receiver’s window was moved or resized.

Instance Variables

inputPID

The process ID of the X11TerminalStream event handler.

clientFD

The file descriptor that the X11TerminalStream event handler uses when communicating with the main window’s process.

eventMask

An Integer that contains the OR’d values of the window system events that the program wants to be notified of. The window system events are listed in the table above. If eventMask's value is zero, then the event handler assumes that the program wants to receiver all window system events. Any non-zero value, however, causes the program to receive only those events; for example:


myMainWindow inputStream eventMask = WINDELETE|KEYPRESS;

In this case the program only receives notice of key presses (KEYPRESS events) and requests from the GUI desktop to close the window (WINDELETE events) and exit the program.

Instance Methods

openInputClient (void)

Open the X input handler. This method is normally used by X11Pane class’s openEventStream method. See X11Pane.

parentPane (void)

Return the receiver’s X11Pane parent object if present.

queueInput (void)

Queue window system events as InputEvent objects in the receiver’s inputQueue instance variable. The inputQueue instance variable is inherited from TerminalStream class. See TerminalStream.


Next: , Previous: , Up: Classes   [Index]

NetworkStream

NetworkStream Class

NetworkStream is the superclass of objects that use socket connections to send and receive data. The subclasses of NetworkStream provide support for connections between processes within a program, between programs on the same machine or a local network, or between Internet sites.

Each of NetworkStream's subclasses, listed here, has its own section.


  TCPIPNetworkStream
    TCPIPNetworkStreamReader
    TCPIPNetworkStreamWriter
  TCPIPV6NetworkStream
    TCPIPV6NetworkStreamReader
    TCPIPV6NetworkStreamWriter
  UNIXNetworkStream
    UNIXNetworkStreamReader
    UNIXNetworkStreamWriter


Next: , Previous: , Up: Classes   [Index]

TCPIPNetworkStream

TCPIPNetworkStream Class

TCPIPNetworkStream class contains methods for sockets that are used for both writing and reading.

Methods that are specific to programs that read from sockets are defined in TCPIPNetworkStreamReader class, See TCPIPNetworkStreamReader, and methods that work with programs that write to network connections are defined in TCPIPNetworkStreamWriter class See TCPIPNetworkStreamWriter.

Here is a program that writes data to a network connection.


static char *msg = "First connect.\n";

int main (int argc, char **argv) {
  SystemErrnoException new ex;
  TCPIPNetworkStreamWriter new client;

  if (argc != 2) {
    printf ("Usage: ip6writer <server_hostname>\n");
  }
  client openOn argv[1];
  client writeText msg;
  if (ex pending) {
    ex handle;
  }

  client closeSock;
}

And here is the corresponding program that reads the data from the network connection and displays it.


int main () {
  TCPIPNetworkStreamReader new server;
  Exception new ex;
  String new output;
  int newsocket;

  server openOn;

  newsocket = server acceptSock;

  if (newsocket > 0) {
    output = server readText newsocket;
    if (ex pending) {
      ex handle;
    }
    printf ("%s\n", output);
    server closeSock newsocket;
  } else if (ex pending) {
    ex handle;
  } else {
    printf ("Connection timed out.\n");
  }
  
  server closeSock;
}

Instance Variables

sock

An Integer that contains the file handle number of the socket created when a network connection is opened.

Instance Methods

addrInfo (String hostName, String canonicalNameOut, List addrsOut

Performs a lookup of hostName’s IP addresses. If the lookup is successful, returns the host’s canonical name in canonNameOut and each of the host’s addresses as a string in addrsOut. The method’s return value is an Integer with the number of addresses found.

If the lookup causes an error, the method raises an Exception (not a SystemErrnoException) and returns 0.

closeSock (void)
closeSock (Integer sock_fh)

With no arguments, closes the receiver’s socket. With one argument, closes the socket given as the argument. If closing a socket causes an error, the method raises a SystemErrnoException.

createSocketBasic (void)

Creates a socket with the domain AF_INET and the protocol SOCK_STREAM, and sets the receiver’s sock instance variable to the new socket’s file handle number, an Integer, and then returns the socket’s file handle number. If not successful, the method raises a SystemErrnoException and returns 0.

hostToAddress (String hostname)

Given the name of a network host as the argument, the method returns a String containing the host’s dotted quad Internet address.

If the hostname lookup doesn’t return any results, the method raises an Exception (not a SystemErrnoException) and returns an empty String.


#include <stdio.h>   /* contains printf prototype */

int main () {
  TCPIPNetworkStream new net;
  String new address;

  address = net hostToAddress "MyHostName"; /* Substitute your host's name. */

  printf ("%s\n", address);
}

readText (void)
readText (Integer sock_fh)

Reads a socket’s input and returns the input as a String object. With no arguments, the method uses the receiver’s socket file handle, which is normally assigned by createSocketBasic, above.

If a socket file handle is given as the argument, then the method performs the read on that handle. This is useful when performing reads after a call to acceptSock or a similar method. See TCPIPNetworkStreamReader.

If an error occurs while reading, the methods raise a SystemErrnoException.

readVec (Integer sock_fh, Vector data_vec_out)

Reads binary data from the socket given as the first argument and returns the data in the Vector object give as the second argument.

The method raise a SystemErrnoException if an error occurs while reading.

This example is a simple server that receives image data and writes it to a file.


int main () {
  TCPIPNetworkStreamReader new server;
  SystemErrnoException new ex;
  Vector new output;
  WriteFileStream new writeF;
  int newsocket;
  char *socket_out;

  server openOn;

  newsocket = server acceptSock;  /* INADDR_ANY */

  if (newsocket > 0) {
    server readVec newsocket, output;
    if (ex pending) {
      ex handle;
    }
    server closeSock newsocket;
  } else if (ex pending) {
    ex handle;
  } else {
    printf ("Connection timed out.\n");
  }

  server closeSock;

  writeF openOn "image-copy.jpeg";
  writeF writeVec output;
  writeF closeStream;
}

Here is the corresponding client program that transmits the image data.


int main () {
  SystemErrnoException new ex;
  TCPIPNetworkStreamWriter new client;
  ReadFileStream new readF;
  Vector new photo;
  LongInteger new imageSize;

  readF openOn "image.jpeg";

  readF statStream;
  imageSize = readF streamSize;

  photo = readF readVec imageSize;

  readF closeStream;

  client openOn "127.0.0.1"; /* Edit with the reciever's actual network
                                address. */

  client writeVec photo;
  if (ex pending) {
    ex handle;
  }

  client closeSock;
}
readText (String text)

Writes the text given as the argument to the reciever’s socket. If the number of bytes actually written isn’t equal to the length of text, then the method raises a SystemErrnoException.

readText (Vector data)

Writes the data contained in the argument to the receiver’s socket. The method raises an Exception if the argument is not a Vector, or a SystemErrnoException if an error occurs while writing.

Examples of client and server programs which handle binary data are given in the entry for readVec, above.


Next: , Previous: , Up: Classes   [Index]

TCPIPNetworkStreamReader

TCPIPNetworkStreamReader Class

TCPIPNetworkStreamReader class defines methods and instance variables that are used specifically for reading data from network connections.

For example programs, refer to the TCPIPNetworkStream class See TCPIPNetworkStream.

Instance Variables

timeout

An Integer that contains the number of seconds to wait for incoming connections.

Instance Methods

acceptSock (void)

Waits for an incoming connection on the receiver’s socket, and if a connection is pending, returns the number of the socket that communications will take place on.

If the connection times out, then the method returns 0. The length of time the method should wait for incoming connections is given by the receiver’s timeout instance variable.

If an error occurs, the method returns 0 and also raises a SystemErrnoException.

Note: The method can handle peer connections if the operating system supports it - binding listening sockets to specific addresses is not uniformly supported among operating systems. In these cases, the method can also wait for connections using the constant INADDR_ANY.

This is done by using the openOn method (below) with no network address.


  mySock openOn "127.0.0.1";   /* bind the socket to the
                                  local network connection. */
     
  mySock openOn;               /* bind a socket to listen for
                                  connections from any network
                                  address. */

In the second case, the acceptSock method can also function as the core of a more conventional network server.

openOn (void)
openOn (String address)
openOn (String address, Integer port)

Creates the receiver’s socket and binds it to receive messages from the network address given as the argument. If no network address is given, the receiver’s socket is bound to the constant INADDR_ANY.

If no port argument is given, the socket is bound to DEFAULT_TCPIP_PORT, which is defined in classes/ctalkdefs.h, and which you can set depending on the the systems’ needs.

These methods raise an Exception if any of the networking functions return an error.


Next: , Previous: , Up: Classes   [Index]

TCPIPNetworkStreamWriter

TCPIPNetworkStreamWriter Class

The TCPIPNetworkStreamWriter class defines supporting methods for programs that write to network connections.

For example programs, refer to the TCPIPNetworkStream class; See TCPIPNetworkStream.

Instance Methods

openOn (String address)
openOn (String address, Integer port)

Creates a socket and connects it to the network address given as the argument.

If a port argument is given, the socket connects over that port; otherwise, the socket connects via DEFAULT_TCPIP_PORT, which is defined in classes/ctalkdefs.h, which you can adjust to suit the network’s needs.

These methods raise a SystemErrnoException if any of the networking functions return an error.


Next: , Previous: , Up: Classes   [Index]

TCPIPV6NetworkStream

TCPIPV6UNIXNetworkStream Class

The TCPIPV6NetworkStream class manages TCPIP version 6 stream objects. The class is a superclass of the TCPIPV6NetworkStreamReader and TCPIPV6NetworkStreamWriter classes, and the methods and instance variables that are defined by this class are common to both client and server programs.

Here is an example of simple IPv6 reader program.


int main () {
  SystemErrnoException new ex;
  TCPIPV6NetworkStreamReader new server, connection;
  String new data;

  server openOn;
  if (ex pending) {
    ex handle;
  }

  connection = server acceptSock;
  if (ex pending) {
    ex handle;
  }
  data = server readText connection;
  printf ("%s\n", data);

  server closeSock;
}

And here is a simple program that writes a message to a TCPIP v6 connection.


static char *msg = "First connect.\n";

#include <ctalk/ctalkdefs.h>

int main (int argc, char **argv) {
  SystemErrnoException new ex;
  TCPIPV6NetworkStreamWriter new client;

  if (argc != 2) {
    printf ("Usage: ip6writer <server_hostname>\n");
  }

  client openOn argv[1];
  if (ex pending) {
    ex handle;
  }

  client writeText msg;
  
  client closeSock;
}

Instance Variables

sock

An Integer that contains the system-assigned file handle number of TCPIPV6NetworkStreamReader and TCPIPV6NetworkStreamWriter objects.

Instance Methods

addrInfo (String hostname, String canonnameout, List addrsOut)

Performs a lookup of hostname’s IPv6 addresses. If the lookup is successful, returns the host’s canonical name in canonnameout and each of the host’s addresses as a string in addrsOut. The method’s return value is an Integer with the number of addresses found.

If the lookup causes an error, the method raises an Exception (not a SystemErrnoException) and returns 0.

closeSock (void)
closeSock (Integer sockNum)

With no arguments, closes the receiver’s socket. If a socket file handle number is given as the argument, closes that socket. If closing the socket causes an error, the method raises a SystemErrnoException.

createSocketBasic

Creates a new IPv6 socket and sets the receiver’s sock instance variable, an Integer, to the system-assigned file number, and returns the sock instance variable. If an error occurs while creating a socket, the method raises a SystemErrnoException and returns 0.

readText (void)
readText (Integer sock_fn)

Read text from a network connection. With no arguments, the value of the receiver’s sock instance variable provides the socket file handle. If one argument is given, the argument, an Integer, provides the file handle number.

These methods return a String with the contents of the received message. If an error occurs while reading, the methods raise a SystemErrnoException and return NULL.

readVec (Integer sock_fn, Vector resultVec)

Reads binary data from the socket handle sock_fn into resultVec, and returns resultVec. The method raises a SystemErrnoException if an error occurs.

writeText (String textArg)

Writes the String given as the argument to the receiver’s socket. If the number of bytes written does not match the length of textArg, the method raises a SystemErrnoException.

writeVec (Vector dataVec)

Writes the contents of DATAVEC to the receiver’s socket. If the number of bytes written does not match the length of the data, the method raises a SystemErrnoException.


Next: , Previous: , Up: Classes   [Index]

TCPIPV6NetworkStreamReader

TCPIPV6UNIXNetworkStreamReader Class

Instance Variables

timeout

An Integer that contains the number of seconds that the acceptSock method (below) should wait for a connection. The default is 10 seconds.

Instance Methods

acceptSock (void)

Listens for incoming connections on the socket that is bound to a network address and port by a previous call to openOn.

If the program receives an incoming connection, acceptSock creates a new socket to read data from the connection and returns the socket number, an Integer, to the calling program.

If the method times out, it returns 0 to the calling program. The timeout instance variable determines the number of seconds the method should wait for incoming connections. The default is 10 seconds.

If an error occurs, the method returns -1 and raises a SystemErrnoException.

openOn (void)
openOn (Integer port)
openOn (String hostName, Integer port)

Binds a TCPIPV6NetworkStreamReader object to the hostname and port given as the arguments, if any. The return value is the socket handle number of the receiver, an Integer.

If no hostname or port is given, the method binds the socket to the system constant in6addr_any, and the port defined by DEFAULT_TCPIP_PORT, defined by the Ctalk library in the ctalkdefs.h header file.

If an error occurs, these methods raise an Exception and return 0.


Next: , Previous: , Up: Classes   [Index]

TCPIPV6NetworkStreamWriter

TCPIPV6UNIXNetworkStreamWriter Class

Instance methods

openOn (String hostName)
openOn (String hostName, Integer port)

Open a socket connection to hostName for writing, optionally using port as the network port for the connection. If successful, the method returns the filehandle number of the socket object that made the connection as an Integer

If no port is given, the method uses the definition of DEFAULT_TCPIP_PORT, which is defined in ctalkdefs.h, as the port number. To include these definitions, you can add the following line to a program.


#include <ctalk/ctalkdefs.h>

The argument hostName must be the name of an IPv6 capable host, or the method raises an Exception and returns 0. The method also raises an Exception and returns 0 if an error occurs while trying to connect the socket.


Next: , Previous: , Up: Classes   [Index]

UNIXNetworkStream

UNIXNetworkStream Class

UNIXNetworkStream and its subclasses define instance and class variables and methods to communicate over UNIX domain sockets between processes and programs operating on the same machine.

As a type of interprocess communication, UNIX domain sockets are more flexible than named pipes - programs create and manage one or more sets of reader and writer objects independently of each other.

The section UNIXNetworkStreamReader describes the methods and instance data for creating and managing reader objects See UNIXNetworkStreamReader, and the section UNIXNetworkStreamWriter describes the details of writer objects See UNIXNetworkStreamWriter.

Class Variables

socketPrefix

A String that defaults to the machine-specific directory name where the system stores its temporary files (e.g., /tmp, /var/tmp, etc.).

Instance Variables

sock

An Integer that contains the file handle number the receiver’s socket.

socketBaseName

A String that contains the base name of the socket’s path name. The string may contain escape characters. Refer to the makeSocketPath method, below.

socketPath

A String that contains the fully qualified path name of a program’s UNIX domain socket.

Instance Methods

closeSocket (void)

Shuts down the receiver’s socket (defined in the sock instance variable) and deletes the socket’s file entry (which is defined in the socketPath instance variable), if present.

makeSocketPath (String basename)

Constructs a fully qualified socket path from basename and the prefix given by socketPrefix (described above). If basename contains the characters ‘$$’, the method replaces the character with the program’s process ID.

After constructing the fully qualified name, the method fills in the receiver’s socketBaseName and socketPath instance variables, and returns the value of the socketPath instance variable.

The small program here constructs and prints the file pathname of a program’s UNIX socket, which includes the process ID of the program.


int main () {
  UNIXNetworkStream new un;
  String new sockName;

  sockName = "myprogsocket.$$";

  un makeSocketPath sockName;
  printf ("%s\n", un socketPath);
}

removeSocket (void)

Deletes the socket’s file entry by its name, which is defined by makeSocketPath, above.


Next: , Previous: , Up: Classes   [Index]

UNIXNetworkStreamReader

UNIXNetworkStreamReader Class

UNIXNetworkStreamReader objects receive data using UNIX domain sockets on a single machine. The class defines methods to create a connection and check the connection for incoming data, and read any data for the application.

Here are slightly abreviated versions of the sockread.c and sockwrite.c example programs. This is the source code of sockread.c.


int main () {
  UNIXNetworkStreamReader new reader;
  SystemErrnoException new ex;
  FileStream new f;
  String new sockName;
  String new data;

  sockName = "testsocket";

  reader makeSocketPath sockName;
  printf ("reader socket:  %s\n", reader socketPath);

  /* Delete a socket from a previous connection if necessary. */
  if (f exists reader socketPath) {
    f deleteFile reader socketPath;
  }

  reader open;
  if (ex pending) {
    ex handle;
    unlink (reader socketPath);
    return -1;
  }

  while (1) {
    data = reader sockRead;

    if (data length > 0) {
      printf ("%s\n", data);
    }
    if (ex pending) {
      ex handle;
      break;
    }
    usleep (1000);
  }

  return 0;
}

And here is sockwrite.c. For details about its operation, refer to the UNIXNetworkStreamWriter section. See UNIXNetworkStreamWriter.


int main (int argc, char **argv) {
  UNIXNetworkStreamWriter new writer;
  SystemErrnoException new ex;
  String new sockName;
  String new data;

  sockName = "testsocket";

  writer makeSocketPath sockName;
  printf ("writer socket:  %s\n", writer socketPath);

  writer open;
  if (ex pending) {
    ex handle;
  }

  writer sockWrite argv[1];

  if (ex pending) {
    ex handle;
  }

  exit (0);
}

The programs communicate if started from different shells used by different virtual terminals or different windows on a graphical desktop, or if the reader program is started in the background and the writer started in the foreground.

Instance Variables

charsRead

An Integer that contains the number of characters read by the last reception of data from a connection, or zero if there is no data waiting. Refer to the method sockRead, below.

Instance Methods

open (void)

Creates a socket to read data from the socket name by the receiver’s socketPath instance variable, which is defined in UNIXNetworkStream class. See UNIXNetworkStream.

The method returns the file number of the socket, or -1 if there is an error, and raises a SystemErrnoException if an error occurred in the network library routines.

openOn (String socketpath)

Creates a new reader socket and binds it to socketpath. Sets the receiver’s socketPath instance variable to the argument. Returns an Integer with the file number of the newly created socket.

sockRead (void)

Returns a String containing data received from the socket previously created by the open method, above, and sets the charsRead instance variable to the number of characters read.

If no data is waiting, the method returns an empty string and sets the receiver’s charsRead instance variable to 0.

If an error occurs during one of the system calls, the method raises a SystemErrnoException.


Next: , Previous: , Up: Classes   [Index]

UNIXNetworkStreamWriter

UNIXNetworkStreamWriter Class

UNIXNetworkStreamWriter objects send data over machine- local UNIX domain sockets. The class contains methods to open sockets and send data over the network connection.

For an example of how to use UNIXNetworkStreamWriter objects, refer to the programs in the UNIXNetworkStreamReader section. See UNIXNetworkStreamReader.

Instance Variables

charsWritten

An Integer that contains the number of bytes written by the previous call to the sockWrite method, which is described below.

Instance Methods

open (void)

Creates a machine-local UNIX socket connection with the socket name given by the socketPath instance variable, which is defined in UNIXNetworkStream class. See UNIXNetworkStream.

If successful, the method returns the file handle number of the new socket. If an error occurs, the method returns -1 and raises a SystemErrnoException if the error occured in a library call.

openOn (String socketpath)

Creates a new writer socket and binds it to socketpath. Sets the receiver’s socketPath instance variable to the argument. Returns an Integer with the file number of the newly created socket.

sockWrite (String data)

Writes data to the socket created by a previous call to the open method, above. Sets the receiver’s charsWritten instance variable to the number of characters written. If successful, returns 0, or if an error occured, returns -1 and raises a SystemErrnoException.


Next: , Previous: , Up: Classes   [Index]

TreeNode

TreeNode Class

TreeNode objects and methods maintain links to other TreeNode objects (siblings), and to sets of objects (children). The methods can add sibling and child TreeNodes, traverse the tree, and set the content of each TreeNode.

The class provides basic methods for adding sibling and child nodes, adding content to each node (which is a String object), and to traverse the tree. The methods that visit each node in a tree– print, format, and search–are fairly generic. They perform a depth-first traversal which should work equally well with balanced and non-balanced trees.

Instance Variables

children

A List of TreeNode objects, which are accessible only through the parent node. See List.

content

A String that contains the node’s displayable text.

levelMargin

A String, normally consisting of all spaces, that is the additional left margin for each level of the tree. See String.

levelMarginLength

An Integer that is the length of the levelMargin string.

siblings

Another List of TreeNode objects that occur at the same level. See List.

Instance Methods

addChild (TreeNode child)

Add child to the end of the receiver’s children list.

format (void)

Print the receiver tree to a String object. This method uses two other methods, __formatChildren and __formatSiblings to traverse each TreeNode object in the receiver tree. Returns a String object.

makeSibling (TreeNode sib)

Add sib to the end of the receiver’s sibling list.

map (OBJECT *(method)())

Execute method over each member of the receiver tree. As with map methods in other classes, method must also belong to TreeNode class and takes no arguments.

print (void)

Print the receiver tree to the terminal. This method uses two other methods, __printChildren and __printSiblings to traverse each TreeNode object in the receiver tree.

search (String searchString)

Return the first node in the receiver tree whose content matches searchString. Returns only the first node that contains searchString. Does not look for multiple matches.

setContent (String str)

Sets the receiver TreeNode's content instance variable to str, a String object. See String.


Next: , Previous: , Up: Classes   [Index]

Event

Event Class

Event and its subclasses represent system and language events like applications, errors, input, and signals, and these classes provide the methods that receive and handle the events.


Up: Classes   [Index]

Application

Application Class

Objects of Application class represent programs. This class provides basic methods for initializing and exiting programs, handling window size and placement for graphical programs, and starting subprograms, as well as other tasks.

Instance Variables

cmdLineArgc

An Integer that contains the value of the argc argument to main (). The value is normally set by the parseArgs method, below.

cmdLineArgs

An Array of Strings that contains each element of the argv parameter to main (). This is normally filled in by the parseArgs method, below.

exitHandler

A SignalHandler object that contains a user-installable signal handler. See SignalHandler.

geomFlags
winXOrg
winYOrg
winWidth
winHeight

Variables that specify the appication window’s dimensions, if any. These can be set by the parseX11Geometry method, below.

Instance Methods

__handleAppExit (__c_arg__ int signo)

A standard, user installable SIGINT (Ctrl-C) signal handler. If the application has enabled exception traces, print a stack trace and then call the default SIGINT handler. The signo argument contains the number of the signal that calls the method.

The application must first call the installExitHandler method (below) to define this method as a signal handler - then this method is called when the application receives a SIGINT, which is normally generated when the user presses Control-C.

This method does not return.

__handleSigAbrt (__c_arg__ int signo)

A standard, user installable SIGABRT handler. The application must first call installAbortHandler, below. If the application has enabled exception traces, print a stack trace before exiting. This method does not return.

classSearchPath (void)

Returns a String that contains Ctalk’s class library search path, with each directory separated by a colon (‘:’). The default is usually /usr/local/include/ctalk.

If there are any directories given as arguments to the ‘-I’ command line option, and any directories named in the ‘CLASSLIBDIRS’ environment variable, Ctalk includes those directories as well, and searches them first.

execC (String commandLine)
execC (String commandLine, String commandOutput)

Execute the command and arguments given by commandLine and wait for the program to finish. The method displays the standard output of the subprocess.

If a second argument is given, the program’s standard output is saved in the commandOutput object, which should normally be a String object. Here is a simple example program.


int main () {
  Application new myApp;
  String new str, output;
  
  str = "/bin/ls -l";
  myApp execC str, output;
  printf ("%s\n", output);
}

For any number of arguments, if the command redirects the standard outut, then the output is sent to the file that is the operand of a ‘>’ or ‘>>’ redirection operator.

If commandLine is the name of a shell script, the shell script is executed by a sub-shell using the system(3) library call.

getPID (void)

Returns an Integer with the program’s process ID.

installAbortHandlerBasic (void)

Installs a C handler for SIGABRT signals. The C handlers are more reliable, though less flexible, than handlers that use SignalHandler class.

This method catches a SIGABRT, and prints a walkback trace if tracing is enabled, before the application exits.

installExitHandler (void)

Install a SIGINT (C-c) handler in a Ctalk program that performs cleanup before exiting the application.

installExitHandlerBasic (void)

Installs a C handler for SIGINT signals (C-c or C-break for DJGPP) that is slightly more robust and reliable, though less flexible, than the SignalHandler classes.

This method causes the application to exit when receiving a signal, and prints a walkback trace if tracing is enabled.

installPrefix (void)

Returns a String with the name of the top-level directory where Ctalk’s various component subdirectories are located. For example, in relative terms, this is where Ctalk’s various components get installed.


Executables:            prefixdir/bin
Libraries:              prefixdir/lib
Class Libraries:        prefixdir/include/ctalk
Texinfo Manuals:        prefixdirshare/info
Manual Pages:           prefixdir/share/man
Searchable Docs:        prefixdir/share/ctalk

membervars (void)

Returns a String with the member variable declarations of the class named by the receiver. If the receiver is a String object, membervars returns the variables for the class given by the String's value. If the receiver is a class object, membervars returns the member variables for that class. For nany other type of object, membervars returns the variables declared in the object’s class. See ClassVariableKeyword.

Membervars returns the complete documentation of the instance or class variable, if the declaration also contains a documentation string. See VariableDocStrings.

methodDocString (String method-source)

Returns the documentation string from the source of the method given as the argument. See MethodDocStrings.

methodPrototypes (String input)

If input is a method’s source or a class library, returns a String containing the prototypes of the methods; that is, the declaration and the argument list.

methodSource (String className, String methodName)

Returns a String object with the source code of the method(s) that match the declarations, The methodSource method does not distinguish methods by the number of arguments, so it returns the code of any method in a class that matches the methodName arguement.


className instanceMethod methodName
className classMethod methodName

The method generates a SystemErrnoException if it can’t find the class file.

The methodSource method is built to be as fast as possible and has a rather simple minded view of what constitutes a method declaration.

The method only recognizes declarations that appear on a single line, in order to keep the regular expressions that do the matching as simple as possible, and it only matches spaces between tokens, and not tabs, at least at the moment. It can also be fooled by things that even look like a method declaration within the method body. For example, a phrase like,


className instanceMethod <some-method-name>

in the method’s documentation, causes methodSource to signal the start of the next method.

parseArgs (Integer argc, Array argv)

Takes the argv and argc parameters to main () and sets each element of the cmdLineArgs instance variable (above) to a String that contains each element of the system’s argv array.

parseX11Geometry (String geometryString)

Parses a X Window System geometry string. If the string specifies any of the x, y, width, or height values for a window, the method sets the winXOrg, winYOrg, winWidth, or winHeight instance variables. If the geometry string omits any of the values, the method sets the corresponding instance variable to zero. The method sets the geomFlags instance variable to the geometry flags provided by the window system.

This method only parses the geometry string. It does not make any adjustments for the display dimensions, or the window dimensions or placement.

For information about the format of a X geometry string, refer to the XParseGeometry(3) manual page.

spawnC (String command, Integer restrict)

Starts the program given by the argument command, and resumes execution of the main program. The method returns an Integer with the process ID of the child process.

The child process becomes a daemon process, which means it has no interaction with the parent process. If you want the parent process to handle the child processes’ output, refer to the execC method, above. Otherwise, communication between the parent and child process should be handled by UNIX’s interprocess communication facilities.

If the restrict argument is non-zero, the method also changes the child processes’ working directory to ‘/’ and its umask to ‘0’.

The spawnC method does not use a shell when executing the child process, which means that the method doesn’t handle shell facilities like IO redirection or file globbing. It’s also necessary to provide the full path name of the program to be launched in the background.

The process that handles the session management when the daemon process is launched remains executing until the parent process exits. This means there can be three entries in the system’s process table, but it helps minimize creating zombie processes in case any part of the program quits unexpectedly.

uSleep (long long int usecs)

Sleep for usecs microseconds.

useXRender (Boolean b)

If b is true, draw graphics using the X Render extension if it is available. If b is false, use Xlib for graphics drawing. The default is to draw using the X Render extension if it is available.

usingXRender (void)

Returns a Boolean value of True if the program is using the X Render extension for drawing, False otherwise.


Up: Classes   [Index]

ClassLibraryTree

ClassLibraryTree Class

A ClassLibraryTree application is a utility program that formats a tree of the available Ctalk class hierarchy.

The class lists the libraries in Ctalk’s default installation directory, and in any directories named by the ‘CLASSLIBDIRS’ environment variable.

The class contains one method, init, which collects the class and superclass information into a set TreeNode objects. The prototype of init is:


TreeNode instanceMethod init (TreeNode classTree, Boolean verbose);

After the method finishes the classTree object contains the classes and subclasses. You can then print or format the with the TreeNode methods format and print.

The verbose argument, if True, tells the method to print dots to indicate its progress.

Here is an example program that displays the class hierarchy on a terminal.


Boolean new verbose;

int main (int argc, char **argv) {

  TreeNode new tree;
  ClassLibraryTree new classTree;
  Integer new nParams;
  Integer new i;
  String new param;

  verbose = True;

  classTree parseArgs argc, argv;
  nParams = classTree cmdLineArgs size;

  for (i = 1; i < nParams; i++) {

    param = classTree cmdLineArgs at i;

    if (param == "-q") {
      verbose = False;
      continue;
    }

    if (param == "-h" || param == "--help") {
      printf ("Usage: classes [-q] [-h]\n");
      exit (0);
    }

  }

  classTree init tree, verbose;
  tree print;

  exit (0);
}

Instance Methods

init instance method (TreeNode tree, Boolean printDots)

Creates a a tree of the class library with tree as the root node of the tree. If printDots is true, prints the method’s progress on the terminal.


Up: Classes   [Index]

GLUTApplication

GLUTApplication Class

The GLUTApplication class provides a class library interface to the GLUT application programming interface, which is a platform-independent window API for OpenGL programs.

The GLUT API uses C functions to handle window system events. This is the simplest approach to adding event handlers. Ctalk does not, itself, use any GLUT or OpenGL functions, so it is normally safe to use Ctalk methods within a window callback, as in this example.

#include <ctalk/ctalkGLUTdefs.h>

GLUTApplication new teapotApp;

float angle = 0.0f;

void mydisplay (void) {       /* This callback updates the display. */
  glEnable (GL_NORMALIZE);
  glEnable(GL_DEPTH_TEST);
  glClearColor(0.0, 0.0, 0.0, 1.0);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  glLineWidth (1.0f);

  glLoadIdentity ();
  glColor4f (0.0f, 0.0f, 1.0f, 1.0f);

  glRotatef (angle, 0.0f, 1.0f, 0.0f);
  glRotatef (10.0f, 1.0f, 0.0f, 0.0f);

  teapotApp teapot 3.0, 0;    /* Method call within the callback. */

  glutSwapBuffers ();
}

void animation (void) {  /* Callback to update the animation state. */
  angle += 0.2f;
  if (angle >= 360.0f)
    angle = 0.0f;
  glutPostRedisplay();
}

int main (int argc, char **argv) {

  teapotApp initGLUT(argc, argv);
  teapotApp initWindow (640, 480);
  teapotApp createMainWindow ("teapotApp -- GLUTApplication Class");
  teapotApp defineDisplayFn mydisplay;
  teapotApp defineIdleFn animation;
  teapotApp installCallbackFns;
  teapotApp run;
  
}

If you save the example in a file called teapotApp.ca, you can build this program with the following command on Linux/UNIX systems.


  $ ctcc -x teapotApp.ca -o teapotApp

To build the example on Apple OS X machines, you need to link it with the GLUT application framework. Refer to the discussion below for more information.

You can also use the OpenGL API within methods. This lets programs use C functions, methods, and the GLUT and OpenGL APIs together with few restrictions. The GLUTApplication class does not, at least at this time, support all of the functions that the GLUT API provides, but the API is flexible enough that you can extend it if necessary

Apple OS X Machines

OS X machines include GLUT as an application framework, which Ctalk does not support directly. Ctalk provides the platform independent ctalkGLUTdefs.h include file, which you can use to add the GLUT definitions to programs, by adding a statement like this one to the program.


#include <ctalk/ctalkGLUTdefs.h>

Then you need to link the program with the framework to produce an executable. Normally you would use a series of commands like these.


  $ ctalk -I /usr/X11R6/include teapotApp.ca -o teapotApp.i
  $ gcc -framework GLUT teapotApp.i -o teapotApp -lctalk -lreadline \
        -L/usr/X11R6/lib -lGL -lGLU

This example isn’t meant to be definitive. You might need to experiment to find the right build configuration for a particular OS X machine.

There is more platform specific information in the example programs and README file in the demos/glut subdirectory.

The GLUTApplication class doesn’t provide a guide to the very involved subject of programming with the GLUT and OpenGL APIs. There are many references and tutorials available on the Internet and in bookstores that teach OpenGL programming.

Instance Methods

createMainWindow (String title)

Create the main window. The argument, a String contains the window’s title.

cone (Float base, Float height, Integer slices, Integer stacks, Integer fill)

Draw a cone with a base of size base, height height, with slices longitudinal slices and stacks lateral slices. If fill is True, draw a filled cone; otherwise, draw a wireframe cone.

cube (Float size, Integer fill)

Draw a cube with sides of size length. If fill is True, draw a filled cube; otherwise draw a wirefame cube.

defineAnimationFn (Symbol fn)
defineButtonBoxFn (Symbol fn)
defineDialsFn (Symbol fn)
defineDisplayFn (Symbol fn)
defineEntryFn (Symbol fn)
defineIdleFn (Symbol fn)
defineKeyboardFn (Symbol fn)
defineMenuStateFn (Symbol fn)
defineMenuStatusFn (Symbol fn)
defineMotionFn (Symbol fn)
defineMouseFn (Symbol fn)
defineOverlayDisplayFn (Symbol fn)
definePassiveMotionFn (Symbol fn)
defineSpaceballMotionFn (Symbol fn)
defineSpaceballRotateFn (Symbol fn)
defineSpecialFn (Symbol fn)
defineTabletButtonFn (Symbol fn)
defineTabletMotionFn (Symbol fn)
defineVisibilityFn (Symbol fn)
defineTimerFn (Integer msec, Symbol fn, Integer argValue)

Define callback functions for window system events. The argument is the name of the C function that handles the event. Refer to the method’s documentation and the GLUT API’s documentation for information about each callback function’s parameters.

Note: defineAnimationFn and defineTimerFn both use the glutTimerFunc () callback, so the actual callback is the last function defined (before calling installCallBackFns).

The difference is that defineAnimationFn executes its callback 24 times per second, while defineTimerFn uses an application defined interval, and takes three arguments: the timer interval in milliseconds, the name of the callback function, and an integer that is passed to the callback function as an argument.

defineReshapeFn (Symbol fn)

Defines the function used to reshape the window’s 3D viewing space. The default is an orthographic projection, 5 grid units wide on each axis. If you need to duplicate the default viewing area in a program, here is the code that defines it. The variables ‘width’ and ‘height’ are provided by the GLUT application as arguments to the reshape function.


void defualt_reshape_fn (int width, int height) {
  float ar = (float)width / (float)height;
  glViewport(0, 0, w, h);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  glOrtho (-5.0 * ar, 5.0 * ar, -5.0, 5.0, 5.0, -5.0);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
}

dodecahedron (Integer fill)

Draw a dodecahedron. If fill is True, draw a solid dodecahedron; otherwise draw a wireframe dodecahedron.

fullScreen (void)

Resize the main window so that it occupies the entire screen. A call to reshape (the method, not the callback) or position returns the window to its normal state.

icosahedron (Integer fill)

Draw a icosahedron. If fill is True, draw a solid icosahedron; otherwise draw a wireframe icosahedron.

initGlut (Integer argc, Array argv)

Initialize the GLUT window system. If there are any GLUT specific command line arguments, this method parses them and uses then uses the options to configure the window system. This method also calls Application method parseArgs, so the command line arguments are available in the cmdLineArg instance variable (an Array). See Application.

initWindow (Integer width, Integer height)
initWindow (Integer xOrg, Integer yOrg, Integer width, Integer height)

Initialize the main window’s size or, with four arguments, its size and position.

installCallBackFns (void)

Install the callback functions defined by previous calls to define*Fn methods.

octahedron (Integer fill)

Draw a octahedron. If fill is True, draw a solid octahedron; otherwise draw a wireframe octahedron.

tetrahedron (Integer fill)

Draw a tetrahedron. If fill is True, draw a solid tetrahedron; otherwise draw a wireframe tetrahedron.

run (void)

Enter the GLUT API’s main event loop. When this method returns, the program typically exits. Note: GLUT does not provide any events to terminate program. To exit a program normally, use C’s exit (3) function and on_exit(3) (or onexit(3)) to handle any program specific exit processing.

sphere (Float radius, Integer slices, Integer stacks, Integer fill)

Draw a sphere with radius with slices longitudinal sections and stacks lateral sections. If fill is True, draw a filled sphere; otherwise draw a wireframe sphere.

teapot (Integer fill)

Draw the classic teapot demonstration. If fill is True, draw a solid teapot; otherwise draw a wireframe teapot.

torus (Float inner_radius, Float outer_radius, Integer size, Integer rings, Integer fill)

Draw a torus with the inner and outer radii given by the arguments, with a section size and rendered in rings sections. If fill is True, draw a solid torus; otherwise draw a wireframe torus.

windowID (String window_title)

Return an Integer with the X window ID of the window with the title window_title. Note: Some OS’s, like OSX/Darwin, don’t use Xlib to draw windows; in that case, this method won’t be able to provide a lower level window ID.

xpmToTexture (char **xpm_data, Integer width_out, Integer height_out, Symbol texture_data_out)
xpmToTexture (char **xpm_data, Integer alpha, Integer width_out, Integer height_out, Symbol texture_data_out)

Translates a XPM pixmap into an OpenGL texture. The argument xpm_data is the pixmap’s char *pixmap_name[] declaration. If no alpha argument is given, then ‘1.0’ is used to create an opaque texture. Alpha values can range from 0.0 (completely transparent) - 1.0 (completely opaque).

The method sets the arguments width_out, height_out, and texel_data_out with the height, width and data of the texture.

The resulting texture has the format GL_RGBA and the data type GL_UNSIGNED_INT_8_8_8_8, so you can create a 2D texture from a pixmap with statements like these.


Integer new xpmWidth;
Integer new xpmHeight;
Symbol new texData;

/*
 *  Note that the xpm_data argument should not normally need a
 *  translation from C.
 */
myGLUTApp xpmToTexture xpm_data, xpmWidth, xpmHeight, texData;
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, xpmWidth, xpmHeight, 0,
              GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, texData);

The xpmToTexture method does not do any setup of the OpenGL texture environment. For basic textures, OpenGL works better with textures that have a geometry that is an even multiple of 2; e.g., 128x128 or 256x256 pixels.

Individual applications can add parameters for interpolation, blending, mipmap creation, and material rendering based on the program’s requirements, though.

The Ctalk library only stores the data for one texture at a time, so if a program uses multiple textures, it should save the texture data to a separate Symbol, in orderq to avoid regenerating the texture each time it’s used.

For an example of how to draw with textures, refer to the texture.ca and texblend.ca programs in the Ctalk distribution’s demos/glut subdirectory.


Up: Classes   [Index]

ObjectInspector

ObjectInspector Class

The ObjectInspector class provides basic methods for examining the contents of objects.

The central method of this class is formatObject, which returns the contents of an object and its instance variables as a String object. However, applications can also use the formatInstanceVariable and formatClassVariable methods.

These methods use the mapInstanceVariables and mapClassVariables methods, defined in Object class. See Object.

Other classes provide convenience methods that call formatObject; for example, dump in Object class.

Instance Variables

promptString

A String object that contains the text of the inspector’s command prompt. See String.

verbose

A Boolean value that causes the inspector to print a verbose listing of objects when set to True. See Boolean.

Instance Methods

formatClassVariable (Symbol objectRef)

Return a String containing the contents of an object and its instance variables. The argument is a reference to the object to be formatted. Both formatClassVariable and formatInstanceVariable are used by formatObject, below.

formatInstanceVariable (Symbol objectRef)

Return a String containing the contents of an object and its instance variables. The argument is a reference to the object to be formatted.

formatObject (Symbol objectRef)

Return a String containing the contents of an object and its instance variables. The argument is a reference to the object to be formatted.

inspect (Symbol objectRef)
inspect (Symbol objectRef, String promptStr)

Suspends execution of the program and enters the Object inspector. This allows you to examine the object pointed to by objRef, continue execution, or exit the program. Typing ‘?’ or ‘help’ at the prompt prints a list of the inspector’s commands. With a String object as the second argument, the inspector displays the string as its command prompt.

The manual page, inspect(3ctalk), contains a description the inspector’s commands and a brief tutorial.


Up: Classes   [Index]

LibrarySearch

LibrarySearch Class

The methods in LibrarySearch class perform searches on the Ctalk reference documentation. The documentation is derived from this reference and is formatted to be easily searchable. Ctalk installs the documentation files during the installation process.

These methods are also used in the searchlib program to search the documentation.

Note that these methods raise an exception if they can’t open the documentation file, in which case they return an empty string and leave it up to the calling function or method to handle the exception.

The searchlib program is described in the searchlib(1) man page and the ctalktools Texinfo documentation.

Instance Methods

cAPIFunctionSearch (String docPath, String search_pattern)

Returns a String that contains the results of a search for the C API function or functions that match search_pattern.

methodSearch (String docPath, String search_pattern)

Search the class library’s method prototypes for search_pattern. Returns a String object with the results. Note that this function is designed to be rather inclusive; it searches the entire method prototype for a pattern, which may include the receiver class’s name or any parameter name(s). So including the receiver class name is a search is perfectly valid - the syntax of a method prototype in the documentation is:


<receiver_class>::<method_selector> (param_list)


Up: Classes   [Index]

Exception

Exception Class

Exception and its subclasses handle system and language errors. These classes provide default and user-defined handlers to respond to the Exceptions;

If a program calls enableExceptionTrace (class Object), then the handle method, below, and other exception handlers print a walkback of the program’s method stack. See Object.

Here is an example of how to handle an exception when trying to open a file.

Exception new e;
...
e enableExceptionTrace;
...
inputStream openOn fileArg;
if (e pending) {
  e handle;
  exit (1);
}

The pending method returns TRUE or FALSE depending on whether an exception is waiting to be processed. The handle method processes the exception.

The class’s default method handlers format and print the text provided when a program calls raiseException. Here is the code from openOn (class ReadFileStream) that creates the exception.

SystemErrnoException new e;
...
if ((f = fopen (__streamPath, "r")) != NULL) {
  __ctalkObjValPtr (selfval, f);
  self streamPath = __streamPath;
  self statStream;
} else {
  e raiseCriticalException __streamPath;
  strcpy (selfval -> __o_value, "");
}

The object e is a SystemErrnoException. The SystemErrnoException class translates the operating system’s errors into Ctalk exceptions. In the example above, the type of the exception is provided by the operating system.

The Exception class also provides the installHandler method to allow programs to use their own handlers. Here is an example.

Exception instanceMethod myHandler (void) {
  printf ("My exception handler: %s.\n",
	  __ctalkGetRunTimeException ());
  return NULL;
}

int main () {
  Exception new e;
  e installHandler "myHandler";
  e raiseException USER_EXCEPTION_X, "my program's exception";
  e handle;
}

Some notes about exceptions:

1. The receiver class of an exception handler is the the same as the exception object; e.g., myHandler in the example above is the same as the class of e; that is, Exception. In addition, exception handlers take no arguments and rely on information at the time the exception is raised.

2. Programs must take care that they handle any exceptions that they raise as soon as possible. If not handled by the application, the run-time library API might then handle the exception, which could lead to confusing results.

3. Ctalk uses critical exceptions internally. At the application level, however, all exceptions are treated with the same priority. The application needs to take the appropriate action, depending on the type of exception.

4. Exception classes should not, as much as possible, depend on other classes being evaluated. This is because even basic classes use exceptions, and if the exceptions in turn use the basic classes, it can lead to circular reference. In fact, Symbol is one of the few classes that Exception can use without generating circular method and class references. That is why the handlerMethod instance variable (see below) is implmented as a Symbol.

5. When writing exception handlers, you should use as much as possible the following library API functions: __ctalkGetRunTimeException, __ctalkHandleRunTimeException, __ctalkPeekRunTimeException, __ctalkPeekExceptionTrace, and __ctalkPendingException. They are located in lib/except.c and described in a later section. See Ctalk library.

6. The only way to distinguish between different exceptions within a handler is to compare the text returned by a function like __ctalkGetRunTimeException. The exception information is generated at the time the exception is raised, which is the information that the program should be interested in. Handling exceptions as soon as possible also helps avoid confusion if one exception then causes other exceptions. Also, different operating systems map errors codes differently, so Ctalk uses the operating systems’ interpretations of the errors.

7. Exception handlers in calling methods take priority over handlers in the methods they call. You need to be careful that exception handlers within the scope of a caller do not supercede each other. This is especially true if an application tries to use a global Exception object. You should try to keep Exception objects as local as possible.

Exception Codes

Exceptions have a corresponding integer code. The following macros correspond to the actual exceptions.

SUCCESS_X
CPLUSPLUS_HEADER_X
MISMATCHED_PAREN_X
FALSE_ASSERTION_X
FILE_IS_DIRECTORY_X
FILE_ALREADY_OPEN_X
UNDEFINED_PARAM_CLASS_X
PARSE_ERROR_X
INVALID_OPERAND_X
PTR_CONVERSION_X
UNDEFINED_CLASS_X
UNDEFINED_METHOD_X
METHOD_USED_BEFORE_DEFINE_X
SELF_WITHOUT_RECEIVER_X
UNDEFINED_LABEL_X
UNDEFINED_TYPE_X
UNDEFINED_RECEIVER_X
UNKNOWN_FILE_MODE_X
INVALID_VARIABLE_DECLARATION_X
WRONG_NUMBER_OF_ARGUMENTS_X
SIGNAL_EVENT_X
INVALID_RECEIVER_X
NOT_A_TTY_X
USER_EXCEPTION_X

Instance Variables

handlerMethod

A Symbol object that contains the address of a user defined method to handle exceptions.

Instance Methods

deleteLastException (void)

Delete the last generated exception from Ctalk’s internal exception list.

handle (void)

Execute the exception handler for the next pending method. If a program calls enableExceptionTrace (class Object), then handle also displays a walkback of the exception’s copy of the program call stack. See Object.

exceptionHandler (void)

Handle an exception either with Ctalk’s default exception handler or a user defined handler. If the program has called the traceEnabled method (class Object), print a stack trace also.

installHandler (char *handler_method_name)

Install a user-defined method to handle exceptions. The method’s receiver class must be of the same class as the exception; i.e., either Exception or SystemErrnoException.

peek (void)

Returns a String containing the text of the first pending exception, if any.

pending (void)

Return TRUE if any exceptions are pending, FALSE otherwise.

raiseCriticalException (EXCEPTION ex, char *text)

Raise a critical exception. A critical exception is similar to a normal exception, below, except that it is not caught internally. The application must catch the exception with pending and handle.

You should use one of the EXCEPTION macros defined above as the argument ex.

Print a trace of the methods in the current exception’s copy of the program’s call stack.

raiseException (EXCEPTION ex, char *text)

Raise an exception. You should use one of the EXCEPTION macros defined above as the argument ex.


Up: Classes   [Index]

SystemErrnoException

SystemErrnoException Class

The SystemErrnoException class translates operating system errors into Ctalk exceptions. The exceptions, which are specific to each operating system, correspond to the interpretation of the system’s errno global variable and allows Ctalk to work with system errors even if the system implements its error codes via a built-in variable, a macro, or function.

There is an example of a system error handler in the Exception class section. See Exception.

Class Variables

sysErrno

The sysErrno object contains the value of the C library’s errno variable or macro.

Instance Methods

raiseException (char *data)

Sets the value of the sysErrno class variable and raises an exception if the C library’s errno variable or macro returns a nonzero value.


Up: Classes   [Index]

InputEvent

InputEvent Class

Instance Variables

eventClass

An Integer that defines the class of the input event. Ctalk defines the following input event classes.

KBDCHAR        # ASCII Characters
KBDCUR         # Cursor Keys.  
eventData

An Integer that contains the data specific to an input event.

For example, when used with subclasses of ANSITerminalPane, eventData holds the ASCII value of a keypress.

When used with subclasses of X11Pane (actually, any subclass or program that uses X11TerminalStream : queueInput), eventData generally holds the ID of the window that received the event.

The GUI event types and the data that a X11TerminalStream object returns are described in the X11TerminalStream class. See XEventClasses.

xEventData1
xEventData2
xEventData3
xEventData4
xEventData5

Data provided by the X11TerminalStream input handler. See X11TerminalStream.


Up: Classes   [Index]

SignalEvent

SignalEvent Class

The SignalEvent class provides methods and variable definitions for Ctalk programs to handle signal events.

Signal handler (SignalHandler) methods act like C functions when a program installs them to handle signals. The signal handler methods cannot, in most cases, create objects. Ctalk provides the C function __ctalkNewSignalEventInternal to create and queue SignalEvent objects from the handler.

Here is an example of a signal handler method that creates SignalEvent objects.

#include <time.h>

SignalHandler instanceMethod handleSignal (__c_arg__ int signo) {
  time_t t;
  char buf[MAXLABEL];
  noMethodInit;
  t = time (NULL);
  /* Format the system time, then create a new SignalEvent object,
     and add the time data to the new object's text instance variable. */
  __ctalkDecimalIntegerToASCII (t, buf);
  __ctalkNewSignalEventInternal (signo, getpid (), buf);
  return NULL;
}

For more information, Method functions, and __ctalkNewSignalEventInternal.

Class Variables

pendingEvents

A List of pending signal events.

Instance Variables

processID

An Integer that contains the process ID of the program that received the signal.

sigNo

An Integer that contains the signal number of the handler.

data

A String object that contains data from the signal handler.

Instance Methods

getPID (void)

Set the SignalEvent object’s pid instance variable to the program’s process ID.

new (event1, event2, ... event3;)

Create one or more new SignalEvent objects with the names given in the argument lists.


SignalEvent new event1;
SignalEvent new event1, event2;

nextEvent (void)

Return the next signalEvent object from the class’ pendingEvents queue.

pending (void)

Return TRUE if the class’ pendingEvents queue contains SignalEvent event objects, FALSE otherwise.

queueEvent (void)

Add the receiver to the class’ pendingEvents queue.


Up: Classes   [Index]

SignalHandler

SignalHandler Class

Class SignalHandler provides the methods that install handlers for signals from the operating system.

Applications can also define signal handlers with this class. Signal handler methods need to use the calling conventions of C functions. See Method functions.

For POSIX signals, you can use a method to set the signal number.

Signal    Method       Signal
------    ------       ------
SIGHUP    setSigHup    Termination of terminal process.
SIGINT    setSigInt    Interrupt from keyboard.
SIGQUIT   setSigQuit   Quit from keyboard.
SIGILL    setSigIll    Illegal instruction.
SIGABRT   setSigAbrt   Abort from C library abort(3).
SIGFPE    setSigFpe    Floating point exception.
SIGKILL   -            Kill process - non-catchable.
SIGSEGV   setSigSegv   Invalid memory address.
SIGPIPE   setSigPipe   Broken pipe or write to pipe with no reader.
SIGALRM   setSigAlrm   Timer signal from C library alarm(2).
SIGTERM   setSigTerm   Process termination.
SIGUSR1   setSigUsr1   User defined.
SIGUSR2   setSigUsr2   User defined.
SIGCHLD   setSigChld   Child process stopped or terminated.
SIGCONT   setSigCont   Continue stopped process.
SIGSTOP   -            Stop process - non-catchable.
SIGTSTP   setSigTstp   Stop from tty.
SIGTTIN   setSigTtin   Terminal input for background process.
SIGTTOU   setSigTtou   Terminal output from background process.

You can also set system-specific signals by number with setSigNo.

SignalHandler methods can also send SignalEvent objects to Ctalk programs. Refer to Method functions, SignalEvent, and __ctalkNewSignalEventInternal.

Internally, methods in SignalHandler class use the library functions __ctalkIgnoreSignal (), __ctalkDefaultSignalHandler (), __ctalkInstallHandler (), and __ctalkSystemSignalNumber. Signal handlers need to be reset after each usage. Refer to the timeclient.c example program.

Instance Variables

attributes

The value of attributes can be one of the following.

SIG_DEFAULT

The application uses the operating system’s default signal handler for the signal. The operating system’s documentation describes how it handles signals.

SIG_IGNORE

The application ignores the signal.

SIG_METHOD

The application provides a method to handle the signal.

handler

The value is an instance method of class SignalHandler that is provided by the application.

Instance Methods

defaultHandler (void)

Install the operating system’s default handler for the receiver’s signal number sigNo. The operating system’s documentation describes how it handles signals.

ignoreSignal (void)

Set the receiver signal handler to ignore a signal.

installHandler (OBJECT *(*method)(int))

Install method as the receiver’s signal handler. The method must be callable as a C function. See Method functions.

new (char *name)

Create new SignalHandler objects with the name(s) given in the argument list.

raiseSignal (void)

Send the signal of the receiver’s sigNo variable to the current program.

setSigAbrt (void)

Set the signal of the receiver’s handler to SIGABRT.

setSigAlrm (void)

Set the signal of the receiver’s handler to SIGALRM.

setSigChld (void)

Set the signal of the receiver’s handler to SIGCHLD.

setSigCont (void)

Set the signal of the receiver’s handler to SIGCONT.

setSigFpe (void)

Set the signal of the receiver’s handler to SIGFPE.

setSigHup (void)

Set the signal of the receiver’s handler to SIGHUP.

setSigIll (void)

Set the signal of the receiver’s handler to SIGILL.

setSigInt (void)

Set the signal of the receiver’s handler to SIGINT.

setSigNo (int signum)

Set the signal number of the receiver to signum.

setSigPipe (void)

Set the signal of the receiver’s handler to SIGPIPE.

setSigQuit (void)

Set the signal of the receiver’s handler to SIGQUIT.

setSigSegv (void)

Set the signal of the receiver’s handler to SIGSEGV.

setSigTerm (void)

Set the signal of the receiver’s handler to SIGTERM.

setSigTstp (void)

Set the signal of the receiver’s handler to SIGTSTP.

setSigTtin (void)

Set the signal of the receiver’s handler to SIGTTIN.

setSigTtou (void)

Set the signal of the receiver’s handler to SIGTTOU.

setSigUsr1 (void)

Set the signal of the receiver’s handler to SIGUSR1.

setSigUsr2 (void)

Set the signal of the receiver’s handler to SIGUSR2.

signalProcessID (int processid)

Send the signal sigNo of the receiver to process processid.

sigName (Integer signal_number)

Return a String with the name of the signal whose number is given as the argument.

sigNum (String signal_name)

Return an Integer with the value of the signal whose name is given as the argument.

waitStatus (Integer child_pid, Integerchild_return_val, Integer child_signal, Integer errno)

Checks for a change in the status of the child process given by child_pid.

The return value is an Integer with the value 0, which indicates that the child process has not changed status, an Integer equal to child_pid, or -1.

If the return value is equal to child_pid, then the processes’ return code is returned in child_return_val if the process exited normally. If the child process was terminated by an uncaught signal, the signal’s number is returned in child_signal.

If the return value is -1, the system errno is returned in errno, which indicates an error when the parent process called waitStatus.

Here is an example.


SignalHandler new s;
Integer new r, childProcessID, child_retval, child_sig,
        child_errno;

 ... do stuff ...

 r = s waitStatus childProcessID,
	child_retval, child_sig, child_errno;

 if (r == childProcessID) {
    if (child_sig) {
       printf ("Child received signal %s - exiting.\n",
		  s sigName child_sig);
	  exit (1);
    }
 }

 ... do more stuff ...

 exit (0);
 

Next: , Previous: , Up: Classes   [Index]

Expr

Expr Class

Ctalk uses objects of class Expr and its subclasses internally to represent C expressions, functions, and variables.


Up: Classes   [Index]

CFunction

CFunction Class

Ctalk uses the CFunction class internally to represent C function calls. Ctalk installs the CFunction methods library templates in CLASSLIBDIR/libc and CLASSLIBDIR/libctalk.

Note that this class does not, at this time, provide methods for all C99 library function calls. If you want to add C library templates, look at the templates in classes/libc and at the API documentation. See Templates. Refer to the README file in the Ctalk distribution for instructions on submitting source code contributions.

Class Methods

cAbs (int i)

Return the result object of an abs(3) library call.

cAcos (double d)

Return the result object of an acos(3) library call.

cAcosh (double d)

Return the result object of an acosh(3) library call.

cAscTime (struct tm *tm)

Return the result object of an asctime(3) library call. The value of tm is the result of a gmtime(3) or localtime(3) call.

cAsin (double d)

Return the result object of an asin(3) library call.

cAsinh (double d)

Return the result object of an asinh(3) library call.

cAtof (char *s)

Return the result object of an atof(3) library call.

cAtoi (char *s)

Return the result object of an atoi(3) library call.

cAtol (char *s)

Return the result object of an atol(3) library call.

cAtoll (char *s)

Return the result object of an atoll(3) library call.

cCbrt (double d)

Return the result object of a cbrt(3) library call.

cCeil (double d)

Return the result object of a ceil(3) library call.

cChdir (char *s)

Change the working directory to s. Returns 0 on success, -1 on error, and sets the system error number.

cClearErr (OBJECT * FILECLASSOBJECT)

Perform a clearerr(3) library call on the file stream of the argument.

cClock (void)

Return the result object of a clock(3) library call.

cCopySign (double d, double s)

Return the result object of a copysign(3) library call.

cCos (double d)

Return the result object of a cos(3) library call.

cCosh (double d)

Return the result object of a cosh(3) library call.

cCTime (int *t)

Return the result object of a ctime(3) library call.

Note: Because ctime(3) uses a pointer to int as its argument, arguments to cCTime should be of class Symbol. See Objects in Function Arguments.

cDiffTime (int time1, int time2)

Return the result object of a difftime(3) library call.

cErf (double d)

Return the result object of an erf(3) library call.

cErfc (double d)

Return the result object of an erfc(3) library call.

cExp (double d)

Return the result object of an exp(3) library call.

cExpm1 (double d)

Return the result object of an expm1(3) library call.

cFabs (double d)

Return the result object of a fabs(3) library call.

Note: The functions fabsf(3) and fabsl(3) functions are not supported on Solaris systems that don’t have math_c99.h. Use fabs(3) or cFabs instead.

cGetchar (void)

Return an object of class Integer from the standard input.

cGetCwd (void)

Return the current directory as a String object.

Return a String object with the result of a getenv(3) C library function call.

cGetPID (void)

Return an Integer object with the result of a getpid(3) C library function call.

cLrint (double)
cLrintf (float)
cLrintl (long double)
cLlrint (double)
cLlrint (float)
cLlrint (long double)

Return an Integer or LongInteger object that is the result of a lrint(3), lrintf(3), lrintl(3), llrint(3), llrintf(3), or llrintf(3) library call.

cStrcat (char *s1, char *s2)

Return the result of a strcat(3) library function call.

cStrcasecmp (char *s1, char *s2)

Return the result of a strcasecmp(3) library call.

cStrcmp (char *s1, char *s2)

Return the result of a strcmp(3) library call.

cStrlen (char *s)

Return the result of a strlen(3) library call.

cStrncat (char *s1, char *s2, int n)

Return the result of a strncat(3) library call.

cStrncasecmp (char *s1, char *s2, int n)

Return the result of a strncasecmp(3) library call.

cStrncmp (char *s1, char *s2, int n)

Return the result of a strncmp(3) library call.

cStrncpy (char *s1, char *s2, int n)

Return the result of a strncpy(3) library call.

cRand (void)

Return the result of a rand(3) library call.

This class is not complete. The use of C library functions is described later in this manual. See C library functions.


Next: , Previous: , Up: Classes   [Index]

Magnitude

Magnitude Class

Magnitude is the superclass of all object classes that contain quantities.

Instance Methods

! (void)

When used as a prefix operator, overloads C’s ‘!’ operator in expressions that contain objects.

* (void)

When used as a prefix operator, overloads C’s ‘*’ dereference operator and returns the first element of an int, long int, long long int, or double array as an Integer, LongInteger, or Float object.

- (void)

Overloads the unary ‘-’ prefix operator. Returns the negated value of an Integer, LongInteger, or Float, receivers.

asCharacter (void)

Return an object with the receiver’s value as a Character object.

asFloat (void)

Return the value of an Integer or LongInteger receiver as a Float object. If the receiver is a Float object, returns the receiver. For all other classes, prints a warning and returns 0.0f.

asInteger (void)

Return an object with the receiver’s value as an Integer object.

asLongInteger (void)

Return an object with the receiver’s value as a LongInteger object.


Next: , Up: Classes   [Index]

Character

Character Class

The value of Character class objects is (on most hardware platforms) an 8-bit integer corresponding to the ISO-8859-1 character set.

Character Constants

Ctalk recognizes the following escape sequences as character constants.


\a      Alert
\b      Bell
\e      Escape
\f      Form Feed
\n      New line
\r      Carraige return
\t      Horizontal tab
\v      Vertical tab
\0      NUL
\"      Literal double quote.
\'      Literal single quote.

The ‘\e’ escape sequence is an extension to the C language standard.

Ctalk itself doesn’t interpret the character constants, though - it simply recognizes that the character or escaped character can be part of a literal string or character. However, if a method encounters a constant, it should interpret the character constant based on the method’s function.

Very often a character constant’s value is enclosed in single quotes if they are part of the token’s name. Again it’s up to the method to interpret the character’s value. The Ctalk library includes the macros TRIM_CHAR() and TRIM_CHAR_BUF() that can remove the quotes from the character sequences if necessary.

Note: Ctalk does not support negative Characters (i.e., ch < 0) universally, even though C char types are “signed” by default. This is due to the uneven support in the Ctalk and C libraries for negative characters. So if you need negative values, it’s generally safer to use Integers.

Additionally, if an expression doesn’t need a separate buffer for function arguments, it can also use the CHAR_CONSTANT_VALUE macro, which returns a string with the first character pointing to the Character constant’s actual value. The argument to the macro is a C char *. Here is an example of how to store the value of a Character object in a C char.


char c;
OBJECT *self_value;

self_value = self value;

sscanf (CHAR_CONSTANT_VALUE(self_value -> __o_value), "%c", &c);

Instance Variables

value

The value of an 8-bit character in the ISO-8859-1 character set.

Instance Methods

! (void)

Return a character value of true if the receiver evaluates to zero, false otherwise.

!= (char character)

Returns true if the receiver is not equal to character.

& (char character)

Returns a bitwise AND of the receiver and the argument.

&& (char character)

Returns TRUE if both operands are TRUE, FALSE otherwise.

* (char c)

Multiply the receiver and the operand. The result is a Character object.

*= (char c)

Multiply the receiver by the operand, and return the receiver.

+ (char c)

Add the receiver and the operand. The result is a Character object.

++ (void)

The prefix and postfix increment operators for Character objects.

+= (char c)

Add the operand to the receiver and the operand and return the receiver.

- (char c)

Subtract the receiver and the operand. The result is a Character object.

-- (void)

The prefix and postfix decrement operators for Character objects.

-= (char c)

Subtract the operand from the receiver and return the receiver.

/ (char c)

Divide the receiver and the operand. The result is a Character object.

/= (char c)

Divide the receiver by the operand and return the receiver.

< (char character)

Returns TRUE if the receiver is less than the operand, FALSE otherwise.

<< (int i)

Shift the receiver left by the number of bits in the operand, which must be an Integer.

<= (char character)

Returns TRUE if the receiver is less than or equal to the operand, FALSE otherwise.

= (char character)

Set the value of the receiver object to character.

> (char character)

Returns TRUE if the receiver is greater than the operand, FALSE otherwise.

>> (int i)

Shift the receiver right by the number of bits in the operand, which must be an Integer.

>= (char character)

Returns TRUE if the receiver is greater than or equal to the operand, FALSE otherwise.

== (char character)

Returns true if the receiver is equal to character.

^ (char character)

Returns a bitwise XOR of the receiver and the argument.

Returns a Character object that is the bitwise complement of the receiver. This method simply calls bitComp, below.

bitComp (void)

Perform a bitwise complement of the receiver.

invert (void)

Returns TRUE if the receiver evaluates to FALSE, FALSE if the receiver evaluates to TRUE.

isASCII (void)

Returns TRUE if the receiver is a 7-bit ASCII character ‘0-127’, FALSE otherwise.

isAlNum (void)

Returns TRUE if the receiver is an alphanumeric character ‘0-9’, ‘A-Z’, ‘a-z’, FALSE otherwise.

isAlpha (void)

Returns TRUE if the receiver is an alphabetic character ‘A-Z’, ‘a-z’, FALSE otherwise.

isBlank (void)

Returns TRUE if the receiver is a space ‘ ’ or horizontal tab ‘\t’ character, FALSE otherwise.

isCntrl (void)

Returns TRUE if the receiver is a control character, FALSE otherwise.

isDigit (void)

Returns TRUE if the receiver is a character ‘0-9’, FALSE otherwise.

isGraph(void)

Returns TRUE if the receiver is any character except a space, FALSE otherwise.

isLower (void)

Returns TRUE if the receiver is a lower case character, FALSE otherwise.

isPrint (void)

Returns TRUE if the receiver is a printable character, FALSE otherwise.

isPunct (void)

Returns TRUE if the receiver is a printable non-alphanumeric character, FALSE otherwise.

isSpace (void)

Returns TRUE if the receiver is a space, horizontal tab (\t), newline (\n), vertical tab (\v), form feed (\f), or carriage return (\r) character, FALSE otherwise.

isUpper (void)

Returns TRUE if the receiver is an upper case letter, FALSE otherwise.

isXDigit (void)

Returns TRUE if the receiver is a character ‘0-9’, ‘a-f’, or ‘A-F’, FALSE otherwise.

toLower (void)

If the receiver is an upper case letter, returns the lower case version.

toUpper (void)

If the receiver is a lower case letter, returns the upper case version.

| (char character)

Returns a bitwise OR of the receiver and the argument.

|| (char character)

Returns TRUE if either operand is TRUE, FALSE otherwise.


Up: Classes   [Index]

String

String Class

Objects of String class contain arrays of ASCII characters. The value of a String object is similar to the C language organization of strings as a NUL terminated array of char values.

In most cases, String objects can be used like a collection of Character objects. The overloaded operators ++, --, +, and -, all work similarly to the operators in List or AssociativeArray objects.

Some of String classes’ methods add semantics to operators, like the += method, which behaves differently depending on whether its argument is another String object, or an Integer object.


myString = "Hello, ";    /* The resulting value is, */
myString += "world!";    /* "Hello, world!"         */

myString = "Hello, ";    /* The resulting value is, */
myString += 3;           /* "lo, "                  */

The main exception to this is the map method, which doesn’t allow incrementing self within an argument block. This is because String objects don’t use Key objects internally to order a String object’s individual Character objects. If it’s necessary to treat a String object as a collection, the asList method will organize the receiver String into a List of Character objects.

Conversely, Array and List classes contain the asString method, which translates an Array or List into a String object.

In addition, methods like matchRegex, =~, and !~ can accept as arguments strings that contain regular expression metacharacters and use them to perform regular expression matches on the receiver String. See Pattern Matching.

Instance Variables

value

The value is a pointer to the character string.

Instance Methods

* (void)

When used as a prefix operator, overloads C’s ‘*’ dereference operator and returns the first element of the receiver, a Character object.

= (char *s)

Set the value of the receiver object to s.

== (char *s)

Return TRUE if s and the receiver are identical, FALSE otherwise.

=~ (char *pattern)

Returns a Boolean value of true if the receiver contains the regular expression pattern, false otherwise. See Pattern Matching.

!~ (char *pattern)

Returns a Boolean value of false if the receiver does not contain the argument, pattern, which may contain regular expression metacharacters. See Pattern Matching.

!= (char *s)

Return FALSE if s and the receiver are not identical, TRUE otherwise.

!= (char *s)

Return FALSE if s and the receiver are not identical, TRUE otherwise.

+ (String s)
+ (Integer i)

If the argument is a String, concatenate the receiver and s and return the new String. If the argument is an Integer, return a reference to the receiver plus i.

++ (void)

Increment the value of the receiver as a char *. This method uses __ctalkIncStringRef () to handle the pointer math.

In other words, this method effectively sets the receiver String's value from, for example, ‘Hello, world!’ to ‘ello, world!’. If the receiver is incremented to the end of its contents, then its value is NULL.

+= (String s)
+= (Integer i)

If the argument is an Integer, increment the reference to the receiver by that amount. If the argument is a String or any other class, concatenate the argument to the receiver and return the receiver, formatting it as a string first if necessary.

- (Integer i)

Return a reference to the receiver String minus i. If the reference is before the start of the string, return NULL. That means the method is only effective after a call to ++ or a similar method.


String new str;

str = "Hello, world!";

str += 1;

printf ("%s\n", str);    /* Prints, "ello, world!" */

--str;

printf ("%s\n", str);    /* Prints, "Hello, world!" */


-- (void)

Decrement the value of the receiver as a char *. The effect is the converse of ++, above. The method doesn’t decrement the reference so that it points before the beginning of the String object’s contents. That means, like - above, the method only returns a pointer to somewhere in the receiver’s value after a previous call to ++ or a similar method. For example,


String new str;

str = "Hello, world!";

++str;

printf ("%s\n", str);    /* Prints, "ello, world!" */

--str;

printf ("%s\n", str);    /* Prints, "Hello, world!" */


-= (Integer i)

If the argument is an Integer, decrement the reference to the receiver’s value by the amount given as the argument, an Integer. Like the other methods that decrement the reference to the receiver’s value, the program must first have incremented it further than the start of the string.

asExpanded (void)

Return the expanded directory path for a directory glob pattern contained in the receiver.

asInteger (void)

Return an Integer object with the value of the receiver.

asList (List newList)

Store each character of the receiver String as Character object members of newList.

at (int index)

Return the character at index. The first character of the string is at index 0. If index is greater than the length of the string, return ‘NULL’.

atPut (int n, char c)

Replace the n’th character of the receiver with c. Has no effect and returns NULL if n is greater than the length of the receiver.

The atPut method interprets the following character sequences (with their ASCII values)


Sequence   ASCII Value
\0         0
\a         7
\b         7
\n         10
\e         27
\f         10
\r         13
\t         9
\v         11

The ‘\e’ escape sequence is an extension to the C language standard.

The method returns the receiver (with the new value) if successful.

You should note that the method does not do any conversion of the argument; that is, if c isn’t a Character object, then the results are probably not going to be what you want. For example, if you try to store an Integer in a String, like this:


myInt = 1;

myString atPut 0, myInt + '0';

The results aren’t going to be what you want; adding ASCII ‘'0'doesn’t convert myInt to a Character object. You still need to use the asCharacter method from Magnitude class to create a Character object, as in this example.


myInt = 1;

myString atPut 0, (myInt + '0') asCharacter;

The parentheses in the second argument are necessary; otherwise, asCharacter would use ‘'0'’ as its receiver because asCharacter, which is a method message, has a higher precedence than ‘+’. Instead, asCharacter's receiver should be the value of ‘myInt + '0'’, so we enclose the first part expression in parentheses so it gets evaluated first.

callStackTrace (void)

Print a call stack trace.

charPos (char c)

Return an Integer with the position of c in the receiver. Returns an Integer between 0 (the first character) and the receiver’s length, minus one (the last character). If the receiver does not contain c, returns -1.

charPosR (char c)

Return an Integer with the position of the last occurence of c in the receiver. Returns an Integer between 0 (the first character) and the receiver’s length, minus one (the last character). If the receiver does not contain c, returns -1.

chomp (void)

Removes a trailing newline character (‘\n’) if the receiver contains one. Named after Perl’s very useful string trimming function.

consoleReadLine (String promptStr)

Print the promptStr on the terminal and wait for the user to enter a line of text. If Ctalk is built with the GNU readline libraries, adds readline’s standard line editing and command history facilities. In that case, Ctalk also defines the HAVE_GNU_READLINE preprocessor definition to ‘1’. You can build Ctalk with or without readline; see the options to ./configure for further information.

Here is a sample program that shows how to use consoleReadLine.

int main (int argc, char **argv)    String new s;
  String new promptStr;

  if (argc > 1)
    promptStr = argv[1];
  else
    promptStr = "Prompt ";

  printf ("Readline test.  Type ^C or, \"quit,\" to exit.\n");
#if HAVE_GNU_READLINE
  printf ("Ctalk built with GNU Readline Support.\n");
#else
  printf ("Ctalk built without GNU Readline Support.\n");
#endif
  while (1)      s consoleReadLine promptStr;
    printf ("You typed (or recalled), \"%s.\"\n", s);
    /*
     *  Matches both, "quit," and, "quit\n."
     */
    if (s match "quit")
      break;
  }
}
contains (String pattern)
contains (String pattern, Integer starting_offset)

Returns a Boolean value of True if the receiver string contains an exact match of the text in pattern, False otherwise.

With a second argument n, an Integer, the method begins its search from the n’th character in the receiver string.

envVarExists (char *envVarName)

Test for the presence of an environment variable. Return TRUE if the variable exists, FALSE otherwise.

eval (void)

Evaluate the content of the receiver String’s value as if it were an argument to eval.

getEnv (char *envVarName)

Return the value of environment variable envVarName as the value of the receiver, or (null). Note that this method generates an internal exception of the environment variable does not exist. To test for the presence of an environment variable without generation an exception, see envVarExists, above.

getRS (void)

Returns a Character with the current record separator.

The record separator determines whether the regular expression metacharacters ‘^’ and ‘$’ recognize line endings. The default value of the record separator is a newline ‘\n’ character, which means that a ‘^’ character will match an expression at the start of a string, or starting at the beginning of a text line. Likewise, a ‘$’ metacharacter matches both the end of a line and the end of the string.

To match only at the beginning and end of the string, set the record separator to a NUL character (‘\0’). See Pattern Matching.

isXLFD (void)

Returns a Boolean value of True if the receiver is a XLFD font descriptor, False otherwise. For more information about font selection, refer to the X11Font class See X11Font, and the X11FreeTypeFont class See X11FreeTypeFont.

length (void)

Return an object of class Integer with the length of the receiver in characters.

map (OBJECT *(*method)())

Execute method, an instance method of class String, for each character of the receiver object. For example,


String instanceMethod printSpaceChar (void) {
  printf (" %c", self);  /* Here, for each call to the printSpaceChar
                             method, "self" is each of myString's
                             successive characters. */
}

int main () {

  String new myString;

  myString = "Hello, world!";

  myString map printSpaceChar;

  printf ("\n");
}

The argument to map can also be a code block:


int main () {

  String new myString;

  myString = "Hello, world!";

  myString map {
    printf (" %c", self);
  }

  printf ("\n");
}

match (char *pattern)

Returns TRUE if pattern matches the receiver String regardless of case, false otherwise. Both match and matchCase, below, are being superceded by matchRegex and quickSearch, also below.

matchAt (Integer idx)

Returns the text of the idx’th parenthesized match resulting from a previous call to matchRegex, =~, or !~. See Pattern Matching.

matchCase (char *pattern)

Returns TRUE if pattern matches the receiver case- sensitively, false otherwise. Like match, above, matchCase is being superceded by matchRegex and quickSearch, below.

matchIndexAt (Integer idx)

Returns the character position in the receiver String of the idx’th parenthesized match resulting from a previous call to matchRegex, =~, or !~. See Pattern Matching.

matchLength (void)

Returns the length of a regular expression match from the previous call to the matchRegex method, below.

matchRegex (String pattern, Array offsets)

Searches the receiver, a String object, for all occurrences of pattern. The matchRegex method places the positions of the matches in the offsets array, and returns an Integer that contains the number of matches. See Pattern Matching.

The quickSearch method, below, matches exact text only, but it uses a much faster search algorithm.

nMatches (void)

Returns an Integer with the number matches from the last call to the matchRegex method.

printMatchToks (Integer yesNo)

If the argument is non-zero, print the tokens of regular expression patterns and the matching text after each regular expression match. This can be useful when debugging regular expressions. See DebugPattern.

printOn (char *fmt, ...)

Format and print the method’s arguments to the receiver.

quickSearch (String pattern, Array offsets)

Searches the receiver, a String object, for all occurrences of pattern. The quickSearch method places the positions of the matches in the offsets array, and returns an Integer that contains the number of matches.

Unlike matchRegex, above, quickSearch matches exact text only, but it uses a much faster search algorithm.

readFormat (char *fmt, ...)

Scan the receiver into the arguments, using fmt.

search (String pattern, Array offsets)

This method is a synonym for matchRegex, above, and is here for backward compatibility.

setRS (char record_separator_char)

Sets the current application’s record separator character, which determines how regular expression metacharacters match line endings, among other uses. See RecordSeparator. See Pattern Matching.

split (char delimiter, char ** resultArray)

Split the receiver at each occurrence of delimiter, and save the result in resultArray. The delimiter argument can be either a Character object or a String object. If delimiter is a String, it uses Ctalk’s pattern matching library to match the delimiter string. See Pattern Matching.

However, the pattern matching library only records the length of the last match, so if you use a pattern like ‘" *"’ then the results may be inaccurate if all of the delimiters are not the same length.

subString (int index, int length)

Return the substring of the receiver of length characters beginning at index. String indexes start at 0. If index + length is greater than the length of the receiver, return the substring from index to the end of the receiver.

sysErrnoStr (void)

Sets the receiver’s value to the text message of the last system error (the value of errno(3)).

tokenize (List tokens)

Splits the receiver String at each whitespace character or characters (spaces, horizontal and vertical tabs, or newlines) and pushes each non-whitespace set of characters (words, numbers, and miscellaneous punctuation) onto the List given as the argument. The method uses ispunct(3) to separate punctuation, except for ‘_’ characters, which are used in labels.

Note that this method can generate lists with hundreds or even thousands of tokens, so you need to take care with large (or even medium sized) input Strings as receivers.

tokenizeLine (List tokens)

Similar to tokenize, above. This method also treats newline characters as tokens, which makes it easier to parse input that relies on newlines (for example, C++ style comments, preprocessor directives, and some types of text files).

vPrintOn (Stringcalling_methods_fmt_arg)

This function formats the variable arguments of its calling method on the receiver String object.

The argument is the format argument of the calling method. When vPrintOn is called, it uses the argument as the start of the caller’s variable argument list.

Here is an example of vPrintOn's use.


Object instanceMethod myPrint (String fmt, ...) {
  String new s;
  s vPrintOn fmt;
  return s;
}

int main () {
  Object new obj;
  Integer new i;
  String new str;

  i = 5;

  str = obj myPrint "Hello, world no. %d", i;

  printf ("%s\n", str);
}

writeFormat (char *fmt,...)

Write the formatted arguments using fmt to the receiver. Note that Ctalk stores scalar types as formatted strings. See Variable arguments.

String Searching and Pattern Matching

String class defines a number of methods for searching and matching String objects. The matchRegex method recognizes some basic metacharacters to provide regular expression search capabilities. The quickSearch method searches String objects for exact text patterns, but it uses a much faster search algorithm.

The operators, =~ and !~ return true or false depending on whether the receiver contains the pattern given as the argument. If the argument contains metacharacters, then Ctalk conducts a regular expression search; otherwise, it tries to match (or not match, in the case of !~) the receiver and the pattern exactly.

If you want more thorough information about the search, the matchRegex and quickSearch methods allow an additional argument after the text pattern: an Array object that the methods use to return the character positions of the matches within the receiver. After the method is finished searching, the second argument contains the position of the first character wherever the text pattern matched text in the receiver. The last offset is ‘-1’, indicating that there are no further matches. The methods also return an Integer object that contains the number of matches.

Here is an example from LibrarySearch class that contains the additional ‘offsets’ argument.


if ((inputLine match KEYPAT) && 
       (inputLine matchRegex (pattern, offsets) != 0)) {

...

}

Searches can provide even more information than this, however. Pattern strings may contain backreferences, which save the text and position of any of the receiver string’s matched text that the program needs. The sections just below describe backreferences in detail.

All of these methods (except quickSearch) recognize a few regular expression metacharacters. They are:

.

Matches any single character.

^

Matches text at the beginning of the receiver String's text.

$

Matches text at the end of the receiver String's text, or the end of a line (that is, the character before a ‘\n’ or ‘\r’ newline character).

*

Matches zero or more occurrences of the character or expression it follows.

+

Matches one or more occurences of the character or expression it follows.

?

Matches zero or one occurrence of the character or expression it follows.

\

Escapes the next character so it is interpreted literally; e.g., the sequence ‘\*’ is interpreted as a literal asterisk. Because Ctalk’s lexical analysis also performs the same task, so if you want a backslash to appear in a pattern, you need to type, ‘\\’, for example,


myPat = "\\*";   /* The '\\' tells Ctalk's lexer that we really
                    want a '\' to appear in the pattern string,
                    so it will still be there when we use myPat
                    as a regular expression. */

However, Ctalk also recognizes patterns, which only need to be evaluated by the regular expression parser. Patterns do not get checked immediately for things like for balanced quotes and ASCII escape sequences; instead, they get evaluated by the regular expression parser when the program actually tries to perform some pattern matching. Otherwise, patterns are identical to Strings. Expressed as a pattern, myPat in the example above would look like this.


myPat = /\*/;

Pattern strings are described in their own section, below. See Pattern Strings.

(
)

Begin and end a match reference (i.e., a backreference). Matched text between ‘(’ and ‘)’ is saved, along with its position in the receiver String, and can be retrieved with subsequent calls to the matchAt and matchIndexAt methods. The match information is saved until the program performs another pattern match.

\W
\d
\p
\w
\l

In patterns, these escape sequences match characters of different types. The escape sequences have the following meanings.


Character Class      Matches
---------------      ------
\W                   'Word' Characters (A-Z, a-z)
\d                   Decimal Digits (0-9)
\w                   White Space (space, \t, \n, \f, \v)
\p                   Punctuation (Any other character.)
\l                   'Label' Characters (A-Z, a-z, 0-9, and _)
\x                   Hexadecimal Digits (0-9, a-f, A-F, x, and X)

The following program contains a pattern that looks for alphabetic characters, punctuation, and whitespace.


int main (int argc, char **argv) {
  String new str;

  str = "Hello, world!";

  if (str =~ /e(\W*\p\w*\W)/) {
    printf ("match - %s\n", str matchAt 0);
  }
}

When run, the expression,


str =~ /e(\W*\p\w*\W)/

Produces the following output.


match - llo, w

|

Matches either of the expressions on each side of the ‘|’. The expressions may be either a character expression, or a set of characters enclosed in parentheses. Here are some examples of alternate patterns.

a|b
a*|b*
a+|b+
\W+|\d+
(ab)|(cd)

When matching alternate expressions, using ‘*’ in the expressions can produce unexpected results because a ‘*’ can provide a zero-length match, and the ‘|’ metacharacter is most useful when there is some text to be matched.

If one or both expressions are enclosed in parentheses, then the expression that matches is treated as a backreference, and the program can retrieve the match information with the matchAt and matchIndexAt methods.

The following example shows how to use some of the matching featues in an actual program. This program saves the first non-label character (either a space or parenthesis) of a function declaration, and its position, so we can retrieve the function name and display it separately.


int main (argc, argv) {
  String new text, pattern, fn_name;
  List new fn_list;

  fn_list = "strlen ()", "strcat(char *)", "strncpy (char *)",
    "stat (char *, struct stat *)";

  /* Match the first non-label character: either a space or a
     parenthesis.  The double backslashes cause the content of
     'pattern' (after the normal lexical analysis for the string) to
     be,
     
       "( *)\("

     So the regular expression parser can check for a backslashed
     opening parenthesis (i.e., a literal '(', not another
     backreference delimiter).
  */

  pattern = "( *)\\(";

  fn_list map {
    if (self =~ pattern) {
      printf ("Matched text: \"%s\" at index: %d\n",
	      self matchAt 0, self matchIndexAt 0);
      fn_name = self subString 0, self matchIndexAt 0;
      printf ("Function name: %s\n", fn_name);
    }
  }

  return 0;
}

When run, the program should produce results like this.


Matched text: " " at index: 6
Function name: strlen
Matched text: "" at index: 6
Function name: strcat
Matched text: " " at index: 7
Function name: strncpy
Matched text: " " at index: 4
Function name: stat

Note that the first backreference is numbered ‘0’, in the expression ‘self matchAt 0’. If there were another set of (unescaped) parentheses in pattern, then its text would be refered to as ‘self matchAt 1’.

You should also note that the second function match saved an empty string. That’s because the text that the backreferenced pattern referred to resulted in a zero-length match. That’s because ‘*’ metacharacters can refer to zero or more occurrences of the character that precedes it.

The program could also use the charPos method to look for the ‘ ’ and/or ‘(’ characters, but using a regular expression gives us information about which non-label character appears first more efficiently.

Here’s another example. The pattern contains only one set of parentheses, but Ctalk saves a match reference every time the pattern matches characters in the target string.


int main () {
  String new string, pattern;
  Array new offsets;
  Integer new nMatches, i;

  pattern = "(l*o)";
  string = "Hello, world! Hello, world, Hello, world!";
  
  nMatches = string matchRegex pattern, offsets;

  printf ("nMatches: %d\n", nMatches);
  offsets map {
    printf ("%d\n", self);
  }
  for (i = 0; i < nMatches; ++i) {
    printf ("%s\n", string matchAt i);
  }
}

When run, the program produces output like this.


nMatches: 6
2
8
16
22
30
36
-1
llo
o
llo
o
llo
o

The character classes match anywhere they find text in a target string, including control characters like ‘\n’ and ‘\f’, regardless of the record separator character. For a brief example, refer to the section, The Record Separator Character, below.

This example matches one of two patterns joined by a ‘|’ metacharacter.


int main () {
  String new s, pat;
  Array new matches;
  Integer new n_matches, n_th_match;

  pat = "-(mo)|(ho)use";

  s = "-mouse-house-";

  n_matches = s matchRegex pat, matches;

  for (n_th_match = 0; n_th_match < n_matches; ++n_th_match) {
    printf ("Match %d. Matched %s at character index %ld.\n",
	    n_th_match, s matchAt n_th_match, s matchIndexAt n_th_match);
  }

  matches delete;

}

When run, the program should produce output like this.


Match 0. Matched mo at character index 0.
Match 1. Matched ho at character index 6.

You should note that if a pattern in a backreference results in a zero length match, then that backreference contains a zero length string. While not incorrect, it can produce confusing results when examining matched text. The following program shows one way to indicate a zero-length backreference. It prints the string ‘(null)’ whenever a backreference contains a zero-length string.


int main () {
  String new s;
  String new pat;
  Integer new n_matches;
  Array new offsets;
  Integer new i;

  s = "1.mobile 2mobile mobile";
  pat = "(\\d\\p)?m";
  
  n_matches = s matchRegex pat, offsets;
  
  for (i = 0; i < n_matches; ++i) {
    printf ("%Ld\n", offsets at i);
  }

  for (i = 0; i < n_matches; ++i) {
    if ((s matchAt i) length == 0) {
      printf ("%d: %s\n", s matchIndexAt i, "(null)");
    } else {
      printf ("%d: %s\n", s matchIndexAt i, s matchAt i);
    }
  }
}

When run, the program should produce output that looks like this.


0
10
17
0: 1.
17: (null)
22: (null)

Pattern Strings

When writing a regular expression, it’s necessary to take into account all of the processing that String objects encounter when they are evaluated, before they reach the Ctalk library’s regular expression parser. To help facilitate lexical analysis and parsing, Ctalk also provides pattern strings, which allow Ctalk to defer the evaluation of a pattern until the regular expression parser actually performs the text matching.

Ctalk also provides operators that provide shorthand methods to match patterns with text, the =~ and !~ operators.

Pattern constants at this time may only follow the =~ and !~ operators, but you can use the matchAt and matchIndexAt, and nMatches methods to retrieve the match information. You must, as with Strings that are used as patterns, enclose the pattern in ‘(’ and ‘)’ metacharacters in order to create a backreference.

Here is a simple string matching program that matches text against a pattern constant.


int main () {

  String new s;
  Integer new n_offsets;
  Integer new i;
  
  s = "Hello?";

  if (s =~ /(o\?)/) {
    printf ("match\n");
    i = 0;
    n_offsets = s nMatches;
    while (i < n_offsets) {
      printf ("%d: %s\n", s matchIndexAt i, s matchAt i);
      ++i;
    }
  }
}

The most obvious example of how a pattern provides an advantage for text matching is when writing backslash escapes. To make a backslash appear in a pattern string, you need to write at least two backslashes in order for a backslash to appear when it’s needed to escape the following character. If you want to match an escaped backslash, then you need to write at least four backslashes.


String         Pattern
"\\*"          /\*/        # Matches a literal '*'.
"\\\\*"        /\\*/       # Matches the expression '\*'.

To create a pattern, you delimit the characters of the pattern with slashes (‘//’) instead of double quotes. Other delimiters can signify patterns also if the pattern starts with a ‘m’ character, followed by the delimiter character, which must be non-alphanumeric.


String         Pattern     Alternate Pattern
"\\*"          /\*/        m|\*|
"\\\\*"        /\\*/       m|\\*|

There is no single rule that governs how often String objects are evaluated when a program runs. So writing patterns helps take some of the work out of testing an application’s pattern matching routines.

Debugging Pattern Matches

Ctalk allows you to view the parsed pattern tokens, and the text that each token matches. Token printing is enabled using the printMatchToks method, like this.


myString printMatchToks TRUE;

When token printing is enabled, then Ctalk’s pattern matching routines print the tokens of the pattern and the text that each token matches after every pattern match attempt.

If we have a program like the following:


int main () {

  String new s;

  s printMatchToks TRUE;

  s = "192.168.0.1";

  if (s =~ /\d+\.(\d+)\.\d+\.\d+/) {
    printf ("match!\n");
  }

}

Then, when this program is run with token printing enabled, the output should look similar to this.


joeuser@myhost:~$ ./mypatprogram 
PATTERN: /\d+\.(\d+)\.\d+\.\d+/         TEXT: "192.168.0.1"
TOK: d+         (character class)               MATCH: "192"
TOK: .          (literal character)             MATCH: "."
TOK: (          (backreference start)           MATCH: ""
TOK: d+         (character class)               MATCH: "168"
TOK: )          (backreference end)             MATCH: ""
TOK: .          (literal character)             MATCH: "."
TOK: d+         (character class)               MATCH: "0"
TOK: .          (literal character)             MATCH: "."
TOK: d+         (character class)               MATCH: "1"
match!
joeuser@myhost:~$ 

The processed token text is followed by any attributes that the regular expression parser finds (for example, then a pattern like ‘\d+’ becomes the token ‘d+’ with the attribute of a character class identifier, or the ‘(’ and ‘)’ characters’ backreference attributes). Then, finally, the library prints the text that matches each token.

Successful matches have text matched by each token in the pattern (except for zero-length metacharacters like ‘(’, ‘)’, ‘^’, or ‘$’).

Unsuccessful matches, however, may display text that matches where you don’t expect it. That’s because the regular expression parser scans along the entire length of the text, trying to match the first pattern token, then the second pattern token, and so on.

Although this doesn’t always pinpoint the exact place that a match first failed, it can provide a roadmap to help build a complex pattern from simpler, perhaps single-metachar patterns, which shows what the regular expression parser is doing internally.

The Record Separator Character

Ctalk uses a record separator character to determine how the metacharacters ‘^’ and ‘$’ match line endings, among other uses.

The default record separator character is a newline (‘\n’). In this case a ‘^’ metacharacter in an expression matches the beginning of a string as well as the character(s) immediately following a newline. Similarly, a ‘$’ metacharacter anchors a match to the characters at the end of a line and at the end of a string.

Setting the record separator character to NUL (‘\0’) causes ‘^’ and ‘$’ to match only the beginning and the end of a string.

Here is an example that prints the string indexes of matches with the default newline record separator and with a NUL record separator character.

When the record separator is ‘'\n'’, the ‘$’ metacharacter in our pattern matches the text immediately before a ‘\n’ character, as well as the text at the end of the string.


int main () {

  String new s;
  Integer new n_indexes;
  Array new match_indexes;
  String new pattern;
  
  printf ("\tMatch Indexes\n");

  /* Begin with the default record separator ('\n'). */

  s = "Hello, world!\nHello, wo\nHello, wo";
  pattern = "wo$";
  n_indexes = s matchRegex pattern, match_indexes;

  printf ("With newline record separator:\n");
  match_indexes map {
    printf ("%d\n", self);
  }

  s setRS '\0';   /* Set the record separator to NUL ('\0'). */

  match_indexes delete; /* Remember to start with an empty Array again. */

  n_indexes = s matchRegex pattern, match_indexes;

  printf ("With NUL record separator:\n");
  match_indexes map {
    printf ("%d\n", self);
  }
}

When run, the program should produce output like this.


        Match Indexes
With newline record separator:
21
31
-1
With NUL record separator:
31
-1

Likewise, a ‘^’ metacharacter matches text immediately after the ‘\n’ record separator, or at the beginning of a string.

It’s also possible, though, to match newlines (and other ASCII escape characters) in patterns, either with a character class match, or by adding the escape sequence to the pattern. To do that, the program should use a double backslash with the ASCII escape sequence, as with the newline escape sequence in this example.


int main () {
  String new s;

  s = "Hello,\nworld!";

  if (s =~ /(\W\p\\n)/)
    printf ("%s\n", s matchAt 0);
  
}


Next: , Previous: , Up: Classes   [Index]

Float

Float Class

Objects of Float class represent double precision, floating point numbers.

Instance Variables

value

The value is the formatted representation of a double precision floating point number.

Instance Methods

&& (double d)

Return an Integer that evaluates to TRUE if both operands are TRUE, FALSE otherwise.

= (double d)

Set the value of the receiver object to d.

+ (double d)

Add d to the receiver.

+= (double d)

Add d to the receiver’s value. Set the receiver to the new value, and return the receiver.

- (void)
- (double d)

Subtract d from the receiver. When used as a prefix operator, negate the receiver.

-= (double d)

Subtract d from the receiver’s value. Set the receiver to the new value, and return the receiver.

* (double d)

Multiply the receiver by d.

*= (double d)

Multiply d by the receiver’s value. Set the receiver to the new value, and return the receiver.

* (double d)

Divide the receiver by d.

/= (double d)

Divide d by the receiver’s value. Set the receiver to the new value, and return the receiver.

< (double d)

Return an Integer that evaluates to TRUE if the receiver is less than the argument, FALSE otherwise.

<= (double d)

Return an Integer that evaluates to TRUE if the receiver is less than or equal to the argument, FALSE otherwise.

> (double d)

Return an Integer that evaluates to TRUE if the receiver is greater than the argument, FALSE otherwise.

>= (double d)

Return an Integer that evaluates to TRUE if the receiver is greater than or equal to the argument, FALSE otherwise.

asInteger (void)

Return the integer portion of the receiver.

|| (double d)

Return an Integer that evaluates to TRUE if either operand is TRUE, FALSE otherwise.


Next: , Previous: , Up: Classes   [Index]

Integer

Integer Class

Objects of Integer class represent signed and unsigned integers of the C types int and long int.

Instance Variables

value

The value is the formatted representation of the receiver.

Instance Methods

!= (int i)

Return TRUE if the receiver and the argument are not equal, FALSE otherwise.

& (int i)

As a binary operator, perform a bitwise and of the receiver and the argument. The Object class’s & method overloads C’s unary “address of” prefix operator. See Object.

% (int i)

Return an Integer that is the modulus of the receiver and the argument.

%= (int i)

Perform a modulus of the receiver and its argument, and store the result in the receiver. Returns the receiver.

&& (int i)

Return TRUE if the receiver and the argument evaluate to TRUE.

&= (Integer i)

Perform a bitwise and of the receiver and the argument, and assign the result to the receiver.

+ (int i)

Add i and the receiver, as in this example.

++ (void)

Postfix and prefix increment operators for Integer objects.

+= (int arg)

Add the value of arg to the receiver.

- (int i)

Subtract i from the receiver.

- (void)

When used as a unary minus prefix operator, negate the expression.

-- (void)

Postfix and prefix decrement operators for Integer objects.

-= (Integer arg)

Subtract the value of arg from the receiver.

* (int i)

Multiply the receiver by i.

*= (int arg)

Multiply the receiver by arg.

/ (int i)

Divide the receiver by i.

/= (int arg)

Divide the receiver by arg.

< (int i)

Return TRUE if the receiver is less than the argument, FALSE otherwise.

<< (int i)

Perform an arithmetic left shift on the receiver by the number of bits in the argument.

<= (int i)

Return TRUE if the receiver is less than or equal to the argument, FALSE otherwise.

= (int i)

Set the value of the receiver object to i. Also checks for Symbol pointer contexts and other aliases.

intObject = 2;

resultInt = intObject + intObject;
== (int i)

Return TRUE if the receiver and the argument are equal, FALSE otherwise.

> (int i)

Return TRUE if the receiver is greater than the argument, FALSE otherwise.

>= (int i)

Return TRUE if the receiver is greater than or equal to the argument, FALSE otherwise.

>> (int i)

Perform an arithmetic right shift on the receiver by the number of bits in the argument.

^ (int i)

Return the result of a bitwise xor of the receiver and its argument.

^= (int i)

Preform a bitwise xor of the receiver with its argument, and assign the value to the receiver. Returns the receiver.

bitComp (int i)

Return the bitwise complement of the receiver.

invert (void)

Return TRUE if the receiver evaluates to FALSE, FALSE if the receiver evaluates to TRUE.

| (int i)

Perform a bitwise or of the receiver and the argument.

|= (Integer i)

Perform a bitwise or of the receiver and the argument, and assign the result to the receiver.

|| (int i)

Return TRUE if either the receiver or the argument, or both, evaluate to TRUE.

^ (int i)

Perform a bitwise exclusive or of the receiver and the argument.

Returns a String formatted as a decimal or hexadecimal integer. The asString method is a synonym for asDecimalString.

~ (void)

When used to overload C’s ‘~’ operator, is synonymous with the bitComp method, above.


Next: , Previous: , Up: Classes   [Index]

CTime

CTime Class

Objects of CTime class represent the system’s UTC clock which measures time in seconds since 1900. This class also implements the methods that convert UTC time into calendar time.

The return value of the methods gmTime and localTime is an Array that contains the following values.

returnArray at 0    Seconds (0... 59)
returnArray at 1    Minutes (0... 59)
returnArray at 2    Hours (0... 23)
returnArray at 3    Day of the Month (1... 31)
returnArray at 4    Month (0... 11)
returnArray at 5    Year (Number of years since 1900.)
returnArray at 6    Day of the Week (0 = Sunday ... 6 = Saturday)
returnArray at 7    Day of the Year (1... 365)
returnArray at 8    > 0 = Daylight Savings Time; 0 = Standard Time; 
                    < 0 = Not Available

Instance Methods

cTime (void)

Returns a formatted String with the date and time of the receiver.

The return String of a cTime call is formatted as in this example.

"Sun Jan 6 13:04:00 2008\n" 
gmTime (void)

Returns an Array with the values described above for the current Greenwich Mean Time.

haveDST (void)

Return an Integer that evaluates to True if the system provides daylight savings time information, False otherwise.

isAM (void)

Returns an Integer that evaluates to True or False depending on whether the local time is a.m. or p.m.

localTime (void)

Returns an Array with the values described above for the current local time.

timeZoneName (void)

Return a String with the name of the time zone provided by the system.

timeZoneOffset (void)

Return an Integer with the time zone offset in seconds from GMT. Not all systems provide this information.

utcTime (void)

Return an Integer object containing the current UTC time.


Next: , Previous: , Up: Classes   [Index]

CalendarTime

CalendarTime Class

CalendarTime class provides instance variables for elements of a broken-down clock and calendar UTC time: seconds, minutes, hours, day of the month, and so on. The methods in this class might be more convenient in many cases than their functional equivalents in CTime class.

All of the methods in this class expect that the receiver has made a previous call to getUTCTime (which is defined in CTime class). The getUTCTime method fills in the receiver’s value with the UTC seconds since the epoch. See CTime.

The localTime and gmTime methods contain calls to the system’s localtime(3) and gmtime(3) library functions (or localtime_r and gmtime_r). These manual pages provide more information about how the system translates seconds since 1900 into a local time zone’s calendar time, or UTC calendar time.

This brief example prints an ISO-format date and time string.


int main () {
  CalendarTime new ct;

  ct utcTime;
  ct localTime;
  printf ("%s\n", ct isoTimeString);
}

Instance Variables

seconds
minutes
hours
dom
month
year
dow
doy

Integers that contain the clock time and calendar date represented by the receiver’s UTC time. The values are translated using the local time zone information if necessary.


Instance Variable                   Range
-----------------                   -----
seconds                             0 - 59
minutes                             0 - 59
hours                               0 - 23
dom  (day of the month)             1 - 31
month                               0 - 11 (0 = January)
year                                Years since 1900.
dow  (day of the week)              0 - 6  (0 = Sunday)
doy  (day of the year)              0 - 365
isdst                               > 0 : true
                                      0 : false
                                    < 0 : not available

isdst

An Integer value that indicates whether Daylight Savings Time is in effect on systems that support it. If the value is positive, Daylight Savings Time is in effect, zero indicates that DST is not in effect, and a value less than zero indicates that the information is not available.

timeZone

An Integer that contains the seconds west of GMT of the local time zone.

tzStd
tzDst
gmtOff

String objects that contain the abbreviation of the standard local time zone, the local daylight savings time zone, and the hours from GMT, usually expressed as a four digit number; e.g., ‘-0700’ for the MST time zone. The value of gmtOff is the result of dividing the value of the timeZone instance variable by -3600, them multiplying the result by 100. The haveDst instance variable is true if the timezone supports daylight savings time, but not all systems support this. To find out whether daylight savings time is in effect, the isdst instance variable above, can provide that information if the machine supports it.

Calling the localTime and zoneInfo methods fill in the time zone information.

Instance Methods

cTimeString (void)

Returns a formatted string with the date and time given by the receiver.

The returned String is formatted similarly to the output of the ctime(3) C function, except that the string does not include a trailing newline.

Programs should call the utcTime method to get the current UTC time, and then either the localTime or gmTime method to convert the UTC time into calendar day and date information, before calling this method.

dayName (void)

Returns a String with the three-letter abbreviation of the current day: ‘Sun’, ‘Mon’, ‘Tue’, ‘Wed’, ‘Thu’, ‘Fri’, and ‘Sat’.

gmTime (void)

Fills in the receiver’s instance variables with the elements of the UTC calendar time.

Programs should call the utcTime method to get the current UTC time before calling this method.

isoTimeString (void)

Returns a formatted string with the date and time given by the receiver. The returned String has the format of an ISO date and time string.

Programs should call the utcTime method to get the current UTC time, and then either the localTime or gmTime methods to convert the UTC time into calendar day and date information, before calling this method.

localTime (void)

Fills in the receiver’s instance variables with the elements of the local calendar time, as determined by the system’s time zone setting.

Programs should call the utcTime method to get the current UTC time before calling this method.

monName (void)

Returns a String with the three-letter abbreviation of the current time’s month: ‘Jan’, ‘Feb’, ‘Mar’, ‘Apr’, ‘May’, ‘Jun’, ‘Jul’, ‘Aug’, ‘Sep’, ‘Oct’, ‘Nov’, and ‘Dec’.

zoneInfo (void)

Fills in the receiver’s timeZone, tzStd, tzDst, gmtOff, and haveDst with information about the machine’s current time zone.


Next: , Previous: , Up: Classes   [Index]

RGBAColor

RGBAColor Class

RGBAColor objects store red, green, blue, and alpha color information, and also the names of X11 colors and their X11 pixel values, if appropriate.

The class also provides methods for looking up X colors either by their color name or their RGB specification, as well as the alpha channel.

The rgb(1) program lists the color names supported by X displays. RGB color specifications may have the following forms.


#rgb, #rrggbb, #rrrrgggbbb, #rrrrggggbbbb

rgb:r/g/b, rgb:rr/gg/bb, rgb:rrr/ggg/bbb, rgb:rrrr/gggg/bbbb


r|g|b == hexadecimal digits, either case

The XParseColor(3) manual page describes all of the color specification formats used by X display servers.

Instance Variables

alpha

The value used for blending the color with its background; in the range 0 (completely transparent) to 65535 (completely opaque).

red
green
blue

The red, green, and blue components of the colors. For X displays, these values are unsigned short ints, with values of 1 ... 255. Because the class uses XAllocNamedColor(3) and XParseColor(3) internally, red, green and blue values, if given, are scaled to the X server’s RGB range.

x11Name

A String that contains a color name supported by the X server, if appropriate, or a RGB color specification that X11 uses. Refer to See X11RGBSpec.

x11Pixel

The value of the pixel color allocated by the X display.

Instance Methods

namedX11Color (String color_name)

Looks up the color given by color_name and fills in the receiver’s returns the color’s red, green, blue, and pixel values, and sets its x11Name to color_name.

The rgb(1) program lists by name the colors that the X server supports.

If color_name is suppored by the X server, the method returns 0 (SUCCESS). If the color is not supported, the method returns -1 (ERROR), and sets the red, green, and blue returns to 0. In addition, it sets pixel_out to the server’s black pixel, and raises an exception.

new (String object_name)

The class needs its own constructor because the primitive constructor internals have added an OBJECT_VALUE_IS_BIN_INT attribute to all of the new object’s instance variables, because RGBAColor's superclass is Integer. But this method needs to do a fixup and remove the attribute from the x11Name instance variable, which has a value of String. The contructor internals don’t, at the present time, recognize this semantic factor on a generalized basis, so we need to handle cases like these individually.

rgbX11Color (String color_spec)

Returns the color values and pixel value of color_spec. RGB color specifications are described more fully in the XParseColor(3) manual page.

If color_spec is suppored by the X server, the method returns 0 (SUCESS), and retrieves the red, green, blue, and pixel values provided by the server. If the color is not supported, the method returns -1 (ERROR), and sets the red, green, and blue returns to 0. In addition, it sets pixel_out to the server’s black pixel, and raises an exception.

x11Color (String color_spec)

A convenience method that calls either namedX11Color or rgbX11Color depending on the format of color_spec.


Next: , Previous: , Up: Classes   [Index]

LongInteger

LongInteger Class

Objects of LongInteger class represent signed and unsigned integers of the C type long long int.

Instance Variables

value

The value is the formatted representation of a signed long long int.

Instance Methods

!= (long long int l)

Return TRUE if the receiver is not equal to l.

= (long long int l)

Set the value of the receiver to l.

== (long long int l)

Return TRUE if the receiver is equal to l.

+ (long long int l)

Add l to the the receiver.

++ (void)

Implements both the C prefix and postfix increment operators for LongInteger objects.

- (long long int l)

Subtract l from the receiver.

- (void)

When used as a prefix operator, negate the argument.

-- (void)

The C decrement operator, both prefix and postfix, for LongInteger objects.

% (long long int l)

Return a LongInteger that is the modulus of the receiver and the argument.

%= (int i)

Perform a modulus of the receiver and its argument, and store the result in the receiver. Returns the receiver.

& (long long int l)

Perform a bitwise AND of the receiver and the operand. The Object class’s & operator overloads C’s unary “address of” prefix operator. See Object.

&& (long long int l)

Return TRUE if both the receiver and the operand evaluate to TRUE.

& ( int i)

Perform a bitwise AND of the receiver and the operand, and store the result in the receiver. Returns the receiver.

* (long long int l)

Multiply the receiver by l.

/ (long long int l)

Divide the receiver by l.

< (long long int l)

Return TRUE if the receiver is less than the operand, FALSE otherwise.

<= (long long int l)

Return TRUE if the receiver is less than or equal to the operand, FALSE otherwise.

<< (int i)

Shift the receiver left by the number of bits in the operand, an Integer.

> (long long int l)

Return TRUE if the receiver is greater than the operand, FALSE otherwise.

>= (long long int l)

Return TRUE if the receiver is greater than or equal to the operand, FALSE otherwise.

>> (int l)

Shift the receiver right by the number of bits in the operand, an Integer.

^ (long long int l)

Perform a bitwise XOR of the receiver and the operand.

^= (int i)

Perform a bitwise XOR of the receiver and the operand, and store the result in the receiver. Returns the receiver.

bitComp (void)

Return a bitwise complement of the receiver.

invert (void)

Return TRUE if the receiver evaluates to FALSE, FALSE if the receiver evaluates to TRUE.

| (long long int l)

Perform a bitwise OR of the receiver and the operand.

|= (int i)

Perform a bitwise OR of the receiver and the operand, and store the result in the receiver. Returns the receiver.

| (long long int l)

Return TRUE if either the receiver or the operand evaluate to TRUE.

~ (void)

When overloading C’s unary ‘~’ operator, is synonymous with the bitComp method, above.


Next: , Previous: , Up: Classes   [Index]

Pen

Pen Class

Pen class objects define drawing parameters for graphics primitives when drawing points or lines. Currently the only parameter that Pen implements with the width instance variable, which controls the width of graphics shapes like points and lines.

The Point class section contains an example of how to use Pen objects when drawing graphics. See Point.

Instance Variables

alpha

Defines an object’s opacity when using drawing libraries that support alpha channel blending (presently that is only the Line class drawing library, which uses the X Render extension). The value is an Integer in the range, 0..65535 (0..0xffff hexadecimal). For graphics library functions that do not support alpha blending, this value is not used.

colorName

A String containing the name of the Pen object’s color. The X Window System’s libraries use color names defined in the server’s rgb.txt file, which is normally located a directory that contains the server’s configuration files (e.g., <prefix>/etc/X11 or similar).

width

The width in pixels of a line when drawing non-filled shapes. The default is 1.


Next: , Previous: , Up: Classes   [Index]

Point

Point Class

Objects of Point class describe a location with X- and Y-axis coordinates. These objects are commonly used to describe locations on a display.

The draw and drawWithPen methods allow you to draw Point objects on a X11CanvasPane object at the coordinates given by the point’s x and y instance variables. There is an example program at the end of this section. See point-example.

If you use the draw method and don’t provide a Pen object, Ctalk draws the point with the default diameter of one pixel, and the default color is black.

Instance Variables

x

The x coordinate of the receiver object.

y

The y coordinate of the receiver object.

Instance Methods

draw (X11Pane pane_object)

Draw the receiver on pane_object at the coordinates given by the receiver’s x and y instance variables.

This method draws to the X11Pane objects buffer. To draw offscreen to a separate X11Bitmap, object refer to the method drawPoint in class X11Bitmap. See X11Bitmap.

drawWithPein (X11Pane pane_object, Pen pen_object)

Draw the receiver on pane_object at the coordinates given by the receiver’s x and y instance variables, with the diameter and color supplied by the pen_object argument. See Pen.

This method also draws to the X11Pane object’s buffer. To draw offscreen to a separate X11Bitmap object, refer to the method drawPoint in class X11Bitmap. See X11Bitmap.


int main () {
  X11Pane new xPane;
  InputEvent new e;
  X11PaneDispatcher new xTopLevelPane;
  X11CanvasPane new xCanvasPane;
  Application new paneApp;

  paneApp enableExceptionTrace;
  paneApp installExitHandlerBasic;

  xPane initialize 10, 10, 250, 250;
  xPane inputStream eventMask =        /* Tell the main window's event */
    WINDELETE|EXPOSE;                  /* object, a X11InputStream,    */
                                       /* which types of events we     */
                                       /* plan to use.                 */
  
  xTopLevelPane attachTo xPane;        /* The attachTo methods also */
  xCanvasPane attachTo xTopLevelPane;  /* set the dimensions of the */
                                       /* subpanes before they are  */
                                       /* mapped and raised along   */
                                       /* with the top-level pane.  */

  xPane map;
  xPane raiseWindow;
  xPane openEventStream;               /* Before we can do any      */
                                       /* drawing on the window, we */
                                       /* need to start sending and */
                                       /* receiving events from the */
                                       /* X server.  That is what   */
                                       /* openEventStream does.     */

  xPane background "yellow";           /* Setting the background of */
  xPane clearWindow;                   /* an X11Pane object sets the*/
                                       /* background of the actual  */
                                       /* window.                   */

  xCanvasPane background "yellow";     /* Setting the background of */
                                       /* a buffered pane like a    */
                                       /* X11CanvasPane sets the    */
                                       /* background color of its   */
                                       /* buffer.                   */

  xCanvasPane clearRectangle 0, 0, 250, 250; /* In both cases, we   */
                                             /* need to update the  */
                                             /* pane before the new */
                                             /* color is visible,   */
                                             /* with either,        */
                                             /* "clearWindow," or,  */
                                             /* "clearRectangle."   */
  xCanvasPane pen width = 100;
  xCanvasPane pen colorName = "red";
  xCanvasPane drawPoint 40, 40;
  xCanvasPane pen colorName = "green";
  xCanvasPane drawPoint 120, 40;
  xCanvasPane pen colorName = "blue";
  xCanvasPane drawPoint 80, 90;

  while (TRUE) {
    xPane inputStream queueInput;
    if (xPane inputStream eventPending) {
      e become xPane inputStream inputQueue unshift;
      xPane subPaneNotify e;          /* We need to notify subPanes */
                                      /* e.g., xCanvasPane of the   */
                                      /* input events from the GUI. */
      switch (e eventClass value)
        {
        case WINDELETE:
          xPane deleteAndClose;
          exit (0);
          break;
        case EXPOSE:
        case RESIZENOTIFY:
	  xCanvasPane pen width = 100;
	  xCanvasPane pen colorName = "red";
	  xCanvasPane drawPoint 40, 40;
	  xCanvasPane pen colorName = "green";
	  xCanvasPane drawPoint 120, 40;
	  xCanvasPane pen colorName = "blue";
	  xCanvasPane drawPoint 80, 90;
          break;
        default:
          break;
        }
    }
  }
}


Next: , Previous: , Up: Classes   [Index]

Line

Line Class

A Line object contains the coordinates for a line graphics shape. Line objects use Pen objects to specify the width and color of the line. If an application doesn’t specify a Pen object, the default width is one pixel and the default color is black. See Pen.

Here is an example of how to draw a line on a X11Pane window.

int main () {
  X11Pane new xPane;
  InputEvent new e;
  Pen new bluePen;
  Line new basicLine;

  xPane initialize 10, 10, 100, 100;
  xPane map;
  xPane raiseWindow;
  xPane openEventStream;
  bluePen width = 10;
  bluePen colorName = "blue";
  while (TRUE) {
    xPane inputStream queueInput;
    if (xPane inputStream eventPending) {
      e become xPane inputStream inputQueue unshift;
      switch (e eventClass value)
	{
	case WINDELETE:
	  xPane deleteAndClose;
	  exit (0);
	  break;
	case EXPOSE:
	case RESIZENOTIFY:
	  basicLine start x = 90;
	  basicLine start y = 10;
	  basicLine end x = 10;
	  basicLine end y = 90;
 	  basicLine drawWithPen xPane, bluePen;
	  break;
	default:
	  break;
	}
    }
  }
}

Instance Variables

start

A Point object that contains the receiver’s starting x and y coordinates.

end

A Point object that contains the receiver’s ending x and y coordinates.

Instance Methods

draw (X11Pane paneObject)

Draw a line on the paneObject’s visible area at the receiver’s start and end coordinates, using a default pen width of one pixel and default color of black.

This method is mainly used for drawing on a buffer already attached to a X11Pane object. To draw offscreen to a separate X11Bitmap object, use drawLine in class X11Bitmap. See X11Bitmap.

drawWithPen (X11Pane paneObject, Pen penObject)

Draw a line on the paneObject’s visible area at the receiver’s start and end coordinates. The penObject argument contains the width and color of the line. See Pen.

This method is also used mainly for drawing on a buffer already attached to a X11Pane object. To draw offscreen to a separate X11Bitmap object, use drawLine in class X11Bitmap. See X11Bitmap.


Next: , Previous: , Up: Classes   [Index]

Rectangle

Rectangle Class

Programs can use Rectangle objects to describe and draw four-sided square and rectangular shapes.

Although the Rectangle objects are meant to be displayed on X11Pane displays that require only the origin and extent of a rectangle to display it, the class defines each side’s line separately, in case a program needs to work with all of the object’s dimensions.

The methods drawWithPen and fillWithPen draw either the sides of a rectangle or a filled rectangle, using the line width and color defined by a Pen object. The methods draw and fill use a default line width of one pixel and the color black.

Here is a simple example program.

int main () {
  X11Pane new xPane;
  InputEvent new e;
  Pen new bluePen;
  Rectangle new rectangle;

  xPane initialize 10, 10, 100, 100;
  xPane map;
  xPane raiseWindow;
  xPane openEventStream;

  /*  
   *  The rectangle's sides are four Line objects:
   *  top, bottom, left, and right.  There is also
   *  a "dimensions" method that fills in all of 
   *  the sides' dimensions.
   */
  rectangle top start x = 10;
  rectangle top start y = 10;
  rectangle right end x = 80;
  rectangle right end y = 80;

  bluePen width = 3;
  bluePen colorName = "blue";

  while (TRUE) {
    xPane inputStream queueInput;
    if (xPane inputStream eventPending) {
      e become xPane inputStream inputQueue unshift;
      switch (e eventClass value)
        {
        case WINDELETE:
          xPane deleteAndClose;
          exit (0);
          break;
        case EXPOSE:
        case RESIZENOTIFY:
	  /*
	   *  To draw only the outline of the rectangle,
	   *  use the "draw" method instead.
	   */
	  rectangle fillWithPen xPane, bluePen;
          break;
        default:
          break;
        }
    }
  }
}

Instance Variables

top
right
bottom
left

Line objects that contain the dimensions of each of the rectangle’s sides. Each Line instance variable in turn contains Point objects that contain the endpoints of each side.

Note: Unlike Line objects, which specify endpoints as absolute window coordinates, Rectangle objects specify the endpoints of each side as relative to the origin of the Rectangle object; that is, as height and width dimensions. See Line.

Instance Methods

clear (X11Pane paneObject)

Clear the rectangle defined by the receiver to the background color of paneObject. This method requires that the dimensions of the rectangle be completely defined. The easiest way to do this is with the dimensions method, below.

draw (X11Pane paneObject)

Draw an outline of the receiver’s rectangle dimensions on paneObject’s display area, using a line width of one pixel and the color black.

drawWithPen (X11Pane paneObject, Pen penObject)

pDraw an outline of the receiver’s rectangle dimensions on paneObject’s display area, using the line width and color given by penObject.

dimensions (Integer xOrigin, Integer yOrigin, Integer xSize, Integer ySize)

A convenience method that fills in the dimensions of each of the receiver’s sides from the arguments, which specify the origin, height, and width of the receiver.

fill (X11Pane paneObject)

Draw a solid rectangle on paneObject’s display area, using a default line width of one pixel and the default color, black.

fillWithPen (X11Pane paneObject, Pen penObject)

Draw a solid rectangle on paneObject’s display area, using the color given by penObject.


Previous: , Up: Classes   [Index]

Circle

Circle Class

Objects of Circle class contain instance variables that define the center and radius of a circle. The class also defines methods for drawing circles on X displays.

The methods defined in this class can render circles on any GUI drawable surface. To work with the pane buffering mechanism, however, X11CanvasPane class also defines drawing methods. See X11CanvasPane.

Circle drawing methods also require an interior color argument. This is the name of the color within the circle. To give the appearance of drawing just the circle’s rim, a program can set the interior color to the window’s background color. If the fill argument is TRUE, then the circle is filled with the rim color. If the fill argument is FALSE, the width and color of the rim are determined by the pen object used to draw the circle, and the color inside the circle is determined by the interior color argument.


int main () {
  X11Pane new xPane;
  InputEvent new e;
  X11PaneDispatcher new xTopLevelPane;
  X11CanvasPane new xCanvasPane;
  Application new paneApp;
  Circle new inner;
  Circle new outer;
  Circle new middle;
  Pen new innerPen;
  Pen new middlePen;
  Pen new outerPen;
  String new bgColor;

  paneApp enableExceptionTrace;
  paneApp installExitHandlerBasic;

  bgColor = "white";

  xPane initialize 10, 10, 300, 300;
  xTopLevelPane attachTo xPane; 
  xCanvasPane attachTo xTopLevelPane;
  xPane map;
  xPane raiseWindow;
  xPane openEventStream;
  xPane clearWindow;
  xCanvasPane background bgColor;

  inner center x = 150;
  inner center y = 150;
  inner radius = 30;

  innerPen colorName = "navy";
  innerPen width = 10;

  middle center x = 150;
  middle center y = 150;
  middle radius = 40;

  middlePen colorName = "blue";
  middlePen width = 10;

  outer center x = 150;
  outer center y = 150;
  outer radius = 50;

  outerPen colorName = "sky blue";
  outerPen width = 10;

  xCanvasPane pen width = 1;
  xCanvasPane pen colorName = "black";

  xCanvasPane drawCircle outer, outerPen, FALSE, bgColor;
  xCanvasPane drawCircle middle, middlePen, FALSE, bgColor;
  xCanvasPane drawCircle inner, innerPen, FALSE, bgColor;
  xCanvasPane drawLine 50, 150, 250, 150;
  xCanvasPane drawLine 150, 50, 150, 250;
  xCanvasPane refresh;

  while (TRUE) {
    xPane inputStream queueInput;
    if (xPane inputStream eventPending) {
      e become xPane inputStream inputQueue unshift;
      xPane subPaneNotify e;
      switch (e eventClass value)
        {
        case WINDELETE:
          xPane deleteAndClose;
          exit (0);
          break;
        case EXPOSE:
        case RESIZENOTIFY:
	  xCanvasPane drawCircle outer, outerPen, TRUE, bgColor;
	  xCanvasPane drawCircle middle, middlePen, TRUE, bgColor;
	  xCanvasPane drawCircle inner, innerPen, TRUE, bgColor;
	  xCanvasPane drawLine 50, 150, 250, 150;
	  xCanvasPane drawLine 150, 50, 150, 250;
	  xCanvasPane refresh;
          break;
        default:
          break;
        }
    }
  }
}

Instance Variables

center

A Point object that defines the x,y coordinates of the circle’s center. If drawn on a X display the units represent pixels on the display. See Point.

radius

An Integer that defines the Circle object’s radius.

Instance Methods

draw (Pane paneObject, Integer filled, String bgColor)
draw (Pane paneObject, Pen penObject, Integer filled, String bgColor)

Draw the receiver circle on the display. If a Pen argument is given, use the Pen object’s color and line width to draw the circle. If a Pen argument is not given use a default Pen, and fill the interior of the circle with bgColor if filled is false.


Next: , Previous: , Up: Classes   [Index]

Method

Method Class

The Method class provides a virtual mechanism for objects to maintain references to methods and also to call the methods.

A Method instance variables can contain all of the data of an actual method. Much of the method’s instance data is used only by the Ctalk front end, and the instance data may or may not be needed at run time when a Method object is created or used. This class defines the instance variables anyway in case a program needs them.

Note that defining a Method object does not include the method receiver’s class library. The program must already have included a method’s receiver class, either by constructing an object of that class, or by including the class with the require keyword.

Note also that, in this version, Method object calls are only tested with a receiver, so you may want to use a virtual method as part of an expression, you might want to write a wrapper method for it, as in this example. The methodObjectMessage method is defined in class Object. See Object.

String instanceMethod selfConcat (String __arg) {
  self = self + __arg;
  return NULL;
}

int main () {
  Method new m;
  String new s;
  Exception new e;

  s = "Hello,";

  m definedInstanceMethod "String", "selfConcat";
  m withArg " world!";
  s methodObjectMessage m; /* methodObjectMessage is defined */
                           /* in Object class.               */
  if (e pending) {
    e handle;
  } else {
    printf ("%s\n", s);
  }
}

Instance Variables

methodName

A String object that contains the method’s name.

methodSelector

A String object that contains the name of the method’s selector.

returnClass

A String object that contains the name of the method’s return class.

rcvrClassObject

A Symbol that refers to the method’s receiver class object.

methodFn

A Symbol that contains the address of the method’s function call.

methodSource

A String that contains the method’s source code.

methodParameters

A List that contains the method’s paramter definitions.

nParams

An Integer that contains the number of parameters the method requires.

varargs

An Integer that is either TRUE or FALSE depending on whether the method takes a variable number of arguments.

nArgs

An Integer that contains the number of arguments the method is called with.

errorLine

An Integer that contains the first line of the method in a class library or program input.

errorColumn

An Integer that contains the first column of the method in a class library or program input.

argFrameTop

An Integer that contains the stack index of the method’s first argument.

rcvrFrameTop

An Integer that contains the stack index of the method’s receiver.

imported

An Integer that is either TRUE or FALSE depending on whether the method is imported from a class library.

queued

An Integer that is either TRUE or FALSE depending on whether a method is queued for output.

methodArgs

A List of references to the method’s arguments.

localObjects

A List of references to the method’s local objects.

userObjects

A List of references to objects created during the method’s execution.

localCVARs

A List of references to the method’s local C variables.

isInitialized

A Boolean that is True only if the Method object has been initialized to refer to an actual method. This variable should only be set by the methods definedInstanceMethod and definedClassMethod (in Object class).

Instance Methods

definedClassMethod (String classname, String name)

Initialize the receiver with the class method named by the arguments.

definedInstanceMethod (String classname, String name)

Initialize the receiver with the instance method named by the arguments.

withArg (Object method_argument)

Define an argument for the receiver method.

This method normally precedes a methodObjectMessage call. For examples of its use, refer to the methodObjectMessage section. See methodObjectMessage.

setCallbackName (String name)

Sets the receiver object’s name to the name of the callback, which is generally set when the program is compiled. This does not change the name of the actual method, only the name by which the Method object that represents it is referred to.

Here is a slightly hypothetical example of the steps that use setCallbackName to set up a callback method.


/*
 * 1. In MyClass, the callback here is defined as an instance
 * variable.
 */
MyClass instanceVariable myCallback Method NULL;

...

/*
 * 2. Also in MyClass, define a method to configure the callback.
 */
MyClass instanceMethod onEvent (String methodClassName,
                                String methodName) {
  Method new callbackMethod;

  callbackMethod definedInstanceMethod methodClassName, methodName;

  /* This sets the class and name of callbackMethod to the name
      of the callback instance variable defined above, at the
      start of the class. */
  callbackMethod setCallbackName "myCallback";

  self addInstanceVariable "myCallback", callbackMethod;
}

/*
 * 3. In the program's source file, define the callback method
 * itself.
 */
MyClass instanceMethod callbackMethod (void) {
  ... do something ...
}

...

/*
 * 4. Also in the program's source file, set up the callback
 * method during program initialization.
 */
int main () {
  MyClass new myProgram;

  ...

  myProgram onEvent "MyClass", "callbackMethod";

  ...
}

For a working example, refer to the class GLXCanvasPane, which uses this process to assign callbacks.


Next: , Previous: , Up: Classes   [Index]

Pane

Pane Class

Pane is the superclass of all classes that handle graphical displays.

Subclasses need to provide their own constructor and destructor methods for extra object construction and cleanup. Pane subclasses need to provide at least a paneBuffer (below) allocated during object creation and freed during object deletion, unless the subclass is very simple.

Instance Variables

children

A List of child panes.

cursor

A Point object that contains the X and Y coordinates within the pane where text writes will occur.

mapped

An Integer. If TRUE, display the pane when it, or its parent pane, receives a refresh message.

origin

A Point object that contains the X and Y coordinates of the upper left-hand corner of the pane within the parent pane, or the terminal window or display if the pane is the parent pane.

paneBackingStore

A Symbol object that contains the memory address of the pane’s backing store buffer. Subclasses should provide constructors that allocate this memory, using the __ctalkCreateWinBuffer library function. The methods map or unmap handle the task of saving and restoring window contents, by calling functions like __ctalkANSITerminalPaneMapWindow and __ctalkANSITerminalPaneUnMapWindow. Classes that re-implement map and unmap need to handle these tasks also.

paneBuffer

A Symbol object that contains the memory address of the pane’s display buffer. Subclasses should provide constructors that allocate this memory, using the __ctalkCreateWinBuffer library function.

size

A Point object that contains the width and height of the pane.

Instance Methods

attach (Pane childPane)

Attach childPane to the receiver. If mapped, then the child pane is displayed the next time the parent pane and its children are updated. If childPane is an ANSITerminalPane object, the child pane inherits the parent’s input and output stream handles.

deletePaneBuffer

Deletes the paneBuffer backing store memory that constructors should allocate when creating subclass objects. Subclasses should also use this message in destructor or cleanup methods.


Next: , Previous: , Up: Classes   [Index]

ANSITerminalPane

ANSITerminalPane Class

The ANSITerminalPane class allows applications to write output to multiple panes or windows on ANSI terminals, consoles and xterms.

Printing output to a pane does not immediately update the display; instead, the pane’s contents are updated, and the pane is displayed with the refresh message.

The ANSITerminalPane class supports the display multiple panes. Each pane is a child of the initial, or parent, pane. Child panes attached to the parent pane (with the Pane : attach method) inherit the input and output streams of the parent pane.

The map configures a child pane for display on top of its parent pane, and the child pane is displayed on top of the parent pane at the next refresh message.

Coordinates and dimensions are numbered from 1,1, which is the upper left-hand corner of a terminal or a content region.

ANSITerminalPanes support bold, blinking, reverse, and underline text attributes for its contents. Some attributes, like blinking and underlined text, or foreground and background colors, are not universally supported.

The program listing shows how to display parent and child ANSITerminalPane objects.

int main () {
  ANSITerminalPane new parentPane;
  ANSITerminalPane new childPane;

  /* 
   *  Use openOn with the terminal device 
   *  to open a remote serial terminal.
   */
/*   parentPane paneStream openOn "/dev/ttya"; */
  parentPane initialize 1, 1, 79, 24;
  parentPane withShadow;
  parentPane withBorder;
  parentPane refresh;

  parentPane gotoXY 29, 10;
  parentPane printOn "Parent Pane";
  parentPane gotoXY 25, 11;
  parentPane printOn "Please press [Enter].";
  parentPane refresh;

  getchar ();  /* Actual apps should use getCh, etc. */

  childPane initialize 10, 10, 40, 10;
  childPane withShadow;
  childPane withBorder;
  childPane boldOnOff;
  parentPane map childPane;
  parentPane attach childPane;
  
  childPane gotoXY 13, 2;
  childPane printOn "Child Pane";
  childPane gotoXY 10, 3;
  childPane printOn "Please press [Enter].";

  parentPane refresh;

  getchar ();

  parentPane unmap childPane;

  parentPane refresh;

  parentPane paneStream closeStream;
  
  childPane delete;
  parentPane delete;
}

Instance Variables

paneStream

An ANSITerminalStream object containing the input and output channels and parameters for the pane and its child panes. When created with new, initializes input and output to the terminal’s standard input and standard output file handles. Communication settings, including TTY settings, can be set with methods from the ANSITerminalStream class. See ANSITerminalStream.

shadow

If TRUE, draw a shadow beneath the pane. The shadow is drawn over the background window and is not part of the pane’s content region.

border

If TRUE, draw a border around the edges of the pane. The border is within the pane’s content region, and it can objscure text beneath it.

parentOrigin

A Point object containing the X and Y coordinates of the parent pane’s origin.

parentClip

A Point object containing the X and Y dimensions of the parent pane’s content area.

Instance Methods

blinkOnOff (void)

Toggle the pane’s blinking graphics attribute; if enabled, display blinking text; if disabled, display normal text. Blinking text is not supported on all terminals.

boldOnOff (void)

Toggle the pane’s bold graphics attribute; if enabled, display bold text; if disabled, display normal text.

childRefresh (void)

Refresh the receiver, a child pane. This method is called by refresh for each of a parent pane’s children.

cursorPos (int x, inty)

Position the software cursor at coordinates x, y within the pane’s content area. This method is a synonym for gotoXY, below.

delete

The class destructor. This method performs the extra cleanup that the ANSITerminalPane class requires.

gotoXY (int x, inty)

Position the software cursor at coordinates x, y within the pane’s content area.

initialize (int x_org, int y_org, int x_size, int y_size)

Initialize the receiver pane’s coordinate instance variables, and screen buffers.

map (ANSITerminalPane __child)

Enable the display of a child pane, and buffer any screen contents. The receiver should be a pane that completely encloses the child pane’s content region and shadow if any. The pane is displayed when the parent pane receives a refresh message.

new (char *__paneName)

Create a new ANSITerminalPane object. If more than one label is given in the argument list, create new ANSITerminalPane objects with those names. This method also creates and initializes the paneStream (class ANSITerminalStream) instance variable. See ANSITerminalStream.

printOn (char *__fmt, ...)

Print the arguments to the pane’s content area at the software cursor position. The output is displayed after the receiver pane receives a refresh message.

putCharXY (intx, inty, charc)

Put character c at coordinates x,y of the pane’s content area. The character is displayed immediately using the pane’s current graphics mode.

refresh (void)

Display the receiver pane content and decorations like borders and shadows on the screen. This method also calls childRefresh for each child pane that is attached (with attach, class Pane) to the receiver pane. See Pane.

resetGraphics (void)

Reset the pane’s graphics attributes to normal text; i.e., bold, underline, reverse, and blink attributes are turned off.

reverseOnOff (void)

Toggle the pane’s reverse graphics attribute; if enabled, display text in inverse video; if disabled, display normal text.

terminalHeight

Returns an Integer with the terminal’s height in character rows.

Note: If an operating system has a terminal interface that Ctalk doesn’t know about, then the method returns 0.

terminalWidth

Returns an Integer with the terminal’s width in character columns.

See the note about terminal compatibility in the terminalHeight entry, above.

underlineOnOff (void)

Toggle the pane’s underline graphics attribute; if enabled, display text underlined; if disabled, display normal text. Underlined text is not supported on all terminals.

unmap (ANSITerminalPane __child)

Hide a child pane, and restore any screen contents that were obscured when the child pane was displayed. The child pane is withdrawn when the parent pane receives the next refresh message.

withBorder (void)

Enable the display of a border around the edges of the pane’s content area, using ANSI line drawing characters. The border is within the pane’s content area and can obscure text at the edges of the pane.

withShadow (void)

Enable the display of a shadow underneath the pane. The shadow is outside of the pane’s content area, and should be within the clipping area of the parent pane.


Next: , Previous: , Up: Classes   [Index]

ANSIWidgetPane

ANSIWidgetPane Class

ANSIWidgetPane contains methods and instance variables that are useful when creating widgets, which are made up of one or more pane objects for display on ANSI terminals.

Widgets should be designed so they can be displayed either independently or above a main pane object. That means a widget class needs to provide its own methods for rendering the widget, handling input, returning the input to the application program, and cleaning up if necessary.

The ANSIWidgetPane class provides basic methods for these tasks, but subclasses probably will need to implement their own versions of these methods. For example, the ANSITextEntryPane class contains its own handleInput method.

Or, for example, a subclass can provide a withdraw method, as in this method from ANSITextEntryPane, which unmaps the widget pane if it was popped up over another pane. See ANSITextEntryPane.

ANSIWidgetPane instanceMethod withdraw (void) {
  if (self parentPane) {
    self unmap;
  } else {
    self paneStream clear;
  }
  return NULL;
}

A Note About Using Widgets with Serial Terminals.

The ANSIWidgetPane classes do not, at this time, provide any methods for setting terminal parameters for a widget and all subpanes. That means applications must see the terminal parameters of each subwidget, and there does not yet exist a general mechanism for handling the input and output of entire sets of widgets. However, classes can always implement convenience methods if necessary. For an example, see the ANSIMessageBoxPane section. See ANSIMessageBoxPane.

Instance Variables

hasFocus

An Integer that is either TRUE or FALSE depending on whether the subwidget has the input focus. Methods should set and check the isInputPane instance variable, below, to make sure that a subwidget’s class accepts user input.

isInputPane

An Integer that is either TRUE or FALSE depending on whether the pane can take the input focus.

paneID

An Integer that contains an identifier of a widget pane or subpane.

parentPane

A Key object that contains the address of a parent pane, if the widget is displayed over a normal pane. If this variable is set, then the widget needs to map and unmap itself from the parent pane as with a normal child pane.

titleString

An optional String object that can be displayed as the widget’s title.

withdraw

Delete the receiver from the display, by clearing the display if the widget is displayed independently, or by unmapping it from a parent widget.

Instance Methods

addBuffer (Integer width, Integer height,

Integer cellSize) A convenience method that creates the receiver pane’s buffers with the width, height and character cell size given as the arguments. The cellSize argument should almost always be ‘1’. If the pane has buffers created previously by another method, addBuffer deletes the old buffers first.

handleInput

Process InputEvent objects from the receiver’s paneStream input handle. This handleInput definition provides only basic functionality. Subclasses should re-implement this method with the additional functions that the widget needs.

map (void)

Maps the receiver widget pane over another pane that was defined by a previous parent message (below).

mapSubWidget (ANSIWidgetPane subPane)

Maps the receiver widget pane over another pane that was defined by a previous parent message (below), and sets the subPane’s mapped instance variable to TRUE, and adds subWidgetPane, to the parent pane’s children list. subPane may be any subclass of ANSIWidgetPane.

new (paneName1, paneName2, ... paneNameN;)

Create one or more new ANSIWidgetPane objects. The object is similar to an ANSITerminalPane object, but it contains the additional instance variables listed in the previous section. This method also relies on the ANSITerminalPane methods withShadow and withBorder, and the ANSITerminalStream method openInputQueue.

parent (ANSITerminalPane parentPaneObject)

Sets the receiver’s parentPane instance variable to the main ANSITerminalPane (or subclass) object that the receiver is to be mapped over. This method also provides the subWidget with copies of the parent’s input and output stream handles.

title (String titleString)

Set the receiver’s title string to the argument.

unmap (void)

Unmaps the receiver from its parent pane. Used after previous parent and map messages (above).


Next: , Previous: , Up: Classes   [Index]

ANSIButtonPane

ANSIButtonPane Class

ANSIButtonPane objects represent pushbutton widgets. Generally, they are sub-panes of other widget classes. For program examples, see See ANSIMessageBoxPane, and the methods in the ANSIButtonPane and ANSIMessageBoxPane class libraries.

Instance Variables

buttonText

The text that will appear within the button.

outputBuffer

The buffer that contains the ANSIButtonPane’s return text. Normally, the ANSIButtonPane object is drawn by a parent widget, which uses its handleInput and show methods to retrieve the button’s result.

In cases where the ANSIButtonPane object is displayed on its own and uses the ANSIButtonPane handleInput and show methods listed in the next section, this variable contains an empty string if the user presses Escape, or the button text if the user presses Return, which is returned by the show method, below.

Instance Methods

focusHighlightOnOff

Toggle the button’s highlight.

handleInput (void)

Wait for input from the receiver’s paneStream object. Withdraws the receiver if the the user types an escape (0x1b) or carraige return (0x0d) character, or the paneStream object receives these characters from another input source.

The paneStream instance variable (which is declared in ANSITerminalPane class), contains a reference to an ANSITerminalStream object. See ANSITerminalStream.

This method sets the value of the outputBuffer instance variable, as described above.

new (button1_name, button2_name, ...;)

Create one or more new ANSIButtonPane object, with border and shadow decorations, for each name given in the argument list. The buttons’ exact sizes are determined by the withText method, below.

show (Integer x_origin, Integer y_origin)

Display the button or map it to a parent widget. The x_origin and y_origin are relative to the upper left of the display if the button is displayed independently, or relative to the upper left-hand corner of a parent pane.

This method returns the outputBuffer instance variable, which contains the result of input from the user or another source, as described above.

withText (String button_text)

Set the text that will appear inside the button. The method adjusts the button dimensions to fit the text.


Next: , Previous: , Up: Classes   [Index]

ANSILabelPane

ANSILabelPane Class

The ANSILabelPane class draws text labels on a terminal, with or without border and shadow decorations, and with the graphics attributes provided by ANSITerminalPane class. See ANSITerminalPane.

The default is to draw a single-line or multi-line label in a pane with a border and drop shadow. When drawing multi-line labels, it is necessary to give the pane’s dimensions to the appendLine method, below.

To draw a single-line label in reverse video, without any decorations and large enough to contain only the text, use a routine like the following.


  ANSILabelPane new labelBox;

  labelBox borderLess = TRUE;   /* The decorations are specified with */
  labelBox border = FALSE;      /* instance variables.                */
  labelBox shadow = FALSE;
  labelBox reverseOnOff;        /* Defined in ANSITerminalPane class. */

  labelBox appendLine "LabelBox Text", 20, 0;

Note that when creating pane buffers, Ctalk numbers the lines from zero, so it is safe to specify a pane’s height as ‘0’.

When drawing a label alone, pressing Escape or Enter withdraws the label from the display.

Instance Variables

borderLess

Specify that the label not contain extra space around the edges for a border.

text

nA List containing the label text, one item per line of text.

viewHeight

An Integer that contains the height of the label’s viewable area in character rows.

viewWidth

An Integer that contains the width of the label’s viewable area in character columns.

Instance Methods

appendLine (String text)
appendLine (String text, Integer width, Integer height)

Add a line of text to the label’s contents. If given with a width and height, specify the size of the label. Otherwise, the label is drawn large enough to display the contents.

If the label contains multiple lines of text, then the dimensions given (or calculated) for the last line determine the size of the label.

cleanup (void)

Delete the buffers associated with the pane object.

display (Integer x, Integer y)

Display the pane at x,y on the display or parent pane. Unlike show, below, does not wait for user input.

handleInput (void)

Process input for the pane. This method is normally called by the Show method, below. When the pane is displayed by itself, pressing Escape or Enter returns from the method, and the Show method withdraws the pane from the display.

new (label1, label2, label3,...;)

Create new ANSILabelPane objects for each member of the argument list. The arguments specify the names of the new object.

refresh (void)

Draw the pane’s contents on the terminal.

show (Integer x, Integer y)

Display the pane at the position x, y on the terminal. This method also calls the handleInput method, above, and waits for the user’s input before returning.

sizePane (Integer width, Integer height)

Set the size of the pane object and its buffers. This method is normally called by the appendLine method, above.


Next: , Previous: , Up: Classes   [Index]

ANSIListBoxPane

ANSIListBoxPane Class

An ANSIListBoxPane object displays a list of items, and allows the user to select one of the items in the list by using the cursor motion keys.

Each item in the list is an ANSILabelPane. To modify the appearance of the items, refer to the ANSILabelPane class. See ANSILabelPane.

After exiting by pressing Escape or Enter, a program can retrieve the text of the selected item.

Here is a simple program that displays a list of items, then prints the selected item’s text before exiting.


int main () {
  ANSIListBoxPane new listBox;

  listBox appendLine "Item 1";
  listBox appendLine "Item 2";
  listBox appendLine "Item 3";
  listBox appendLine "Item 4";
  listBox appendLine "Item 5";

  listBox show 2, 2;   // Waits for the user to press Escape or Enter
                       // before returning.

  printf ("\nYou selected %s.\n", listBox selectedText);
  
  listBox cleanup;
}

Instance Variables

items

A List of ANSILabelPane items that contain the text of the list selections.

oldSelectedContent

An ANSILabelPane object that contains the content of the previous selection. Used for erasing the previous selection before drawing the new selection.

prevSelectedLine

An Integer that contains the index of the previously selected item. The ANSIListBoxPane indexes items starting with 1 for the first item.

selectedContent

An ANSILabelPane object that contains the contents of the currently selected item.

selectedLine

An Integer that contains the index, counting from 1, of the currently selected item.

totalLines

An Integer that contains the number of items to be displayed.

Instance Methods

appendLine (String text)

Creates a new ANSILabelBox object with the contents text, then adds the ANSILabelBox to the items list.

cleanup (void)

Deletes the buffers associated with the ANSIListBoxPane object and its items.

handleInput (void)

Waits for input from the user and processes it. Pressing a cursor key or an Emacs or vi next/previous line key shifts the selection. Pressing Escape or Enter causes the method to return.

new (listPane1, listPane2, ...;)

The ANSIListBoxPane constructor. The argument contains the names of one or more new ANSIListBoxPane objects.

refresh (void)

Draw the list pane and items on the terminal.

refreshSelectionFirst (void)

Highlight the initially selected item. Should only be called after a call to refresh.

refreshSelection (void)

Redraw the highlightd selected item, and un-highlight the previously selected item. Should only be called after a call to selectNext or selectPrev

selectedText (void)

Returns the text of the selected item as a String object.

selectNext (void)
selectPrev (void)

Select the next or previous item of the list box’s contents. Also saves the index and contents of the previously selected item.


Next: , Previous: , Up: Classes   [Index]

ANSIMessageBoxPane

ANSIMessageBoxPane Class

ANSIMessageBox objects present users with a pop-up dialog that contains a messages, and an ANSIButtonPaneOk’ button to close the widget.

Here is a simple example.

int main () {
  ANSIMessageBoxPane new messageBox;
  messageBox withText "Hello, world!";
  messageBox show 10, 10;
  messageBox cleanup;
}

Subclasses can always implement convenience methods to set input and output stream parameters if necessary.

You should also take care of the differences between xterms, consoles, and serial terminals. In particular, even though the parent method (class ANSIWidgetPane) See ANSITerminalStream.

Instance Variables

okButton

An ANSIButtonPane object that contains the pane’s ‘Ok’ button.

messageText

A String object that contains the text that appears in the message box.

Instance Methods

cleanup (void)

Delete the receiver’s extra data before deletion. The receiver objects themselves are deleted normally.

new (String message_box_name)

Create one or more new ANSIMessageBox objects.

withText (String text)

The argument is the text that will appear in the message box. The method adjusts the pane’s dimensions to fit the text.

show (int x_origin, int y_origin)

Display the receiver at x_origin, y_origin. If the receiver is displayed independently, the origin is relative to the upper left-hand corner of the display, or if the receiver is to be displayed over a parent pane, it is mapped to the parent pane with the origin relative the the parent pane’s upper left-hand corner.


Next: , Previous: , Up: Classes   [Index]

ANSIProgressBarPane

ANSIProgressBarPane Class

An ANSIProgressBarPane object displays a horizontal progress bar on a serial terminal or xterm. If you display a progress bar pane independently (using the show method), you can close the pane by pressing Enter or Esc.

The ‘progress’ instance variable specifies how much of the progress bar is highlighted. It’s better to use the percent method, though, which calculates the progress bar’s hightlighted area and sets the percent legend.

As with all other ANSI pane widgets, you either display or omit the border and shadow decorations. Progress bars can also display a title string, which you can set using the title method, implemented in ANSIWidgetPane class. See ANSIWidgetPane.

Here is an example program that displays an ANSIProgressBarPane object.


int main () {
  ANSIProgressBarPane new progressBar;


  progressBar shadow = 1;
  progressBar border = 1;

  progressBar title "Progress";

  progressBar percent 65.0;

  progressBar show 2, 2;

  progressBar cleanup;
}

You can set the size of a progres bar using the dimension method. In that case, setting the progress bar using the percent method adjusts for the pane’s width. The widget’s display area is always drawn as one character row tall, however.

If you display the progress bar as a widget in an application, then you can update the progress bar on the screen using the display method instead of show, because display does not wait for user input before returning.

Instance Variables

pctLabelMargin

An Integer that specifies where to draw the percent legend in the progress bar’s content area.

percentInt

An Integer that specifies percent of the progress bar’s internal area that is highlighted. Setting this using the percent method, below, also adjusts the hightlight’s dimensions for the progress bar’s width. This variable is also used to display the text of the percent logo in the widget’s content area.

progress

An Integer that specifies the number of character columns to highlight in the progress bar’s viewable area.

viewHeight

An Integer that specifies the height in character rows of the widget’s viewable area. The progress bar highlight is always drawn as one character row in height.

viewWidth

An Integer that specifies the width in character rows of the widget’s viewable area.

Instance Methods

dimension (Integer width, Integer height)

Set the width and height of the pane in character columns.

show (Integer x, Integer y)

Display the pane at row and column x,y, and return immediately.

handleInput (void)

Wait for the user’s input. Pressing Esc or Enter closes the pane. and returns.

new (String paneName)

Create new ANSIProgressBarPane objects, one for each label given in the method’s argument list.

percent (Float percent)

Set the percent of the progress bar’s highlighted area. This method adjusts for the width of the progress bar and sets the text for the percent logo.

refresh (void)

Redraw the progress bar on the terminal.

show (Integer x, Integer y)

Display the pane at row and column x,y, and wait for the user’s input.


Next: , Previous: , Up: Classes   [Index]

ANSIScrollingListBoxPane

ANSIScrollingListBoxPane Class

An ANSIScrollingListBoxPane object is similar to an ANSIListBoxPane; it displays a list of items in a text mode terminal or xterm and allows the user to use the terminal’s Cursor-Up/Cursor-Down keys, Emacs compatible C-n/C-p keys, or vi compatible j/k keys to select an item in the list.

Pressing Enter or Escape closes the widget. An application can retrieve the selected item’s text with the selectedText method, which is described below.

In addition, an ANSIScrollingListBoxPane object can scroll the list if the number of items is greater than the height of the widget’s viewable area, in order to keep the selected item visible. The widget also displays a read-only scroll bar that indicates which portion of the list is visible.


int main () {
  ANSIScrollingListBoxPane new sListBox;

  sListBox enableExceptionTrace;

  sListBox withShadow;
  sListBox noBorder;    /* Not all terminals support line 
                           drawing characters.            */

  sListBox appendLine "Item 1";
  sListBox appendLine "Item 2";
  sListBox appendLine "Item 3";
  sListBox appendLine "Item 4";
  sListBox appendLine "Item 5";
  sListBox appendLine "Item 6";
  sListBox appendLine "Item 7";
  sListBox appendLine "Item 8";
  sListBox appendLine "Item 9";
  sListBox appendLine "Item 10";
  sListBox appendLine "Item 11";
  sListBox appendLine "Item 12";
  sListBox appendLine "Item 13";
  sListBox appendLine "Item 14";
  sListBox appendLine "Item 15";
  sListBox appendLine "Item 16";
  sListBox appendLine "Item 17";
  sListBox appendLine "Item 18";
  sListBox appendLine "Item 19";
  sListBox appendLine "Item 20";
  sListBox appendLine "Item 21";
  sListBox appendLine "Item 22";
  sListBox appendLine "Item 23";
  sListBox appendLine "Item 24";
  sListBox appendLine "Item 25";
  sListBox appendLine "Item 26";
  sListBox appendLine "Item 27";
  sListBox appendLine "Item 28";
  sListBox appendLine "Item 29";
  sListBox appendLine "Item 30";
  sListBox appendLine "Item 31";
  sListBox appendLine "Item 32";

  sListBox show 5, 6;

  printf ("%s\n", sListBox selectedText);

  sListBox cleanup;
}

Instance Variables

items

A List of the items that the receiver displays. See List.

oldSelectedContent

An ANSILabelPane object that contains previously selected item. See ANSILabelPane.

prevSelectedLine

An Integer that contains the index of the previously selected item. See Integer.

selectedContent

An ANSIScrollPane object that draws the widget’s scroll bar. See ANSIScrollPane.

selectedContent

An ANSILabelPane object that contains selected item. See ANSILabelPane.

selectedLine

An Integer that contains the index of the selected item. See Integer.

totalLines

An Integer that contains total number of list items. See Integer.

viewStartLine

An Integer that specifies which item begins the list’s viewable portion. See Integer.

viewHeight

An Integer that contains the height in text lines of the widget’s visible area. See Integer.

viewWidth

An Integer that contains the height in character columns of the widget’s visible area. See Integer.

Instance Methods

appendLine (String item_text)

Adds item_text to the list’s contents.

cleanup (void)

Deletes the display buffers associated with the list box and scroll bar.

handleInput (void)

Waits for the user’s input. Changes the selected item when the user cursors through the list using the terminal’s cursor keys, Emacs compatible C-n/C-p, or vi compatible j/k. Restores the terminal and returns when the user presses Enter or Escape.

noBorder (void)
withBorder (void)

Set or unset the border for the main scroll pane and the scroll bar. These methods are equivalent to the following expressions.


  /* To display borders. */
  listPane border = 1;
  listPane scrollBar border = 1;

  /* To hide the borders. */
  listPane border = 0;
  listPane scrollBar border = 0;

Note that not all terninals support line drawing characters.

noBorder (void)
withBorder (void)

Set or unset the shadow for the main scroll pane and the scroll bar. The methods are a shortcut for these statements.


  /* To display shadows. */
  listPane shadow = 1;
  listPane scrollBar shadow = 1;

  /* To hide the shadows. */
  listPane shadow = 0;
  listPane scrollBar shadow = 0;

new (String object_name)

Constructs a new ANSIScrollingListBoxPane for each label given in the argument list. Sets the dimensions for the viewable areas, decorations, and creates the display buffers for the list box and the scroll bar.

refresh (void)

Redraws the list box.

refreshSelection (void)

Un-highlights the previously selected item and highlights the currently selected item.

refreshSelectionFirst (void)

Highlights the currently selected item, which is normally the first item in the list when first drawing the widget–i.e., when there is no previously selected item.

scrollThumbSize (void)

Sets the scrollBar instance variable’s thumbHeight instance variable based on which portion of the list is visible. See ANSIScrollPane.

scrollThumbStart (void)

Sets the scrollBar instance variable’s thumbStartLine instance variable based on which portion of the list is visible. See ANSIScrollPane.

selectedText (void)

Returns a String containing the text of the selected item. See String.

selectNext (void)

Sets the next selectedLine and selectedContent instance variables to the next item in the list. If the selected item is already the last item in the list, the method does nothing.

selectPrev (void)

Sets the next selectedLine and selectedContent instance variables to the previous item in the list. If the selected item is already the first item in the list, the method does nothing.

show (Integer x, Integer y)

Displays the widget an character row and column x,y on the terminal display, then calls the handleInput method to process user input.


Next: , Previous: , Up: Classes   [Index]

ANSIScrollPane

ANSIScrollPane Class

An ANSIScrollPane object draws a vertical scroll box on a text-mode terminal or X terminal. Applications can use the pane’s instance variables to set the position and height of the scroll thumb, and the border and shadow decorations.

The class provides a handleInput method that allows users to move the scroll thumb independently if the pane is used by itself.

This app draws a scroll pane independently.


int main () {
  ANSIScrollPane new scrollBox;

  scrollBox shadow = 0;
  scrollBox border = 1;

  scrollBox thumbHeight = 3;    // Sets the position and height
  scrollBox thumbStartLine = 1; // of the scroll thumb.

  scrollBox show 2, 2;          // The Up and Down arrow keys 
                                // move the scroll thumb while
                                // the pane is displayed.

  scrollBox cleanup;
}


When used to indicate the position of other panes, applications should set and read the scroll thumb’s using the thumbHeight and thumbStartLine instance variables. If the application wants to use the ANSIScrollPane object to set another pane’s position, it needs to handle the Up and Down cursor motion keys in the app’s handleInput method,

In that case, the app should use the classes’ display method instead of show to display the ANSIScrollPane object, because display doesn’t wait for user input on its own.

There’s no terminal independent way, however, to indicate that the ANSIScrollPane object has the input focus. An app might do this by either setting or omitting the pane’s shadow, but that can occupy an extra line of terminal space.

The class is simplified by keeping the width of the scroll thumb at one column. Apps can draw a wider scroll pane, but that does not affect the scroll thumb’s width.

Instance Variables

viewHeight

An Integer that specifies the height of the scroll channel in character rows.

viewWidth

An Integer that specifies the width of the scroll channel in character columns.

thumbHeight

An Integer that specifies the height of the scroll thumb in character rows.

thumbStartLine

An Integer that specifies the row of the top of the scroll thumb. This should be less than the viewHeight instance variable for the thumb to be visible.

Instance Methods

cleanup (void)

Delete the buffers associated with the pane object.

dimension (Integer width, Integer height)

Set the width and height of the receiver pane. Also adjusts the width of the viewWidth and viewHeight instance variables.

display (Integer x, Integer y)

Draw the pane on the terminal at row and column x,y, and return immediately.

handleInput (void)

Waits for user input from the pane’s ANSITerminalStream object. Pressing Enter or Escape withdraws the pane from the display and returns. Pressing the Up or Down arrow keys moves the scroll thumb.

new (String paneName)

Create a new ANSIScrollPane object, with the name paneName. If more than one name is given in the argument list, create new ANSIScrollPane objects with the arguments’ names.

refresh (void)

Draw the pane on the terminal.

show (Integer x, Integer y)

Draw the pane on the terminal at row and column x,y, and wait for the user’s input.


Next: , Previous: , Up: Classes   [Index]

ANSITextBoxPane

ANSITextBoxPane Class

An ANSITextBoxPane object displays a text-mode dialog box with an application’s text in the window, and a “Dismiss” button at the bottom of the display area. Like other widgets that are subclasses of ANSIWidgetPane, you can close the window by pressing Esc or Enter, and you can scroll through the text with the terminal’s up and down arrow keys, the vi keys j and k, and the emacs keys C-n and C-p.

Here is a brief example of how to open and display text in an ANSITextBoxPane object.

int main () {
  ANSITextBoxPane new textBox;

  textBox resize 75, 30;

  textBox appendLine "Hello, world!";
  textBox appendLine "This is another line of text.";
  textBox appendLine "More text to follow.";

  textBox show 1, 1;

  textBox cleanup;
}

Instance Variables

dismissButton

An ANSIButtonPane object that displays a “Dismiss” button at the bottom of the pane’s display area.

text

A List object that contains the text to be displayed in the pane, one line per list element.

viewStartLine

An Integer object that indicates the topmost line of text to be displayed in the pane.

viewHeight

An Integer that contains the height of the pane’s text display area. The text display area is the width and height of the pane, not including a window border if any, and not including the bottom five lines of the pane, which is used to display the dismissButton widget.

viewWidth

An Integer that contains the width of the viewable text area. As mentioned above, the viewWidth dimension is the width of the pane minus the window borders, if any.

viewXOffSet

An Integer that contains the starting column of each line within the window.

Instance Methods

appendLine (String text)

Append a line to the widget’s text (class List) instance variable. The text will be visible after the next refresh message.

cleanup (Integer lineNumber)

Delete the extra buffers that the receiver uses for screen data. The normal object cleanup routines delete the receiver pane itself.

clearLine (Integer lineNumber)

Erase the line lineNumber in the pane’s view area.

handleInput (void)

Wait for the user’s input from the keyboard and redisplay or withdraw the receiver widget depending on which key the user presses.

new (String paneName)

Constructs a new ANSITextBoxPane object. The object’s dimensions are 40 columns wide by 20 rows high, with a “Dismiss” button at the bottom of the window, and with a border and shadow.

If more that one name is given in the argument list, construct new ANSITextBoxPane objects with the labels’ names.

refresh (void)

Redraws the receiver object and any text to be displayed in the pane’s visible area.

resize (Integer xSize, Integer ySize)

Resize the pane to the dimensions xSize, ySize.

show (Integer xOrigin, Integer yOrigin)

Pop up the pane’s window at the terminal coordinates xOrigin, yOrigin, and wait for the user’s input.


Next: , Previous: , Up: Classes   [Index]

ANSITextEntryPane

ANSITextEntryPane Class

A ANSITextEntryPane object prompts the user for text input and returns the input to the application program. Like other subclasses of ANSIWidgetPane, this class uses the methods of that class or re-implements them as necessary. See ANSIWidgetPane.

The widget can be displayed independently; that is, it can be popped up on its own, as in this example.

int main () {
  ANSITextEntryPane new textEntry;
  String new inputText;

  textEntry withPrompt "Please enter some text: ";
  inputText = textEntry show 10, 10;
  printf ("\nYou typed: %s\n", inputText);
  textEntry cleanup;
}

To pop up an ANSITextEntryPane over another pane, the program must also configure and define the widget’s parent pane.

int main () {
  ANSITerminalPane new mainPane;
  ANSITextEntryPane new textEntry;
  String new inputText;

  mainPane initialize 1, 1, 80, 24;
  mainPane refresh;

  mainPane gotoXY 29, 10;
  mainPane printOn "Parent Pane";
  mainPane gotoXY 25, 11;
  mainPane printOn "Please press [Enter].";
  mainPane refresh;

  getchar ();  /* Actual apps should use getCh, etc. */

  textEntry parent mainPane;
  textEntry withPrompt "Please enter some text: ";
  inputText = textEntry show 10, 10;
  mainPane refresh;
  
  printf ("\nYou typed: %s\n", inputText);

  getchar ();

  textEntry cleanup;
  mainPane cleanup;
}

Instance Variables

promptText

The text of the entry pane’s prompt. The default is an empty String object.

inputBuffer

A String object that contains the user’s input.

inputLength

The width in characters of the text entry. The default is 20.

Instance Methods

handleInput (void)

Process InputEvent objects from the receiver’s paneStream input handle.

inputWidth (Integer width)

Set the width, in characters, of the input entry box. The default is 20.

new (String paneName)

Creates a new ANSITextEntryPane object. Also uses the withShadow and withBorder messages from ANSITerminalPane class, and the openInputQueue message from ANSITerminalStream class.

If more that one argument is given in the argument list, create new ANSITextEntryPane objects with the arguments’ names.

show (int x_origin, int y_origin)

Display the receiver pane and return input from the user.

withdraw

Remove the receiver widget from the display. If the widget is drawn over another pane object, unmap the receiver from the parent pane. If the receiver is displayed independently, clear the display before returning.

withPrompt (String promptText)

Set the receiver’s prompt to promptText.


Next: , Previous: , Up: Classes   [Index]

ANSIYesNoBoxPane

ANSIYesNoBoxPane Class

An ANSIYesNoBoxPane object presents the user with a dialog that contains a text message and waits for the user’s ‘Yes’ or ‘No’ response.

Here is an example of opening an ANSIYesNoBoxPane object using standard input and output (e.g., when displaying the pane on a xterm).

int main () {
  ANSIYesNoBoxPane new messageBox;
  String new answer;

  messageBox withText "Do you want to quit?";
  answer = messageBox show 10, 10;
  messageBox cleanup;
  printf ("You answered, \"%s\"\n", answer);
}

Here is an example of opening an ANSIYesNoBoxPane object in a serial terminal (for a Linux serial device). For other systems, change the ‘/dev/ttyS1’ argument to the device node that connects to the serial terminal. It’s necessary to adjust the arguments to setTty to match the terminal’s settings.

int main () {
  ANSIYesNoBoxPane new messageBox;
  String new answer;

  messageBox paneStream openOn "/dev/ttyS1";  /* Linux serial device. */
  messageBox paneStream setTty 9600, 1, 'n', 8;
 
  messageBox noBorder;  /* Not all terminals support line drawing characters. */

  messageBox withText "Are you sure you want to quit?";
  answer = messageBox show 10, 10;
  messageBox cleanup;
  printf ("You answered, \"%s\"\n", answer);
}

As with any dialog widget, pressing Esc or Return closes the ANSIYesNoBoxPane object. The Tab key selects between the “Yes” and “No” buttons, as do the Y and N keys,

Instance Variables

button1

The ANSIButtonPane widget that controls the ‘Yes’ response.

button2

The ANSIButtonPane widget that controls the ‘No’ response. (ANSIYesNoBoxPane class)

messageText

A String object that contains the text displayed in the pane.

Instance Methods

cleanup (void)

Delete the widget’s data before exiting.

getFocusWidgetText (void)

Return the text associated with the button that has the input focus.

handleInput (void)

Wait for the user’s input and return the response from the widget.

new (newPaneName

Create a new ANSIYesNoBox object with the name given as an argument. If the argument list contains more than one name, create ANSIYesNoBoxPane objects for each argument.


ANSIYesNoBoxPane new yesnobox1, yesnobox2;

nextFocus (void)

Set the input focus to the next button widget.

noBorder (void)
withBorder (void)

Set or unset the border for the main pane and the button labels. These methods are equivalent to the following expressions.


  /* To display borders. */
  yesnoBox border = 1;
  yesnoBox button1 border = 1;
  yesnoBox button2 border = 1;

  /* To hide the borders. */
  yesnoBox border = 0;
  yesnoBox button1 border = 0;
  yesnoBox button2 border = 0;

Note that not all terninals support line drawing characters.

noBorder (void)
withBorder (void)

Set or unset the shadow for the main pane and the buttons. The methods are a shortcut for these statements.


  /* To display shadows. */
  yesnoBox shadow = 1;
  yesnoBox button1 shadow = 1;
  yesnoBox button2 shadow = 1;

  /* To hide the shadows. */
  yesnoBox shadow = 0;
  yesnoBox button1 shadow = 0;
  yesnoBox button2 shadow = 0;

show (int x_origin, int y_origin)

Display the ANSIYesNoBoxPane object at x_origin, y_origin. If displayed over another pane, the origin is relative to the parent pane’s origin. If displayed independently, the origin is relative the the upper left-hand corner of the terminal.

withText (char *text)

Defines the text that is to appear within the pane. This method adjust’s the pane’s size to fit the text.


Next: , Previous: , Up: Classes   [Index]

X11Pane

X11Pane Class

The X11Pane class provides the basic methods and instance variables for creating and displaying a window on a X display.

The X11Pane class does not, itself, provide methods for moving, resizing, or handling input or changing focus.

The X11TerminalStream class handles X input events. The X11Pane constructor new also creates a X11TerminalStream object in the X11Pane's inputStream instance variable. There is a short example program in the X11TerminalStream section. See X11TerminalStream.

This class uses the default visual or a X window without buffering, so applications need to be careful to handle InputEvents correctly, or graphics drawing may result in flicker, depending how the window manager handles X Window System events. See the Ctalk Tutorial for information about how to use InputEvent objects in applications.

However, X11Pane class provides the address of the window’s graphics context in the xGC instance variable, so applications that use this class for graphical displays can create and use their own visuals if necessary.

Instance Variables

backgroundColor

A String object that contains the name of the window’s background color. The value is the background color of the window, independent of the background color of any buffers used by subpanes. Normally this value is set by the background method, described below.

Note that if a subclass of X11Pane has set a ‘backgroundColor’ resource, then that color overrides this variable’s value when a program creates subpane windows. The window creation generally happens when attaching a pane object to its parent pane, with an attachTo method.

If unset, the default background color is black.

borderWidth

An Integer object that contains the window’s border width in pixels. The default is 1 pixel.

container

A Symbol that refers to a pane’s container (i.e., parent) Pane object. For top-level X11Pane objects this value should be NULL.

depth

An Integer that contains the default depth of the display screen. Ctalk sets this value when creating the window of a X11Pane object or an instance of one of X11Pane's subclasses. Normally applications should not need to change this value.

displayPtr

A Symbol that holds the pointer to the display connection; i.e., the Display * returned by XOpenDisplay(3). Most windows use the display connection opened when the main window is created. Dialogs, which create their own main windows, open their own connection to the display. Generally, programs should not need to change this.

When using subpanes, it’s convenient to set the subpane’s displayPtr variable to the value of the main window pane’s value. This is generally done in the attachTo methods, with a line that looks something like this.

haveXft

A Boolean that has the value of ‘true’ if Ctalk is built with the Xft and Fontconfig libraries, and they have been initialized with a call to X11FreeTypeFont : initFontLib.

modal

A Boolean that determines how Ctalk draws in the window. True for popup windows, false otherwise.


self displayPtr = self mainWindow displayPtr;

fontVar

A X11Font object that contains information about the Window or Pane’s current font.

fontDesc

A String that contains a X Logical Font Descriptor for the font to be used by the window. If the value is ‘(null)’, the window uses the system’s fixed font.

foregroundColor

A String object that contains the name of the window’s foreground color. If unset, the default foreground color is black.

ftFontVar

An X11FreeTypeFont object that contains the pane’s current font, if the X11TextEditorPane object uses outline fonts.

If, on the other hand, the pane uses X11 bitmap fonts, the Pane uses the fontVar instance variable. Which requires no additional initialization.

To determine whether a machine has outline fonts available, a program could use a set of statements like this in its initialization.


Boolean new useXFonts;
X11Pane new myPane;

...

if (myPane ftFontVar version >= 10) {
  myPane ftFontVar initFontLib;
  useXFonts = false;
} else {
  useXFonts = true;
}

inputStream

A X11TerminalStream object that provides InputEvent objects to the application. See X11TerminalStream.

resources

This is an AssociativeArray that an object can use to store any data that determine its run-time appearance, like colors, dimensions, or options. Generally a Pane class sets default resources in its new method, which application programs can then update with its own resources after the Pane object has been constructed.

As a brief example, here’s a sample initialization from the X11MessageBoxPane : new method.


paneName resources atPut "backgroundColor", "gray";
paneName resources atPut "pad", 10;
paneName resources atPut "messageText", "Your\nMessage\nHere";
paneName resources atPut "buttonText", "Ok";

Then, when an application program constructs the widgets when it is run, it can use a line like this.


l_label background self resources at "backgroundColor";
l_label multiLine self resources at "messageText";

Remember that the Collection : atPut method does not check for an existing key, so be sure to remove the old value first. This is done with the Collection : removeAt method, or simply with the Collection : replaceAt method.


if (l_label resources keyExists "backgroundColor")
  l_label resources removeAt "backgroundColor";
l_label resources atPut "backgroundColor", "blue";

or,


if (!l_label resources replaceAt "backgroundColor", "blue")
  l_label resources atPut "backgroundColor", "blue";

Refer to the Collection class section for more information about the methods it defines. See Collection.

xGC

A Symbol that contains the address of the window’s graphics context. The X11Pane class does not, at this time, provide methods or instance data for drawables, so the application needs to implement its own drawable for each window.

xWindowID

An Integer that contains the window’s id that a program can use with X library functions.

Class Variables

xColormap

An Integer that contains the resource ID of the default color map.

Instance Methods

attachTo (Object parentPane)

Attach the receiver to parentPane. The value of parentPane’s subWidget instance variable is the receiver.

background (String color_name)

Sets the background color of the pane object’s window. For buffered Panes, programs need to set the background color of that Pane independently. This method also has the effect of clearing the window.

If a program doesn’t set a background color for the window, the default background color is white.

clearRectangle (int x, int y, int width, int height)

Clear the area of the receiver’s window with the dimensions given as the arguments.

clearWindow (void)

Clear the receiver’s window. This method clears only the main window and does not affect any image buffers associated with the pane object. To also clear the pane object’s image buffers, use clearRectangle, above.

defaultCursor (void)

Restore the window’s default cursor, which is normally the cursor of the parent window.

deleteAndClose (void)

Delete the receiver window and close the display.

displayHeight (void)

Returns an Integer with the display’s height in pixels.

displayWidth (void)

Returns an Integer with the display’s width in pixels.

faceRegular (void)
faceBold (void)
faceItalic (void)
faceBoldItalic (void)

These methods select which X11FreeTypeFont typeface a pane should use. These methods need the program to initialize the Xft libraries (with the initFontLib method in X11FreeTypeFont class), and the pane has established a connection to the X server (with the openEventStream method).

font (String font_desc)

Set the X font used for drawing on the window. This font can be set independently of the fonts used by subpanes. See X11TextPane, and See X11Bitmap.

Because the Ctalk libraries use shared memory to manage font information, it is generally necessary to call this method after the openEventStream method, for the program to calculate the character spacing of multiple typefaces correctly.

foreground (String colorName)

Sets the window’s foreground color (the default color for drawing on the window) to colorName. If a program doesn’t set the window’s foreground color, the default color is black.

ftFont (String family, Integer slant,

Integer weight Integer dpi, Float pointSize) Selects an outline font for use by the X11Pane object. The method selects the font, and fills in the ftFontVar instance variable with the font’s information. Programs should first determine if FreeType fonts are available on the system, by using the X11FreeTypeFont method version first, as in this example.


Boolean new useXFonts;
X11Pane new myPane;

...

if (myPane ftFontVar version >= 10) {
  myPane ftFontVar initFontLib;
  useXFonts = false;
} else {
  useXFonts = true;
}

...

/* Selects the font DejaVu Sans Mono, regular slant, normal weight,
   72 dpi, 12 points. */
myPane ftFont "DejaVu Sans Mono", 0, 80, 72, 12.0;

The X11FreeTypeFont class also provides methods that use Xft and X11 font descriptors to select fonts. See X11FreeTypeFont.

initialize (int width, int height)
initialize (int x, int y, int width, int height)

Create the window and its graphics context with the width and height given as the arguments. This method also opens a connection to the X server if necessary. This method uses the window system to set the window’s initial position.

Create the window and its graphics context with the dimensions given as the arguments. This method also opens the connection to the X server if necessary.

This method is here for older programs, or programs that set the window position directly. Otherwise, use the form of initialize, below, that takes the window’s geometry flags as an argument, and only set the window’s position if the user provides one on the command line and the program retrieves it with parseX11Geometry.

Even more simply, a program can set x_org and y_org to zero, and let the window system handle any positioning. Or use the form of initialize that uses only the width and height arguments.

initialize (int x, int y, int width, int height, int geom_flags)

Create the window and its graphics context with the dimensions given as the arguments. Like the other forms of initialize, this method also opens the connection to the X server if necessary.

The geom_flags argument provides placement hints for the window’s initial position. It has the format provided by the parseX11Geometry method in Application class. See parseX11Geometry.

The x and y parameters can also be given directly if the program sets the window position itself. If these arguments are zero, then the window manager or the user supplied window geometry determine the window placement.

initialize (int x, int y, int width, int height, int geom_flags, char *win_title)

This method is similar to the five-argument form of initialize, and additionally sets the window’s title using the contents of the string win_title.

isTopLevel (void)

Return TRUE if the receiver’s container pane is NULL.

mainWindow (void)

Returns the X11Pane object that manages a program’s main window. The method retrieves the main window object by following the references of each subpane’s container instance variable. If the top-level pane object is not a X11Pane, the method prints a warning.

map (void)

Map the receiver window onto the X display.

openEventStream (void)

Open the window’s input stream, a X11TerminalStream object. The X11TerminalStream section of the manual describes X input event handling. See X11TerminalStream.

putStrXY (Integer xOrg, Integer yOrg, String str)

Draw the string on the receiver’s drawable surface at xOrg, yOrg, using the selected font.

putStrXY (Integer xOrg, Integer yOrg, String str)

Draw the string on the receiver’s drawable surface at xOrg, yOrg. Currently this method is the same as putStrXY, above.

raiseWindow (void)

Display the receiver window above other windows on the X display. Note that the method’s name was changed from raise to avoid warnings when including the C raise(3) function.

setResources (String resourceName, String resourceClass)

Set the resource name and class of the main window. Normally the resource name is the name of the application, which may vary from the window title. The resource class should be used to identify the window for X resources.

A program can call this method either before or after connecting to the server with the openEventStream method. Generally, if the resources affect the appearance of decorations provided by the system, like the window frame or icon, the window needs to be remapped for the changes to be visible, but this may vary with the application and the type of window manager.

setWMTitle (char *title)

Set the window’s title. Because setting a X window’s title requires communication between the window and the display server, this method requires that the window is first mapped and raised (with the map and raiseWindow methods, above), and has a connection to the display server (which is done with the openEventStream method, also above).

In other words, when setting a window’s title for the first time, this method works best when used just before processing any other events.

subPaneNotify (InputEvent event)

Called by applications that need to invoke sub-pane handlers in response to window events. For examples of its usage, refer to the section for X11CanvasPane, See X11CanvasPane, and other X11Pane subclasses.

useCursor (Cursor cursor_object)

Display the X11 cursor defined by cursor_object, a X11Cursor object, in the receiver’s window. To create cursors, See X11Cursor.

useXRender (Boolean b)

If b is true, draw graphics using the X Render extension if it is available. If b is false, use Xlib for graphics drawing. The default is to draw using the X Render extension if it is available.

usingXRender (void)

Returns a Boolean value of True if the program is using the X Render extension for drawing, False otherwise.


Next: , Previous: , Up: Classes   [Index]

GLXCanvasPane

GLXCanvasPane Class

The GLXCanvasPane class displays 3 dimensional graphics drawn with OpenGL in a X window. The class requires that the display server supports GLX visuals, which is the case with most modern X server installations.

The class includes instance variables that select GLX visual properties, methods that create and display the window, and provides a simple API for the window’s application program.

There is an example program that displays a GLXCanvasPane window at the end of this section. See GLXExampleProgram.

GLXCanvasPane Applications

The GLXCanvasPane class provides a simple application framework that is compatible with OpenGL’s single threading model. The framework consists of a number of callback methods and a run method, that are configured when the program starts.

The methods that install callbacks are:


onButtonPress
onIdle
onKeyPress
onExpose
onPointerMotion
onResize
onTimerTick
onAnimation

There is a complete description of each of these methods in the section, Instance Methods.

Typically, a program installs its callback methods and initializes the OpenGL system, and then calls the method run to begin the program’s event loop. The example program given at the end of this section follows this process. The program’s initialization and startup, which is contained in main (), is shown here.


int main () {
  GLXCanvasPane new pane;

  pane initialize (1, 150, 500, 500);
  pane title "GLXCanvasPane Demonstration";
  pane map;
  pane raiseWindow;

  pane onKeyPress "myKeyPressMethod";
  pane onExpose "myExposeMethod";
  pane onTimerTick "myTimerTickHandler";
  pane onResize "myResizeMethod";

  pane initGL;
  
  pane run;

}

Selecting GLX Visuals

The GLXCanvasPane class selects visuals based on the values of many of the instance variables. These instance variables correspond with the attributes recognized by the glXChooseVisual(3) library call.

The instance variables’ default settings select a double buffered, TrueColor or DirectColor visual, with 24 color bits per pixel, and a stencil buffer with 8 bit planes, which is supported by many common GLX servers. The equivalent C code for these attributes, formatted as an argument for glXChooseVisual(3), would be:


static GLint att[] = {GLX_RGBA, GLX_DEPTH_SIZE, 24, GLX_STENCIL_SIZE, 8,
                      GLX_DOUBLEBUFFER, None};

These attributes also correspond to the available attributes output by a program like glxinfo(1). Refer to the glXChooseVisual(3) and glxinfo(1) manual pages for more information

Drawing with X Fonts

The GLXCanvasPane class defines three methods, useXFont, drawText, drawTextW, and freeXFont that facilitate drawing text with X fonts.

Typically, a program calls useXFont with the name of the X font when it initializes OpenGL (that is, after first creating the window and mapping the GLX context to the display), then using drawText to draw the text in the program’s drawing routine. Finally, the program calls freeXFont to release the font data before exiting, or when changing fonts if the program uses multiple fonts for drawing.


myPane useXFont "fixed";    /* Call during OpenGL initialization. */
                            /* The argument, "fixed," is the name */
                            /* of the font to be used.            */

...

                            /* Called from within the program's   */
                            /* drawing routine.                   */
myPane drawText "Text to appear in the window";


...

myPane freeXFont;           /* Called during program cleanup or   */
                            /* before calling useXFont again to   */
                            /* draw text in a different font.     */

The Ctalk distribution contains an example program in the demos/glx subdirectory, xfont.ca that demonstrates this drawing method.

Drawing with FreeType Fonts

The methods to draw text using the freetype libraries are similar to those that render X bitmap fonts. The Freetype libaries support text rendering using Freetype, Truetype, and Postscript Type1 fonts.

The main differences are that, because of the way the fonts are rendered on the screen, their measurements are given in the coordinates of the current viewing and transformation matrices.

In addition, when loading a font using useFTFont, the method uses the path name of the font file, not an identifier. This is the only interface that the Freetype libraries use. To use the system’s font caching, refer to See X11FreeTypeFont.

There is a demo program that renders Freetype fonts in the demos/glx subdirectory of the Ctalk source package, ftfont.ca.

Display Synchronization

On OpenGL releases that support synchronization, GLXCanvasPane applications can synchronize buffer swapping with the video display’s refresh rate. GLXCanvasPane class provides the methods syncSwap,refreshRate, and frameRate which allow programs to adjust buffer swapping to match the video refresh rate. The demonstration program, demos/glx/glxchaser.ca provides an example of how to use these methods.

To find out which GLX extensions the display server supports, the extensions method, below, returns the extensions as a String object.

Currently, video syncronization support is limited to MESA releases that provide the GLX_MESA_swap_control and GLX_OML_sync_control extensions.

Instance Variables

animationHandler

Defines the callback method that is called 24 times a second to perform animation.

buttonPressHandler

A Method object that defines the callback method that is executed when a mouse button is pressed.

buttonState

An Integer that records whether a mouse button is currently pressed. The class defines macro constants to record the states, and you can include these definitions in your programs to interpret the value of buttonState.


#define buttonStateButton1 (1 << 0)
#define buttonStateButton2 (1 << 1)
#define buttonStateButton3 (1 << 2)
#define buttonStateButton4 (1 << 3)
#define buttonStateButton5 (1 << 4)

So to check if the mouse button 1 is pressed, the program could contain an expression like the following.


if (myPane buttonState & buttonStateButton1) {
   printf ("Button 1 pressed.\n");
}

colormap

An Integer that contains the X resource ID of the default colormap of the current display and screen.

displayPtr

A Symbol that contains the address of the X server’s display handle as provided to the application. The displayPtr instance variable is filled in by the initialize methods.

exposeHandler

Defines the method that is called each time the program’s window receives an Expose event from the display. This handler is essential to displaying the window in coordination with other display events. If this variable is not initialized, then the run method calls the swapBuffers method.

glxContextPtr

A Symbol that contains the address of the GLXContext that is current for the GLXCanvasPane's window. This variable is normally filled in by the map method.

idleHandler

A Method that contains the callback that the program executes when not processing events from the display.

keyPressHandler

A Method that handles the KeyPress events that the display sends to the program’s window. This variable should be set during program initialization using the onKeyPress method before the program starts the run method.

pointerMotionHandler

A Method that is called whenever the window receives a MotionNotify event.

resizeHandler

A Method that is called whenever the window receives a ConfigureNotify event. The variable should be set using the onResize method before the program starts the run method.

shiftState

An Integer that records whether the any of the Shift, Control, or Alt keys is currently pressed. The class defines macro constants to record the states, and you should also include the definitions in your program if it needs to monitor the state of the modifier keys.


#define shiftStateShift (1 << 0)
#define shiftStateCtrl  (1 << 1)
#define shiftStateAlt   (1 << 2)

So, for example, to test whether a Control key is pressed, you can use an expression like the following.


if (myPane shiftState & shiftStateCtrl) 
   printf ("Control key pressed.\n");

timerMSec

An Integer that defines the time in milliseconds between onTimerTick handler calls. The default is 1 millisecond.

timerTickHandler

A Method that defines the callback that is executed when the classes’ interval timer reaches 0.

visualAuxBuffers

An Integer that, in combination with visualSetAuxBuffers, defines the minimum number of auxiliary buffers that the selected visual must have.

visualBufferSize

An Integer that defines the desired color index buffer size. The instance variable visualSetBufferSize must also be set to true.

visualDepthSize

An Integer that contains the size of the visual’s depth buffer. The visualSetDepthSize instance variable must also be true for this value to take effect.

visualDoubleBuffer

A Boolean that selects a double-buffered GLX visual if true, or a single-buffered visual if false.

visualInfoPtr

A Symbol that contains the address of a X visual selected when the pane’s window is created, which normally happens when a program calls one of the initialize methods described below.

visualRedSize
visualGreenSize
visualBlueSize
visualAlphaSize

Integer values that, if greater than zero, try to select thea largest buffer for that color channel of at least the specified size. If one of the values is zero, then glXChooseVisual(3) tries to select the smallest available buffer for that color channel.

visualRedAccumSize
visualGreenAccumSize
visualBlueAccumSize
visualAlphaAccumSize

Integer values that, if greater than zero, try to select thea largest accumulator buffer for that color channel of at least the specified size. If one of the values is zero, then glXChooseVisual(3) tries to select a visual with no accumulator buffer for that color channel.

visualRGBA

A Boolean that selects a TrueColor or DirectColor visual if true, or a PseudoColor or StaticColor visual if false. Also, the visualSetBufferSize and visualBufferSize instance variables are ignored when this variable is true.

visualStencilPlanes

An Integer the selects the number of stencil bitplanes if greater than zero. If zero, then a visual with no stencil buffer is selected if possible.

visualStereo

A Boolean value that selects a stereo visual if true.

xLineHeight

An Integer that contains the line height in pixels of a font that has been selected by the useXFont method. This variable is read only.

xMaxCharWidth

An Integer that contains the maximum width in pixels of a character for a X font that has been selected by useXFont. This value is read only.

Instance Methods

alpha (Float alpha)

Sets the alpha channel (opacity) when rendering outline fonts. Values should be between 0.0 (transparent) and 1.0 (opaque). The Ctalk library’s default value is 1.0. Calling this method also sets the value of the receiver pane’s ftFontVar fgAlpha instance variable.

deleteAndClose (void)

Releases the receiver pane’s GLX context and deletes the X11 window, and shuts down the application’s X11 input client.

displayHeigth (void)
displayWidth (void)

These methods return an Integer with the display height and width in pixels, respectively.

drawFmtText (Float xOrg, Float yOrg, String fmt, ...)

Draws the text given by fmt and its arguments at the matrix position given by xOrg,yOrg.

drawFmtTextFT (Float xOrg, Float yOrg, String fmt, ...)

Display the string given by fmt and its arguments at the matrix coordinates xOrg, yOrg in the currently selected Freetype font. This call, like all calls that render text, should be preceded by a call to useFTFont.

drawFmtTextW (Integer xOrg, Integer yOrg, String fmt, ...)

Draws the formatted text of fmt and its arguments at the pixel position given by xOrg, yOrg. OpenGL uses the lower left-hand corner of the window as the origin for pixel coordinates.

drawText (Float xOrg, Float yOrg, String text)
drawText (Float xOrg, Float yOrg, Float red, Float green, Float blue, String text)

Draws text at the matrix position given by xOrg,yOrg.

The program must have registered a X font for drawing with a previous call to the useXFont method.

If the red, green, and blue arguments are given, the method draws the text in that color. Otherwise, the method (via OpenGL) draws the text using the last OpenGL color setting.

drawTextFT (Float xOrg, Float yOrg, String text)
drawTextFT (Float xOrg, Float yOrg, Float red, Float green, Float blue, Float alpha, String text)

Draws the string given by text at the matrix coordinates xOrg, yOrg.

The red, green, blue, and alpha arguments, if used, should be between the values of 0.0 and 1.0, so they can be passed along to the OpenGL API directly, and also to set the receiver’s ftFontVar instance variable (a X11FreeTypeFont values for its instance variables: fgRed, fgGreen, fgBlue, and fgAlpha See X11FreeTypeFont.

drawTextW (Float xOrg, Float yOrg, String text)
drawTextW (Float xOrg, Float yOrg, Float red, Float green, Float blue, String text)

Draws text using the window’s xOrg,yOrg pixel as the origin.

If the red, green, and blue arguments are given, the method draws the text in that color. Otherwise, the method (via OpenGL) draws the text using the last OpenGL color setting.

This method allows text to be positioned relative to the window’s pixels, which avoids the need for programs to translate a matrix position into a pixel position manually. This allows a program to position text more easily when it is necessary to measure spaces using the dimensions of the text and font that are being displayed.

The coordinates’ origin (0,0) is at the lower left-hand corner of the window, and the pixel coordinates increase as the position moves toward the top and right of the window.

The GL function glWindowPos2i, which this method uses internally, is an extension in many GL implementations. Ctalk checks for the function when building the Ctalk libraries. If glWindowPos2i is not present in the machine’s GL libraries, then programs that try to use these methods display an error message on the terminal and exit.

extensions (void)

Returns the supported GLX extensions from the display server as a String object.

frameRate (void)

Returns the rate that the program updates the display, in frames per second. The algorithm that calculates the frame rate measures frames over a five-second interval.

freeFTFont (void)

Releases the Freetype font in use.

freeXFont (void)

Frees the font data that was allocated by a previous call to useXFont. Programs should call this method when cleaning up before program exit, or when switching fonts by a subsequent call to useXFont.

initialize (Integer x, Integer y, Integer width, Integer height, Integer geomFlags)
initialize (Integer x, Integer y, Integer width, Integer height)
initialize (Integer width, Integer height

Creates the receiver pane’s window and configures the window for display. The initialize method also fills in the receiver’s visualInfoPtr instance variable with a pointer the X visual info structure specified by the receiver, which is provided by the receiver’s instance variables.

With two arguments, the method initializes the receiver window with the width and height given as arguments.

With four arguments, the method initializes the receiver window with the window’s x and y origin and the width and height given as arguments.

With five arguments, the geom_flags argument provides placement hints for the window’s initial position. It has the format provided by the parseX11Geometry method in Application class. See parseX11Geometry.

When used, the x and y parameters can be given directly if the program sets the window position itself. If these arguments are zero, then the window manager or the user supplied window geometry determines the window placement.

hasExtension (String extensionName)

Returns a Boolean value of true if the system’s OpenGL library supports the GLX extension extensionName, false otherwise.

map (void)

Maps the GLXCanvasPane's window to the display, and internally creates a GLXContext for the window, and makes the GLXContext current.

This method fills in the receiver’s glxContextPtr instance method.

namedColorFT (String colorName, Float redOut, Float greenOut, Float blueOut)

Return the GLX compatible color values for colorName; i.e., the red, green, and blue values are Floats between 0.0 and 1.0. The colorName argument can be any of the colors supported by the X11 display server. Refer to showrgb(1) for a list of colors.

onAnimation (String animationHandlerName)

Installs the callback method that the program calls 24 times a second. The method needs to have the prototype:


GLXCanvasPane instanceMethod <methodName> (void);

onButtonPress (String buttonPressHandlerName)

Installs the callback method that handles ButtonPress events from the display. The callback method needs to have this prototype.


GLXCanvasPane instanceMethod <methodName> (Integer winX, Integer winY,
                                           Integer screenX, Integer screenY,
                                           Integer buttonState,
                                           Integer eventTime);

The parameters winX and winY give the position of the pointer relative to the window’s origin. The parameters screenX and screenY give the pointer’s position relative to the upper left-hand corner of the root window.

Note this does not generally mean that the program can receive events when a button is pressed outside of the program’s window. This depends on how the desktop GUI interprets button presses; with many desktop programs, the program doesn’t receive events when a button is clicked outside of the program’s window.

The buttonState parameter’s value records which buttons are pressed at the time of the event. Note that many systems interpret a multiple button click (a “chord”) as a unique button. For example, pressing the left and right buttons of a two-button mouse at the same time results in a buttonState that indicates button 2 is pressed, not that button 1 and button 3 are pressed simultaneously.

The time parameter is the time that the event occurred, so programs can interpret a series of ButtonPress events as multiple mouse clicks if necessary.

To install a buttonPress callback method, the program needs to include an expression like this one in its initialization code.


myGLXPane onButtonPress "myButtonPressHandler";

onExpose (String exposeHandlerName)

Installs the callback method to handle Expose events received from the display. The callback method should have the following prototype.


GLXCanvasPane instanceMethod <methodName> (Integer nEvents);

To install the callback method, the program’s initialization should contain an expression like this one.


myPane onExpose "myExposeHandler";

The parameter nEvents contains the number of Expose events that the window is waiting to receive. This allows programs to execute the handler’s statements once per group of Expose events; that is, when nEvents reaches 0.

This handler is important because it updates the window in coordination with other display events. If a callback method is not installed, then the run method calls the swapBuffers method.

onIdle (String callbackMethodName)

Installs a callback method that the program executes when it is not processing events from the display.

The callback method has the prototype:


GLXCanvasPane instanceMethod <idleHandler> (void);

To install the handler, the program’s initialization needs to contain an expression like this.


myPane onIdle "myIdleCallback";

onKeyPress (String callbackMethodName)

Configures the receiver’s keyPressHandler instance variable to refer to the application’s actual KeyPress handler method, which is called when the program’s window receives a KeyPress event from the display.

The actual callback method has the prototype:


GLXCanvasPane instanceMethod <methodName> (Integer xKeySym,
                                           Integer keyCode,
                                           Integer shiftState);

This example shows a simple KeyPress handler that closes the window and exits the program when the Escape key is pressed.


/* This definition comes from the machine's X11/keysymdef.h file. */
#define XK_Escape 0xff1b

GLXCanvasPane instanceMethod myKeyPressMethod (Integer xKeySym,
					       Integer keyCode,
					       Integer shiftState) {
  if (xKeySym == XK_Escape) {
    self deleteAndClose;
    exit (0);
  }
}


The first parameter is the X Window System symbol for the key, which is specific to the machine’s keyboard configuration. The complete set of X key symbols is located in the machine’s X11/keysymdef.h file.

The second parameter is the ASCII value of alphanumeric keys and punctuation keys. In the case of alphabetic characters, the value is the same whether the keypress is shifted or unshifted. That means that pressing A and a both result in the keyCode argument having the value 97.

The third parameter, shiftState, indicates whether a modifier key is currently being pressed. The parameter is the receiver’s shiftState instance variable. The variable’s description describes how to interpret its value.

Then, during the program’s initialization the program’s code should include an expression like the following.


myProgram onKeyPress "myKeyPressMethod";

There is a more detailed description of how to configure callback methods in section that discusses Method class. See CallbackSetup.

onPointerMotion (String callbackMethodName)

Installs the callback method that handles pointer motion events from the display. The callback method must have the prototype:


GLXCanvasPane instanceMethod <methodName> (Integer winX,
                                           Integer winY,
                                           Integer screenX,
                                           Integer screenY);

The program’s initialization should contain an expression like this one:


myPane onPointerMotion "myPointerMotionMethod";

onResize (String callbackMethodName)

Installs the callback method that handles resize notifications from the display. The callback method needs to have the prototype:


GLXCanvasPane instanceMethod <methodName> (Integer width,
                                           Integer height);

The program’s initialization code should contain an expression like this one.


myPane onResize "myResizeMethod";

onTimerTick (String callbackMethodName)

Installs the callback method to be executed when the classes’ interval timer reaches zero. The callback method needs to have the following prototype.


GLXCanvasPane instanceMethod <methodName> (void);

The interval in milliseconds between the callback method’s execution is set in the timerMSec instance variable,

pixelHeightFT (Integer pxHeight)

Set the pixel height of the selected font to the argument. The default height for rendering fonts with the Freetype libraries is 18 pixels.

refreshRate (void)

Returns a Float with the display’s refresh rate. If the machine’s OpenGL does not support reporting the refresh rate, returns -1.

run (void)

Runs the event loop that receives X events from the display server, and sends them to the callback methods that are configured for the application.

Without any callback methods defined, the run method handles only ‘Expose’ events (by calling swapBuffers), and ‘ClientMessage’ events, which check for the WM_DELETE_WINDOW Atom and if present, delete the pane’s window and GLX context, and exit the program.

swapBuffers (void)

Swaps the pane window’s offscreen rendering buffer with the window’s visible buffer.

syncSwap (Integer interval)

If interval > 0, sets the swap interval to 1/interval, which enables swap synchronization with the display’s vertical refresh rate if the machine’s OpenGL installation supports the GLX_MESA_swap_control extension.

An interval value of 0 disables swap synchronization.

Returns 0 on sucess, or -1 if the extension is not supported.

textWidth (String text)

Returns an Integer with the width of text in pixels in the currently selected X font. If no font is selected, the method returns ‘-1’.

textWidthFT (String text)

Returns a Float with the width of text in matrix coordinates for the currently selected Freetype font.

title (String title_string)

Set’s the window’s title. This method should be called as soon as possible after the program calls the initialize method.

useFTFont (String fontFileName)

Load a TrueType, FreeType or Type 1 font. Also initializes the font and GLEW libraries if needed.

The method uses the font’s file name as its argument. To use a system’s font aliasing and lookup, refer to See X11FreeTypeFont.

useXFont (String fontName)

Register a X font for use with drawing text in the receiver pane. The argument, fontname, is th X Logical Font Descriptor of a X font that is available on the system - refer to xlsfonts(1) or xfontsel(1) for more information.

This method should be called during OpenGL initialization (that is, after the GLXCanvasPane object has been created and the GLX context established).

xpmToTexture (Symbol xpmdata, Integer widthout, Integer heightout, Symbol texeldataout)
xpmToTexture (Symbol xpmdata, Integer alpha Integer widthout, Integer heightout, Symbol texeldataout)

Translates a XPM pixmap into an OpenGL texture. The argument xpm_data is the pixmap’s char *pixmap_name[] declaration. If no alpha argument is given, then ‘1.0’ is used to create an opaque texture.

Alpha values can range from 0 (completely transparent) - 0xffff (completely opaque), although in practice, the alpha channel’s effect might not be apparent, because OpenGL has its own set of functions that perform texture blending.

The method sets the arguments width_out, height_out, and texel_data_out with the height, width and data of the texture.

Mesa OpenGL textures, used with Linux systems, internally have the format GL_RGBA and the data type GL_UNSIGNED_INT_8_8_8_8, so you can create a 2D texture from a pixmap with statements like these.


Integer new xpmWidth;
Integer new xpmHeight;
Symbol new texData;

/*
 *  Note that the xpm_data argument should not normally need a
 *  translation from C.
 */
myGLUTApp xpmToTexture xpm_data, xpmWidth, xpmHeight, texData;
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, xpmWidth, xpmHeight, 0,
              GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, texData);

Apple OpenGL implementations use a different internal format, so a program would create the equivalent texture like this.


Integer new xpmWidth;
Integer new xpmHeight;
Symbol new texData;

myGLUTApp xpmToTexture xpm_data, xpmWidth, xpmHeight, texData;
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, xpmWidth, xpmHeight, 0,
              GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, texData);

The xpmToTexture method does not do any setup of the OpenGL texture environment. For basic textures, OpenGL works better with textures that have a geometry that is an even multiple of 2; e.g., 128x128 or 256x256 pixels.

Individual applications can add parameters for interpolation, blending, mipmap creation, and material rendering based on the program’s requirements, though.

The Ctalk library only stores the data for one texture at a time, so if a program uses multiple textures, it should save the texture data to a separate Symbol, in orderq to avoid regenerating the texture each time it’s used. Many OpenGL implementations also provide API functions for texture caching.

For an example of how to draw with textures, refer to the glxtexture.ca program in the Ctalk distribution’s demos/glx subdirectory.

Sample GLXCanvasPane Application


#include <X11/Xlib.h>
#include <GL/glx.h>

#define DEFAULT_WIDTH 500
#define DEFAULT_HEIGHT 500

float face1[3][3] = {{0.0f, 2.0f, 0.0f},
		     {-2.0f, -2.0f, 2.0f},
		     {2.0f, -2.0f, 2.0f}};
float face2[3][3] = {{0.0f, 2.0f, 0.0f},
		     {2.0f, -2.0f, 2.0f},
		     {2.0f, -2.0f, -2.0f}};
float face3[3][3] = {{0.0f, 2.0f, 0.0f},
		     {2.0f, -2.0f, -2.0f},
		     {-2.0f, -2.0f, -2.0f}};
float face4[3][3] = {{0.0f, 2.0f, 0.0f},
		     {-2.0f, -2.0f, -2.0f},
		     {-2.0f, -2.0f, 2.0f}};

float base[4][3] = {{2.0f, -2.0f, 2.0f},
		    {2.0f, -2.0f, -2.0f},
		    {-2.0f, -2.0f, -2.0f},
		    {-2.0f, -2.0f, 2.0f}};

float angle = 20.0;

GLXCanvasPane instanceMethod draw (void) {
  glEnable (GL_NORMALIZE);
  glEnable(GL_DEPTH_TEST);
  glClearColor(0.0, 0.0, 0.0, 1.0);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  glLineWidth (1.0f);

  glLoadIdentity ();
  glColor4f (1.0f, 1.0f, 1.0f, 1.0f);

  glRotatef (angle, 0.0f, 1.0f, 0.0f);
  glRotatef (10.0f, 0.0f, 0.0f, 1.0f);

  glBegin (GL_TRIANGLES);
  glColor3f (1.0f, 0.0f, 0.0f);
  glVertex3fv (face1[0]);
  glColor3f (0.0f, 1.0f, 0.0f);
  glVertex3fv (face1[1]);
  glColor3f (0.0f, 0.0f, 1.0f);
  glVertex3fv (face1[2]);

  glColor3f (1.0f, 0.0f, 0.0f);
  glVertex3fv (face2[0]);
  glColor3f (0.0f, 1.0f, 0.0f);
  glVertex3fv (face2[1]);
  glColor3f (0.0f, 0.0f, 1.0f);
  glVertex3fv (face2[2]);
			
  glColor3f (1.0f, 0.0f, 0.0f);
  glVertex3fv (face3[0]);
  glColor3f (0.0f, 1.0f, 0.0f);
  glVertex3fv (face3[1]);
  glColor3f (0.0f, 0.0f, 1.0f);
  glVertex3fv (face3[2]);
			
  glColor3f (1.0f, 0.0f, 0.0f);
  glVertex3fv (face4[0]);
  glColor3f (0.0f, 1.0f, 0.0f);
  glVertex3fv (face4[1]);
  glColor3f (0.0f, 0.0f, 1.0f);
  glVertex3fv (face4[2]);
  glEnd ();

  glBegin (GL_QUADS);

  glColor3f (1.0f, 0.0f, 0.0f);
  glVertex3fv (base[0]);
  glColor3f (0.0f, 1.0f, 0.0f);
  glVertex3fv (base[1]);
  glColor3f (0.0f, 0.0f, 1.0f);
  glVertex3fv (base[2]);
  glColor3f (1.0f, 0.0f, 1.0f);
  glVertex3fv (base[3]);

  glEnd ();

  glRotatef (20.0, 0.0f, 0.0f, 1.0f);
  glRotatef (angle, 0.0f, 1.0f, 0.0f);

  self swapBuffers;
}

GLXCanvasPane instanceMethod initGL (void) {
  glViewport (0, 0, DEFAULT_WIDTH, DEFAULT_HEIGHT);
  glClearColor(0.0, 0.0, 0.0, 1.0);
  glLineWidth (1.0);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glEnable (GL_LINE_SMOOTH);
  glHint (GL_LINE_SMOOTH_HINT, GL_DONT_CARE);
  glMatrixMode (GL_PROJECTION);
  glLoadIdentity ();
  if (DEFAULT_WIDTH <= DEFAULT_HEIGHT) {
    glOrtho (-5.0, 5.0,
	     -5.0 * ((float)DEFAULT_HEIGHT / (float)DEFAULT_WIDTH),
	     5.0 * ((float)DEFAULT_HEIGHT / (float)DEFAULT_WIDTH),
	     -5.0, 5.0);
  } else {
    glOrtho (-5.0, 5.0,
	     -5.0 * ((float)DEFAULT_WIDTH / (float)DEFAULT_HEIGHT),
	     5.0 * ((float)DEFAULT_WIDTH / (float)DEFAULT_HEIGHT),
	     -5.0, 5.0);
  }
  glMatrixMode (GL_MODELVIEW);
  glLoadIdentity ();
}

GLXCanvasPane instanceMethod myTimerTickHandler (void) {
  angle += 1.0;
  self draw;
}

/* This definition comes from the machine's X11/keysymdef.h file. */
#define XK_Escape 0xff1b

GLXCanvasPane instanceMethod myKeyPressMethod (Integer xKeySym,
					       Integer keyCode,
					       Integer shiftState) {
  if (xKeySym == XK_Escape) {
    self deleteAndClose;
    exit (0);
  }
}

GLXCanvasPane instanceMethod myExposeMethod (Integer nEvents) {
  if (nEvents == 0)
    self draw;
}

GLXCanvasPane instanceMethod myResizeMethod (Integer width,
					     Integer height) {
  float ar;

  glViewport (0, 0, width, height);
  glMatrixMode (GL_PROJECTION);
  glLoadIdentity ();
  if (width <= height)
    ar = (float)height / (float)width;
  else
    ar = (float)width / (float)height;
  glOrtho (-5.0, 5.0, -5.0 * ar, 5.0 * ar, -5.0, 5.0);
  glMatrixMode (GL_MODELVIEW);
  glLoadIdentity ();
}

int main () {
  GLXCanvasPane new pane;

  pane initialize (1, 150, 500, 500);
  pane title "GLXCanvasPane Demonstration";
  pane map;
  pane raiseWindow;

  pane onKeyPress "myKeyPressMethod";
  pane onExpose "myExposeMethod";
  pane onTimerTick "myTimerTickHandler";
  pane onResize "myResizeMethod";

  pane initGL;
  
  pane run;

}


Next: , Previous: , Up: Classes   [Index]

X11PaneDispatcher

X11PaneDispatcher Class

X11PaneDispatcher objects manage events from the system’s display, control posititioning and rendering of subpanes within the main pane, and help communicate events between the main window’s pane and the subwindows’ panes.

The positioning of subwindows within the parent window is controlled by the arguments to the attachTo methods; in particular, these methods accept a geometry specification, as an argument, which has the following format.


width[%]xheight[%][+x[%]+y[%]]

If a dimension does not contain a percent (‘%’) sign, the dimensions are in pixels. With a percent sign, the dimensions are a fractional percentage of the parent pane’s width or height.

Also, for some Pane classes, like dialog windows, if the geometry does not include the x and y dimensions, then the class positions the window centered over its parent window.

The X11PaneDispatcher method new creates a X window, although the window of the X11PaneDispatcher itself is not normally visible, the window is provided for subclass panes whose windows will appear within the main X11Pane window.

Subclasses can reimplement default methods like new and the event handler methods if necessary. It is also possible for subclasses to implement event handlers with other method messages than those given here. The X11PaneDispatcher object can use these subclasses’ methods if they are available.

Subclasses, however, should use the setMethodHandler method, described below, to register these callback methods.

Handler Classes

The following event handlers and the default names of the callback method that handles the event, are available to X11PaneDispatcher objects and its subclasses. Handler methods need to take as arguments a reference to a subpane object, and the InputEvent object from the system. See X11TerminalStream.

Handler Class  Event Class    Description                     Default Handler Method
"resize"       RESIZENOTIFY   Called when the user            subPaneResize
                              resizes a window.

"move"         MOVENOTIFY     Called when a user              subPaneMove
                              moves a window.  
                              Depending on the 
                              window manager, an
                              application might also
                              need to make sure the
                              window is resized 
                              correctly.

"expose"       EXPOSE         Called whenever the display     subPaneExpose
                              server generates exposes a 
                              window due when raised, 
                              uncovered, resized, or other
                              change.

"kbdinput"     KEYPRESS       Called when the user presses    subPaneKbdInput
               KEYRELEASE     a key and the application's
                              window has the focus.

"pointerinput" BUTTONPRESS    Called when a mouse button      subPanePointerInput
               BUTTONRELEASE  is pressed or released.

"pointermotion" MOTIONNOTIFY  Called whe the pointer is       subPanePointerMotion
                              moved.

"selectionrequest"
             SELECTIONREQUEST Received when another program   subPaneSelectionRequest
                              requests the X selection.
                              This callback is here mainly
                              for completeness; presently, X
                              selection events are handled
                              internally, and only with the
                              library functions used by
                              X11TextEditorPane objects.

"selectionclear"        
               SELECTIONCLEAR Received when another program
                              requests the X selection. Currently,
                              on library functions used by
                              X11TextEditorPane objects use this
                              internally but applications can use this
                              event to update their status if
                              necessary.
"wmfocuschange" WMFOCUSCHANGENOTIFY
                              Received from the window manager when the
                              pointer enters or leaves a window, or when
                              the window manager raises a window.  The
                              xEventData1 instance variable contains the
                              type of X event, either FocusIn or FocusOut.

"enternotify" ENTERWINDOWNOTIFY
                              Received when the pointer enters a
                              window from another window.

"leavenotify" LEAVEWINDOWNOTIFY
                              Received when the pointer leaves a
                              window.

"focusin"     FOCUSIN         Received when the application signals
"focusout"    FOCUSOUT        a change of widget focus; for example,
                              when the user presses the Tab
                              key.

"map"         MAPNOTIFY       Received when the pane's window is
                              mapped onto the display.

"destroy"     WINDELETE      Called when the user closes the
                              application window.

Handler Methods

A handler typically takes as its arguments a reference to a subpane, and the event. Although the subpane reference parameter can be declared as an Object, it is in actual use a Symbol object, with the reference defined by the attachTo method. The handler should be able to pass the event along to any subpanes of the receiver pane if necessary, by checking whether subpanes implement their own handlers. Here, for example, is the X11PaneDispatcher class’s subPaneResize method.


X11PaneDispatcher instanceMethod subPaneResize (Object __subPane, 
					      InputEvent __event) {
  "Dispatch an Resize event to the subpanes of the
   receiver pane."
  X11Pane new containerPane;
  self size x = __event xEventData3;
  self size y = __event xEventData4;
  containerPane = *self container;
  XResizeWindow (containerPane xDisplay, containerPane xWindowID,
		 self size x, self size y);
  if (__subPane isInstanceMethod "subPaneResize") {
    __subPane methodObjectMessage __subPane handleResize, __subPane,
      __event;
  }
  return NULL;
}

The internals of the subpane API are likely to change and be expanded in future releases. Using the methods described here and in other sections should help insure that applications are compatible with future Ctalk releases.

Instance Variables

canFocus

A Boolean that determines whether the widget is highlighed when the pointer passes over it, or the application sets the focus; for example, by pressing the Tab key.

If this variable is true, which is the default, then the class should also declare event handlers for focus in and focus out events. Otherwise, the program prints a warning each time the shiftFocus method, described below, calls a NULL Method object.

handleDestroy

A Method that provides the default handler to delete a subpane window and its data.

handleEnterNotify
handleLeaveNotify

Handlers for events that are generated when a pointer crosses from one window to another.

handleFocusIn
handleFocusOut

Handles highlighting or un-highlighting a widget when receiving a FOCUSIN or FOCUSOUT event from the application; for example, when the user presses the Tab key.

handleKbdInput

A Method that provides the default handler for subpanes to handle keyboard input.

handleMap

Called when the program recieves a MAPNOTIFY event for the pane’s window.

handleMove

A Method that provides the default handler for moving subpane windows.

handlePointerInput

A Method that provides the default handler for pointer input (mainly ButtonPress) events.

handlePointerMotion

A Method that provides the default handler for pointer motion events.

handleResize

A Method that provides the default handler for resizing subpane windows within the main window.

handleSelectionClear

A Method that provides the default handler for SelectionClear events.

handleSelectionRequest

A Method that provides the default handler for SelectionRequest events. Currently, this callback is here for completeness; X selection events are handled internally, and only in the library functions used by X11TextEditorPane objects.

handleWMFocusChange

The method that handles the events received from the desktop’s window manager when it changes the window focus in response to a pointer motion or click; or when the window manager raises a window.

hasFocus

An Integer that is true if the current subpane has the input focus. For programs with only a single widget class, this variable is not used.

highlight

A Boolean that indicates whether the widget is displayed highlighted.

modalWin

When a dialog window is popped up over the main window, this holds the window ID of the popup. The handleSubPaneEvent method uses this to determine how the application’s main window should respond to X events; generally it keeps the dialog window above the main window until the dialog window is withdrawn. When their is no window popped up over the main window, the value of modalWin is zero (‘0’).

tabFocus

A Boolean that determines, if true (which is the default), whether the handleSubPaneEvent method intercepts the Tab key in order to shift the input focus when it is pressed. If tabFocus is true, the subpane’s class must implement methods to handle the focusin and focusout events that shifting focus with the keyboard implements, or the program will display warning messages when it can’t find the methods.

Instance Methods

attachTo (Object parentPane)
attachTo (Object parentPane, String geometry)

Attach the receiver to its parent pane, typically a X11Pane or X11PaneDispatcher. Also creates a X window, although X11PaneDispatcher windows themselves are not normally visible.

When the subwindow is attached to the parent window, the Ctalk library creates the pane object’s window and graphics context, and clears the window to the background color of the pane object’s backgroundColor instance variable; for example, with an expression like this:


myCanvasPane backgroundColor = "blue";

Otherwise, the method clears the subpane’s window to black.

The geometry argument, if present, defines the size and placement of the subpane’s window within the parent window. A geometry specification has the form:


width[%]xheight[%]+x[%]+y[%]

The dimensions are in pixels, unless a percent sign (‘%’) follows a dimension. In that case, the dimension is a fractional percentage of the parent pane’s width or height. The String may contain a combination of absolute and relative dimensions.

handleSubPaneEvent (InputEvent event)

Handle an input event from the window system. Typically the parent pane’s inputStream provides the event. See X11TerminalStream.

This method also checks keypresses for the Tab key, and calls the shiftFocus method in order to shift focus between a window’s subpanes when the user presses Tab.

new (dispatcherName)

Create a new X11PaneDispatcher object. Initializes the instance variables to the default subpane event handlers and the container mode to ‘full’. If the argument list contains more than one label, created new X11PaneDispatcher objects with the names of each label.

setMethodHandler (String handlerType, Method handlerMethod)

Set the pane’s handler for handlerType to handlerMethod. Currently supported handler types are: ‘resize’.

shiftFocus (void)

When the user presses Tab, handleSubPaneEvent calls this method, which highlights a window’s subpanes in succession, if the subpanes can take the input focus.

Refer to the canFocus instance variable, and the handlers for focus in and focus out events. These event handlers are called by the program, and are not the same as the handleWMFocusChange handler, which is called when the window focus changes on the desktop.

clearFocus (void

Called before shifting the focus highlight to a new pane to insure that only one pane indicates that it should receive focus, including the synthetic focus that is assigned when shifting focus using the Tab key.

subPaneDestroy (Object subPaneRef, InputEvent destroyEvent)

The default handler for WINDELETE events. Like the other method handlers, subPaneRef is typically a Symbol object. The X11TerminalStream section describes these events. See X11TerminalStream.

subPaneGeometry

A String that stores a subpane’s geometry specification, if any. For an explanation of geometry string’s format, refer to the attachTo method, below.

subPaneKbdInput (Object subPaneRef, InputEvent kbdInputEvent)

The default handler for KEYPRESS and KEYRELEASE events. Like the other method handlers, subPaneRef is typically a Symbol object. The X11TerminalStream section describes these events. See X11TerminalStream.

subPaneMove (Object subPaneRef, InputEvent moveNotifyEvent)

The default event handler for MOVENOTIFY events from the system’s GUI. Like the other method handlers, subPaneRef is typically a Symbol object. The X11TerminalStream section describes these events. See X11TerminalStream.

With some window managers, a subPaneMove method might also need to handle RESIZENOTIFY events.

subPanePointerMotion (Object subPaneRef, InputEvent event)
subPanePointerInput (Object subPaneRef, InputEvent event)

The default handlers for MOTIONNOTIFY, and BUTTONPRESS and BUTTONRELEASE events. Like the other method handlers, subPaneRef is typically a Symbol object. The X11TerminalStream section describes these events. See X11TerminalStream.

subPaneResize (Object subPaneRef, InputEvent resizeNotifyEvent)

The default resize handler for subpane windows. Typically subPaneRef is a Symbol object that contains a reference to the subpane object. The resizeEvent argument is typically a RESIZENOTIFY event from the system’s GUI. See X11TerminalStream.


Next: , Previous: , Up: Classes   [Index]

X11CanvasPane

X11CanvasPane Class

The X11CanvasPane class provides the instance variables and methods for basic X window graphics operations like drawing points, lines, and rectangles. The width and color of shapes is controlled by the pen instance variable.

Here is brief drawing program that uses a X11CanvasPane object. Clicking on the pane’s window draws a dot at that point. If the program is given the argument ‘-v’, the program displays the X events it receives from the display.


int main (int argv, char **argc) {
  X11Pane new xPane;
  X11PaneDispatcher new xTopLevelPane;
  X11CanvasPane new xCanvasPane;
  InputEvent new e;
  Integer new nEvents;
  Integer new verbose;
  Exception new ex;
  String new text;
  Application new paneApp;

  paneApp enableExceptionTrace;
  paneApp installExitHandlerBasic;

  xPane initialize 0, 0, 200, 100;
  xPane inputStream eventMask =
    WINDELETE|BUTTONPRESS|BUTTONRELEASE|MOVENOTIFY|EXPOSE;
  xTopLevelPane attachTo xPane;
  xCanvasPane attachTo xTopLevelPane;
  xPane map;
  xPane raiseWindow;

  xPane openEventStream;

  xCanvasPane clear;
  xCanvasPane background "blue";
  xCanvasPane pen width = 5;
  xCanvasPane pen colorName = "white";

  xCanvasPane refresh;

  verbose = FALSE;
  if (argc == 2) {
    if (!strcmp (argv[1], "-v")) {
      verbose = TRUE;
    }
  }

  WriteFileStream classInit;

  while (TRUE) {
    xPane inputStream queueInput;
    if (xPane inputStream eventPending) {
      e become xPane inputStream inputQueue unshift;
      xPane subPaneNotify e;  /* Call the classes' event handlers. */
      if (ex pending)
 	ex handle;

      switch (e eventClass value) 
	{
	  /*
	   *  Handle both types of events in case the window
	   *  manager doesn't distinguish between them.
	   */
	case MOVENOTIFY:
	  if (verbose) {
	    stdoutStream printOn "MOVENOTIFY\t%d\t%d\t%d\t%d\n",
	      e xEventData1, 
	      e xEventData2, 
	      e xEventData3, 
	      e xEventData4;
	    stdoutStream printOn "Window\t\t%d\t%d\t%d\t%d\n",
	      xPane origin x, 
	      xPane origin y, 
	      xPane size x,
	      xPane size y;
	  }
	  break;
	case RESIZENOTIFY:
	  if (verbose) {
	    stdoutStream printOn "RESIZENOTIFY\t%d\t%d\t%d\t%d\n",
	      e xEventData1, 
	      e xEventData2, 
	      e xEventData3, 
	      e xEventData4;
	    stdoutStream printOn "Window\t\t%d\t%d\t%d\t%d\n",
	      xPane origin x, 
	      xPane origin y, 
	      xPane size x,
	      xPane size y;
	  }
	  break;
	case EXPOSE:
	  if (verbose) {
	    stdoutStream printOn "Expose\t\t%d\t%d\t%d\t%d\t%d\n",
	      e xEventData1, 
	      e xEventData2, 
	      e xEventData3, 
	      e xEventData4,
	      e xEventData5;
	  }
	  break;
	case BUTTONPRESS:
	  xCanvasPane drawPoint e xEventData1, e xEventData2;
	  if (verbose) {
	    stdoutStream printOn "ButtonPress\t\t%d\t%d\t%d\t%d\t%d\n",
	      e xEventData1, 
	      e xEventData2, 
	      e xEventData3, 
	      e xEventData4,
	      e xEventData5;
	  }
	  xCanvasPane refresh;
	  break;
	case BUTTONRELEASE:
	  if (verbose) {
	    stdoutStream printOn "ButtonRelease\t\t%d\t%d\t%d\t%d\t%d\n",
	      e xEventData1, 
	      e xEventData2, 
	      e xEventData3, 
	      e xEventData4,
	      e xEventData5;
	  }
	  break;
	case WINDELETE:
 	  xPane deleteAndClose;
	  exit (0);
	  break;
	default:
	  break;
	}
    }
  }
}


Instance Variables

dragStart

A Point object that records the beginning of a canvas motion operation within a window or view port.

moveCursor

The X11Cursor displayed when moving the X11CanvasPane object within a window or view port.

pen

A Pen object that contains the width in pixels and color of lines and points drawn on the pane’s window.

regions

An AssociativeArray that contains the rectangular regions defined by the defineRegion method, below.

viewHeight

An Integer that contains the height of the pane’s window and buffers in pixels.

viewWidth

An Integer that contains the height of the pane’s window and buffers in pixels.

viewXOrg

The X coordinate of the upper right-hand corner of a canvas’ visible rectangle within a window or view port.

viewYOrg

The Y coordinate of the upper right-hand corner of a canvas’ visible rectangle within a window or view port.

Instance Methods

attachTo (Object parent_pane)
attachTo (Object parent_pane, String geometry)
attachTo (Object parent_pane, Integer xOrg, Integer yOrg)
attachTo (Object parent_pane, Integer xOrg, Integer yOrg, Integer xSize, Integer ySize)

Attach a X11CanvasPane object to its parent pane, which is typically a X11PaneDispatcher object. With one argument, this method initializes the size of the pane’s window and buffers to the parent pane’s dimensions, and positions the pane at the upper left-hand origin of the main window.

If two arguments are present, the second is a String with the geometry specifcation for the subpane. Subpane geometry strings have the form:


[-]width[%]x[-]height[%][+[-]x[%]+[-]y[%]]

The dimensions are in pixels, unless a percent sign (‘%’) follows a dimension, or a minus sign (‘-’ precedes the dimension.

When a percent sign follows the dimension, the width of the pane in pixels is the fractional percentage of the parent pane’s width or height.

If a minus sign precedes the dimension, the dimension is measured relative to the opposite edge of the parent window; i.e., a width of ‘-15’ places the subpane’s right edge 15 pixels in from the right edge of the parent window. A x position of ‘-90’ places the subpane’s top edge (not the subpane’s bottom edge) 90 pixels from the bottom edge of the parent window.

The String may contain a combination of absolute and relative dimensions.

With only the width and height given, the method positions the pane at xOrg,yOrg within the parent pane, which usually is relative to the upper left hand origin of the window. This is generally used to center modal dialog panes over their parent window.

With all four dimensions given, the method positions the pane at xOrg,yOrg within the parent pane, with the width and height xSize,ySize.

background (String color)

Set the background of the pane to color. You need to update the pane using, for example, clearRectangle, for the new background to be visible. See the note for X11Bitmap class’s background method. See X11Bitmap.

clear (void)

Clear the pane to the background color.

clearRectangle (Intger xOrg, Integer yOrg, Integer xSize, Integer ySize)

Clear the pane’s image to the window background in a rectangle bounded by the method’s arguments, and update the top-level pane’s window.

copy (X11Bitmap src_bitmap, Integer src_x_ort, Integer src_y_org, Integer src_width, Integer src_height, Integer dest_x_org, Integer dest_y_org)

Copies the contents of src_bitmap to the receiver’s drawing surface. The source dimensions are determined by src_x_org, src_y_org, src_width, and src_height. The method draws the source bitmap’s contents with the source’s upper left-hand corner at dest_x_org, dest_y_org.

The X11Bitmap's parent drawable must be the receiver’s drawable surface, and the color depths of the source and destination must match.

The process is similar to the refresh method, below, so programs do not need to call both copy and refresh for the same operation.

This slightly abbreviated example program is included in the Ctalk package at test/expect/examples-x11/canvas-copy.c as well as the XPM graphic, but almost any XPM should work as well.

#include "coffee-cup.xpm"

/* 
   Set these to the width and height of your pixmap,
   and edit the pixmapFromData expression below to
   the xpm's declaration name. 
*/
#define XPM_WIDTH 127
#define XPM_HEIGHT 141

X11CanvasPane instanceMethod drawXPMs (X11Bitmap xpmBitmap) {
  Integer new i;

  for (i = 0; i < 5; i++) {
    self copy xpmBitmap, 0, 0, XPM_WIDTH, XPM_HEIGHT, (i* 40), (i * 40);
  }

  self refresh;
}

int main () {
  X11Pane new xPane;
  InputEvent new e;
  X11PaneDispatcher new xTopLevelPane;
  X11CanvasPane new xCanvasPane;
  Application new paneApp;
  X11Bitmap new srcBitmap;

  paneApp enableExceptionTrace;
  paneApp installExitHandlerBasic;

  xPane initialize 10, 10, 300, 300;
  xTopLevelPane attachTo xPane;
  xCanvasPane attachTo xTopLevelPane;

  srcBitmap create xCanvasPane xWindowID, XPM_WIDTH, XPM_HEIGHT, 
    xCanvasPane depth;

  xPane map;
  xPane raiseWindow;
  xPane openEventStream;

  xCanvasPane background "white";

  srcBitmap pixmapFromData (0, 0, coffee_cup);

  xCanvasPane drawXPMs srcBitmap;

  while (TRUE) {
    xPane inputStream queueInput;
    if (xPane inputStream eventPending) {
      e become xPane inputStream inputQueue unshift;
      /* We don't have to use, "xPane subPaneNotify e" here, because
         the program doesn't need to handle any X events for the
         graphics classes. */
      switch (e eventClass value)
        {
        case WINDELETE:
          xPane deleteAndClose;
          exit (0);
          break;
        case EXPOSE:
        case RESIZENOTIFY:
	  xCanvasPane drawXPMs srcBitmap;
          break;
        default:
          break;
        }
    }
    usleep (100000);
  }
}

Note: The copy method retrieves the paneBuffer instance variable. If you use an expresion like the following, then the program calls the X11Bitmap : copy method instead. See X11Bitmap.


  myRcvrPane paneBuffer copy ...

defineRegion (String regionName, Integer xOrg, Integer yOrg, Integer xSize, Integer ySize)

Define a rectangular region with name regionName with the upper left-hand corner at xOrg, yOrg relative to the upper left-hand corner of the canvas. The region has the width xSize and height ySize. When handling input events, the window system clips the region to the canvas’ viewable area.

drawCircle (Circle aCircle, Integer filled, String bgColor)
drawCircle (Circle aCircle, Pen aPen, Integer filled, String bgColor)

Draw the circle defined by aCircle in the receiver’s paneBuffer. If filled is true, draws a filled circle. If the aPen argument is given, draws the circle with the color and the line width defined by the Pen, and fills the interior of the circle with bgColor.

For an example program, refer to the Circle section of this manual. See Circle.

drawPoint (Intger x, Integer y)

Draw a dot on the pane’s window at the x and y coordinates given by the arguments.

drawLine (Line aLine)
drawLine (Line aLine, Pen aPen)
drawLine (Intger startX, Integer startY, Integer endX, Integer endY)
drawLine (Intger startX, Integer startY, Integer endX, Integer endY, pen aPen)

With one argument, a Line object, draws the line using the receiver’s Pen instance variable. With two arguments, draws the Line object with the color and line width given by aPen.

If given the line’s endpoints as arguments, the method draws a line on the pane’s window from the point given by the startX and startY arguments to the point given by the endX and endY arguments, with the color and the line width given by the receiver’s Pen object.

drawLine (Intger xOrg, Integer yOrg, Integer xSize, Integer ySize)
drawLine (Intger xOrg, Integer yOrg, Integer xSize, Integer ySize, Pen aPen)

Draw a filled rectangle on the pane’s window with the upper-left hand corner at the point given by the xOrg and yOrg arguments, with the width xSize and the height ySize. If a Pen argument isn’t given, uses the line width and color defined by the receiver’s pen instance variable; otherwise uses the line width and color defined by the aPen argument.

drawRoundedRectangle (Intger xOrg, Integer yOrg, Integer xSize, Integer ySize, Integer radius)
drawRoundedRectangle (Intger xOrg, Integer yOrg, Integer xSize, Integer ySize, Pen aPen, Pen aPen, Integer radius)

Similar to drawFilledRectangle, but this method takes an extra argument, the radius of the corner arcs that round the rendered rectangle’s corners.

If the aPen argument is given, the method uses its color and line width for drawing. Otherwise, the method uses the color and line width defined by the X11CanvasPane object for drawing.

drawRectangle (Intger xOrg, Integer yOrg, Integer xSize, Integer ySize)
drawRectangle (Intger xOrg, Integer yOrg, Integer xSize, Pen aPen, Integer ySize)

Draw the borders of a rectangle on the pane’s window with the upper-left hand corner at the point given by the xOrg and yOrg arguments, with the width xSize and the height ySize.

If the aPen argument is given, the method uses its color and line width for drawing. Otherwise, the method uses the color and line width defined by the X11CanvasPane object for drawing.

drawRoundedRectangle (Intger xOrg, Integer yOrg, Integer xSize, Integer ySize, Integer radius)
drawRoundedRectangle (Intger xOrg, Integer yOrg, Integer xSize, Integer ySize, Pen aPen, Integer radius)

This method is similar to drawRectangle, except that it takes an extra argument, radius, which specifies the radius of the arcs that form the rectangle’s corners.

If the aPen argument is given, the method uses its color and line width for drawing. Otherwise, the method uses the color and line width defined by the X11CanvasPane object for drawing.

directCopy (X11Bitmap src_bitmap, Integer src_x_ort, Integer src_y_org, Integer src_width, Integer src_height, Integer dest_x_org, Integer dest_y_org)

Similar to the copy method, above, except directCopy copies the X11Bitmap object given as its argument directly to the window. This might be quicker, and doesn’t require that the program call refresh (below) to update the window contents, but this method may also cause flickering when the window is updated.

foreground (String color)

Set the background of the pane to color. See the note for X11Bitmap class’s background method. See X11Bitmap.

new (String pane_name)

Create a new X11CanvasPane instance and initialize its event handlers.

If the argument list contains more than one label, create a new X11CanvasPane object with the names given by the arguments; for example,


X11CanvasPane new pane1, pane2, pane3;

pixmapFromData (int x_org, int y_org, char *xpm_data[])

Draw the X pixmap defined by xpm_data with the upper left corner at x_org,y_org on the receiver’s pane.

The xpm_data argument is the name of the array declared at the start of a xpm file’s data array.

putStrXY (Integer xOrg, Integer yOrg String text)
putStrXY (Integer xOrg, Integer yOrg String text, String font_desc)
putStrXY (Integer xOrg, Integer yOrg String text, String font_desc, String color_name))

Write text on the receiver pane’s drawing surface (usually a X11Bitmap) at position xOrg,yOrg. See X11Bitmap.

If the fourth argument is font_desc, the method draws the text using that font, which is either a X Logical Font Descriptor if using X bitmap fonts or a Fontconfig descriptor if using Freetype fonts.

For information about Fontconfig descriptors, refer to the X11FreeTypeFont section See X11FreeTypeFont. For information about X Logical Font Descriptors, refer to the X11Font section See X11Font.

If a color_name argument is also given, draws the text using that color.

selectFont (void)
selectFont (X11FreeTypeFont font)

This method selects the font and face defined by the reciever’s ftFontVar instance variable (with no arguments), or the font given as a single argument.

These methods ensure that the font-face selection is valid in any of the client-server memory spaces, and folds the font’s weight and slant into one of Ctalk’s predefined face slots: medium, bold, italic, or bold italic. This is basically a holdover from calculating font-face combinations for .BDF fonts; future versions of Ctalk should be able to use the typeface parameters directly.

This method is basically a combination of two other methods: X11FreeTypeFont : selectFont, and the library function __ctalkSelectXFontFace, which is used in the X11Bitmap methods: faceBold, faceRegular, faceItalic, and faceBoldItalic.

The four font face slots have definitions of that are given in both X11Bitmap class and ctalkdefs.h. The definitions are listed below.


#define X_FACE_REGULAR     (1 << 0)
#define X_FACE_BOLD        (1 << 1)
#define X_FACE_ITALIC      (1 << 2)
#define X_FACE_BOLD_ITALIC (1 << 3)

refresh (void)

Redraw the pane on the main window.

refreshReframe (void)

Redraw the pane on the main window. If the user has moved the pane by clicking and dragging on it, then reposition the pane within the window.

subPaneDestroy (Object subPaneRef, InputEvent event)

Deletes the pane’s window and its data when the user closes the pane’s window.

subPaneExpose (Object subPaneRef, InputEvent event)

Redraws the pane’s window whenever it is mapped or displayed after being covered by another window.

subPanePointerInput (Object subPaneRef, InputEvent event)

Default handler for mouse ButtonPress and ButtonRelease events. This method is a no-op here, but it can be re-implemented if necessary by subclasses. The application receives pointer events, like all other events, via the top-level window’s inputStream (a X11TerminalStream object).

subPaneResize (Object subPaneRef, InputEvent event)

The handler for Resize events from the X display. Resizes the pane’s X window and adjusts the pane’s dimensions.


Next: , Previous: , Up: Classes   [Index]

X11ButtonPane

X11ButtonPane Class

The X11ButtonPane class defines instance variables and methods that draw buttons on X windows. The buttons’ appearance is defined by the values in the resources and instance variables, and they may be used to define the format of customized buttons.

X11ButtonPane objects also contain a X11LabelPane object, which is used to render the visual elements, like the text, border, and highlighting, on the button’s face.

In many cases the button’s X11LabelPane subpane inherits the definitions of the X11ButtonPane's instance variables and resources, generally when a program constructs the pane during a call to the attachTo method.

Here are several example programs. The first draws beveled buttons, the second draws rounded, non-beveled buttons.


/* -*-c-*- */

/*
 *  buttons.ca - X11ButtonPane demonstration.
 *
 *    To build, use this command line:
 *
 *      ctcc -x buttons.ca -o buttons
 *
 *    There are several options that control the buttons' appearance.
 *    Some of them use the #defines below.  Consult the X11ButtonPane
 *    section in the Ctalk language reference for a full description
 *    of the X11ButtonPane class.
 */


#include <ctalk/ctalkdefs.h>

/* Uncomment this #define to use X bitmap fonts. */
/* #define XFONTS */

/* Also, uncomment this to draw multiline labels. */
/* #define MULTILINE */

/* Uncomment if you want the buttons to be highlighted with wider
   borders and a bold label (if the font supports it). */
/* #define BOLD_HILITE */

/* See the X11FreeTypeFont section of the the Ctalk reference. */
#define FTFONT_BOLD   200
#define FTFONT_MEDIUM 100

int main (void) {
  X11Pane new mainWindow;
  X11PaneDispatcher new dispatcher;
  X11ButtonPane new lbutton;
  X11ButtonPane new rbutton;
  X11LabelPane new label;
  InputEvent new e;

  mainWindow backgroundColor = "blue";

  label canFocus = false;
  label ftFontVar initFontLib;
  label resources replaceAt "borderWidth", 0;

  label resources replaceAt "backgroundColor", "blue";
  label resources replaceAt "foregroundColor", "blue";
  label resources replaceAt "textColor", "white";
  lbutton resources replaceAt "backgroundColor", "blue";
  rbutton resources replaceAt "backgroundColor", "blue";
  lbutton resources replaceAt "ftFont", "sans serif-10";
  rbutton resources replaceAt "ftFont", "sans serif-10";

  mainWindow initialize 255, 200;
  mainWindow inputStream eventMask = 
    EXPOSE|ENTERWINDOWNOTIFY|LEAVEWINDOWNOTIFY|BUTTONPRESS|BUTTONRELEASE|KEYPRESS|KEYRELEASE|WINDELETE|MOTIONNOTIFY;
  dispatcher attachTo mainWindow;
#ifdef MULTILINE
  lbutton attachTo dispatcher, "100x60+25+100";
  rbutton attachTo dispatcher, "100x60+135+100";
#else  
  lbutton attachTo dispatcher, "90x50+25+100";
  rbutton attachTo dispatcher, "90x50+135+100";
#endif  
  label attachTo dispatcher, "147x80+c+15";

  mainWindow map;
  mainWindow raiseWindow;

  mainWindow openEventStream;

  mainWindow setWMTitle "X11ButtonPane Demo";

#ifndef XFONTS
  label ftFontVar initFontLib;
#else
  lbutton label font "fixed";
#endif  

  label multiLine "X11ButtonPane\nDemo";

#ifndef MULTILINE
  lbutton label text "Left";
  rbutton label text "Right";
#else
  lbutton label multiLine "Click\nHere";
  rbutton label multiLine "Click\nHere, Too";
#endif

#ifdef BOLD_HILITE
  lbutton label resources replaceAt "highlightForegroundColor",
    (lbutton resources at "foregroundColor");
  rbutton label resources replaceAt "highlightForegroundColor",
    (rbutton resources at "foregroundColor");
  lbutton label resources replaceAt "highlightBorderWidth", 2;
  rbutton label resources replaceAt "highlightBorderWidth", 2;
  rbutton label resources replaceAt "highlightTextBold", true;
  lbutton label resources replaceAt "highlightTextBold", true;
#endif  

  lbutton draw;
  lbutton refresh;
  rbutton draw;
  rbutton refresh;
  label draw;
  label refresh;

  while (TRUE) {
    mainWindow inputStream queueInput;
    if (mainWindow inputStream eventPending) {
      e become mainWindow inputStream inputQueue unshift;

      mainWindow subPaneNotify e;

      switch (e eventClass value)
	{
	case EXPOSE:
	  lbutton subPaneExpose (lbutton, e);
	  rbutton subPaneExpose (rbutton, e);
	  label subPaneExpose (label, e);
	  break;
	case WINDELETE:
 	  mainWindow deleteAndClose;
	  exit (0);
	  break;
	default:
	  if (lbutton haveClick) {
	    printf ("left button!\n");
	    lbutton clearClick;
	  } else if (rbutton haveClick) {
	    printf ("right button!\n");
	    rbutton clearClick;
	  }
	  break;
	}
    } else {
      usleep (1000);
    }
  }

}


/* roundbuttons.ca - X11ButtonPane Rounded Buttons -*-c-*- */

#include <ctalk/ctalkdefs.h>

/* To avoid overlapping arcs, corner_radius < (button_minor_dimen / 2) */
#define CORNER_RADIUS 13

int main (void) {
  X11Pane new mainWindow;
  X11PaneDispatcher new dispatcher;
  X11ButtonPane new lbutton;
  X11ButtonPane new rbutton;
  X11LabelPane new label;
  InputEvent new e;

  mainWindow backgroundColor = "blue";
  label ftFontVar initFontLib;
  label resources replaceAt "backgroundColor", "blue";
  rbutton resources replaceAt "backgroundColor", "blue";
  lbutton resources replaceAt "backgroundColor", "blue";
  rbutton resources replaceAt "foregroundColor", "blue";
  lbutton resources replaceAt "foregroundColor", "blue";


  mainWindow initialize 225, 150;
  mainWindow inputStream eventMask = 
    EXPOSE|ENTERWINDOWNOTIFY|LEAVEWINDOWNOTIFY|BUTTONPRESS|BUTTONRELEASE|KEYPRESS|KEYRELEASE|WINDELETE|MOTIONNOTIFY;
  dispatcher attachTo mainWindow;
  lbutton attachTo dispatcher, "80x30+22+100";
  rbutton attachTo dispatcher, "80x30+124+100";
  label attachTo dispatcher, "147x80+32+15";

  mainWindow map;
  mainWindow raiseWindow;

  mainWindow openEventStream;

  mainWindow setWMTitle "X11ButtonPane Demo";

  label multiLine "X11ButtonPane\nRounded Button\nDemo";
  label canFocus = false;
  label borderWidth = 0;
  label resources replaceAt "borderColor", "blue";
  label resources replaceAt "textColor", "white";
  label resources replaceAt "backgroundColor", "blue";
  label resources replaceAt "foregroundColor", "blue";

  rbutton resources replaceAt "foregroundColor", "blue";
  lbutton resources replaceAt "foregroundColor", "blue";
  rbutton resources replaceAt "textColor", "white";
  lbutton resources replaceAt "textColor", "white";


  lbutton label text "Left";
  rbutton label text "Right";

  lbutton bevelEdges = false;
  lbutton radius = CORNER_RADIUS;
  rbutton bevelEdges = false;
  rbutton radius = CORNER_RADIUS;

  lbutton draw;
  lbutton refresh;
  rbutton draw;
  rbutton refresh;
  label draw;
  label refresh;

  while (TRUE) {
    mainWindow inputStream queueInput;
    if (mainWindow inputStream eventPending) {
      e become mainWindow inputStream inputQueue unshift;

      mainWindow subPaneNotify e;

      switch (e eventClass value)
	{
	case EXPOSE:
	  lbutton subPaneExpose (lbutton, e);
	  rbutton subPaneExpose (rbutton, e);
	  label subPaneExpose (label, e);
	  break;
	case WINDELETE:
 	  mainWindow deleteAndClose;
	  exit (0);
	  break;
	default:
	  if (lbutton haveClick) {
	    printf ("left button!\n");
	    lbutton clearClick;
	  } else if (rbutton haveClick) {
	    printf ("right button!\n");
	    rbutton clearClick;
	  }
	  break;
	}
    } else {
      usleep (1000);
    }
  }

}

Retrieving Button States

The X11ButtonPane class provides several methods to retrieve the state of a button object.

haveClick

Returns true or false depending on whether the button has been clicked recently. This means that programs do not need to constantly monitor a button’s state. If haveClick returns true, then the click state can be cleared with the clearClick method (below).

isClicked

This method returns true or false depending on whether the pointer’s button 1 is currently pressed within the button’s area.

clearClick

Resets a previous clicked state as returned by the haveClick method, above.

text

Returns a String with the button’s text. If the text is displayed on several lines, the method concatenates the lines with a space character ‘' '’ between them.

Resources

The resources that X11ButtonPane : new defines by default are stored in the resources instance variable, an AssociativeArray that is declared in X11Pane class. For a description, see the resources instance variable documentation. See PaneResources.

backgroundColor

A String that contains the color used to draw the button’s background. This includes the actual subwindow that receives the button’s events from the display server. The resources’ default value is ‘gray’.

If you want the button’s background to match its parent window, add a statement like the following before attaching the button to its parent window with the attachTo method (assuming in this example that the parent window’s background is also ‘blue’).


myButton resources replaceAt "backgroundColor", "blue";

When the program creates the actual X subwindow (again, by calling the attachTo method), the Ctalk libraries then check for a resource or instance variable named either, ‘background’ or ‘backgroundColor’ and uses its value to set the X subwindow’s background color.

borderColor

A String that contains the name of the color used to draw the label’s borders. The default value is ‘black’.

borderWidth

An Integer that contains the width of the visible border in pixels. Its default value is ‘1’. To draw buttons without borders, programs can set this resource to ‘0’.

foregroundColor

A String that defines the color used for the button’s drawable face. Its default color is ‘gray’.

font

A String that contains the Fontconfig descriptor of the button’s default font. Its default value is ‘sans serif-12’. The button’s label inherits the descriptor as its default font when attaching the button (and its X11LabelPane label) to its parent window with the attachTo method.

To change the label’s font, include a statement like the one in the example, after the button has been fully initialized by the attachTo method.


myButton label resources replaceAt "ftFont", "URW Gothic L-10";

The font, ‘URW Gothic L,’ is a Type 1 font included in the Ghostscript gsfonts package.

Note that the older, ‘ftFont’ key has been changed to, ‘font’, so it’s consitent with other classes’ resources. The class still uses the older ‘ftfont’ resource key if a program uses it.

highlightForegroundColor

A String that contains the color used to fill the button’s face when the pointer is over the button. Its default value is ‘gray90’.

If you want buttons to display a thicker border and bold font for highlighting, you can include a set of statements like the following in the program, after the program attaches the button to its parent pane.


myButton label resources replaceAt "highlightForegroundColor",
  (myButton resources at "foregroundColor");
myButton label resources replaceAt "highlightBorderWidth", 2;

To cause the button’s text to be emphasized when the button is highlighted, add a line like this one.


myButton label resources replaceAt "highlightTextBold", true;

This is only effective if the font library supports boldfacing (i.e., mainly Freetype and Type 1 fonts).

In these cases, the label subpane doesn’t automatically inherit these values, so it’s necessary to use the label’s declaration, myButton label, directly.

highlightBorderColor

A String that defines the color to use when drawing a highlighted border. The default is ‘black’.

highlightBorderWidth

An Integer that defines the border width in pixels when the button is highlighted. The default value is ‘1’. (That is, the button doesn’t use a heavier border for emphasis by default.)

The label subpane inherits this value when the attachTo method constructs the button pane.

highlightHPenColor
highlightVPenColor
shadowPenColor

These are String objects that define the colors for the highlighted and shadowed button edges when drawing a beveled button.

textColor

A String that contains the color used to draw the button’s text. This value is inherited by the button’s label widget. The textColor resources’ default value is ‘black’.

Instance Variables

bevelEdges

A Boolean that causes the widget to display beveled edges if true.

bevelWidth

An Integer that defines the width of the button’s bevelled edges in pixels.

borderColor

A String that contains the name of the button’s border color when drawing a non-beveled button.

borderMargin

An Integer that defines the distance between the border and the pane’s edge in pixels, when drawing a non-beveled button.

borderWidth
borderHighlighWidth

Integer values that determine the width a non-beveled button when it is clicked on and in its non-highlighted state.

clicked

A Boolean that is true when the pointer’s Button 1 is pressed while over the widget, and false otherwise.

highlightHPen
highlightVPen
shadowPen

Pen objects that defines the color of the edges’ bevels when drawing a beveled widget.

hover

A Boolean that is true if the pointer is over the button’s window, false otherwise. Normally, this causes the button to draw its face using highlighted colors, fonts, and borders.

label

A X11LabelPane object that contains a button’s text and provides the methods to draw on the button’s surface. See X11LabelPane.

radius

If greater than zero (‘0’), this Integer defines the radius in pixels of the curves displayed when the button is drawn with rounded corners.

Instance Methods

attachTo (Object parentPane, String geometry)
attachTo (Object parentPane)
attachTo (Object parentPane, Integer xOrg, Integer yOrg)
attachTo (Object parentPane, Integer xOrg, Integer yOrg, Integer xSize, Integer ySize)

Attaches the receiver to the parentPane named by parentPane, with the placement and size given by geometry. The parent pane should generally be a X11PaneDispatcher which directs X events to the correct subpane.

The positioning of subwindows within the parent window is controlled by the arguments to the attachTo methods; in particular, these methods accept a geometry specification, as an argument, which has the following format.

If only parentPane is given as an argument, the child pane occupies the entire width and height of the parent pane.

If the program has initialized the Xft Freetype libraries, this method also fills in the pane object’s ftFontVar instance variable with the selected font, which is normally a system-defined standard font during app initialization.


width[%]xheight[%]+x[%]+y[%]

If a dimension does not contain a percent (‘%’) sign, the dimensions are in pixels. With a percent sign, the dimensions are a fractional percentage of the parent pane’s width or height, or a horizontal or vertical distance that places the subwindow’s upper left-hand corner that distance from the parent window’s upper left-hand corner.

clearClick (void)

Resets a button’s clicked state as returned by haveClick to false.

clearClick (configureFonts

A convenience method that localizes the button’s label font for more uses, especially with composite widgets like dialog boxes. This method set’s the label subpane’s font to the button’s ‘font’ resource.

draw (void)

Draws the button and its label on the pane’s buffer so the widget can be displayed with the refresh method.

If the program has saved a font specification to the widget’s ftFontVar instance variable, then this method also selects the font before drawing the widget. If you want a button to display a different font than the surronding window, this is the way to declare and save a font specification.


/* The button inherits the ftFont method from X11Pane class. */

button ftFont "DejaVu Sans", FTFONT_ROMAN, FTFONT_MEDIUM, DEFAULT_DPI, 10.0;
button ftFontVar saveSelectedFont;

The X11FreeTypeFont section describes the parameters that the X11FreeTypeFont class uses when selecting fonts. See X11FreeTypeFont.

haveClicked (void)

Returns a Boolean true or false depending on whether the button has been clicked previously. In that case, the program should call the clearClick method to detect further button clicks.

isClicked (void)

Returns a Boolean value of true or false depending on whether the pointer’s button 1 is currently pressed within the button.

new (String newObjectName)

The X11ButtonPane constructor. Creates a X11ButtonPane object with the classes’ instance variables, and initialized the object’s event handlers and Pen objects for drawing a beveled button.

subPaneExpose (Object subPane, InputEvent event)
subPaneButtonPress (Object subPane, InputEvent event)
subPaneEnter (Object subPane, InputEvent event)
subPaneLeave (Object subPane, InputEvent event)
subPaneResize (Object subPane, InputEvent event)

The class’s handlers for events generated by the X server.

subPaneFocusIn (void)
subPaneFocusOut (void)

Handlers for focus changes generated by the application. These do not respond to X events and don’t require any arguments. These methods are designed to be called by methods like X11PaneDispatcher : shiftFocus (e.g., in response to a Tab keypress).

text (void)

Returns a String with the button’s text. If the text is displayed on multiple lines, this method concatenates the lines with a space character (‘ ’) between them.


Next: , Previous: , Up: Classes   [Index]

X11CheckBoxPane

X11CheckBoxPane Class

A single X11CheckBoxPane object draws a checkable box on the main window. The class has methods for initialization, drawing, changing the box’s clicked/unclicked state, and the instance data for retrieving the state.

Here is an example program that displays a X11CheckBoxPane object.

/*
 *  X11CheckBoxPane demo.
 */	

/* 
 *  To display bevels, uncomment the following line. 
 */
/* #define BEVEL */

/* 
 * To draw a checkbox with rounded corners, uncomment the following
 * lines and set FRAME_RADIUS and FILL_RADIUS to non-zero values.  The
 * checkboxes use different radius' for the frame and the filled
 * interior of a checked checkbox because most radius are a
 * significant percent of the boxes' sides, which can make the frame
 * look like a rectangle with rounded corners, and also make the fill
 * rectangle look like an oval, if the shapes use the same radius.
 */
/* #define RADIUS */
/* #define FRAME_RADIUS 0 */
/* #define FILL_RADIUS 0 */

/* 
 * To change the width, height, and internal margin of the
 * check box, edit these #defines.  The measurements are in
 * pixels.
 */
#define CHECKBOX_WIDTH   15
#define CHECKBOX_HEIGHT  15
#define CHECKBOX_MARGIN  1
#define CHECKBOX_BORDER  1

#include <ctalk/ctalkdefs.h>

int main (int argv, char **argc) @{
  X11Pane new xPane;
  X11PaneDispatcher new xTopLevelPane;
  X11CheckBoxPane new xCheckBoxPane;
  X11LabelPane new label;
  X11CanvasPane new canvas;
  InputEvent new e;
  Exception new ex;
  Pen new arrowPen;

  xPane ftFontVar initFontLib;

  xPane initialize 0, 0, 300, 300, "Checkbox Demo";
  xPane inputStream eventMask = BUTTONPRESS|BUTTONRELEASE|WINDELETE|EXPOSE;
  xTopLevelPane attachTo xPane;

  /* Note that the geometry string in the, "attachTo," call below
     contains only the X,Y origin of the check box.  In this case, the
     size of the check box is taken from the object's resources, which
     we can adjust any time before, "attachTo," sizes the actual
     drawing surfaces. */
  xCheckBoxPane resources replaceAt "width", CHECKBOX_WIDTH;
  xCheckBoxPane resources replaceAt "height", CHECKBOX_HEIGHT;
  xCheckBoxPane resources replaceAt "margin", CHECKBOX_MARGIN;
  xCheckBoxPane resources replaceAt "borderWidth", CHECKBOX_BORDER;
#ifdef RADIUS
  xCheckBoxPane resources replaceAt "frameRadius", FRAME_RADIUS;
  xCheckBoxPane resources replaceAt "fillRadius", FILL_RADIUS;
#endif  

  label ftFontVar selectFontFromFontConfig "URW Gothic L-12";
  label ftFontVar saveSelectedFont;
  label justify = LABEL_LEFT;
  label text "Please Click";
  label resources replaceAt "borderWidth", 0;
  
  canvas attachTo xTopLevelPane, "280x280+10+10";
  xCheckBoxPane attachTo xTopLevelPane, "+20%+40%";
  label attachTo xTopLevelPane, "160x40+35%+50";

#ifdef BEVEL
  xCheckBoxPane resources replaceAt "bevel", true;
#endif

  xPane map;
  xPane raiseWindow;

  xPane openEventStream;

  xPane setWMTitle "Checkbox Demo";
  canvas background "white";
  label draw;
  xCheckBoxPane draw;
  arrowPen width = 1;
  arrowPen colorName = "black";
  
  while (TRUE) @{
    xPane inputStream queueInput;
    if (xPane inputStream eventPending) @{
      e become xPane inputStream inputQueue unshift;
      xPane subPaneNotify e;  /* Call the classes' event handlers. */
      if (ex pending)
	ex handle;
      
      switch (e eventClass value)
     	@{
	case BUTTONPRESS:
	  if (e eventData == xCheckBoxPane xWindowID) @{
	    if (xCheckBoxPane clicked) @{
	      printf ("clicked\n");
	    @} else @{
	      printf ("unclicked\n");
	    @}
	  @}
	  break;
	case EXPOSE:
	  label draw;
	  canvas paneBuffer drawRectangle 10, 10, 260, 260, false,
	    1, "black", 0;
	  canvas paneBuffer drawLine 110, 45, 70, 100, arrowPen;
	  canvas paneBuffer drawLine 70, 100, 70, 90, arrowPen;
	  canvas paneBuffer drawLine 70, 100, 81, 97, arrowPen;
	  canvas refresh;
	  break;
	case WINDELETE:
      	  xPane deleteAndClose;
     	  exit (0);
     	  break;
     	default:
     	  break;
     	@}
    @}
  @}
@}

Retrieving a X11CheckBox Object’s State

The X11CheckBoxPane class declares the checked instance variable, which is either true or false depending on when and how many times a user has clicked on the checkbox. Successive clicks change the checked instance variable’s state from false to true and back again. The draw method draws the checkbox filled or empty depending on the state of the checked instance variable.

Here is the portion of the program above that retrieves the checkbox’s state. The check box object is named xCheckBoxPane. The condition, ‘if (e eventData == xCheckBoxPane xWindowID)’ insures that the program uses only pointer clicks that fall within xCheckBoxPane's boundaries.


if (e eventData == xCheckBoxPane xWindowID) {
  if (xCheckBoxPane clicked) {
    printf ("clicked\n");
  } else {
    printf ("unclicked\n");
  }
}

Resources

backgroundColor

A String that contains the color name of the checkbox’s background. The default is ‘white’.

bevel

A Boolean that determines whether to draw beveled edges on the checkbox’s interior. The default is ‘false’.

borderWidth

An Integer that specifies the width in pixels of the checkbox’s border. The default is 1px.

clickColor

A String that contains the color name of the checkbox’s border and interior when checked. The default is ‘darkslategray’.

fillRadius
frameRadius

These are Integer objects which, if nonzero, cause the checkbox to be drawn with rounded corners. There is a separate dimension for the margin and the checkbox interior because the radius comprises a significant amount of a checkbox’s size, so the margin might appear like a rectangle with rounded corners, while the interior might look like a circle or oval, if the shapes use the same corner radius.

darkShadowColor
lightShadowColor

The names of the colors of the light and dark shadows that the checkbox displays inside its border if the ‘bevel’ resource is true.

height
width

These are Integer values that contain the width and height of the checkbox, in pixels. Their default value, ‘15px’, is set when the checkbox object is created, and may be changed before the checkbox is attached to its parent pane. If the checkbox’s attachTo method is given a geometry that also contains a width and height, then this latest dimension setting determines the checkbox’s size when displayed.

margin

The distance in pixels between the inner edge of the border and the edge of the check in a filled checkbox. The default is 1px.

Instance Variables

clicked

A Boolean that changes between true and false every time the check box is clicked. The variable’s value also determines whether the checkbox’s interior is filled.

Instance Methods

attachTo (Object parentPane, String geometry)

Attaches the receiver X11CheckBoxPane to its parentPane using the dimensions given by geometry. The method also creates the drawing surfaces with the correct dimensions.

The geometry argument may optionally omit the checkbox’s width and height, which causes the method to use the width and height given by the checkbox object’s resources. For example, if the program contains an expression like the following:


xCheckBoxPane attachTo xTopLevelPane, "+25%+25%";

Then the method will create the checkbox with the dimensions preset by the object’s ‘width’ and ‘height’ resources. If the checkbox’s dimensions are determined in this manner, a program my change the checkbox’s size any time before the attachTo method is called. However, if the program contains a statement like the following,


xCheckBoxPane attachTo xTopLevelPane, "20x20+25%+25%";

Then the program uses the ‘20x20’ size given as the argument, which is the most recent dimension that the program has defined..

draw (void)

This method draws the checkbox. It uses the clicked instance variable state to determine whether to draw a filled checkbox, as well as the classes’ resources that have been set in the object to determine check checkbox’s style; i.e., the checkbox’s size, whether its edges are beveled or rounded, and the checkbox’s color.

new (String paneName)

The X11CheckBoxPane constructor. Creates a new X11CheckBox with the name given by paneName, and makes it available to the method that contains the statement, or to the entire program if the new X11CheckBoxPane is declared in a global scope. The method also initializes the event handlers and resources that are defined in the class.

onClick (Object subPane, InputEvent event)

This method receives a ‘BUTTONPRESS’ event from the display system, and toggles the receiver checkbox’s clicked instance variable between true and false. The method changes the clicked state only in response to ‘BUTTONPRESS’ events; a corresponding ‘BUTTONRELEASE’ event is ignored.


Next: , Previous: , Up: Classes   [Index]

X11LabelPane

X11LabelPane Class

X11LabelPane objects display text in graphical windows. The class provides instance variables and methods that control the label’s font, border, justification, whether the label is highlighted when the pointer is over it, and formatting of single and multiple line labels.

Formatting label text for multiple line labels, as well as controlling the text’s justification, is described in the subsections below.

Here is a simple example program that displays a X11LabelPane widget.


#include <ctalk/ctalkdefs.h>

#define FTFONTS    /* Comment this line out to use X fonts. */
#define MULTILINE  /* Comment out to display a single line label. */
#define ROUNDED    /* Comment out to draw borders with straight edges. */

int main (int argv, char **argc) {
  X11Pane new xPane;
  X11PaneDispatcher new xTopLevelPane;
  X11LabelPane new xLabelPane;
  InputEvent new e;
  Exception new ex;

#ifdef FTFONTS 
  xPane ftFontVar initFontLib;
  xLabelPane resources replaceAt "ftFont", "DejaVu Sans-12:bold";
  xLabelPane selectFont;
#endif       

  xLabelPane resources replaceAt "backgroundColor", "white";

  xPane initialize 0, 0, 300, 300;
  xPane inputStream eventMask =
    WINDELETE|EXPOSE|ENTERWINDOWNOTIFY|LEAVEWINDOWNOTIFY;
  xTopLevelPane attachTo xPane;
  xLabelPane attachTo xTopLevelPane, "150x150+c+50";
  xPane map;
  xPane raiseWindow;

  xPane openEventStream;

#ifndef FTFONTS
  xLabelPane font "-*-helvetica-medium-r-*-*-*-120-*-*-*-*-*-*";
#endif

#ifdef MULTILINE
  xLabelPane multiLine "Labels\ncan occupy\nmultiple\nlines.";
#else
  xLabelPane text "A Label";
#endif

#ifdef ROUNDED
  xLabelPane radius = 10;
#endif  

  xLabelPane draw;
  
  while (TRUE) {
    xPane inputStream queueInput;
    if (xPane inputStream eventPending) {
      e become xPane inputStream inputQueue unshift;
      xPane subPaneNotify e;  /* Call the classes' event handlers. */
      if (ex pending)
	ex handle;
      
      switch (e eventClass value)
     	{
     	case WINDELETE:
      	  xPane deleteAndClose;
     	  exit (0);
     	  break;
     	default:
     	  break;
     	}
    }
  }
}

Multiple Line Labels

If the label’s text contains embedded newline ‘\n’ characters, and the text is defined using the multiLine method, below, then the text is display on multiple lines, with the breaks appearing where the newline characters appear in the text. The text is displayed centered vertically, and justified as described in the next section.

For single line labels, use the text method with a String argument to fit on one line.

Justification

The X11LabelPane widget contains a simple layout engine that can center label text, or justify it against the right or left margins.

The text’s justification is determined by the setting of the justification instance variable, which can have one of three values, which are defined by the following macros:


LABEL_LEFT
LABEL_RIGHT
LABEL_CENTER

These macros are defined in the ctalk/ctalkdefs.h include file. To use them, add the line


#include <ctalk/ctalkdefs.h>

to the beginning of the source module.

The widget calculates the right and left margins as the following:


(aLabel margin) + (aLabel highlightBorderWidth) + (aLabel padding)

The highlighted border width is included regardless of whether the border actually is drawn or the label is hightlighted, so text alignment remains constant if a program draws and then obscures the border, or when the pointer passes over the label.

Resources

The resources that X11LabelPane : new defines by default are stored in the resources instance variable, an AssociativeArray that is declared in X11Pane class. For a description, see the resources instance variable documentation. See PaneResources.

boldFont

The font that the label uses for highlighting text by printing in bold type.

font
ftFont

A String that contains the text font’s Fontconfig font descriptor. The default is ‘sans serif-12’.

Note that the class still checks for the ‘ftFont’ resource for compatibility with previous versions, but the class now uses the ‘font’ resource to make int consistent with other classes.

For more information about Fontconfig descriptors, refer to the X11FreeTypeFont class. See X11FreeTypeFont.

backgroundColor

A String that contains the pane’s background color. This is the color of the pane’s X subwindow, so it is generally useful to set this to the color of the surrounding window, if you want the label to blend in with its surrounding drawing area.

borderColor

A String that contains the name of the pane’s border color. The default is black

An Integer that contains the line width the pane’s border. The default is ‘1’.

foregroundColor

A String that contains the name of the color that fills the pane’s visible area. The default is ‘white’.

grayedColor

The color of the text and border when the pane is grayed. The default is gray.

highlightBorderColor

The color of the border when the pane is highlighted. The default is ‘black’.

highlightBorderWidth

The width of the border when the pane is highlighted the default is ‘2’.

highlightForegroundColor

A String that contains the color name of the pane’s visible area when it the pane is in a highlighted state, which is generally when the pointer is over the pane’s window area. The default is ‘orange’.

highlightTextBold

A Boolean that causes the label to display its text in a bold font when the label is highlighted, if the font library supports it. The default is ‘false’.

highlightTextColor

A String that contains the text color when the pane is in a highlighted state, generally when the pointer is over the pane. The default is black.

textColor

A String that contains the text color when the pane is not highlighted. The default is ‘black’.

xFont

A String that contains the text fonts X Logical Font Descriptor. Refer to xfontsel(1) and xlsfonts(1) for information about XLFD’s. The default is ‘fixed’.

Instance Variables

boldFont

A X11FreeTypeFont object that the label uses to highlight text by printing it in boldfaced text.

border

A Boolean that controls whether the label displays a border. The default is ‘true’.

borderColor

A String that contains the name of the border’s color if the label displays a border. The default is ‘black’.

borderWidth

An Integer that defines the width of the border in pixels when the widget is not highlighted. The default is ‘2’.

grayed

A Boolean that determines whether to draw the widget in a grayed, or inactive, state. The state has no other effect for a X11LabelPane object. It can indicate the state of other controls in the window. The default is false.

grayedColor

A String that contains the name of the color to draw the widget when it is grayed. The default is is ‘gray’.

haveMultiLine

A Boolean that indicates whether the widget’s text is defined using the multiLine method, and indicates that the widget should format the label’s text to span multiple lines.

highlightBackgroundColor

A String that contains the color to draw a highlighted label’s background.

highlightBorderColor

A String that contain’s the name of a highlighed border’s color. The default is ‘black’.

highlightBorderWidth

An Integer that determines the width in pixels of the label’s border when the widget is highlighed. The default is two pixels.

highlightTextColor

A String that contains the name of the text color when the widget is drawn highlighted. The default is ‘black’.

initialized

A Boolean that indicates that the widget has initialized its instance variable states from the resource values. Normally, a class does this in an attachTo method, but this class uses the superclasses’ attachTo methods, so the class uses this to perform the initialization on the first call to the draw method.

justify

An Integer that determines whether to draw the label’s text centered horizontally, or justified on the right or left margins.

This variable recognizes three values, which are #defines in the ctalk/ctalkdefs.h include file. The definitions are:


LABEL_LEFT
LABEL_CENTER
LABEL_RIGHT

To use these macros, add the statement


#include <ctalk/ctalkdefs.h>

near the top of the source module.

leading

An Integer that defines the space between lines of a multi-line label. This variable only affects text drawn using scalable fonts of the Freetype library. X11 bitmap fonts contain the leading in the character glyphs.

lineHeight

An Integer that contains the label’s font height + the leading.

margin

An Integer that defines the distance in pixels between the border and the edges of the X11LabelPane object.

padding

An Integer that defines the minimum distance in pixels between the inner edge of the border and the pane object’s text.

parHeight

For multi-line labels, an Integer that contains the height of all of the lines of text. For single-line labels, the lineHeight and parHeight are the same.

radius

An Integer that describes the radius to round the corners of the border with. If the value is ‘0’ (the default), then draw borders with straight edges.

textColor

A String that defines the name of the text color when the widget is not highlighted. The default is ‘black’.

textLine

A String that contains the label’s text if the text is to appear on a single line. The default is an empty string.

textLines

An Array that contains a multi-line widget’s text, as set using the multiLine method.

Instance Methods

draw (void)
drawButtonLayout (void)

Draws the text of the label, and updates the visible label on the display. The instance variables in this class and the text font’s class allow programs to adjust how the text is laid out.

The drawButtonLayout method is similar, but it uses a different algorithm that is more suited to laying out text on button labels.

If the widget has saved a font specification to its ftFontVar instance variable, then this method also selects the font before drawing the label. If you want a label to have a different font than the rest of the window, this is how to declare and save a font specification.


/* The label inherits the ftFont method from X11Pane class. */

label ftFont "DejaVu Sans", FTFONT_ROMAN, FTFONT_MEDIUM, DEFAULT_DPI, 10.0;
label ftFontVar saveSelectedFont;

The X11FreeTypeFont section describes the parameters that the X11FreeTypeFont class uses when selecting fonts. See X11FreeTypeFont.

new

Creates a new X11LabelPane object, initializes the object’s instance variables and event handlers, and sets the pane’s default foreground and background colors.

selectFontOld (void)

This method was formerly named selectFont, although it has been superceded by X11CanvasPane : selectFont.

subPaneExpose (Object subPane, InputEvent event)

The widget’s Expose event handler. When the widget receives an Expose event, this method redraws the widget.

subPaneEnter (Object subPane, InputEvent event)
subPaneLeave (Object subPane, InputEvent event)

The widget’s EnterNotify and LeaveNotify event handlers. These methods set the subPane's highlight instance variable to true or false (if the widget is configured to accept input focus), then calls the draw method to redraw the label.

subPaneResize (Object subPane, InputEvent event)

Handles resize events received from the display server.

font (String fontdesc)

Sets the X11 font to use for the label’s text. When drawing using Freetype scalable fonts, the widget uses the ftFont method from X11CanvasPane.

text (String labelText)

Sets the text of a single-line label.

text (String labelText)

Sets the receiver’s textLine instance variable for single-line labels.

multiText (String labelText)

Divides the text given as the argument into lines where newline characters ‘\n’ appear in the text, and sets the elements of the receiver’s textLine instance variable to one line for each array element. Also sets the haveMultiLine instance variable to true.


Next: , Previous: , Up: Classes   [Index]

X11ListPane

X11ListlPane Class

The X11ListPane class displays a scrolling list of items. Clicking the left pointer buttons selects an item, which is available to the program for as long as the X11ListPane object is available.

The list may be larger than the pane can display at one time, and the list may be scrolled using the scrollbar on the left edge of the pane, or the up and down arrow keys, or the C-p and C-n keys.

Here is a program that displays a X11ListPane object, and prints the selected item on the terminal when the program exits.

Clicking on an item using the left mouse button (or the single button on pointing devices that have only one button) selects that item. Clicking on the item again de-selects the item, or if a different item is clicked, then that item is selected.

If the user presses the Shift key while clicking on an item, it is selected in addition to any items that have already been selected.

Pressing the Ctrl key while clicking selects every item in a range between the first selected item in the list and the last selected item.


/* listpane.ca, a X11ListPane demonstration. -*-c-*- */

#define N_ITEMS 30

#include <ctalk/ctalkdefs.h>

int main (int argv, char **argc) {
  X11Pane new xPane;
  X11PaneDispatcher new dispatcher;
  X11ListPane new listPane;
  X11LabelPane new label;
  X11ButtonPane new button;
  InputEvent new e;
  Integer new nEvents;
  Integer new verbose;
  Integer new i;
  X11Cursor new cursor;
  String new itemText, itemN;
  List new itemTextOut, itemNOut;

  xPane ftFontVar initFontLib;
  listPane selectFont;
  label selectFont;

  xPane resources atPut "backgroundColor", "blue";
  label resources replaceAt "backgroundColor", "blue";
  label resources replaceAt "foregroundColor", "blue";
  label resources replaceAt "highlightForegroundColor", "blue";
  label resources replaceAt "textColor", "white";
  label resources replaceAt "highlightTextColor", "white";
  label border = false;

  xPane inputStream eventMask = EXPOSE|ENTERWINDOWNOTIFY|LEAVEWINDOWNOTIFY| \
    KEYPRESS|KEYRELEASE|WINDELETE|BUTTONPRESS|BUTTONRELEASE|MOTIONNOTIFY| \
    SELECTIONCLEAR|SELECTIONREQUEST;
  xPane initialize 300, 400;
  dispatcher attachTo xPane;
  label attachTo dispatcher, "100x70+10+30%";
  button attachTo dispatcher, "60x45+50%+-75";
  listPane attachTo dispatcher, "-15x-90+100+24";

  for (i = 1; i < N_ITEMS; ++i) {
    listPane add "item " + i asString;
  }
  
  xPane map;
  xPane raiseWindow;

  xPane openEventStream;

  xPane setWMTitle "X11TextListPane Demo";
  label multiLine "Select\nan\nItem";
  button label text "Done";

  listPane draw;
  listPane refresh;

  while (TRUE) {
    xPane inputStream queueInput;
    if (xPane inputStream eventPending) {
      e become xPane inputStream inputQueue unshift;

      xPane subPaneNotify e;

      switch (e eventClass value)
        {
        case WINDELETE:
          xPane deleteAndClose;
          exit (0);
          break;
        default:
          if (button haveClick) {
            button clearClick;
            xPane deleteAndClose;
	    if (listPane nItemsSelected > 1) {
	      i = 0;
	      listPane selectedItems itemTextOut;
	      listPane selectedItemsN itemNOut;
	      itemNOut map {
		itemN = self;
		/* This is a convenient way to retrieve
		   the i'th item in the itemTextOut list. */
		itemText = *(itemTextOut + i);
		printf ("%d: %s\n", itemN, itemText);
		++i;
	      }
	    } else {
	      printf ("%d: %s\n",
		      listPane selectedItemN,
		      listPane selectedItemText);
	    }
            exit (0);
          }
        break;
        }
    }
  }
}

Retrieving Selected Items

The method nItemsSelected returns the number of list items that are currently selected. If only one item is selected, a program use the selectedItemN and selectedItem methods to retrieve the selected item’s position in the list, and its text. This example shows how to print the list’s selection when only one item is selected.


if (myListPane nItemsSelected == 1) {
   printf ("%d: %s.\n", myListPane selectedItemN,
     myListPane selectedItemText);
}

If there are multiple items selected (i.e., nItemsSelected returns an Integer greater than 1), a program can retrieve and display all of the results the selectedItems and selectedItemsN methods, and display all of the results using an expression like this (although this example doesn’t print both sets of results at once).


List new itemTextOut, itemNOut;

...

if (myListPane nItemsSelected > 1) {
   myListPane selectedItems itemTextOut;
   myListPane selectedItemsN itemNOut;
   itemNOut map {
     printf ("%d\n", self) 
   }
   itemTextOut map {
     printf ("%s\n", self) 
   }
}

Resources

borderColor

A String that contains the named color of the pane’s border. The default is ‘gray’.

borderWidth

An Integer that defines the width in pixels of the pane’s border The default is ‘2’ pixels.

font

A String that contains the Fontconfig descriptor of the font used to display the list items. The default is ‘sans serif-12’.

keyScrollIncrement

The distance in pixels the list should scroll up or down when the user scrolls the list. The default is 4 pixels.

leftMargin

An Integer that defines the width in pixels of between the left edge of pane’s list area and the left margin of the item text. The default is 4 pixels.

scrollBorderColor

A String that contains the color for the edges of the scroll channel. The default is ‘darkgray’.

scrollBorderWidth

An Integer that contains the width in pixels of the scroll channel’s border. The default is 1 pixel.

selectColor

A String that contains the background color of selected items. The default is ‘lightblue’.

selectStyle

An Integer that defines whether a select bar extends to the right edge of an item’s text, or to the right margin of the pane. The class recognizes the #defines ‘LIST_SELECT_PANE’ and ‘LIST_SELECT_ITEM’, which are defined in ctalkdefs.h. The default is ‘LIST_SELECT_PANE’, so to change it to only highlight an item’s text, a program should contain the line,


myListPane resources replaceAt "selectStyle", LIST_SELECT_ITEM;

textColor

A String that contains the color of the list text. The default is ‘black’.

thumbColor

A String that defines the color of the scroll bar’s thumb. The default is ‘darkgray’.

thumbMargin

An Integer that defines the distance in pixels between the thumb and its channel. The default is 2 pixels.

vAlignHint

An Integer that helps display items vertically centered in their layout boxes. While X11ListPane objects generally can approximate how font renderers align text within their layout boxes, fonts and even different library versions may vary this. Increasing this number shifts the item’s text downward within the box when it is displayed. Smaller numbers (including negative numbers) shift the text upward. The default is 2px.

Instance Variables

borderPen

A Pen object that contains the color and width of the border. Its values are defined by the ‘borderColor’ and ‘borderWidth’ resources.

buttonState

An Integer that records whether any of the pointer buttons are pressed. The possible values may be any combination of the following definitions, or none (‘0’).


BUTTON1MASK     (1 << 0)
BUTTON2MASK     (1 << 1)
BUTTON3MASK     (1 << 2)

items

A List that contains the pane’s list items. Each item uses an ItemBox object to store its information. The definition of the ItemBox class (which is also defined in the X11ListPane class library) is:


String class ItemBox;

ItemBox instanceVariable org Point 0;
ItemBox instanceVariable ext Point 0;
ItemBox instanceVariable size Point 0;

iInit

An Integer that simply causes the drawItemList method to wait for class to initialize the fonts it needs.

scrollBorderPen

A Pen object that contains the width and the color of the scroll channel’s borders. Its values are set by the ‘scrollBorderColor’ and ‘scrollBorderWidth’ resources.

selectionPen

A Pen object that defines the color used to fill list selections. Its value is set by the ‘selectColor’ resources. The pen’s width is not used.

scrollWidth

An Integer that defines the width in pixels of the scroll bar. It is initialized from the value of the scrollWidth resource when the X11ListPane object is attached to its parent window by the attachTo method. The default is 10 pixels.

scrollWidth

An Integer that records whether a Shift or Ctrl key is currently being pressed. The state is used when selecting multiple items, and may be either or both of the following, or none.


shiftStateShift     (1 << 0)
shiftStateCtrl      (1 << 1)

thumbExt
thumbOrg

These are Integers that define the position and height of the scroll thumb in pixels. The value of thumbExt is calculated from the percentage of the list contents that are visible in the window at any one time. The value of thumbOrg records the vertical position of the thumb where the user moved it using the pointer.

viewStartY

An Integer that contains the distance from the top edge of the first list item (which is stored in the item’s org instance variable) to the top of the portion of the list that is visible in the pane’s window.

Instance Methods

add (String itemText)

Addes a list item using itemText as its contents. New items are added sequentially to the end of the item list. The method also calculates the item’s width and height in pixels, and the position of the top and bottom edges relative to the top edge of the zero’eth item in the list. Each item is stored in the pane’s items list using an ItemBox object, which stores each item’s dimensions as well as the item’s contents. The ItemBox class is defined in the X11ListPane class library.

attachTo (Object parentPane, String geomspect)

Attaches the X11ListPane object to parentPane, with the dimensions given by geomspect. Also initializes the object’s drawing surfaces and the actual window within the parent window.

The geomspec argument defines the width, height and position of the pane within the parent window. For a description of its contents, refer to the X11PaneDispatcher class See X11PaneDispatcher.

calcThumb (void)

Calculates the height of the scroll thumb as a proportion of the percentage of the list contents that can be displayed on the pane at any one time, and stores the value in the pane’s thumbExt instance variable (which is itself a Point object, so a program would retrieve the thumb’s height like this).


thumbHeight = myListPane thumbExt y;

draw (void)

This method draws the the pane’s scroll frame and borders, and calls the drawItemList and drawThumb methods to display the list contents.

drawItemList (void)

This method is called by the draw method to display the visible items on the pane’s window.

drawThumb (void)

Another method that is called by the draw method, this method draws the scroll thumb within the scroll bar.

new (String paneName)

The X11ListPane constructor. This method creates a X11ListPane object with the name given by paneName, and initializes the object’s resources and event handlers.

nItemsSelected (void)

Returns an Integer with the number of items that are currently selected.

onClick (Object subPane, InputEvent event)
onEnter (Object subPane, InputEvent event)
onExpose (Object subPane, InputEvent event)
onKey (Object subPane, InputEvent event)
onLeave (Object subPane, InputEvent event)
onMotion (Object subPane, InputEvent event)
onResize (Object subPane, InputEvent event)

These are the X11ListPane object’s event handlers, which receive events from the display server. They are initialized by the new method.

selectedItemN (void)

This method returns an Integer with the index of the selected item.

The indexes are numbered from zero, which is the index of the first item.

If no item is selected, this method returns ‘-1’.

selectedItems (List itemsOut)

Pushes a String object with the text of each currently selected item onto the itemsOut list.

selectedItemsN (List itemsOut)

Pushes an Integer with the numerical position of each selected item onto itemsOut. The indexes start with 0 reprsenting the first item, 1 representing the second item, and so on.

selectedItemText (void)

Returns a String with the text of the selected item. If no item is selected, the method returns and empty String.

selectFont (void)

Selects the font to display the list items, and saves the font parameters in the object’s ftFontVar instance variable, which is inherited from X11Pane class.


Next: , Previous: , Up: Classes   [Index]

X11MessageBoxPane

X11MessageBoxPane Class

A X11MessageBoxPane object displays a popup window that contains a text message and a button that closes the window.

The button’s text is displayed by a X11LabelPane object, and the button is a X11ButtonObject. Generally, X11MessageBoxPane objects override any input to the program that opened them, so they contain their own event loop, in the show method.

Here is an example of a program that creates its own X11MessageBoxPane object, and then opens it when the user clicks on the main window’s button.


/* messagebox.ca - X11MessageBox Demonstration -*-c-*- */

#include <ctalk/ctalkdefs.h>

/* See the X11FreeTypeFont section of the the Ctalk reference. */
#define FTFONT_BOLD   200
#define FTFONT_MEDIUM 100

int main (void) {
  X11Pane new mainWindow;
  X11PaneDispatcher new dispatcher;
  X11ButtonPane new button;
  X11LabelPane new label;
  X11MessageBoxPane new messageBox;
  InputEvent new e;

  label textColor = "white";
  label canFocus = false;
  label borderWidth = 0;

  label ftFontVar initFontLib;
  label ftFontVar notifyLevel XFT_NOTIFY_NONE;

  mainWindow backgroundColor = "blue";
  label resources replaceAt "backgroundColor", "blue";
  button resources replaceAt "backgroundColor", "blue";
  messageBox resources replaceAt "backgroundColor", "blue";
  
  mainWindow initialize 255, 200;
  mainWindow inputStream eventMask = 
    EXPOSE|ENTERWINDOWNOTIFY|LEAVEWINDOWNOTIFY|BUTTONPRESS|BUTTONRELEASE|KEYPRESS|KEYRELEASE|WINDELETE|MOVENOTIFY;

  dispatcher attachTo mainWindow;
  button attachTo dispatcher, "125x75+c+100";
  label attachTo dispatcher, "177x80+34+15";
  messageBox attachTo dispatcher, "300x200";

  mainWindow map;
  mainWindow raiseWindow;

  mainWindow openEventStream;

  mainWindow setWMTitle "X11MessageBoxPane Demo";


  label multiLine "X11MessageBoxPane\nDemo";
  label resources replaceAt "textColor", "lightgray";
  label resources replaceAt "foregroundColor", "blue";
  label resources replaceAt "borderColor", "blue";

  button label multiLine "Open\nMessageBox";

  button label resources replaceAt "highlightForegroundColor", "gray80";

  /* Icon IDs, like ICON_INFO, are defined in ctalkdefs.h. */
  messageBox resources replaceAt "iconID", ICON_INFO;

  /* The program uses the "replaceAt" method because the key/value
     entry for "backgroundColor" the X11MessageBoxPane : new method
     has alread created an entry for backgroundColor. */
  messageBox resources replaceAt "backgroundColor", "blue";
  messageBox resources replaceAt "foregroundColor", "blue";
  messageBox resources replaceAt "messageText",
    	       "Hello, messageBox!\nYour message text here.";

  while (TRUE) {
    mainWindow inputStream queueInput;
    if (mainWindow inputStream eventPending) {
      e become mainWindow inputStream inputQueue unshift;

      mainWindow subPaneNotify e;

      switch (e eventClass value)
	{
	case EXPOSE:
	  button subPaneExpose (button, e);
	  label subPaneExpose (label, e);
	  break;
	case BUTTONRELEASE:
	  messageBox showManaged button;
	  break;
	case WINDELETE:
 	  mainWindow deleteAndClose;
	  exit (0);
	  break;
	}
    } else {
      usleep (1000);
    }
  }

}

Resources

background

The window’s background color, and the background color of the message label and the close button. The value is a String that contains a X11 named color. The default is ‘gray’. For a list of X11 color names, see showrgb(1).

buttonText

A String that contains the text that appears in the button. The default is ‘Ok’.

foregroundColor

A String with the name of the color that the messagebox window is filled with. The default is ‘gray’.

geometry

A String that contains the message window’s size, and, optionally, its position. The value is set to the dimensions that are given as arguments to the attachTo method.

iconID

An Integer that contains the identifier to the icon to be displayed. Ctalk defines the following constants for icons in ctalkdefs.h and in the graphics libraries.


ICON_NONE
ICON_CAUTION
ICON_INFO
ICON_QUESTION
ICON_STOP

The default is ‘ICON_NONE’, which causes no icon to be displayed. Any other constant causes an icon to be displayed to the left of the message text. The widget adjusts the size and position of the text automatically to provide space for the icon.

messageColor

A String that contains the color of the message text. The default is ‘black’. The message box sets the label’s textColor resource to this value.

messageFont

A String that contains the Fontconfig font descriptor. The default is ‘sans serif-12’. The pane uses this value to set the label’s ‘fcFont’ resource.

messageText

A String that contains the text of the message to be displayed. The default is ‘Sample message text.’.

pad

An Integer that contains the space in pixels betwween the button and label widgets, and between each widget and the edge of the window. The default is 10 pixels.

titleText

A String that contains the message window’s title text. The default is ‘Message’.

Instance Variables

button

A X11ButtonPane object that closes the window when clicked. The button’s default text is, ‘Ok’. Programs can change the text with a statement like the following, which changes the button’s text to, ‘Close’.


myMessageBox resources atPut "buttonText", "Close";

initialized

A Boolean that is true if the pane has already been initialized. When a message box is closed, it is not deleted - it is simply unmapped from the display. This variable is set to true so that the message box is initialized only once.

label

A X11LabelPane that displays the message box’s text. As configured, the label is the same color as the main message box window, and uses no borders. The label’s text is controlled by the resource, ‘messageText’. To set the message text, use a statement like the following.


myMessageBox resources atPut "messageText", "Today Is\nJanuary 3rd";

The class draws the label using multiline formatting, so if you want the text to appear on multiple lines, include the sequence ‘\n’ in the text (that’s a backslash and the character, ‘n’, not a literal newline).

keyState

An Integer which records whether the Tab or Enter keyboard shortcuts have been pressed. Pressing Tab highlights the pane’s button, and pressing Enter withdraws the pane’s window from the display, and the show method returns to the program that opened the message box.

mainWindowPtr

A Symbol that contains a pointer to the main window.

Instance Methods

attachTo (Object parentPane, String geometry)

Sets the message box’s dimensions and creates the object’s buffers and main window. Unlike other X11Pane subclasses, this method does not immediately attach the message box’s object to its parent pane, so the message box isn’t displayed until the program invokes the show or showManaged method.

draw (void)

Draws the label and button subpanes in the message box’s buffers and the buffers of the button and label subpanes. After calling this method, the refresh method makes the changes visible.

fill (String colorName)

A convenience method that fills the pane window with the color given as the argument.

initWidgets (void)

Initializes the message box’s button and label subpanes when the pane’s window is first opened. When constructed this method sets the initialized instance variable to ‘true’, so when the message box appears again, this method is a no-op.

new (String newPaneName)

The X11MessageBoxPane constructor.

refresh (void)

After the method draw renders the main window and the label and the button subwindow’s contents on the pane objects’ buffers, this method updates the visible window with the contents of the buffers.

show (void)

This method displays the message box, waits for events from the display system, and closes the message box when its button is clicked, then returns to the calling program.

show (X11ButtonPane buttonPane)

This method is similar to the show method, but it takes as its argument the pane object from the main window that caused the message window to open.

This method sets the main window’s button to be unclicked and then redrawn.

This method manages X11ButtonPane objects specifically, but it can be subclassed to manage any pane class object.

subPaneButton (Object subPane, InputEvent event)

This is the event handler for button press and button release events from the display hardware. When a button is clicked on, the message box draws the button in its clicked state. When the button is released, the pane draws the button unclicked, then unmaps the message box window from the display, and returns to the main program.

subPaneExpose (Object subPane, InputEvent event)

Handles drawing the message box when the program receives an Expose event from the display. This method calls the message box’s draw and refresh methods.

withdraw (void)

Unmaps the message box’s window from the display after the pane object receives a button release event while processing the show method. When the show or showManaged method receives the button release event, this method is called to remove the pane’s window from the display, and the show or showManaged method returns to the main program.


Next: , Previous: , Up: Classes   [Index]

X11PopupMenu

X11PopupMenu Class

A X11PopupMenu object displays a basic menu at the point where the user has pressed a mouse button in a program window.

At this time the class is still very basic - it doesn’t support menu decorations like titles or separators, nor does it support submenus.

This example program demonstrates how a program might use a basic X11PopupMenu object. It also contains examples of simple helper methods that are called when a user clicks on a menu item.


/* popupmenu.ca - X11PopupMenu Demonstration -*-c-*- */

#include <ctalk/ctalkdefs.h>

/* See the X11FreeTypeFont section of the the Ctalk reference. */
#define FTFONT_BOLD   200
#define FTFONT_MEDIUM 100

X11MessageBoxPane new aboutBox;
X11FileSelectDialog new fileBox;

X11MessageBoxPane instanceMethod configure (void) {
  self resources replaceAt "backgroundColor", "darkblue";
  self resources replaceAt "foregroundColor", "darkblue";
  self resources replaceAt "messageColor", "white";
  self resources replaceAt "messageText",
    "X11PopupMenu Demo\nCtalk Version: 0.0.66";
  self resources replaceAt "iconID", ICON_INFO;

}

/* 
   This is initialized internally when we create the app's
   window. 
*/
extern Atom wm_delete_window;

X11PopupMenu instanceMethod clientExit (X11Pane parentPane) {
  "This is a typical handler to exit an app from a menu entry.
  It simulates a user selecting a close window option on the
  window's title bar. It still needs an independent connection to
  the display server, however."
  XEvent e;
  Display *d_l;
  if ((d_l = XOpenDisplay (getenv ("DISPLAY"))) != NULL) {
    e.type = ClientMessage;
    e.xclient.serial = 0l;
    e.xclient.send_event = true;
    e.xclient.display = d_l;
    e.xclient.window = parentPane xWindowID;
    e.xclient.format = 32;
    e.xclient.data.l[0] = wm_delete_window;
    XSendEvent (d_l, parentPane xWindowID, true, 0l, &e);
    XFlush (d_l);
    XCloseDisplay (d_l);
  }
}

int main (void) {
  X11Pane new mainWin;
  X11PaneDispatcher new dispatcher;
  X11LabelPane new heading, subHeading;
  X11PopupMenu new mainMenu;
  InputEvent new e;
  XEvent ev_ret;
  Display *display;

  mainMenu add "Browse Files...", "fileBox show";
  mainMenu add "About...", "aboutBox show";
  mainMenu add "Exit", "self clientExit parentPane";

  heading canFocus = false;
  heading resources replaceAt "borderWidth", 0;
  subHeading canFocus = false;
  subHeading resources replaceAt "borderWidth", 0;

  heading ftFontVar notifyLevel XFT_NOTIFY_NONE;

  heading ftFontVar initFontLib;

  aboutBox configure;

  mainWin backgroundColor = "blue";
  heading resources replaceAt "backgroundColor", "blue";
  subHeading resources replaceAt "backgroundColor", "blue";
  
  mainWin initialize 255, 200;
  /*
   * NOTE - Make a note in the docs about this, or add it to the
   * parent window's event mask automagically.
   */
  mainWin inputStream eventMask = 
    EXPOSE|ENTERWINDOWNOTIFY \
    |LEAVEWINDOWNOTIFY|BUTTONPRESS \
    |BUTTONRELEASE|KEYPRESS|KEYRELEASE \
    |MOVENOTIFY|WINDELETE \
    |WMFOCUSCHANGENOTIFY;

  dispatcher attachTo mainWin;
  heading attachTo dispatcher, "177x60+c+25";
  subHeading attachTo dispatcher, "190x60+c+75";
  /* The dialogs, which are launched by the menu, still need
     to be attached to the menu's parent window, even if it's
     only to set their dimensions to something similar to 
     the program's dimensions. */
  aboutBox attachTo dispatcher, "300x200";
  fileBox attachTo dispatcher, "250x350";

  mainWin map;
  mainWin raiseWindow;

  mainWin openEventStream;

  mainWin setWMTitle "X11PopupMenu Demo";

  heading multiLine "X11PopupMenu\nDemo";
  heading resources replaceAt "textColor", "lightgray";
  heading resources replaceAt "foregroundColor", "blue";

  subHeading resources replaceAt "ftFont", "DejaVu Sans-8";
  subHeading resources replaceAt foregroundColor, "blue";
  subHeading resources replaceAt textColor, "lightgray";
  subHeading multiLine "Click anywhere\nto display the menu.";

  while (TRUE) {
    mainWin inputStream queueInput;
    if (mainWin inputStream eventPending) {
      e become mainWin inputStream inputQueue unshift;

      mainWin subPaneNotify e;

      switch (e eventClass value)
	{
	case EXPOSE:
	  heading subPaneExpose (heading, e);
	  subHeading subPaneExpose (subHeading, e);
	  break;
	case BUTTONPRESS:
	  mainMenu popup mainWin, e xEventData5, e xEventData6;
	  display = mainMenu displayPtr;
	  while (XCheckTypedEvent (display, ButtonPress, &ev_ret))
	    ;
	  break;
	case WINDELETE:
 	  mainWin deleteAndClose;
	  exit (0);
	  break;
	}
    } else {
      usleep (1000);
    }
  }

}

Constructing Menus

The structure of method items is simple: each item contains the text of the label that is visible to the user, and also the text of the Ctalk expression that the class will execute when the user selects the item. The add method, which is used to add the items, also calculates the entry’s geometry within the menu.

Here is the part of the demo program above that adds items to the menu.


mainMenu add "Browse Files...", "fileBox show";
mainMenu add "About...", "aboutBox show";
mainMenu add "Exit", "self clientExit parentPane";

In addition, the X11PopupMenu class provides these parameters that can be used in the expressions that the menu class calls.


parentPane     # The main window object that the menu is popped
               # up over.
itemName       # A String object that contains the item's visible
               # text.
exprText       # A String that contains the text of the menu item's
               # expression.
itemIndex      # An Integer that contains the ordinal position of
               # the menu item; the topmost item's index is 0, and
               # the index of the bottom item is <number_of_items> - 1.

The labels are actually parameters of the X11PopupMenu : execItem method, and expressions can use them verbatim. There’s more information in the execItem method’s documentation.

Resources

backgroundColor

The name of the color used as the menu’s background.

bottomMargin

The vertical distance between the bottom menu item’s text and the bottom of the menu.

cursorHPad

The number of pixels between the start of a menu item’s text and the left edge of the menu’s selection bar.

font

The Fontconfig descriptor of the font used to display the menu’s text.

gadgetRMargin

The distance in pixels between a gadget to the right of a menu entry’s text, and the right edge of the menu.

gadgetSpace

The distance between the right edge of the longest menu item’s text, and a gadget on the right of the menu.

hlColor

The name of the background color used to highlight menu entries.

hlTextColor

The text color of highlighted items.

hMargins

The distance in pixels between the edge of the menu and the left edge of the text, and between the right edge of the longest menu item’s text and the right edge of the menu.

itemSpace

The vertical distance in pixels between menu items.

textColor

The name of the color used to display non-highlighted text.

topMargin

The distance in pixels between the top of the menu and the first menu item.

Instance Variables

bgPixel
hlPixel
hlTextPixel

The X pixel values of the menu’s background color, and highlighted background and text colors.

gadgetSpace

The distance between the right edge of the longest menu entry’s text and any decorations on the right side of the menu.

itemHeight
textHeight

The height in pixels of a menu item’s text, and the total height of each item.

items

A AssociativeArray that maintains the list of menu entries.

Instance Methods

add (String menuText, String expression)

Add an item to the receiver menu. The menuText argument contains the text that will appear in the menu entry, and the expression argument is the Ctalk expression that the program executes when the user selects the item.

draw (void)

Draw the menu items, the highlight bar, and any decorations on the side of the menu.

execItem (X11Pane parentPane, String itemName, String exprText, Integer itemIndex)

Executes the selected menu item’s expression. The method makes avaiable parameters that contain information about the item. The parameters, which expressions can use verbatim, are listed here.


parentPane     # The main window object that the menu is popped
               # up over.
itemName       # A String object that contains the item's visible
               # text.
exprText       # A String that contains the text of the menu item's
               # expression.
itemIndex      # An Integer that contains the ordinal position of
               # the menu item; the topmost item's index is 0, and
               # the index of the bottom item is <number_of_items> - 1.

new (String objectName)

The X11PopupMenu constructor. Creates a X11PopupMenu object and its instance variables, and initializes the object’s resources and event handlers.

subMenuGadget (Integer baseline Boolean hilight)

Draws submenu indicator to the right of a menu entry.

popup (X11Pane parentPane, Integer displayX, Integer displayY)

Display the menu at the pointer’s position, relative to the upper-right corner of the display.

This method also withdraws the menu when the user selects an item, and whenever the pointer moves outside of the menu or the window defined in parentPane.


Next: , Previous: , Up: Classes   [Index]

X11ScrollBarPane

X11ScrollBarPane Class

A X11ScrollBarPane object draws a basic scroll bar and allows the user to move the scroll thumb by clicking and dragging.

Applications can set and read the scroll thumb’s size and position via the object’s instance variables. In particular, the thumbHeight instance variable sets the vertical size of the scroll thumb, and the thumbDimensions method sets the coordinates and height of the thumb when sliding it to a new position.

The scroll bar’s frame and thumb instance variables are both Rectangle objects. Applications can use the Rectangle class’s methods, like dimension, to set the scroll position, and can read the position using the Rectangle object’s instance variables. See Rectangle.

Here is an example program that demonstrates the basic steps needed to draw a scroll bar.


int main (int argv, char **argc) {
  Integer new xWindowSize;
  Integer new yWindowSize;
  X11Pane new xPane;
  X11PaneDispatcher new xTopLevelPane;
  X11ScrollBarPane new xScrollBarPane;
  X11CanvasPane new xCanvasPane;
  InputEvent new e;
  Exception new ex;
  Application new scrollDemo;
  String new pctstr;
  Integer new strWidth;

  scrollDemo enableExceptionTrace;
  scrollDemo installExitHandlerBasic;
  scrollDemo installAbortHandlerBasic;

  xWindowSize = 400;
  yWindowSize = 400;

  xPane ftFontVar initFontLib;
  xPane ftFont "DejaVu Sans", 0, 0, 0, 48.0;

  xPane initialize xWindowSize, yWindowSize;
  xPane inputStream eventMask = WINDELETE|EXPOSE|BUTTONPRESS|BUTTONRELEASE|MOTIONNOTIFY;
  xTopLevelPane attachTo xPane;
  xScrollBarPane attachTo xTopLevelPane, "20x100%+0+0";
  xCanvasPane attachTo xTopLevelPane, "380x100%+20+0";

  xPane map;
  xPane raiseWindow;

  xPane openEventStream;

  xScrollBarPane background "lightblue";
  xScrollBarPane refresh;
  
  xCanvasPane background "navy";
  xCanvasPane foreground "navy";
  xPane ftFontVar namedX11Color "white";
  xCanvasPane clear;
  pctstr printOn "%0.2f%%", xScrollBarPane percent * 100.0;
  strWidth = xPane ftFontVar textWidth pctstr;
  xCanvasPane putStrXY (380 / 2) - (strWidth / 2), (400 / 2), pctstr;
  xCanvasPane refresh;

  while (TRUE) {

    xPane inputStream queueInput;
    if (xPane inputStream eventPending) {
      e become xPane inputStream inputQueue unshift;

      if (ex pending)
  	ex handle;

      xPane subPaneNotify e;

      switch (e eventClass value)
 	{
	case EXPOSE:
	  xCanvasPane paneBuffer clear;
	  pctstr printOn "%0.2f%%", xScrollBarPane percent * 100;
	  strWidth = xPane ftFontVar textWidth pctstr;
	  xCanvasPane putStrXY (380 / 2) - (strWidth / 2), (400 / 2), pctstr;
	  xCanvasPane refresh;
	  break;
 	case WINDELETE:
  	  xPane deleteAndClose;
 	  exit (0);
 	  break;
  	default:
	  xCanvasPane paneBuffer clear;
	  pctstr printOn "%0.2f%%", xScrollBarPane percent * 100;
	  strWidth = xPane ftFontVar textWidth pctstr;
	  xCanvasPane putStrXY (380 / 2) - (strWidth / 2), (400 / 2), pctstr;
	  xCanvasPane refresh;
  	  break;
 	}
    }
  }
}

Instance Variables

arrowCursor

A X11Cursor object that contains the resource ID of the widget’s arrow cursor. See X11Cursor.

bevel

A Boolean that determines whether the scroll thumb is drawn as a beveled widget.

dragging

A Boolean object that is True while the right mouse button is clicked while over the scroll thumb. See Boolean.

frame

A Rectangle object that contains coordinates of the scroll bar frame. See Rectangle.

frameWidthVar

An Integer that contains the width of the scrollbar’s visible frame in pixels.

framePen

A Pen object that sets the line color and width of the scroll bar frame. See Pen.

grabCursor

A X11Cursor object that contains the resource ID of the widget’s grab cursor. See X11Cursor.

lastY

An Integer object that contains the previous PointerMotion event’s y coordinate while dragging. See Integer.

margin

An Integer that defines the distance in pixels between the pane’s edge and the outer edge of the scrollbar frame.

mouseOver

A Boolean that is true if the pointer is over the scrollbar frame, false otherwise.

padding

An Integer that defines the distance in pixels between the inner edge of the scrollbar frame and the thumb.

thumb

A Rectangle object that contains coordinates of the scroll thumb. See Rectangle.

thumbBackgrondColor

A String that contains the name of the X11 color used to draw the thumb.

thumbErasePen

A Pen object that sets the color and line width of the scroll thumb background when animating the thumb. See Pen.

thumbHeight

An Integer that sets the height of the scroll thumb. See Integer.

thumbPen

A Pen object that sets the color and line width of the scroll thumb. See Pen.

thumbPix

A X11Bitmap that contains the thumb’s beveled image, if the pane is drawn with bevel set to ‘true’.

Instance Methods

attachTo (Object parentPane)

Attaches the X11ScrollBarPane object to its parent pane, which is usually a X11PaneDispatcher object. Also sizes the pane and its buffers to fit within the visible window, and sets the dimensions of the scrollbar’s visible frame and thumb.

background (String colorName)

Sets the pane’s background color to colorName, and also sets the color to use when performing scrollbar animations.

drawThumb (void)
eraseThumb (void)

These methods animate the thumb so that it tracks the pointer’s position within the scrollbar.

frameWidth (Integer lineWidth)

Calculates the scrollbar frame’s dimensions within the pane’s margins for the line width in pixels given as the argument.

new (String paneName)

Creates a new X11ScrollBarPane object, initializes the pane’s event handlers, and sets the default colors of the pane’s elements.

percent (void)

Returns a Float with the position of the thumb’s top edge in the usable trough of the scrollbar, as a percentage between 0.0 and 1.0.

The usable area of the trough is defined as the distance that the top edge of the scrollbar thumb can travel within the scrollbar’s margins; i.e,


usableTrough = aScrollBar size y -
                  ((aScrollBar margin * 2) +
                   (aScrollBar frameWidthVar * 2) +
                   (aScrollBar padding * 2) +
                   (aScrollBar thumbHeight));

pointIsInThumb (Integer x, Integer, y)

This method returns a Boolean value of true if the point x,y is within the scroll bar thumb.

subPaneDestroy (Object subPane, InputEvent event
subPaneExpose (Object subPane, InputEvent event
subPanePointerInput (Object subPane, InputEvent event
subPanePointerMotion (Object subPane, InputEvent event
subPaneEnterNotify (Object subPane, InputEvent event
subPaneLeaveNotify (Object subPane, InputEvent event

The X11ScrollBarPane object’s event handlers for DESTROY, EXPOSE, BUTTONPRESS/BUTTONRELEASE, MOTIONNOTIFY, ENTERWINDOWNOTIFY, and LEAVEWINDOWNOTIFY X Window System events.

thumbDimensions (Integer y, Integer height)

Calculates the position and size thumb’s rectangle within the pane using the vertical y position and the thumb’s height.

thumbPercent (Float pct)

Calculates the thumb’s height as a percent of the trough’s vertical distance. The argument, pct, is a Float between 0.0 and 1.0.

Note that, in order to make these calculations and update the thumb height in the pane’s viewing area, the scrollbar must already be attached to its parent pane, and the program needs to be receiving X events. So this method should only be used after a call to, for example, X11Pane : openEventStream.


Next: , Previous: , Up: Classes   [Index]

X11TextEntryPane

X11TextEntryPane Class

A X11TextEntryPane object displays a basic, single line text entry box. Users can enter text when the pointer is over the entry box, and the application can retrieve the text that the user enters as the contents of the X11TextEntryPane : entryText method.

Editing is performed using the pointer’s left button or cursor motion keys to position the cursor. Users may insert text at that point, or delete characters using the Backspace and Delete keys. The class also supports cursor motion using Emacs-compatible editing keys.


Action            Keys
------            ----
Character Left    Left Arrow,  Ctrl-B
Character Right   Right Arrow, Ctrl-F
Start of Text     Home,        Ctrl-A
End of Text       End,         Ctrl-E
Delete Right      Del,         Ctrl-D
Delete Left       Backspace
Delete Selection  Backspace (If Selecting Text)

In addition, X11TextEntryPane objects support cutting and pasting of entry text using the X primary selection. The class uses the standard pointer buttons to select text and to paste text selected by other X client programs.


Action                           Pointer Buttons
------                           ---------------
Set Insertion Point              Button 1 (Left Button) Press and 
                                 Release
                                 
Paste Selected Text At Cursor    Button 2 (Center Button, or Both
                                 Left and Right Buttons) Press and
                                 Release

Select Text to Place on the      Button 1 (Left Button) Press + Drag
X selection                      Pointer Across Text

Here is an example of an X11TextEntryPane object’s use.


/* entrypane.ca, a X11TextEntryPane demonstration. -*-c-*- */

/* Uncomment if you want the entry box to echo dots. */
/* #define DOTS */

#include <ctalk/ctalkdefs.h>

int main (int argv, char **argc) {
  X11Pane new xPane;
  X11PaneDispatcher new dispatcher;
  X11TextEntryPane new entry;
  X11LabelPane new label;
  X11ButtonPane new button;
  InputEvent new e;
  Integer new nEvents;
  Integer new verbose;
  X11Cursor new cursor;

  xPane ftFontVar initFontLib;
  xPane resources atPut "backgroundColor", "blue";
  label resources replaceAt "backgroundColor", "blue";
  label resources replaceAt "foregroundColor", "blue";
  label resources replaceAt "highlightForegroundColor", "blue";
  label resources replaceAt "textColor", "white";
  label resources replaceAt "highlightTextColor", "white";
  label border = false;

#ifdef DOTS
  entry dots = true;
#endif  
  
  xPane inputStream eventMask = EXPOSE|ENTERWINDOWNOTIFY|LEAVEWINDOWNOTIFY| \
    KEYPRESS|KEYRELEASE|WINDELETE|BUTTONPRESS|BUTTONRELEASE|MOTIONNOTIFY| \
     SELECTIONCLEAR|SELECTIONREQUEST;
   xPane initialize 300, 185;
  dispatcher attachTo xPane;
  label attachTo dispatcher, "100x80+10+10";
  button attachTo dispatcher, "70x55+c+100";
  entry attachTo dispatcher, "140x32+120+32";

  xPane map;
  xPane raiseWindow;

  xPane openEventStream;

  xPane setWMTitle "X11TextEntryPane Demo";
  label multiLine "Enter your\ntext:";
  button label text "Done";

  while (TRUE) {
    xPane inputStream queueInput;
    if (xPane inputStream eventPending) {
      e become xPane inputStream inputQueue unshift;

      xPane subPaneNotify e;

      switch (e eventClass value)
        {
        case EXPOSE:
          entry refresh;
          break;
        case WINDELETE:
          xPane deleteAndClose;
          exit (0);
          break;
        default:
          if (button haveClick) {
            button clearClick;
            xPane deleteAndClose;
            printf ("You entered: %s\n", entry entryText);
            exit (0);
          }
        break;
        }
    }
  }
}

Echoing Dots

Normally a X11TextEntryPane object displays characters as you type them. However, you can set the dots instance variable to ‘true’ to cause the pane to display dots instead, like this.


entry dots = true;

Resources

For information about how to set and retrieve resources, refer to the X11Pane section See PaneResources.

backgroundColor

The background color of the entry pane’s window. The default is ‘white’.

borderColor

The color of the entry pane’s border. The default is ‘gray’.

borderWidth

The width in pixels of the pane’s border when the pointer is not above it. The default is 1 pixels.

cursorAdvanceHint

The distance in pixels between the last character and the cursor when the point is positioned at the end of the buffer for appending text. The default is 2 pixels when built and run with MacOS, 4 pixels for Linux and other systems.

font

A String that contains the display font’s descriptor. In order to maintain alignment between the character display and insertion point, the display font be monospaced.

The default font for MacOS is ‘Bitstream Vera Sans Mono-14:weight=medium;slant=roman’. The default font for Linux and other systems is ‘DejaVu Sans Mono-12:weight=medium;slant=roman’.

hoverBorderWidth

The width in pixels of the pane’s border when the pointer is over it and the pane’s window has the input focus. The default is 4 pixels.

hPad
vPad

The distance in pixels between the edges of the text and the edge to the window, including the width of the border. The default is 4 pixels.

spacingHint

The distance in pixels that the pane adjusts the displayed text’s horizontal spacing. The default is -1 for MacOs and 0 for Linux and other systems.

selectionColor

A String that contains the background color of selected text. The default is ‘orange’.

textColor

The color that the pane uses to display text. The default is ‘black’.

Instance Variables

baselineY

An Integer that contains the vertical location of the text’s baseline in the entry window, in pixels.

button

An Integer that records the state of the pointer buttons when the program receives a BUTTONPRESS or BUTTONRELEASE event.

center

A Boolean that helps determine how a part of the text is displayed if the text is too large to fit within the pane.

clipX

An Integer that contains the leftmost character that is displayed when the text is scrolled leftward.

chars

A List that contains the entry pane’s text. Each member of the list is a CharCell, a class used exclusively by X11TextEntryPane objects, which contains both the character and information about its dimensions and placement within the window.

cursor

A X11Cursor object that contains a text editing cursor which is displayed when the pointer is over the pane and it has the keyboard input focus.

cursorX

An Integer that contains the character index of the cursor and insertion point within the text.

dots

A Boolean, which, if set by a program, causes the entry pane to echo dots instead of the typed characters. In order to display dots, the calling program should contain a statement like this.


entry dots = true;

hover

A Boolean object that is true when the pointer is over the pane and the pane has the keyboard input focus.

paneWidthChars

The width of the pane as measured in the number of characters that can be displayed at one time using the current font. The pane uses the paneWidth variable’s value to help determine which section of the text to display when the entire text is too wide to fit within the pane’s window.

point

An Integer that determines where each character that the user types is inserted into the buffer’s text. If point is equal to the size of the chars list, then the pane appends the characters to the end of the text.

selecting

A Boolean that is true if the user is in the process of selecting text; that is, when the pointer’s left button is depressed and the pointer is dragged across the text.

sEnd
sStart

These are Integer, which, if non-zero contain the start and end indexes of selected text within the entry pane’s buffer.

shiftState

An Integer that records whether a Shift, Control, or Caps Lock key is being pressed while typing.

spacingHint

An Integer that contains the value of the ‘spacingHint’ resource.

Instance Methods

attachTo (X11Pane parentPane, String geometry)

Attaches the entry pane to parentPane using the dimensions and placement given by geometry. For information about how to specify a pane’s geometry, refer to the X11PaneDispatcher class See X11PaneDispatcher.

calclulateSpaceAppend (void)

This method defers calculating the width of a space that the user appends to the text until a following character is added.

charCellAt (Integer charIndex)

Returns the CharCell object for the charIndex position in the text. (I.e., the nth element of the chars instance variable’s list).

charIndex (Integer clickX, Integer clickY)

Returns an Integer with the index of the character displayed at clickX,clickY.

clearSelection (void)

Clears the selection in response to events from the user or from another X client application requesting the selection ownership.

deleteAt (Integer charIndex)

Deletes the character at charIndex and returns the element, which is a CharCell object. CharCell objects are a class that X11TextEntryPane class uses to store each character, as well as its dimensions and placement within the window.

deleteForward (Integer charIndex)

This deletes the character at the insertion point and is called when the user presses the Delete or Ctrl-D key.

draw (void)

Draws the pane’s border, its text contents after determining how far left to scroll the text, and calls drawCursor to draw the insertion cursor. The drawing occurs on the pane’s paneBuffer instance variable, which is a X11Bitmap object. To make the the pane’s contents visible in the application’s window, use the refresh method.

drawCursor (void)

Draws the pane’s editing cursor at the text insertion point.

drawSelection (void)

If any text is selected, highlight the text using the color defined by the selectionColor resource.

entryText (void)

Returns the text contents of the entry pane as a String object.

inputWidth (Integer startIdx)

Returns an Integer that contains the width in pixels of the input text starting at character startIdx. This method determines how far leftward text should be scrolled to keep the insertion point and its surrounding text visible in the pane’s window.

insertAt (Integer charIndex)

Inserts a CharCell object at charIndex in the entry object’s chars list.

new (String paneName)

The X11TextEntryPane constructor. Initializes resources to their default values and the event handler instance variables to the classes’ event handlers. These instance variables are declared in X11PaneDispatcher class See X11PaneDispatcher.

reflow (void)

Recalculates the character placement in the entry object’s chars list. This method should be used after any operation that inserts or deletes text in the middle of the chars list.

refresh (void)

Displays the contents of the pane’s drawing surfaces on the program’s visible window.

selectionToText (String textOut)

Sets its argument, a String object, to the currently selected text as a string.

subPaneButtonPress (Object subPaneObject, InputEvent event)
subPaneEnter (Object subPaneObject, InputEvent event)
subPaneExpose (Object subPaneObject, InputEvent event)
subPaneLeave (Object subPaneObject, InputEvent event)
subPaneKbd (Object subPaneObject, InputEvent event)
subPanePointerMotion (Object subPaneObject, InputEvent event)
subPaneSelectionClear (Object subPaneObject, InputEvent event)

Handler methods for different types of X InputEvent objects. For more information about the handlers and event types, refer to the X11PaneDispatcher class. See X11PaneDispatcher.


Next: , Previous: , Up: Classes   [Index]

X11YesNoBoxPane

X11YesNoBoxPane Class

A X11YesNoBoxPane object displays a window with a text message, optionally an icon, and two buttons, which are normally labelled ‘Yes’ and ‘No’.

Clicking on one of the buttons closes the window and returns an identifier of the selected button as an Integer. The object also stores the text of the selected button’s label.

Also, pressing the Tab key switches focus between buttons. Pressing Enter activates the button with the focus, also causing the window to close.

Here is an example program.


/* yesnobox.ca - X11YesNoBoxPane Demonstration -*-c-*- */

#include <ctalk/ctalkdefs.h>

int main (void) {
  X11Pane new mainWindow;
  X11PaneDispatcher new dispatcher;
  X11ButtonPane new button;
  X11LabelPane new label;
  X11YesNoBoxPane new yesnoBox;
  InputEvent new e;

  label textColor = "white";
  label canFocus = false;
  label borderWidth = 0;

  label ftFontVar initFontLib;
  label ftFontVar notifyLevel XFT_NOTIFY_NONE;

  mainWindow backgroundColor = "blue";
  label resources replaceAt "backgroundColor", "blue";
  button resources replaceAt "backgroundColor", "blue";
  yesnoBox resources replaceAt "backgroundColor", "blue";
  
  mainWindow initialize 255, 200;
  mainWindow inputStream eventMask = 
    EXPOSE|ENTERWINDOWNOTIFY|LEAVEWINDOWNOTIFY|BUTTONPRESS|BUTTONRELEASE|KEYPRESS|KEYRELEASE|WINDELETE|MOVENOTIFY;

  dispatcher attachTo mainWindow;
  label attachTo dispatcher, "177x80+c+15";
  button attachTo dispatcher, "110x90+c+90";
  yesnoBox attachTo dispatcher, "300x200";

  mainWindow map;
  mainWindow raiseWindow;

  mainWindow openEventStream;

  mainWindow setWMTitle "X11YesNoBoxPane Demo";

  label multiLine "X11YesNoBoxPane\nDemo";
  label resources replaceAt "textColor", "lightgray";
  label resources replaceAt "foregroundColor", "blue";
  label resources replaceAt "borderColor", "blue";

  button label multiLine "Open\nYes/No\nDialog";

  button label resources replaceAt "highlightForegroundColor", "gray80";

  /* The program uses the "replaceAt" method because the key/value
     entry for "backgroundColor" the X11MessageBoxPane : new method
     has alread created an entry for backgroundColor. */
  yesnoBox resources replaceAt "backgroundColor", "blue";
  yesnoBox resources replaceAt "foregroundColor", "blue";
  yesnoBox resources replaceAt "messageColor", "white";
  yesnoBox resources replaceAt "messageText",
    	       "Hello, yesnoBox!\nYour message text here.";

  button draw;
  button refresh;
  label draw;
  label refresh;

  while (TRUE) {
    mainWindow inputStream queueInput;
    if (mainWindow inputStream eventPending) {
      e become mainWindow inputStream inputQueue unshift;

      mainWindow subPaneNotify e;

      switch (e eventClass value)
	{
	case EXPOSE:
	  button subPaneExpose (button, e);
	  label subPaneExpose (label, e);
	  break;
	case BUTTONRELEASE:
	  yesnoBox showManaged button;
	  printf ("returnVal: %d: %s\n", yesnoBox returnVal,
		  yesnoBox returnText);
	  break;
	case WINDELETE:
 	  mainWindow deleteAndClose;
	  exit (0);
	  break;
	}
    } else {
      usleep (1000);
    }
  }

}

Return Values

Normally, after initializing the X11YesNoBoxPane object, a program calls either the show or showManaged method, which displays the object’s window. After clicking on one of the buttons, or after either the calling program or the user otherwise closes the window, the method withdraws the window, and returns an Integer value that contains one of the following definitions.


YESNO_NONE
YESNO_LBUTTON
YESNO_RBUTTON

These constants are defined in ctalkdefs.h, so the calling program should contain the following statement.


#include <ctalk/ctalkdefs.h>

This value is also contained in the X11YesNoBox object’s returnVal instance variable. In addition, the text of the selected button is contained in the object’s returnText label.

In the example above, this is how the program displays the user’s selection.


yesnoBox showManaged button;
printf ("returnVal: %d: %s\n", yesnoBox returnVal,
        yesnoBox returnText);

If the user or the calling program close the object’s window by some other method, then the value of returnText is an empty string.

Resources

The resources that X11YesNoBoxPane : new defines by default are stored in the resources instance variable, an AssociativeArray that is declared in X11Pane class. For a description, see the resources instance variable documentation. See PaneResources.

backgroundColor

A String that contains the color used to draw the window background. This includes the actual subwindow that receives the button’s events from the display server. The resources’ default value is ‘gray’.

foregroundColor

A String with the name of the color that the messagebox window is filled with. The default is ‘gray’.

geometry

A String that contains the message window’s size, and, optionally, its position. The value is set to the dimensions that are given as arguments to the attachTo method.

iconID

An Integer that contains the identifier to the icon to be displayed. Ctalk defines the following constants for icons in ctalkdefs.h and in the graphics libraries.


ICON_NONE
ICON_CAUTION
ICON_INFO
ICON_QUESTION
ICON_STOP

The default is ‘ICON_QUESTION’, which causes a question mark icon to be displayed. The widget adjusts the size and position of the text automatically to provide space for the icon.

leftButtonText
rightButtonText

These are Strings that contain the text that appears in the left and right-hand buttons. The default is ‘Yes’ and ‘No’.

messageColor

A String that contains the color of the message text. The default is ‘black’. The message box sets the label’s textColor resource to this value.

messageFont

A String that contains the Fontconfig font descriptor. The default is ‘sans serif-12’. The pane uses this value to set the label’s ‘fcFont’ resource.

messageText

A String that contains the text of the message to be displayed. The default is ‘Sample message text.’.

pad

An Integer that contains the space in pixels betwween the button and label widgets, and between each widget and the edge of the window. The default is 10 pixels.

titleText

A String that contains the message window’s title text. The default is ‘Message’.

Instance Variables

lbutton
rbutton

The X11ButtonPane objects that close the window when either is clicked. The buttons’ default text are, ‘Yes’ and ‘No’. Programs can change the text with a statement like the following.


myYesNoBox resources atPut "leftButtonText", "All Right";
myYesNoBox resources atPut "rightButtonText", "No Way!";

initialized

A Boolean that is true if the pane has already been initialized. When a message box is closed, it is not deleted - it is simply unmapped from the display. This variable is set to true so that the message box is initialized only once.

label

A X11LabelPane that displays the message box’s text. As configured, the label is the same color as the main message box window, and uses no borders. The label’s text is controlled by the resource, ‘messageText’. To set the message text, use a statement like the following.


myYesNoBox resources atPut "messageText", "Today Is\nJanuary 3rd.\nOkay?";

The class draws the label using multiline formatting, so if you want the text to appear on multiple lines, include the sequence ‘\n’ in the text (that’s a backslash and the character, ‘n’, not a literal newline).

mainWindowPtr

A Symbol that contains a pointer to the main window.

returnText

A String that contains the text of the button that was clicked to withdraw the window. If the window was closed by some other method, then returnText contains an empty string.

returnVal

When the X11YesNoBoxPane obect’s window is closed, either by clicking on one of the buttons, or by otherwise closing the window, this Integer that contains one of the following values.


YESNO_NONE
YESNO_LBUTTON
YESNO_RBUTTON

The value of returnVal is also used as the show and showManaged methods’ return value.

Instance Methods

attachTo (Object parentPane, String geometry)

Sets the yes/no box’s dimensions and creates the object’s buffers and main window. Unlike other X11Pane subclasses, this method does not immediately attach the yes/no box’s object to its parent pane, so the yes/no box isn’t displayed until the program invokes the show or showManaged method.

draw (void)

Draws the label and button subpanes in the yes/no box’s buffers and the buffers of the button and label subpanes. After calling this method, the refresh method makes the changes visible.

fill (String colorName)

A convenience method that fills the pane window with the color given as the argument.

initWidgets (void)

Initializes the yes/no box’s button and label subpanes when the pane’s window is first opened. When constructed this method sets the initialized instance variable to ‘true’, so when the yes/no box appears again, this method is a no-op.

new (String newPaneName)

The X11YesNoBoxPane constructor.

refresh (void)

After the method draw renders the main window and the label and the button subwindow’s contents on the pane objects’ buffers, this method updates the visible window with the contents of the buffers.

show (void)

This method displays the yes/no box, waits for events from the display system, and closes the yes/no box when its button is clicked, then returns to the calling program.

show (X11ButtonPane buttonPane)

This method is similar to the show method, but it takes as its argument the pane object from the main window that caused the yes/no window to open.

This method sets the main window’s button to be unclicked and then redrawn.

This method manages X11ButtonPane objects specifically, but it can be subclassed to manage any pane class object.

subPaneButton (Object subPane, InputEvent event)

This is the event handler for button press and button release events from the display hardware. When a button is clicked on, the yes/no box draws the button in its clicked state. When the button is released, the pane draws the button unclicked, then unmaps the yes/no box window from the display, and returns to the main program.

subPaneExpose (Object subPane, InputEvent event)

Handles drawing the yes/no box when the program receives an Expose event from the display. This method calls the yes/no box’s draw and refresh methods.

withdraw (void)

Unmaps the yes/no box’s window from the display after the pane object receives a button release event while processing the show method. When the show or showManaged method receives the button release event, this method is called to remove the pane’s window from the display, and the show or showManaged method returns to the main program.


Next: , Previous: , Up: Classes   [Index]

X11TextEntryBox

X11TextEntryBox Class

A X11TextEntryBox object pops up a dialog window that contains a X11TextEntryPane object, where the user can enter text. The contents of the text entry persist if the dialog window is re-opened, and the contents are available to the calling program, as is the text of the button and return code that indicates how the user closed the dialog box.

Here is an example program that demonstrates a X11TextEntryBox's use.


/* entrybox.ca, a X11TextEntryBox demonstration. -*-c-*- */

#include <ctalk/ctalkdefs.h>

int main (void) {
  X11Pane new mainWindow;
  X11PaneDispatcher new dispatcher;
  X11ButtonPane new button;
  X11LabelPane new label;
  X11TextEntryBox new textEntryBox;
  InputEvent new e;

  label textColor = "white";
  label canFocus = false;
  label borderWidth = 0;

  label ftFontVar initFontLib;
  label ftFontVar notifyLevel XFT_NOTIFY_NONE;

  mainWindow backgroundColor = "blue";
  label resources replaceAt "backgroundColor", "blue";
  button resources replaceAt "backgroundColor", "blue";
  textEntryBox resources replaceAt "backgroundColor", "blue";
  
  mainWindow initialize 255, 200;
  mainWindow inputStream eventMask = 
    EXPOSE|ENTERWINDOWNOTIFY|LEAVEWINDOWNOTIFY|BUTTONPRESS|BUTTONRELEASE|KEYPRESS|KEYRELEASE|WINDELETE|MOVENOTIFY;

  dispatcher attachTo mainWindow;
  button attachTo dispatcher, "110x90+c+95";
  label attachTo dispatcher, "177x80+c+15";
  textEntryBox attachTo dispatcher, "300x200";

  mainWindow map;
  mainWindow raiseWindow;

  mainWindow openEventStream;

  mainWindow setWMTitle "X11TextEntryBox Demo";

  label multiLine "X11TextEntryBox\nDemo";
  label resources replaceAt "textColor", "lightgray";
  label resources replaceAt "foregroundColor", "blue";
  label resources replaceAt "borderColor", "blue";

  button label multiLine "Open\nText Entry\nDialog";

  button label resources replaceAt "highlightForegroundColor", "gray80";

  /* The program uses the "replaceAt" method because the key/value
     entry for "backgroundColor" the X11MessageBoxPane : new method
     has alread created an entry for backgroundColor. */
  textEntryBox resources replaceAt "backgroundColor", "blue";
  textEntryBox resources replaceAt "foregroundColor", "blue";
  textEntryBox resources replaceAt "messageColor", "white";
  textEntryBox resources replaceAt "messageText",
    	       "Hello, textEntryBox!\nYour message text here.";

  button draw;
  button refresh;
  label draw;
  label refresh;

  while (TRUE) {
    mainWindow inputStream queueInput;
    if (mainWindow inputStream eventPending) {
      e become mainWindow inputStream inputQueue unshift;

      mainWindow subPaneNotify e;

      switch (e eventClass value)
	{
	case EXPOSE:
	  button subPaneExpose (button, e);
	  label subPaneExpose (label, e);
	  break;
	case BUTTONRELEASE:
	  textEntryBox showManaged button;
	  printf ("returnVal: %d: %s: %s\n", textEntryBox returnVal,
		  textEntryBox returnText, textEntryBox entryContents);
	  break;
	case WINDELETE:
 	  mainWindow deleteAndClose;
	  exit (0);
	  break;
	}
    } else {
      usleep (1000);
    }
  }

}

Resources

X11TextEntryBox objects do not define resources of their own. Instead, it uses the resources defined by the classes of its components:

X11YesNoBoxPane See X11YesNoBoxPane.
X11LabelPane See X11LabelPane.
X11ButtonPane See X11ButtonPane.
X11TextEntryPane See X11TextEntryPane.

The top-level window’s resources are defined by the X11YesNoBox superclass. Each of the component subpanes is defined by an instance variable. This allows each of the subpanes to be managed individually.

lbutton

Defined by the X11ButtonPane class. See X11ButtonPane.

rbutton

Defined by the X11ButtonPane class. See X11ButtonPane.

label

Defined by the X11LabelPane class. See X11LabelPane.

icon

Defined by the X11Bitmap class. See X11Bitmap.

entryPane

Defined by the X11TextEntryPane class. See X11TextEntryPane.

For example, to change the background color of selected text in the entrybox subwindow, a program would contain a statement like this one.


myEntryBox entryPane resources replaceAt "selectionColor", "lightblue";

Occasionally, the subpane’s class defines its own resources that it propagates to its own subpanes. For example, to change the text that appears on the buttons:


myEntryBox resources replaceAt "leftButtonText", "Dismiss";
myEntryBox resources replaceAt "rightButtonText", "Accept";

It’s necessary to use the Collection : replaceAt method, because each subpane’s default resources has already been created when the subpane is constructed (generally, this is done by each classes’ new method).

Instance Variables

dots

A Boolean that causes the entryPane to echo dots instead of the text that the user typed.

entryContents

A String that contains the text contents of the entry window. This variable is updated whenever the contents of the entryPane object are modified.

entryPane

The X11TextEntryPane object that is constructed when the show method is first called, and is updated and displayed via the show method’s event loop.

Instance Methods

draw (void

Draws the main pane and each subpane’s controls on each subpane’s buffer, as well as the main pane’s icon, if any.

initWidgets (void)

Constructs the subpanes when the entrybox window is first constructed and mapped to the display. The method sets the initialized instance variable (defined in X11YesNoBoxPane class) to true, so the pane is only constructed once if it is withdrawn from the display and then remapped.

new (String paneName)

The X11TextEntryBox constructor. This method calls the constructor of its superclass, X11YesNoBoxPane, which defines the resources that this class uses as well. However, this constructor defines the event handlers it needs, in order to make the events available to the entryPane subpane when necessary.

show (Object subPane, InputEvent event)

This method constructs the X11TextEntryBox object when it is first called, and then on the first and each following call, maps the entry box to the display, waits for and dispatches events from the display server, and withdraws the window from the display when the user clicks on a button or on the window’s close menu.

subPaneEnter (Object subPane, InputEvent event)
subPaneLeave (Object subPane, InputEvent event)

Event handlers for enter and leave events, which are generated when the pointer is over one of the subpanes.


Next: , Previous: , Up: Classes   [Index]

X11ListBox

X11ListBox Class

A X11ListBox object pops up a dialog window that contains a label, a listbox, and “Cancel” and “Ok” buttons.

After the listbox has first appeared and all of its subpanes have been initialized, a program can access any of the items selected in the listbox’s list via the listPane instance variable.

A X11ListBox dialog supports multiple selections. Pressing Shift while clicking on a list item adds that item to list’s selections. Pressing Ctrl while clicking on an item selects all of the items in a range between the first selected item and the last selected item of the list.

Component Widgets

A X11ListBox consists of component widgets from the X11LabelPane, X11ListPane, and X11ButtonPane class.

The objects for each component are declared as instance variables, which, except for the list subpane itself, are inherited from the X11YesNoBoxPane superclass. See X11YesNoBoxPane.


Component Instance       Class                 Inherited 
     Variable                                    From 
------------------       -----               --------------
listPane                 X11ListPane         --
lButton                  X11ButtonPane       X11YesNoBoxPane
rButton                  X11ButtonPane       X11YesNoBoxPane
label                    X11LabelPane        X11YesNoBoxPane

More information about the resources, instance variables, and methods that each component uses is contained in each of the component classes’ individual sections: See X11ListPane, See X11ButtonPane, and See X11LabelPane

Here is an example program that shows how to display a X11ListBox and retrieve the selected list items.


/* listbox.ca, a X11ListBox demonstration. -*-c-*- */

#include <ctalk/ctalkdefs.h>

#define N_ITEMS 30

int main (void) {
  X11Pane new mainWindow;
  X11PaneDispatcher new dispatcher;
  X11ButtonPane new button;
  X11LabelPane new label;
  X11ListBox new listBox;
  InputEvent new e;
  Integer new i;
  List new itemTextOut, itemNOut;
  String new itemText, itemN;

  label textColor = "white";
  label canFocus = false;
  label borderWidth = 0;

  label ftFontVar initFontLib;
  label ftFontVar notifyLevel XFT_NOTIFY_NONE;

  mainWindow backgroundColor = "blue";
  label resources replaceAt "backgroundColor", "blue";
  button resources replaceAt "backgroundColor", "blue";
  listBox resources replaceAt "backgroundColor", "blue";
  
  mainWindow initialize 255, 200;
  mainWindow inputStream eventMask = 
    EXPOSE|ENTERWINDOWNOTIFY|LEAVEWINDOWNOTIFY|BUTTONPRESS|BUTTONRELEASE|KEYPRESS|KEYRELEASE|WINDELETE|MOVENOTIFY|MOTIONNOTIFY;

  dispatcher attachTo mainWindow;
  label attachTo dispatcher, "177x80+c+15";
  button attachTo dispatcher, "110x85+c+100";
  listBox attachTo dispatcher, "300x400";

  mainWindow map;
  mainWindow raiseWindow;

  mainWindow openEventStream;

  mainWindow setWMTitle "X11ListBox Demo";

  label multiLine "X11ListBox\nDemo";
  label resources replaceAt "textColor", "lightgray";
  label resources replaceAt "foregroundColor", "blue";
  label resources replaceAt "borderColor", "blue";

  button label multiLine "Open\nListBox\nDialog";

  button label resources replaceAt "highlightForegroundColor", "gray80";

  /* The program uses the "replaceAt" method because the key/value
     entry for "backgroundColor" the X11MessageBoxPane : new method
     has alread created an entry for backgroundColor. */
  listBox resources replaceAt "backgroundColor", "blue";
  listBox resources replaceAt "foregroundColor", "blue";
  listBox resources replaceAt "messageColor", "white";
  listBox resources replaceAt "messageText",
    	       "Hello, listBox!\nPlease select an item.";

  for (i = 1; i < N_ITEMS; ++i) {
    listBox items push "item " + i asString;
  }
  
  button draw;
  button refresh;
  label draw;
  label refresh;

  while (TRUE) {
    mainWindow inputStream queueInput;
    if (mainWindow inputStream eventPending) {
      e become mainWindow inputStream inputQueue unshift;

      mainWindow subPaneNotify e;

      switch (e eventClass value)
	{
	case EXPOSE:
	  button subPaneExpose (button, e);
	  label subPaneExpose (label, e);
	  break;
	case BUTTONRELEASE:
	  listBox showManaged button;
	  if (listBox listPane nItemsSelected > 1) {
	    i = 0;
	    listBox listPane selectedItems itemTextOut;
	    listBox listPane selectedItemsN itemNOut;
	    itemNOut map {
	      itemN = self;
	      /* This is a convenient way to retrieve
		 the i'th item in the itemTextOut list. */
	      itemText = *(itemTextOut + i);
	      printf ("%d: %s\n", itemN, itemText);
	      ++i;
	    }
	  } else {
	    printf ("%d: %s\n",
		    listBox listPane selectedItemN,
		    listBox listPane selectedItemText);
	  }
	  break;
	case WINDELETE:
 	  mainWindow deleteAndClose;
	  exit (0);
	  break;
	}
    } else {
      usleep (1000);
    }
  }

}

Retrieving List Selections

There are several methods that provide information about which item or list items are currently selected. Generally, if a user has selected more than one item, then the results would be in the form of a list, instead of an Integer index of a selection or a String containing the selection’s contents.

The method, nItemsSelected, returns an Integer with the number of items that are currently selected. Programs can use this to determine which method to use to retrieve the list selections.

Depending on whether a user has selected a single item or multiple items, a program can use the selectedItemN or selectedItemsN methods to retrieve selection indexes, and the selectedItemText or selectedItems methods to retrieve the text of the selected item or items.

The example program above uses this method to print either a single selected item or multiple selections.


if (listBox listPane nItemsSelected > 1) {
  i = 0;
  listBox listPane selectedItems itemTextOut;
  listBox listPane selectedItemsN itemNOut;
  itemNOut map {
    itemN = self;
    /* This is a convenient way to retrieve
       the i'th item in the itemTextOut list. */
    itemText = *(itemTextOut + i);
    printf ("%d: %s\n", itemN, itemText);
    ++i;
  }
} else {
  printf ("%d: %s\n",
          listBox listPane selectedItemN,
          listBox listPane selectedItemText);
}

Resources

listFont

A String that contains the name of the font that the X11ListPane subwidget uses to display the list items. The default is ‘sans-serif-12’.

Instance Variables

items

A List that contains all of the items to be added to the list when the dialog is first popped up. Because the dialog box doesn’t construct itself and the list subpane until it first appears, this is a convenient way for programs to define the items that will initially appear in the list before the the dialog first appears.

After the dialog first appears, the list items may be modified by using the list pane’s add method. For example:


myListDialog listPane add "Extra List Item 1";

listPane

A X11ListPane object that defines the list subpane. It is initialized when the dialog is first popped up. After that, programs can use any of the methods, resources, and instance variables that are defined in X11ListPane class to alter or retrieve the list’s items or the user’s selections See X11ListPane.

Instance Methods

draw (void)

This calls the indivdual subpane’s draw and refresh methods in order to update the dialog’s contents on the display.

initWidgets (void)

Called when the dialog first appears, this initializes each of the component widget objects.

new (String paneName

The X11ListBox constructor. Creates the dialog object with the name given as the argument, and initializes the dialog’s event handlers and resources.

show (String paneName

Displays the dialog window, also calling initWidgets if the dialog is being displayed for the first time.

subPaneEnter (Object subPane, InputEvent event)
subPaneLeave (Object subPane, InputEvent event)

Event handlers for highlighting the dialog’s label or buttons when the pointer is over them.


Next: , Previous: , Up: Classes   [Index]

X11FileSelectDialog

X11FileSelectDialog Class

A X11FileSelectDialog object displays a dialog box with a list of files in the current directory, a preselected target directory, or a subdirectory that a user selects from the current directory’s entries.

The class allows users to select multiple entries by holding either the Shift or Ctrl keys while selecting items. The class provides a number of methods to retrieve the number of items that the user selects, the items’ text, and text for a new file that the user enters, if any. These methods are described below. See Retrieving-Selection-Information.

The X11FileSelectDialog class can also display a text entry box (from X11TextEntryPane class) where users can enter new file names.

Here is an example program that pops up a X11FileSelectDialog window.


/* -*-c-*- */

/* 
 *   fileselectbox.ca, a X11FileSelectDialog demonstration. 
 *
 *     To build:
 * 
 *       ctcc -x fileselectbox.ca -o fileselectbox
 *
 *     You can optionally buidl the dialog with a X11TextEntryPane
 *     so you can enter filenames by typing.  For a full description
 *     of the X11FileSelectDialog class, refer to the Ctalk Language
 *     Reference.
 */

/*
 *  Uncomment the following #define if you want to build the dialog
 *  with a X11TextEntryPane for creating new file paths.
 */
/* #define FILENAME_ENTRY_BOX */

#include <ctalk/ctalkdefs.h>

int main (void) {
  X11Pane new mainWindow;
  X11PaneDispatcher new dispatcher;
  X11ButtonPane new button;
  X11LabelPane new label;
  X11FileSelectDialog new fileSelect;
  InputEvent new e;
  Integer new i;
  List new itemTextOut, itemNOut;
  String new itemText, itemN;

  label textColor = "white";
  label canFocus = false;
  label borderWidth = 0;

  label ftFontVar initFontLib;
  label ftFontVar notifyLevel XFT_NOTIFY_NONE;

  mainWindow backgroundColor = "blue";
  label resources replaceAt "backgroundColor", "blue";
  button resources replaceAt "backgroundColor", "blue";
  fileSelect resources replaceAt "backgroundColor", "blue";
  
  mainWindow initialize 255, 245;
  mainWindow inputStream eventMask = 
    EXPOSE|ENTERWINDOWNOTIFY|LEAVEWINDOWNOTIFY|BUTTONPRESS|BUTTONRELEASE|KEYPRESS|KEYRELEASE|WINDELETE|MOVENOTIFY|MOTIONNOTIFY;

  dispatcher attachTo mainWindow;
  label attachTo dispatcher, "177x60+c+35";
  button attachTo dispatcher, "110x105+c+100";
  fileSelect attachTo dispatcher, "300x400";

  mainWindow map;
  mainWindow raiseWindow;

  mainWindow openEventStream;

#ifdef FILENAME_ENTRY_BOX
  fileSelect resources replaceAt "useEntryBox", TRUE;
#endif  

  mainWindow setWMTitle "X11FileSelectDialog Demo";

  label multiLine "X11FileSelectDialog\nDemo";
  label resources replaceAt "textColor", "lightgray";
  label resources replaceAt "foregroundColor", "blue";
  label resources replaceAt "borderColor", "blue";

  button label multiLine "Open\nFile Select\nDialog";

  button label resources replaceAt "highlightForegroundColor", "gray80";

  /* The program uses the "replaceAt" method because the key/value
     entry for "backgroundColor" the X11MessageBoxPane : new method
     has alread created an entry for backgroundColor. */
  fileSelect resources replaceAt "backgroundColor", "blue";
  fileSelect resources replaceAt "foregroundColor", "blue";
  fileSelect resources replaceAt "messageColor", "white";
  fileSelect resources replaceAt "messageText",
    	       "Directory:\n";

  button draw;
  button refresh;
  label draw;
  label refresh;

  while (TRUE) {
    mainWindow inputStream queueInput;
    if (mainWindow inputStream eventPending) {
      e become mainWindow inputStream inputQueue unshift;

      mainWindow subPaneNotify e;

      switch (e eventClass value)
	{
	case EXPOSE:
	  button subPaneExpose (button, e);
	  label subPaneExpose (label, e);
	  break;
	case BUTTONRELEASE:
	  fileSelect showManaged button;
	  if (fileSelect buttonClick == FILESELECT_LBUTTON) {
	    printf ("\"%s,\" clicked.\n", fileSelect buttonText);
	    /* 
	       The button's click should be cleared, because in this
	       program, the dialog can be re-opened here (i.e., not 
	       reinstantiated with the "new" method). 

	       The, "buttonText," method is equivalent, in this clause, 
	       to, "fileSelect lbutton text."

	       The FILESELECT_LBUTTON #define and the other button
	       definitions, are in ctalkdefs.h.
	    */
	    fileSelect lbutton clearClick;
	  } else if (fileSelect entryLength > 0) {
	    printf ("%s\n", fileSelect pathEntry);
	  } else if (fileSelect nItemsSelected > 1) {
	    i = 0;
	    fileSelect selectedItems itemTextOut;
	    fileSelect selectedItemsN itemNOut;
	    itemNOut map {
	      itemN = self;
	      /* This is a convenient way to retrieve
		 the i'th item in the itemTextOut list. */
	      itemText = *(itemTextOut + i);
	      printf ("%d: %s\n", itemN, itemText);
	      ++i;
	    }
	  } else {
	    printf ("%d: %s\n",
		    fileSelect selectedItemN,
		    fileSelect selectedItemText);
	  }
	  fileSelect rbutton clearClick;
	  break;
	case WINDELETE:
 	  mainWindow deleteAndClose;
	  exit (0);
	  break;
	}
    } else {
      usleep (1000);
    }
  }

}

Retrieving Selection Information

The type and number of entries that a X11FileSelectDialog can return can differ depending on whether a user selects a single directory entry, multiple directory entries, or enters a new file name.

When returning directory entries, the class returns each entry as a concatenation of the current directory plus the entry name; for example, if the current directory is ‘/home/bill’ and the user has selected the file ‘message.txt’, the dialog returns the String, ‘/home/bill/message.txt’.

In addition, the dialog can provide information about whether the user has clicked the left or right buttons, which are labeled, by default, ‘Cancel’ and Ok.

Generally, when a program displays the file select dialog, the program waits until the dialog box returns, that is, when the user presses either the ‘Cancel’ or Ok buttons. On most desktops, the user can also close the dialog using the desktop’s close window menu item. In this case, the dialog can return a value indicating that the dialog has returned without the user making a selection or cancelling the selection. These values and the method to retrieve them are described below.

Here is the section of code from the example above (without the comments) that retrieves and displays the user’s selection or selections. The file select dialog is defined in the X11FileSelectDialog object, fileSelect.


if (fileSelect buttonClick == FILESELECT_LBUTTON) {
  printf ("\"%s,\" clicked.\n", fileSelect buttonText);
  fileSelect lbutton clearClick;
} else if (fileSelect entryLength > 0) {
  printf ("%s\n", fileSelect pathEntry);
} else if (fileSelect nItemsSelected > 1) {
  i = 0;
  fileSelect selectedItems itemTextOut;
  fileSelect selectedItemsN itemNOut;
  itemNOut map {
    itemN = self;
    itemText = *(itemTextOut + i);
    printf ("%d: %s\n", itemN, itemText);
    ++i;
  }
} else {
  printf ("%d: %s\n",
          fileSelect selectedItemN,
          fileSelect selectedItemText);
}
fileSelect rbutton clearClick;

First, the application checks whether the user clicked the ‘Cancel’ button with the expresion:


if (fileSelect buttonClick == FILESELECT_LBUTTON) 

In this class, buttonClick is a convenience method that checks each of the dialog’s buttons. It can return the following values.


FILESELECT_LBUTTON
FILESELECT_RBUTTON
FILESELECT_BUTTON_NONE

These values are defined in the ctalkdefs.h include file, which programs can include with a statement like this:


#include <ctalkdefs.h>

near the start of the file.

Assuming that the user has pressed the ‘Ok’ button, the program next checks if the user has entered a new file name, with the statement:


} else if (fileSelect entryLength > 0) {

The entryLength method returns ‘-1’ if the dialog doesn’t display an entry box, ‘0’ if no text is entered, or the length of the text. If the user has entered text, then the program can retrieve it with the pathEntry method, which retrieves and prints the entry with this line.


printf ("%s\n", fileSelect pathEntry);


Once again, the dialog returns a String that is the concatenation of the current directory and the filename that the user entered. To retrieve the entry box’s text alone, programs can use the textEntry method instead of pathEntry.

Finally, the program checks how many items the user selected from the directory entries. The program does this with the nItemsSelected method.


} else if (fileSelect nItemsSelected > 1) {

If nItemsSelected returns an Integer greater than one, the program can retrieve all of the entries as a list, with the selectedItems method, and their position in the list with the selectedItemsN method.


fileSelect selectedItems itemTextOut;
fileSelect selectedItemsN itemNOut;

These methods take one argument, a List object, here itemTextOut and itemNOut, to which the method adds either the list item text or ordinal position of each selected directory entry.

In the case where the user has selected only a single directory entry (i.e., nItemsSelected returns ‘1’), the program can use the selectedItemN and selectedItemText methods, as in this statement, which prints the information about a single entry.


printf ("%d: %s\n",
        fileSelect selectedItemN,
        fileSelect selectedItemText);

Resources

Further information about modifying resource entries is given in the resources instance variable section. See PaneResources.

listROPx
listRWPx

The distance in pixels between the bottom of the file list and the bottom of the window, in pixels. The values determine, respectively whether to display the dialog’s buttons directly beneath the list, or to display a text entry box between the file list and the buttons.

pad

The amount of space in pixels between the dialog window’s edges and the component subpane’s boundaries. The default is ‘0’.

useEntryBox

A boolean value that determines whether the dialog box displays a text entry box. The default is ‘false’.

Instance Variables

In addition to the instance variables defined in superclasses (like lbutton, rbutton, and label, which are defined in X11YesNoBoxPane class; entryPane, defined in X11TextEntryBox; and listPane, which is defined in X11ListBox class), the X11FileSelectDialog class defines the following instance variables.

dirPattern

A String that contains the file glob of the directory that the dialog displays initially. The default is . (i.e., the current directory).

dotFiles

If true, include hidden files (i.e., files whose names begin with ‘.’) in the directory listing.

targetPath

A String that contains the fully qualified path of the directory that is being displayed. The dialog object fills in the value whenever it compiles a new list of directory contents.

useEntryBox

A Boolean that determines whether the dialog should display an entry box or check for text entry operations. The default is ‘false’.

waitCursor

A X11Cursor item that defines the wait mouse pointer that the dialog can display when building directory lists.

Instance Methods

buttonClick (void)

Returns an Integer with one of the following values.


FILESELECT_LBUTTON
FILESELECT_RBUTTON
FILESELECT_BUTTON_NONE

These values are defined in ctalkdefs.h. Programs can include the statement:


#include <ctalkdefs.h>

near the start of the file.

buttonText (void)

Returns a String that contains the text of the button that the user has clicked, or NULL if no button has been clicked.

To reset the button, programs should use the clearClick method, which is defined in X11ButtonPane class; for example:


myDialog lbutton clearClick;

... or ...

myDialog rbutton clearClick;

chDir (ItemBox item)

Changes the working directory of the dialog (and the program that opens it) to the directory whose name is contained in item. If item contains ‘..’, the the new directory is the parent directory of the current directory.

draw (void)

Redraws the dialog’s label, list and button subpanes. Redrawing of the text entry pane, if it is displayed, is handled separately.

entryLength (void)

Returns the length of the text entered in the dialog’s entry box, or ‘-1’ if the dialog does not display a text entry box.

getExpandedDir (String dirPattern)

Retrieves the contents of the directory named in dirPattern, which the method qualifies and stores in the targetPath instance variable.

The method then constructs a sorted list of the directory’s contents, which it stores in listPane's items instance variable. In order to use these items directly, programs could use an expression similar to this one.


myFileDialog listPane items

initWidgets (void)

Creates the subpane objects and adds them to the dialog’s window when the dialog is first opened. Sets the initialized instance variable (defined in X11YesNoBoxPane) to ‘true’.

makeItem (String itemText)

Creates an ItemBox object (which is defined in X11ListPane class), with the text of the object, the item’s boundaries and position in pixels.

new (String paneName)

The X11FileSelectDialog constructor. The argument, a String, is the name of the new dialog object.

Note: The X11FileSelectDialog class adds the fileMode instance variable to ItemBox class, so it’s necessary to make sure that the ItemBox class, which is defined in X11ListPane. In X11FileSelectDialog class, the X11ListPane class should be loaded automatically when the listPane instance variable is created.

onExpose (Object subPane, InputEvent event)
onListClick (Object subPane, InputEvent event)
onResize (Object subPane, InputEvent event)
subPaneButton (Object subPane, InputEvent event)

The X11FileSelectDialog's event handlers. If the dialog handles events similarly to the operations in superclasses, then Ctalk uses event handlers defined in X11FileSelectDialog's superclasses.

nItemsSelected (void)

Returns an Integer with the number of list entries that are currently selected.

pathEntry (void)

If the dialog displays a text entry box, and the user has entered the name of a new file in it, returns the fully qualified path of the entry (i.e., the current directory path plus the name of text entry). If the dialog does not display an entry box, or the entry box contains no text, the method returns an empty string.

refresh (void)

Updates the dialog window with the contents of the dialog’s subpanes.

selectedItems (List selecteItemsOut)

Stores the text of each item that the user has selected in selectedItemsOut.

selectedItemN (void)

If the user has selected a single directory entry, returns the ordinal position of the item (counting from 0) as an Integer.

selectedItemsN (List selecteItemsOut)

Stores the ordinal position of enach item, counting from zero (‘0’) that the user has selected in selectedItemsOut. Each of the elements in in selectedItemsOut is an Integer object.

selectedItemText (void)

If the user has selected a single directory entry, returns the text of that item as a String.

show (void)

The main dialog box loop. This creates the dialog’s subpanes and attaches them to the main dialog window. If the dialog has already been popped up, maps the dialog on the display. Contains the event loop. When the dialog is closed, the method returns to the calling program.

textEntry (void)

If the dialog displays a text entry box, and the user has entered a file name in it, returns a String that contains the text of the entry. If the dialog does not display an entry box, or if the entry box does not contain any text, returns and empty string.

updateLabel (String qualPath)

Updates the dialog’s label with the name of the directory that is being displayed in qualPath.


Next: , Previous: , Up: Classes   [Index]

X11TextPane

X11TextPane Class

X11TextPane objects display text within a X window. The class defines methods to display text when opening or resizing a window, and scrolling through the text.

The Ctalk distribution’s, demos, subdirectory contains several example applications of X11TextPane objects.

Viewing Text

With a X11TextPane window open, the class provides the following keyboard commands.


Key(s)                 Action
------                 ------
j, Control-N, <Up>     Scroll the text down by one line.
k, Control-P, <Down>   Scroll the text up by one line.
Control-V              Scroll the text down one screenful.
Control-T              Scroll the text up one screenful.
Control-Q              Go to the start of the text.
Control-Z              Go to the end of the text.
Escape, Control-C      Close the window and exit the program.

Adding and Formatting Text

To display text, the class provides the methods addText, putStr, and printOn.

The addText method wraps long lines to fit within the window’s viewing area, and recognizes newline characters as hard line breaks and inserts soft line breaks where necessary. The methods putStr and printOn can display shorter items of text at specific X,Y positions.

For word wrapped text, each member of the textList instance variable (described below) is a TextBox object, which is an iternal class that is used exclusively by __ctalkWrapText library function and the displayText method.

The class supports both X bitmapped fonts and the X11FreeTypeFont outline font libraries. Applications enable outline font support by calling the X11FreeTypeFont method initFontLib at the start of the program.

In addition, the class supports different typefaces and simple line formatting with a small set of HTML-like formatting tags.

Tag(s)                Action
------                ------
<b>, </b>             Start/end boldface type.
<i>, </i>             Start/end italic (or oblique) type.
<center>, </center>   Start/end a centered line of text.

Instance Variables

leading

An Integer that contains the extra space between lines, in pixels. Its value depends on the font that the program uses. The dimensions of Xlib bitmap fonts seems to provide enough space without adding any extra space. Outline fonts, however, seem to need this. The default is 2 (pixels), which the program can set whenever it selects a font. Currently, this variable has no effect with Xlib fonts, though.

lineHeight

An Integer that contains the height of a line in pixels. Its value is set when the program selects a font. The default is 12 pixels, which is the value used whenever a program doesn’t specify any fonts. The total lineHeight is the height of the tallest character ascent + the longest character descent, and optionally, any leading, either added by the font designer or the X11TextPane object. Refer to the font method, below.

scrollHeight

An Integer that contains the number of lines that the text moves when scrolling by one screenful. Its value is


textPaneObject scrollHeight = textPaneObject viewHeight -
                                textPaneObject scrollMargin

scrollMargin

An Integer that contains the number of lines to overlap when scrolling by pagefuls. Its default value is 3.

text

A String that contains the unformmated text to be displayed in the window. Formatting raw text for display is done by the addText method, below.

textList

This List object contains the output of the word wrapping routines. Each item of the List is a TextBox object, an internal class that stores information about each word of the text.

textLines

An Integer that contains the number of lines of text after it is formatted.

viewStartLine

An Integer that contains the number of the first text line that is visible in the window.

requestClose

A Boolean that indicates whether the X11TextPane object has requested to be closed, normally in response to an Escape or Control-C keypress.

viewXOffset

An Integer that contains the left margin of the text when displayed in the window.

viewHeight
viewWidth

Integer objects that contain the width and height of viewable area, in characters. These are normally determined by the font that the program selects, and after the program calculates the line height (refer to the font method, below). The X11TextPane class adjusts for variable width fonts and faces whenever necessary (and possible, in some cases).

If the program has selected a font, the X11TextPane class calculates the width and height of the viewing area like this.


self viewHeight = self size y / self lineHeight;
self viewWidth = self size x / self fontVar maxWidth;

If the program doesn’t select any fonts, the class uses 14 pixels as the height of each character and 12 pixels as the character width.

Instance Methods

addText (Object text)

Adds the argument’s text to the receiver pane’s text instance variable, then word-wraps the entire text into the textList instance variable.

attachTo (Object parentPane)

Attaches the X11TextPane object to its parent pane. The parent pane should always be a X11PaneDispatcher object.

cursorPos (Integer x, Integer y)

Set the pane’s cursor to the coordinates given as arguments.

background (String colorname)

Set the background color of the text pane. See the note for X11Bitmap class’s background method. See X11Bitmap.

clear (void)

Clear the pane to the background color.

displayText (void)

Update the pane’s text. The pane’s window is updated at the next refresh message (see below).

faceRegular (void)
faceBold (void)
faceItalic (void)
faceBoldItalic (void)

Selects the typeface of the currently selected font. The font should be selected by a previous call to the font method (below). The font call gathers information about the type variations if the typeface is available.

font (String font_descriptor)

Loads the bitmap font named by font_descriptor and the bold, italic, and bold italic typefaces if they are available, and makes the font named by the argument the currently selected the receiver Pane’s currently selected font.

If a program uses outline fonts, it has more freedom to decide when to select the fonts, because the font libraries operate independently of the program’s connection to the GUI. See X11FreeTypeFont.

Programs that use Xlib bitmap fonts, however, need to wait until the connection to the GUI is opened, with a call to openEventStream (class X11Pane). See X11Pane.

Here’s a code snippet from X11TextPane class.


  X11FreeTypeFont new ftFont;
  Integer new ftMaxCharWidth;
  
  self fontDescStr = fontDesc;
  self fontVar getFontInfo fontDesc;
  (X11Bitmap *)self paneBuffer font fontDesc;

  if (ftFont libIsInitialized) {
    self lineHeight = ftFont textHeight "ghyl";
    self lineHeight += self leading;
    ftMaxCharWidth = ftFont textWidth "M";
    self viewWidth = self size x / ftMaxCharWidth;
  } else {
    /* Note that we don't add the leading to the lineHeight here */
    self lineHeight = self fontVar height;
    self viewWidth = self size x / self fontVar maxWidth;
  }
  self viewHeight = self size y / self lineHeight;

foreground (String colorname)

Set the forground color of the text pane. See the note for X11Bitmap class’s foreground method. See X11Bitmap.

gotoXY (Integer x, Integer y)

Set the pane’s cursor to the coordinates given as arguments. The coordinates are the number of horizontal and vertical pixels from the pane’s top-left corner.

This method is a synonym for cursorPos, above.

new (String paneName)

Creates a X11TextPane object and initializes the pane’s event handlers and other instance data.

If the argument list contains more than one name, create X11TextPane objects with the names given by the arguments.

printOn (char *fmt, ...)

Print the argument, which is a printf(3) style format string with arguments for the format conversion specifiers, in the pane’s buffer at the position given by the pane’s software cursor. To update the visible window with the pane buffer’s contents, call the refresh method (below), after calling this function.

putChar (Character c)

Write a character in the pane’s window at the pane’s cursor position.

putStr (String s)

Write a string in the pane’s window at the pane’s cursor position.

refresh (void)

Update the text displayed in the pane’s window.

subPaneDestroy (Object subPaneReference, InputEvent event)

The class’s destructor method. This method deletes only the data associated with the pane object’s window, not the pane object itself, which is treated like any other object.

subPaneExpose (Object subPaneReference, InputEvent event)

The class’s EXPOSE event handler. Refreshes the main window from the pane’s text buffer.

subPaneKbdInput (Object subPaneReference, InputEvent event)

The handler for KEYPRESS and KEYRELEASE events from the window system.

subPaneResize (Object subPaneReference, InputEvent event)

The handler for RESIZENOTIFY events from the window system.


Next: , Previous: , Up: Classes   [Index]

X11TextEditorPane

X11TextEditorPane Class

Objects of X11TextEditorPane class create a X window which displays text, and editing commands to perform basic text editing operations.

There is an example text editor program that demonstrates a X11TextEditorPane object’s use at the end of this section.

Editing Commands

The set of editing commands that a X11TextEditorPane object uses is given here, along with their key bindings. You can bind them to different keys by modifying the handleKbdInput method.

Right, Ctrl-F       Next character
Left, Ctrl-B        Previous character
Up, Ctrl-P          Previous line
Down, Ctrl-N        Next line
PgDn, Ctrl-V        Next page
PgUp, Ctrl-T        Previous page
Home, Ctrl-A        Start of line
End, Ctrl-E         End of line
Ctrl-Q              Start of text
Ctrl-Z              End of text
Ctrl-D              Delete character under cursor

Alt-V               Paste text from the clipboard at the insertion point.
Alt-C               Copy the selected text to the clipboard.
Alt-X               Delete selected text and save the text on the clipboard.

Backspace           Delete previous character.  If selecting text, delete
                    the selection.
Del                 Delete the character under the cursor, or the
                    previous character if at the end of the text.
                    If there is selected text, delete the selection.
Esc                 Close the window and exit the program.

Mouse-1             Move the insertion point cursor to the click.
                    Click and drag the pointer to select text.
Mouse-2             Paste text of the X selection at the insertion point.

Cutting and Pasting Text with the X Selection

X11TextEditorPane objects can copy text selections to the X primary selection, and paste selected text from other X programs into the program’s text.

To select text to be pasted into another application, press the left pointer button and drag the pointer across the text that you want to select. The text should be highlighted with the color defined in the selectionBackgroundColor instance variable.

Then, switch to the window that you want to paste the text into, and press the center pointer button at the point where you want to insert the text (or press the left and right buttons simultaneously on machines with two buttons).

Conversely, to paste text into the X11TextEditorPane object’s contents, select the text in the other application’s window, then switch to the X11TextEditorPane object’s window, and press the center pointer button at the point where you want the text inserted.

If the program has text selected and another program tries to place its contents in the X primary selection, the class will allow the selection ownership to change to the other program. Any text that was selected in the X11TextEditor pane’s window will no longer be selected.

In general, X programs aren’t required to send their to the display’s X selection buffers. Many programs only use selected contents internally, and may require another command to send the content to the X display’s primary selection buffer. X11TextEditorPane objects maintain the contents of its selection buffer continuously when selecting, but they only send the contents to the X display’s primary selection when another program requests it.

Cutting and Pasting Text with the X Clipboard

X11TextEditorPane objects also provide generic support for copying and pasting text using the X clipboard.

Many graphical environments provide their own clipboard implementation, and X11TextEditorPane class doesn’t yet support them. For vanilla clipboard implementations, however, selecting text for the clipboard is similar to the the X selection’s process: press the left pointer button and drag the pointer across the text that you want to select. The text should be highlighted with the color defined by the selectionBackgroundColor instance variable.

However, the clipboard operations’ are performed entirely with keystrokes, and the key bindings are customizable, even though most text oriented applications use a standard set of key definitions for working with the clipboard:


Alt-X         Cut the selected text and save it on the clipboard.
Alt-C         Copy the selected text to the clipboard, without deleting it.
Alt-V         Paste the text from the clipboard at the point where the
              user clicks.

Fonts

The demonstration program, demos/x11/ctedit.ca, provides options to change the default font and point size. The X11 utility programs xfontsel(1) and fc-list(1) can display the X bitmap fonts and the Xft library’s scalable fonts that are available on the machine, respectively.

Programs configure X fonts within the window’s graphics context, using the instance variable fontVar, which is inherited from X11Pane class.

FreeTypeFonts need to be configured separately from the X window, but the parent X11Pane object also defines the ftFontVar instance variable, so the program can configure outline fonts before entering its event loop.

If a program is to be configurable for different machines, it should check which of the font libraries are present on the system, and which of the fontVar or ftFontVar instance variables the program has configured in the program’s initialization.

The X11TextEditorPane class uses monospaced fonts exclusively. If a program requests a proportionally spaced font, the pane’s libraries won’t maintain alignment between the displayed text and editing operations.

The sections, X11FreeTypeFont and X11Font contain more information about how to select fonts. See X11FreeTypeFont, See X11Font.

Instance Variables

bufLength

An Integer that records the size of the object’s text buffer. The class adjusts the buffer’s size automatically if necessary.

button

An Integer that records the state of the mouse buttons, i.e., whether they are pressed or not. The values that the the variable might contain are composed of these definitions.


#define BUTTON1MASK  (1 << 0)
#define BUTTON2MASK  (1 << 1)
#define BUTTON3MASK  (1 << 2)  

foregroundColor

A String that contains the window’s foreground color. The variable is included here to facilitate drawing the cursor in reverse video. The backgroundColor instance variable is declared in X11Pane class. See X11Pane.

An Integer that defines the right margin in character columns. Setting this to zero ‘0’ sets the line width limit to the line length, so the line width in character columns is calculated as:


lineWidth = (window_width_px - left_margin_px - right_margin_px) /
               character_width_px;

rightMargin

The distance in pixels from the right edge of the window, leftward to the right-hand limit of each line’s length.

point

An Integer that contains the current position in the text where editing occurs.

selectionBackgroundColor

A String that contains the background color of selected text. The foreground color is the same as normal text.

sStart
sEnd
selecting

The Integer variables sStart and sEnd record the beginning and end of selected text as character indexes into the text. The Boolean variable selecting is true while the pointer is being dragged across text while Button 1 is pressed.

shiftState

An Integer that records whether the Shift of Control keys are currently pressed.

textLength

An Integer that records the length of the object’s text.

Instance Methods

attachTo (Object parent_pane)

Attach a X11TextEditorPane object to its parent pane, which is typically a X11PaneDispatcher object. This method initializes the size of the pane’s window and buffers to the parent pane’s dimensions, and positions the pane at the upper left-hand origin of the main window.

background (String colorName)
foreground (String colorName)

Sets the foreground and backgrounds color of the pane’s window and buffers.

clearSelection (void)

Sets the sStart and sEnd instance variables to ‘0’, cancelling text selection.

defaultFormat (void)

Sets the document-wide margins and text text colors. If the pane is using an X11FreeTypeFont object to render text, the font needs to be configured before calling this method. See X11FreeTypeFont.

displayText (void)

Displays the text and editing cursor. Programs should call this method as soon as possible after the program starts the X event loop (which it does by calling the X11TerminalStream : openEventStream method), and after every editing operation.

gotoChar (Integer n)

Sets the point instance variable to the n’th character in the text. If n is greater than the length of the text, sets point to the end of the text.

new (String paneName)

Initializes the X11TextEditorPane object’s event handlers, and calls constructors in the X11TextEditorPane's superclasses to perform addition initialization. The method attachTo, declared in X11TextPane class, performs the actual dimensioning of the pane and its buffers. See X11TextPane.

subPaneKbdInput (X11TextEditorPane subPane, InputEvent event)

Handles Keypress and KeyRelease events from the X server. It’s possible to reconfigure the editing commands by modifying this method.

The method works in conjuction with the Ctalk library’s editing functions to translate alphanumeric and punctuation characters with the correct shift and control state, and to transmit special keys like arrow keys and Home/End keys untranslated.

subPaneButtonPress (X11TextEditorPane subPane, InputEvent event)

The handler for button press and button release events. This method sets the value of the button instance variable, in addition to performing other tasks.

subPaneMotionNotify (X11TextEditorPane subPane, InputEvent event)

The handler method for pointer motion events.

subPaneResize (X11TextEditorPane subPane, InputEvent event)

Handles resizing the X11TextEditor pane’s dimensions in response to a window resize event. This method is a no-op in the current release.

subPaneSelectionClear (X11TextEditorPane subPane, InputEvent event)

Updates the program’s state after receiving a a SelectionClear event. Normally this occurs when another program requests the X primary selection. The method updates this program’s state so that it is no longer selecting, and redraws the text.

Example Text Editing Program

/*
  ctedit.ca - Basic text editor using X11TextEditorPane class.

  Usage:

    ctedit [<options>] <filename>

  Typing, "ctedit -h" displays a list of options.

  Pressing Esc or selecting "Close" from the window menu
  exits the program and saves the edited text.
  
  If <filename> exists, ctedit renames the previous version
  of the file to <filename>.bak.  If <filename> doesn't
  exist, ctedit creates a new file.

  The editing commands are set in the X11TextEditorPane :
  handleKbdInput method.  They are:

     Right, Ctrl-F       Next character
     Left, Ctrl-B        Previous character
     Up, Ctrl-P          Previous line
     Down, Ctrl-N        Next line
     PgDn, Ctrl-V        Next page
     PgUp, Ctrl-T        Previous page
     Home, Ctrl-A        Start of line
     End, Ctrl-E         End of line
     Ctrl-Q              Start of text
     Ctrl-Z              End of text
     Ctrl-D              Delete character under cursor
     Backspace           Delete previous character
     Del                 At the end of the text, delete the
                         previous character.  Otherwise delete
                         the character under the cursor.
     Esc                 Close the window, save the edited text,
                         and exit the program.
 */

#define WIN_WIDTH 500
#define WIN_HEIGHT 340
#define WIN_X 25
#define WIN_Y 30
#define FIXED_FONT "fixed"
#define DEFAULT_BG "white"
#define DEFAULT_FG "black"
#define DEFAULT_FT_FONT "DejaVu Sans Mono"
#define DEFAULT_FT_PTSIZE 12.0

Application new ctEdit;
String new geomString;
String new infileName;
String new xFontName;
String new ftFontName;
Float new ftFontSize;
String new bgColor;
String new fgColor;

Boolean new createFile;

Boolean new useFtFonts;
X11FreeTypeFont new ftFont;
Boolean new useXFont;

void exit_help () {
  printf ("usage: ctedit [-h] | [-g <geom>] [-fg <color>] "
	  "[-bg <color>] [-fn <font> ] <filename>\n");
  printf ("-bg <color>    Set the window background to <color>.\n");
  printf ("-fg <color>    Display the text using <color>.\n");
  printf ("-fn <font>     Use the X <font> to display the text. See xfontsel(1).\n");
  printf ("-ft <font>     Use the FreeType <font> to display the text. See\n");
  printf ("               X11FreeTypeFont class.\n");
  printf ("-g  <geom>     Set the window geometry to <geom>. See XParseGeometry (3).\n");
  printf ("-h             Print this message and exit.\n");
  printf ("-xfonts        Use X bitmap fonts, even if outline fonts are available.\n");
  exit (1);
}

/* UNIX-compatible line ending. */
#define LF 10

X11TextEditorPane instanceMethod writeOutput (String infileName) {
  "Create a backup of the previous version of the file, if any,
   and check that the text ends with a UNIX-standard newline
   (ASCII 10) character."
  WriteFileStream new writeFile;
  Character new c;

  c = self text at (self text length - 1);
  if (c != LF) {
    self text += "\n";
  }
  
  if (!createFile)
    writeFile renameFile infileName, infileName + ".bak";
  writeFile openOn infileName;
  writeFile writeStream (self text);
  writeFile closeStream;

}

Application instanceMethod commandLineOptions (void) {
  Integer new i, nParams;
  String new param;


  nParams = self cmdLineArgs size;
  for (i = 1; i < nParams; i++) {

    param = self cmdLineArgs at i;

    if (param  == "-g") {
      ++i;
      geomString = self cmdLineArgs at i;
      continue;
    }
    if (param == "-fn") {
      ++i;
      xFontName = self cmdLineArgs at i;
      continue;
    }
    if (param == "-bg") {
      ++i;
      bgColor = self cmdLineArgs at i;
      continue;
    }
    if (param == "-fg") {
      ++i;
      fgColor = self cmdLineArgs at i;
      continue;
    }
    if (param == "-ft") {
      ++i;
      ftFontName = self cmdLineArgs at i;
      continue;
    }
    if (param == "-xfonts") {
      useXFont = True;
      continue;
    }
    if (param == "-pt") {
      ++i;
      ftFontSize = (self cmdLineArgs at i) asFloat;
      continue;
    }
    if (param == "-h" || param == "--help" || param == "--h" ||
	param at 0 == '-') {
      exit_help ();
    }
    
    infileName = param;

  }

}

Application instanceMethod winDimensions (void) {
  if (geomString length > 0) {
    self parseX11Geometry geomString;
    if (self winWidth == 0) {
      self winWidth = WIN_WIDTH;
    }
    if (self winHeight == 0) {
      self winHeight = WIN_HEIGHT;
    }
    if (self winXOrg == 0) {
      self winXOrg = WIN_X;
    }
    if (self winYOrg == 0) {
      self winYOrg = WIN_Y;
    }
  } else {
    self winWidth = WIN_WIDTH;
    self winHeight = WIN_HEIGHT;
    self winXOrg = WIN_X;
    self winYOrg = WIN_Y;
  }
}

Application instanceMethod findFtFonts (void) {

  if (useFtFonts && !useXFont) {
    ftFont initFontLib;
    ftFont selectFont ftFontName, 0, 80, 72, ftFontSize;
  }
  
}

int main (int argc, char **argv) {
  X11Pane new xPane;
  X11PaneDispatcher new xTopLevelPane;
  X11TextEditorPane new xEditorPane;
  InputEvent new e;
  Exception new ex;
  X11Cursor new watchCursor;
  ReadFileStream new readFile;
  String new winTitle;

  geomString = "";
  xFontName = FIXED_FONT;
  bgColor = DEFAULT_BG;
  fgColor = DEFAULT_FG;
  infileName = "";
  useFtFonts = True;
  useXFont = False;
  ftFontSize = DEFAULT_FT_PTSIZE;
  ftFontName = DEFAULT_FT_FONT;

  ctEdit parseArgs argc, argv;
  ctEdit commandLineOptions;
  ctEdit winDimensions;

  if (ftFont version < 10) {
    useFtFonts = false;
  } else {
    ctEdit findFtFonts;
  }
  

  if (infileName length == 0) {
    exit_help ();
  }

  if (!readFile exists infileName) {
    createFile = true;
    winTitle = infileName + "   (New file)";
  } else {
    readFile openOn infileName;
    xEditorPane text = readFile readAll;
    readFile closeStream;
    winTitle = infileName;
    createFile = false;
  }

  xPane initialize ctEdit winXOrg, ctEdit winYOrg,
    ctEdit winWidth, ctEdit winHeight, ctEdit geomFlags, winTitle;

  xTopLevelPane attachTo xPane;
  xEditorPane attachTo xTopLevelPane;
  xPane map;
  xPane raiseWindow;
  watchCursor watch;

  xPane openEventStream;

  /* This sets the maximum line width to the width of the window. */
  xEditorPane lineWidth = 0;

  if (!useFtFonts || useXFont) {
    xEditorPane foreground fgColor;
    xEditorPane font xFontName;
    xEditorPane defaultFormat;
  } else {
    xEditorPane defaultFormatFT ftFont;
  }

  xEditorPane background bgColor;
  xEditorPane clear;

  xPane defaultCursor;

  while (TRUE) {
    xPane inputStream queueInput;
    if (xPane inputStream eventPending) {
      e become xPane inputStream inputQueue unshift;
      xPane subPaneNotify e;
      if (ex pending)
 	ex handle;
      switch (e eventClass value) 
	{
	  /*
	   *  Handle both types of events in case the window
	   *  manager doesn't distinguish between them.
	   */
	case MOVENOTIFY:
	  break;
	case RESIZENOTIFY:
	  break;
	case EXPOSE:
	  xEditorPane displayText;
	  break;
	case WINDELETE:
	  xEditorPane writeOutput infileName;
 	  xPane deleteAndClose;
	  exit (0);
	  break;
	default:
	  break;
	}
    } else {
      if (xEditorPane requestClose) {
	xEditorPane writeOutput infileName;
	xPane deleteAndClose;
	exit (0);
      }
    }
  }
}

Next: , Previous: , Up: Classes   [Index]

Symbol

Symbol Class

Symbol class objects represent memory locations. They can refer to objects, C variables, buffers, I/O ports, and other data located in memory.

As an alternative, if you receive an Unimplemented C type warning, you can store various types of C data in Symbol objects. See Objects in Function Arguments.

A unary ‘*’ operator behaves similarly to the C operator. That is, it refers to the value of the Symbol object, not the object itself. The following example might make this clearer.


int main () {

  Symbol new sym1;
  Symbol new sym2;
  Symbol new sym3;
  Integer new i;
  
  i = 2;

  sym3 = sym1;   /* Save the original value of sym1. */

  sym1 = i;
  printf ("%d\n", sym1);

  *sym2 = i;
  printf ("%d\n", *sym2);

  sym1 = sym3;  /* Restore sym1 to the original object. */

  i = 4;
  
  *sym1 = i;

  printf ("%d\n", *sym1);
}

Instance Variables

value

The value of a Symbol is a hexadecimal memory address.

Instance Methods

* (void)

The *. A shortcut for the getValue method, below.

= (void *v)

Assign a reference to the argument as the value of the receiver. If v is also a Symbol object, simply copy the reference. This method is a synonym for symbolReference, below. If you want to use multiple levels of object references and dereferences, see the addressOf method in Object class See Object, and the deref method, below.

asAddrString (void)

Returns a String object with the formatted hexadecimal address of the object pointed to by the receiver.

asString (void)

Returns the receiver’s value as a String object with the value of the char string that the Symbol receiver object points to. The result object has the same name as the receiver and the class of String.

basicObject (char *name, char *classname, char *superclassname, char *value_expr)

Create a basic object and make the receiver’s value point to it. The new object has the scope ‘LOCAL_VAR|VAR_REF_OBJECT’ and a reference count of 1.

Referencing the object with a Symbol makes it easy to create objects and then assign them to C variables in the calling method or function. For example,


  Symbol new s;
  OBJECT *int_object;

  s basicObject "new_int", "Integer", "Magnitude", "10";

  int_object = s getValue;

  printf ("%d\n", int_object value);

deref (void)

Return the object referred to by the receiver. This method is functionally equivalent to the C ‘*’ operator.

getValue (void)

Return the object that the receiver’s value (previously set by = or symbolReference) refers to. If the address doesn’t refer to an object, returns the receiver and generates an exception, which the program can handle in whatever manner is necessary. In some cases, the internals of Ctalk’s object-to-C routines can also generate an warning message.

Note that when assigning a non-object data address to a C variable like a void *, Ctalk allows both of these expressions:


 void *myVoidPtr;

 myVoidPtr = mySymbol;

 myVoidPtr = *mySymbol;   /* Generates an exception. */

name (void)

Return a new String object containing the receiver’s name.

removeValue (void)

Remove the reference to the target object from the receiver. Delete the target object if there are no further references to it.

symbolReference (void *v)

Return a new String object containing the receiver’s name.


Next: , Previous: , Up: Classes   [Index]

Key

Key Class

Objects of class Key are key-value pairs. Other classes and programs can use Key objects’ names when looking up objects. The value of a key object is a reference to the value object.

Many of the Collection subclasses are composed entirely of Key objects, which act as the “glue” that maintains references to the the actual contents of the collection. See Collection.

Programs can also manipulate Key objects independently. Most of the math operators that work with collections actually work with Key objects. So it’s important to add the attribute OBJECT_IS_MEMBER_OF_PARENT_COLLECTION to a Key object when building collections. This tells Ctalk that the Key object can be used independently, as well as part of its parent collection. See Attributes.

Here’s a program that manipulates the Key objects of a collection (here, an AssociativeArray) directly. See AssociativeArray.


int main (int argc, char **argv) {

  AssociativeArray new a;
  Key new k;

  a atPut "key1", "value1";
  a atPut "key2", "value2";
  a atPut "key3", "value3";
  a atPut "key4", "value4";

  k = *a;

  while (++k)
    printf ("%s --> %s\n", k name, *k);

}

Instance Variables

value

The value is the formatted representation of a hexadecimal pointer to a memory address.

Instance Methods

+ (Integer n)

Increments the receiver by n. For a Key object, this sets the receiver to the nth successive element in a collection. The increments are numbered with ‘1’ pointing to the first member of the collection, and so on. If there are no more elements, the receiver’s value is NULL. For an example, refer to -, below.

++

Increments the receiver to point to the next Key in a collection. If the receiver is already the last item item in the collection, the value of the receiver after it is incremented is NULL. This method works as both a prefix and postfix method, and increments the receiver either before or after it is referenced, respectively.

Here is an example of how to iterate over an AssociativeArray using ++.


  AssociativeArray new a;
  Key new k;

  a atPut "key1", "value1";
  a atPut "key2", "value2";
  a atPut "key3", "value3";
  a atPut "key4", "value4";

  k = *a;

  while (++k)
    printf ("%s --> %s\n", k name, *k);

- (Integer n)

Decrements the receiver by n. For a Key object, this sets the receiver to the nth previous element of the collection that the receiver is a member of. Here is a brief example


int main () {

  AssociativeArray new a;
  Key new k;

  a atPut "1", "value1";
  a atPut "2", "value2";
  a atPut "3", "value3";
  a atPut "4", "value4";

  k = *a;
  printf ("%s --> %s\n", k name, *k);
  k = k + 3;
  printf ("%s --> %s\n", k name, *k);
  k = k - 1;
  printf ("%s --> %s\n", k name, *k);
}

Running this program produces the following output.


1 --> value1
4 --> value4
3 --> value3

--

Decrements the receiver to point to the previous Key in a collection. If the receiver is the first item in the collection, the value of the receiver after it is decremented is NULL. Like ++, this method works as both a prefix and postfix method, and decrements the receiver either before or after it is referenced, respectively.

=

If the receiver refers to an object reference (that is, preceded by a ‘*’ operator), sets the value of the receiver to the address of the argument. Otherwise, sets the receiver to refer to the argument.

getKeyObject (void)

Return the receiver.

setName (char *key_name)

Set the receiver’s name to the argument, a String object.

Note: In some cases, the object’s name is the only way that Ctalk can refer to it. In that case, the program needs to maintain an alias to the object, like an OBJECT *, so that it can refer to the object later. In the following example, the program can refer to keyObject by using key_alias_ptr, regardless of the object’s name.

Key new keyObject;
OBJECT *key_alias_ptr;
...
key_alias_ptr = KeyObject setName keyNameString;
ulink (void)

Detach the receiver object from its parent collection. The method also removes the OBJECT_IS_MEMBER_OF_PARENT_COLLECTION attribute from the receiver.


Previous: , Up: Classes   [Index]

Vector

Vector Class

Objects of Vector class refer to blocks of memory of arbitrary length. The memory area that the Vector object points to may contain any data, including NULL bytes.

Whenever a program or method assigns a Vector object a new area of memory, the program or method also sets the Vector object’s length instance variable; for example, the method readVec (class ReadFileStream) records the memory area’s size in the length instance variable after it has read a chunk of data from a disk file. See ReadFileStream.

Here’s an example program that writes a copy of a JPEG image file.


int main () {
  ReadFileStream new readF;
  WriteFileStream new writeF;
  FileStream new f;
  Vector new vec;
  LongInteger new size;

  readF openOn "original.jpeg";
  readF statStream;
  size = readF streamSize;
  
  vec = readF readVec size;

  writeF openOn "copy.jpeg";
  writeF writeVec vec;

  writeF closeStream ;
  readF closeStream;
}

Instance Variables

length

An Integer that contains the size in bytes of the memory area that the Vector object points to.

Instance Methods

+ (Vector v)

Return a Vector object that is the concatenation of the receiver and the argument.

+= (Vector v)

Concatenate the receiver with the vector given as the argument.

asString (void)

Returns the value of the receiver as a String object terminated with a NUL byte to the value of the receiver’s length instance variable. Does not check for NULs or non-printing characters in the value, so the returned String may still be truncated to less than the receiver’s length.

basicNew (char *name, char *value, int value_length
basicNew (char *name, char *classname, char *superclassname, char *value, int value_length)

Create a new Vector object with the name, contents, length, and, optionally, class name and superclass name given as the arguments.

For the five-argument form of basicNew, the class should be Vector and the superclassname should be Symbol, unless the program has subclassed Vector.

In the three-argument form, the receiver must be a member of Vector class or its subclasses, in which case the method takes the class and superclass from the receiver, as in this example.


myBuf = Vector basicNew "memorybuf", memory_buf_ptr, memory_buf_length;

The value argument may be any memory address that points to data of arbitrary size, and may contain any data, including NULL bytes.

The value_length argument supplies the length of the memory segment in bytes, which the returned Vector object stores in its length instance variable.

Most of the internal work of setting the values and attributes of the returned object, and registering the memory area, is performed by __ctalkSetObjectValueAddr, which each of these methods call. See ctalkSetObjectValueAddr.

It’s also necessary that these methods take care of other initialization tasks which are necessary for all classes of objects. They’re described in general in the description of basicNew (Object class). See ObjectbasicNew.

contains (String pattern)
contains (String pattern, Integer start_offset)

With one argument, returns an Integer with the byte offset of the first occurence of pattern in the receiver, starting from the beginning of the receiver’s value, or -1 if the pattern is not found.

If a second argument is given, it contains the Integer offset into the buffer where the method begins its search. That allows programs to find multiple matches of the same pattern in the receiver’s value.


Next: , Previous: , Up: Top   [Index]

Methods

Methods

The following sections outline some of the programming features that Ctalk methods implement. The Ctalk Tutorial provides step-by-step instructions on how to write some common method types.

Declaring a method is similar to declaring a C function, but the declaration syntax adds some additional features.

To declare an instance method, use the instanceMethod keyword, as in the following example.

String instanceMethod = set_value (char *s) {

 ... method statements

}

This example declares an instance method, =, which is recognized by objects that belong to the class String and its subclasses. The = in the declaration overloads C’s = operator, so that, instead of assigning a value to a C variable, the method sets the value of its receiver.

In this example, the receiver is an instance of class String.

newObject = "Hello, World!";

If the variable reference immediately preceding = refers to a C variable, then = behaves as the C operator, =.

Ctalk can use most C operators as methods, with the exception of parentheses and prefix operators. Receivers always precede the method message.

For example, the Integer methods invert and bitComp perform the same operations as the C prefix operators ! and ~.

int i;              /* C variable. */
Integer new myInt;  /* Ctalk object. */

i = 0;
myInt = 0;

/* These two statements are equivalent. */
printf ("%d", !i); 
printf ("%d", myInt invert).

/* And so are these two statements. */
printf ("%d", ~i);
printf ("%d", myInt bitComp);

Declaring Methods

The declaration syntax for instance methods is:

classname instanceMethod [alias] funcname (args) { method body }

and for class methods:

classname classMethod [alias] funcname (args) { method body }

If alias is omitted, Ctalk refers to the method by funcname.

In the example at the beginning of this section, if = were omitted, a program could refer to the method by the message, set_value.

With the exception of the primitive methods class, new, classMethod, and instanceMethod, Ctalk declares methods in its class library, or in the program input. See Classes.

Method Parameters

You can use Ctalk class objects to declare method parameters, but you can also declare parameters using C data types, in order to prevent class libraries from being loaded recursively. This is necessary in many of the basic classes.

Regardless of how you declare method parameters, when the method’s message is sent to an object, Ctalk translates C language arguments into class objects.

For example, these two declarations are equivalent.

Integer instanceMethod + add (int i) {
...
}

Integer instanceMethod + add (Integer i) {
...
}

Ctalk does not use objects in C function arguments, so if you need to use objects as parameters, you must write a method instead of a C function.


Next: , Up: Methods   [Index]

Method API

Method Application Programming Interface

This section describes the C functions and macros that methods use to interface with the Ctalk run time libraries and with each other.

At this point, the method API is still developing, and relies heavily on C library functions.

This example shows method + of class Integer, which adds two Integer objects, creates an object for the result, and returns the result.

Integer instanceMethod + add (int i) {

  OBJECT *op1, *op2;

  op1 = self value;
  op2 = i value;

  methodReturnInteger(atoi(op1->__o_value) + atoi(op2->__o_value))
}

The keyword self refers to the receiver of the method. See Self and super.

The variables op1 and op2 are the value instance variables of the receiver and the argument. Ctalk has a method, value (class Object), which returns the value instance variable, but you can also refer to instance variables by sending an instance variable’s name as a message to an object.

Internally, the receiver, arguments, and return value of a method are all ‘OBJECT *’. When you use C functions with objects, you use the members of an OBJECT type, a struct. (See OBJECT typedef.) If you declare an object as a C OBJECT *, then the method uses it like any other C struct *.

All methods return an ‘OBJECT *’ as the result. The macro methodReturnInteger defines the object that the method returns. See Return values.

The add method is in classes/Integer. The file include/object.h contains the declaration of the ‘OBJECT’ type.


Next: , Previous: , Up: Methods   [Index]

Self and super

self and super

The keywords self and super refer to the method’s receiver object and a method in a superclass of the receiver’s class, respectively.

Refer to the method + (class Integer) from the previous section. If you call + with the statement below, self in the + method would refer to i.

j = i + 2;

The super keyword refers to a method in one of the superclasses of the receiver. It is commonly used in constructors.

For example, if a class implements its own new method that performs additional initialization for instances of a class, it can also call new implemented by a superclass.

This constructor from the ReadFileStream method, new, also calls new from class Object.

ReadFileStream instanceMethod new (char *name) {

  ReadFileStream super new name;

  __ctalkInstanceVarsFromClassObject (name);

  ReadFileStream classInit;
  
  return name;
}

The first statement, ReadFileStream super new name, calls new from class Object before performing its own initialization.


Next: , Previous: , Up: Methods   [Index]

Class initialization

Class Initialization

Some classes that have class variables require initialization when the program is run. For example, class ReadFileStream needs to have its class variable stdinStream set to the application’s stdin file stream before the program can read from standard input. For this, you would use the library function xstdin, and use its value in stdinStreamVar.


__ctalkObjValPtr (stdinStreamVar, xstdin ());

Classes that require class variable initialization need to define a method, classInit, which is called by a constructor when the first object is created. An example is the ReadFileStream method new from the previous section.

Here is the classInit method for class ReadFileStream.


ReadFileStream classMethod classInit (void) {
  "Initializes the classes' standard input stream.  This
  method is normally called by the ReadFileStream
  constructor.  The method needs to be called only once;
  on further calls to 'new', it is a no-op."
  OBJECT *classObject,
    *stdinStreamVar,
    *classInitVar;

  if (self classInitDone)
    return NULL;

  classObject = __ctalkGetClass ("ReadFileStream");
  stdinStreamVar = __ctalkFindClassVariable ("stdinStream", TRUE);
  __ctalkInstanceVarsFromClassObject (stdinStreamVar);
  
  __ctalkObjValPtr (stdinStreamVar, xstdin ());

  classInitVar = 
    __ctalkCreateObjectInit ("classInitDone", "Integer",
			     "Magnitude",
			     classObject -> scope, "1");
  __ctalkAddClassVariable (classObject, "classInitDone", classInitVar);

  return NULL;
}

A classInit method needs to be called only once. The method checks the classInitDone instance variable to determine the method has already performed the initialization that the class needs.


Next: , Previous: , Up: Methods   [Index]

Prefixes

Overloading C Unary Operators

Methods can also overload C unary operators like ‘*’, ‘&’, ‘!’, ‘~’, and ‘sizeof’. For most unary operators, if the class defines a method to overload the operator, then Ctalk uses the method; otherwise, it treats the operator as a normal C operator.

Methods that overload unary operators contain the __prefix__ attribute in their declaration. This simplifies method writing considerably, because that allows a class to define two different method ‘*’ methods, for example, one a unary dereference operator, the other a multiplication operator.

In the method’s declaration, use the __prefix__ attribute in place of paramter declarations, as in this example.

String instanceMethod * deref_prefix (__prefix__) {
... Method statements here ...
}

When Ctalk encounters a ‘sizeof’ operator, it checks whether the argument is a Ctalk object, or a C variable or type cast expression. If the argument is a C variable or type cast expression, then Ctalk uses the C sizeof operator. Otherwise, it uses the sizeof method (Object class). This method’s implementation is simple: it treats a Ctalk object as an OBJECT *, and returns the size in bytes of a pointer on the system. On 32-bit systems, the sizeof method always returns 4. However, you can overload the ‘sizeof’ operator in your own classes if necessary.

You need to take care when using unary operators in complex statements, due to the precedence of Ctalk’s method messages. In the following highly experimental example, you would need to use parentheses to specify the order of evaluation, because the expression needs the result of (*s) asString to be a String also.

String new s;
String new sFirstChar;
Character new c;
Integer new i;
s = "Hello, ";
sFirstChar = (*s) asString; 

Ctalk also provides postfix equivalents for many of these operators, like deref (class Symbol) and invert (Character, Integer, and LongInteger classes).

Ctalk can overload these operators even if the class defines a method that uses the operator with an argument. For example, the pointer (‘*’) and unary minus (‘-’) operators can have different methods than the methods that perform multiplication and subtraction.

The subject of method overloading is discussed further in its own section. See Overloading.


Next: , Previous: , Up: Methods   [Index]

Translating

Translating C Variables into Object Values

The OBJECT C data type that Ctalk uses internally stores objects’ values as C char *’s. See OBJECT typedef.

To store numeric values, you must format them as character strings, using, for example, sprintf. In many cases, however, Ctalk performs this translation automatically.

Integer objects can also translate values with atoi(3) or __ctalkDecimalIntegerToASCII. Other scalar data types have corresponding functions that translate numbers to character strings.

If for some reason you need to translate an object to its C type or back again, the Ctalk library provides the following functions.

__ctalkToCArrayElement (OBJECT *o)

Translate the value of an Integer, Character, String, or LongInteger array element to a void * that points to its corresponding C data type.

__ctalkToCCharPtr (OBJECT *o, int keep)

Translate the value of a String object into a C char *. If keep is FALSE, delete o.

__ctalkToCIntArrayElement (OBJECT *o)

Translate the value of an Integer array element to an int.

__ctalkToCInteger (OBJECT *o, int keep_object)

Translate the value of an Integer to an int. If keep_object is FALSE, then delete the object.

__ctalkToCInteger (OBJECT *o, int keep_object)

Translate the value of an Integer to a long int. If keep_object is FALSE, then delete the object.

__ctalk_to_c_char_ptr (OBJECT *o)

Translate the value of a String object into a C char *. Note: This function is being phased out. Use __ctalkToCCharPtr (), above, instead.

__ctalk_to_c_double (OBJECT *o)

Translate the value of a Float object into a C double.

__ctalk_to_c_int (OBJECT *o)

Translate the value of an Integer object into a C int.

__ctalk_to_c_longlong (OBJECT *obj, int keep)

Translate the value of a LongInteger object into a C long long int. If keep is non-zero, does not delete obj, or, in compound expressions that need to interface with C variables, (like complex if-statement conditionals), whether to delete the library’s internal C variable registrations.

Formats the arguments of the second-most calling method and prints them on the receiver. This function is meant to be used within a method that is called by another method. One method that uses this function is String : vPrintOn. Refer to String : vPrintOn for an example of this function’s use. See vPrintOn--class String

__ctalkCBoolToObj (bool b)

Create a Boolean object with the boolean (either true or false) value of the argument.

__ctalkCCharPtrToObj (char *s)

Create a String object with the value s.

__ctalkClassLibraryPath (void)

Return a char * containing the directories that Ctalk searches for class libraries. When compiling programs Ctalk searches first for directories given as arguments to the ‘-I’ option, then directories given by the CLASSLIBDIRS environment variable, then the standard class library directory which is defined when Ctalk is built. In addition, for each directory, if a subdirectory named ctalk exists, then Ctalk searches that subdirectory also.

The standard library directory defaults to /usr/local/include/ctalk, although if you define a different ‘--prefix’ when building and installing Ctalk, the class libraries will be located in prefix/include/ctalk.

If it is necessary to look up class libraries at run time, Ctalk first searches the directories listed by the CLASSLIBDIRS environment variable, then the default class library directory mentioned above.

__ctalkClassSearchPath (void)

A synonym for __ctalkClassLibraryPath(), above.

__ctalkCDoubleToObj (double f)

Create a Float object with the value f.

__ctalkCIntToObj (int i)

Create an Integer object with the value i.

__ctalkCLongLongToObj (long long int l)

Create a LongInteger object with the value l.

__ctalkCSymbolToObj (unsigned int label)

Create a Symbol object with the value that is the address of label. This is used for expressions where a function name appears by itself, for example. In that case, the result is a Symbol object with the address of the function.

The functions that create objects give the objects the scope of the function call, either global or local.

Note: In future versions of Ctalk, the names of these functions are likely to change.


Next: , Previous: , Up: Methods   [Index]

C Macros

C Macros

Ctalk also provides many macros that help standardize the Ctalk-to-C conventions. They’re defined in the ctalkdefs.h include file. To use them, include ctalkdefs.h in a source file or class library.


#include <ctalk/ctalkdefs.h>

Some of the macro definitions in ctalkdefs.h are described here.

ARG

With a numeric argument, retrieves the n’th method or template argument from the stack; i.e., ARG(0) refers to the first argument on the stack, ARG(1) retrieves the second argument, and so on.

CLASSNAME

Returns an object’s classname.

Note: You should use this macro in new code. While typing __o_classname directly with an OBJECT * should work for a while, it’s going to be phased out.

Using __o_classname with an object and the -> method is still okay, though. For example:


  OBJECT *myObjRef;
  String new myString;

  /* The use of __o_classname as struct member is going away... */
  myObjRef -> __o_classname;
  /* Instead, write this. */
  myObjRef -> CLASSNAME;

  /* These are still okay, because -> is a method, not the C operator. */
  myString -> __o_classname;
  self -> __o_classname;

  /* The same is true for the SUPERCLASSNAME definition. */

  SUPERCLASSNAME(myObjRef);

  self -> SUPERCLASSNAME;
  myString ->  SUPERCLASSNAME;
FILEEOF

Writes an fEOF to the char * buffer given as its argument.

FMT_0XHEX

When used with a function like sprintf (), formats a pointer into its string representation. For example:


char buf[64];
OBJECT *my_object_ptr;

....   /* Do stuff. */

sprintf (buf, FMT_0XHEX(my_object_ptr));

However, this macro is not very portable and using functions that use stdargs (e.g., printf, scanf, etc.) can be cumbersome. Library functions like __ctalkGenericPtrFromStr () See ctalkGenericPtrFromStr, and __ctalkFilePtrFromStr () See ctalkFilePtrFromStr, might be faster and more reliable.

IS_OBJECT

Returns True or False if its argument, a C pointer, refers to a valid object.

IS_VALUE_INSTANCE_VAR

Returns True or False if its argument, a C pointer, refers to the value instance variable of an object.

MEMADDR

Casts its operand to a void **, which is what Ctalk’s internal function __xfree () uses when freeing memory. Normally you should use __ctalkFree () to free memory, but the MEMADDR macro is here in case you want to call __xfree () directly. Refer to the entry for __ctalkFree () for details. See ctalkFree.

STR_0XHEX_TO_PTR

Does the converse of FMT_0XHEX; it converts the string representation of a pointer into an actual pointer, when used with a function like sscanf (). For example:


OBJECT *my_object;
OBJECT *my_object_ptr;

sscanf (my_object -> __o_value, STR_0XHEX_TO_PTR(my_object_ptr));

Again, using stdargs functions can be cumbersome and not very portable. In many cases, __ctalkObjValPtr () accomplishes the same thing. See ctalkObjValPtr.

SUPERCLASSNAME

Returns an object’s superclass name. This macro should be used only with OBJECT *’s, as it is rather extensive and written in C. Returns an empty string if the object doesn’t have a superclass. See CLASSNAMEMacro, above.

__LIST_HEAD(List *l)

When given an argument that is a collection like a List object, returns the first member of the collection.

STR_IS_NULL(char *s)

Evaluates to True if the char * argument evaluates to zero; i.e., its value is ‘(null)’, ‘0’, ‘0x0’ or the first character is an ASCII NUL (‘\0’) byte.


Next: , Previous: , Up: Methods   [Index]

Required classes

Required Classes

The keyword require tells ctalk to preload the class given as its argument before any other classes or methods.

The following lines appear in the ctalklib library.

require Object;
require Symbol;
require String;

These statements tell ctalk to first load the Object class and its methods, and then load the class Symbol and its methods, and then class String. Ctalk loads the class and its methods at that point in the program, before further processing of the source file.

The require keyword always occurs in a global scope; that is, outside of any method or function.


Next: , Previous: , Up: Methods   [Index]

Scoping

Scope of Objects

In Ctalk, an object can have a number of different scopes, and Ctalk implements many more scopes for objects than for C variables.

All of the scopes are available when creating and modifying objects. In practice, however, you should only need to use a few of them. Ctalk uses many of the scopes internally.

These are the scopes that Ctalk implements.

GLOBAL_VAR

An object that is declared globally; that is, outside of any function or method.

LOCAL_VAR

An object declared within a function or method.

ARG_VAR

An object derived from a C function argument that is used within a Ctalk expression. This scope is normally used only internally.

RECEIVER_VAR

An object created internally for receiver objects that do not already have objects. Ctalk assigns RECEIVER_VAR objects C constants and constant expressions when they are used as receivers.

PROTOTYPE_VAR

Used by the front end when evaluating objects that are declared as method parameters.

CREATED_PARAM

Used mainly for temporary objects that are derived from C constants that are arguments to methods and functions.

CVAR_VAR_ALIAS_COPY

Used for temporary and non-temporary objects that are created from C variables.

CREATED_CVAR_SCOPE

This is a combination of CVAR_VAR_ALIAS_COPY|LOCAL_VAR scopes. Used for C variable objects that are only needed for the duration of an expression. Also used for other values that aren’t needed after an expression has been evaluated, like boolean method return values.

SUBEXPR_CREATED_RESULT

Used internally for temporary objects that are the results of subexpressions.

VAR_REF_OBJECT

Used for objects that are referred to by other objects; for example an object referred to by a Symbol object may have this scope set.

METHOD_USER_OBJECT

This scope is used mostly internally for objects that are returned by methods and saved as method resources.

TYPECAST_OBJECT

Used internally for temporary objects that are derived from C type cast expressions.

You set a new object’s scope with the __ctalkCreateObject or __ctalkCreateObjectInit functions. To change an existing object’s scope, use the __ctalkSetObjectScope library function to set an object’s scope.

Even though you can set an OBJECT *’s scope directly, using these functions insures that the object and all of its instance variables maintain the same scope.

When creating an object with a function like __ctalkCreateObjectInit, you can declare a scope directly.

result = __ctalkCreateObjectInit ("result",  
                                  "Symbol", "Object",
                                  LOCAL_VAR, "0x0");

When altering the scope of an existing object, however, you should add or subtract only that scope from the object’s existing scope.

For example, to add a VAR_REF_OBJECT scope to an object:

__ctalkSetObjectScope (object, object -> scope | VAR_REF_OBJECT);

To remove the scope, use an expression like this.

__ctalkSetObjectScope (object, object -> scope & ~VAR_REF_OBJECT);

For values of integral classes like Integer, LongInteger or Symbol, __ctalkCreateObjectInit tries to convert the value parameter to its numeric value. It the function can’t figure out a way to convert the argument to its numeric value, it issues a warning message.


ctalk: can't convert d to an int.

In these cases (and in many others) it is easier to simply use an empty string as the final parameter and then fill in the value after the object is created, as in this example (assuming that the object is an Integer)..


result = __ctalkCreateObjectInit 
  (INTEGER_CLASSNAME, INTEGER_SUPERCLASSNAME, LOCAL_VAR, "");
*(int *)result -> __o_value = int_value;
*(int *)result -> instancevars -> __o_value = int_value;

In this case, the INTVAL, LLVAL, and SYMVAL macros can help make the expression more readable, depending on whether the new object is an Integer, LongInteger, or Symbol.


INTVAL(result -> __o_value) = int_value;
INTVAL(result -> instancevars -> __o_value) = int_value;


Next: , Previous: , Up: Methods   [Index]

Templates

Templates

Templates are simplified methods that are defined as macros and written in C. They provide a method-compatible wrapper to C functions.

Template methods can appear in place of C functions in complex expressions, and they must be used if a C function writes to its arguments (e.g., like scanf(3) or sscanf(3)). For example, if we have a template defined for the function myPrintMsg, then Ctalk subsitutes the method expression wherever myPrintMsg appears in an expression like this one.


  if ((myInt = myPrintMsg (someMsg)) != 0) {
     ... do something...
  }

After compilation, the expression looks like this.


  if ((myInt = CFunction cMyPrintMsg (someMsg)) != 0) {
     ...

You can also use myPrintMsg on the left-hand side of an assignment, like this.


  myInt = myPrintMsg (someMsg);

  -or-

  self = myPrintMsg (someMsg);

Additionally, you can use templates on their own, by prefacing the method’s name (the template function’s alias) with its class object.


  CFuntion myPrintMsg (someMsg);

As the last example implies, templates are class methods in the pseudo-class CFunction. Ctalk loads and caches templates where necessary when compiling the input file, so you won’t see any methods of the CFunction class unless the program calls for one or more of them.

If the template wraps a C function of the same name, then, of course, you can also use the C function on its own. However, templates don’t necessarily need to correspond to a C function; they can provide any set of C expressions with a method compatible interface.

Ctalk defines a number of built-in templates for the standard C library. You can determine if Ctalk substitutes a template for a C function by giving the --printtemplates option to ctalk when it compiles a source file. This displays the templates that the compiler loads and caches (but doesn’t necessarily send to the output).

You can define templates for application-specific C functions and routines also. Ctalk retrieves and caches them similarly to its built-in templates, but they are cataloged and stored separately in each user’s ~/.ctalk/templates directory.

As mentioned above, templates don’t need to wrap a function of the same name as the template. That is, myPrintMsg, above, does not have to be an actual function (although you need to prototype it that way). Templates for C library functions always correspond to an actual library function. Program specific templates can serve as a wrapper for any function or set of routines.

When compiling templates, the Ctalk compiler checks the user template registry first. If a user defines a template with the same name as one of Ctalk’s C library templates, then the compiler uses the user’s template instead of Ctalk’s built-in template. That means you can define a template that replaces a C library template.

When creating a template for a function, you need to follow these steps.

Writing Templates

Templates are basically multiple line macros that provide a method selector and method body in a #define preprocessor statement. When Ctalk finds a function name that has a template defined for it, it subsitutes the template name for the function name in the expression, adds the template’s body to the output, and adds the template to the CFunction classes’ initialization.

Templates can accept arguments similarly to methods, and, like methods, they return a C OBJECT *, or NULL.

Here is the template for the myPrintMsg() C function. The template provides a wrapper for the printf(3) function, and, like printf(3), returns an integer value (as an Integer object). The template contains a few features that are part of the template protocol.


#define myPrintMsg \n\
cMyPrintMsg (char *text) {\n\
  char buf[255]; \n\
  int result; \n\
  OBJECT *objresult; \n\
  if (__ctalkIsObject(ARG(0))) {\n\
    result = printf ("myPrintMsg: %s\n", \n\
                      __ctalkToCCharPtr(ARG(0), 1)); \n\
    __ctalkDecimalIntegerToASCII (result, buf); \n\
    return __ctalkCreateObjectInit ("result", "Integer", \n\
                                    "Magnitude", LOCAL_VAR, buf); \n\
  } else { \n\
    __ctalkDecimalIntegerToASCII (-1, buf); \n\
    objresult =  __ctalkCreateObjectInit ("result", "Integer", \n\
                                    "Magnitude", LOCAL_VAR, buf); \n\
    __ctalkRegisterUserObject (objresult); \n\
    return objresult; \n\
  }\n\
}

Cataloging Templates

When looking up templates, Ctalk looks in the template registry file, which is normally ~/.ctalk/templates/fnnames for the name given in the input. If the function is aliased to another name by a macro substitution, fnnames contains the name of the alias also.

For example, on some systems, the function getc(3) is a macro that expands to ‘_IO_getc’. The fnnames file would then contain ‘_IO_getc’ as the templated function’s name.

When the compiler finds the function’s name or alias in fnnames, it looks in the directory for the template file, which is named for the first letter of the function’s name. That is, when looking for myPrintMsg's template, Ctalk looks for a file named ~/.ctalk/templates/m.

The C library templates that come with Ctalk use the same scheme, except that the template files are stored in a subdirectory of the class library called libc. The registry is part or the run-time library, so C library templates do not need a separate registry file.

The manual page, fnnames(5ctalk) contains more information about the fnnames file. The templates(5ctalk) manual page describes the format of individual templates.


Next: , Previous: , Up: Methods   [Index]

Return values

Return Values

Internally, methods return either an OBJECT * or NULL. If you write a method that returns a C variable, Ctalk normally translates it into an equivalent object.

Methods that return arrays declared in C generally assign the C array to an equivalent Array object. The Array object’s size is the same as the array declaration, regardless of how it the array’s members are initialized.

The Array allocation only occurs for arrays declared with a subscript; that is, a variable declared as int * is not always stored in an Array object, while a variable declared as int[size] is.

Ctalk treats C arrays declared as char[size] a little differently. If the method’s definition says the return class of the method is Array, then Ctalk returns an Array of Character objects; otherwise, it returns a String object.

Because Ctalk does not have equivalent classes for multi-dimensioned arrays; that is, arrays with more than one subscript, it does not translate the arrays automatically. In these cases, the method might return a multi-dimensioned array by assigning it to a Symbol object.

Occasionally, you might need to return the result of an expression that Ctalk can’t translate automatically. In that case, you can use the eval keyword to evaluate the expression when the program is run, as in this example.

MyClass instanceMethod myMethod (void) {
  ...
  return eval <expression>
}

If a method must create an object of its own to return, the object should have the scope CREATED_PARAM, which tells the Ctalk libraries that the the program only needs the object if it’s the result of a complete expression; if not, the program cleans up the object automatically when it is no longer needed. See __ctalkRegisterUserObject.


return __ctalkCreateObjectInit ("myStringAnswer", "String",
                                "Character", CREATED_PARAM,
                                "The contents of the String object.");

If the program needs to store a return object for longer than the scope that the object is called in, the method can save the object in its object pool with the library function __ctalkRegisterUserObject, which is described below. See __ctalkRegisterUserObject.


String instanceMethod myMethod (void) {

  OBJECT *return_object; 

  ... Do stuff. ...

  return_object =  __ctalkCreateObjectInit ("myStringAnswer", "String",
                                "Character", CREATED_PARAM,
                                "The contents of the String object.");
  __ctalkRegisterUserObject (return_object);
  return return_object;

}

Another case may be when a method needs to retrieve an object reference. In these cases, the method may need to increase the object’s reference count. However, such a method can also call __ctalkRegisterExtraObject to save the object so its memory isn’t lost later. The __ctalkRegisterExtraObject function does not, itself, set the object’s reference count, and it saves an object (not copies of objects) only once.

Method Return Macros

Alternatively, if a method needs to return an object of a particular class, you can use the following methodReturn* statements. These are macros that implement the statements to store and return objects which represent different types or classes, like ints as Integer objects, doubles as Float objects, and so on.

These macros have been superseded in more recent versions of Ctalk, which has the ability to insert the correct return code for any class of object, and many C variables, functions, and expressions. If the compiler doesn’t recognize some particular expression, however, these macros may still be useful.

Remember that these return value functions are implemented as macros and contain their own code block, so you can use them in places where normal functions would cause a syntax error.

methodReturnBoolean (int i)

Return a Boolean object that Ctalk can evaluate to TRUE or FALSE depending on the value of its argument. Mostly deprecated; an expression like, "return TRUE" is equivalent.

methodReturnFalse

Return a Boolean object that evaluates to FALSE. Deprecated; using the expression, ‘return FALSE;’ has the same effect.

methodReturnInteger(int i)

Return an Integer object with the value i. Mostly deprecated; an expression like, "return <int>" is equivalent.

methodReturnLongInteger(int l)

Return a LongInteger object with the value l. Mostly deprecated; an expression like, "return <longlongint>|<longint>" is equivalent.

methodReturnNULL

Returns the C value NULL. Deprecated; simply use the expression, ‘return NULL;’ instead.

methodReturnObject(object)

Return object. Deprecated; the expression, ‘return object’ has the same effect.

methodReturnObjectName(objectname)

Return the object referred to by objectname. Also deprecated; like methodReturObject, above, the expression, ‘return object’ has the same effect.

methodReturnSelf

Returns the method’s receiver, self. Slightly deprecated; simply using the statement, “return self,” has the same effect.

methodReturnString(char *s)

Return a String object with the value s. Mostly deprecated; an expression like, "return <char *>|<string constant>" is equivalent.

methodReturnTrue

Return a Boolean object that evaluates to TRUE. Deprecated; use the expression, ‘return TRUE;’ instead.

The macros that return objects use the __ctalkRegisterUserObject function to keep track of method’s return values, and, if necessary, other objects that the method creates. See __ctalkRegisterUserObject.


Next: , Previous: , Up: Methods   [Index]

Variable arguments

Variable Arguments

C functions like scanf(3), sscanf(3), and fscanf(3) have templates that allow you to call them with a variable number of arguments.

If you need to call other C functions that use variable arguments, you must call __ctalkLibcFnWithMethodVarArgs with the name of the function, the method that contains the function’s template, and the function’s return class.

The readFormat method (implemented in String and ReadFileStream classes) can scan a string or input file into the objects that the program gives as arguments. The methods also take care of scalar-to-object translation, memory allocation, and several other tasks.

However, programs can also accomplish the same thing manually.

For example, here is the code of the template method for fscanf(3), cFscanf (CFunction class), without the preprocessing directives.

cFscanf (FILE *s, char *fmt,...) {
  EXPR_PARSER *parser;
  OBJECT *result_object;
  parser = __ctalkGetExprParserAt (__ctalkGetExprParserPtr ());
  result_object =
    __ctalkLibcFnWithMethodVarArgs ((int (*)())fscanf, parser -> e_method, "Integer");
  return result_object;
}

At run time, the e_method member of an expression parser contains the method and its arguments.

The third argument of __ctalkLibcFnWithMethodVarArgs determines the class of result_object. For C library functions that use variable arguments, the return class is Integer.

The typecast (int (*)()) in the first argument in front of fscanf is not strictly needed because we know that the number and types of arguments to fscanf(3) (or scanf(3) or any other variable-argument function) might vary from the __ctalkLibcFnWithMethodVarArgs prototype, but it tells the compiler not to print a warning message in that case.

If you simply need to print formatted output, the writeFormat or printOn methods (implemented in String, WriteFileStream and many other classes classes) perform format-argument translations automatically. Several classes also implement a readFmt method, which reads formatted input from a String or ReadFileStream. See writeFormat--class WriteFileStream, and writeFormat--class String.


Next: , Previous: , Up: Methods   [Index]

Overloading

Overloading Methods

You can always implement a method in different classes. For example, you can define a ‘+’ method in Integer, LongInteger, Character, and Float classes, and Ctalk calls the method defined for that class of the receiver object.

Some operators also have methods implemented in a superclass, like Magnitude in this case, which can provide any extra error checking and processing that may be necessary, for example, if you try to use a unary minus (‘-’) operator with a receiver like a Pen or Rectangle object.

When you overload methods within a class, however, Ctalk does some extra checking. The compiler needs to examine the expression to find out how many arguments the statement has, whether the operator is a prefix operator, or whether the method’s argument is a block of code or a variable argument list, or whether the method uses a C calling convention.

Ctalk can overload math operators when they are also used as prefix operators. Two examples of these are the unary minus (‘-’) and pointer (‘*’) methods, which have different methods than the operators that perform subtraction and multiplication. Writing methods that are prefix operators is described above. See Prefixes.

Overloading Parameters

Exactly when you should write methods that overload things like parameters and variable arguments is somewhat within the philosophy of programming languages. For example, a common use of method overloading based on the number of parameters is the, “getter/setter,” type of method, which retrieves and sets an object’s private data.

In Ctalk, these are much less necessary than in other languages, because Ctalk can address an object’s private data with a message that has the same name as an instance or class variable. Since these messages bind more tightly to receiver objects than messages that refer to methods, these types of methods might not work the way you think they would. So be sure that if you write a method of this type, that the program is actually using a method message, and not an instance data message.

Here is an example of overloading parameters. Because the String class already has a concat method (it overloads the ‘+’ operator), we overload the method, myConcat, to concatenate one or two strings to the receiver.

As long as the program is relatively simple, it’s easy to keep track of which methods already exist in a class. In a bigger application, though, you might want to define a subclass of String class for this program.


String instanceMethod myConcat (String s1) {

  self = self + s1;

}

String instanceMethod myConcat (String s1, String s2) {

  self = self + s1 + s2;

}

int main () {
  String new s1;
  String new s2;
  String new s3;

  s1 = "Hello, ";
  s2 = "world! ";
  s3 = "Again.";

  s1 myConcat s2;
  printf ("%s\n", s1);
  
  s1 myConcat s2, s3;
  printf ("%s\n", s1);

}

We should mention that the myConcat method changes its receiver. So the arguments to the second myConcat message simply get added to the receiver again. The output should look something like this.

Hello, world!
Hello, world! world! Again.

Next: , Previous: , Up: Methods   [Index]

Variable method arguments

Variable Method Arguments

Ctalk supports variable arguments lists for methods that follow the stdarg.h format for argument lists, where the argument assigned to the last named parameter determines the number and type of the following arguments. (The manual page stdarg (3) has more details.)


  String instanceMethod writeFormat (char *fmt, ...)

In addition, Ctalk supports argument lists with no named parameters. To implement this, Ctalk interprets an ellipsis as a variable argument list, as usual. It is then up to the method to interpret the arguments as they appear on Ctalk’s argument stack.

For this task, the __ctalkNArgs library function returns the number of arguments that the run-time libraries place on the stack. The method can then interpret these arguments as necessary.

Here is the slightly abbreviated code for the List : = method, which should help illustrate this. See List.


List instanceMethod = initEQ (...) {
  int n, i;
  OBJECT *arg;

  self delete;         /* Start with an empty List. */
  n = __ctalkNArgs ();

  for (i = (n - 1); i >= 0; --i) {
    arg = __ctalk_arg_internal (i);
    self push arg;
  }
}


Next: , Previous: , Up: Methods   [Index]

Method functions

Method Functions

Occasionally an application needs to call a method as a function. One example of this is a SignalHandler method that the program installs as the handler for signals from the operating system.

Methods that use a C calling convention need to do several things differently than normal methods.

In order to make Ctalk interpret a method parameter as a C variable, the method must declare the parameter with the __c_arg__ attribute.

Note: C functions that are called by the operating system generally need only one argument, and the __c_arg__ attribute only works for methods with a single parameter.

Additionally, to prevent Ctalk from adding local object initialization code to the method, the method must contain the noMethodInit keyword.

Here is an example of a method that is used as a signal handler, and installed by the statements in main.

SignalHandler instanceMethod myHandler (__c_arg__ int signo) {
  noMethodInit;
  printf ("sigInt handler! Signal %d.\n", signo);
  return NULL;
}

int main () {

  SignalHandler new s;

  s setSigInt;
  s installHandler myHandler;
}

The setSigInt method (class SignalHandler) tells the SignalHandler object s that it is going to handle SIGINT signals. See SignalHandler, for the other signals that the class can handle.

The __ctalkNewSignalEventInternal function can generate and queue SignalEvent objects, so the signal handler does not need to create objects in order to send signal events to the application. See __ctalkNewSignalEventInternal.

Including C Header Files

Often you will need to use C functions and data types in method functions. However, you need to take care that if you include a C header file, it might not be included later on if a class library requires that file.

Normally Ctalk includes whatever C definitions it needs in the class libraries. However, that can cause the preprocessor to omit those definitions from another source file, should the definitions be needed later.

For example, in the method handleSignal, from the timeclient.c program, the method needs the definition of the time(2) function. If you were to #include time.h in the input, as in this example, then time.h’s definitions would not be included in the CTime class later on.

#include <time.h>    /* Could cause errors later. */

SignalHandler instanceMethod handleSignal (__c_arg__ int signo) {
  time_t t;
  char buf[MAXLABEL];
  noMethodInit;
  t = time (NULL);
  __ctalkDecimalIntegerToASCII (t, buf);
  __ctalkNewSignalEventInternal (signo, getpid (), buf);
  return NULL;
}

The best way to avoid omitting dependencies is to include only the definitions that the method needs. In this case, you can include the prototype of time(2) in the source file.

extern time_t time (time_t *__timer) __THROW;  /* From time.h. */

SignalHandler instanceMethod handleSignal (__c_arg__ int signo) {
  time_t t;
  char buf[MAXLABEL];
  noMethodInit;
  t = time (NULL);
  __ctalkDecimalIntegerToASCII (t, buf);
  __ctalkNewSignalEventInternal (signo, getpid (), buf);
  return NULL;
}

The time_t type is defined with ctalklib, and is available to all programs.

How to resolve multiple library definitions depends on the system’s header files, and may vary between different operating systems or compiler versions.


Next: , Previous: , Up: Methods   [Index]

Errors

Exception and Error Handling

There are two ways to handle error conditions in Ctalk. You can simply print an error or warning message in your code. An error message formats the text and data that you provide, the same as in a printf statement, and then exits the program. Here is an example.

_error ("Program exited with code %d.\n", result_code);

A _warning message is similar, but it prints the message and continues processing. See errorfuncs.

The other way to handle errors is with exceptions. This is the method you need to use if an error occurs within a method, and the program needs either to print a warning message, or exit.

There are two methods of class Exception that handle exceptions in application programs: pending and handle. There are also other API functions, but they are mostly used internally to translate exceptions into events that application programs can use.

These two methods are generally used together. The method pending, if it returns TRUE, signals that there is an exception pending. Then the function handle handles the event by executing an exception handler.

Generally, events simply issue error messages. It is up to you to determine how the program should handle the exception: by exiting, trying the procedure again, ignoring the condition, or some other procedure. Here is an example.

Exception new e;
...
inputStream openOn fileArg;
if (e pending) {
   e handle;
  exit (1);
}
if (inputStream isDir) {
  printf ("Input is a directory.\n");
  exit (1);
}

This is simply the way that Ctalk notifies the application if the method openOn (class ReadFileStream) encountered an error while opening the file named by its argument, fileArg.

You should note that the program also checks whether the input is actually a directory, because opening a directory as if it were a file does not necessary cause an error condition. The isDir (class FileStream) method is one portable way to check if the input path is actually a directory.

The method openOn, like other methods, raises an exception if necessary. It does this with raiseException (class SystemErrnoException).

Ctalk handles most stdio error codes in this manner. A program that uses the ReadFileStream and WriteFileStream classes should rarely need to use the C library’s errno macro, but it is still available if applications need to check for other errors from the C libraries.

The Ctalk library also provides exceptions for missing arguments, undefined methods, and other error conditions. The file, include/except.h, contains the definitions of Ctalk’s compile and run time exceptions.


Next: , Previous: , Up: Methods   [Index]

Cautions

Cautions when Using Arguments with C Library Calls

The interface for C functions is in development. You can use a C function in a simple expression with any argument, as in the following example.

op1 = __ctalkGetInstanceVariableByName ("self", "value", TRUE);

However, if you want to use a C function in a complex expression, then you must take care that the arguments to the function are C values that correspond to a Ctalk class, unless the function has a template written for it in the class library that performs the translations of specific classes and data types. See Templates.

If you use a function in a method, and the compiler generates an, “implicit declaration,” warning, you can include the library function’s prototype in either the source file or in classes/ctalklib.

Cautions when using Array class elements in C expressions.

If you want to use an Array element in a C expression, you need to take care that the value of the element translates to a void *, which is the C type that Ctalk returns the values of these elements as.

That means elements of class LongInteger might be truncated, and Float class array elements cannot be translated in this manner.

If array elements of these classes occur in C expressions, Ctalk prints a warning at run time.

In these cases, it is necessary to convert the values to a compatible pointer type, for example an object of class String.


Next: , Previous: , Up: Methods   [Index]

Method keywords

Method Keywords

__c_arg__

Treat the next method argument as a C argument. See Method functions.

classMethod

The classMethod keyword declares a method, as described above.

classVariable

Adds a class variable definition to a class. This method needs to be used globally, when a class is declared. The syntax is:

parent_class classVariable name [native_class|typecast_expr] [initial_value] [docstring] ;

For example:


FileStream class ReadFileStream;

...

ReadFileStream classVariable stdinStream Symbol 0x0;

The value of initial_value can be either a constant or an expression that evaluates to a constant.

Ctalk can also translate a typecast into a native class for the variable. Also refer to the entry for instanceVariable, below. See InstanceVariableKeyword.

Similarly, the docString element is also optional. See VariableDocStrings.

eval

Do not try to evaluate the following statement until run time. Methods can use this keyword if they need to wait until run time to determine an receiver’s class and are not able to alias the object or otherwise inform the front end of the receiver’s class before the program is run.

instanceMethod

The instanceMethod keyword declares a method, as described above.

instanceVariable

Adds an instance variable definition to a class. This method needs be used when the class is declared. The syntax is:

parent_class instanceVariable name [native_class|typecast_expr] [initial_value] [docString] ;

For example:

FileStream class ReadFileStream;
ReadFileStream instanceVariable pos LongInteger 0L;

The value of initial_value can be either a constant or an expression that evaluates to a constant.

You can also use a typecast in place of the variable’s native_class. Ctalk can translate most builtin C types or typedefs to a class, but for less common data types, Ctalk will translate a pointer to the type as a Symbol object.

Similarly, the docString element is also optional. See VariableDocStrings.

Note that the instanceVariable method does not create any variables. Ctalk only creates instance variables for each object when it receives a constructor message (e.g., new) by a program.

noMethodInit

Do not include method initialization code for the method. See Method functions.

require

Require a class to be loaded before any other classes or methods.

returnObjectClass

Set the return class of a method to the argument if it is different than the receiver class. See Return values.

self

Return the method’s receiver object. In version 0.66 2021-02-02, you can also use self in arguments as a synonym for the receiver of the statement, as in this example.

String new path;
path = "/home/user/joe";

printf ("%s", path subString 1, self length - 1);

The use of self in method arguments is experimental in version 0.66 2021-02-02, and it should be used with caution.

super

The keyword super has two different meanings. It can modify a method, as in the following example.

MyReceiverClass super new instanceObject;

super can also represent the receiver’s superclass object, so it can appear as a receiver, as in this example.

return super new checksum;

Next: , Previous: , Up: Methods   [Index]

Documentation

Documenting Methods, Classes, and Variables

Ctalk allows you to add publicly visible comments to methods, classes, and instance and class variables. These comments are different than comments within the code that may have meaning only for specific routines

If you want to add documentation for a class, Ctalk allows documentation string is class declarations (see below). See ClassDocStrings.

You can also document instance and class variables. See VariableDocStrings.

When documenting methods, Ctalk recognizes both C-style comments and C++ comments.

In addition, Ctalk recognizes a character string at the beginning of a method or function as a public documentation string, and it adds a few rules for comments and documentation strings that make it easier to describe methods when browsing the class library.

Basically, if the method contains a comment or documentation string at the start of a method or function body, then that style of comment is used as the method’s public documentation when it is referenced by other programs.


MyClass instanceMethod myMethod (Object myArg) {
  /* Using a C-style comment at the start of a method body,
     or a series of C-style comments, makes those comments 
     available as the method's public documentation. */
  /* The public documentation can span several comments if the
     comments appear before any lines of source code. */

     Method body...
 

  /* That allows you to add (perhaps temporary) comments elsewhere
     in the method that do not appear as part of the method's
     public documentation. */

     More lines of code...

}

MyClass instanceMethod myMethod (Object myArg) {
  // A series of C++ comments before the first line of
  // code also can appear as the method's public 
  // documentation.

     Method body...

  /* A different style of comment anywhere else within
     the method does not appear in the method's public
     documentation. */
}

MyClass instanceMethod myMethod (Object myArg) {
  "A character string at the start of the method also gets
   interpreted as a public documentation string."

   Method body...
}

The Ctalk libraries contain several methods that can be useful when printing documentation. Particularly, the method methods (in Object class) and methodSource (in Application class) can retrieve the names of the methods in a class and their source code, and the method tokenize (in String class) can split the source code into tokens, which you can then process.

Here’s a simple application that retrieves a method’s source code and splits it into tokens.


int main () {

  Application new app;
  String new methodStr;
  List new tokens;
  
  /* The first argument to methodSource is the class name, and
     the second argument is the method name. */
  methodStr = app methodSource "Application", "methodSource";

  methodStr tokenize tokens;

  tokens map {
    printf ("%s ", self);  /* This example simply prints the method's
                              tokens, but you can perform any processing
                              or formatting that you want here. */
  }
  printf ("\n");
}

If you want only the prototype of the method; that is, the declaration and the argument list, feed the output of methodSource to methodPrototypes, which is also in class Application. The methodPrototypes method takes a string with the source code of a method or methods as input, which means you can also extract all of the prototypes of a class library.


int main () {

  Application new app;
  String new src;
  String new prototypes;

  src = app methodSource "Object", "basicNew";

  prototypes = app methodPrototypes src;

  printf ("%s\n", prototypes);

}

There are a few caveats:

The methods method is designed to be quick, so it only finds methods whose declaration appears on one line. If you prefer method declarations spread over several lines, you can read the entire class file using readAll (class ReadFileStream). See ReadFileStream. Then you can tokenize the entire class file at once, which disregards any line formatting, although tokenizing an entire file takes considerably longer.

Also, The methodPrototypes method does not do any special formatting; it simply collects the prototypes into one String object.

Class Documentation

Ctalk also allows you add documentation to class declarations. The declaration syntax allows you to add an option character string between the class name and the closing semicolon. The syntax of a class documentation is the following.


superclassname class classname <docstring>;

For example, here is the class declaration of WriteFileStream which contains a documentation string.


FileStream class WriteFileStream   "Defines the methods and instance 
variables that write data to files. Also defines the class variables 
stdoutStream and stderrStream, which are the object representation 
of the standard output and standard error streams.";

The classdoc program can print the documentation string of a class if it provides one. The classdoc(1) manual page provides more information.

Instance and Class Variable Documentation

You can add an optional documentation string to an instance or class variable’s declaration by enclosing the text within quotes immediately before the final semicolon.


WriteFileStream classVariable stdoutStream
"Defines an object that contains the value of the system's standard output";

The main thing to watch out for is, syntactically, a documentation string could be mistaken for a variable’s initial value if one isn’t included in the definition. For example, this definition uses a character string as its initial value.


ObjectInspector instanceVariable promptString String "> ";

So in this case, if you wanted to add a documentation string, you would also need to include an initial value, otherwise the documentation string would be mistaken for the variable’s value.


                                                      /* Incorrect! */
ObjectInspector instanceVariable promptString String      
"The string that is displayed as the object inspector's   
prompt";

Instead, you need to add both an an initial value, and the documentation string.


                                                           /* Correct. */
ObjectInspector instanceVariable promptString String "> "
"The string that is displayed as the object inspector's
prompt";


Previous: , Up: Methods   [Index]

Ctalk library

Ctalk Library Reference

This section describes some of the Ctalk library functions that you can use in methods and, in many cases, in Ctalk programs generally.

The file classes/ctalklib contains the prototypes of the library functions.

__argvName (char *s)

Set the name of the program at run time. Normally this is the same as argv[0].

__argvFileName (void)

Returns the name of the executable program.

__arg_trace (int stack_index)

Prints the object at argument stack index stack_index.

__ctalkAddClassVariable (OBJECT *class_object, char *name, OBJECT *variable_object)

Add a class variable variable_objectto class_object.

__ctalkAddInstanceVariable (OBJECT *object, char *name, OBJECT *variable_object)

Add an instance variable to an object. Note that the function adds a copy of variable_object to object.

__ctalkAliasObject (OBJECT *rcvr, OBJECT * target)

Set the rcvr object’s label to the target object, so the target object can be referred to by the rcvr object’s identifier. This function does not require rcvr to be the actual receiver of the method, so the results can be unpredictable if it is used in a context other than where self is the first argument. To insure that rcvr is the actual receiver of the calling method, use __ctalkAliasReceiver (), below.

__ctalkAliasReceiver (OBJECT *rcvr, OBJECT * target)

Like __ctalkAliasObject (), above, but the function checks that rcvr is the actual receiver of the calling method and returns ERROR (‘-1’) if it isn’t. Here is an example.


String instanceMethod = setEqual (OBJECT *__stringArg) {
  // String assignment method. Assigns the argument  to the
  // receiver label.  Also does some String-specific
  // semantic stuff for different sorts of String objects.
  // Returns the new String object.

  __ctalkStringifyName (self, __stringArg);
  if (__ctalkAliasReceiver (self, __stringArg) != 0) {
    __ctalkAddInstanceVariable (self, "value", __stringArg);
    return self;
  } else {
    return __stringArg;
  }
}

__ctalkANSIClearPaneLine (OBJECT *paneObject, int lineNumber)

Clear (to spaces) the pane line at lineNumber.

__ctalkANSITerminalPaneMapWindow (Object *childPane)

Map childPane onto the receiver pane. The child pane’s upper left-hand corner origin is relative to the receiver pane’s origin. The receiver pane should be large enough to completely enclose the child pane. The child pane is displayed at the next refresh message.

__ctalkANSITerminalPaneUnmapWindow (Object *childPane)

Removes the pane given as the argument from the receiver pane.

__ctalkANSITerminalPanePutChar (int x, int y, char c)

Store character c at coordinates x,y in the pane’s content region. The character will be displayed after the next refresh message.

__ctalkANSITerminalPaneRefresh (void)

Display the contents of ANSITerminalPane objects on the display, including text and window decorations if any.

__ctalkANSITerminalPaneUnMapWindow (Object childPane)

Unmap childPane from the receiver pane’s visible area. The child pane is not deleted; it is simply not displayed at the next refresh message.

__ctalkARB (void)

Returns a boolean value of true if the GLEW libraries support the GLEW_ARB_vertex_shader and GLEW_ARB_fragment_shader extensions. Programs must call the __ctalkInitGLEW function before using this function.

__ctalkArgBlkReturnVal (void)

Called by the calling function of an argument block to retrieve the block’s return value, if any.

__ctalkArgBlkSetCallerReturn (void)

Called by a map method to indicate to a calling method or function that an argument block has requested a return from the function or method that called it. Map-type methods for general use should include a call to this function, which provides argument block support for return statements. Refer to __ctalkRegisterArgBlkReturn, below, and the String : map method for an example of these functions’ use.

__ctalkArrayElementToCCharPtr (OBJECT *array_element)
__ctalkArrayElementToCChar (OBJECT *array_element)
__ctalkArrayElementToCDouble (OBJECT *array_element)
__ctalkArrayElementToCInt (OBJECT *array_element)
__ctalkArrayElementToCLongLongInt (OBJECT *array_element)
__ctalkArrayElementToCPtr (OBJECT *array_element)

Translates the object array_element’s value to a C char *, char, double, int, long long int, or void *.

__ctalkBackgroundMethodObjectMessage (OBJECT *rcvr, OBJECT *method_instance)

Perform a method call by sending rcvr the message defined by method_instance, which is a previously defined Method object. See Method.

The function starts method_instance as a separate process, which runs concurrently with the process that launched it. The background process exits when method_instance returns.

The method instance argument is a normal method. However, __ctalkBackgroundMethodObjectMessage does not save the return object before method_instance exits, and method_instance, does not take any arguments.

The function returns the PID of the child process, or ‘-1’ on error.

This function is used by the method backgroundMethodObjectMessage (class Object). Refer to the description of the method for more information. See Object.

For examples of method instance calls, See methodObjectMessage.

__ctalkBackgroundMethodObjectMessage2Args (OBJECT *rcvr, OBJECT *method_instance, OBJECT *arg1, OBJECT *arg2)

This function combines a background method instance call with two arguments. Its function is similar to __ctalkMethodObjectMessage, below.

For examples of method instance calls, See methodObjectMessage.

__ctalkCallMethodFn (METHOD *method)

Used internally to perform a method call.

__ctalkCallingFnObjectBecome (OBJECT *old, OBJECT *new)

Used by Object : become to translate the receiver when become is called within a function.

__ctalkCallingInstanceVarBecome (OBJECT *old, OBJECT *new)

Used by Object : become to translate the receiver when the receiver is an instance variable.

__ctalkCallingMethodObjectBecome (OBJECT *old, OBJECT *new)

Used by Object : become to translate the receiver when become's receiver is an object declared in another method.

__ctalkCallingReceiverBecome (OBJECT *old, OBJECT *new)

Used by Object : become to translate the receiver when become's receiver also the receiver of the method that calls become.

__ctalkCBoolToObj (bool b)

Create a Boolean object with the boolean (either true or false) value of the argument.

__ctalkCCharPtrToObj (char *s)

Create a String object from a C char *.

__ctalkConsoleReadLine (OBJECT *string_object, char *prompt_string)

Prints the prompt prompt_string to standard output of a terminal, then reads a line of text from the standard input, until it encounters a newline, and saves it as the value of string_object.

If Ctalk is built with support for the GNU readline libraries, the function provides the readline libraries’ command line editing and history facilities. Otherwise, the function reads input up to a newline using only the basic text input and editing facilities provided by the stdio functions.

__ctalkCreateArg (OBJECT *receiver, char *methodname, char *arg_expr)

Create an argument for the following __ctalk_method or __ctalk_primitive_method function call. Unlike __ctalk_arg, this function always creates a new object. Its primary use is to create local method objects that are fully instantiated into a class by a following new method.

__ctalkCreateArgA (OBJECT *receiver, char *methodname, char *arg_expr)

Like __ctalkCreateArg, creates local method objects that are instantiated into a class by a following new method. The __ctalkCreateArgA () function is more specialized so it can be used when performing method cache fixups.

__ctalkCDoubleToObj (doubled)

Create a Float object from a C float or double.

__ctalkCharRadixToChar (char *s)

Return the character as a C char that is represented by the formatted argument.

If s contains a number of more than one digit, then it is converted from an integer to the ASCII code of a character.

__ctalkCharRadixToCharASCII (char *s)

Return a C string with a lexically correct character - a character enclosed in single quotes - from the formatted argument. If s is already a character, then no conversion is done.

If s contains a decimal number of more than one digit, then it is converted from a decimal integer to a character.

__ctalkCFUNCReturnClass (CFUNC *fn, char *buf)

Return in buf the name of the class that corresponds to fn’s return type.

__ctalkCIntToObj (int i)

Create an Integer object from a C int.

__ctalkCLongLongToObj (long long int l)

Create a LongInteger object from a C long long int.

__ctalkClassMethodInitReturnClass (char *rcvr_class, char *method_name, char *return_class);

Set the return class of method in rcvr_class to return_class.

__ctalkClassMethodParam (char *rcvrclassname, char *methodname, OBJECT *(*selector_fn)(), char *paramclass, char *paramname, int param_is_pointer)

Define a method parameter when initializing a class method. Normally the compiler generates this call for inclusion in __ctalk_init () for the method initialization at run time.

__ctalkClassObject (OBJECT *object)

Returns the class object of the argument.

__ctalkClassVariableObject (OBJECT *var)

Return the object that var is a class variable of, or NULL.

__ctalkFree (void *p)

This is an API wrapper for Ctalk’s memory free routines. Much of the old code in the class libraries still uses __xfree () (which now gets macroized to __ctalkFree () anyway), but you should use __ctalkFree () in new class libraries.

In cases where you prefer to call __xfree () directly, then you need to use the MEMADDR macro to cast the argument to a void **, i.e.,


  char *my_buf;

  ... do stuff ...

  __xfree (MEMADDR(my_buf));

which is what __ctalkFree () does automagically.

__ctalkLocalTime (long int utctime, int *seconds_return, int *minutes_return, int *hours_return, int *dom_return, int *mon_return, int *years_return, int *dow_return, int *doy_return, int *have_dst_return)

Returns the system’s local time in the arguments that return the current second, minute, hour, day of the month, month, year, day of the week, day of the year, and (T/F) whether the time uses daylight savings time.

The first argument is the system’s UTC time, as returned by the time () library function.

__ctalkCloseGLXPane (OBJECT *pane_object)

Releases the pane’s GLX context and the context’s XVisualInfo struct, and deletes the pane_object’s X11 window.

__ctalkCloseX11Pane (OBJECT *pane_object)

Deletes and closes subpanes of a main X11 window.

__ctalkCopyPaneStreams (OBJECT *src, OBJECT *dest)

Copy the src inputHandle and outputHandle values to dest.

__ctalkCopyCVariable (CVAR *c)

Return a CVAR * to a copy of the argument.

__ctalkCopyObject (OBJREF_T src, OBJREF_T dest)

Return an OBJECT * to a copy of the argument.

Note: When copying normal objects, you can translate them to OBJREF_T types with the OBJREF macro. When copying method arguments, it is necessary to alias the argument to an object. See at (class Array) and atPut (class AssociativeArray) for examples.

__ctalkCreateArgEntry (void)

Used internally to create an ARG type, which maintains a method’s argument entries.

__ctalkCreateArgEntryInit (OBJECT *obj)

Creates an internal method argument entry and initializes the entry to the argument object.

__ctalkDeleteArgEntry (ARG *arg)

Delete a method ARG entry.

__ctalkCreateObject (char *name, char *class, char *superclass, int scope)

Create an object without instance variables with name name of class class and superclass superclass with scope scope.

__ctalkCreateObjectInit (char *name, char *class, char *superclass, int scope, char *value)

Create an object with name name of class class and superclass superclass with scope scope and value value.

For more information about how to use __ctalkCreateObjectInit, refer to the examples in See Scoping, and other examples in this manual.

__ctalkCreateWinBuffer (int x_size, int y_size, int cell_size)

Create a buffer for a Pane object’s window.

__ctalkCreateGLXMainWindow (OBJECT * pane_object)

Normally called by the initialize method in class GLXCanvasPane, creates a X11 window with a GLX visual. The visual’s default attributes are: ‘GLX_RGBA’, ‘GLX_DEPTH_SIZE’, 24 bits per pixel, and ‘GLX_DOUBLEBUFFER’. These attributes are adjustable via the instance variables in GLXCanvasPane class.

The self_object argument must be an instance of GLXCanvasPane class. This function fills in the object’s visualInfoPtr instance variable with a pointer to the XVisualInfo structure specified by self_object. See GLXCanvasPane.

Called by the initialize methods (class X11Pane) to create a X window. Returns the window system’s ID for the window, an int.

If a program doesn’t specify a window size, then default size is 250x250 pixels. If the program doesn’t specify a location for the window, then this function sets the window’s X,Y origin to 0, although the actual window placement depends on the machine’s window manager. See ctalkX11SetSizeHints.

Application programs can provide a window geometry specification which is used to set the window’s size and placement See parseX11Geometry.

If x11pane_object contains a background or backgroundColor instance variable or resource, the function sets the window’s background color to the X11 color named in that value.

If a program doesn’t specify a foreground and background color, the window’s background is set to white and the foreground is set to black.

Refer also to the __ctalkCreateX11MainWindowTitle and __ctalkCreanteX11SubWindow functions. See X11Pane.

char *title) Similar to __ctalkCreateX11MainWindow, except that if title is non-null, the function uses it to set the new window’s title. Returns the X resource ID of the new window, an int. See X11Pane.

Creates an X subwindow that has the parent window defined by parentpane_object’s xWindowID instance variable. The dimensions of the subwindow within the parent window are determined by the subpane_object’s origin and size instance variables. Creates a new graphics context for the window and saves its address in the subpane_object’s xGC instance variable.

If x11pane_object contains a background or backgroundColor instance variable or resource, the function sets the window’s background color to the X11 color named in that value.

If a program doesn’t specify a foreground and background color, the window’s background is set to white and the foreground is set to black.

Then the function initiazes and clears the window to the value of the backgroundColor instance variable. Otherwise, the function sets the window’s color to black and clears the window.

Also sets the display depth in the depth instance variable, and the ID of the subwindow in the xWindowID instance variable.

__ctalkCriticalExceptionInternal (MESSAGE *orig, EXCEPTION ex, char *text)

Raise a critical exception at run time. The argument orig should be NULL. This function should be called from a method. This function saves a snapshot of the calling method’s run-time context.

For an example, see raiseCriticalException (class SysErrnoException) in the Ctalk class library, which calls __ctalkCriticalSysErrExceptionInternal, below.

__ctalkCriticalSysErrExceptionInternal (MESSAGE *orig, int errno, char *text)

A convenience function that calls __ctalkCriticalExceptionInternal with the Ctalk exception that corresponds to errno, the C library’s error macro.

__ctalkCVARReturnClass (CVAR *var, char *buf)

Return in buf the name of the class that corresponds to var’s data type.

__ctalkDecimalIntegerToChar C function

__ctalkDecimalIntegerToChar (int n, char *buf)

Formats the ASCII 8-bit character representation of n as the first character in buf, and returns ‘(char)n’ as its return value. If n is greater than 255 (0xff hex), returns the formatted character ‘(char)(n & 255)’.

__ctalkDecimalIntegerToASCII (int i, char *s);

Format an ASCII representation of i, a decimal integer, in s.

__ctalkLongLongToDecimalASCII (long long int l, char *buf);
__ctalkLongLongToHexASCII (long long int l, char *buf, bool uppercase);
__ctalkLongToDecimalASCII (long int l, char *buf);
__ctalkLongToHexASCII (long int l, char *buf, bool uppercase);

Format a decimal or hexadecimal ASCII representation of l, a long long int, in buf, and return buf.

When using __ctalkLongLongToHexASCII, or __ctalkLongToHexASCII, if uppercase is true, format the number using uppercase letters; e.g., ‘0XFFFF’; otherwise format the number using lowercase letters: ‘0xffff’.

__ctalkDefaultSignalHandler (int signo)

Set the handler of signal signo to the system’s default handler.

__ctalkDefineClassMethod (char *class, char *name, OBJECT *(*)(fn), int required_args);

Define a class method in class class with name name, which calls the function fn, and requires required_args arguments.

__ctalkDefineClassVariable (char *class, char *name, char *varclass, char *init_expr);

Define a class variable in class class with name. The variable is an object of class varclass with the initial value init_expr.

__ctalkDefineInstanceMethod (char *class, char *name, OBJECT *(*)(fn), int required_args);

Define an instance method in class class with name name, which calls the function fn, and requires required_args arguments.

__ctalkDefineInstanceVariable (char *class, char *name, char *varclass, char *init_expr);

Define an instance variable in class class with name. The variable is an object of class varclass with the initial value init_expr.

__ctalkDefinedClassMethodObject (OBJECT *rcvr, char *classname, char *method_name)

Initialize a Method object from the class method method_name from class classname. Note that this function only works for methods that are already defined. See Method.

__ctalkDefinedInstanceMethodObject (OBJECT *rcvr, char *classname, char *method_name)

Initialize a Method object from the instance method method_name from class classname. Note that this function only works for methods that are already defined. See Method.

__ctalkDefineTemplateMethod (char *classname, char *name, OBJECT *(*cfunc)(), int required_args, int n_args)

Defines a template method. First calls __ctalkDefineClassMethod (), then performs additional initialization needed for templates.

__ctalkDeleteLastExceptionInternal (void)

Deletes the most recent exception from Ctalk’s internal exception list.

__ctalkDeleteObject (OBJECT *object)

Delete an object, and any objects it refers to, if they are not referenced elsewhere. It’s a good idea to call __objRefCntZero first. The object then won’t be showing any extra references.

Zeroing the reference count first causes the function to delete the object completely. It bypasses Ctalk’s internal mechanisms that decide when objects are no longer needed. Don’t use these functions unless you know where the object and any objects it refers to are declared.

It should seldom be necessary to remove an object from a particular scope manually anyway. But in that case, call __objRefCntDec instead, and then let Ctalk try to clean up the object when it goes out of scope.

For example, to delete a scratch object using C,


Object new tmpObject;
OBJECT *tmpObject_alias;

tmpObject_alias = tmpObject;

__objRefCntZero (OBJREF(tmpObject_alias));
__ctalkDeleteObject(tmpObject_alias);

Translating the object to C should work in all cases, regardless of the surrounding code. Of course, you can also use the delete method (class Object) with many simple C expressions.


Object tmpObject;
OBJECT *tmpObject_alias;

tmpObject delete;

..or..

tmpObject_alias delete;

..or even this expression..

tmpObject_alias -> instancevars delete;

Deletes obj if there are no references to it, or if this is the last reference to the object. In this case, the function works similarly to __ctalkDeleteObject. Otherwise, the function decreases the object’s reference count by 1.

__ctalkDeleteObjectList (OBJECT *object)

Delete an object and any objects that link to it.

__ctalkDeleteWinBuffer (OBJECT *paneBuffer_instance_var)

Deletes a paneBuffer backing store allocated when a subclass of Pane creates an object.

__ctalkDocDir (void)

Returns a char * that contains the path where the Ctalk-specific documentation is installed on the system (i.e., documentation other than man pages and Texinfo manuals).

__ctalkDoubleToASCII (double d, char *s);
__ctalkFloatToASCII (float f, char *s);
__ctalkLongDoubleToASCII (long double f, char *s);

Format an ASCII representation of the first argument in s. Returns s.

__ctalkEnterArgBlockScope C function

__ctalkEnterArgBlockScope (void)

Ctalk inserts this call at the beginning of argument blocks. Checks that the block call is the result of an inline method call and sets the run-time stack’s RTINFO structure to indicate a block call with the correct stack frame for the block’s scope.

__ctalkEntryIconXPM C function

__ctalkEntryIconXPM (int iconID)

Returns a char ** with the contents of an eye or slashed eye icon used when X11TextEntryPane objects echo dots. The argument, iconID, may be one of the following.


#define ENTRY_ICON_EYE_NON       0
#define ENTRY_ICON_EYE_OK        1
#define ENTRY_ICON_EYE_SLASHED   2

The definitions are included in x11defs.h and ctalkdefs.h, which should be included in classes or programs with a statement like this.


#include <ctalk/ctalkdefs.h>

__ctalkExec C function

__ctalkExec(char *cmdline, OBJECT *strObject)

Executes the command line given as the argument and waits for the subprocess to finish. If the strObject argument is non-NULL, the function saves the subprocesses’ standard output as the object’s value. Normally, strObject should be a String object.

If the strObject argument is NULL, __ctalkExec reads and prints the subprogram’s standard output to the terminal’s standard output.

__ctalkExec supports the redirection operators ‘>’ or ‘>>’, which send the subprocess’s standard output to the file given as the redirection operator’s target. If cmdLine is a shell script, it is executed by a sub-shell using the system(3) library function.

__ctalkExitArgBlockScope C function

__ctalkExitArgBlockScope (void)

Ctalk inserts this function, which is currenly a no-op, as the last function call in an argument block.

__ctalkExpandPath C function

__ctalkEpandPath (char *dirGlobPattern, char *expandedPathOut)

Expands dirGlobPattern into the full path name, and stores it in expanedPathOut. Returns the value of expandedPathOut.

__ctalkErrorExit (void)

Cleans up the program’s immediate object environment before a call to the C exit(3) function.

__ctalkEvalExpr (char *expr)

Evaluate expr and return an OBJECT * to the result.

__ctalkEvalExprU (char *expr)

Like __ctalkEvalExpr, above, but __ctalkEvalExprU returns a C NULL instead of a null result object when an expression evaluates to 0.

__ctalkExceptionInternal (MESSAGE *msg, EXCEPTION e, char *text)

Generate an exception of type e. Exceptions are listed in except.h, and in the description of Exception class. See Exception. If msg is non-NULL, which is usually the case when the compiler generates and exception, the function records the line and column number of the exception. If text is non-NULL, the exception handler adds the text to the exception record, so it can be displayed when the program handles the exception.

Programs should handle run-time exceptions as soon as possible after returning from a method. The function __ctalkHandleRunTimeExceptionInternal is the normal exception handler, and __ctalkTrapExceptionInternal determines whether an exception has occurred.

__ctalkFindClassVariable (char *varname, int warn)

Search the class library for first occurrence of the class variable varname.

If warn is TRUE, issues a warning if the variable is not found.

__ctalkFindMethodByName C function

__ctalkFindMethodByName (OBJECT **object, const char *name, int warn)

Returns the first instance or class method name if it exists in object’s class or superclasses, or NULL if a method with that name isn’t found. If warn is true, prints a warning message if the method isn’t found.

__ctalkFindPrefixMethodByName (OBJECT **rcvr, const char *name, int warn)

Looks up a classes’ instance method that matches name which has the prefix attribute set. If warn is true, prints a warning if the method is not found.

__ctalkExceptionNotifyInternal (I_EXCEPTION *i)

The handler function of most exceptions. Prints a message including any text provided as an argument to __ctalkExceptionInternal.

__ctalkFilePtrFromStr (char *sformatted_ptr)

Like __ctalkGenericPtrFromStr (), below, converts a string containing a formatted hexadecimal number to a pointer, and also checks that the pointer is a valid file.

The function returns a void * in order to keep Ctalk’s header inclusion simple, or NULL if the argument does not contain a valid hexadecimal number, or if the pointer does not point to a valid file.

This function can also set errno in case of an error.

Because the function returns a void * an app or method must perform the cast from void * to File * when it calls this function.

__ctalkFindClassMethodByFn (OBJECT **rcvr_p, OBJECT *(*fn)(), int warn)

Finds a class method by calling __ctalkGetClassMethodByFn for the method’s receiver and then the receivers of previous method calls. On success, returns the method, and rcvr_p contains the address of the method’s receiver.

If warn is TRUE, issues a warning if the method is not found.

__ctalkFindClassMethodByName (OBJECT **rcvr_p, char *name, int warn)

Finds a class method by by calling __ctalkGetClassMethodByName for the method’s receiver and then the receivers of previous method calls. On success, returns the method, and rcvr_p contains the address of the method’s receiver.

If warn is TRUE, issues a warning if the method is not found.

__ctalkFindInstanceMethodByFn (OBJECT **rcvr_p, char *name, int warn)

Finds an instance method by calling __ctalkGetInstanceMethodByFn for the method’s receiver and then the receivers of previous method calls. On success, returns the method, and rcvr_p contains the address of the method’s receiver.

If warn is TRUE, issues a warning if the method is not found.

__ctalkFindInstanceMethodByName (OBJECT **rcvr_p, char *name, int warn)

Finds an instance method by by calling __ctalkGetInstanceMethodByName for the method’s receiver and then the receivers of previous method calls. On success, returns the method, and rcvr_p contains the address of the method’s receiver.

If warn is TRUE, issues a warning if the method is not found.

__ctalkSaveCVARArrayResource (char *name, int initializer_size, void *var)

Saves an Array object with the contents of var in a method’s object pool.

__ctalkSaveCVARResource (char *name)

Saves the contents of C variable name in a method’s object pool.

__ctalkSaveOBJECTMemberResource (OBJECT *object)

Saves an OBJECT * member to a method’s resource pool.

__ctalkSleep (int usecs)

Put a program to sleep for usecs microseconds. The operating system restores the program to a running state no sooner than that amount of time has elapsed.

__ctalkSort (OBJECT *collection, bool sortdescending)
__ctalkSortByName (OBJECT *collection, bool sortdescending)

Sorts a collection’s members into ascending or descending order. __ctalkSort performs the sort using the collection members’ values, while __ctalkSortByName uses the members’ names.

The algorithm used is very simple minded, although due to the mechanics of finding earlier/later collection members, it is as fast as divide-and-conquer algorithms for small or medium sized collections. For large collections it is probably more practical to sort the collection as an OBJECT ** array and create a new list based on the collection members’ sorted order.

However, it is almost always faster to add members to collections in the order you want them sorted rather than trying to re-arrange the collection later. For this, refer to the methods in the SortedList class See SortedList.

__ctalkStrToPtr (char *ptr)

Converts a formatted hexadecimal number to a void *. The function __ctalkGenericPtrFromStr, below, performs some extra validation.

__ctalkGenericPtrFromStr (char *s)

A wrapper function for __ctalkStrToPtr () that performs some extra validation of the string argument. These functions convert a string containing a formatted hexadecimal number (e.g., "0xnnnnnn" or “"0XNNNNNN" into a void *. Both of the functions return a void *, or NULL if the string does not contain a valid hexadecimal number.

__ctalkGetCallingFnObject (char *name, char *classname)

When used within Object : become, returns the object with the name name in the class classname from become's calling function. Also adjusts its caller indexes if become is called within an argument block.

__ctalkGetCallingMethodObject (char *name, char *classname)

When used within Object : become, returns the object with the name name in the class classname from become's calling method. Also adjusts its caller indexes if become is called within an argument block.

__ctalkGetCArg (OBJECT *obj)

Retrieves the CVAR of the C variable named by obj.

__ctalkGetInstanceMethodByFn (OBJECT *class_object, OBJECT *(*fn)(void), int warn)

Returns the method that defines function fn from class_object, or NULL if the method doesn’t exist. If warn is true, prints a warning message if the method isn’t found.

__ctalkGetInstanceMethodByName (OBJECT *class_object, const char *name, int warn)

Returns the method named name from class_object, or NULL if the class doesn’t define a method with that name. If warn is true, prints a warning message if the method isn’t found.

__ctalkGetReceiverPtr (void)

Returns an int with the current value of the receiver stack pointer.

__ctalkGetRS (void)

Returns a char with the current record separator. The record separator determines, among other uses, how regular expression characters act at line endings. See RecordSeparator.

__ctalkGetRunTimeException (void)

Remove the first exception from the exception queue and return the exception’s message as a char *.

__ctalkGetTemplateCallerCVAR (char * name)

If called from within a function template, looks up the CVAR name in the calling function or method. This function returns a temporary object with the name and class, superclass, and value that correspond to the CVAR’s data type. The return object persists until the next time this function is called.

__ctalkGetClass (char * classname)

Get the class object for classname.

__ctalkGetClassMethodByFn (OBJECT *rcvr, OBJECT *(*fn)(void), int warn)

Return a class method of rcvr’s class with the run-time function fn.

If warn is TRUE, issue a warning if the method is not found.

__ctalkGetClassMethodByName (OBJECT *rcvr, char *name, int warn)

Return a class method of rcvr’s class with the name name.

If warn is TRUE, issue a warning if the method is not found.

__ctalkGetExprParserAt (int idx)

Return the expression parser, which is a struct ‘EXPR_PARSER’ typedef, at stack index idx.

__ctalkGetExprParserPtr (void)

Return the expression parser pointer, and int.

__ctalkGetClassVariable (OBJECT *receiver, char *varname, int)

warn) Return the class variable named varname from the receiver’s class object, or NULL if the variable does not exist. If warn is TRUE, issue a warning message if the variable is not found.

__ctalkGetExceptionTrace (void)

Return TRUE if a program has enabled exception walkbacks, FALSE otherwise.

__ctalkGetInstanceVariable (OBJECT *receiver, char *varname, int)

warn) Return the instance variable named varname from the receiver, or NULL if the variable does not exist. If warn is TRUE, issue a warning message if the variable is not found.

__ctalkGetInstanceVariableByName (char *receiver_name, char *varname, int)

warn) Return the instance variable named varname from the object named by receiver_name, or NULL if the variable does not exist. If warn is TRUE, issue a warning message if the variable is not found.

__ctalkGetPrefixMethodByName (OBJECT *class_object, const char *name, int warn)

Returns the method named name from class_object that has the prefix attribute set, or NULL if the class doesn’t define a prefix method with that name. If warn is true, prints a warning message if the method isn’t found.

__ctalkGetTypeDef (char * name)

Return the CVAR of the typedef name.

__ctalkGetX11KeySym (int keycode, int shift_state, int keypress)

Returns an int with the keyboard mapping of a keypress in X applications. This allows programs to distinguish between modifier keypresses (e.g., shift, control, and alt), and alphanumeric keypresses.

The first and second parameters are taken from an XKeyPressEvent or XKeyReleaseEvent structure. The third parameter, keypress, should be true for Keypress events and false for keyrelease events.

For alphanumeric keys, this function does not automatically modify the ASCII code of a key that is pressed when the shift key (or any other modifier key) is pressed. That is, pressing ‘A’ and ‘a’ both return the ASCII value 97. It is up to the program to record whether the shift key is pressed at the same time, and to provide the shifted character itself if necessary.

Refer to the run method in GLXCanvasPane class for an example.

This function uses XGetKeyboardMapping(3) internally.

__ctalkGLEW20 (void)

Returns a boolean value of true if the GLEW library supports version 2.0 extensions, mainly for OpenGL programs that use shaders. Programs must call the __ctalkInitGLEW function before using this function.

__ctalkGlobalObjectBecome (OBJECT *old, OBJECT *new)

Called when the receiver of Object : become is a global object.

__ctalkGlobFiles (char *pattern, OBJECT *list)

If the system’s C libraries support file globbing with the glob library function, __ctalkGlobFiles returns the file and directory pathnames that match pattern in the List object given as the list argument.

For information about how the C library matches file patterns, refer to the glob(3) and related manual pages.

__ctalkGLUTVersion (void)
__ctalkGLUTCreateMainWindow (char *title)
__ctalkGLUTInitWindowGeometry (int x, int y, int width, int height)
__ctalkGLUTInit (int argc, char **argv)
__ctalkGLUTRun (void)
__ctalkGLUTInstallDisplayFn (void (*fn)())
__ctalkGLUTInstallReshapeFn (void (*fn)(int, int))
__ctalkGLUTInstallIdleFn (void (*fn)())
__ctalkGLUTInstallOverlayDisplayFunc (void (*fn)())
__ctalkGLUTInstallKeyboardFunc (void (*fn)(unsigned char, int, int))
__ctalkGLUTInstallMouseFunc (void (*fn)(int, int, int, int))
__ctalkGLUTInstallMotionFunc (void (*fn)(int, int))
__ctalkGLUTInstallPassiveMotionFunc (void (*fn)(int, int))
__ctalkGLUTInstallVisibilityFunc (void (*fn)(int))
__ctalkGLUTInstallEntryFunc (void (*fn)(int))
__ctalkGLUTInstallSpecialFunc (void (*fn)(int, int, int))
__ctalkGLUTInstallSpaceballMotionFunc (void (*fn)(int, int, int))
__ctalkGLUTInstallSpaceballRotateFunc (void (*fn)(int, int, int))
__ctalkGLUTInstallSpaceballButtonFunc (void (*fn)(int, int))
__ctalkGLUTInstallButtonBoxFunc (void (*fn)(int, int))
__ctalkGLUTInstallDialsFunc (void (*fn)(int, int))
__ctalkGLUTInstallTabletMotionFunc (void (*fn)(int, int, int, int))
__ctalkGLUTInstallMenuStatusFunc (void (*fn)(int, int, int))
__ctalkGLUTInstallMenuStateFunc (void (*fn)(int))
__ctalkGLUTInstallMenuStateFunc (void (*fn)(int))
__ctalkGLUTSphere (double, int, int, int);
__ctalkGLUTCube (double, int);
__ctalkGLUTCone (double, double, int, int, int);
__ctalkGLUTTorus (double, double, int, int, int);
__ctalkGLUTDodecahedron (int);
__ctalkGLUTOctahedron (int);
__ctalkGLUTTetrahedron (int);
__ctalkGLUTIcosahedron (int);
__ctalkGLUTTeapot (double, int);
__ctalkGLUTFullScreen (void);
__ctalkGLUTPosition (int, int);
__ctalkGLUTReshape (int, int);
__ctalkGLUTWindowID (char *window_name)

The functions that make up Ctalk’s glue layer for the GLUT API. For their use, refer to the methods in GLUTApplication class.

__ctalkGLXAlpha (float alpha)

Sets the alpha (opacity) channel for outline text rendering. Values should be between 0.0 (transparent) and 1.0 (opaque). The Ctalk library’s default value is 1.0 (opaque).

__ctalkGLXDrawText (char *text)

This is another convenience function that draws text on a GLXCanvasPane using a X font that the program registered with the pane’s GLX context via a previous call to __ctalkGLXUseXFont.

The GLXCanvasPane class defines several methods that facilitate drawing with X fonts when using GLX. See GLXCanvasPane.

__ctalkGLXDrawTextFT (char *text, float x, float y)

Draws text at the matrix coordinates given by the x,y arguments. Programs should call at least __ctalkGLXUseFTFont before calling this function.

__ctalkGLXExtensionsString (void)

Returns a char * containing the extensions supported glX.

__ctalkGLXExtensionSupported (char *extName)

Returns a boolean value of True if the system’s glX extension supports extName, False otherwise.

__ctalkGLXFrameRate (void)

Returns a float with the frames per second of the calling program. The function averages the rate over each interval of approximately five seconds.

__ctalkGLXFreeFTFont (void)

Frees the font and library data from a previous call to __ctalkGLXUseFTFont.

__ctalkGLXFreeXFont (void)

Frees X font data that was allocated by a previous call to __ctalkGLXUseXFont. The GLXCanvasPane class defines several methods that facilitate drawing with X fonts when using GLX. See GLXCanvasPane.

__ctalkGLXFullScreen (OBJECT *selfObject, char *winTitle)

Toggles the window’s full screen mode on and off.

__ctalkGLXNamedColorFT (char *colorname)

Sets the foreground color for drawing text with Freetype fonts to the named X11 color given as the argument.

__ctalkGLXPixelHeightFT (int pxheight)

Sets the height of the current Freetype face in use to the pixel height given as the argument.

__ctalkGLXRefreshRate (void)

Returns a float with the display’s refresh rate if the OpenGL installation supports the GLX_OML_sync_control extension. If OpenGL doesn’t support GLX_OML_sync_control, the function prints a warning message on the terminal and returns -1.

__ctalkGLXSwapBuffers (OBJECT *glxpane_object)

This is an API-level wrapper for the GLXSwapBuffers library function.

__ctalkGLXSwapControl (int interval)

Sets the swap buffer synchronization to 1/interval. If interval is 0, disables buffer swap synchronization. If the machine’s OpenGL does not support the GLX_MESA_swap_control extension, the function is a no-op. Returns 0 on success, -1 if the extension is not supported.

__ctalkGLXTextWidth (char *text)

Returns an int with the width in pixels of text rendered in the current font. The program must first have selected a X font using __ctalkGLXUseFon. If no font is selected, the function returns ‘-1’.

__ctalkGLXUseFTFont (String fontfilename)

Initializes the Freetype library and loads the font from the file given as the argument. Use __ctalkGLXFreeFTFont to release the font data before calling this function again when changing fonts.

__ctalkGLXUseXFont (OBJECT *glxCanvasPaneObject, char *fontname)

This is a convenience function that registers the X font, fontname for use with glxCanvasPaneObject, first by retrieving the X font data for fontname, then registering the font using glXUseXFont(3).

After the program has finished drawing with the font, the program should call __ctalkGLXFreeXFont.

The GLXCanvasPane class defines several methods that facilitate drawing with X fonts when using GLX. See GLXCanvasPane.

__ctalkGLXFullScreen (void)

Returns a boolean value of true if the window is using Freetype fonts, false otherwise.

__ctalkGLXWindowPos2i (int x, int y)

This is a wrapper for the glWindowPos2i function, which several methods in GLXCanvasPane class use.

Because glWindowPos2i is an extension in many GL implementations, Ctalk checks for the function’s presence when compiling the libraries.

If the GL implementation does not provide glWindowPos2i, then any Ctalk program that tries to use this function (or one of the methods that call it), prints an error message and exits.

__ctalkGLXWinXOrg (void)
__ctalkGLXWinYOrg (void)
__ctalkGLXWinXSize (void)
__ctalkGLXWinYSize (void)

These functions return an int with the window’s current origin and size.

__ctalkGUIPaneDrawCircleBasic (void *display, int window_id, int gc, int center_x, int center_y, int radius, int fill, int pen_width, int alpha char *fg_color_name, char *bg_color_name)

Draws a circle centered at center_x,center_y with radius radius. The dimensions are given in pixels. If filled is true, then the function draws a filled circle; otherwise, the circle’s edge has the width pen_width.

This function is a synonym for __ctalkX11PaneDrawCircleBasic.

__ctalkGUIPaneClearRectangle (OBJECT *pane_object, int x, int y, int width, int height)

Clear a rectangular region in a GUI Pane object. Also clear the region in any buffers associated with the object.

__ctalkGUIPaneClearWindow (OBJECT *pane_object)

Clear a pane object’s window.

__ctalkGUIPaneDrawLine (OBJECT *pane_object, OBJECT *line_object, OBJECT *pen_object)

Draw a line specified by line_object (an instance of Line class) using pen_object (an instance of Pen class).

__ctalkGUIPaneDrawLineBasic (void *display, int drawable_id, int gc_ptr, int x_start, int y_start, int x_end, int y_end, int pen_width, int alpha, char *pen_color)
__ctalkX11PaneDrawLineBasic (void *display, int drawable_id, int gc_ptr, int x_start, int y_start, int x_end, int y_end, int pen_width, int alpha, char *pen_color)

Draw a line between the points (x_start,y_start) and (x_end, y_end) with the color, and transparency using the drawable ID, graphics context, and pen color, width, and transparency given as arguments.

This function is a synonym for __ctalkX11PaneDrawPointBasic.

__ctalkGUIPaneDrawPoint (OBJECT *pane_object, OBJECT *point_object, OBJECT *pen_object)

Draw a point on pane_object specified by point_object using pen_object.

__ctalkGUIPaneDrawRectangle (OBJECT *pane_object, OBJECT *rectangle_object, OBJECT *pen_object, int fill)

Draw a rectangle on pane_object specified by rectangle_object using pen_object. If fill is non-zero, draw a filled rectangle.

__ctalkGUIPaneDrawRoundedRectangle (OBJECT *pane_object, OBJECT *rectangle_object, OBJECT *pen_object, int fill, int radius)

This is similar to __ctalkGUIPaneDrawRectangle, except that it takes an extra argument, radius, which specifies the radius of the arcs that are used to draw the corners.

__ctalkGUIPanePutStr (OBJECT *pane_object, int x, int y, char *string)

Display String object string at coordinates x,y on pane_object. You can select the font with the font method in class X11Pane. This function relies on instance variables defined in X11Pane class. The __ctalkX11PanePutStrBasic function, below, provides a more flexible interface to the X libraries.

__ctalkGUIPaneRefresh (OBJECT *pane_object, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY)

Refresh the Pane object by updating the visible window with pane_object’s buffers and, if necessary, notifying the GUI library that the window has been updated.

__ctalkGUISetBackground (OBJECT *pane_object, char *color)

Set the background of a pane’s window to color. This function is intended only for objects that have an actual window; e.g., X11Pane objects. For all other visual types, like pixmaps, use __ctalkX11SetBackgroundBasic.

__ctalkX11SubWindowGeometry (OBJECT * parentpane, char * geomstr, int *x_out, int *y_out, int *width_out, int *height_out)

Parses a string that contains the geometry specification of a subwindow, and returns the width and height of the subwindow and its X,Y position within the parent pane’s window.

A geometry specification has the form:


width[%]xheight[%][+x_org[%]+y_org[%]]

The x, y, width, and height parameters are interpreted as the actual origin and size of the subwindow, unless a parameter is followed by a percent sign (‘%’). In that case, the dimension is interpreted as a fraction of the parent window’s corresponding vertical or horizontal dimension.

For some Pane classes, like dialog windows, if x_org and y_org are missing, then the class positions the dialog window centered over the parent window.

__ctalkX11TextFromData (void *display, int drawable_id, int GD_ptr, char *text)

Displays text on drawable_id.

__ctalkX11TextWidth (char *fontDesc, char *text)

Returns an int with the width in screen pixels of the text argument when rendered in the font named by fontDesc. There is more information about how to use fonts in the sections that discuss the X graphics classes. See X11Font.

__ctalkX11WxHGeometry (int parentWidth, int parenthHeight, char *geomspec, int xOut, int yOut, int widthOut, int heightOut)

Calculate the dimensions specified by geomspec within parentWidth and parentHeight, and return the results in xOut, yOut, widthOut, and heightOut. For information about the format of geomspec, refer to the Window Geometry subsection of the X11PaneDispatcher class. See X11PaneDispatcher.

__ctalkHandleRunTimeException (void)

Execute the exception handler for a pending exception. The handle method (class Exception) calls this function. See Exception.

__ctalkHandleRunTimeExceptionInternal (void)

Execute the exception handler for a pending exception. If the exception is generated by an expression, execute the exception handler only if further expressions or subexpressions need to be evaluated.

__ctalkHaveFTFaceBasic (void)

Returns TRUE if an application has created a new FreeType2 font face, FALSE otherwise. This is a lower level library function that apps should not need to use directly, and may go away in the future.

__ctalkHexIntegerToASCII (unsigned int ptr, char *s)

Format a hexadecimal representation of ptr in s. The return value is the formatted string in s.

On 64-bit machines, the prototype is:


char *__ctalkHexIntegerToASCII (unsigned long long int ptr, char *buf)

__ctalkIconXPM (int iconID)

Returns a char ** with the XPM data for the dialog icon given by iconID. The library defines the following icon IDs.


ICON_NONE
ICON_STOP
ICON_CAUTION
ICON_INFO

__ctalkIgnoreSignal (int signo)

Set the handler for signo to ignore the signal.

__ctalkIncKeyRef (OBJECT *object, int inc, int op)
__ctalkIncStringRef (OBJECT *object, int idx, int op)

Increment the reference to the value of object, a String or Key object, or one of its subclasses, by idx. If idx is negative, decrements the reference to the value of the receiver. If the reference is before or after the start or end of the receiver’s value, further uses of the object return NULL.

The argument op can be one of the following constants, which are defined in ctalkdefs.h.

TAG_REF_PREFIX

Increments (or decrements) the value of the receiver immediately. Normally this is used for prefix ++ and -- operators, and also += and -= operators.

TAG_REF_POSTFIX

Increments (or decrements) the value of the receiver after its value is accessed. Used normally for postfix ++ and -- operators.

TAG_REF_TEMP

Adds a temporary reference that is cleared after the receiver is next read. Normally you would use this for expressions that assign the reference to another object, as in this example.


String new str1;
String new str2;

str1 = "Hello, world!";

str2 = str1 + 3;

The object str2 is assigned the calculated reference. The value of str1 is unaffected.

__ctalkInitGLEW (void)

Initialize the GLEW library. Programs must call this function before performing any operations that use OpenGL extensions.

__ctalkInlineMethod (OBJECT *rcvr, METHOD *method, int n_args, ...)

Call a method or block of code that is an argument to another method. The class of rcvr and the class of method do not need to be the same. Currently, only the map method uses inline method calls. For an example of the __ctalkInlineMethod ()’s use, see map (implemented by the List, Array, and AssociativeArray classes). This function can (and should) be used to implement inline method messages or code blocks when streaming over collections.

The n_args argument specifies the number of arguments to be passed to the target method. Currently __ctalkInlineMethod () supports 0 - 6 arguments.

__ctalkIntRadixToDecimalASCII (char *intbuf)

Return a C string with the integer formatted in intbuf formatted as a decimal (base 10) integer.

__ctalkInstallHandler (int signo, OBJECT *(*method_c_function)())

Set the handler of signal signo to method_c_function. The prototype of method_c_function is similar to the intermediate C prototype of Ctalk’s methods. Signal handlers installed with this function reset the handler to the default after each use, except for handlers on DJGPP platforms.

__ctalkInstallPrefix (void)

Returns a char * with the top-level directory where Ctalk is installed. Ctalk’s installation uses this directory as the top-level directory of its installation layout; for example, in relative terms, this is where Ctalk’s various components get installed:


Executables:            prefixdir/bin
Libraries:              prefixdir/lib
Class Libraries:        prefixdir/include/ctalk
Texinfo Manuals:        prefixdirshare/info
Manual Pages:           prefixdir/share/man
Searchable Docs:        prefixdir/share/ctalk

__ctalkIntanceMethodInitReturnClass (char *rcvrclassname, char *methodname, char *returnclassname)

Set the return class of method methodname of class rcvrclassname to returnclassname.

__ctalkInstanceVarsFromClassObject (OBJECT *obj)

Add the instance variables defined by obj’s class object.

__ctalkInstanceVarIsCallersReceiver (void)

Used by Object: become. Returns True if the receiver object is an instance variable, False otherwise.

__ctalkInitFTLib (void)

Initialize the system’s FreeType2 library. Returns 0 if successful, ERROR (‘-1’) if unsuccessful or if the library isn’t available. This is a lower level function that should not normally be needed by apps directly, and may go away in the future.

__ctalkInstanceMethodParam (char *rcvrclassname, char *methodname, OBJECT *(*selector_fn)(), char *paramclass, char *paramname, int param_is_pointer)

Define a method parameter when initializing a method. Normally the compiler generates this call for inclusion in __ctalk_init () for the method initialization at run time.

__ctalkIntFromCharConstant (char *str)

Returns the int value of the character constant str. Recognizes all of the escape sequences that Ctalk uses, whether the constant is enclosed in single quotes or not. Also recognizes backslash escape sequences and the following control character constants.


Escape Sequence    Int Value
\0                 0
\a                 1
\b                 2
\e                 27
\f                 6
\n                 10
\r                 13
\t                 9
\v                 11

The ‘\e’ escape sequence is an extension to the C language standard.

__ctalkIsClassVariableOf (char *class, char *varname)

Returns TRUE if varname is a class variable of class, FALSE otherwise.

__ctalkIsCallersReceiver (void)

Used by Object : become to determine if an object is the calling method’s receiver.

__ctalkIsDir (char *path)

Returns TRUE if path is a directory, FALSE otherwise.

__ctalkIsInstanceMethod (OBJECT *self_object, char *method_name)
__ctalkIsClassMethod (OBJECT *self_object, char *method_name)

The functions return True if the method given by method_name is an instance or class method, respectively, in self_object’s class.

__ctalkIsInstanceVariableOf (char *class, char *varname)

Returns TRUE if varname is an instance variable of class, FALSE otherwise.

__ctalkIsObject (OBJECT *o)

Return TRUE if if o is a valid object, FALSE otherwise.

__ctalkIsSubClassOf (char *classname, char *superclassname)

Return TRUE if classname is a subclass of superclassname, FALSE otherwise.

__ctalkLastMatchLength (void)

Return the length of the match from the last call to __ctalkMatchText, below.

__ctalkLibcFnWithMethodVarArgs (int (*libcfn)(), METHOD *method, char *libcfn_return_class)

Call the C library function libcfn using with its template method method. For C library functions that use stdarg.h variable arguments, libcfn_return_class should be Integer.

When evaluating an expression, the currently executing method is contained in the current EXPR_PARSER. See __ctalkGetExprParserAt.

Note: This version of Ctalk only supports variable-argument functions on 32-bit Intel platforms. If you try to use a variable-argument function on another hardware platform, Ctalk issues a warning and returns NULL.

__ctalkLogMessage (char *, ...)

Formats the message given as the argument and writes the message to the system’s syslog facility.

__ctalkMatchAt (Integer n)
__ctalkMatchIndexAt (Integer n)

Returns, respectively, the text, or the character index matched by the n’th parenthesized subexpression during a previous call to __ctalkMatchText (i.e., a backreference). The argument, N, is ‘0’ for the first parenthesized subexpression, ‘1’ for the next subexpression, and so on. If the n’th pattern didn’t match any text, returns NULL. See Pattern Matching.

__ctalkMatchText (char *pattern, char *text, long long int *offsets)

Find the occurences of pattern in text. Returns the index of each match in the offsets array, with the list terminated by -1. Returns the number of matches, or -1 if there are no matches.

__ctalkMatchPrintToks (bool printToks)

If printToks is true, then Ctalk prints the regular expression tokens and the matching text for every regular expression match, which can be useful for debugging regular expressions.

__ctalkMapGLXWindow (OBJECT *glxcanvaspane_object)

Maps a GLXCanvasPane's window to the display and creates a GLXContext for the window, and makes the GLXContext current.

Saves the GLXContext pointer in the receiver’s glxContextPtr instance variable. See GLXCanvasPane.

__ctalkMapX11Window (OBJECT *x11pane_object)

The X library interface of the map (class X11Pane) method See X11Pane. This function is a wrapper for the XMapWindow and XMapSubwindows Xlib functions.

__ctalkMethodObjectMessage (OBJECT *rcvr, OBJECT *method_instance)

Perform a method call by sending rcvr the message defined by method_instance, which is a previously defined Method object. See Method.

The function returns ‘0’ on success, ‘-1’ on error.

For examples of Method object calls, See methodObjectMessage.

__ctalkMethodObjectMessage (OBJECT *rcvr, OBJECT *method_instance, OBJECT *arg1, OBJECT *arg2)

Perform a method call by sending rcvr the message defined by method_instance, which is a previously defined Method object.

The parameters arg1 and arg2 are the arguments to the method instance. Method objects with two arguments are commonly used in graphical event dispatchers, particularly in X11PaneDispatcher class. This helps simplify the event dispatcher methods.

The function returns ‘0’ on success, ‘-1’ on error.

For examples of Method object calls, See methodObjectMessage.

__ctalkMethodPoolMax (void)
__ctalkSetMethodPoolMax (int new_size)

Get or set a program’s method pool size, in the number of objects that each method’s pool retains. The default pool size is set when the Ctalk libraries are built, and is displayed in the configure program’s status report during the build process. When a method’s pool size reaches this number of objects, the pool deletes the oldest object in the pool to make room for the new object.

Generally, the default pool size is suitable for the language tools and demonstration programs that come packaged with Ctalk. Some of the test programs in the test/expect subdirectory that run through many iterations (i.e., thousands of iterations) require a larger pool size. This is especially true if a program uses many C variables when iterating through its operations, and whether the C variables are simply scalar or constant values (e.g., ints, doubles, and literal strings), and whether the variables are pointers to objects in memory.

__ctalkMethodReturnClass (char *classname)

Set the return class of an instance or class method during method initialization.

__ctalkNArgs (void)

Returns an int with the number of arguments passed to the current method.

__ctalkNMatches (void)

Returns an int with the number of matches from the last call to __ctalkMatchText.

__ctalkNewFTFace (void)

Initialize a new FreeType2 face object. This is a lower level library function that apps should not need to use directly, and may go away in the future.

__ctalkNewSignalEventInternal (int signo, int pid, char *data)

Generate and queue a SignalEvent object for signal signo with process ID pid. The data argument is a String object that the program can use to pass information back to the application.

__ctalkNonLocalArgBlkReturn (void)

Returns a bool value of true or false to an argument block’s parent method to indicate whether the argument block executed a return statement.

__ctalkObjValPtr (OBJECT *o, void *ptr)

Set the value of the object o to ptr.

__ctalkPaneResource (OBJECT *paneObject, char *resourceName, bool warn)

Returns an OBJECT * with the value corresponding to resourceName from paneObject’s resource instance variable. If warn is true, displays a warning if the resource isn’t found.

__ctalkPeekExceptionTrace (void)

Returns a char * with the text of the most recent exception and its stack trace.

__ctalkPeekRunTimeException (void)

Returns a char * with the text of the most recent exception.

__ctalkPendingException (void)

A convenience method for __ctalkTrapException. Returns TRUE if an exception is pending, FALSE otherwise.

__ctalkPrintExceptionTrace (void)

Print a walkback of the current exception’s copy of the program call stack.

__ctalkPrintObject (OBJECT *object)

Print the object given by the argument, and its instance variables, to standard output.

__ctalkPrintObjectByName (OBJECT *object_name)

Print the object named by object_name to the standard output.

__ctalkProcessWait (int child_processid, int *child_return_value_out, int *child_term_sig_out, int *errno_out)

Checks the status of the child process specified by child_processid.

If the return value of __ctalkProcessWait is 0, then there is no change in the child processes’ status to report. A return value equal to child_processid indicates that the child process has exited. If the return value is -1, then there was an error either in the process that called __ctalkProcessWait, the child process, or both.

When __ctalkProcessWait’s return value is equal to child_processid, the function returns the child processes’ return value in child_return_value_out. If the child process was terminated by an uncaught signal, the signal number is returned in child_term_sig_out.

If the function’s return value is -1, then function returns the system’s error code in errno_out.

__ctalkRaiseX11Window (OBJECT *x11pane_object)

The X library interface of the raise (class X11Pane) method.

__ctalkReceiverReceiverBecome (OBJECT *object)

Used by become (class Object) to change the calling method’s receiver to the object given as the argument.

__ctalkReferenceObject (OBJECT *obj, OBJECT *reffed_obj)

Sets obj’s value to reffed_obj’s hexadecimal address. Also incrememts reffed_obj’s reference count by 1 and adds VAR_REF_OBJECT to its scope.

__ctalkRegisterArgBlkReturn (int return_code, OBJECT *return_object)

This function gets called when Ctalk encounters a return statement in an argument block. The first argument is the return code of the argument block itself (typically an Integer object with a value of -2, which signals the map method that the argument block has requested a return from the parent function or method), and the second argument is the object that is to be returned by the caller.

The following example should hopefully explain how these functions work together. The comments indicate where the compiler inserted these functions.


int main () {
  String new str;

  str = "Hello, world!";

  str map {
    if (self == 'o') {
      break;
    }
    printf ("%c", self);
  }
  printf ("\n");

  str map {
    switch (self)
      {
      case 'a':
      case 'e':
      case 'i':
      case 'o':
      case 'u':
	if (self == 'o') {
	  printf ("\n");
	  return 11;          /* __ctalkRegisterArgBlkReturn inserted   */
	}                    /* here.  The String map method, which is */
	break;                /* the argument block's direct caller,    */
      }                      /* contains a __ctalkArgBlkSetCallerReturn*/
    (Character *)self -= 32;  /* function call.                         */
    printf ("%c", self);
  }
  printf ("\n");
}


/* After the argument block call, the compiler inserts a 
   construct like the following:   

    if (__ctalkNonLocalArgBlkReturn ()) {
        return __ctalkToCInteger (__ctalkArgBlkReturnVal (), 1);
    }

  This retrieves the argument block's return value if any,
  and returns from the calling function.
*/

The String : map method contains an example of how an argument block can signal a return from the function or method that called it. Refer also to the __ctalkArgBlkSetCallerReturn and __ctalkArgBlkClearCallerReturn functions above.

__ctalkRegisterBoolReturn (int t-or-f-arg)

Returns a boolean object with a true or false value depending on the value of t-or-f-arg. If the Boolean class variables boolTrue or boolFalse are defined, returns one of those objects. Otherwise, creates a Boolean object with the value true or false.

__ctalkRegisterCharPtrReturn (char *var)

Saves a C char * method return value to the method’s resource pool.

__ctalkRegisterCharPtrReturn (char var)

Saves a C char method return value to the method’s resource pool.

(char *type, char *qualifier, char *qualifier2, char *qualifier3, char *qualifier4, char *storage_class, char *name, int n_derefs, int attrs, int is_unsigned, int scope)

Register a C typedef with an application. This function is typically used by __ctalk_init to register typedefs defined in C include files and elsewhere.

__ctalkRegisterExtraObject (OBJECT *created_object)

Save an object retrieved by a function so it may be referred to later. This function registers each object only once and does not adjust the object’s reference count or scope. The __ctalkRegisterExtraObject function silently ignores request to register global and class objects. Refer to the entry for __ctalkRegisterUserObject, below.

__ctalkRegisterFloatReturn (double d)

Registers a C double return value as a Float method resource object. Note that the C libraries do not automatically convert C floats to doubles, so if you register a C float as a method resource, you need to cast it to a double first.

__ctalkRegisterIntReturn (int returnval)

Registers a C int method return value as an Integer method resource object.

__ctalkRegisterIntReturn (long long int returnval)

Registers a C long long int method return value as a LongInteger method resource.

__ctalkRegisterUserFunctionName (char *name)

Registers the names of C functions in the program, mainly for diagnostic messages. This function is added automatically to __ctalk_init whenever a C function in the source code is parsed and is called at the start of a program.

__ctalkRegisterUserObject (OBJECT *created_object)

Save objects created by a method so they may be referred to later. New objects registered by this function have a reference count of 1, and have the additional scope METHOD_USER_OBJECT. This function is also used by many of the methodReturn* macros, and if necessary you can included it in a method if you need to register an object in some non-standard manner. See Returning method values.

Note that global objects and class objects do not need to be registered. In fact, registering such objects as method resources can confuse the object’s entries in their respective dictionaries, because method resources have a separate dictionary of their own. If a method tries to register a class object or global object, __ctalkRegisterUserObject silently ignores the request.

__ctalkReplaceVarEntry (VARENTRY *varentry, OBJECT *new_object)

This function has been superceded. If you want to attach an Object to another tag, it’s only necessary to use an assignment statement. See __ctalkAliasReceiver () for an example

__ctalkRtGetMethod (void)

Returns the currently executing method as a METHOD * from the call stack, or NULL if called from within a C function.

__ctalkRtReceiver (OBJECT *receiver_object)

Sets the call stack’s receiver to receiver_object. The function however, does not alter the currently executing method’s receiver on the receiver stack.

__ctalkRtReceiverObject (void)

Returns the currently executing method’s receiver object from the call stack.

__ctalkRtSaveSourceFileName (char *fn)

Called during the initialization of a function or method to store the name of its source file.

__ctalkRtGetMethodFn (void)

Returns the C function pointer (an OBJECT *(*)() of the currently executing method, or NULL if called from within a C function.

__ctalkRtMethodClass (OBJECT *class_object)

Sets the class object of the currently executing method to class_object.

(OBJECT *class_object)

Returns the class object of the currently executing method.

__ctalkSearchBuffer (char *pattern, char *buffer, long long *offsets)

Finds all occurrences of pattern in buffer, and returns the positions of the matches in offsets, terminated by -1.

__ctalkSelectXFontFace (void *display, int drawable_id, int gc_ptr, int face)

Selects the typeface of the currently selected font, if available, which should have been loaded with a call like __ctalkX11UseFontBasic, or the equivalent calls for FreeType fonts.

The argument, face, may be one of the following.


X_FACE_REGULAR
X_FACE_BOLD
X_FACE_ITALIC
X_FACE_BOLD_ITALIC

Because these functions use shared memory to manage each X typeface’s metrics, it is generally necessary to call this function after calling __ctalkOpenX11InputClient in order to display multiple faces with the correct character spacing.

__ctalkSelfPrintOn (void)

Print the calling method’s arguments to the receiver. This function is called directly by printOn (class String) and similar methods. See String.

__ctalkSetExceptionTrace (int val)

Enable or disable exception method traces in handle (class Exception) and other methods. See Exception.

__ctalkSetObjectAttr (OBJECT *object, unsigned intattribute)
__ctalkObjectAttrAnd (OBJECT *object, unsigned intattribute)
__ctalkObjectAttrOr (OBJECT *object, unsigned intattribute)

These methods sets the attr member of object to attribute.

Note that when setting or clearing attributes on complex objects, it is better to use __ctalkObjectAttrAnd or __ctalkObjectAttrOr, because complex objects can contain instance variables that use different attributes.

For example, an instance variable that is a Symbol would have the additional attribute ‘OBJECT_VALUE_IS_BIN_SYMBOL’, so if a method or function contained an expression like this:


__ctalkSetObjectAttr (myObj, myObj -> attrs | OBJ_HAS_PTR_CX);

This would have the effect of setting the parent object’s attributes as well as the instance variables, which would clear any additional attributes that the instance variables have.

What would actually happen is that the parent object myObj, and its instance variables would have their attributes set like this.


<obj> -> attrs = (myObj -> attrs | OBJ_HAS_PTR_CX);

so it is better to use an expression like this one.


__ctalkObjectAttrOr (myObj, OBJ_HAS_PTR_CX);

This has the effect of applying the following to the parent object and each instance variable:


<obj> -> attrs |= OBJ_HAS_PTR_CX);

Conversely, to clear a single attribute, a function or method would contain an expression like this.


__ctalkObjectAttrAnd (myObj, ~OBJ_HAS_PTR_CX);

__ctalkSetObjectName (OBJECT *object, char *name)

Sets the name of object to name.

__ctalkSetObjectScope (OBJECT *object, int scope)

Set the scope of object to scope. Note that many of Ctalk’s scopes are only used internally. The scopes that are useful in methods are defined in ctalkdefs.h. Those definitions are listed here along with their values. See Scoping.


GLOBAL_VAR          (1 << 0)
LOCAL_VAR           (1 << 1)
CREATED_PARAM       (1 << 6)
CVAR_VAR_ALIAS_COPY (1 << 7)
VAR_REF_OBJECT      (1 << 9)
METHOD_USER_OBJECT  (1 << 10)

__ctalkSetObjectValue (OBJECT *object, char *value)

This is a wrapper for __ctalkSetObjectValueVar (), below, which was used in earlier versions of the class libraries. You should use __ctalkSetObjectValueVar () instead.

__ctalkSetObjectValueAddr (OBJECT *object, void *mem_addr, int data_length)

Set object’s value to a pointer to the memory area mem_addr. The object must be a member of Vector class or one of its subclasses. The function also sets the object length instance variable, and adds OBJECT_VALUE_IS_MEMORY_VECTOR to its attributes, and registers the vector * address.

__ctalkSetObjectValueBuf (OBJECT *object, char *buf)

Set the value instance variable to the buffer buf. Unlike __ctalkSetObjectValue () and __ctalkSetObjectValueVar (), this function replaces the value of object with buf, even if buf is empty, so you can add a random-length buffer to object.

__ctalkSetObjectValueVar (OBJECT *object, char *value)

Set the value of object to value. If value is NULL, sets object’s value to Ctalk’s ‘(null)’ string.

__ctalkSetObjPtr (OBJECT *object, void *p)

Save the pointer p in object.

__ctalkSetRS (char record_separator_char)

Set’s the current program’s record separator character, which determines, among other things, how regular expression metacharacters work with line endings. See RecordSeparator.

__ctalkSignalHandlerBasic (int signo)

Provides a basic signal handler that is more robust than the methods in SignalHandler class, but less flexible. Causes the application to terminate and print a walkback trace if enabled.

Applications can use __ctalkInstallHandler () to install the signal handler. In this case it works similarly to a method with a C calling protocol. Here is the installExitHandlerBasic method from Application class.


Application instanceMethod installExitHandlerBasic (void) {
  __ctalkInstallHandler
    (__ctalkSystemSignalNumber ("SIGINT"),
     (OBJECT *(*)())__ctalkSignalHandlerBasic);
						    
  return NULL;
}

__ctalkSpawn (char *command, int restrict_io)

The __ctalkSpawn function launches the program named by command as a daemon process, and then returns to the parent program and continues execution of the parent.

The function returns the process id of the child process.

The daemon process runs as a true daemon - that is, without a controlling terminal, and without the standard input, output, or error channels. All communication between the daemon and the parent program should take place with UNIX interprocess communication facilities.

If restrict_io is non-zero, the program changes the daemon processes’ working directory to ‘/’ and sets its umask to ‘0’.

Traditionally, a parent program exits immediately after spawning a daemon process. But __ctalkSpawn maintains the session process - the process that handles the session and I/O initialization before it launches the daemon. The session process stays active until the parent process exits and orphans it. Then the session process exits also, leaving the daemon to run completely in the background until it is killed. That means, while the parent program is running, there can be three entries in the system’s process table, when viewed with a program like ps or top. However, it also mimimizes the possibility of causing zombie processes should any part of the program quit unexpectedly.

You should note that __ctalkSpawn does not use a shell or any shell facilities to exec the daemon process, which means the function doesn’t support I/O redirection or globbing. If you want the parent process to handle the child processes’ I/O, refer to the __ctalkExec function. See ctalkExec.

__ctalkStringifyName (OBJECT *src, OBJECT *dest)

When called by a function like String : =, performs some munging of different types of String objects in order to keep the API consistent for different types of String objects.

__ctalkSplitText (char *text, OBJECT *list_out)

Splits a text buffer into word tokens, and returns the tokens as members of list_out. This function preserves newlines and spaces, and places HTML-style format tags in their own tokens. This is used by classes like X11TextPane to split its text buffer before displaying the wrapped text. See X11TextPane.

__ctalkStrToPtr (char *s)

If s is a C string formatted as a hexadecimal number with the format 0xnnnnnnn, return a C void * pointer with that address.

__ctalkSysErrExceptionInternal (MESSAGE *orig, int errno, char *text)

Generates an exception base on errno with the text text. Ctalk translates errno in an exception that represents the C library’s errno error definitions. The orig argument provides the line and column number where the exception occurred. If NULL, the exception doesn’t record the line and column information.

__ctalkSystemSignalName (int signo)

Returns a string containing a mnemonic name like SIGINT or SIGHUP that corresponds to signo. Includes the mnemonics of the common signals defined by POSIX standards.

__ctalkSymbolReferenceByName (OBJECT *object)

Used in Symbol : = and similar methods returns a boolean value of true if the object (the argument to the method normally) was retrieved by its name, or false if the argument is the result of pointer math or indirection. This allows the method to determine whether it needs to perform additional indirection or pointer math on the argument before assigning it the the receiver.

__ctalkSystemSignalNumber (char *signame)

For a signal named signame, return the number system-dependent number of the signal. The function defines names POSIX 1990 signals on most systems. Refer to the system’s signal(2) (or similar) manual page for information.

__ctalkTemplateCallerCVARCleanup (void)

Cleans up after a __ctalkGetTemplateCallerCVAR call. See __ctalkGetTemplateCallerCVAR. Ctalk calls this function internally; you should not need to use it in your own programs.

Note that this function does not know about parameter substitution. If you want to print an object that is an argument to a method, use the ARG(n) macro, and reference the name member. See ARG macro.

__ctalkPrintObject(ARG(0)->__o_name);
__ctalkTerminalHeight (void)
__ctalkTerminalWidth (void)

Returns the height and width of the terminal in character rows and columns. If the terminal does not support reporting its size, these functions return 0.

__ctalkToCArrayElement (OBJECT *o)

Translate the value of an Integer, Character, String, or LongInteger array element to a void * that points to its corresponding C data type.

__ctalkToCCharPtr (OBJECT *obj, int keep)

Returns the value of obj as a C char *. If keep is zero, deletes obj if possible.

__ctalkToCDouble (OBJECT *obj)

Returns the value of obj as a C double.

__ctalkToCIntArrayElement (OBJECT *obj)

Returns the value of obj as a C int. This function has mostly been superceded by __ctalkToCInteger (below).

__ctalkToCInteger (OBJECT *obj)

Returns the value of obj as a C int. The value can be a binary, octal, decimal, or hexadecimal number. Prints a warning message if the value is not a valid number or is out of range.

__ctalkTrapException (void)

If there is a run-time exception pending, returns the first exception in Ctalk’s internal format. Otherwise, returns NULL.

__ctalkTrapExceptionInternal (void)

Similar to __ctalkTrapException, except that it works with the passes in the compiler as well as the run time library.

__ctalkObjectPrintOn (OBJECT *object)

Print the calling method’s arguments to the argument’s value instance variable. This function is called directly by printOn (class ANSITerminalStream) and similar methods. See ANSITerminalStream.

__ctalkOpenX11InputClient (OBJECT *X11TerminalStream_object)

Start a GUI program’s input client in the background. The input client receives input events, like mouse motion and keypresses, and window events, like resize notifications from the X display server, and sends the information to the application program so that it can queue InputEvent objects which the app can then process.

The argument is a X11TerminalStream object, which is normally created with a X11Pane object, and which programs can refer to by the X11Pane object’s inputStream instance variable.

This is the lower-level function that the openEventStream (class X11Pane) method uses to begin communicating with the X display server. For an example, refer to the X11TerminalStream section. See X11TerminalStream.

__ctalkUNIXSocketOpenReader (char *socketpath)

Opens a UNIX domain socket, binds the socket to the path given by socketpath, and places the socket in listening mode.

Returns the file descriptor of the new socket on success, or -1 if an error occured, in which case the C library sets the variable errno.

__ctalkUNIXSocketOpenWriter (char *socketpath)

Opens a UNIX domain socket and connects to the socket given by socketpath.

Returns the file descriptor of the new socket on success, or -1 if an error occurs, in which case the C library sets the variable errno.

__ctalkUNIXSocketRead (int sockfd, void * buf_out)

Reads data from the socket given by sockfd. On success, returns the data read in buf_out and the return value is the number of bytes read. On error returns -1 and the C library sets the variable errno.

__ctalkUNIXSocketShutdown (int sockfd, int how)

This function is a wrapper for the C library’s shutdown function. Shuts down the socket identified by the sockfd argument. The second argument, how, can be either SHUT_RD, SHUT_WR, or SHUT_RW. These constants are defined in UNIXNetworkStream class and described in the shutdown(1) manual page.

The function returns 0 on success, or -1 if an error occurred.

__ctalkUNIXSocketWrite (int sockfd, void * data, int length)

Writes length bytes of data to the socket given by sockfd.

On success returns the number of bytes written, or returns -1 on error, in which case the C library sets the variable errno.

__ctalkUTCTime (void)

Returns an int with the system’s UTC time. This function is currently a wrapper for the time(2) function. Because time(2)’s argument is an int *, it can often be more reliable to use __ctalkUTCTime and let the library worry about the argument’s storage. There is also a template for time(2) if you want to use the function directly in complex expressions.

__ctalkWarning (char *fmt, ...)

Prints a formatted message to the terminal. Unlike _warning and other functions, does not add line numbers or input file information to the output.

__ctalkWrapText (unsigned int drawable, unsigned int gc_ptr, OBJECT *text_list, int pane_width, int lmargin)

Formats the text in text_list to be displayed between lmargin and pane_width (the right edge of the drawing surface given as the first argument.. The text_list list should have been generated by __ctalkSplitText. The __ctalkWrapText function uses the current typeface to determine character widths. If no font or typeface is selected, uses the default font, “fixed” to format the text.

__ctalkX11CloseClient (OBJECT *pane_object)

Closes the main program’s connection to the X11 client and exits the client process.

__ctalkX11CloseParentPane (OBJECT *pane_object)

Closes and deletes an application’s main X11 window, and its buffers and other data. Does not delete subpanes - see __ctalkCloseX11Pane () (above) to delete subpanes. Applications should delete subpanes before closing and deleting the main window. For an example of the functions’ use, refer to the method X11Pane : deleteAndClose. See X11Pane.

__ctalkX11ClearRectangleBasic (void *display, int visual_id, int gc_ptr, int x, int y, int width, int height)

Clear a rectangle of a visual type like a pixmap to the background color.

__ctalkX11Colormap (void)

Returns the X resource ID of the display’s default colormap. It’s contained in a library function because the X headers define some of the DefaultColormap’s dependent macros after DefaultColormap, which is not compatible with the ctpp preprocessor.

__ctalkX11CopyPixmapBasic (void *display, int dest_drawable_id, int dest_gc_ptr, int src_drawable_id, int src_x_org, int src_y_org, int src_width, int src_height, int dest_x_org, int dest_y_org)

Copies the drawable src_drawable_id to dest_drawable_id, with the dimensions of the source graphic given by src_x_org, src_y_org, src_width, and src_height. The image is drawn with its upper left-hand corner positioned at dest_x_org, dest_y_org on the destination drawable.

This function is called by X11CanvasPane : copy. For an example, refer the X11CanvasPane classes’ description. See X11CanvasPane.

__ctalkX11CreateGC (void *display, int drawable)

Create a X Graphics Context and return its address as a void *. The GC is created with the following values:


foreground     white
background     black
fill_style     FillSolid
function       GXcopy
font           fixed

__ctalkX11CreatePixmap (void *display, int x_drawable, int width, int height, int depth)

reate a X pixmap and return its X resource ID as an unsigned int.

__ctalkX11CreatePaneBuffer (OBJECT *pane_object, int width, int height, int depth)

Create the buffers for a pane object’s X window. Applications normally call this function when the pane object is created or when a subpane is attached to a parent pane. This function sets the pane_object’s paneBuffer and paneBackingStore instance variables.

__ctalkX11DeletePixmap (int drawable_id)

Delete the server-side pixmap whose ID is given as the argument.

__ctalkX11Display (void)

Return a pointer to the X display, opening the display if necessary.

__ctalkX11DisplayHeight (void)

Returns an int with the display’s height in pixels.

__ctalkX11DisplayWidth (void)

Returns an int with the display’s width in pixels.

__ctalkX11FontCursor (OBJECT *cursor_object, int cursor_id)

Set cursor_object’s value to a X11 cursor_id. Cursor ID’s are defined by the X server in the include file X11/cursorfont.h. See X11Cursor.

__ctalkX11FreeGC (int gc_addr)

Free the X11 graphics context pointed to by gc_addr. The address of the GC is given as an int which does not require any special handling by methods; the library function casts gc_addr to a GC *.

__ctalkX11FreePaneBuffer (OBJECT *pane_object)

Release the server-side buffers used by pane_object. Note that this function is being phased out; programs should use __ctalkX11DeletePixmap, which does not rely on hard-coded instance variable names.

__ctalkX11FreeSizeHints (void)

Frees the data allocated by __ctalkX11SetSizeHints (), below.

__ctalkX11GetSizeHints (int win_id, int *x_org_return, int *y_org_return, int *width_return, int *height_return, int *win_gravity_return, int *flags_return)

Get the actual size and placement of the window, as reported by the X server, after the window is created, normally with __ctalkCreateX11MainWindow ().

__ctalkX11InputClient (OBJECT *streamobject int fd)

The X11TerminalStream input client. This function is not used directly by any method but is a process of the __ctalkOpenX11InputClient function, above.

__ctalkX11MakeEvent (OBJECT *eventobject_value_var, OBJECT *inputqueue)

Encapsulates much of the function of the X11TerminalStream : queueInput method: receives the data for an X event from the X11 input client and saves it in an InputEvent object, then queues the InputEvent object in the X11TerminalStream’s inputQueue.

__ctalkX11MenuDrawLine (void *display, unsigned int drawable, unsigned long GC_ptr, int x_start, int y_start, int x_end, int y_end, int pen_width, int alpha, char *colorName)

Draws a line on the menu’s paneBuffer, from x_start,y_start to x_end,y_end, with the line width, opacity, and color given by the arguments.

__ctalkX11MenuDrawString (void *display, unsigned int drawable, int x, int y, int text_x_size, int text_y_size, int rect_x_size, int rect_y_size, char *str, char *color)

Draws menu text str within the margins of the rectangle defined by x,y,rect_x_size,rect_y_size. The text is centered vertically, and is justified to the left margin defined by x.

__ctalkX11MoveWindow (OBJECT *pane_object, int x, int y)

Move pane_object’s window so that its origin is at X,Y.

__ctalkX11NamedColor (char *colorname, int *red_out, int *green_out, int *blue_out, unsigned long int *pixel_out)

Looks up the X11 color given by colorname, and returns its red, green, and blue components, and the color’s pixel value as given by the X server. If the color name is supported by the X server, the function returns 0 (SUCCESS), or -1 (ERROR) if colorname is not a valid X11 color name. For a list of the colors that X supports, refer to rgb(1).

To look up RGB color combinations that the X server may not support, refer to See ctalkX11RGBColor.

If __ctalkX11NamedColor cannot find the color, it sets red_out, green_out, and blue_out to 0 and sets pixel_out to the display server’s black pixel.

__ctalkX11OpenInputClient (OBJECT *streamobject)

The library interface of the X11TerminalStream class’s input client. This function is called by openInputClient (class X11TerminalStream). The streamobject argument is a X11TerminalStream object, generally the stream created by new (class X11Pane). See X11TerminalStream.

__ctalkX11ParseGeometry (char *geomString, int* x, int* y, int* y, int* width, int* height)

Parses a X11 geometry string and returns the values specified in the x, y, width, or height variables. If the geometry string does not specify one of these values, sets the corresponding variable to zero.

For information about the format of a X11 geometry specification, refer to the XParseGeometry(3) manual page.

__ctalkX11PaneDrawCircleBasic (void *display, int window_id, int gc, int center_x, int center_y, int radius, int fill, int pen_width, int alpha, char *fg_color_name, char * bg_color_name)

Draws a circle centered at center_x,center_y with radius radius. The dimensions are given in pixels. If filled is true, then the function draws a filled circle; otherwise, the circle’s edge has the width pen_width.

This function is a synonym for __ctalkGUIPaneDrawCircleBasic.

__ctalkX11PaneDrawRectangleBasic (void *display, int drawable_id, unsigned long intgc_ptr, int xOrg, int yOrg, int xSize, int ySize, int fill, int pen_width, char *pen_color, int corner_radius)

Draw a rectangle on the drawable with the ID drawable_id, with the dimensions givent in the arguments. If fill is non-zero, draws a filled rectangle; otherwise uses the line width given by the pen_width argument. If corner_radius is non-zero, draws a rectangle with rounded corners with the radius in pixels given by corner_radius.

This function is a synonym for __ctalkGUIPaneDrawRectangleBasic.

__ctalkX11PanePutStr (OBJECT *pane_object, int x, int y, char *str)

Displays str at window coordinates x,y on pane_object’s drawable in the pane’s current font. If pane_object is buffered, writes the string to the pane’s buffers, and the string is displayed at the next refresh method call.

Note that this method is slowly being superceded because it relies on instance variable names that are defined in several class libraries. If the application uses different drawables than pane_object’s window surface or its buffers, use __ctalkX11PanePutStrBasic instead.

__ctalkX11NamedColor (char *colorspec, int *red_out, int *green_out, int *blue_out, unsigned long int *pixel_out)

Parses the color specification given by colorspec, and returns the red, green, and blue components of the color as given by the X server, and also the server’s pixel value for the color, which the function allocates.

The colorspec argument may have one of the forms that the X server recognizes as RGB color specifications.


#rgb, #rrggbb, #rrrgggbbb, #rrrrggggbbbb

rgb:r/g/b, rgb:rr/gg/bb, rgb:rrr/ggg/bbb, rgb:rrrr/gggg/bbbb

The function returns 0 (SUCCESS) and sets red_out, green_out, blue_out, and pixel_out if it was able to obtain a pixel value for the color. If the function can’t parse colorspec, or it can’t allocate the color, it returns -1 (ERROR), and sets the color channels to 0, and pixel_value to the X server’s black pixel value.

For more information about the colorspec formats, refer to XParseColor(3).

__ctalkX11SetSizeHints (int x, int y, intp width, int height, int geom_flags)

Set the window size hints based on the window dimensions set by the application. The geom_flags argument has the format provided by the __ctalkX11ParseGeometry () function, above. Normally this function is called by a X11Pane* class when initializing a window.

If an application calls this function, it must also call __ctalkX11FreeSizeHints (), above.

__ctalkX11ResizePaneBuffer (OBJECT *pane_object, int width, int height)

Resize pane_object’s buffers to width width and height height. New programs should use __ctalkX11ResizePixmap, which does not rely on hard-coded instance variable names.

__ctalkX11ResizePixmap (void *display, int, parent_drawable_id, int self_xid, int gc, int old_width, int old_height, int new_width, int new_height, int depth, int *new_pixmap_return)

Create a new Pixmap with the dimensions new_width and new_height that contains the contents of the original pixmap. Returns the X ID of the new pixmap in new_pixmap_return.

__ctalkX11ResizeWindow (OBJECT *pane_object, int width, int height, int depth)

Resize a pane object’s X window. Returns ‘1’ on success, ‘0’ if the window’s new size is <= its current size, and ‘-1’ if there is an error.

__ctalkX11PaneClearRectangle (OBJECT *pane_object, int x, int y, int width, int height)

Clears a rectangle in pane_object’s window. Note that this function is deprecated - it relies on the Pane object having specific instance variables. New programs should use __ctalkX11PaneClearRectangleBasic instead.

__ctalkX11PaneDrawLine (OBJECT *pane_object, OBJECT *line_object, OBJECT *pen_object)

Draw a line on the drawable identified by pane_object See X11Pane, with the endpoints given by line_object See Line, with the line width and color defined in pen_object See Pen. This function is a synonym for __ctalkGUIPaneDrawLine on systems with a X Window System display.

__ctalkX11PaneDrawLineBasic (int drawable_id, int gc_ptr, int x_start, int y_start, int x_end, int y_end, int pen_width, int alpha, char *pen_color)

Draw a line between the points (x_start,y_start) and (x_end, y_end) with the color, and transparency using the drawable ID, graphics context, and pen color, width, and transparency given as arguments.

__ctalkX11PaneDrawPoint (OBJECT *pane_object, OBJECT *point_object, OBJECT *pen_object)

Draw a point on the drawable id given in pane_object See X11Pane, with the location given by point_object See Point, with the radius and color given by pen_object See Pen. This function is a synonym for __ctalkGUIPaneDrawPoint on systems that use the X Window system.

__ctalkX11PaneDrawPointBasic (void *display, int drawable_id, int gc_ptr, int x, int y, int pen_width, int alpha, char *pen_color)

Draw a point of the size, position, color, and transparency using the drawable ID, graphics context, and Pen color, transparency, and width given as arguments.

__ctalkX11PaneClearWindow (OBJECT *pane_object)

Clears pane_object’s window. Note that this function is deprecated - it relies on the Pane object having specific instance variables. New programs should use

__ctalkX11PaneDrawRectangle (OBJECT *pane_object, OBJECT *rectangle_object, OBJECT *pen_object, Integer fill)

Draw a rectangle on the drawable identified by pane_object See X11Pane, with the dimensions given by rectangle_object See Rectangle, and with the line width and color given by pen_object See Pen. If fill is true, draw a filled rectangle.

__ctalkX11PanePutStrBasic (void *display, int visual_id,int gc_ptr, int x, int y, char *text)

Write the string text on the drawable named by visual_id at X,Y using the graphics context pointed to by gc_ptr. If the drawable is a X11CanvasPane buffer, the text will not be visible until the next call to the pane’s refresh method.

__ctalkX11PaneRefresh (OBJECT *pane_object, int src_x_org, int src_y_org, int src_width, int src_height, int dest_x_org, int dest_y_org)

If pane_object is a buffered pane, copy the contents of the pane buffer(s) within the rectangle given by src_x_org, src_y_org, src_width, src_height to the visible window at dest_x, dest_y.

__ctalkX11QueryFont (OBJECT *font_object, char *xlfd)

Fills in font_object’s ‘ascent’, ‘descent’, ‘maxWidth’, ‘height’, and ‘fontDesc’ instance variables with the font metrics returned by the X server for the font given by xlfd.

__ctalkX11SetBackground (OBJECT *pane_object, char *color_name)

Set pane_object’s background color to color_name. This function is being phased out because it uses named instance variables of pane_object. Programs should use __ctalkX11SetBackgroundBasic (), below, instead.

__ctalkX11SetBackgroundBasic (void *display, int visual_xid, int gc_ptr, char *color)

Sets the background color of any class with a X11 visual and graphics context.

__ctalkX11SetForegroundBasic (void *display, int visual_xid, int gc_ptr, char *color)

Sets the foreground color of any class with a X11 drawable and graphics context.

__ctalkX11SetResource (void *display, int drawable_id, char *resource_name, char *resource_value)

Sets the X11 resource resource_name to resource_value for the drawable identified by drawable_id.

__ctalkX11SetWMNameProp (OBJECT *pane_object, char *name)

Sets the WMName property pane_object’s window to name. This is the window property that window managers use to set the window frame’s title.

__ctalkX11UseCursor (OBJECT *pane_object, OBJECT *cursor_object)

Sets the X11 cursor of pane_object to cursor_object. See X11Cursor.

__ctalkX11UseXRender (bool b)

If b is true, draw using the X Render entension if it is available. If b is false, use Xlib for drawing even if X Render is available.

__ctalkX11UseFontBasic (void *display, int drawable_id, int gc_ptr, char *font_desc)

Sets the font of the graphics context gc_ptr and drawable drawable_id for further string printing operations. See use in X11Bitmap class, where the GC pointer, which is an opaque object, is encoded as an int, in order to avoid confusion with OBJECT *'s.

__ctalkX11UsingXRender (void)

Returns a boolean value of True if the program is using the X Render extension for drawing, False otherwise. To use the X Render extension, the extension and its supporting libraries must be available when the Ctalk libraries are built, and the program has not changed the default setting, normally via __ctalkX11UseRender, above.

__ctalkX11XPMFromData (void *display, int drawable_id, int gc_ptr, int x_org, int y_org, char **xpm_data)

Draw a X pixmap at the x,y position on the drawable named by drawable_id. The xpm_data argument is the declaration of the data given in a XPM file, and has the C data type char **.

__ctalkX11XPMInfo (void *display, char **xpm_data, int *width_ret, int *height_ret, int *n_colors_ret, int *chars_per_color_ret)

Returns the width, height, number of colors, and characters per color of the XPM data referred to by xpm_data

__ctalkXPMToGLTexture (char **xpm_data, unsigned short int alpha, int *width_out, int *height_out, void **texel_data_out)
__ctalkXPMToGLXTexture (char **xpm_data, unsigned short int alpha, int *width_out, int *height_out, void **texel_data_out)

Read the XPM data pointed to by xpm_data, and return the OpenGL texture data pointed to by texel_data_out.

The alpha parameter defines the texture data transparency and should be in the range 0 - 0xffff. The alpha channel’s effect may not be apparent in the image that is displayed, because OpenGL has its own set of functions to perform texture blending.

For Mesa OpenGL implementations, like those found on Linux systems, textures have the format GL_RGBA and the data type GL_UNSIGNED_INT_8_8_8_8. To define a basic 2-dimensional texture to the OpenGL API, use an OpenGL function like this.


glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, my_width, my_height, 0,
              GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, my_texel_data);

Apple OpenGL implmentations use a different internal format, so a program would define a texture from the __ctalkXPMToGLXTexture function’s output like this.


glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, my_width, my_height, 0,
              GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, my_texel_data);

Note that the function does not make any changes for 1-dimensional or 3-dimensional textures, nor for textures that might be rendered as mipmaps. The specific texture parameters depend on the nature of the texture and the surface that it’s applied to... in most cases, though OpenGL works best with a XPM that has a geometry that is an even multiple of 2; e.g., 512x512 or 1024x1024 pixels.

Both functions are similar, and generic enough to work with any OpenGL toolkit - the main difference is that either of the functions can be implemented for either a GLUT or GLX development environemnt independently, and that the GLX version is compatible with 64-bit machines.

__ctalkXftAscent (void)

Returns an int with the currently selected font’s height in pixels above the baseline.

__ctalkXftDescStr (void)

Returns a string with the font descriptor of the currently selected font that containing the attributes that the Ctalk Xft library uses: family, point size, slant, and weight.

For the complete descriptor string that the Freetype library derives from the selected font’s pattern, refer to the __ctalkXftSelectedFontDescriptor function.

__ctalkXftAscent (void)

Returns an int with the currently selected font’s height in pixels below the baseline.

__ctalkXftFgRed (void)
__ctalkXftFgGreen (void)
__ctalkXftFgBlue (void)
__ctalkXftFgAlpha (void)

Returns int values 0-0xffff for the selected font’s red, green, blue, and alpha values.

__ctalkXftRed (unsigned short val)
__ctalkXftGreen (unsigned short val)
__ctalkXftBlue (unsigned short val)
__ctalkXftAlpha (unsigned short val)

Set the current Xft font’s foreground color channels individually. The value of the argument must be between 0 and 65535 (0xffff hex).

__ctalkXftFontPathFirst (char *pattern)

Return the path of the first font file that matches pattern. If pattern is ‘*’ or an empty string (‘""’), return the first path of all the fonts that are available to the library.

__ctalkXftFontPathNext (void)

Return a string containing the path of the next font file that matches the pattern given to __ctalkXftFontPathFirst (), above.

__ctalkXftGetStringDimensions (char *str, int *x, int *y, int *width, int *height, int * rbearing)

Return the x and y origin, and width and height of str in the currently selected FreeType font. Because the dimensions are absolute, x and y are normally 0. If the Xft library is not initialized or not available, the function returns 0 for all of the dimensions. If the library is initialized but the application hasn’t yet specified a font, then the value returned for rbearing is ‘0’.

Note that this function works entirely on the client side, and some uses or systems may not be compatible with it. For cases like those, refer to the server-side function, See ctalkXftTextDimensionsBasic.

__ctalkXftHandle (void)

Returns a void * with the handle of the selected font. Typically this is a cast from a XftFont * when used in a normal Xft configuration. The font library uses this value whenever the font’s face is requested after it is first initialized with the parameters from the font specification: i.e., when the family, weight, slant, height, and spacing haven’t changed since the app first opened the font.

__ctalkXftHeight (void)

Returns an int with the font’s height above and below the baseline in pixels, and including any additional vertical spacing.

__ctalkXftInitLib (void)

Initializes the Freetype outline font library. If Ctalk isn’t built with libXft or Fontconfig support, this function returns ERROR (‘-1’. This is the only Xft-related function to return silently; all other functions exit with an error message. However applications can check the X11Pane : haveXft instance variable to determine if the libraries were initialized. See haveXft.

If the system is not configured to use outline fonts See X11FreeTypeFont, then the function prints a message and exits the program. If the library is already initialized, then this function returns SUCCESS0’.

__ctalkXftInitialized (void)

Returns TRUE if the FreeType font library is available and initialized, FALSE otherwise.

__ctalkXftIsMonospace (void)

A read-only function that returns ‘true’ if the program’s selected font is monospace, false otherwise.

__ctalkXftListFontsFirst (char *xftpattern)

Initializes the FreeType library to list fonts and returns a char * that contains the first font descriptor that contains the string xftpattern. If xftpattern is emtpy (‘""’) or ‘*’, then the function returns the first font, and the following calls to __ctalkXftListFontsNext () match all of the fonts available to the FreeType library.

__ctalkXftListFontsNext (void)

Returns a char * with the next matching font descriptor of a font listing initialized by __ctalkXftListFontsFirst ().

__ctalkXftListFontsNext (void)

Cleans up after a series of list fonts function calls.

__ctalkXftMajorVersion (void)

Returns an int with the Xft library’s major version number. Like all libXft library functions, __ctalkXftMajorVersion causes the program to exit with an error if Ctalk is built without libXft support.

__ctalkXftMaxAdvance (void)

Returns an int with the maximum horizontal dimension in pixels of any of the selected font’s characters.

__ctalkXftMinorVersion (void)

Returns an int with the Xft library’s minor version number. Returns an int with the Xft library’s major version number. Like all libXft library functions, __ctalkXftMinorVersion causes the program to exit with an error if Ctalk is built without libXft support.

__ctalkXftQualifyFontName (char *pattern)

Return the qualified font name string for pattern.

__ctalkXftRequestedFamily (void)
__ctalkXftRequestedPointSize (void)
__ctalkXftRequestedSlant (void)
__ctalkXftRequestedWeight (void)
__ctalkXftRequestedDPI (void)

Returns the font attributes requested after parsing a Fontconfig string by __ctalkXftSelectFontFromFontConfig and __ctalkXftSelectFontFromXLFD.

Note: The caching in the recent Ctalk and font libraries has rendered these functions mostly redundant. Programs should use the equivalent __ctalkXftSelected* functions instead.

__ctalkXftTextDimensionsBasic (void *display, unsigned int drawable, unsigned gc_ptr, char *str, int *x, int *y, int *width, int *height, int * rbearing)

Returns the dimensions of str in the currenly selected font. Unlike the function __ctalkXftGetStringDimensions, which works entirely within a client app’s process space, this function directs the server process to perform the measurements.

__ctalkXftRevision (void)

Returns an int with the Xft library’s revision number. Returns an int with the Xft library’s major version number. Like all libXft library functions, __ctalkXftRevision causes the program to exit with an error if Ctalk is built without libXft support.

__ctalkXftSelectFontFromFontConfig (char *fontDesc)

Parses a Fontconfig font descriptor and selects the font. For information about selecting fonts using Fontconfig descriptors, refer to the X11FreeTypeFont class. See X11FreeTypeFont.

__ctalkXftShowFontLoad (int warningLevel)

Enables or disables the display on standard output of fonts that the library is loading. The Ctalk library defines the following constants.


XFT_NOTIFY_NONE
XFT_NOTIFY_ERRORS
XFT_NOTIFY_LOAD
XFT_NOTIFY_VERBOSE

See also __ctalkXftVerbosity.

Note that programs should call this function before launching any processes. Generally, this is before the program calls the X11Pane : openEventStream method. Otherwise, the program will only display message for the process that this function was called from.

__ctalkXftSelectedFamily (void)

Returns a char * string that contains family of the selected font.

__ctalkXftSelectedPointSize (void)

Return the point size of the selected font as a C double.

__ctalkXftSelectedSlant (void)

Returns an int that contains slant of the selected font.

__ctalkXftSelectedFamily (void)

Returns a String that contains font’s style parameter, if any.

__ctalkXftSelectedSlant (void)

Returns an int that contains slant of the selected font.

__ctalkXftSelectedFontDescriptor (void)

Returns a char * string that contains the descriptor of the selected font.

__ctalkXftSelectedFontDescriptor (void)

Returns a char * string that contains the file path descriptor of the selected font.

__ctalkXftSelectFont (char *family, int slant, int weight, int dpi, double point_size)

Selects the FreeType font that matches the arguments. Returns 0 if successful in matching the font given by the arguments. If no matching font is found, the current font does not change, and the method returns -1. The selectFont method (class X11FreeTypeFont contains a description of the parameters recognized by the function. See X11FreeTypeFont-selectFont.

__ctalkXftSelectFontFromXLFD (char *xlfd)

Selects fonts in the FreeType font library using a XLFD specification. When selecting outline fonts: the libraries use the fields: family, weight, slant, dpi-x, and pixel height. An example XLFD would be the following.


-*-Nimbus Sans L-medium-r-*-*-12-72-*-*-*-*-*-*

Note that the function does not translate between bitmap and outline font families - the font libraries pick the closest match to the font metrics given in the XLFD, regardless of type style.

Also, the outline font libraries use a single dpi metric for both the vertical and horizontal dot pitch of the display, so only the ‘resx’ field of the XLFD is actually used.

__ctalkXftSetForegrounc (int red, int green, int blue, int alpha)

Sets the red, green, blue, and alpha values for the selected font. The values are ints and have a range of 0-0xffff.

__ctalkXftSetForegroundFromNamedColor (String colorName)

Sets the selected outline font’s red, green, and blue values from the named X11 color given as the argument.

__ctalkXftSelectedFontDescriptor (void)

Return the font descriptor of the selected font as a char *.

__ctalkXftVerbosity (void)

Returns the current Xft message reporting level. The values that are defined in ctalk/ctalkdefs.h are:


XFT_NOTIFY_NONE
XFT_NOTIFY_ERRORS
XFT_NOTIFY_LOAD
XFT_NOTIFY_VERBOSE

See also __ctalkXftShowFontLoad.

__ctalkXftVersion (void)

Returns an int with the Xft library’s version number, which is (__ctalkXftMajorVersion () * 10000) + (__ctalkXftMinorVersion * 100) + __ctalkXftRevsion ().

__ctalk_arg (char *rcvr, char *method,void *arg)

Define an argument for the following __ctalk_method () call.

__ctalk_arg_cleanup (OBJECT *result)

Remove an argument used by the previous method call. If used within an expression, then result, the return object of the previous method call, may not be NULL. If used after a __ctalk_method () call, then result may be NULL.

__ctalk_arg_internal (int n_th_arg)

Return the n_th_arg that method was called with, as an OBJECT *. The first argument’s index on the stack is 0 within the caller’s argument frame, and the last argument is method -> n_params - 1.

__ctalk_arg_value_internal (int n_th_arg)

Return the value object of the n_th_arg that method was called with, as an OBJECT *, if available. If it isn’t (for example, if the value instance variable is used as an argument alone, and not the parent object), then the function returns the argument object.

As with __ctalk_arg_internal (), The first argument’s index on the stack is 0 within the caller’s argument frame, and the last argument is method -> n_params - 1.

__ctalk_arg_pop (void)
__ctalk_arg_pop_deref (void)

Removes and returns the last object pushed onto the argument stack. __ctalk_arg_pop_deref also decreases the object’s reference count by one.

__ctalk_class_initialize (void)

Called by __ctalk_init () to perform any neeeded initialization the before any classes are defined.

__ctalk_define_class (ARG**args)

The primitive method that Ctalk executes when it encounters the ‘class’ keyword.

__ctalk_dictionary_add (OBJECT*object)

Add an object to the Ctalk global dictionary, or, if the object is a class object, to the class library.

__ctalk_exitFn (int app_exit)

Called just before a return statement when returning from a C function. If the function is main, then app_exit should be non-zero, to indicate that the program is finished, and to clean up the global objects and the class library.

__ctalk_initFn (void)

Called at the beginning of a function to register the function’s name.

__ctalk_initLocalObjects (void)

Called during method or function initialization to delete old local objects before creating new objects.

__ctalk_get_object (char *name, char *classname)
__ctalk_get_object_return (char *name, char *classname)

Retrieves the object name. If classname is non-null, retrieves the object by name and class.

The __ctalk_get_object_return function is similar, but it is used only as an operand to a return keyword. The function checks the call stack’s local object cache, in case an expression cleanup removed the most recent call’s local variable list during recursive or successive calls of the same method.

__ctalk_init (char *program_name)

Initialize the Ctalk class libraries when the program starts. The argument, program_name is normally argv[0].

__ctalk_method (char *rcvr_object_name, OBJECT *(method_fn *)(), char *method_name)

Perform a simple Ctalk method call, in places where the call can be used after one or more calls to __ctalk_arg and followed by __ctalk_arg_cleanup. For complex expressions or expressions occurring within control structures, Ctalk normally uses __ctalkEvalExpr instead.

__ctalk_new_object (ARG **args)

The primitive function that is called by the ‘new’ method.

__ctalk_primitive_method (char *rcvr_name, char *method_name, int attrs)

Call primitive method method_name with receiver rcvr_name. The attrs argument can be METHOD_SUPER_ATTR, which uses the receiver’s superclass as the receiver redirects the method’s arguments to a superclass method.

__ctalk_process_exitFn (int app_exit)

Similar to __ctalk_exitFn, above, except that the function is meant to be invoked by child processes on exit, so it does not try to manage other child processes.

__ctalk_receiver_pop (void)

Pops the most recent receiver object off the receiver stack and returns it.

__ctalk_receiver_push (OBJECT *object)

Push object onto the receiver stack, without changing its reference count. This can be useful in conjunction with __ctalk_receiver_pop to quickly retrieve the current receiver object.


 currentReceiver = __ctalk_receiver_pop ();
 __ctalk_receiver_push (currentReceiver);

__ctalk_register_c_method_arg (char *decl, char *type, char *qualifier, char *qualifier2, char *storage_class, char *name, int type_attrs, int n_derefs, int initializer_size, int scope, int attrs, void *var)

Registers a C variable for use as an argument in the following method call. The arguments provide the information given by the variable’s declaration so that it can be re-created by Ctalk. The last parameter, var, contains the address of the actual C variable in memory.

There are also abbreviated versions of __ctalk_register_c_method_arg, __ctalk_register_c_method_arg_b|c|d, which work similarly but don’t try to handle syntax elements that aren’t present in the variable’s declaration.

__ctalk_self_internal (void)

Return the current method’s receiver object as an OBJECT *.

__ctalk_self_internal (void)

Return the current method receiver’s value instance variable as an OBJECT * if it exists, or the receiver object otherwise (for example, if the receiver is the value instance variable itself instead of the parent object).

__ctalk_set_global (char *name, char *classname)

Adds the object name of class classname to ctalk’s global dictionary. This function is normally called during program initialization.

__ctalk_set_local (OBJECT *obj)
__ctalk_set_local_by_name (char *obj_name)

Make obj a method- or function-local object. This function is normally called during a method or function’s initialization when the local objects are created with a new method. The __ctalk_set_local_by_name function is similar, except that it retrieves the global object by looking up its name in the global dictionary.

__ctalk_to_c_char (OBJECT *obj)

Returns the value of obj as a C char if possible. If the value is an ASCII code, converts the value to the actual char.

__ctalk_to_c_char_ptr (OBJECT *obj)

Returns the value of obj as a C char *. This function has been mostly replaced by __ctalkToCCharPtr, which you should use instead.

__ctalk_to_c_double (OBJECT *obj)

Returns the value of obj as a C double. This function performs the conversion with the C library function strtod. Currently only supports the translation of base 10 values.

__ctalk_to_c_int (OBJECT *obj)

Returns the value of obj as a C int. This function handles values in hexadecimal, octal, using the C library function strtol, and binary, using Ctalk’s internal routines. Also handles ASCII-to-char conversions if the argument is a Character object.

__ctalk_to_c_longlong (OBJECT *obj)

Returns the value of obj, which is normally an instance of LongInteger class, as a C long long int. This function uses the C library function strtoll to perform the conversion. Currently only handles LongInteger object values in base 10.

__ctalk_to_c_ptr (OBJECT *o)

Translate the value of an object into a C void *. If the value isn’t a pointer, then return the address of the value in memory.

__ctalk_to_c_ptr_u (OBJECT *o)

Translate the value of an object into a C void *. This is an unbuffered verson of __ctalk_to_c_ptr (), above. That is, if the value of the object is an empty string, ‘(NULL)’, or ‘0x0’, it returns NULL. This allows you to compare objects to NULLs in C expressions without the generating compiler warnings.

(X11TextEditorPane class)

__edittext_delete_char (OBJECT *x11texteditorpane_object)
__edittext_insert_at_point (OBJECT *x11texteditorpane_object, int keycode, int shift_state, int keypress)
__edittext_line_end (OBJECT *x11texteditorpane_object)
__edittext_line_start (OBJECT *x11texteditorpane_object)
__edittext_xk_keysym (int keycode, int shift_state, int keypress)
__edittext_next_char (OBJECT *x11texteditorpane_object)
__edittext_next_line (OBJECT *x11texteditorpane_object)
__edittext_next_page (OBJECT *x11texteditorpane_object)
__edittext_prev_char (OBJECT *x11texteditorpane_object)
__edittext_prev_line (OBJECT *x11texteditorpane_object)
__edittext_prev_page (OBJECT *x11texteditorpane_object)
__edittext_scroll_down (OBJECT *x11texteditorpane_object)
__edittext_scroll_up (OBJECT *x11texteditorpane_object)
__edittext_text_start (OBJECT *x11texteditorpane_object)
__edittext_text_end (OBJECT *x11texteditorpane_object)
__edittext_point_to_click (OBJECT *x11texteditorpane_object, int pointer_x, int pointer_y)
__edittext_index_from_pointer (OBJECT *x11texteditorpane_object, int pointer_x, int pointer_y)
__edittext_insert_str_at_click (OBJECT *x11texteditorpane_object, int click_x, int click_y, char *)
__edittext_insert_str_at_point (OBJECT *x11texteditorpane_object, char *)
__edittext_get_primary_selection (OBJECT *x11texteditorpan_eobject, void **buf_out, int *size_out)
__edittext_set_selection_owner (OBJECT *x11texteditorpane_object)
__edittext_recenter (OBJECT *x11texteditorpane_object)
__edittext_get_clipboard (OBJECT *x11texteditorpane_object, void **buf_out, int *size_out);
__exittext_set_clipboard_owner (OBJECT *x11texteditorpane_object)

Text editing functions used by X11TextEditorPane objects. For more information, refer to X11TextEditorPane class.. See X11TextEditorPane.

__entrytext_set_selection_owner (void *displayPtr, unsigned int win_id unsigned long int gc_ptr)
__entrytext_get_primary_selection (OBJECT *entrypane_object)
__entrytext_update_selection (void *displayPtr, unsigned int win_id, unsigned long int gc_ptr)
__entrytext_send_selection (void *displayPtr, void * xEvent)

These functions handle requesting ownership of the X display’s primary selection, storing current values of the selection text that might be requested by other programs, and requesting the contents of the primary selection when another X application owns the selection. The functions are normally called by methods in X11TextEntryPane class that handle X events.

_error (char *fmt, ...)

Display an error message and exit the program.

__inspector_trace (int stack_index)
__inspect_get_arg (int stack_index)
__inspect_get_receiver (int stack_index)
__inspect_get_global (char *obj_name)
__inspect_get_local (int stack_index, char *obj_name)
__receiver_trace (int stack_index)
__inspect_globals (void)
__inspect_locals (void)
__inspect_short_help (void)
__inspect_long_help (void)

Functions used internally by Ctalk’s object inspector. The function parameters are designed to be consistent with the syntax of the inspector commands, although not every function makes use of them. For details refer to the inspect(3ctalk) manual page, the inspectors section of the ctalktools.info Texinfo manual, and the inspect method in ObjectInspector class.

__rt_init_library_paths (void)

Initialize Ctalk’s library paths. The function first checks the value of the ‘CLASSLIBDIRS’ environment variable for a colon-separated list of directories, then adds the location of classlibdir which is configured when Ctalk is built, and classlibdirctalk.

__warning_trace (void)

A generic stack trace function that prints a trace of the call stack wherever it is inserted in a program.

__xalloc (int size)

Allocates a block of memory of size characters and returns a pointer to the memory. If the alloc call fails, generates an _error message and exits the program.

__xfree (void **addr)

Frees the block of memory pointed to by *addr, then sets the addr to to NULL. *addr must be a block of memory previously allocated by __xalloc, above, or a similar malloc call. When used in a program, wrapping addr in the ‘MEMADDR()’ macro provides the correct dereferencing for the allocated memory and its pointer. The example shows how the ‘MEMADDR()’ macro is used.


char *my_ptr;

my_ptr = (char *)__xalloc (BUF_SIZE);

... do stuff ...

__xfree (MEMADDR(my_ptr));

__xrealloc (void **addr, int size)

Re-allocates the block of memory pointed to by *addr to size. If size is larger than the original block of memory, the contents of addr are preserved. As with __xfree, above, the ‘MEMADDR’ macro provides the correct dereferencing for the reference to addr.

_warning (char *fmt, ...)

Print a warning message.

__objRefCntInc (obj_ref)

Increment the reference count of an object and its instance variables. This function takes an object reference as its argument. You can use the OBJREF macro to cast the object to an object reference.

__objRefCntDec (obj_ref)

Decrement the reference count of an object and its instance variables. As with all of the __objRefCnt* functions, __objRefCntDec takes an object reference as its argument. You can use the OBJREF macro to cast the object to an object reference.

__objRefCntSet (obj_ref, int refcount)

Set the reference count of an object and its instance variables to refcnt. As with all of the __objRefCnt* functions, __objRefCntDec takes an object reference as its argument. You can use the OBJREF macro to cast the object to an object reference.

Note: __objRefCntSet will not set an object’s reference count to zero. That is, if you give ‘0’ as the second argument, the call has no effect. Use __objRefCntZero instead. That might sound silly, but it’s much more reliable overall, in a programming-by-contract way.

__objRefCntZero (obj_ref)

Set the reference count of an object and its instance variables to 0 (zero). As with all of the __objRefCnt* functions, __objRefCntZero takes an object reference as its argument. You can use the OBJREF macro to cast the object to an object reference.

You should not need to use this function unless you’re completely deleting an object. Refer to the __ctalkDeleteObject function for more information.

obj_ref_range_chk (OBJECT **hostObj, OBJECT **targetObject)

Returns a bool value of ‘true’ or ‘false’ depending on whether the host object and the target object it references occupy the same data segment.

__refObj (OBJECT **obj1, OBJECT **obj2)

Assign obj2 to obj1. If obj1 already points to an object, decrement its reference count. Increment the reference count of obj2 by 1. When calling functions that use OBJECT ** arguments, they correspond to the OBJREF_T typedef, and Ctalk defines the macro OBJREF() to cast an object to an OBJREF_T.

_store_int (OBJECT *receiver, OBJECT *arg)

This is a primitive that stores the value of arg in receiver, which is an Integer. Checks the class of arg, and if arg is not an Integer, converts it to an Integer value. If receiver a pointer to a value, then it stores arg as a fully-fledged object.

BOOLVAL(IntegerOrBoolValue)

This macro returns the value of an Integer or Boolean object, or any of Boolean's subclasses (or just about any other scalar value), as a C bool. For an example of its use, refer to the entry for the See INTVAL_Macro.

INTVAL(IntegerObjectValue)

A macro that returns the value of an Integer object, or any of Integer's subclasses, as a C int. Uses an OBJECT *'s __o_value member directly, as in this example.


OBJECT *my_int_object_alias = myInt;

int a = INTVAL(my_int_object_alias -> __o_value);

is_zero_q (char *str)

Returns a bool if the number represented by the string evaluates to zero, false otherwise.

LLVAL(LongIntegerValue)

A macro that returns the value of a LongInteger object, or any of LongInteger's subclasses, as a C long long int. For an example of its use, refer to the entry for the See INTVAL_Macro.

obj_ref_str (char *str)

If str contains a formatted hexadecimal number of the format ‘0xnnnnnn’ that points to an object, return an OBJECT * reference to the object, NULL otherwise.

str_is_zero_q (char *str)

Like is_zero_q, above, except that it also checks for an empty string (and returns true), as well as a string that contains only the digit ‘0’, which causes the function to return false.

substrcat (char *dest, char *src, int start_index, int end_index)

Concatenate the substring of src from start_index to end_index to dest.

substrcpy (char *dest, char *src, int start_index, int end_index)

Copy a substring of src from start_index to end_index to dest.

SYMTOOBJ (SymbolValue)

This is another macro that converts a Symbol's reference to an OBJECT *. This macro can be used on the right-hand side of an assignment statement.


if ((value_object =
    SYMTOOBJ((self_object -> instancevars) ? 
             (self_object -> instancevars -> __o_value) : 
             (self_object -> __o_value))) != NULL) {
      return value_object;
    }

SYMVAL(SymbolValue)

A macro that returns the value of a Symbol object, or any of Symbol's subclasses, as a C uintptr_t *, which is guaranteed to be valid for 32- and 64-bit machines.

However, due to the way that pointers work in C, SYMVAL only works on the left-hand side of an assignment; you just need a cast (for example to OBJECT *) in order to avoid compiler warnings when it appears on the right-hand side of an assignment. Here is an example:


SYMVAL(object_alias->__o_value) = (OBJECT *)some_ptr;

However, if he label on the right-hand side is also a Symbol, the Symbol class duplicates the address that the operand points to, not the operand itself.


SYMVAL(object_alias->__o_value) = SYMVAL(some_ptr -> __o_value);

For another, perhaps more basic, example of the macro’s use, refer to the entry for the See INTVAL_Macro.

OBJREF(obj)

Creates a reference to an object. This macro returns an OBJECT **, but using the macro allows the definition of an object reference to change without affecting too much code. OBJREF is used with the __objRefCnt* functions, and in other places.

TRIM_LITERAL(s)

A macro that trims the quotes from a literal string. It expands to substrcpy (s, s, 1, strlen (s) - 2).

TRIM_CHAR(c)

A macro that trims the quotes from a literal character. It expands to substrcpy (c, c, 1, strlen (c) - 2)

TRIM_CHAR_BUF(s)

A macro that trims nested single quotes from a literal character. TRIM_CHAR_BUF also checks whether a single quote (‘'’) is the actual character.

xfopen (const char *path, const char *mode)
xfprintf (FILE *stream, const char *fmt, ...)
xfscanf (FILE *stream, const char *fmt, ...)
xmemcpy (void *s, const void *s, size_t)
xmemmove (void *s, const void *s, size_t)
xmemset (void *s, int c, size_t n)
xsprintf (char *s, const char *fmt, ...)
xstrcat (char *d, const char *s)
xstrncat (char *d, const char *s, size_t)
xstrcpy (char *d, const char *s)
xstrncpy (char *d, const char *, size_t)

These are portable wrappers for systems that #define their own (possibly more secure) versions of library functions. For the exact prototype and definition, you should consult the system’s manual page for the corresponding library function (e.g., strcpy(3) for the definition of xstrcpy).

xstdin (void)
xstdout (void)
xstderr (void)

These functions return a FILE * with the stdin, stdout, or stderr file stream. They’re useful if your compiler redefined either stdin, stdout, or stderr internally. The functions provide a consistent interface and leave any implementation details in the library, where they belong.


Next: , Previous: , Up: Top   [Index]

C

Ctalk Language Features

This section describes ctalk’s C language features and its low-level application programming interface.


Next: , Up: C   [Index]

Preprocessor

ctpp, the ctalk Preprocessor

Information about ctpp, the Ctalk preprocessor, is contained in its Texinfo manual, ctpp.info.

The preprocessor is compatible with GNU cpp and supports ISO C99 preprocessing features. This allows you to include C header files in Ctalk programs and class libraries. Ctalk caches macros from include files, so it can use, in the GNU compiler’s terminology, include once header files.

If you have a header file called, for example, myheader.h, you would wrap the definitions with the following preprocessor directives.


#ifndef _MYHEADER_H
#define _MYHEADER_H
.
. <Your definitions appear here.>
.
#endif /* _MYHEADER_H */

This makes certain that the preprocessor defines macros, data types, and other library definitions only once, no matter how many times the input includes the header file.


Next: , Previous: , Up: C   [Index]

C statements

Pragmas

Ctalk recognizes GCC, G++, and C99 pragmas.

Pragmas that apply to floating point operations and code generation are ignored and elided, unless the ‘--keeppragmas’ command line option is given. See Invoking.

Inclusion of a file that contains G++ pragmas causes the preprocessor to issue a warning if the ‘-v’ option is given, and ctalk ignores the file. See Invoking.

Here is the effect of the GCC and C99 pragmas.

#pragma interface
#pragma implementation

The include file is not processed.

#pragma GCC dependency file

Issues a warning if the source file is more recent than file.

#pragma GCC poison identifier ...

ctalk issues an error and discontinues processing if the source file contains an identifier given as an argument.

#pragma GCC system header

The ctalk preprocessor processes all input files in the same manner and ignores this pragma.

#pragma GCC pack
#pragma STDC FP_CONTRACT
#pragma STDC FENV_ACCESS
#pragma STDC CX_LIMITED_RANGE

ctalk ignores and elides these pragmas, which apply to floating point and code generation options, unless the ‘--keeppragmas’ option is used. See Invoking.

C Expressions

In version 0.66 2021-02-02, you can use simple constant expressions as receivers, as in this example.

printf ("%s", "/home/users/joe" subString 1, self length - 1);

Warning - This use of self is experimental in version 0.66 2021-02-02 and should be used with caution.

You can use a C constant in place of any receiver whose class corresponds to a basic C data type. These classes include Character, String, Float, Integer, and LongInteger.

Expressions like the following work.

if (99 == myInt)
 ...

if ('c' == myInt asCharacter)
 ...

if (3.1416 == pi)
 ...

The following code examples are equivalent.

myString = "This is a string.";
printf ("%d\n", myString length);

and,

printf ("%d\n", "This is a string" length);

However, if you try to use a C variable on the left side of a method that overloads a C operator, the expression might simply be interpreted as C code, as in this example.

  String new progName;

  progName = "myprog";

  if (argv[0] == progName) {
    ...
  }

This is because Ctalk does not interpret argv[0] as a receiver object, and then interprets == as a C operator.

Objects in Function Parameters

Programs cannot, at this time, use objects as parameters to C functions. If you need to use an object as a parameter, you need to use a method instead of a function, or translate the object’s value to C. See Translating.

Objects in Function Arguments

You can use of Ctalk expressions as C function arguments, but the values should be treated as read-only, as in this example.

Integer new myIndex;
char buf[255];

myIndex = 0;

/*
 *   This statement works correctly. 
 */
sprintf (buf, "%d", __ctalk_to_c_int (myIndex));

/*
 *   This statement does not work correctly.
 */
sscanf (myString, "%s %s", mySubString1, mySubString2);

If you need to read a string into objects, try readFormat (class String) instead.

If you receive an Unimplemented C type warning, it means that Ctalk does not implement a class that corresponds to the data type. In these cases, you can generally assign the C variable to an instance of class Symbol, and use that as the argument to a function.

The Classes that implement C data types are described in the next section.

C Data Type Classes

These classes correspond to the basic C types.

Array

char **

Character

char

Float

float and double

Integer

int and long int

LongInteger

long long int

String

char *

Typedefs in Function Arguments

Ctalk resolves many of the derived types defined in C99, as well as incomplete types; however, variables that are of derived types can still cause unpredictable results, if the variable is of an unusual or complex type.

If you encounter a case where a derived type confuses the parser or run-time library, the workaround is to declare the type as an equivalent C type. For example, if a variable is of type time_t, you could equivalently declare it as type long long int.

C Functions in Complex Expressions

You can use C functions in complex expressions within conditionals, as in this example.

int int_fn1 (void) {
  return 10;
}

char *add_int_fn_as_string (int a, int b, int c) {
  static char buf[30];
  sprintf (buf, "%d", a + b + c);
  return buf;
}

int main () {

  String new myString1;

  if ((myString1 = add_int_fn_as_string (int_fn1 (), 20, 30)) != "60")
    exit(1);
    
  printf ("%s\n", myString1);

}

As long as your function returns one of the C data types int, char, char *, or double, Ctalk can translate the function output to an object, as well as call the function at run time using a method call.

If you try to use a C function that returns a complex or derived type, Ctalk prints a warning and uses Integer as the default return class. In these cases, you should consider writing a method instead.

Note: When you use functions in complex expressions, the function’s arguments must also be C variables or expressions. If you want to use objects as the arguments to a function, then you must perform the object-to-C translation manually.

Debugging

Object Inspectors

Ctalk provides a basic set of methods that can inspect and print the contents of objects.

The inspect method in Object class is an interactive utility that lets you examine a program’s objects as the program is running.

To inspect an object, simply send it the message, inspect - it’s a shortcut for the inspect method in ObjectInspector class, which a program can also call directly.


String new globalString;

int main () {
  Integer new i;

  globalString = "global string";

  i inspect;
}

In either case, the program stops execution when it reaches the inspect method, and presents a prompt where you can type commands.

Here’s a transcript of a brief inspector session.


$ ./inspect 
> p
p
name:       i
class:      Integer (0x48bf4958)
superclass: Magnitude (0x48bf29f0)
value:      (null) (Integer)

> p g globalString
p g globalString
name:       globalString
class:      String (0x48cce8d0)
superclass: Character (0x48c8acc0)
value:      global string (String)

> c
c
$ 

At the inspector prompt, ‘> ’, the command ‘p’ prints the inspector’s receiver object, and ‘p g globalString’ prints the named global object, globalString. The ‘c’ command exits the inspector and continues running the program.

There are several commands that the inspector recognizes. Typing ‘?,’ ‘h,’ or ‘help’ at the prompt displays a list of them.

The inspector uses the method formatObject to print the contents of individual objects.

If you want to print a formatted object directly, without stopping the program, Ctalk also has the method dump in Object class, which simply calls formatObject with its receiver object to print the object and then returns so the program can continue running.

Using gdb for Debugging

The GNU gdb debugger allows you to trace through Ctalk applications as well as the compiler and the run-time libraries, at the level of Ctalk’s source code.

In order to debug Ctalk programs with gdb, the source must be compatible with the debugger; that means that you can debug Ctalk programs using the intermediate C code to get source level debugging within Ctalk apps.

You can also examine the contents of objects and their run-time environment with the inspect method (in Object class), which doesn’t use line number information. See Object_inspect. There’s a tutorial on using object inspectors in the ctalktools Texinfo manual, and yet more information in the inspect.3ctalk manual page.

The ‘-P’ command line option disables line numbering. You can then debug the intermediate output, which is normal C that gdb can interpret correctly.

This means that method line numbers are calculated from the start of all of the input, which includes all other classes and header files. So when you give the ‘-P’ option to Ctalk, it reports the line if possible, although without line number information, the compiler can’t track line numbers of preprocessor output; like for example, by adjusting line numbers after including a file with the ‘#include’ directive.

The ctdb command builds Ctalk programs with the correct arguments for debugging. Then you can use gdb to debug the program.

$ ctdb -k myprog.c -o myprog

If you need to debug either ctalk or the libctalk library, then you need to build and install Ctalk without optimization. You can do that by adding the ‘--without-optimization’ option to configure when building Ctalk. Compiler optimization often removes lines of code (and variables) from the binary, so the output often doesn’t correspond to the source code. Also, it often helps to add the ‘--without-inline-functions’ option to configure.


$ ./configure --without-inline-functions --without-optimization

Then build and install Ctalk with make and make install.

Ctalk also provides other build options. Typing

$ ./configure --help

at the shell prompt prints a list of them.

Ctalk is compatible at the machine code level with C programs. That means you use most of gdb's functions, like peek into a running program and examine core dumps. The gdb documentation describes the debugger’s extensive set of options.


Next: , Previous: , Up: C   [Index]

Externs

Externs

Ctalk provides a few facilities to help when compiling code in several input modules.

There are also a few caveats when dealing with C variables in multiple input modules, which are described below.

Ctalk allows you to prototype methods. That is, you can declare a method in a source code module before compiling another module later where the method is actually defined.

Prototypes are similar to method declarations, except that the prototype omits the method body. For example, a method prototype before the method is first used would look like this.

String instanceMethod myLength (void);

You can also define a different return class in the prototype, as in this example.

String instanceMethod myLength (void) returnClass Integer;

For example, if the input file module1.ca looks like this:


String instanceMethod trimStrLength (void) returnObjectClass Integer;

int main () {

  String new myStr;

  myStr = "Hello, world!";

  printf ("%s\n", myStr subString 0, myStr trimStrLength 2);
}

and the file module2.ca, which contains the definition of trimStrLength, looks like this:


String instanceMethod trimStrLength (void) {
  returnObjectClass Integer;
  return self length - 1;
}

Then you can build the program with a command line like the following, and Ctalk will have the definition of trimStringLength while compiling module1.ca, before it actually compiles the method in module2.ca.


$ ctcc module1.ca module2.ca -o myprog

C Variables and extern Declarations

When using a global C variable in several input modules, you only need to declare it once, before it is first used. Ctalk combines the C code of all of the input files with one copy of the class libraries, so it isn’t necessary to declare a C variable in the first module and then declare it as extern in the modules that get compiled later.


Next: , Previous: , Up: C   [Index]

Class casting

Class casting

In many cases, it’s obvious which class an object is, even when the object’s defition is removed from the place where a program needs to perform an operation on it, or the object is aliased to self or to a C variable, or you need to use a different type of language semantics with an object.

If a program has a set of expressions, as in this hypothetical example:


Integer new myInt;
myList new myList;
Key new myKey;
Symbol new *intPtr;

*intPtr = Integer new "Int 1", "1";
myList push *intPtr;
*intPtr = Integer new "Int 2", "2";
myList push *intPtr;

myKey = myList + 1;

myInt = *myKey;

myInt += 3;

... do stuff with myInt ...

myList map {
  printf ("%d\n", self value);
}

When run, the program would produce output like this.


$ ./myProg
1
2

That’s because the changes to myInt would not take effect for the member of ‘myList’, because Integer objects, when a program assigns values to them, normally assigns the value of one Integer to another. However, in the example above, you might want to work on the original list member - that is, you want the assignment to treat myInt as if it were a reference.

One way to notify Ctalk of this is to use an Object to refer to the list element, and use a class cast to notify Ctalk that the Object is actually an Integer.

Then the program example above looks like this.


Object new myIntObject;
myList new myList;
Key new myKey;
Symbol new *intPtr;

*intPtr = Integer new "Int 1", "1";
myList push *intPtr;
*intPtr = Integer new "Int 2", "2";
myList push *intPtr;

myKey = myList + 1;  

myIntObject = *myKey;

(Integer *)myIntObject += 3;  /* The cast tells Ctalk to treat myIntObject,
                                 which is declared as an Object,
                                 as an Integer, so it can work correctly
                                 with the first element of myList. */

... do stuff with myIntObject ...

myList map {
  printf ("%d\n", self value);
}

Other places that you can use class casting is when a program uses a C OBJECT *. In that case, you can tell Ctalk what class the object is. Here’s an abbreviated example from a map method in TreeNode class.


  OBJECT *t, *list_elem;

  /* rcvr_obj is a TreeNode object. */
  for (t = __LIST_HEAD(rcvr_obj), have_break = NULL; 
       t && !have_break; t = t -> next) {
    list_elem = obj_ref_str ((t -> instancevars) ? 
			     t -> instancevars -> __o_value :
			     (IS_VALUE_INSTANCE_VAR(t) ? 
			      t -> __o_p_obj -> instancevars -> __o_value :
			      "0x0"));

  ... do stuff ...

  (TreeNode *)list_elem children __mapChildren methodfn;

  (TreeNode *)list_elem siblings __mapSiblings methodfn;

  }

This is a convenient way for a program to tell Ctalk that list_elem is a TreeNode object. It’s up to the program to ensure that the C variable actually does point to an object of that class, or the program won’t work correctly at run time.

Programs can also cast self to a class, in cases where Ctalk cannot determine self's class from its context, like in this example


myList map {

  (Float *)self = 0.01f;

}

This feature is still experimental, and you should use it with caution; in particular, it’s up to the program to insure that the object actually is a member of the class that you cast it to. However, on the occasions when a program needs to excercise some control over a set of expressions’ semantics, then class casting can be useful.


Next: , Previous: , Up: C   [Index]

Control structures

Control Structures

Generally, Ctalk objects work the same as C variables when they appear in if, for, while, switch, and do-while statements.

If Ctalk cannot figure out a way to resolve an expression that contains both C variables or functions and objects, it will try to warn you.

One exception to these rules are the methods that perform logical negation operator, which generally overload the ‘!’ math operator. When you place a ‘!’ operator at the beginning of a conditional, Ctalk checks whether the class of the expression’s result overloads the operator. In that case, Ctalk treats ‘!’ as a method. If a class does not overload the operator, then Ctalk treats it as a C operator.

That way, you can overload ‘!’ in classes that define complex objects, which provides a flexible way to determine if an object has been initialized or contains valid data.

For example, in X11Font class, you can overload the ‘!’ operator to check whether or not an object’s fontId instance variable is zero to determine whether or not the object refers to a valid font.

If a class doesn’t overload ‘!’, then Ctalk uses the C semantics for the operator - that is, it simply checks whether an operand is zero (or NULL) or non-zero, and inverts the logical true or false value of the operand.

In addition, Ctalk provides many methods to iterate over collections of objects. These methods include map, mapInstanceVariables, mapClassVariables, and overloaded math operators like those in Key class.

For a complete description of the control structures Ctalk uses, refer to the Ctalk Tutorial.


Next: , Previous: , Up: C   [Index]

OBJECT typedef

OBJECT typedef

At the lowest level, ctalk declares objects as pointers to an OBJECT struct. You can access an object’s members if you assign an object’s value to a C variable of the type OBJECT *, as in this example.

Object new myObject;
OBJECT *myObjectValue;

myObjectValue = myObject value;

if (!strcmp (myObjectValue -> CLASSNAME, "Object"))
   printf ("myObjectValues class is, \"Object.\"\n");

The declaration of the OBJECT type is contained in include/object.h.

typedef struct _object OBJECT;
. . .
struct _object {
  char sig[16];
  char __o_name[MAXLABEL];
  char __o_classname[MAXLABEL];
  OBJECT *__o_class;
  char __o_superclassname[MAXLABEL];
  OBJECT *__o_superclass;
  OBJECT *__o_p_obj;
  VARTAG *__o_vartags;
  char *__o_value;
  METHOD *instance_methods,
    *class_methods;
  int scope;
  int nrefs;
  int attrs
  struct _object *classvars;
  struct _object *instancevars;    
  struct _object *next;
  struct _object *prev;
};

Note that __o_name, __o_classname, __o_superclassname, and __o_value are all char *, even if the object belongs to a class like Integer or Float. The struct members __o_class and __o_superclass contain pointers to the library class and superclass entries, which are also objects.

For numeric classes, the value member contains a formatted representation of a numeric value. Examples of directly assigning values to objects are given in the section about writing methods. See Method API.

Ctalk uses the members instance_methods, class_methods, classvars for class objects.

The sig member contains a numeric stamp that verifies that the OBJECT * refers to a valid object.

The scope member describes an object’s scope. The scope can be one of GLOBAL_VAR, LOCAL_VAR, ARG_VAR, RECEIVER_VAR, PROTOTYPE_VAR, or BLOCK_VAR.

The nrefs member keeps track of the number of references that exist to an object at run time. Every time ctalk creates a reference to an object, internally ctalk increments nrefs. When ctalk deletes a reference, it decrements nrefs. When nrefs drops to zero, ctalk deletes the object.

The attrs member is a combination of one or more object attributes. The next section describes object attributes in more detail.

The tag member is an abbreviation for the __o_vartags -> tag -> var_decl -> name member; that is, the object’s primary label.


Next: , Previous: , Up: C   [Index]

Attributes

Object Attributes

The Ctalk API defines a number of object attributes. The attributes help identify the context that the object appears in. Many of the attributes are only meaningful internally; some are also useful in the method API.

The attributes are defined in ctalkdefs.h, which you can include in class libraries. To set an object’s attribute, it’s generally convenient to use the __ctalkSetObjectAttr () library function, which has the prototype:


__ctalkSetObjectAttr (OBJECT *object, int attr)

Many attributes are only used by Ctalk internally. The attributes that are useful in methods are defined in ctalkdefs.h. Those attributes, and their values and uses, are listed here.

OBJECT_IS_VALUE_VAR (1 << 0)

The object is the value instance variable of its parent object.

OBJECT_VALUE_IS_C_CHAR_PTR_PTR (1 << 1)

Used to indicate that an object refers to a char ** C array.

OBJECT_IS_NULL_RESULT_OBJECT (1 << 2)

Indentifies an object that is created when an operation produces a NULL result.

OBJECT_HAS_PTR_CX (1 << 3)

Set when an object appears on the left-hand side of an equation with a pointer reference; e.g.,


*mySymbol = __ctalk_self_internal ().

OBJECT_IS_GLOBAL_COPY (1 << 4)

Set when a program copies a global object.

OBJECT_IS_I_RESULT (1 << 5)

Identifies temporary objects that are the result of an operation that sets the object tag’s pointer references.

OBJECT_IS_STRING_LITERAL (1 << 6)

Used to identify an object created to represent a string literal.

OBJECT_IS_MEMBER_OF_PARENT_COLLECTION (1 << 7)

Indicates that an object (generally a Key object) is a member of a parent collection. Normally used to identify individual collection members.

OBJECT_HAS_LOCAL_TAG (1 << 8)

Indicates that an object’s tag was created as a placeholder for an ad-hoc object; for example, objects created by a basicNew method. The local tag is not necessarily the primary tag - the object can also acquire other tags when being assigned. Normally this attribute is set by the __ctalkAddBasicNewTag () library function.

OBJECT_IS_DEREF_RESULT

Set by the Object : -> method. The attribute is used to indicate that the receiver of -> is the result of a previous call to ->; i.e., the expression contains several dereference operators; for example, ‘myObject -> instancevars -> __o_value’.


Next: , Previous: , Up: C   [Index]

C library functions

C Library Functions

You can assign the result of a C library function to a Ctalk object, provided that the return type of the function has a corresponding Ctalk class.

All C functions must have prototypes. The library functions in this section already have their prototypes defined in the C library headers. If a function in a program does not have a prototype, Ctalk prints an error and exits.

Generally, if Ctalk has a method that is analogous to a C library function, you can use the method with Ctalk objects, although in many cases you can mix objects and C variables. Of course, you can still use any C library function with C data types.

There are some incompatibilities with more specialized libraries. For example, you should take care when using the X Window System Xt widgets in Ctalk programs, because the widget classes use the some of the same class names as the Ctalk library.

The following sections describe the C library functions that Ctalk can use directly.


Next: , Up: C library functions   [Index]

abs

abs Function


#include <stdlib.h>

Integer new i;

i = abs (3);


Next: , Previous: , Up: C library functions   [Index]

acos

acos Function


#include <math.h>

Integer new i;

i = acos (0.5);

Ctalk does not check if the argument is outside the range -1 to 1 and does not check for an error. Refer to the, acos, manual page.


Next: , Previous: , Up: C library functions   [Index]

acosh-asinh-atanh

acosh, asinh, and atanh Functions


#include <math.h>

Float new myFloat;

myFloat = acosh (2.0);

Ctalk does not check the range of the arguments or errors. Refer to the, acosh(3), asinh(3), and atanh(3) manual pages.


Next: , Previous: , Up: C library functions   [Index]

asctime

asctime Function


#include <time.h>

time_t t;
struct tm *time_struct;
String new s;

time (&t);
time_struct = localtime (&t);
s = asctime (time_struct);

Note: Ctalk does not have a class corresponding to a struct tm *. An explicit assignment of a struct tm * to a Symbol passes the address to asctime. See Objects in Function Arguments.


Next: , Previous: , Up: C library functions   [Index]

asin

asin Function

#include <math.h>

Float new f;

f = asin (0.5);

Note that ctalk does not perform any range checking of the argument.


Next: , Previous: , Up: C library functions   [Index]

atexit

atexit Function

#include <stdlib.h>

Integer new i;

i = atexit (exitfunc);


Next: , Previous: , Up: C library functions   [Index]

atof

atof Function

#include <stdlib.h>

Float new pi;

pi = atof ("3.1416");

Next: , Previous: , Up: C library functions   [Index]

atoi

atoi Function

#include <stdlib.h>

Integer new i;

i = atoi ("35");

Next: , Previous: , Up: C library functions   [Index]

atol

atol Function

#include <stdlib.h>

Integer new i;

i = atol ("35");

Note that, Integer, class corresponds to the C types, int, and, long int.


Next: , Previous: , Up: C library functions   [Index]

atoll

atoll Function

#include <stdlib.h>

LongInteger new i;

i = atoll ("35");

Note: The atoll(3) function is not implemented by the OS X or DJGPP C libraries. Use atol(3), strtoll(3), or a method instead.


Next: , Previous: , Up: C library functions   [Index]

calloc

calloc Function

#include <stdlib.h>

Integer new n;
Integer new size;
int *intbuf;

n = 10;
size = sizeof (int);

intbuf = calloc (n, size);

Next: , Previous: , Up: C library functions   [Index]

cbrt

cbrt Function

#include <math.h>

Float new f;

f = cbrt (9.0);


Next: , Previous: , Up: C library functions   [Index]

ceil

ceil Function

#include <math.h>

Float new f;

f = ceil (3.5);


Next: , Previous: , Up: C library functions   [Index]

chdir

chdir Function

Integer new result; String new dirName;

dirName = "mySubdir";

result = chdir (mySubdir);


Next: , Previous: , Up: C library functions   [Index]

clock

clock Function

#include <time.h>

Integer new i;

i = clock ();

Next: , Previous: , Up: C library functions   [Index]

copysign

copysign Function

#include <math.h>

Float new f;

f = copysign (3.0, -1.0);

Next: , Previous: , Up: C library functions   [Index]

cos

cos Function

#include <math.h>

Float new f;

f = cos (45.0);

Next: , Previous: , Up: C library functions   [Index]

cosh

cosh Function

#include <math.h>

Float new f;

f = cosh (45.0);

Next: , Previous: , Up: C library functions   [Index]

ctime

ctime Function

#include <time.h>

time_t t;
String new s;

time (&t);
s = ctime (&t);

Note: There is not a portable way to take the address of an object with ‘&’, although it may be possible to perform the translation manually in some cases. If the argument must be an object, then use the cTime (class CTime) method instead.


Next: , Previous: , Up: C library functions   [Index]

difftime

difftime Function


#include <time.h>

Float new f;

f = difftime (time1, time0);


Next: , Previous: , Up: C library functions   [Index]

erf

erf Function


#include <math.h>

Float new f;

f = erf (0.5);


Next: , Previous: , Up: C library functions   [Index]

erfc

erfc Function


#include <math.h>

Float new f;

f = erfc (0.5);


Next: , Previous: , Up: C library functions   [Index]

exp

exp Function


#include <math.h>

Float new f;

f = exp (2);


Next: , Previous: , Up: C library functions   [Index]

expm1

expm1 Function


#include <math.h>

Float new f;

f = expm1 (1.05);


Next: , Previous: , Up: C library functions   [Index]

fabs

fabs Function


#include <math.h>

Float new f;

f = fabs (-1.05);


Next: , Previous: , Up: C library functions   [Index]

fclose

fclose Function


#include <stdio.h>

Integer new i;

i = fclose (fileHandle);


Next: , Previous: , Up: C library functions   [Index]

fegetround

fegetround Function


#include <fenv.h>

Integer new i;

i = fegetround ();


Next: , Previous: , Up: C library functions   [Index]

feholdexcept

feholdexcept Function


#include <fenv.h>

Integer new i;

i = feholdexcept (fe_envp);


Next: , Previous: , Up: C library functions   [Index]

feof

feof Function


#include <stdio.h>

Integer new i;

i = feof (fileStream);


Next: , Previous: , Up: C library functions   [Index]

ferror

ferror Function


#include <stdio.h>

Integer new i;

i = ferror (fileStream);


Next: , Previous: , Up: C library functions   [Index]

fesetround

fesetround Function


#include <math.h>

Integer new i;

i = fesetround (mode);


Next: , Previous: , Up: C library functions   [Index]

fetestexcept

fetestexcepts Function


#include <math.h>

Integer new i;

i = fetestxcept (exceptions);


Next: , Previous: , Up: C library functions   [Index]

fflush

fflush Function


#include <stdio.h>

Integer new i;

i = fflush (fileStream);


Next: , Previous: , Up: C library functions   [Index]

fgetc

fgetc Function


#include <stdio.h>

Integer new i;

i = fgetc (fileStream);


Next: , Previous: , Up: C library functions   [Index]

fgetpos

fgetpos Function


#include <stdio.h>

Integer new i;

i = fgetpos (fileStream, pos);


Next: , Previous: , Up: C library functions   [Index]

fgets

fgets Function


#include <stdio.h>

String new s;

s = fgets (s, s length, fileStream);


Next: , Previous: , Up: C library functions   [Index]

floor

floor Function


#include <math.h>

Float new f;

f = floor (3.01);


Next: , Previous: , Up: C library functions   [Index]

fmod

fmod Function


#include <math.h>

Float new f;

f = fmod (3.0, 2.0);


Next: , Previous: , Up: C library functions   [Index]

fopen

fopen Function


#include <stdio.h>

FILE *f

String new path;
String new mode;

path = "/home/user/.profile";
mode = "r";

f = fopen (path, mode);


Next: , Previous: , Up: C library functions   [Index]

fprintf

fprintf Function

See Variable arguments.


Next: , Previous: , Up: C library functions   [Index]

fputc

fputc Function


#include <stdio.h>

Integer new myInput;

myInput = fgetc (xstdin ());
fputc (myInput, xstdout ());


Next: , Previous: , Up: C library functions   [Index]

fputs

fputc Function

#include <stdio.h>

String new myInput;

fgets (myInput, 255, xstdin ());
fputs (myInput, xstdout ());

Next: , Previous: , Up: C library functions   [Index]

fread

fread Function

#include <stdio.h>

String new myInput;

myInput = "";

fread (myInput, 255, sizeof (char), xstdin ());

Next: , Previous: , Up: C library functions   [Index]

free

free Function

Do not use free with objects. Use the __ctalkDeleteObject library function instead.

Also, calling __objRefCntZero before __ctalkDeleteObject insures that the object will be completely deleted. You can do this in two ways: first, by sending the object a delete message; or by casting the object to a C OBJECT * and then giving the OBJECT * as an argument to __objRefCntZero and __ctalkDeleteObject.

Object new myObject;
OBJECT *myObject_alias;

myObject_aliast = myObject;

__objRefCntZero (OBJREF (myObject_alias));
__ctalkDeleteObject (myObject_alias);

Next: , Previous: , Up: C library functions   [Index]

freopen

freopen Function

#include <stdio.h>

FILE *f;

String new path;
String new mode;

path = "/home/user/.profile";
mode = "r";

f2 = freopen (path, mode, xstdin ());

Next: , Previous: , Up: C library functions   [Index]

frexp

frexp Function

#include <math.h>

int i_exp_val;
Integer new expInt;
Float new myFloat;
Float new myFraction;

myFloat = "2.5";

myFraction = frexp (myFloat, &i_exp_val);

expInt = i_exp_val;

Next: , Previous: , Up: C library functions   [Index]

fscanf

fscanf Function

See Variable arguments.

Ctalk wraps stdin, stdout, and stderr in the functions xstdin, xstdout, and xstderr, which gives the streams a constant interface for methods to use regardless of the streams’ internal implementation.


Next: , Previous: , Up: C library functions   [Index]

fseek

fseek Function


Next: , Previous: , Up: C library functions   [Index]

fsetpos

fsetpos Function

#include <stdio.h>

FILE *f;
String new path;
String new mode;
Integer new offset;
  
path = "/home/user/.profile.new";
mode = "r";


f = fopen (path, mode);

offset = 0L;

fsetpos (f, offset);

Next: , Previous: , Up: C library functions   [Index]

fstat

fstat Function

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

String new path;
Integer new result;
struct stat statbuf;

path = "/home/user/.profile";

result = fstat (path, &statbuf);


Next: , Previous: , Up: C library functions   [Index]

ftell

ftell Function

#include <stdio.h>

Integer new filePos;

filePos = ftell (file);

Next: , Previous: , Up: C library functions   [Index]

fwrite

fwrite Function

#include <stdio.h>

FILE *f;
String new path;
String new mode;
String new promptLine;
  
path = "/home/user/.profile.new";
mode = "a";

f = fopen (path, mode);

promptLine = "PS1=#";

fwrite (promptLine, promptLine length, sizeof (char), f);

Next: , Previous: , Up: C library functions   [Index]

getc

getc Function

#include <stdio.h>

Integer new myInput;

myInput = getc (xstdin ());

printf ("%c", myInput asCharacter);

Next: , Previous: , Up: C library functions   [Index]

getchar

getchar Function

#include <stdio.h>

Integer new myInput;

myInput = getchar ();

printf ("%c", myInput asCharacter);

Next: , Previous: , Up: C library functions   [Index]

getcwd

getcwd Function

#include <stdio.h>
String new myString;
getcwd (myString, FILENAME_MAX);

Note: The argument myString must already be initialized to hold the entire directory path. If in doubt, use getCwd (class DirectoryStream) instead. See DirectoryStream.


Next: , Previous: , Up: C library functions   [Index]

getenv

getenv Function

String new envPath;

envPath = getenv ("PATH");

printf ("%s", envPath);

Next: , Previous: , Up: C library functions   [Index]

getpid

getpid Function


Next: , Previous: , Up: C library functions   [Index]

gmtime-localtime

gmtime, localtime Functions


Next: , Previous: , Up: C library functions   [Index]

index-function

index Function

See strchr.


Next: , Previous: , Up: C library functions   [Index]

isalnum-isxdigit

isalnum, isalpha, isascii, isblank, iscntrl, isdigit, isgraph, islower, isprint, ispunct, isspace, isupper, isxdigit Functions

Ctalk does not support ctype.h macros portably. Use the corresponding method of class Character instead. See Character.

Ctype.h Macro          Ctalk Method
-------------          ------------
isalnum                isAlNum
isalpha                isAlpha
isascii                isASCII
isblank                isBlank
iscntrl                isCntrl
isdigit                isDigit
isgraph                isGraph
islower                isLower
isprint                isPrint
ispunct                isPunct
isspace                isSpace
isupper                isUpper
isxdigit               isXDigit

Next: , Previous: , Up: C library functions   [Index]

labs

labs Function

#include <stdlib.h>

Integer new myValue;
Integer new myAbsValue;

myAbsValue = labs (myValue);

Next: , Previous: , Up: C library functions   [Index]

llabs

llabs Function

#include <stdlib.h>

LongInteger new myValue;
LongInteger new myAbsValue;

myAbsValue = llabs (myValue);

Next: , Previous: , Up: C library functions   [Index]

llrint

lrint, lrintf, lrintl, llrint, llrintf, llrintl Functions

#include <math.h>

Float new myFloat;
LongInteger new myLongInt;

myFloat = 2.5;

myLongInt = llrint (myFloat);

Consult the manual page for lrint(3), etc., for detailed information about each function.


Next: , Previous: , Up: C library functions   [Index]

llround

llround Function

#include <math.h>

Float new myFloat;
LongInteger new myLongInt;

myFloat = 2.5;

myLongInt = llround (myFloat);

Next: , Previous: , Up: C library functions   [Index]

log

log Function

#include <math.h>

Float new myFloat;
Float new myLog;

myFloat = 2.5;

myLog = log (myFloat);

Next: , Previous: , Up: C library functions   [Index]

log10

log10 Function

#include <math.h>

Float new myFloat;
Float new myLog;

myFloat = 2.5;

myLog = log10 (myFloat);

Next: , Previous: , Up: C library functions   [Index]

log1p

log1p Function

#include <math.h>

Float new myFloat;
Float new myLog;

myFloat = 2.5;

myLog = log1p (myFloat);

Next: , Previous: , Up: C library functions   [Index]

lrint

lrint Function

#include <math.h>

Float new myFloat;
Integer new myInt;

myFloat = 2.5;

myLog = lrint (myFloat);

Next: , Previous: , Up: C library functions   [Index]

lround

lround Function

#include <math.h>

Float new myFloat;
Integer new myInt;

myFloat = 2.5;

myLog = lround (myFloat);

Next: , Previous: , Up: C library functions   [Index]

malloc

malloc Function

#include <stdlib.h>

Integer new size;
int *intbuf

size = sizeof (int) * 10;

memblk = (int *)malloc (size);

Next: , Previous: , Up: C library functions   [Index]

memchr

memchr Function

#include <string.h>

#define BUFLENGTH 1024

Integer new searchChar;
Integer new length;
char buf[BUFLENGTH], *charptr;

length = BUFLENGTH

strcpy (buf, "Some text.");

searchChar = '.';

charptr = (char *)memchr ((void *)buf, searchChar, length);


Next: , Previous: , Up: C library functions   [Index]

memcmp

memcmp Function

#include <string.h>

#define BUFLENGTH 1024

Integer new length;
Integer new result;
char buf1[BUFLENGTH], buf2[BUFLENGTH];

length = BUFLENGTH

strcpy (buf1, "Some text.");
strcpy (buf2, "Some other text.");

result = memcmp ((void *)buf1, (void *)buf2, length);


Next: , Previous: , Up: C library functions   [Index]

memcpy

memcpy Function

#include <string.h>

#define BUFLENGTH 1024

Integer new length;
Integer new result;
char buf1[BUFLENGTH], buf2[BUFLENGTH], *charptr;

length = BUFLENGTH

strcpy (buf1, "Some text.");

result = (char *)memcpy ((void *)buf1, (void *)buf2, length);


Next: , Previous: , Up: C library functions   [Index]

memmove

memmove Function

#include <string.h>

#define BUFLENGTH 1024

Integer new length;
Integer new result;
char buf1[BUFLENGTH], buf2[BUFLENGTH], *charptr;

length = BUFLENGTH

strcpy (buf1, "Some text.");

charptr = (char *)memmove ((void *)buf1, (void *)buf2, length);


Next: , Previous: , Up: C library functions   [Index]

memset

memset Function

#include <string.h>

#define BUFLENGTH 1024

Integer new length;
Integer new fillChar;
char buf[BUFLENGTH], *charptr;

length = BUFLENGTH
fillChar = 0;

charptr = (char *)memset ((void *)buf1, fillChar, length);


Next: , Previous: , Up: C library functions   [Index]

mkdir

mkdir Function

Integer new r;
String new myDirName;

myDirName = "myDir";

r = mkdir (myDirName);

Next: , Previous: , Up: C library functions   [Index]

modf

modf Function

#include <math.h>

double dptr;
Float new x;
Float new frac;

x = 2.54;

frac = modf (x, &dptr);

Next: , Previous: , Up: C library functions   [Index]

nearbyint

nearbyint Function

#include <math.h>

Float new x;
Float new result;

x = 2.53;

result = nearbyint (x);

Next: , Previous: , Up: C library functions   [Index]

perror

perror Function

#include <stdio.h>

String new message;

message = "Program error";

perror (message);

Next: , Previous: , Up: C library functions   [Index]

pow

pow Function

#include <math.h>

Float new x;
Float new exp;
Float new result;

x = 2.5;
exp = 2;

result = pow (x, exp);

Next: , Previous: , Up: C library functions   [Index]

printf

printf Function

#include <stdio.h>

String new message;
String new fmt;

printf (fmt, message);

Next: , Previous: , Up: C library functions   [Index]

raise

raise Function

#include <signal.h>

Integer new signal;
Integer new result;

signal = SIGTERM;

result = raise (signal);

Next: , Previous: , Up: C library functions   [Index]

rand

rand Function

#include <stdlib.h>

Integer new random;

random = rand ();

Next: , Previous: , Up: C library functions   [Index]

realloc

realloc Function

#include <stdlib.h>

int *intptr;
Integer new size;

size = sizeof (int *);

intptr = (int *)realloc (NULL, size);


Next: , Previous: , Up: C library functions   [Index]

remove

remove Function

#include <stdio.h>

String new path;
Integer new result;

path = ``/home/user'';

result = remove (path);


Next: , Previous: , Up: C library functions   [Index]

rename

rename Function

#include <stdio.h>

String new oldPath;
String new newPath;
Integer new result;

oldPath = "/home/user";
newPath = "/home/joe";

result = rename (oldPath, newPath);


Next: , Previous: , Up: C library functions   [Index]

rindex

rindex Function

See strrchr.


Next: , Previous: , Up: C library functions   [Index]

rint

rint Function

#include <math.h>

Float new myFloat;
Float new myIntValue;

myFloat = 2.54;

myIntValue = rint (myFloat);


Next: , Previous: , Up: C library functions   [Index]

rmdir

rmdir Function

r = rmdir (dirToRemove);

Next: , Previous: , Up: C library functions   [Index]

round

round Function

#include <math.h>

Float new myFloat;
Float new myIntValue;

myFloat = 2.54;

myIntValue = round (myFloat);


Next: , Previous: , Up: C library functions   [Index]

scanf

scanf Function

See Variable arguments.


Next: , Previous: , Up: C library functions   [Index]

sin

sin Function

#include <math.h>

Float new x;
Float new sinX;

x = 2.5;

sinX = sin (x);

Next: , Previous: , Up: C library functions   [Index]

sinh

sinh Function

#include <math.h>

Float new x;
Float new sinX;

x = 2.5;

sinX = sinh (x);

Next: , Previous: , Up: C library functions   [Index]

snprintf

snprintf Function

See Variable arguments.


Next: , Previous: , Up: C library functions   [Index]

sprintf

sprintf Function

See Variable arguments.


Next: , Previous: , Up: C library functions   [Index]

sqrt

sqrt Function

#include <math.h>

Array instanceMethod printSquareRoot (void) {

  Float new squareRoot;
  WriteFileStream classInit;

  /*
   *  Use Ctalk C API library function calls within a C function.
   */
  squareRoot = sqrt(__ctalk_to_c_double(__ctalk_self_internal ()));
  stdoutStream writeStream squareRoot;

  return NULL;
}

int main () {

  Array new floatArray;

  floatArray atPut 0, 1.0;
  floatArray atPut 1, 4.0;
  floatArray atPut 2, 9.0;
  floatArray atPut 3, 16.0;
  floatArray atPut 4, 25.0;

  floatArray map printSquareRoot;
  
}

Next: , Previous: , Up: C library functions   [Index]

srand

srand Function

#include <stdlib.h>

Integer new seed;

seed = 2;

srand (seed);


Next: , Previous: , Up: C library functions   [Index]

sscanf

sscanf Function

See Variable arguments.

Note: The C99 standard requires that stdin, stdout, and stderr should be implemented as macros, which on some systems (notably Solaris) causes problems with C-to-object translation. If Ctalk cannot register these macros as C variables, then either call sscanf(3) C function with only C variables, or use a method with stdoutStream or stderrStream See WriteFileStream, or stdinStream See ReadFileStream.


Next: , Previous: , Up: C library functions   [Index]

strcat-strcpy

strcat, strcasecmp, strcmp, and strcpy Functions

The strcat(3), strcasecmp(3), strcmp(3), and strcpy(3) functions work in most statements. When necessary, Ctalk uses cStrcat, cStrcasecmp, cStrcmp, and cStrcpy (class CFunction). See CFunction.


Next: , Previous: , Up: C library functions   [Index]

strchr

strchr Function

#include <string.h>

int main () {

  String new s;
  String new result;

  s = "s1";

  if ((result = strchr (s, '1')) == "1") {
    printf ("Pass\n");
  } else {
    printf ("Fail\n");
  }

  exit(0);
}

Next: , Previous: , Up: C library functions   [Index]

strcoll

strcoll Function

#include <string.h>

String new s1;
String new s2;
Integer new result;

result = strcoll (s1, s2);

Next: , Previous: , Up: C library functions   [Index]

strspn

strspn Function


Next: , Previous: , Up: C library functions   [Index]

strerror

strerror Function


Next: , Previous: , Up: C library functions   [Index]

strftime

strftime Function


Next: , Previous: , Up: C library functions   [Index]

strlen

strlen Function


Next: , Previous: , Up: C library functions   [Index]

strncat-strncpy

strncat, strncmp, and strncpy Functions

The strncat(3), strncasecmp(3), strncmp(3), and strncpy(3) functions work in most statements. When necessary, Ctalk uses cStrncat, cStrncasecmp, cStrncmp, and cStrncpy (class CFunction). See CFunction.


Next: , Previous: , Up: C library functions   [Index]

strpbrk

strpbrk Function


Next: , Previous: , Up: C library functions   [Index]

strrchr

strrchr Function

#include <string.h>

String new s1;
Character new searchChar;
String new charptr;

searchChar = '/';
s1 = "/home/user";

charptr = strrchr (s1, searchChar);

Next: , Previous: , Up: C library functions   [Index]

strstr

strstr Function


Next: , Previous: , Up: C library functions   [Index]

strtod

strtod Function


Next: , Previous: , Up: C library functions   [Index]

strtok

strtok Function


Next: , Previous: , Up: C library functions   [Index]

strtoll

strtoll Function


Next: , Previous: , Up: C library functions   [Index]

strxfrm

strxfrm Function


Next: , Previous: , Up: C library functions   [Index]

system

system Function

#include <stdlib.h>

String new commandLine;

commandLine = "ls -lR";

system (commandLine);

Next: , Previous: , Up: C library functions   [Index]

tan

tan Function


Next: , Previous: , Up: C library functions   [Index]

tanh

tanh Function


Next: , Previous: , Up: C library functions   [Index]

tmpnam

tmpnam Function


Next: , Previous: , Up: C library functions   [Index]

tolower

tolower Function

The tolower function may be implemented in a non-portable manner. Use the toLower method instead.


Next: , Previous: , Up: C library functions   [Index]

toupper

toupper Function

The toupper function may be implemented in a non-portable manner. Use the toUpper method instead.


Next: , Previous: , Up: C library functions   [Index]

trunc

trunc Function


Next: , Previous: , Up: C library functions   [Index]

ungetc

ungetc Function


Next: , Previous: , Up: C library functions   [Index]

vfprintf

vfprintf Function

This version of Ctalk does not support the va_list data type. You should use printf(3) or writeStream (class WriteFileStream) instead.


Next: , Previous: , Up: C library functions   [Index]

vfscanf

vfscanf Function

This version of Ctalk does not support the va_list data type. You should use scanf(3) instead. See Variable arguments.


Next: , Previous: , Up: C library functions   [Index]

vprintf

vprintf Function

This version of Ctalk does not support the va_list data type. You should use printf(3) or writeStream (class WriteFileStream) instead.


Next: , Previous: , Up: C library functions   [Index]

vscanf

vscanf Function

This version of Ctalk does not support the va_list data type. You should use scanf(3) instead. See Variable arguments.


Next: , Previous: , Up: C library functions   [Index]

vsnprintf

vsnprintf Function

This version of Ctalk does not support the va_list data type. You should use sprintf(3) instead. See Variable arguments.


Next: , Previous: , Up: C library functions   [Index]

vsprintf

vsprintf Function

This version of Ctalk does not support the va_list data type. You should use sprintf(3) instead. See Variable arguments.


Previous: , Up: C library functions   [Index]

vsscanf

vsscanf Function

This version of Ctalk does not support the va_list data type. You should use sprintf(3) instead. See Variable arguments.


Previous: , Up: C   [Index]

GNU tools

Using GNU Tools with Ctalk

If you want to build Ctalk programs using the GNU configuration tools; i.e, the ‘./configure,’ ‘make,’ ‘make install’ sequence of commands, you need to tell the build tools about Ctalk.

Doing this mostly involves telling the utility automake, which helps write Makefiles for the make program, how to build a Ctalk source file into an executable.

The make program allows Makefiles to define rules to build different types of input files into programs, libraries, and other types of data files.

In order to distinguish a Ctalk file, we give it the file extension ‘.ca’. This lets the build tools know that the Ctalk program isn’t a standard C input file.

Then, in Makefile.am (consult the automake manual if you’re not certain what this is), you can define a rule to build a ‘.ca’ file into an ‘.o’ object file.


SUFFIXES=.ca .o

.ca.o:
	$(top_builddir)/src/ctalk -I $(top_builddir)/classes $< \
	  -o `basename $ .o`.i ; \
	$(CC) -c $(AM_CFLAGS) $(AM_CPPFLAGS) $(DEFS) -o $ `basename $< .ca`.i

Then, add another line to link the object file into a program.


methods$(EXEEXT) : methods.o
	$(CC) methods.o $(AM_LDFLAGS) $(LDFLAGS) $(LIBS) -o methods$(EXEEXT)

Note that this example comes from the methods program in the Ctalk distribution, where, “methods,” is the canonical name of the output file, as defined in the ‘bin_PROGRAMS’ macro. That allows make to install the program normally when you type, ‘make install.

If you’re using Ctalk for another package, you’ll almost certainly want to change the paths to something that uses an already-installed Ctalk. In that case, Makefile.am might contain lines like these.


SUFFIXES=.ca .o

.ca.o:
	/usr/local/bin/ctalk -I /usr/local/include/classes $< \
	  -o `basename $ .o`.i ; \
	$(CC) -c $(AM_CFLAGS) $(AM_CPPFLAGS) $(DEFS) -o $ `basename $< .ca`.i

Cleaning Up Extra Files

Note that the basename command in these examples handles the translation of the make targets into an intermediate Ctalk file.

This way make doesn’t need to worry about any intermediate files, except that the Makefile should clean them up.

So to define rules to clean up the extra files after the build, include make targets like these in Makefile.am.


clean-local:
	rm -f *.i

distclean-local:
	rm -f *.i


Running Ctalk Utilities in an Emacs Window

The doc/ subdirectory of the Ctalk source code distribution contains the Emacs Lisp programs classes.el, methods-brief.el, and methods-full.el. They define simple Emacs Lisp functions that let you capture the output of the Ctalk utilities in an Emacs window.

The documentation file, ctalktools.info contains descriptions of these functions, and the files also contain instructions to install and use them.


Next: , Previous: , Up: Top   [Index]

Copying

Copying and Distributing Ctalk

Ctalk is free software. You can copy, distribute, and modify Ctalk under the terms of the GNU General Public License, Version 3 (see, COPYING, in the Ctalk distribution). You can also distribute executable programs which link to the ctalk run time libraries under the terms of the GNU Lesser General Public License, Version 3 (COPYING.LIB in the Ctalk distribution).


Next: , Previous: , Up: Top   [Index]

GNU Free Documentation License

GNU Free Documentation License


                        Version 1.1, March 2000
     Copyright (C) 2000  Free Software Foundation, Inc.
     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     
     Everyone is permitted to copy and distribute verbatim copies
     of this license document, but changing it is not allowed.



  0. PREAMBLE

     The purpose of this License is to make a manual, textbook, or other
     written document "free" in the sense of freedom: to assure everyone
     the effective freedom to copy and redistribute it, with or without
     modifying it, either commercially or noncommercially.  Secondarily,
     this License preserves for the author and publisher a way to get
     credit for their work, while not being considered responsible for
     modifications made by others.

     This License is a kind of "copyleft", which means that derivative
     works of the document must themselves be free in the same sense.
     It complements the GNU General Public License, which is a copyleft
     license designed for free software.

     We have designed this License in order to use it for manuals for
     free software, because free software needs free documentation: a
     free program should come with manuals providing the same freedoms
     that the software does.  But this License is not limited to
     software manuals; it can be used for any textual work, regardless
     of subject matter or whether it is published as a printed book.
     We recommend this License principally for works whose purpose is
     instruction or reference.


  1. APPLICABILITY AND DEFINITIONS

     This License applies to any manual or other work that contains a
     notice placed by the copyright holder saying it can be distributed
     under the terms of this License.  The "Document", below, refers to
     any such manual or work.  Any member of the public is a licensee,
     and is addressed as "you."

     A "Modified Version" of the Document means any work containing the
     Document or a portion of it, either copied verbatim, or with
     modifications and/or translated into another language.

     A "Secondary Section" is a named appendix or a front-matter
     section of the Document that deals exclusively with the
     relationship of the publishers or authors of the Document to the
     Document's overall subject (or to related matters) and contains
     nothing that could fall directly within that overall subject.
     (For example, if the Document is in part a textbook of
     mathematics, a Secondary Section may not explain any mathematics.)
     The relationship could be a matter of historical connection with
     the subject or with related matters, or of legal, commercial,
     philosophical, ethical or political position regarding them.

     The "Invariant Sections" are certain Secondary Sections whose
     titles are designated, as being those of Invariant Sections, in
     the notice that says that the Document is released under this
     License.

     The "Cover Texts" are certain short passages of text that are
     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
     that says that the Document is released under this License.

     A "Transparent" copy of the Document means a machine-readable copy,
     represented in a format whose specification is available to the
     general public, whose contents can be viewed and edited directly
     and straightforwardly with generic text editors or (for images
     composed of pixels) generic paint programs or (for drawings) some
     widely available drawing editor, and that is suitable for input to
     text formatters or for automatic translation to a variety of
     formats suitable for input to text formatters.  A copy made in an
     otherwise Transparent file format whose markup has been designed
     to thwart or discourage subsequent modification by readers is not
     Transparent.  A copy that is not "Transparent" is called "Opaque."

     Examples of suitable formats for Transparent copies include plain
     ASCII without markup, Texinfo input format, LaTeX input format,
     SGML or XML using a publicly available DTD, and
     standard-conforming simple HTML designed for human modification.
     Opaque formats include PostScript, PDF, proprietary formats that
     can be read and edited only by proprietary word processors, SGML
     or XML for which the DTD and/or processing tools are not generally
     available, and the machine-generated HTML produced by some word
     processors for output purposes only.

     The "Title Page" means, for a printed book, the title page itself,
     plus such following pages as are needed to hold, legibly, the
     material this License requires to appear in the title page.  For
     works in formats which do not have any title page as such, "Title
     Page" means the text near the most prominent appearance of the
     work's title, preceding the beginning of the body of the text.


  2. VERBATIM COPYING

     You may copy and distribute the Document in any medium, either
     commercially or noncommercially, provided that this License, the
     copyright notices, and the license notice saying this License
     applies to the Document are reproduced in all copies, and that you
     add no other conditions whatsoever to those of this License.  You
     may not use technical measures to obstruct or control the reading
     or further copying of the copies you make or distribute.  However,
     you may accept compensation in exchange for copies.  If you
     distribute a large enough number of copies you must also follow
     the conditions in section 3.

     You may also lend copies, under the same conditions stated above,
     and you may publicly display copies.


  3. COPYING IN QUANTITY

     If you publish printed copies of the Document numbering more than
     100, and the Document's license notice requires Cover Texts, you
     must enclose the copies in covers that carry, clearly and legibly,
     all these Cover Texts: Front-Cover Texts on the front cover, and
     Back-Cover Texts on the back cover.  Both covers must also clearly
     and legibly identify you as the publisher of these copies.  The
     front cover must present the full title with all words of the
     title equally prominent and visible.  You may add other material
     on the covers in addition.  Copying with changes limited to the
     covers, as long as they preserve the title of the Document and
     satisfy these conditions, can be treated as verbatim copying in
     other respects.

     If the required texts for either cover are too voluminous to fit
     legibly, you should put the first ones listed (as many as fit
     reasonably) on the actual cover, and continue the rest onto
     adjacent pages.

     If you publish or distribute Opaque copies of the Document
     numbering more than 100, you must either include a
     machine-readable Transparent copy along with each Opaque copy, or
     state in or with each Opaque copy a publicly-accessible
     computer-network location containing a complete Transparent copy
     of the Document, free of added material, which the general
     network-using public has access to download anonymously at no
     charge using public-standard network protocols.  If you use the
     latter option, you must take reasonably prudent steps, when you
     begin distribution of Opaque copies in quantity, to ensure that
     this Transparent copy will remain thus accessible at the stated
     location until at least one year after the last time you
     distribute an Opaque copy (directly or through your agents or
     retailers) of that edition to the public.

     It is requested, but not required, that you contact the authors of
     the Document well before redistributing any large number of
     copies, to give them a chance to provide you with an updated
     version of the Document.


  4. MODIFICATIONS

     You may copy and distribute a Modified Version of the Document
     under the conditions of sections 2 and 3 above, provided that you
     release the Modified Version under precisely this License, with
     the Modified Version filling the role of the Document, thus
     licensing distribution and modification of the Modified Version to
     whoever possesses a copy of it.  In addition, you must do these
     things in the Modified Version:

     A. Use in the Title Page (and on the covers, if any) a title
     distinct    from that of the Document, and from those of previous
     versions    (which should, if there were any, be listed in the
     History section    of the Document).  You may use the same title
     as a previous version    if the original publisher of that version
     gives permission.
     B. List on the Title Page, as authors, one or more persons or
     entities    responsible for authorship of the modifications in the
     Modified    Version, together with at least five of the principal
     authors of the    Document (all of its principal authors, if it
     has less than five).
     C. State on the Title page the name of the publisher of the
     Modified Version, as the publisher.
     D. Preserve all the copyright notices of the Document.
     E. Add an appropriate copyright notice for your modifications
     adjacent to the other copyright notices.
     F. Include, immediately after the copyright notices, a license
     notice    giving the public permission to use the Modified Version
     under the    terms of this License, in the form shown in the
     Addendum below.
     G. Preserve in that license notice the full lists of Invariant
     Sections    and required Cover Texts given in the Document's
     license notice.
     H. Include an unaltered copy of this License.
     I. Preserve the section entitled "History", and its title, and add
     to    it an item stating at least the title, year, new authors, and
       publisher of the Modified Version as given on the Title Page.
     If    there is no section entitled "History" in the Document,
     create one    stating the title, year, authors, and publisher of
     the Document as    given on its Title Page, then add an item
     describing the Modified    Version as stated in the previous
     sentence.
     J. Preserve the network location, if any, given in the Document for
       public access to a Transparent copy of the Document, and
     likewise    the network locations given in the Document for
     previous versions    it was based on.  These may be placed in the
     "History" section.     You may omit a network location for a work
     that was published at    least four years before the Document
     itself, or if the original    publisher of the version it refers
     to gives permission.
     K. In any section entitled "Acknowledgements" or "Dedications",
     preserve the section's title, and preserve in the section all the
      substance and tone of each of the contributor acknowledgements
     and/or dedications given therein.
     L. Preserve all the Invariant Sections of the Document,
     unaltered in their text and in their titles.  Section numbers
     or the equivalent are not considered part of the section titles.
     M. Delete any section entitled "Endorsements."  Such a section
     may not be included in the Modified Version.
     N. Do not retitle any existing section as "Endorsements"    or to
     conflict in title with any Invariant Section.

     If the Modified Version includes new front-matter sections or
     appendices that qualify as Secondary Sections and contain no
     material copied from the Document, you may at your option
     designate some or all of these sections as invariant.  To do this,
     add their titles to the list of Invariant Sections in the Modified
     Version's license notice.  These titles must be distinct from any
     other section titles.

     You may add a section entitled "Endorsements", provided it contains
     nothing but endorsements of your Modified Version by various
     parties-for example, statements of peer review or that the text has
     been approved by an organization as the authoritative definition
     of a standard.

     You may add a passage of up to five words as a Front-Cover Text,
     and a passage of up to 25 words as a Back-Cover Text, to the end
     of the list of Cover Texts in the Modified Version.  Only one
     passage of Front-Cover Text and one of Back-Cover Text may be
     added by (or through arrangements made by) any one entity.  If the
     Document already includes a cover text for the same cover,
     previously added by you or by arrangement made by the same entity
     you are acting on behalf of, you may not add another; but you may
     replace the old one, on explicit permission from the previous
     publisher that added the old one.

     The author(s) and publisher(s) of the Document do not by this
     License give permission to use their names for publicity for or to
     assert or imply endorsement of any Modified Version.


  5. COMBINING DOCUMENTS

     You may combine the Document with other documents released under
     this License, under the terms defined in section 4 above for
     modified versions, provided that you include in the combination
     all of the Invariant Sections of all of the original documents,
     unmodified, and list them all as Invariant Sections of your
     combined work in its license notice.

     The combined work need only contain one copy of this License, and
     multiple identical Invariant Sections may be replaced with a single
     copy.  If there are multiple Invariant Sections with the same name
     but different contents, make the title of each such section unique
     by adding at the end of it, in parentheses, the name of the
     original author or publisher of that section if known, or else a
     unique number.  Make the same adjustment to the section titles in
     the list of Invariant Sections in the license notice of the
     combined work.

     In the combination, you must combine any sections entitled
     "History" in the various original documents, forming one section
     entitled "History"; likewise combine any sections entitled
     "Acknowledgements", and any sections entitled "Dedications."  You
     must delete all sections entitled "Endorsements."


  6. COLLECTIONS OF DOCUMENTS

     You may make a collection consisting of the Document and other
     documents released under this License, and replace the individual
     copies of this License in the various documents with a single copy
     that is included in the collection, provided that you follow the
     rules of this License for verbatim copying of each of the
     documents in all other respects.

     You may extract a single document from such a collection, and
     distribute it individually under this License, provided you insert
     a copy of this License into the extracted document, and follow
     this License in all other respects regarding verbatim copying of
     that document.


  7. AGGREGATION WITH INDEPENDENT WORKS

     A compilation of the Document or its derivatives with other
     separate and independent documents or works, in or on a volume of
     a storage or distribution medium, does not as a whole count as a
     Modified Version of the Document, provided no compilation
     copyright is claimed for the compilation.  Such a compilation is
     called an "aggregate", and this License does not apply to the
     other self-contained works thus compiled with the Document, on
     account of their being thus compiled, if they are not themselves
     derivative works of the Document.

     If the Cover Text requirement of section 3 is applicable to these
     copies of the Document, then if the Document is less than one
     quarter of the entire aggregate, the Document's Cover Texts may be
     placed on covers that surround only the Document within the
     aggregate.  Otherwise they must appear on covers around the whole
     aggregate.


  8. TRANSLATION

     Translation is considered a kind of modification, so you may
     distribute translations of the Document under the terms of section
     4.  Replacing Invariant Sections with translations requires special
     permission from their copyright holders, but you may include
     translations of some or all Invariant Sections in addition to the
     original versions of these Invariant Sections.  You may include a
     translation of this License provided that you also include the
     original English version of this License.  In case of a
     disagreement between the translation and the original English
     version of this License, the original English version will prevail.


  9. TERMINATION

     You may not copy, modify, sublicense, or distribute the Document
     except as expressly provided for under this License.  Any other
     attempt to copy, modify, sublicense or distribute the Document is
     void, and will automatically terminate your rights under this
     License.  However, parties who have received copies, or rights,
     from you under this License will not have their licenses
     terminated so long as such parties remain in full compliance.


 10. FUTURE REVISIONS OF THIS LICENSE

     The Free Software Foundation may publish new, revised versions of
     the GNU Free Documentation License from time to time.  Such new
     versions will be similar in spirit to the present version, but may
     differ in detail to address new problems or concerns.  See
     http://www.gnu.org/copyleft/.

     Each version of the License is given a distinguishing version
     number.  If the Document specifies that a particular numbered
     version of this License "or any later version" applies to it, you
     have the option of following the terms and conditions either of
     that specified version or of any later version that has been
     published (not as a draft) by the Free Software Foundation.  If
     the Document does not specify a version number of this License,
     you may choose any version ever published (not as a draft) by the
     Free Software Foundation.


ADDENDUM: How to use this License for your documents

   To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and license
notices just after the title page:

     Copyright (C)  YEAR  YOUR NAME.
     Permission is granted to copy, distribute and/or modify this document
     under the terms of the GNU Free Documentation License, Version 1.1
     or any later version published by the Free Software Foundation;
     with the Invariant Sections being LIST THEIR TITLES, with the
     Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
     A copy of the license is included in the section entitled "GNU
     Free Documentation License."

   If you have no Invariant Sections, write "with no Invariant Sections"
instead of saying which ones are invariant.  If you have no Front-Cover
Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being
LIST"; likewise for Back-Cover Texts.

   If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of
free software license, such as the GNU General Public License, to
permit their use in free software.


Previous: , Up: Top   [Index]

Index

Index

Jump to:   !   #   $   %   &   (   )   *   +   -   .   /   <   =   >   ?   \   ^   _   |   ~  
A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
Index Entry  Section

!
! instance method (Character class): Character
! instance method (Magnitude class): Magnitude
! instance method (Object class): Object
! operator: Prefixes
! operator: Control structures
!= instance method (Boolean class): Boolean
!= instance method (Character class): Character
!= instance method (Integer class): Integer
!= instance method (LongInteger class): LongInteger
!= instance method (Object class): Object
!= instance method (String class): String
!= instance method (String class): String
!~ instance method (String class): String
!~ instance method (String class): String

#
#pragma GCC dependency: C statements
#pragma GCC pack: C statements
#pragma GCC poison: C statements
#pragma GCC system header: C statements
#pragma implementation: C statements
#pragma interface: C statements
#pragma STDC CX_LIMITED_RANGE: C statements
#pragma STDC FENV_ACCESS: C statements
#pragma STDC FP_CONTRACT: C statements

$
$ metacharacter: String

%
% instance method (Integer class): Integer
% instance method (LongInteger class): LongInteger
%= instance method (Integer class): Integer
%= instance method (LongInteger class): LongInteger

&
& instance method (Character class): Character
& instance method (Integer class): Integer
& instance method (LongInteger class): LongInteger
& instance method (Object class): Object
& instance method (Object class): Integer
& instance method (Object class): LongInteger
& operator: Prefixes
&& instance method (Boolean class): Boolean
&& instance method (Character class): Character
&& instance method (Float class): Float
&& instance method (Integer class): Integer
&& instance method (LongInteger class): LongInteger
&= instance method (Integer class): Integer
&= instance method (LongInteger class): LongInteger
&= instance method (Object class): LongInteger

(
( metacharacter: String

)
) metacharacter: String

*
* instance method (Character class): Character
* instance method (Collection class): Collection
* instance method (Float class): Float
* instance method (Integer class): Integer
* instance method (LongInteger class): LongInteger
* instance method (Magnitude class): Magnitude
* instance method (String class): String
* instance method (Symbol class): Symbol
* metacharacter: String
* operator: Prefixes
*= instance method (Character class): Character
*= instance method (Float class): Float
*= instance method (Integer class): Integer

+
+ instance method (Character class): Character
+ instance method (Collection class): Collection
+ instance method (Float class): Float
+ instance method (Integer class): Integer
+ instance method (Key class): Key
+ instance method (LongInteger class): LongInteger
+ instance method (String class): String
+ instance method (Vector class): Vector
+ metacharacter: String
+ method (Integer class): Self and super
++ instance method (Character class): Character
++ instance method (Integer class): Integer
++ instance method (Key class): Key
++ instance method (LongInteger class): LongInteger
++ instance method (String class): String
++ operator: Prefixes
+= instance method (AssociativeArray class): AssociativeArray
+= instance method (Character class): Character
+= instance method (Float class): Float
+= instance method (Integer class): Integer
+= instance method (List class): List
+= instance method (sortedList class): SortedList
+= instance method (String class): String
+= instance method (Vector class): Vector

-
- instance method (Character class): Character
- instance method (Float class): Float
- instance method (Integer class): Integer
- instance method (Integer class): Integer
- instance method (Key class): Key
- instance method (LongInteger class): LongInteger
- instance method (LongInteger class): LongInteger
- instance method (Magnitude class): Magnitude
- instance method (String class): String
-- instance method (Character class): Character
-- instance method (Integer class): Integer
-- instance method (Key class): Key
-- instance method (LongInteger class): LongInteger
-- instance method (String class): String
-- operator: Prefixes
-= instance method (Character class): Character
-= instance method (Float class): Float
-= instance method (Integer class): Integer
-> instance method (Object class): Object
-> instance method (Object class): Attributes

.
. metacharacter: String

/
/ instance method (Character class): Character
/ instance method (Float class): Float
/ instance method (Integer class): Integer
/ instance method (LongInteger class): LongInteger
/= instance method (Character class): Character
/= instance method (Float class): Float
/= instance method (Integer class): Integer

<
< instance method (Character class): Character
< instance method (Float class): Float
< instance method (Integer class): Integer
< instance method (LongInteger class): LongInteger
<< instance method (Character class): Character
<< instance method (Integer class): Integer
<< instance method (LongInteger class): LongInteger
<= instance method (Character class): Character
<= instance method (Float class): Float
<= instance method (Integer class): Integer
<= instance method (LongInteger class): LongInteger

=
= instance method (Array class): Array
= instance method (AssociativeArray class): AssociativeArray
= instance method (Boolean class): Boolean
= instance method (Character class): Character
= instance method (FileStream class): FileStream
= instance method (Float class): Float
= instance method (Integer class): Integer
= instance method (Key class): Key
= instance method (List class): List
= instance method (List class): Variable method arguments
= instance method (LongInteger class): LongInteger
= instance method (Object class): Object
= instance method (SortedList class): SortedList
= instance method (String class): String
= instance method (Symbol class): Symbol
== instance method (Boolean class): Boolean
== instance method (Character class): Character
== instance method (Integer class): Integer
== instance method (LongInteger class): LongInteger
== instance method (Object class): Object
== instance method (String class): String
=~ instance method (String class): String
=~ instance method (String class): String

>
> instance method (Character class): Character
> instance method (Float class): Float
> instance method (Integer class): Integer
> instance method (LongInteger class): LongInteger
>= instance method (Character class): Character
>= instance method (Float class): Float
>= instance method (Integer class): Integer
>= instance method (LongInteger class): LongInteger
>> instance method (Character class): Character
>> instance method (Integer class): Integer
>> instance method (LongInteger class): LongInteger

?
? metacharacter: String

\
\ metacharacter: String

^
^ instance method (Character class): Character
^ instance method (Integer class): Integer
^ instance method (Integer class): Integer
^ instance method (LongInteger class): LongInteger
^ metacharacter: String
^= instance method (Integer class): Integer
^= instance method (LongInteger class): LongInteger

_
_error function: Ctalk library
_store_int () function: Ctalk library
_warning function: Ctalk library
__argvFileName function: Ctalk library
__argvName function: Ctalk library
__arg_trace function: Ctalk library
__ctalkAddBasicNewTag () function: Attributes
__ctalkAddClassVariable function: Ctalk library
__ctalkAddInstanceVariable function: Ctalk library
__ctalkAliasObject function: Ctalk library
__ctalkAliasReceiver () function: Ctalk library
__ctalkAliasReceiver function: Ctalk library
__ctalkANSIClearPaneLine function: Ctalk library
__ctalkANSITerminalPaneMapWindow function: Ctalk library
__ctalkANSITerminalPaneMapWindow() C function: Pane
__ctalkANSITerminalPanePutchar function: Ctalk library
__ctalkANSITerminalPaneRefresh function: Ctalk library
__ctalkANSITerminalPaneUnmapWindow function: Ctalk library
__ctalkANSITerminalPaneUnMapWindow function: Ctalk library
__ctalkANSITerminalPaneUnMapWindow() C function: Pane
__ctalkARB () function: Ctalk library
__ctalkArgBlkReturnVal () function: Ctalk library
__ctalkArgBlkSetCallerReturn () function: Ctalk library
__ctalkArrayElementToCChar () function: Ctalk library
__ctalkArrayElementToCCharPtr () function: Ctalk library
__ctalkArrayElementToCDouble () function: Ctalk library
__ctalkArrayElementToCInt () function: Ctalk library
__ctalkArrayElementToCLongLongInt () function: Ctalk library
__ctalkArrayElementToCPtr () function: Ctalk library
__ctalkBackgroundMethodObjectMessage () function: Ctalk library
__ctalkBackgroundMethodObjectMessage2Args () function: Ctalk library
__ctalkCallerPrintOnSelf (char *fmt_arg): Translating
__ctalkCallingFnObjectBecome: Ctalk library
__ctalkCallingInstanceVarBecome: Ctalk library
__ctalkCallingMethodObjectBecome: Ctalk library
__ctalkCallingReceiverBecome: Ctalk library
__ctalkCallMethodFn function: Ctalk library
__ctalkCBoolToObj function: Translating
__ctalkCBoolToObj function: Ctalk library
__ctalkCCharPtrToObj function: Translating
__ctalkCCharPtrToObj function: Ctalk library
__ctalkCDoubleToObj function: Translating
__ctalkCDoubleToObj function: Ctalk library
__ctalkCFUNCReturnClass function: Ctalk library
__ctalkCharRadixToChar function: Ctalk library
__ctalkCharRadixToCharASCII function: Ctalk library
__ctalkCIntToObj function: Translating
__ctalkCIntToObj function: Ctalk library
__ctalkClassLibraryPath function: Translating
__ctalkClassMethodInitReturnClass function: Ctalk library
__ctalkClassMethodParam function: Ctalk library
__ctalkClassObject function: Ctalk library
__ctalkClassSearchPath function: Translating
__ctalkClassVariableObject () function: Ctalk library
__ctalkCLongLongToObj function: Translating
__ctalkCLongLongToObj function: Ctalk library
__ctalkCloseGLXPane () function: Ctalk library
__ctalkCloseX11Pane () function: Ctalk library
__ctalkConsoleReadLine function: Ctalk library
__ctalkCopyObject function: Ctalk library
__ctalkCopyPaneStreams function: Ctalk library
__ctalkCopyVariable function: Ctalk library
__ctalkCreateArg function: Ctalk library
__ctalkCreateArgA function: Ctalk library
__ctalkCreateArgEntry function: Ctalk library
__ctalkCreateArgEntryInit function: Ctalk library
__ctalkCreateGLXMainWindow function: Ctalk library
__ctalkCreateObject function: Scoping
__ctalkCreateObject function: Ctalk library
__ctalkCreateObjectInit () function: Templates
__ctalkCreateObjectInit function: Scoping
__ctalkCreateObjectInit function: Ctalk library
__ctalkCreateWinBuffer function: Ctalk library
__ctalkCreateWinBuffer() C function: Pane
__ctalkCreateWinBuffer() C function: Pane
__ctalkCreateX11MainWindow (OBJECT *x11pane_object): Ctalk library
__ctalkCreateX11MainWindow function: Ctalk library
__ctalkCreateX11MainWindowTitle (OBJECT *x11pane_object,: Ctalk library
__ctalkCreateX11MainWindowTitle function: Ctalk library
__ctalkCreateX11SubWindow (OBJECT *subpane_object, OBJECT *parentpane_object): Ctalk library
__ctalkCreateX11SubWindow function: Ctalk library
__ctalkCriticalExceptionInternal function: Ctalk library
__ctalkCriticalSysErrExceptionInternal function: Ctalk library
__ctalkCSymbolToObj function: Translating
__ctalkCVARReturnClass function: Ctalk library
__ctalkDecimalIntegerToASCII: Translating
__ctalkDecimalIntegerToASCII function: Ctalk library
__ctalkDefaultSignalHandler () C function: SignalHandler
__ctalkDefaultSignalHandler function: Ctalk library
__ctalkDefineClassMethod function: Ctalk library
__ctalkDefineClassVariable function: Ctalk library
__ctalkDefinedClassMethodObject function: Ctalk library
__ctalkDefinedInstanceMethodObject function: Ctalk library
__ctalkDefineInstanceMethod function: Ctalk library
__ctalkDefineInstanceVariable function: Ctalk library
__ctalkDefineTemplateMethod function: Ctalk library
__ctalkDeleteArgEntry function: Ctalk library
__ctalkDeleteLastExceptionInternal function: Ctalk library
__ctalkDeleteObject function: free
__ctalkDeleteObject function.: Ctalk library
__ctalkDeleteObjectInternal (OBJECT *obj): Ctalk library
__ctalkDeleteObjectList function: Ctalk library
__ctalkDeleteWinBuffer function: Ctalk library
__ctalkDocDir function: Ctalk library
__ctalkDoubleToASCII function: Ctalk library
__ctalkErrorExit function: Ctalk library
__ctalkEvalExpr function: Ctalk library
__ctalkEvalExprU function: Ctalk library
__ctalkExceptionInternal function: Ctalk library
__ctalkExceptionNotifyInternal function: Ctalk library
__ctalkExec () function: Ctalk library
__ctalkFilePtrFromStr function: Ctalk library
__ctalkFindClassMethodByFn function: Ctalk library
__ctalkFindClassMethodByName function: Ctalk library
__ctalkFindClassVariable function: Ctalk library
__ctalkFindInstanceMethodByFn function: Ctalk library
__ctalkFindInstanceMethodByName function: Ctalk library
__ctalkFindPrefixMethodByName function: Ctalk library
__ctalkFloatToASCII function: Ctalk library
__ctalkFree function: Ctalk library
__ctalkGenericPtrFromStr function: Ctalk library
__ctalkGetCallingFnObject function: Ctalk library
__ctalkGetCallingMethodObject function: Ctalk library
__ctalkGetCArg () function: Ctalk library
__ctalkGetClass function: Ctalk library
__ctalkGetClassMethodByFn function: Ctalk library
__ctalkGetClassMethodByName function: Ctalk library
__ctalkGetClassVariable () function: Ctalk library
__ctalkGetExceptionTrace () function: Ctalk library
__ctalkGetExprParserAt function: Ctalk library
__ctalkGetExprParserPtr function: Ctalk library
__ctalkGetInstanceMethodByFn () function: Ctalk library
__ctalkGetInstanceMethodByName () function: Ctalk library
__ctalkGetInstanceVariable () function: Ctalk library
__ctalkGetInstanceVariableByName () function: Ctalk library
__ctalkGetPrefixMethodByName () function: Ctalk library
__ctalkGetReceiverPtr () function: Ctalk library
__ctalkGetRS function: Ctalk library
__ctalkGetRunTimeException () function: Ctalk library
__ctalkGetTemplateCallerCVAR function: Ctalk library
__ctalkGetTypeDef () function: Ctalk library
__ctalkGetX11KeySym () function: Ctalk library
__ctalkGLEW20 () function: Ctalk library
__ctalkGlobalObjectBecome () function: Ctalk library
__ctalkGlobFiles () function: Ctalk library
__ctalkGLXAlphaFT () function: Ctalk library
__ctalkGLXDrawText () function: Ctalk library
__ctalkGLXExtensionsString () function: Ctalk library
__ctalkGLXExtensionSupported () function: Ctalk library
__ctalkGLXFrameRate () function: Ctalk library
__ctalkGLXFreeFTFont () function: Ctalk library
__ctalkGLXFreeXFont () function: Ctalk library
__ctalkGLXFullScreen () function: Ctalk library
__ctalkGLXFullScreen () function: Ctalk library
__ctalkGLXNamedColorFT () function: Ctalk library
__ctalkGLXPixelHeightFT () function: Ctalk library
__ctalkGLXRefreshRate () function: Ctalk library
__ctalkGLXSwapBuffers () function: Ctalk library
__ctalkGLXSwapControl () function: Ctalk library
__ctalkGLXTextWidth () function: Ctalk library
__ctalkGLXUseFTFont () function: Ctalk library
__ctalkGLXUseXFont () function: Ctalk library
__ctalkGLXWindowPos2i () function: Ctalk library
__ctalkGLXWinXOrg () function: Ctalk library
__ctalkGLXWinXSize () function: Ctalk library
__ctalkGLXWinYOrg () function: Ctalk library
__ctalkGLXWinYSize () function: Ctalk library
__ctalkGUIPaneClearRectangle () function: Ctalk library
__ctalkGUIPaneClearWindow () function: Ctalk library
__ctalkGUIPaneDrawCircleBasic () function: Ctalk library
__ctalkGUIPaneDrawLine () function: Ctalk library
__ctalkGUIPaneDrawLineBasic () function: Ctalk library
__ctalkGUIPaneDrawPoint () function: Ctalk library
__ctalkGUIPaneDrawRectangle () function: Ctalk library
__ctalkGUIPaneDrawRoundedRectangle () function: Ctalk library
__ctalkGUIPanePutStr () function: Ctalk library
__ctalkGUIPaneRefresh () function: Ctalk library
__ctalkGUISetBackground () function: Ctalk library
__ctalkGXLDrawTextFT () function: Ctalk library
__ctalkHandleRunTimeException () function: Ctalk library
__ctalkHandleRunTimeExceptionInternal () function: Ctalk library
__ctalkHaveFTFaceBasic () function: Ctalk library
__ctalkHexIntegerToASCII () function: Ctalk library
__ctalkIconXPM () function: Ctalk library
__ctalkIgnoreSignal () C function: SignalHandler
__ctalkIgnoreSignal () function: Ctalk library
__ctalkIncKeyRef () function: Ctalk library
__ctalkIncStringRef () C function: String
__ctalkIncStringRef () C function: String
__ctalkIncStringRef () C function: String
__ctalkIncStringRef () function: Ctalk library
__ctalkInitFTLib () function: Ctalk library
__ctalkInitGLEW () function: Ctalk library
__ctalkInlineMethod () function: Ctalk library
__ctalkInstallHandler () C function: SignalHandler
__ctalkInstallHandler () function: Ctalk library
__ctalkInstallPrefix () function: Ctalk library
__ctalkInstanceMethodInitReturnClass () function: Ctalk library
__ctalkInstanceMethodParam () function: Ctalk library
__ctalkInstanceVarIsCallersReceiver () function: Ctalk library
__ctalkInstanceVarsFromClassObject () function: Ctalk library
__ctalkIntFromCharConstant () function: Ctalk library
__ctalkIntRadixToDecimalASCII () function: Ctalk library
__ctalkIsCallersReceiver () function: Ctalk library
__ctalkIsClassMethod () function: Ctalk library
__ctalkIsClassVariableOf () function: Ctalk library
__ctalkIsDir () function: Ctalk library
__ctalkIsInstanceMethod () function: Ctalk library
__ctalkIsInstanceVariableOf () function: Ctalk library
__ctalkIsObject () function: Ctalk library
__ctalkIsSubClassOf () function: Ctalk library
__ctalkLastMatchLength () function: Ctalk library
__ctalkLibcFnWithMethodVarArgs () function: Ctalk library
__ctalkLocalTime function: Ctalk library
__ctalkLogMessage () function: Ctalk library
__ctalkLongDoubleToASCII function: Ctalk library
__ctalkLongLongToDecimalASCII function: Ctalk library
__ctalkLongLongToHexASCII function: Ctalk library
__ctalkLongToDecimalASCII function: Ctalk library
__ctalkLongToHexASCII function: Ctalk library
__ctalkMapGLXWindow () function: Ctalk library
__ctalkMapX11Window () function: Ctalk library
__ctalkMatchAt () function: Ctalk library
__ctalkMatchIndexAt () function: Ctalk library
__ctalkMatchPrintToks () function: Ctalk library
__ctalkMatchText () function: Ctalk library
__ctalkMethodObjectMessage () function: Ctalk library
__ctalkMethodObjectMessage2Args () function: Ctalk library
__ctalkMethodPoolMax () function: Ctalk library
__ctalkMethodReturnClass () function: Ctalk library
__ctalkNArgs () function: Ctalk library
__ctalkNewFTFace () function: Ctalk library
__ctalkNewSignalEventInternal () function: Ctalk library
__ctalkNMatches () function: Ctalk library
__ctalkNonLocalArgBlkReturn () function: Ctalk library
__ctalkObjectAttrAnd () function: Ctalk library
__ctalkObjectAttrOr () function: Ctalk library
__ctalkObjectPrintOn () function: Ctalk library
__ctalkObjValPtr () function: Ctalk library
__ctalkOpenX11InputClient () function: Ctalk library
__ctalkPaneResource () function: Ctalk library
__ctalkPeekExceptionTrace () function: Ctalk library
__ctalkPeekRunTimeException () function: Ctalk library
__ctalkPendingException () function: Ctalk library
__ctalkPrintExceptionTrace function: Ctalk library
__ctalkPrintObject () function: Ctalk library
__ctalkPrintObject function: C statements
__ctalkPrintObjectByName () function: Ctalk library
__ctalkProcessWait () function: Ctalk library
__ctalkRaiseX11Window () function: Ctalk library
__ctalkReceiverReceiverBecome () function: Ctalk library
__ctalkReferenceObject () function: Ctalk library
__ctalkRegisterArgBlkReturn () function: Ctalk library
__ctalkRegisterBoolReturn () function: Boolean
__ctalkRegisterBoolReturn () function: Ctalk library
__ctalkRegisterCharPtrReturn () function: Ctalk library
__ctalkRegisterCharReturn () function: Ctalk library
__ctalkRegisterCTypedef () function: Ctalk library
__ctalkRegisterExtraObject () function: Ctalk library
__ctalkRegisterExtraObject function: Return values
__ctalkRegisterFloatReturn () function: Ctalk library
__ctalkRegisterIntReturn () function: Ctalk library
__ctalkRegisterLongLongIntReturn () function: Ctalk library
__ctalkRegisterUserFunctionName () function: Ctalk library
__ctalkRegisterUserObject () function: Ctalk library
__ctalkRegisterUserObject function: Return values
__ctalkReplaceVarEntry () function: Ctalk library
__ctalkRtGetMethod () function: Ctalk library
__ctalkRtGetMethodFn () function: Ctalk library
__ctalkRtMethodClass () function: Ctalk library
__ctalkRtMethodClassObject () function: Ctalk library
__ctalkRtReceiver () function: Ctalk library
__ctalkRtReceiverObject () function: Ctalk library
__ctalkRtSaveSourceFileName () function: Ctalk library
__ctalkSaveCVARArrayResource () function: Ctalk library
__ctalkSaveCVARResource () function: Ctalk library
__ctalkSaveOBJECTMemberResource () function: Ctalk library
__ctalkSearchBuffer () function: Ctalk library
__ctalkSelectXFontFace () function: Ctalk library
__ctalkSelfPrintOn () function: Ctalk library
__ctalkSetExceptionTrace () function: Ctalk library
__ctalkSetMethodPoolMax () function: Ctalk library
__ctalkSetObjectAttr () function: Ctalk library
__ctalkSetObjectAttr () function: Attributes
__ctalkSetObjectName () function: Ctalk library
__ctalkSetObjectScope () function: Ctalk library
__ctalkSetObjectScope function: Scoping
__ctalkSetObjectValue () function: Ctalk library
__ctalkSetObjectValueAddr () function: Ctalk library
__ctalkSetObjectValueBuf () function: Ctalk library
__ctalkSetObjectValueVar () function: Ctalk library
__ctalkSetObjPtr () function: Ctalk library
__ctalkSetRS () function: Ctalk library
__ctalkSignalHandlerBasic () function: Ctalk library
__ctalkSleep () function: Ctalk library
__ctalkSort () function: Ctalk library
__ctalkSortByName () function: Ctalk library
__ctalkSpawn () function: Ctalk library
__ctalkSplitText () function: Ctalk library
__ctalkStringifyName () function: Ctalk library
__ctalkStrToPtr () function: Ctalk library
__ctalkStrToPtr () function: Ctalk library
__ctalkStrToPtr function: Ctalk library
__ctalkSymbolReferenceByName () function: Ctalk library
__ctalkSysErrExceptionInternal () function: Ctalk library
__ctalkSystemSignalName () function: Ctalk library
__ctalkSystemSignalNumber () C function: SignalHandler
__ctalkSystemSignalNumber () function: Ctalk library
__ctalkTemplateCallerCVARCleanup () function: Ctalk library
__ctalkTerminalHeight () function: Ctalk library
__ctalkTerminalWidth () function: Ctalk library
__ctalkToCArrayElement () function: Ctalk library
__ctalkToCArrayElement function: Translating
__ctalkToCCharPtr () function: Ctalk library
__ctalkToCCharPtr function: Translating
__ctalkToCDouble () function: Ctalk library
__ctalkToCIntArrayElement () function: Ctalk library
__ctalkToCIntArrayElement function: Translating
__ctalkToCInteger () function: Ctalk library
__ctalkToCInteger function: Translating
__ctalkToCLongInteger function: Translating
__ctalkTrapException () function: Ctalk library
__ctalkTrapExceptionInternal () function: Ctalk library
__ctalkUNIXSocketOpenReader () function: Ctalk library
__ctalkUNIXSocketOpenWriter () function: Ctalk library
__ctalkUNIXSocketRead () function: Ctalk library
__ctalkUNIXSocketShutdown () function: Ctalk library
__ctalkUNIXSocketWrite () function: Ctalk library
__ctalkUTCTime () function: Ctalk library
__ctalkWarning () function: Ctalk library
__ctalkWrapText () function: Ctalk library
__ctalkX11ClearRectangleBasic () function: Ctalk library
__ctalkX11CloseClient () function: Ctalk library
__ctalkX11CloseParentPane () function: Ctalk library
__ctalkX11Colormap () function: Ctalk library
__ctalkX11CopyPixmapBasic () function: Ctalk library
__ctalkX11CreateGC () function: Ctalk library
__ctalkX11CreatePaneBuffer () function: Ctalk library
__ctalkX11CreatePixmap () function: Ctalk library
__ctalkX11DeletePixmap () function: Ctalk library
__ctalkX11Display () function: Ctalk library
__ctalkX11DisplayHeight () function: Ctalk library
__ctalkX11DisplayWidth () function: Ctalk library
__ctalkX11FontCursor () function: Ctalk library
__ctalkX11FreeGC () function: Ctalk library
__ctalkX11FreePaneBuffer () function: Ctalk library
__ctalkX11FreeSizeHints () function: Ctalk library
__ctalkX11GetSizeHints () function: Ctalk library
__ctalkX11InputClient () function: Ctalk library
__ctalkX11MakeEvent () function: Ctalk library
__ctalkX11MenuDrawLine () function: Ctalk library
__ctalkX11MenuDrawString () function: Ctalk library
__ctalkX11MoveWindow () function: Ctalk library
__ctalkX11NamedColor () function: Ctalk library
__ctalkX11OpenInputClient () function: Ctalk library
__ctalkX11PaneClearRectangle () function: Ctalk library
__ctalkX11PaneClearWindow () function: Ctalk library
__ctalkX11PaneDrawCircleBasic () function: Ctalk library
__ctalkX11PaneDrawLine () function: Ctalk library
__ctalkX11PaneDrawLineBasic () function: Ctalk library
__ctalkX11PaneDrawLineBasic () function: Ctalk library
__ctalkX11PaneDrawPoint () function: Ctalk library
__ctalkX11PaneDrawPointBasic () function: Ctalk library
__ctalkX11PaneDrawRectangle () function: Ctalk library
__ctalkX11PaneDrawRectangleBasic () function: Ctalk library
__ctalkX11PanePutStr () function: Ctalk library
__ctalkX11PanePutStrBasic () function: Ctalk library
__ctalkX11PaneRefresh () function: Ctalk library
__ctalkX11ParseGeometry () function: Ctalk library
__ctalkX11QueryFont () function: Ctalk library
__ctalkX11ResizePaneBuffer () function: Ctalk library
__ctalkX11ResizePixmap () function: Ctalk library
__ctalkX11ResizeWindow () function: Ctalk library
__ctalkX11RGBColor () function: Ctalk library
__ctalkX11SetBackground () function: Ctalk library
__ctalkX11SetBackgroundBasic () function: Ctalk library
__ctalkX11SetForegroundBasic () function: Ctalk library
__ctalkX11SetResource () function: Ctalk library
__ctalkX11SetSizeHints () function: Ctalk library
__ctalkX11SetWMNameProp () function: Ctalk library
__ctalkX11SubWindowGeometry () function: Ctalk library
__ctalkX11TextFromData () function: Ctalk library
__ctalkX11TextWidth () function: Ctalk library
__ctalkX11UseCursor () function: Ctalk library
__ctalkX11UseFontBasic () function: Ctalk library
__ctalkX11UseFontBasic () function: Ctalk library
__ctalkX11UseXRender () function: Ctalk library
__ctalkX11UsingXRender () function: Ctalk library
__ctalkX11WxHGeometry () function: Ctalk library
__ctalkX11XPMFromData () function: Ctalk library
__ctalkX11XPMInfo () function: Ctalk library
__ctalkXftAlpha () function: Ctalk library
__ctalkXftAscent () function: Ctalk library
__ctalkXftBlue () function: Ctalk library
__ctalkXftDescent () function: Ctalk library
__ctalkXftDescStr () function: Ctalk library
__ctalkXftFgAlpha () function: Ctalk library
__ctalkXftFgBlue () function: Ctalk library
__ctalkXftFgGreen () function: Ctalk library
__ctalkXftFgRed () function: Ctalk library
__ctalkXftFontPathFirst () function: Ctalk library
__ctalkXftFontPathNext () function: Ctalk library
__ctalkXftGetStringDimensions () function: Ctalk library
__ctalkXftGreen () function: Ctalk library
__ctalkXftHandle () function: Ctalk library
__ctalkXftHeight () function: Ctalk library
__ctalkXftInitialized () function: Ctalk library
__ctalkXftInitLib () function: Ctalk library
__ctalkXftIsMonospace () function: Ctalk library
__ctalkXftListFontsEnd () function: Ctalk library
__ctalkXftListFontsFirst () function: Ctalk library
__ctalkXftListFontsNext () function: Ctalk library
__ctalkXftMajorVersion () function: Ctalk library
__ctalkXftMaxAdvance () function: Ctalk library
__ctalkXftMinorVersion () function: Ctalk library
__ctalkXftQualifyFontName () function: Ctalk library
__ctalkXftRed () function: Ctalk library
__ctalkXftRequestedDPI () function: Ctalk library
__ctalkXftRequestedFamily () function: Ctalk library
__ctalkXftRequestedPointSize () function: Ctalk library
__ctalkXftRequestedSlant () function: Ctalk library
__ctalkXftRequestedWeigth () function: Ctalk library
__ctalkXftRevision () function: Ctalk library
__ctalkXftSelectedFamily () function: Ctalk library
__ctalkXftSelectedFontDescriptor () function: Ctalk library
__ctalkXftSelectedFontDescriptor () function: Ctalk library
__ctalkXftSelectedFontPath () function: Ctalk library
__ctalkXftSelectedPointSize () function: Ctalk library
__ctalkXftSelectedSlant () function: Ctalk library
__ctalkXftSelectedStyle () function: Ctalk library
__ctalkXftSelectedWeight () function: Ctalk library
__ctalkXftSelectFont () function: Ctalk library
__ctalkXftSelectFontFromFontConfig () function: Ctalk library
__ctalkXftSelectFontFromXLFD () function: Ctalk library
__ctalkXftSetForeground () function: Ctalk library
__ctalkXftSetForgroundFromNamedColor () function: Ctalk library
__ctalkXftShowFontLoad () function: Ctalk library
__ctalkXftTextDimensionsBasic () function: Ctalk library
__ctalkXftVerbosity () function: Ctalk library
__ctalkXftVersion () function: Ctalk library
__ctalkXPMToGLTexture () function: Ctalk library
__ctalkXPMToGLXTexture () function: Ctalk library
__ctalk_arg () function: Ctalk library
__ctalk_arg_cleanup () function: Ctalk library
__ctalk_arg_internal () function: Ctalk library
__ctalk_arg_pop () function: Ctalk library
__ctalk_arg_pop_deref () function: Ctalk library
__ctalk_arg_value_internal () function: Ctalk library
__ctalk_class_initialize () function: Ctalk library
__ctalk_define_class () function: Ctalk library
__ctalk_dictionary_add () function: Ctalk library
__ctalk_exitFn () function: Ctalk library
__ctalk_get_object () function: Ctalk library
__ctalk_get_object_return () function: Ctalk library
__ctalk_init () function: Ctalk library
__ctalk_initFn () function: Ctalk library
__ctalk_initLocalObjects () function: Ctalk library
__ctalk_method () function: Ctalk library
__ctalk_new_object () function: Ctalk library
__ctalk_primitive_method () function: Ctalk library
__ctalk_process_exitFn () function: Ctalk library
__ctalk_receiver_pop () function: Ctalk library
__ctalk_receiver_push () function: Ctalk library
__ctalk_register_c_method_arg () function: Ctalk library
__ctalk_self_internal () function: Ctalk library
__ctalk_self_internal_value () function: Ctalk library
__ctalk_set_global () function: Ctalk library
__ctalk_set_local () function: Ctalk library
__ctalk_set_local_by_name () function: Ctalk library
__ctalk_to_c_char () function: Ctalk library
__ctalk_to_c_char_ptr () function: Ctalk library
__ctalk_to_c_char_ptr function: Translating
__ctalk_to_c_double () function: Ctalk library
__ctalk_to_c_double function: Translating
__ctalk_to_c_int () function: Ctalk library
__ctalk_to_c_int function: Translating
__ctalk_to_c_longlong () function: Ctalk library
__ctalk_to_c_longlong function: Translating
__ctalk_to_c_ptr () function: Ctalk library
__ctalk_to_c_ptr_u () function: Ctalk library
__c_arg__ attribute: Method functions
__c_arg__ attribute: Method keywords
__edittext_delete_char () function: Ctalk library
__edittext_get_clipboard () function: Ctalk library
__edittext_index_from_pointer () function: Ctalk library
__edittext_index_from_pointer () function: Ctalk library
__edittext_insert_at_point () function: Ctalk library
__edittext_insert_str_at_click () function: Ctalk library
__edittext_insert_str_at_point () function: Ctalk library
__edittext_line_end () function: Ctalk library
__edittext_line_start () function: Ctalk library
__edittext_next_char () function: Ctalk library
__edittext_next_line () function: Ctalk library
__edittext_next_page () function: Ctalk library
__edittext_point_to_click () function: Ctalk library
__edittext_prev_char () function: Ctalk library
__edittext_prev_line () function: Ctalk library
__edittext_prev_page () function: Ctalk library
__edittext_recenter () function: Ctalk library
__edittext_rol_col_from_mark () function: Ctalk library
__edittext_scroll_down () function: Ctalk library
__edittext_scroll_up () function: Ctalk library
__edittext_set_clipboard_owner () function: Ctalk library
__edittext_set_selection_owner () function: Ctalk library
__edittext_text_end () function: Ctalk library
__edittext_text_start () function: Ctalk library
__edittext_xk_keysym () function: Ctalk library
__entrytext_get_primary_selection () function: Ctalk library
__entrytext_send_selection () function: Ctalk library
__entrytext_set_selection_owner () function: Ctalk library
__entrytext_update_selection () function: Ctalk library
__handleAppExit instance method (Application class): Application
__handleSigAbrt instance method (Application class): Application
__inspector_trace () function: Ctalk library
__inspect_get_global () function: Ctalk library
__inspect_get_receiver () function: Ctalk library
__inspect_globals () function: Ctalk library
__inspect_locals () function: Ctalk library
__inspect_long_help () function: Ctalk library
__inspect_short_help () function: Ctalk library
__LIST_HEAD macro: C Macros
__objRefCntDec function: Ctalk library
__objRefCntDec function.: Ctalk library
__objRefCntInc function: Ctalk library
__objRefCntSet function: Ctalk library
__objRefCntZero function: Ctalk library
__objRefCntZero function: free
__objRefCntZero function.: Ctalk library
__receiver_trace () function: Ctalk library
__refObj () function: Ctalk library
__rt_init_library_paths () function: Ctalk library
__warning_trace () function: Ctalk library
__xalloc () function: Ctalk library
__xfree () function: Ctalk library
__xfree function: Ctalk library
__xrealloc () function: Ctalk library

|
| instance method (Character class): Character
| instance method (Integer class): Integer
| instance method (LongInteger class): LongInteger
| metacharacter: String
|= instance method (Integer class): Integer
|= instance method (LongInteger class): LongInteger
|| instance method (Boolean class): Boolean
|| instance method (Character class): Character
|| instance method (Float class): Float
|| instance method (Integer class): Integer
|| instance method (LongInteger class): LongInteger

~
~ instance method (Character class): Character
~ instance method (Integer class): Integer
~ instance method (LongInteger class): LongInteger
~ operator: Prefixes

A
abs(3) C function: CFunction
abs(3) C function: abs
acceptSock instance method (TCPIPNetworkStreamReader class): TCPIPNetworkStreamReader
acceptSock instance method (TCPIPV6NetworkStreamReader class): TCPIPV6NetworkStreamReader
acos(3) C function: CFunction
acos(3) C function: acos
acosh(3) C function: CFunction
acosh(3) C function: acosh-asinh-atanh
add instance method (X11ListPane class): X11ListPane
add instance method (X11PopupMenu class): X11PopupMenu
addBuffer instance method (ANSIWidgetPane class): ANSIWidgetPane
addChild instance method (TreeNode class): TreeNode
addInstanceVariable instance method (Object class): Object
addressOf instance method (Object class): Object
addrInfo instance method (TCPIPNetworkStream class): TCPIPNetworkStream
addrInfo instance method (TCPIPV6NetworkStream class): TCPIPV6NetworkStream
addText instance method (X11TextPane class): X11TextPane
alpha instance method (GLXCanvasPane class): GLXCanvasPane
alpha instance method (X11FreeTypeFont class): X11FreeTypeFont
alpha instance variable (Pen class): Pen
alpha instance variable (RGBAColor class): RGBAColor
animationHandler instance variable (GLXCanvasPane class): GLXCanvasPane
ANSIButtonPane class: ANSIButtonPane
ANSIButtonPane class: ANSIMessageBoxPane
ANSILabelPane class: ANSILabelPane
ANSIListBoxPane class: ANSIListBoxPane
ANSIListBoxPane class: ANSIScrollingListBoxPane
ANSIProgressBarPane class: ANSIProgressBarPane
ANSIScrollingListBoxPane class: ANSIScrollingListBoxPane
ANSIScrollPane class: ANSIScrollPane
ANSITerminalPane class: ANSITerminalPane
ANSITerminalStream class: ANSITerminalStream
ANSITextBoxPane class: ANSITextBoxPane
ANSITextEntryPane class: ANSITextEntryPane
ANSIWidgetPane class: ANSIWidgetPane
ANSIYesNoBoxPane class: ANSIYesNoBoxPane
append instance method (AssociativeArray class): AssociativeArray
append instance method (List class): List
append instance method (SortedList class): SortedList
appendLine instance method (ANSILabelPane class): ANSILabelPane
appendLine instance method (ANSIListBoxPane class): ANSIListBoxPane
appendLine instance method (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
appendLine instance method (ANSITextBoxPane class): ANSITextBoxPane
Application class: Application
ARG macro: C Macros
ARG macro: Templates
ARG() () function (macro): Ctalk library
argFrameTop instance variable (Method class): Method
Arguments, command line: Application
Arguments, command line: Application
Array class: Array
Array class: Cautions
arrow instance method (X11Cursor class): X11Cursor
arrowCursor instance variable (X11ScrollBarPane class): X11ScrollBarPane
asAddrString instance method (Symbol class): Symbol
ascent instance variable (X11Font class): X11Font
ascent instance variable (X11FreeTypeFont class): X11FreeTypeFont
asCharacter instance method (Magnitude class): Magnitude
asCharacter instance method (Magnitude class): String
asctime(3) C function: CFunction
asctime(3) C function: asctime
asDecimalString instance method (Integer class): Integer
asExpandedPath instance method (String class): String
asFloat instance method (Magnitude class): Magnitude
asFloat instance method (Object class): Object
asHexString instance method (Integer class): Integer
asin(3) C function: CFunction
asin(3) C function: asin
asinh(3) C function: CFunction
asinh(3) C function: acosh-asinh-atanh
asInteger instance method (Float class): Float
asInteger instance method (Magnitude class): Magnitude
asInteger instance method (String class): String
asList instance method (String class): String
asLongInteger instance method (Magnitude class): Magnitude
AssociativeArray class: AssociativeArray
asString instance method (Array class): Array
asString instance method (Array class): String
asString instance method (Integer class): Integer
asString instance method (List class): String
asString instance method (Object class): Object
asString instance method (Symbol class): Symbol
asString instance method (Vector class): Vector
asSymbol instance method (Object class): Object
at instance method (Array class): Array
at instance method (AssociativeArray class): AssociativeArray
at instance method (Collection class): Collection
at instance method (String class): String
at method (Array class): Ctalk library
atanh(3) C function: acosh-asinh-atanh
atexit(3) C function: atexit
atof(3) C function: CFunction
atof(3) C function: atof
atoi(3) C function: CFunction
atoi(3) C function: atoi
atol(3) C function: CFunction
atol(3) C function: atol
atoll(3) C function: CFunction
atoll(3) C function: atoll
atPut instance method (Array class): Array
atPut instance method (AssociativeArray class): AssociativeArray
atPut instance method (Collection class): Collection
atPut instance method (String class): String
atPut method (AssociativeArray class): Ctalk library
attach method (Pane class): Pane
attachTo instance method (X11ButtonPane class): X11ButtonPane
attachTo instance method (X11CanvasPane class): X11CanvasPane
attachTo instance method (X11CheckBoxPane class): X11CheckBoxPane
attachTo instance method (X11ListPane class): X11ListPane
attachTo instance method (X11MessageBoxPane class): X11MessageBoxPane
attachTo instance method (X11Pane class): X11Pane
attachTo instance method (X11PaneDispatcher class): X11PaneDispatcher
attachTo instance method (X11ScrollBarPane class): X11ScrollBarPane
attachTo instance method (X11TextEditorPane class): X11TextEditorPane
attachTo instance method (X11TextEntryPane class): X11TextEntryPane
attachTo instance method (X11TextPane class): X11TextPane
attachTo instance method (X11YesNoBoxPane class): X11YesNoBoxPane
attributes instance variable (SignalHandler class): SignalHandler
Attributes, object: Attributes
autoconf: GNU tools
automake: GNU tools

B
background instance method (X11Bitmap class): X11Bitmap
background instance method (X11CanvasPane class): X11CanvasPane
background instance method (X11Pane class): X11Pane
background instance method (X11ScrollBarPane class): X11ScrollBarPane
background instance method (X11TextEditorPane class): X11TextEditorPane
background instance method (X11TextPane class): X11TextPane
Background method processes: Object
background resource (X11MessageBoxPane class): X11MessageBoxPane
backgroundColor instance variable (X11Bitmap class): X11Bitmap
backgroundColor instance variable (X11Pane class): X11Pane
backgroundColor resource (X11ButtonPane class): X11ButtonPane
backgroundColor resource (X11CheckBoxPane class): X11CheckBoxPane
backgroundColor resource (X11LabelPane class): X11LabelPane
backgroundColor resource (X11PopupMenu class): X11PopupMenu
backgroundColor resource (X11TextEntryPane class): X11TextEntryPane
backgroundColor resource (X11YesNoBoxPane class): X11YesNoBoxPane
backgroundMethodObjectMessage instance method (Object class): Object
backgroundMethodObjectMessage instance method (Object class): Ctalk library
baselineY instance variable (X11TextEntryPane class): X11TextEntryPane
basicNew instance method (Object class): Object
basicNew instance method (Vector class): Vector
basicObject instance method (Symbol class): Symbol
become instance method (Object class): Object
bevel instance variable (X11ScrollBarPane class): X11ScrollBarPane
bevel resource (X11CheckBoxPane class): X11CheckBoxPane
bevelEdges instance variable (X11ButtonPane class): X11ButtonPane
bevelWidth instance variable (X11ButtonPane class): X11ButtonPane
bgPixel instance variable (X11PopupMenu class): X11PopupMenu
biosKey method (Win32TerminalStream class): Win32TerminalStream
bitComp instance method (Character class): Character
bitComp instance method (Integer class): Integer
bitComp instance method (LongInteger class): LongInteger
Bitmap class: Bitmap
blinkOnOff instance method (ANSITerminalPane class): ANSITerminalPane
blue instance method (X11FreeTypeFont class): X11FreeTypeFont
blue instance variable (RGBAColor class): RGBAColor
boldFont instance variable (X11LabelPane class): X11LabelPane
boldFont resource (X11LabelPane class): X11LabelPane
boldOnOff instance method (ANSITerminalPane class): ANSITerminalPane
Boolean class: Boolean
boolFalse class variable (Boolean class): Boolean
boolFalse class variable (Boolean class): Ctalk library
boolTrue class variable (Boolean class): Boolean
boolTrue class variable (Boolean class): Ctalk library
BOOLVAL macro () function: Ctalk library
border instance variable (ANSITerminalPane class): ANSITerminalPane
border instance variable (X11LabelPane class): X11LabelPane
borderColor instance variable (X11ButtonPane class): X11ButtonPane
borderColor instance variable (X11LabelPane class): X11LabelPane
borderColor resource (X11ButtonPane class): X11ButtonPane
borderColor resource (X11LabelPane class): X11LabelPane
borderColor resource (X11ListPane class): X11ListPane
borderColor resource (X11TextEntryPane class): X11TextEntryPane
borderHighlightWidth instance variable (X11ButtonPane class): X11ButtonPane
borderLess instance variable (ANSILabelPane class): ANSILabelPane
borderMargin instance variable (X11ButtonPane class): X11ButtonPane
borderPen instance variable (X11ListPane class): X11ListPane
borderWidth instance variable (X11ButtonPane class): X11ButtonPane
borderWidth instance variable (X11LabelPane class): X11LabelPane
borderWidth instance variable (X11Pane class): X11Pane
borderWidth resource (X11ButtonPane class): X11ButtonPane
borderWidth resource (X11CheckBoxPane class): X11CheckBoxPane
borderWidth resource (X11LabelPane class): X11LabelPane
borderWidth resource (X11ListPane class): X11ListPane
borderWidth resource (X11TextEntryPane class): X11TextEntryPane
bottom instance variable (Rectangle class): Rectangle
bottomMargin resource (X11PopupMenu class): X11PopupMenu
bufLength instance variable (X11TextEditorPane class): X11TextEditorPane
button instance variable (X11MessageBoxPane class): X11MessageBoxPane
button instance variable (X11TextEditorPane class): X11TextEditorPane
button instance variable (X11TextEntryPane class): X11TextEntryPane
button1 instance variable (ANSIYesNoBoxPane class): ANSIYesNoBoxPane
button2 instance variable (ANSIYesNoBoxPane class): ANSIYesNoBoxPane
buttonClick instance method (X11FileSelectDialog class): X11FileSelectDialog
buttonPressHandler instance variable (GLXCanvasPane class): GLXCanvasPane
buttonState instance variable (GLXCanvasPane class): GLXCanvasPane
buttonState instance variable (X11ListPane class): X11ListPane
buttonText instance method (X11FileSelectDialog class): X11FileSelectDialog
buttonText instance variable (ANSIButtonPane class): ANSIButtonPane
buttonText resource (X11MessageBoxPane class): X11MessageBoxPane

C
C expressions: C statements
C library compatibility: C library functions
C library functions: C library functions
cAbs method (CFunction class): CFunction
cAcos method (CFunction class): CFunction
cAcosh method (CFunction class): CFunction
calcThumb instance method (X11ListPane class): X11ListPane
calculateSpaceAppend instance method (X11TextEntryPane class): X11TextEntryPane
CalendarTime Class: CalendarTime
Callback methods: Method
calloc(3) C function: calloc
callStackTrace instance method (Object class): Object
callStackTrace instance method (String class): String
canFocus instance variable (X11LabelPane class): X11PaneDispatcher
cAPIFunctionSearch instance method (LibrarySearch class): LibrarySearch
cAscTime method (CFunction class): CFunction
cAsin method (CFunction class): CFunction
cAsinh method (CFunction class): CFunction
cAtof method (CFunction class): CFunction
cAtoi method (CFunction class): CFunction
cAtol method (CFunction class): CFunction
cAtoll method (CFunction class): CFunction
cbrt(3) C function: CFunction
cbrt(3) C function: cbrt
cCbrt method (CFunction class): CFunction
cCeil method (CFunction class): CFunction
cChdir method (CFunction class): CFunction
cClearErr method (CFunction class): CFunction
cClock method (CFunction class): CFunction
cCopySign method (CFunction class): CFunction
cCos method (CFunction class): CFunction
cCosh method (CFunction class): CFunction
cCTime method (CFunction class): CFunction
cDiffTime method (CFunction class): CFunction
ceil(3) C function: CFunction
ceil(3) C function: ceil
center instance variable (Circle class): Circle
center instance variable (X11TextEntryPane class): X11TextEntryPane
cErf method (CFunction class): CFunction
cErfc method (CFunction class): CFunction
cExp method (CFunction class): CFunction
cExpm1 method (CFunction class): CFunction
cFabs method (CFunction class): CFunction
CFunction class: CFunction
CFunction class: Templates
cGetchar method (CFunction class): CFunction
cGetCwd method (CFunction class): CFunction
cGetEnv method (CFunction class): CFunction
cGetPID method (CFunction class): CFunction
cGetStr method (Win32TerminalStream class): Win32TerminalStream
char * C data type: C statements
char ** C data type: C statements
char C data type: C statements
Character class: Character
Character classes: String
Character constants: Character
charCellAt instance method (X11TextEntryPane class): X11TextEntryPane
charIndex instance method (X11TextEntryPane class): X11TextEntryPane
charPos instance method (String class): String
charPosR instance method (String class): String
chars instance variable (X11TextEntryPane class): X11TextEntryPane
charsRead instance variable (UNIXNetworkStreamReader class): UNIXNetworkStreamReader
charsWritten instance variable (UNIXNetworkStreamWriter class): UNIXNetworkStreamWriter
CHAR_CONSTANT_VALUE macro: Character
chDir instance method (DirectoryStream class): DirectoryStream
chDir instance method (X11FileSelectDialog class): X11FileSelectDialog
chdir(3) C function: CFunction
chdir(3) C function: chdir
childRefresh instance method (ANSITerminalPane class): ANSITerminalPane
children instance variable (Pane class): Pane
children instance variable (TreeNode class): TreeNode
chomp instance method (String class): String
Circle class: Circle
Class documentation: Documentation
Class initialization: Class initialization
class instance method (Object class): Object
Class library search path: Application
Class library search path: Translating
Class variable documentation: Documentation
Class variable documentation: Documentation
classdoc utility program: Documentation
Classes: Classes
classInit method (ReadFileStream class): ReadFileStream
CLASSLIBDIRS’ environment variable: Application
CLASSLIBDIRS’ environment variable: Translating
ClassLibraryTree class: ClassLibraryTree
classMethod keyword: Method keywords
className instance method (Object class): Object
CLASSNAME macro: C Macros
classObject instance method (Object class): Object
classSearchPath instance method (Application class): Application
classVariable keyword: Method keywords
cleanup instance method (ANSILabelPane class): ANSILabelPane
cleanup instance method (ANSIListBoxPane class): ANSIListBoxPane
cleanup instance method (ANSIMessageBoxPane class): ANSIMessageBoxPane
cleanup instance method (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
cleanup instance method (ANSIScrollPane class): ANSIScrollPane
cleanup instance method (ANSITextBoxPane class): ANSITextBoxPane
cleanup instance method (ANSIYesNoBoxPane class): ANSIYesNoBoxPane
clear instance method (Rectangle class): Rectangle
clear instance method (X11Bitmap class): X11Bitmap
clear instance method (X11CanvasPane class): X11CanvasPane
clear instance method (X11TextPane class): X11TextPane
clear method (ANSITerminalStream class): ANSITerminalStream
clear method (Win32TerminalStream class): Win32TerminalStream
clearClick instance method (X11ButtonPane class): X11ButtonPane
clearClick instance method (X11ButtonPane class): X11FileSelectDialog
clearerr(3) C function: CFunction
clearFocus instance method (X11PaneDispatcher class): X11PaneDispatcher
clearLine instance method (ANSITextBoxPane class): ANSITextBoxPane
clearRectangle instance method (X11Bitmap class): X11Bitmap
clearRectangle instance method (X11CanvasPane class): X11CanvasPane
clearRectangle instance method (X11Pane class): X11Pane
clearSelection instance method (X11TextEditorPane class): X11TextEditorPane
clearSelection instance method (X11TextEntryPane class): X11TextEntryPane
clearWindow instance method (X11Pane class): X11Pane
clickColor resource (X11CheckBoxPane class): X11CheckBoxPane
clicked instance variable (X11ButtonPane class): X11ButtonPane
clicked instance variable (X11CheckBoxPane class): X11CheckBoxPane
clientFD instance variable (X11TerminalStream class): X11TerminalStream
Clipboard: X11TextEditorPane
clipX instance variable (X11TextEntryPane class): X11TextEntryPane
cLlrint method (CFunction class): CFunction
cLlrintf method (CFunction class): CFunction
cLlrintl method (CFunction class): CFunction
clock(3) C function: CFunction
clock(3) C function: clock
closeSock instance method (TCPIPNetworkStream class): TCPIPNetworkStream
closeSock instance method (TCPIPV6NetworkStream class): TCPIPV6NetworkStream
closeSocket instance method (UNIXNetworkStream class): UNIXNetworkStream
closeStream instance method (FileStream class): FileStream
closeStream method (ANSITerminalStream class): ANSITerminalStream
cLrint method (CFunction class): CFunction
cLrintf method (CFunction class): CFunction
cLrintl method (CFunction class): CFunction
cmdLineArgc instance variable (Application class): Application
cmdLineArgs instance variable (Application class): Application
Collection class: Collection
Color RGB specifications: RGBAColor
colormap instance variable (GLXCanvasPane class): GLXCanvasPane
colorName instance variable (Pen class): Pen
Command line arguments: Application
Command line arguments: Application
Command line options: Invoking
cone instance method (GLUTApplication class): GLUTApplication
configureFonts instance method (X11ButtonPane class): X11ButtonPane
consoleReadLine instance method (String class): String
Constants, character: Character
container instance variable (X11Pane class): X11Pane
contains instance method (String class): String
contains instance method (Vector class): Vector
content instance variable (TreeNode class): TreeNode
copy (X11Bitmap srcBitmap, Integer srcX, Integer srcY, Integer srcWidth, Integer srcHeight, Integer destX, Integer destY): X11Bitmap
copy instance method (Object class): Object
copy instance method (Object class): Ctalk library
copy instance method (X11Bitmap class): X11Bitmap
copy instance method (X11CanvasPane class): X11CanvasPane
copy instance method (X11CanvasPane class): Ctalk library
Copying: Copying
Copying text: X11TextEditorPane
copysign(3) C function: CFunction
copysign(3) C function: copysign
cos(3) C function: CFunction
cos(3) C function: cos
cosh(3) C function: CFunction
cosh(3) C function: cosh
CPLUSPLUS_HEADER_X exception: Exception
cPutStr method (Win32TerminalStream class): Win32TerminalStream
cRand method (CFunction class): CFunction
create instance method (X11Bitmap class): X11Bitmap
createMainWindow instance method (GLUTApplication class): GLUTApplication
createSocketBasic instance method (TCPIPNetworkStream class): TCPIPNetworkStream
createSocketBasic instance method (TCPIPV6NetworkStream class): TCPIPV6NetworkStream
cStrcasecmp method (CFunction class): CFunction
cStrcat method (CFunction class): CFunction
cStrcat method (CFunction class): strcat-strcpy
cStrcmp method (CFunction class): CFunction
cStrcmp method (CFunction class): strcat-strcpy
cStrcmp method (CFunction class): strcat-strcpy
cStrcpy method (CFunction class): strcat-strcpy
cStrlen method (CFunction class): CFunction
cStrncasecmp method (CFunction class): CFunction
cStrncasecmp method (CFunction class): strncat-strncpy
cStrncat method (CFunction class): CFunction
cStrncat method (CFunction class): strncat-strncpy
cStrncmp method (CFunction class): CFunction
cStrncmp method (CFunction class): strncat-strncpy
cStrncpy method (CFunction class): CFunction
cStrncpy method (CFunction class): strncat-strncpy
ctalk command: Invoking
Ctalk language features: C
ctalkdefs.h include file: C Macros
CTALK_DIRECTORY_MODE macro: DirectoryStream
ctcc command: Invoking
ctdb command: Invoking
ctdb command: C statements
ctedit.ca demonstration program: X11TextEditorPane
cTime instance method (CTime class): CTime
cTime instance method (CTime class): ctime
ctime(3) C function: CFunction
ctime(3) C function: ctime
cTimeString instance method (CalendarTime class): CalendarTime
ctpp preprocessor: Invoking
ctpp preprocessor: Preprocessor
cube instance method (GLUTApplication class): GLUTApplication
currentDescParamStr instance method (X11FreeTypeFont class): X11FreeTypeFont
cursor instance variable (Pane class): Pane
cursor instance variable (X11TextEntryPane class): X11TextEntryPane
cursorAdvanceHint resource (X11TextEntryPane class): X11TextEntryPane
cursorHPad resource (X11PopupMenu class): X11PopupMenu
cursorPos instance method (ANSITerminalPane class): ANSITerminalPane
cursorPos instance method (X11TextPane class): X11TextPane
cursorPos method (ANSITerminalStream class): ANSITerminalStream
cursorX instance variable (X11TextEntryPane class): X11TextEntryPane
cusorPosY method (Win32TerminalStream class): Win32TerminalStream
Cutting text: X11TextEditorPane
Cutting text: X11TextEditorPane

D
darkShadowColor resource (X11CheckBoxPane class): X11CheckBoxPane
dayName instance method (CalendarTime class): CalendarTime
Debugging: C statements
decReferenceCount instance method (Object class): Object
defaultCursor instance method (X11Pane class): X11Pane
defaultFormat instance method (X11TextEditorPane class): X11TextEditorPane
defaultHandler instance method (SignalHandler class): SignalHandler
DEFAULT_TCPIP_PORT: TCPIPV6NetworkStreamWriter
defineAnimationFn instance method (GLUTApplication class): GLUTApplication
defineButtonBoxFn instance method (GLUTApplication class): GLUTApplication
definedClassMethod instance method (Method class): Method
definedClassMethod instance method (Object class): Method
defineDialsFn instance method (GLUTApplication class): GLUTApplication
definedInstanceMethod instance method (Method class): Method
definedInstanceMethod instance method (Object class): Method
defineDisplayFn instance method (GLUTApplication class): GLUTApplication
defineEntryFn instance method (GLUTApplication class): GLUTApplication
defineIdleFn instance method (GLUTApplication class): GLUTApplication
defineKeyboardFn instance method (GLUTApplication class): GLUTApplication
defineMenuStateFn instance method (GLUTApplication class): GLUTApplication
defineMenuStatusFn instance method (GLUTApplication class): GLUTApplication
defineMotionFn instance method (GLUTApplication class): GLUTApplication
defineMouseFn instance method (GLUTApplication class): GLUTApplication
defineOverlayDisplayFn instance method (GLUTApplication class): GLUTApplication
definePassiveMotionFn instance method (GLUTApplication class): GLUTApplication
defineRegion instance method (X11CanvasPane class): X11CanvasPane
defineReshapeFn instance method (GLUTApplication class): GLUTApplication
defineSpaceballMotionFn instance method (GLUTApplication class): GLUTApplication
defineSpaceballRotateFn instance method (GLUTApplication class): GLUTApplication
defineSpecialFn instance method (GLUTApplication class): GLUTApplication
defineTabletButtonFn instance method (GLUTApplication class): GLUTApplication
defineTabletMotionFn instance method (GLUTApplication class): GLUTApplication
defineTimerFn instance method (GLUTApplication class): GLUTApplication
defineVisiblityFn instance method (GLUTApplication class): GLUTApplication
delete instance method (ANSITerminalPane class): ANSITerminalPane
delete instance method (Collection class): Collection
delete instance method (Object class): Object
delete instance method (X11Bitmap class): X11Bitmap
deleteAndClose instance method (GLXCanvasPane class): GLXCanvasPane
deleteAndClose instance method (X11Pane class): X11Pane
deleteAt instance method (X11TextEntryPane class): X11TextEntryPane
deleteFile instance method (FileStream class): FileStream
deleteForward instance method (X11TextEntryPane class): X11TextEntryPane
deleteLastException instance method (Exception class): Exception
deletePaneBuffer method (Pane class): Pane
depth instance variable (X11Bitmap class): X11Bitmap
depth instance variable (X11Pane class): X11Pane
deref instance method (Symbol class): Symbol
deref instance method (Symbol class): Prefixes
descent instance variable (X11Font class): X11Font
descent instance variable (X11FreeTypeFont class): X11FreeTypeFont
detach instance method (Key class): Key
Dialog icon: X11Bitmap
Dialog icon: Ctalk library
difftime(3) C function: CFunction
difftime(3) C function: difftime
dimension instance method (ANSIProgressBarPane class): ANSIProgressBarPane
dimension instance method (ANSIScrollPane class): ANSIScrollPane
dimension instance method (Rectangle class): X11ScrollBarPane
dimensions instance method (Rectangle class): Rectangle
directCopy instance method (X11CanvasPane class): X11CanvasPane
Directory mode: DirectoryStream
directoryList instance method (DirectoryStream class): DirectoryStream
DirectoryStream class: DirectoryStream
dirPattern instance variable (X11FileSelectDialog class): X11FileSelectDialog
disableExceptionTrace instance method (Object class): Object
dismissButton instance variable (ANSITextBoxPane class): ANSITextBoxPane
display instance method (ANSILabelPane class): ANSILabelPane
display instance method (ANSIProgressBarPane class): ANSIProgressBarPane
display instance method (ANSIScrollPane class): ANSIScrollPane
DisplayFont class: DisplayFont
displayHeight instance method (GLXCanvasPane class): GLXCanvasPane
displayHeight instance variable (X11Pane class): X11Pane
displayPtr instance variable (GLXCanvasPane class): GLXCanvasPane
displayPtr instance variable (X11Bitmap class): X11Bitmap
displayPtr instance variable (X11Pane class): X11Pane
displayText instance method (X11TextEditorPane class): X11TextEditorPane
displayText instance method (X11TextPane class): X11TextPane
displayWidth instance method (GLXCanvasPane class): GLXCanvasPane
displayWidth instance variable (X11Pane class): X11Pane
do statements: Control structures
docDir instance method (Object class): Object
Documentation, methods and classes: Documentation
Documentation, methods, classes and variables: Documentation
dodecahedron instance method (GLUTApplication class): GLUTApplication
dom instance variable (CalendarTime class): CalendarTime
dotFiles instance variable (X11FileSelectDialog class): X11FileSelectDialog
dots instance method (X11TextEntryBox class): X11TextEntryBox
dots instance variable (X11TextEntryPane class): X11TextEntryPane
double C data type: C statements
dow instance variable (CalendarTime class): CalendarTime
doy instance variable (CalendarTime class): CalendarTime
dpi instance variable (X11FreeTypeFont class): X11FreeTypeFont
dragging instance variable (X11ScrollBarPane class): X11ScrollBarPane
dragStart instance variable (X11CanvasPane class): X11CanvasPane
draw instance method (Circle class): Circle
draw instance method (Line class): Line
draw instance method (Point class): Point
draw instance method (Rectangle class): Rectangle
draw instance method (X11ButtonPane class): X11ButtonPane
draw instance method (X11CheckBoxPane class): X11CheckBoxPane
draw instance method (X11FileSelectDialog class): X11FileSelectDialog
draw instance method (X11LabelPane class): X11LabelPane
draw instance method (X11ListBox class): X11ListBox
draw instance method (X11ListPane class): X11ListPane
draw instance method (X11MessageBoxPane class): X11MessageBoxPane
draw instance method (X11PopupMenu class): X11PopupMenu
draw instance method (X11TextEntryBox class): X11TextEntryBox
draw instance method (X11TextEntryPane class): X11TextEntryPane
draw instance method (X11YesNoBoxPane class): X11YesNoBoxPane
drawButtonLayout instance method (X11LabelPane class): X11LabelPane
drawCircle instance method (X11Bitmap class): X11Bitmap
drawCircle instance method (X11CanvasPane class): X11CanvasPane
drawCursor instance method (X11TextEntryPane class): X11TextEntryPane
drawFilledRectangle instance method (X11Bitmap class): X11Bitmap
drawFilledRectangle instance method (X11Bitmap class): X11Bitmap
drawFilledRectangle instance method (X11CanvasPane class): X11CanvasPane
drawFmtText instance method (GLXCanvasPane class): GLXCanvasPane
drawFmtTextFT instance method (GLXCanvasPane class): GLXCanvasPane
drawFmtTextW instance method (GLXCanvasPane class): GLXCanvasPane
drawItemList instance method (X11ListPane class): X11ListPane
drawLine instance method (X11Bitmap class): X11Bitmap
drawLine instance method (X11Bitmap class): Line
drawLine instance method (X11CanvasPane class): X11CanvasPane
drawPoint instance method (X11Bitmap class): X11Bitmap
drawPoint instance method (X11CanvasPane class): X11CanvasPane
drawRectangle instance method (X11CanvasPane class): X11CanvasPane
drawRoundedRectangle instance method (X11CanvasPane class): X11CanvasPane
drawRoundedRectangle instance method (X11CanvasPane class): X11CanvasPane
drawSelection instance method (X11TextEntryPane class): X11TextEntryPane
drawText instance method (GLXCanvasPane class): GLXCanvasPane
drawTextFT instance method (GLXCanvasPane class): GLXCanvasPane
drawTextW instance method (GLXCanvasPane class): GLXCanvasPane
drawThumb instance method (X11ListPane class): X11ListPane
drawThumb instance method (X11ScrollBarPane class): X11ScrollBarPane
drawWithPen instance method (Line class): Line
drawWithPen instance method (Point class): Point
drawWithPen instance method (Rectangle class): Rectangle
dump instance method (Object class): Object
dump instance method (Object class): C statements

E
Editing, text: Ctalk library
Emacs, GNU: GNU tools
enableExceptionTrace instance method (Object class): Object
end instance variable (Line class): Line
entryContents instance method (X11TextEntryBox class): X11TextEntryBox
entryIcon instance method (X11Bitmap class): X11Bitmap
entryIconEye instance method (X11Bitmap class): X11Bitmap
entryIconEyeSlashed instance method (X11Bitmap class): X11Bitmap
entryLength instance method (X11FileSelectDialog class): X11FileSelectDialog
entryPane instance method (X11TextEntryBox class): X11TextEntryBox
entryPane instance variable (X11TextEntryBox class): X11FileSelectDialog
entryText instance method (X11TextEntryPane class): X11TextEntryPane
envVarExists instance method (String class): String
eraseThumb instance method (X11ScrollBarPane class): X11ScrollBarPane
erf(3) C function: CFunction
erf(3) C function: erf
erfc(3) C function: CFunction
erfc(3) C function: erfc
errno: SystemErrnoException
errno: Ctalk library
errno build-in variable: SystemErrnoException
errno macro: Errors
errno macro: Ctalk library
errorColumn instance variable (Method class): Method
errorLine instance variable (Method class): Method
Errors: Errors
errors instance method (X11FreeTypeFont class): X11FreeTypeFont
Escape sequences, character: Character
eval instance method (String class): String
eval keyword: Method keywords
Event class: Event
eventClass instanceVariable (InputEvent class): InputEvent
eventData instanceVariable (InputEvent class): InputEvent
eventMask instance variable (X11TerminalStream class): X11TerminalStream
Events, X Window System: X11TerminalStream
Events, X Window System: InputEvent
Example program, text editor: X11TextEditorPane
Exception class: Exception
exceptionHandler instance method (Exception class): Exception
Exceptions: Errors
execC instance method (Application class): Application
execItem instance method (X11PopupMenu class): X11PopupMenu
exists instance method (FileStream class): FileStream
exitHandler instance variable (Application class): Application
exp(3) C function: CFunction
exp(3) C function: exp
expm1(3) C function: CFunction
expm1(3) C function: expm1
exposeHandler instance variable (GLXCanvasPane class): GLXCanvasPane
Expr class: Expr
extensions instance method (GLXCanvasPane class): GLXCanvasPane
Externs and C variables: Externs

F
fabs(3) C function: CFunction
fabs(3) C function: fabs
fabsf(3) C function: CFunction
fabsl(3) C function: CFunction
faceBold instance method (X11Bitmap class): X11Bitmap
faceBold instance method (X11Pane class): X11Pane
faceBold instance method (X11TextPane class): X11TextPane
faceBoldItalic instance method (X11Bitmap class): X11Bitmap
faceBoldItalic instance method (X11Pane class): X11Pane
faceBoldItalic instance method (X11TextPane class): X11TextPane
faceItalic instance method (X11Bitmap class): X11Bitmap
faceItalic instance method (X11Pane class): X11Pane
faceItalic instance method (X11TextPane class): X11TextPane
faceRegular instance method (X11Bitmap class): X11Bitmap
faceRegular instance method (X11Pane class): X11Pane
faceRegular instance method (X11TextPane class): X11TextPane
FALSE_ASSERTION_X exception: Exception
family instance variable (X11FreeTypeFont class): X11FreeTypeFont
fclose(3) C function: fclose
fegetround(3) C function: fegetround
feholdexcept(3) C function: feholdexcept
feof(3) C function: feof
ferror(3) C function: ferror
fesetround(3) C function: fesetround
fetestexcepts(3) C function: fetestexcept
fflush(3) C function: fflush
fgAlpha instance variable (X11FreeTypeFont class): X11FreeTypeFont
fgBlue instance variable (X11FreeTypeFont class): X11FreeTypeFont
fgetc(3) C function: fgetc
fgetpos(3) C function: fgetpos
fgets(3) C function: fgets
fgGreen instance variable (X11FreeTypeFont class): X11FreeTypeFont
fgRed instance variable (X11FreeTypeFont class): X11FreeTypeFont
FILEEOF macro: C Macros
fileMode instance variable (X11FileSelectDialog class): X11FileSelectDialog
FileStream class: FileStream
FILE_ALREADY_OPEN_X exception: Exception
FILE_IS_DIRECTORY_X exception: Exception
fill instance method (Rectangle class): Rectangle
fill instance method (X11MessageBoxPane class): X11MessageBoxPane
fill instance method (X11YesNoBoxPane class): X11YesNoBoxPane
fillRadius resource (X11CheckBoxPane class): X11CheckBoxPane
fillWithPen instance method (Rectangle class): Rectangle
float C data type: C statements
Float class: Float
floor(3) C function: floor
fmod(3) C function: fmod
FMT_0XHEX macro: C Macros
focusHighlightOnOff instance method (void): ANSIButtonPane
Font configuration: X11FreeTypeFont
font instance method (X11Bitmap class): X11Bitmap
font instance method (X11LabelPane class): X11LabelPane
font instance method (X11Pane class): X11Pane
font instance method (X11Pane class): X11Pane
font instance method (X11TextPane class): X11TextPane
font resource (X11ButtonPane class): X11ButtonPane
font resource (X11LabelPane class): X11LabelPane
font resource (X11ListPane class): X11ListPane
font resource (X11PopupMenu class): X11PopupMenu
font resource (X11TextEntryPane class): X11TextEntryPane
Font specification, determining: String
fontDesc instance variable (X11Font class): X11Font
fontDescStr instance variable (X11Pane class): X11Pane
fontId instance variable (X11Font class): X11Font
Fonts, selecting: X11TextEditorPane
fonts.conf: X11FreeTypeFont
fontVar instance variable (X11Pane class): X11FreeTypeFont
fontVar instance variable (X11Pane class): X11Pane
fontVar instance variable (X11Pane class): X11TextEditorPane
fontVar instancevariable (X11TextEditorPane class): X11TextEditorPane
fopen(3) C function: fopen
for statements: Control structures
foreground instance method (X11Bitmap class): X11Bitmap
foreground instance method (X11CanvasPane class): X11CanvasPane
foreground instance method (X11Pane class): X11Pane
foreground instance method (X11TextEditorPane class): X11TextEditorPane
foreground instance method (X11TextPane class): X11TextPane
foregroundColor instance variable (X11Pane class): X11Pane
foregroundColor instance variable (X11TextEditorPane class): X11TextEditorPane
foregroundColor resource (X11ButtonPane class): X11ButtonPane
foregroundColor resource (X11LabelPane class): X11LabelPane
foregroundColor resource (X11MessageBoxPane class): X11MessageBoxPane
foregroundColor resource (X11YesNoBoxPane class): X11YesNoBoxPane
format instance method (TreeNode class): TreeNode
formatClassVariable instance method (ObjectInspector class): ObjectInspector
formatInstanceVariable instance method (ObjectInspector class): ObjectInspector
formatObject instance method (Object class): C statements
formatObject instance method (ObjectInspector class): ObjectInspector
fprintf(3) C function: fprintf
fputc(3) C function: fputc
fputc(3) C function: fputs
frame instance variable (X11ScrollBarPane class): X11ScrollBarPane
framePen instance variable (X11ScrollBarPane class): X11ScrollBarPane
frameRadius resource (X11CheckBoxPane class): X11CheckBoxPane
frameRate instance method (GLXCanvasPane class): GLXCanvasPane
frameWidth instance method (X11ScrollBarPane class): X11ScrollBarPane
frameWidthVar instance variable (X11ScrollBarPane class): X11ScrollBarPane
fread(3) C function: fread
free(3) C function: free
freeFTFont instance method (GLXCanvasPane class): GLXCanvasPane
FreeType configuration: X11FreeTypeFont
freeXFont instance method (GLXCanvasPane class): GLXCanvasPane
freopen(3) C function: freopen
frexp(3) C function: frexp
fscanf(3) C function: Variable arguments
fscanf(3) C function: fscanf
fseek(3) C function: fseek
fsetpos(3) C function: fsetpos
fstat(3) C function: fstat
ftell(3) C function: ftell
ftFont instance method (X11Pane class): X11Pane
ftFont resource (X11LabelPane class): X11LabelPane
ftFontVar instance variable (X11Pane class): X11FreeTypeFont
ftFontVar instance variable (X11Pane class): X11TextEditorPane
ftFontVar instancevariable (X11TextEditorPane class): X11Pane
ftFontVar instancevariable (X11TextEditorPane class): X11TextEditorPane
fullScreen instance method (GLUTApplication class): GLUTApplication
Function arguments: C statements
Function parameters: C statements
fwrite(3) C function: fwrite

G
gadgetRMargin resource (X11PopupMenu class): X11PopupMenu
gadgetSpace instance variable (X11PopupMenu class): X11PopupMenu
gadgetSpace resource (X11PopupMenu class): X11PopupMenu
gdb command: Invoking
gdb command: C statements
geometry resource (X11MessageBoxPane class): X11MessageBoxPane
geometry resource (X11YesNoBoxPane class): X11YesNoBoxPane
Geometry, subpanes: X11CanvasPane
Geometry, windows: X11PaneDispatcher
Geometry, windows: Ctalk library
Geometry, X window: Application
geomFlags instance variable (Application class): Application
getc(3) C function: getc
getCh method (ANSITerminalStream class): ANSITerminalStream
getCh method (Win32TerminalStream class): Win32TerminalStream
getchar(3) C function: CFunction
getchar(3) C function: getchar
getCwd instance method (DirectoryStream class): DirectoryStream
getcwd(3) C function: CFunction
getcwd(3) C function: getcwd
getEnv instance method (String class): String
getenv(3) C function: CFunction
getenv(3) C function: getenv
getExpandedDir instance method (X11FileSelectDialog class): X11FileSelectDialog
getFocusWidgetText instance method (ANSIYesNoBoxPane class): ANSIYesNoBoxPane
getFontInfo instance method (X11Font class): X11Font
getKeyObject instance method (Key class): Key
getPID instance method (Application class): Application
getPID method (SignalEvent class): SignalEvent
getpid(3) C function: CFunction
getpid(3) C function C Function: getpid
getReferenceCount instance method (Object class): Object
getRS instance method (String class): String
getShiftState method (Win32TerminalStream class): Win32TerminalStream
getUTCTime instance method (CTime class): CalendarTime
getValue instance method (Collection class): Collection
getValue instance method (Symbol class): Symbol
GLEW library: Ctalk library
GLEW library: Ctalk library
GLEW library: Ctalk library
globPattern instance method (DirectoryStream class): DirectoryStream
GLUT callbacks, defining: GLUTApplication
GLUT library API functions: Ctalk library
GLUTApplication class: GLUTApplication
GLX example program: GLXCanvasPane
GLXCanvasPane class: GLXCanvasPane
glXChooseVisual(3): GLXCanvasPane
glXChooseVisual(3): GLXCanvasPane
glxContextPtr instance variable (GLXCanvasPane class): GLXCanvasPane
glxinfo(3): GLXCanvasPane
gmTime instance method (CalendarTime class): CalendarTime
gmTime instance method (CTime class): CTime
gmtime(3) C function C Function: gmtime-localtime
gmtOff instance variable (CalendarTime class): CalendarTime
GNU autoconf: GNU tools
GNU automake: GNU tools
GNU Emacs: GNU tools
GNU Free Documentation License: GNU Free Documentation License
GNU General Public License: Copying
GNU Lesser General Public License: Copying
gotoChar instance method (X11TextEditorPane class): X11TextEditorPane
gotoXY instance method (ANSITerminalPane class): ANSITerminalPane
gotoXY instance method (X11TextPane class): X11TextPane
gotoXY method (ANSITerminalStream class): ANSITerminalStream
gotoXY method (Win32TerminalStream class): Win32TerminalStream
grabCursor instance variable (X11ScrollBarPane class): X11ScrollBarPane
grabMove instance method (X11Cursor class): X11Cursor
grayed instance variable (X11LabelPane class): X11LabelPane
grayedColor instance variable (X11LabelPane class): X11LabelPane
grayedColor resource (X11LabelPane class): X11LabelPane
green instance method (X11FreeTypeFont class): X11FreeTypeFont
green instance variable (RGBAColor class): RGBAColor

H
handle instance method (Exception class): Exception
handle instance variable (X11FreeTypeFont class): X11FreeTypeFont
handle method (Exception class): Errors
handleDestroy instance variable (X11PaneDispatcher class): X11PaneDispatcher
handleEnterNotify instance variable (X11PaneDispatcher class): X11PaneDispatcher
handleFocusIn instance variable (X11PaneDispatcher class): X11PaneDispatcher
handleFocusOut instance variable (X11PaneDispatcher class): X11PaneDispatcher
handleInput instance method (ANSIButtonPane class): ANSIButtonPane
handleInput instance method (ANSILabelPane class): ANSILabelPane
handleInput instance method (ANSIListBoxPane class): ANSIListBoxPane
handleInput instance method (ANSIProgressBarPane class): ANSIProgressBarPane
handleInput instance method (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
handleInput instance method (ANSIScrollPane class): ANSIScrollPane
handleInput instance method (ANSITextBoxPane class): ANSITextBoxPane
handleInput instance method (ANSIYesNoBoxPane class): ANSIYesNoBoxPane
handleInput method (ANSITextEntryPane class): ANSIWidgetPane
handleInput method (ANSITextEntryPane class): ANSITextEntryPane
handleInput method (ANSIWidgetPane class): ANSIWidgetPane
handleInput method (ANSIWidgetPane class): ANSIWidgetPane
handleKbdInput instance variable (X11PaneDispatcher class): X11PaneDispatcher
handleLeaveNotify instance variable (X11PaneDispatcher class): X11PaneDispatcher
handleMap instance variable (X11PaneDispatcher class): X11PaneDispatcher
handleMove instance variable (X11PaneDispatcher class): X11PaneDispatcher
handlePointerInput instance variable (X11PaneDispatcher class): X11PaneDispatcher
handlePointerMotion instance variable (X11PaneDispatcher class): X11PaneDispatcher
handler instance variable (SignalHandler class): SignalHandler
handleResize instance variable (X11PaneDispatcher class): X11PaneDispatcher
handlerMethod instance variable (Exception class): Exception
handleSelectionClear instance variable (X11PaneDispatcher class): X11PaneDispatcher
handleSelectionRequest instance variable (X11PaneDispatcher class): X11PaneDispatcher
handleSubPaneEvent instance method (X11PaneDispatcher class): X11PaneDispatcher
handleWMFocusChage instance variable (X11PaneDispatcher class): X11PaneDispatcher
hasExtension instance method (GLXCanvasPane class): GLXCanvasPane
hasFocus: X11PaneDispatcher
hasFocus instance variable (ANSIWidgetPane class): ANSIWidgetPane
hasMeta instance method (DirectoryStream class): DirectoryStream
hasPointerContext instance method (Object class): Object
haveClick instance method (X11ButtonPane class): X11ButtonPane
haveDST instance method (CTime class): CTime
haveDst instance variable (CalendarTime class): CalendarTime
haveMultiLine instance variable (X11LabelPane class): X11LabelPane
haveXft instance variable (X11Pane class): X11Pane
head instance method (Collection class): Collection
Header files: Preprocessor
height instance variable (X11Bitmap class): X11Bitmap
height instance variable (X11Font class): X11Font
height instance variable (X11FreeTypeFont class): X11FreeTypeFont
height resource (X11CheckBoxPane class): X11CheckBoxPane
highlight instance variable (X11PaneDispatcher class): X11PaneDispatcher
highlightBorderColor instance variable (X11LabelPane class): X11LabelPane
highlightBorderColor instance variable (X11LabelPane class): X11LabelPane
highlightBorderColor resource (X11ButtonPane class): X11ButtonPane
highlightBorderColor resource (X11LabelPane class): X11LabelPane
highlightBorderWidth instance variable (X11LabelPane class): X11LabelPane
highlightBorderWidth resource (X11ButtonPane class): X11ButtonPane
highlightBorderWidth resource (X11LabelPane class): X11LabelPane
highlightForegroundColor resource (X11ButtonPane class): X11ButtonPane
highlightForegroundColor resource (X11LabelPane class): X11LabelPane
highlightHPen instance variable (X11ButtonPane class): X11ButtonPane
highlightHPenColor resource (X11ButtonPane class): X11ButtonPane
highlightTextBold resource (X11LabelPane class): X11LabelPane
highlightTextColor instance variable (X11LabelPane class): X11LabelPane
highlightTextColor resource (X11LabelPane class): X11LabelPane
highlightVPen instance variable (X11ButtonPane class): X11ButtonPane
highlightVPenColor resource (X11ButtonPane class): X11ButtonPane
hlColor resource (X11PopupMenu class): X11PopupMenu
hlPixel instance variable (X11PopupMenu class): X11PopupMenu
hlTextColor resource (X11PopupMenu class): X11PopupMenu
hlTextPixel instance variable (X11PopupMenu class): X11PopupMenu
hMargins resource (X11PopupMenu class): X11PopupMenu
hostToAddress instance method (TCPIPNetworkStream class): TCPIPNetworkStream
hours instance variable (CalendarTime class): CalendarTime
hover instance variable (X11ButtonPane class): X11ButtonPane
hover instance variable (X11TextEntryPane class): X11TextEntryPane
hoverBorderWidth resource (X11TextEntryPane class): X11TextEntryPane
hPad resource (X11TextEntryPane class): X11TextEntryPane

I
Icon IDs: X11MessageBoxPane
Icon IDs: X11YesNoBoxPane
icon instance method (X11Bitmap class): X11Bitmap
Icon, dialog: X11Bitmap
Icon, dialog: Ctalk library
iconCaution instance method (X11Bitmap class): X11Bitmap
iconID resource (X11MessageBoxPane class): X11MessageBoxPane
iconID resource (X11MessageBoxPane class): X11YesNoBoxPane
iconInfo instance method (X11Bitmap class): X11Bitmap
iconStop instance method (X11Bitmap class): X11Bitmap
icosahedron instance method (GLUTApplication class): GLUTApplication
Identifiers for variables (tags): Ctalk library
idleHandler instance variable (GLXCanvasPane class): GLXCanvasPane
if statements: Control structures
ignoreSignal instance method (SignalHandler class): SignalHandler
iInit instance variable (X11ListPane class): X11ListPane
imported instance variable (Method class): Method
Include files: Preprocessor
incReferenceCount instance method (Object class): Object
index(3) C function: index-function
init instance method (AssociativeArray class): AssociativeArray
init instance method (ClassLibraryTree class): ClassLibraryTree
init instance method (List class): List
init instance method (SortedList class): SortedList
initFontLib instance method (X11FreeTypeFont class): X11FreeTypeFont
initFontLib instance method (X11FreeTypeFont class): X11Pane
initFontLib instance method (X11FreeTypeFont class): X11TextPane
initGlut instance method (GLUTApplication class): GLUTApplication
initialize instance method (ANSITerminaPane class): ANSITerminalPane
initialize instance method (GLXCanvasPane class): GLXCanvasPane
initialize instance method (X11Pane class): X11Pane
initialize instance method (X11Pane class): X11Pane
initialize instance method (X11Pane class): X11Pane
initialize instance method (X11Pane class): X11Pane
initialized instance variable (X11LabelPane class): X11LabelPane
initialized instance variable (X11MessageBoxPane class): X11MessageBoxPane
initialized instance variable (X11YesNoBoxPane class): X11YesNoBoxPane
initialized instance variable (X11YesNoBoxPane class): X11FileSelectDialog
initWidgets instance method (X11FileSelectDialog class): X11FileSelectDialog
initWidgets instance method (X11ListBox class): X11ListBox
initWidgets instance method (X11MessageBoxPane class): X11MessageBoxPane
initWidgets instance method (X11TextEntryBox class): X11TextEntryBox
initWidgets instance method (X11YesNoBoxPane class): X11YesNoBoxPane
initWindow instance method (GLUTApplication class): GLUTApplication
Inpectors: C statements
inputBuffer instance variable (ANSITextEntryPane class): ANSITextEntryPane
InputEvent class: InputEvent
inputHandle instance variable (ANSITerminalStream class): ANSITerminalStream
inputLength instance variable (ANSITextEntryPane class): ANSITextEntryPane
inputPending method (TerminalStream class): TerminalStream
inputPID instance variable (X11TerminalStream class): X11TerminalStream
inputQueue instance variable (TerminalStream class): TerminalStream
inputQueueMax instance variable (TerminalStream class): TerminalStream
inputStream instance variable (X11Pane class): X11Pane
inputWidth instance method (X11TextEntryPane class): X11TextEntryPane
inputWidth method (ANSITextEntryPane class): ANSITextEntryPane
insertAt instance method (X11TextEntryPane class): X11TextEntryPane
inspect instance method (Object class): Object
inspect instance method (Object class): C statements
inspect instance method (Object class): C statements
inspect instance method (ObjectInspector class): ObjectInspector
inspect instance method (ObjectInspector class): Ctalk library
inspect_get_local () function: Ctalk library
installAbortHandlerBasic instance method (Application class): Application
installCallBackFns instance method (GLUTApplication class): GLUTApplication
installExitHandler instance method (Application class): Application
installExitHandlerBasic instance method (Application class): Application
installHandler instance method (Exception class): Exception
installHandler instance method (SignalHandler class): SignalHandler
installPrefix instance method (Application class): Application
Instance variable documentation: Documentation
Instance variable documentation: Documentation
instanceMethod instance method (Object class): Object
instanceMethod keyword: Method keywords
instanceVariable keyword: Method keywords
int C data type: C statements
Integer class: Integer
integerAt instance method (Collection class): Collection
INTVAL macro: Scoping
INTVAL macro () function: Ctalk library
INVALID_OPERAND_X exception: Exception
INVALID_RECEIVER_X exception: Exception
INVALID_VARIABLE_DECLARATION_X exception: Exception
invert instance method (Character class): Character
invert instance method (Character class): Prefixes
invert instance method (Integer class): Integer
invert instance method (Integer class): Prefixes
invert instance method (LongInteger class): LongInteger
invert instance method (LongInteger class): Prefixes
Invoking ctalk: Invoking
is instance method (Object class): Object
isAlNum instance method (Character class): Character
isAlNum method (Character class): isalnum-isxdigit
isalnum(3) C function: isalnum-isxdigit
isAlpha instance method (Character class): Character
isAlpha method (Character class): isalnum-isxdigit
isalpha(3) C function: isalnum-isxdigit
isAM instance method (CTime class): CTime
isASCII instance method (Character class): Character
isASCII method (Character class): isalnum-isxdigit
isascii(3) C function: isalnum-isxdigit
isATty method (TerminalStream class): TerminalStream
isBlank instance method (Character class): Character
isBlank method (Character class): isalnum-isxdigit
isblank(3) C function: isalnum-isxdigit
isClassMethod instance method (Object class): Object
isClassObject instance method (Object class): Object
isClicked instance method (X11ButtonPane class): X11ButtonPane
isCntrl instance method (Character class): Character
isCntrl method (Character class): isalnum-isxdigit
iscntrl(3) C function: isalnum-isxdigit
isDigit instance method (Character class): Character
isDigit method (Character class): isalnum-isxdigit
isdigit(3) C function: isalnum-isxdigit
isDir instance method (FileStream class): FileStream
isDir method (FileStream class): Errors
isdst instance variable (CalendarTime class): CalendarTime
isEmtpy instance method (Collection class): Collection
isGraph instance method (Character class): Character
isGraph method (Character class): isalnum-isxdigit
isgraph(3) C function: isalnum-isxdigit
isInitialized instance variable (Method class): Method
isInputPane instance variable (ANSIWidgetPane class): ANSIWidgetPane
isInstanceMethod instance method (Object class): Object
isInstanceVariable instance method (Object class): Object
isLower instance method (Character class): Character
isLower method (Character class): isalnum-isxdigit
islower(3) C function: isalnum-isxdigit
isMonospace instance method (X11FreeTypeFont class): X11FreeTypeFont
isNull instance method (Object class): Object
isNullValue instance method (Object class): Object
isoTimeString instance method (CalendarTime class): CalendarTime
isPrint instance method (Character class): Character
isPrint method (Character class): isalnum-isxdigit
isprint(3) C function: isalnum-isxdigit
isPunct instance method (Character class): Character
isPunct method (Character class): isalnum-isxdigit
ispunct(3) C function: isalnum-isxdigit
isSpace instance method (Character class): Character
isSpace method (Character class): isalnum-isxdigit
isspace(3) C function: isalnum-isxdigit
isSubClassOf instance method (Object class): Object
isTopLevel instance method (X11Pane class): X11Pane
isUpper instance method (Character class): Character
isUpper method (Character class): isalnum-isxdigit
isupper(3) C function: isalnum-isxdigit
isXDigit instance method (Character class): Character
isXDigit method (Character class): isalnum-isxdigit
isxdigit(3) C function: isalnum-isxdigit
isXLFD instance method (String class): String
IS_OBJECT macro: C Macros
IS_VALUE_INSTANCE_VAR macro: C Macros
is_zero_q function: Ctalk library
ItemBox class: X11FileSelectDialog
itemHeight instance variable (X11PopupMenu class): X11PopupMenu
items instance variable (ANSIListBoxPane class): ANSIListBoxPane
items instance variable (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
items instance variable (X11ListBox class): X11ListBox
items instance variable (X11ListPane class): X11ListPane
items instance variable (X11PopupMenu class): X11PopupMenu
itemSpace resource (X11PopupMenu class): X11PopupMenu

J
justify instance variable (X11LabelPane class): X11LabelPane

K
Key class: Key
keyAt instance method (AssociativeArray class): AssociativeArray
keyExists instance method (Collection class): Collection
keyPressHandler instance variable (GLXCanvasPane class): GLXCanvasPane
keyScrollIncrement resource (X11ListPane class): X11ListPane
keyState instance variable (X11MessageBoxPane class): X11MessageBoxPane

L
label instance variable (X11ButtonPane class): X11ButtonPane
label instance variable (X11MessageBoxPane class): X11MessageBoxPane
label instance variable (X11YesNoBoxPane class): X11YesNoBoxPane
label instance variable (X11YesNoBoxPane class): X11FileSelectDialog
labs(3) C function: labs
lastY instance variable (X11ScrollBarPane class): X11ScrollBarPane
lbutton instance variable (X11YesNoBoxPane class): X11YesNoBoxPane
lbutton instance variable (X11YesNoBoxPane class): X11FileSelectDialog
leading instance variable (X11LabelPane class): X11LabelPane
leading instancevariable (X11TextPane class): X11TextPane
left instance variable (Rectangle class): Rectangle
leftButtonText resource (X11YesNoBoxPane class): X11YesNoBoxPane
leftMargin resource (X11ListPane class): X11ListPane
length instance method (String class): String
length instance variable (Vector class): Vector
levelMargin instance variable (TreeNode class): TreeNode
levelMarginLength instance variable (TreeNode class): TreeNode
libIsInitialized instance method (X11FreeTypeFont class): X11FreeTypeFont
Library functions: Ctalk library
libraryPath instance method (Object class): Object
LibrarySearch class: LibrarySearch
lightShadowColor resource (X11CheckBoxPane class): X11CheckBoxPane
Line class: Line
lineHeight instance variable (X11LabelPane class): X11LabelPane
lineHeight instance variable (X11TextPane class): X11TextPane
lineWidth instance variable (X11TextEditorPane class): X11TextEditorPane
List class: List
List selections: X11ListBox
listFont resource (X11ListBox class): X11ListBox
listFonts instance method (X11FreeTypeFont class): X11FreeTypeFont
listPane instance variable (X11ListBox class): X11ListBox
listPane instance variable (X11ListBox class): X11FileSelectDialog
listROPx resource (X11FileSelectDialog class): X11FileSelectDialog
listRWPx resource (X11FileSelectDialog class): X11FileSelectDialog
llabs(3) C function: llabs
llrint(3) C function: CFunction
llrint(3) C function: llrint
llrintf(3) C function: CFunction
llrintf(3) C function: llrint
llrintl(3) C function: CFunction
llrintl(3) C function: llrint
llround(3) C function: llround
LLVAL macro: Scoping
LLVAL macro () function: Ctalk library
loadNotify instance method (X11FreeTypeFont class): X11FreeTypeFont
localCVARs instance variable (Method class): Method
localObjects instance variable (Method class): Method
localTime instance method (CalendarTime class): CalendarTime
localTime instance method (CTime class): CTime
localtime(3) C function C Function: gmtime-localtime
log(3) C function: log
log10(3) C function: log10
log1p(3) C function: log1p
long int C data type: C statements
long long int C data type: C statements
LongInteger Class: LongInteger
lrint(3) C function: CFunction
lrint(3) C function: llrint
lrint(3) C function: lrint
lrintf(3) C function: CFunction
lrintf(3) C function: llrint
lrintl(3) C function: CFunction
lrintl(3) C function: llrint
lround(3) C function: lround

M
Macro definitions: C Macros
Magnitude class: Magnitude
mainWindow instance method (X11Pane class): X11Pane
mainWindowPtr instance variable (X11MessageBoxPane class): X11MessageBoxPane
mainWindowPtr instance variable (X11YesNoBoxPane class): X11YesNoBoxPane
makeItem instance method (X11FileSelectDialog class): X11FileSelectDialog
makeSibling instance method (TreeNode class): TreeNode
makeSocketPath instance method (UNIXNetworkStream class): UNIXNetworkStream
malloc(3) C function: malloc
map instance method (ANSITerminalPane class): ANSITerminalPane
map instance method (Array class): Array
map instance method (AssociativeArray class): AssociativeArray
map instance method (GLXCanvasPane class): GLXCanvasPane
map instance method (List class): List
map instance method (String class): String
map instance method (TreeNode class): TreeNode
map instance method (X11Pane class): X11Pane
map method (ANSIWidgetPane class): ANSIWidgetPane
mapClassVariables instance method (Object class): Object
mapClassVariables instance method (Object class): ObjectInspector
mapInstanceVariables instance method (Object class): Object
mapInstanceVariables instance method (Object class): ObjectInspector
mapKeys instance method (Collection class): Collection
mapped instance variable (Pane class): Pane
mapRev instance method (List class): List
mapSubWidget instance method (ANSIWidgetPane class): ANSIWidgetPane
margin instance variable (X11LabelPane class): X11LabelPane
margin instance variable (X11ScrollBarPane class): X11ScrollBarPane
margin resource (X11CheckBoxPane class): X11CheckBoxPane
match instance method (String class): String
matchAt instance method (String class): String
matchAt instance method (String class): String
matchCase instance method (String class): String
matchIndexAt instance method (String class): String
matchIndexAt instance method (String class): String
matchLength instance method (String class): String
matchRegex instance method (String class): String
matchRegex instance method (String class): String
matchRegex instance method (String class): String
maxAdvance instance variable (X11FreeTypeFont class): X11FreeTypeFont
maxLBearing instance variable (X11Font class): X11Font
maxRBearing instance variable (X11Font class): X11Font
maxWidth instance variable (X11Font class): X11Font
MEMADDR macro: C Macros
membervars instance method (Application class): Application
memchr(3) C function: memchr
memcmp(3) C function: memcmp
memcpy(3) C function: memcpy
memmove(3) C function: memmove
memset(3) C function: memset
messageColor resource (X11MessageBoxPane class): X11MessageBoxPane
messageColor resource (X11YesNoBoxPane class): X11YesNoBoxPane
messageFont resource (X11MessageBoxPane class): X11MessageBoxPane
messageFont resource (X11YesNoBoxPane class): X11YesNoBoxPane
messageText: ANSIMessageBoxPane
messageText instance variable: ANSIYesNoBoxPane
messageText resource (X11MessageBoxPane class): X11MessageBoxPane
messageText resource (X11YesNoBoxPane class): X11YesNoBoxPane
Metacharacters: String
Method API: Method API
Method API: Translating
Method class: Method
Method declarations: Methods
Method documentation: Documentation
Method keywords.: Method keywords
Method overloading: Overloading
Method parameters: Methods
Method prototypes: Externs
methodArgs instance variable (Method class): Method
methodDocString instance method (Application class): Application
methodFn instance variable (Method class): Method
methodName instance variable (Method class): Method
methodObjectMessage instance method (Method class): Object
methodObjectMessage instance method (Object class): Object
methodObjectMessage instance method (Object class): Method
methodParameters instance variable (Method class): Method
methodPoolMax instance method (Method class): Object
methodPrototypes instance method (Application class): Application
methodPrototypes instance method (Application class): Documentation
methodReturnBoolean macro: Return values
methodReturnFalse macro: Return values
methodReturnInteger macro: Return values
methodReturnLongInteger macro: Return values
methodReturnNULL macro: Return values
methodReturnObject macro: Return values
methodReturnObjectName macro: Return values
methodReturnSelf macro: Return values
methodReturnString macro: Return values
methodReturnTrue macro: Return values
Methods: Methods
Methods: Methods
methods instance method (Object class): Object
methods instance method (Object class): Documentation
methodSearch instance method (LibrarySearch class): LibrarySearch
methodSelector instance variable (Method class): Method
methodSource instance method (Application class): Application
methodSource instance method (Application class): Documentation
methodSource instance variable (Method class): Method
METHOD_USED_BEFORE_DEFINE_X exception: Exception
minutes instance variable (CalendarTime class): CalendarTime
MISMATCHED_PAREN_X exception: Exception
mkDir instance method (DirectoryStream class): DirectoryStream
mkdir(3) C function: mkdir
modal instance variable (X11Bitmap class): X11Bitmap
modal instance variable (X11Pane class): X11Pane
modalWin instance variable (X11PaneDispatcher class): X11PaneDispatcher
modf(3) C function: modf
monName instance method (CalendarTime class): CalendarTime
month instance variable (CalendarTime class): CalendarTime
mouseOver instance variable (X11ScrollBarPane class): X11ScrollBarPane
moveCursor instance variable (X11CanvasPane class): X11CanvasPane
multiText instance method (X11LabelPane class): X11LabelPane

N
name instance method (Object class): Object
name instance method (Symbol class): Symbol
namedColorFT instance method (GLXCanvasPane class): GLXCanvasPane
namedX11Color instance method (RGBAColor class): RGBAColor
namedX11Color instance method (X11FreeTypeFont class): X11FreeTypeFont
nArgs instance variable (Method class): Method
nearbyint(3) C function: nearbyint
NetworkStream class: NetworkStream
new instance method (ANSIButtonPane class): ANSIButtonPane
new instance method (ANSILabelPane class): ANSILabelPane
new instance method (ANSIListBoxPane class): ANSIListBoxPane
new instance method (ANSIMessageBoxPane class): ANSIMessageBoxPane
new instance method (ANSIProgressBarPane class): ANSIProgressBarPane
new instance method (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
new instance method (ANSIScrollPane class): ANSIScrollPane
new instance method (ANSITerminalPane class): ANSITerminalPane
new instance method (ANSITextBoxPane class): ANSITextBoxPane
new instance method (ANSIYesNoBoxPane class): ANSIYesNoBoxPane
new instance method (List class): List
new instance method (Object class): Object
new instance method (ReadFileStream class): ReadFileStream
new instance method (RGBAColor class): RGBAColor
new instance method (SignalHandler class): SignalHandler
new instance method (X11ButtonPane class): X11ButtonPane
new instance method (X11CanvasPane class): X11CanvasPane
new instance method (X11CheckBoxPane class): X11CheckBoxPane
new instance method (X11FileSelectDialog class): X11FileSelectDialog
new instance method (X11LabelPane class): X11LabelPane
new instance method (X11ListBox class): X11ListBox
new instance method (X11ListPane class): X11ListPane
new instance method (X11MessageBoxPane class): X11MessageBoxPane
new instance method (X11PaneDispatcher class): X11PaneDispatcher
new instance method (X11PopupMenu class): X11PopupMenu
new instance method (X11ScrollBarPane class): X11ScrollBarPane
new instance method (X11TextEditorPane class): X11TextEditorPane
new instance method (X11TextEntryBox class): X11TextEntryBox
new instance method (X11TextEntryPane class): X11TextEntryPane
new instance method (X11TextPane class): X11TextPane
new instance method (X11YesNoBoxPane class): X11YesNoBoxPane
new method (ANSITerminalStream class): ANSITerminalStream
new method (ANSITextEntryPane class): ANSITextEntryPane
new method (ANSIWidgetPane class): ANSIWidgetPane
new method (Object class): Self and super
new method (ReadFileStream class): Self and super
new method (SignalEvent class): SignalEvent
new method (WriteFileStream class): WriteFileStream
nextEvent method (SignalEvent class): SignalEvent
nextFocus instance method (ANSIYesNoBoxPane class): ANSIYesNoBoxPane
nextInputEvent method (TerminalStream class): TerminalStream
nIinputEvents instance variable (TerminalStream class): TerminalStream
nItemsSelected instance method (X11FileSelectDialog class): X11FileSelectDialog
nItemsSelected instance method (X11ListPane class): X11ListPane
nMatches instance method (String class): String
noBorder instance method (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
noBorder instance method (ANSIYesNoBoxPane class): ANSIYesNoBoxPane
noMethodInit keyword: Method functions
noMethodInit keyword: Method keywords
noShadow instance method (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
noShadow instance method (ANSIYesNoBoxPane class): ANSIYesNoBoxPane
notifyLevel instance method (X11FreeTypeFont class): X11FreeTypeFont
NOT_A_TTY_X exception: Exception
nParams instance variable (Method class): Method
Null objects: Object

O
Object attributes: Attributes
Object class: Object
OBJECT typedef: OBJECT typedef
ObjectInspector class: ObjectInspector
ObjectInspector class: C statements
OBJECT_HAS_LOCAL_TAG attribute;: Attributes
OBJECT_IS_DEREF_RESULT attribute;: Object
OBJECT_IS_DEREF_RESULT attribute;: Attributes
OBJECT_IS_GLOBAL_COPY attribute;: Attributes
OBJECT_IS_I_RESULT attribute;: Attributes
OBJECT_IS_MEMBER_OF_PARENT_COLLECTION attribute;: Attributes
OBJECT_IS_STRING_LITERAL attribute;: Attributes
OBJREF macro: Ctalk library
OBJREF macro: Ctalk library
OBJREF macro: Ctalk library
OBJREF_T data type: Ctalk library
obj_ref_range_chk () function: Ctalk library
obj_ref_str function: Ctalk library
octahedron instance method (GLUTApplication class): GLUTApplication
okButton instance variable (ANSIMessageBoxPane class): ANSIMessageBoxPane
oldSelectedContent instance variable (ANSIListBoxPane class): ANSIListBoxPane
oldSelectedContent instance variable (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
onAnimation instance method (GLXCanvasPane class): GLXCanvasPane
onButtonPress instance method (GLXCanvasPane class): GLXCanvasPane
onClick instance method (X11CheckBoxPane class): X11CheckBoxPane
onClick instance method (X11ListPane class): X11ListPane
onEnter instance method (X11ListPane class): X11ListPane
onExpose instance method (GLXCanvasPane class): GLXCanvasPane
onExpose instance method (X11FileSelectDialog class): X11FileSelectDialog
onExpose instance method (X11ListPane class): X11ListPane
onIdle instance method (GLXCanvasPane class): GLXCanvasPane
onKey instance method (X11ListPane class): X11ListPane
onKeyPress instance method (GLXCanvasPane class): GLXCanvasPane
onLeave instance method (X11ListPane class): X11ListPane
onListClick instance method (X11FileSelectDialog class): X11FileSelectDialog
onMotion instance method (X11ListPane class): X11ListPane
onPointerMotion instance method (GLXCanvasPane class): GLXCanvasPane
onResize instance method (GLXCanvasPane class): GLXCanvasPane
onResize instance method (X11FileSelectDialog class): X11FileSelectDialog
onResize instance method (X11ListPane class): X11ListPane
onTimerTick instance method (GLXCanvasPane class): GLXCanvasPane
open instance method (UNIXNetworkStreamReader class): UNIXNetworkStreamReader
open instance method (UNIXNetworkStreamWriter class): UNIXNetworkStreamWriter
openEventStream instance method (X11Pane class): X11Pane
openInputClient method (X11TerminalStream class): X11TerminalStream
openInputQueue method (ANSITerminalStream class): ANSITerminalStream
openInputQueue method (ANSITerminalStream class): ANSIWidgetPane
openInputQueue method (Win32TerminalStream class): Win32TerminalStream
openOn instance method (ReadFileStream class): ReadFileStream
openOn instance method (TCPIPNetworkStreamReader class): TCPIPNetworkStreamReader
openOn instance method (TCPIPNetworkStreamWriter class): TCPIPNetworkStreamWriter
openOn instance method (TCPIPV6NetworkStreamReader class): TCPIPV6NetworkStreamReader
openOn instance method (TCPIPV6NetworkStreamWriter class): TCPIPV6NetworkStreamWriter
openOn instance method (UNIXNetworkStreamReader class): UNIXNetworkStreamReader
openOn instance method (UNIXNetworkStreamWriter class): UNIXNetworkStreamWriter
openOn method (ANSITerminalStream class): ANSITerminalStream
openOn method (WriteFileStream class): WriteFileStream
Optimization: C statements
origin instance variable (Pane class): Pane
outputBuffer instance variable (ANSIButtonPane class): ANSIButtonPane
outputHandle instance variable (ANSITerminalStream class): ANSITerminalStream
Overloading methods: Overloading
Overloading parameters: Overloading

P
pad resource (X11FileSelectDialog class): X11FileSelectDialog
pad resource (X11MessageBoxPane class): X11MessageBoxPane
pad resource (X11YesNoBoxPane class): X11YesNoBoxPane
padding instance variable (X11LabelPane class): X11LabelPane
padding instance variable (X11ScrollBarPane class): X11ScrollBarPane
Pane class: Pane
paneBackingStore instance variable: Ctalk library
paneBackingStore instance variable (Pane class): Pane
paneBuffer instance variable: Ctalk library
paneBuffer instance variable (Pane class): Pane
paneID instance variable (ANSIWidgetPane class): ANSIWidgetPane
paneStream instance variable (ANSITerminalPane class): ANSITerminalPane
paneWidthChars instance variable (X11TextEntryPane class): X11TextEntryPane
Parameters, overloading: Overloading
parent method (ANSIWidgetPane class): ANSIWidgetPane
parentClip instance variable (ANSITerminalPane class): ANSITerminalPane
parentDrawable instance variable (X11Bitmap class): X11Bitmap
parentOrigin instance variable (ANSITerminalPane class): ANSITerminalPane
parentPane instance variable (ANSIWidgetPane class): ANSIWidgetPane
parentPane method (X11TerminalStream class): X11TerminalStream
parHeight instance variable (X11LabelPane class): X11LabelPane
parseArgs instance method (Application class): Application
parseArgs instance method (Application class): GLUTApplication
parseX11Geometry: Application
parseX11Geometry instance method (Application class): Application
PARSE_ERROR_X exception: Exception
Pasting text: X11TextEditorPane
Pasting text: X11TextEditorPane
pathEntry instance method (X11FileSelectDialog class): X11FileSelectDialog
Pattern matches, debugging: String
Pattern strings: String
pctLabelMargin instance variable (ANSIProgressBarPane class): ANSIProgressBarPane
peek instance method (Exception class): Exception
Pen Class: Pen
pen instance variable (X11CanvasPane class): X11CanvasPane
pending instance method (Exception class): Exception
pending method (Exception class): Errors
pending method (SignalEvent class): SignalEvent
pendingEvents (SignalEvent class): SignalEvent
percent instance method (ANSIProgressBarPane class): ANSIProgressBarPane
percent instance method (X11ScrollBarPane class): X11ScrollBarPane
percentInt instance variable (ANSIProgressBarPane class): ANSIProgressBarPane
perror(3) C function: perror
pixelHeightFT instance method (GLXCanvasPane class): GLXCanvasPane
pixmapFromData instance method (X11Bitmap class): X11Bitmap
pixmapFromData instance method (X11CanvasPane class): X11Bitmap
pixmapFromData instance method (X11CanvasPane class): X11CanvasPane
Point Class: Point
point instance variable (X11TextEditorPane class): X11TextEditorPane
point instance variable (X11TextEntryPane class): X11TextEntryPane
pointerMotionHandler instance variable (GLXCanvasPane class): GLXCanvasPane
pointIsInThumb instance method (X11ScrollBarPane class): X11ScrollBarPane
pointSize instance variable (X11FreeTypeFont class): X11FreeTypeFont
Pool size, method: Object
Pool size, method: Ctalk library
pop instance method (List class): List
popItemRef instance method (List class): List
popup instance method (X11PopupMenu class): X11PopupMenu
Port, TCPIP: TCPIPV6NetworkStreamWriter
pow(3) C function: pow
Pragmas: C statements
Preprocessor: Preprocessor
prevSelectedLine instance variable (ANSIListBoxPane class): ANSIListBoxPane
prevSelectedLine instance variable (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
print instance method (TreeNode class): TreeNode
printExceptionTrace instance method (Exception class): Exception
printf(3) C function: printf
printf(3) C function: vfprintf
printMatchToks instance method (String class): String
printMatchToks instance method (String class): String
printOn instance method (ANSITerminalPane class): ANSITerminalPane
printOn instance method (String class): String
printOn instance method (X11TextPane class): X11TextPane
printOn method (ANSITerminalStream class): ANSITerminalStream
printOn method (String class): Variable arguments
printOn method (Win32TerminalStream class): Win32TerminalStream
printOn method (WriteFileStream class): WriteFileStream
printSelfBasic instance method (Object class): Object
processID (SignalHandler class): SignalEvent
progress instance variable (ANSIProgressBarPane class): ANSIProgressBarPane
promptString instance variable (ObjectInspector class): ObjectInspector
promptText instance variable (ANSITextEntryPane class): ANSITextEntryPane
Prototypes, methods: Externs
PTR_CONVERSION_X exception: Exception
push instance method (List class): List
pushAscending instance method (SortedList class): SortedList
pushDescending instance method (SortedList class): SortedList
pushItemRef instance method (List class): List
putChar instance method (X11TextPane class): X11TextPane
putCharXY instance method (ANSITerminalPane class): ANSITerminalPane
putStr instance method (X11Bitmap class): X11Bitmap
putStr instance method (X11TextPane class): X11TextPane
putStrXY instance method (X11CanvasPane class): X11CanvasPane
putStrXY instance method (X11Pane class): X11Pane
putTransformedStrXY instance method (X11Pane class): X11Pane

Q
qualifyName instance method (X11FreeTypeFont class): X11FreeTypeFont
queued instance variable (Method class): Method
queueEvent method (SignalEvent class): SignalEvent
queueInput instance variable (ANSITerminalStream class): ANSITerminalStream
queueInput instance variable (Win32TerminalStream class): Win32TerminalStream
queueInput method (TerminalStream class): TerminalStream
queueInput method (X11TerminalStream class): X11TerminalStream
queueInputEvent method (TerminalStream class): TerminalStream
quickSearch instance method (String class): String
quickSearch instance method (String class): String
quiet instance method (X11FreeTypeFont class): X11FreeTypeFont

R
radius instance variable (Circle class): Circle
radius instance variable (X11ButtonPane class): X11ButtonPane
radius instance variable (X11LabelPane class): X11LabelPane
raise(3) C function: raise
raiseCriticalException instance method (Exception class): Exception
raiseCriticalException method (SysErrnoException class): Ctalk library
raiseException instance method (Exception class): Exception
raiseException method (SystemErrnoException class): SystemErrnoException
raiseException method (SystemErrnoException class): Errors
raiseSignal instance method (SignalHandler class): SignalHandler
raiseWindow instance method (X11Pane class): X11Pane
rand(3) C function: CFunction
rand(3) C function: rand
rawMode method (ANSITerminalStream class): ANSITerminalStream
rawModeFlag instance variable (ANSITerminalStream class): ANSITerminalStream
rbutton instance variable (X11YesNoBoxPane class): X11YesNoBoxPane
rbutton instance variable (X11YesNoBoxPane class): X11FileSelectDialog
rcvrClassObject instance variable (Method class): Method
rcvrFrameTop instance variable (Method class): Method
readAll instance method (ReadFileStream class): ReadFileStream
readAll instance method (ReadFileStream class): Documentation
readChar instance method (ReadFileStream class): ReadFileStream
readChar method (ANSITerminalStream class): ANSITerminalStream
ReadFileStream class: ReadFileStream
readFmt method (ReadFileStream class): Variable arguments
readFmt method (String class): Variable arguments
readFormat instance method (ReadFileStream class): ReadFileStream
readFormat instance method (String class): String
readLine instance method (ReadFileStream class): ReadFileStream
readLine method (ANSITerminalStream class): ANSITerminalStream
readRec instance method (ReadFileStream class): ReadFileStream
readText instance method (TCPIPNetworkStream class): TCPIPNetworkStream
readText instance method (TCPIPV6NetworkStream class): TCPIPV6NetworkStream
readVec instance method (ReadFileStream class): ReadFileStream
readVec instance method (ReadFileStream class): Vector
readVec instance method (TCPIPNetworkStream class): TCPIPNetworkStream
readVec instance method (TCPIPV6NetworkStream class): TCPIPV6NetworkStream
realloc(3) C function: realloc
Record separator character: String
Record separator character: String
Record separator character: String
Rectangle class: Rectangle
red instance method (X11FreeTypeFont class): X11FreeTypeFont
red instance variable (RGBAColor class): RGBAColor
reflow instance method (X11TextEntryPane class): X11TextEntryPane
refresh instance method (ANSILabelPane class): ANSILabelPane
refresh instance method (ANSIListBoxPane class): ANSIListBoxPane
refresh instance method (ANSIProgressBarPane class): ANSIProgressBarPane
refresh instance method (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
refresh instance method (ANSIScrollPane class): ANSIScrollPane
refresh instance method (ANSITerminalPane class): ANSITerminalPane
refresh instance method (ANSITextBoxPane class): ANSITextBoxPane
refresh instance method (X11CanvasPane class): X11CanvasPane
refresh instance method (X11FileSelectDialog class): X11FileSelectDialog
refresh instance method (X11MessageBoxPane class): X11MessageBoxPane
refresh instance method (X11TextEntryPane class): X11TextEntryPane
refresh instance method (X11TextPane class): X11TextPane
refresh instance method (X11YesNoBoxPane class): X11YesNoBoxPane
refreshRate instance method (GLXCanvasPane class): GLXCanvasPane
refreshReframe instance method (X11CanvasPane class): X11CanvasPane
refreshSelection instance method (ANSIListBoxPane class): ANSIListBoxPane
refreshSelection instance method (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
refreshSelectionFirst instance method (ANSIListBoxPane class): ANSIListBoxPane
refreshSelectionFirst instance method (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
regions instance variable (X11CanvasPane class): X11CanvasPane
Regular expression metacharacters: String
remove(3) C function: remove
removeAt instance method (Collection class): Collection
removeSocket instance method (UNIXNetworkStream class): UNIXNetworkStream
removeValue instance method (Symbol class): Symbol
rename(3) C function: rename
renameFile instance method (FileStream class): FileStream
replaceAt instance method (Collection class): Collection
requestClose instance variable (X11TextPane class): X11TextPane
require keyword: Required classes
require keyword: Method keywords
resetGraphics instance method (ANSITerminalPane class): ANSITerminalPane
resize instance method (ANSITextBoxPane class): ANSITextBoxPane
resize instance method (X11Bitmap class): X11Bitmap
resizeHandler instance variable (GLXCanvasPane class): GLXCanvasPane
resources instance variable (X11Pane class): X11Pane
Resources, X windows: X11Pane
restoreTerm method (ANSITerminalStream class): ANSITerminalStream
returnClass instance variable (Method class): Method
returnObjectClass: Return values
returnObjectClass keyword: Method keywords
returnText instance variable (X11YesNoBoxPane class): X11YesNoBoxPane
returnVal instance variable (X11YesNoBoxPane class): X11YesNoBoxPane
reverseOnOff instance method (ANSITerminalPane class): ANSITerminalPane
RGB color specifications: RGBAColor
RGBAColor Class: RGBAColor
RGBAColor instance method (X11FreeTypeFont class): X11FreeTypeFont
rgbX11Color instance method (RGBAColor class): RGBAColor
right instance variable (Rectangle class): Rectangle
rightButtonText resource (X11YesNoBoxPane class): X11YesNoBoxPane
rightMargin instance variable (X11TextEditorPane class): X11TextEditorPane
rindex(3) C function: rindex
rint(3) C function: rint
rmDir instance method (DirectoryStream class): DirectoryStream
rmdir(3) C function: rmdir
rotation instance variable (X11FreeTypeFont class): X11FreeTypeFont
round(3) C function: round
run instance method (GLUTApplication class): GLUTApplication
run instance method (GLXCanvasPane class): GLXCanvasPane
run instance method (GLXCanvasPane class): Ctalk library

S
saveSelectedFont instance method (X11FreeTypeFont class): X11FreeTypeFont
scaleX instance variable (X11FreeTypeFont class): X11FreeTypeFont
scaleY instance variable (X11FreeTypeFont class): X11FreeTypeFont
scanf(3) C function: Variable arguments
scanf(3) C function: scanf
scanf(3) C function: vfscanf
scanf(3) C function: vscanf
scanf(3) C function: vsscanf
Scope of objects: Scoping
Scope of objects: Ctalk library
screenColor (Win32TerminalStream class): Win32TerminalStream
scrollArrow instance method (X11Cursor class): X11Cursor
scrollBar instance variable (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
scrollBorderColor resource (X11ListPane class): X11ListPane
scrollBorderPen instance variable (X11ListPane class): X11ListPane
scrollBorderWidth resource (X11ListPane class): X11ListPane
scrollHeight instance variable (X11TextPane class): X11TextPane
scrollMargin instance variable (X11TextPane class): X11TextPane
scrollThumbSize instance method (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
scrollThumbStart instance method (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
scrollWidth instance variable (X11ListPane class): X11ListPane
scrollWidth instance variable (X11ListPane class): X11ListPane
search instance method (String class): String
search instance method (TreeNode class): TreeNode
Search path, classes: Application
Search path, classes: Translating
seconds instance variable (CalendarTime class): CalendarTime
seekTo instance method (FileStream class): FileStream
seekToBeginning instance method (FileStream class): FileStream
seekToEnd instance method (FileStream class): FileStream
selectColor resource (X11ListPane class): X11ListPane
selectedContent instance variable (ANSIListBoxPane class): ANSIListBoxPane
selectedContent instance variable (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
selectedFont instance method (X11FreeTypeFont class): X11FreeTypeFont
selectedItemN instance method (X11FileSelectDialog class): X11FileSelectDialog
selectedItemN instance method (X11ListPane class): X11ListPane
selectedItems instance method (X11FileSelectDialog class): X11FileSelectDialog
selectedItems instance method (X11ListPane class): X11ListPane
selectedItemsN instance method (X11FileSelectDialog class): X11FileSelectDialog
selectedItemsN instance method (X11ListPane class): X11ListPane
selectedItemText instance method (X11FileSelectDialog class): X11FileSelectDialog
selectedItemText instance method (X11ListPane class): X11ListPane
selectedLine instance variable (ANSIListBoxPane class): ANSIListBoxPane
selectedLine instance variable (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
selectedText instance method (ANSIListBoxPane class): ANSIListBoxPane
selectedText instance method (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
selectFont instance method (X11CanvasPane class): X11CanvasPane
selectFont instance method (X11FreeTypeFont class): X11FreeTypeFont
selectFont instance method (X11ListPane class): X11ListPane
selectFontFromFontConfig instance method (X11FreeTypeFont class): X11FreeTypeFont
selectFontFromXLFD instance method (X11FreeTypeFont class): X11FreeTypeFont
selectFontOld instance method (X11LabelPane class): X11LabelPane
selecting instance variable (X11TextEditorPane class): X11TextEditorPane
selecting instance variable (X11TextEntryPane class): X11TextEntryPane
Selecting text: X11TextEditorPane
Selection: X11TextEditorPane
selectionBackgroundColor instance variable (X11TextEditorPane class): X11TextEditorPane
selectionColor resource (X11TextEntryPane class): X11TextEntryPane
selectionPen instance variable (X11ListPane class): X11ListPane
Selections, list: X11ListBox
selectionToText instance method (X11TextEntryPane class): X11TextEntryPane
selectNext instance method (ANSIListBoxPane class): ANSIListBoxPane
selectNext instance method (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
selectPrev instance method (ANSIListBoxPane class): ANSIListBoxPane
selectPrev instance method (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
selectStyle resource (X11ListPane class): X11ListPane
self keyword: Self and super
self keyword: Return values
self keyword: Method keywords
SELF_WITHOUT_RECEIVER_X exception: Exception
sEnd instance variable (X11TextEditorPane class): X11TextEditorPane
sEnd instance variable (X11TextEntryPane class): X11TextEntryPane
setCallbackName instance method (Method class): Method
setContent instance method (TreeNode class): TreeNode
setGraphics method (ANSITerminalStream class): ANSITerminalStream
setMethodHandler instance method (X11PaneDispatcher class): X11PaneDispatcher
setName instance method (Key class): Key
setReferenceCount instance method (Object class): Object
setResources instance method (X11Pane class): X11Pane
setRS instance method (String class): String
setSigAbrt instance method (SignalHandler class): SignalHandler
setSigAbrt method (SignalHandler class): SignalHandler
setSigAlrm instance method (SignalHandler class): SignalHandler
setSigAlrm method (SignalHandler class): SignalHandler
setSigChld instance method (SignalHandler class): SignalHandler
setSigChld method (SignalHandler class): SignalHandler
setSigCont instance method (SignalHandler class): SignalHandler
setSigCont method (SignalHandler class): SignalHandler
setSigFpe instance method (SignalHandler class): SignalHandler
setSigFpe method (SignalHandler class): SignalHandler
setSigHup instance method (SignalHandler class): SignalHandler
setSigHup method (SignalHandler class): SignalHandler
setSigIll instance method (SignalHandler class): SignalHandler
setSigIll method (SignalHandler class): SignalHandler
setSigInt instance method (SignalHandler class): SignalHandler
setSigInt method (SignalHandler class): SignalHandler
setSigInt method (SignalHandler class): Method functions
setSigNo instance method (SignalHandler class): SignalHandler
setSigNo method (SignalHandler class): SignalHandler
setSigPipe instance method (SignalHandler class): SignalHandler
setSigPipe method (SignalHandler class): SignalHandler
setSigQuit instance method (SignalHandler class): SignalHandler
setSigQuit method (SignalHandler class): SignalHandler
setSigSegv instance method (SignalHandler class): SignalHandler
setSigSegv method (SignalHandler class): SignalHandler
setSigTerm instance method (SignalHandler class): SignalHandler
setSigTerm method (SignalHandler class): SignalHandler
setSigTstp instance method (SignalHandler class): SignalHandler
setSigTstp method (SignalHandler class): SignalHandler
setSigTtin instance method (SignalHandler class): SignalHandler
setSigTtin method (SignalHandler class): SignalHandler
setSigTtou instance method (SignalHandler class): SignalHandler
setSigTtou method (SignalHandler class): SignalHandler
setSigUsr1 instance method (SignalHandler class): SignalHandler
setSigUsr1 method (SignalHandler class): SignalHandler
setSigUsr2 instance method (SignalHandler class): SignalHandler
setSigUsr2 method (SignalHandler class): SignalHandler
setTty method (ANSITerminalStream class): ANSITerminalStream
setValue instance method (AssociativeArray class): AssociativeArray
setWMTitle instance method (X11Pane class): X11Pane
Shaders, OpenGL: Ctalk library
Shaders, OpenGL: Ctalk library
Shaders, OpenGL: Ctalk library
shadow instance variable (ANSITerminalPane class): ANSITerminalPane
shadowPen instance variable (X11ButtonPane class): X11ButtonPane
shadowPenColor resource (X11ButtonPane class): X11ButtonPane
shift instance method (List class): List
shiftFocus instance method (X11PaneDispatcher class): X11PaneDispatcher
shiftState instance variable (GLXCanvasPane class): GLXCanvasPane
shiftState instance variable (Win32TerminalStream class): Win32TerminalStream
shiftState instance variable (X11TextEditorPane class): X11TextEditorPane
shiftState instance variable (X11TextEntryPane class): X11TextEntryPane
show instance method (ANSIButtonPane class): ANSIButtonPane
show instance method (ANSILabelPane class): ANSILabelPane
show instance method (ANSIMessageBoxPane class): ANSIMessageBoxPane
show instance method (ANSIProgressBarPane class): ANSIProgressBarPane
show instance method (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
show instance method (ANSIScrollPane class): ANSIScrollPane
show instance method (ANSITextBoxPane class): ANSITextBoxPane
show instance method (ANSIYesNoBoxPane class): ANSIYesNoBoxPane
show instance method (X11FileSelectDialog class): X11FileSelectDialog
show instance method (X11ListBox class): X11ListBox
show instance method (X11MessageBoxPane class): X11MessageBoxPane
show instance method (X11TextEntryBox class): X11TextEntryBox
show instance method (X11YesNoBoxPane class): X11YesNoBoxPane
show method (ANSITextEntryPane class): ANSITextEntryPane
showManaged instance method (X11MessageBoxPane class): X11MessageBoxPane
showManaged instance method (X11YesNoBoxPane class): X11YesNoBoxPane
siblings instance variable (TreeNode class): TreeNode
SigHandler class: Method functions
SignalEvent class: SignalEvent
SignalHandler class: SignalHandler
signalProcessID method (SignalHandler class): SignalHandler
SIGNAL_EVENT_X exception: Exception
sigName instance method (SignalHandler class): SignalHandler
sigNo (SignalHandler class): SignalEvent
sigNum instance method (SignalHandler class): SignalHandler
sin(3) C function: sin
sinh(3) C function: sinh
size instance method (Array class): Array
size instance method (Collection class): Collection
size instance method (FileStream class): FileStream
size instance variable (Pane class): Pane
sizeof instance method (Object class): Object
sizeof instance method (Object class): Prefixes
sizeof operator: Prefixes
sizePane instance method (ANSILabelPane class): ANSILabelPane
slant instance variable (X11FreeTypeFont class): X11FreeTypeFont
snprintf(3) C function: snprintf
sock instance variable (TCPIPNetworkStream class): TCPIPNetworkStream
sock instance variable (TCPIPV6NetworkStream class): TCPIPV6NetworkStream
sock instance variable (UNIXNetworkStream class): UNIXNetworkStream
socketBaseName instance variable (UNIXNetworkStream class): UNIXNetworkStream
socketPath instance variable (UNIXNetworkStream class): UNIXNetworkStream
socketPrefix class variable (UNIXNetworkStream class): UNIXNetworkStream
sockproc.c example program: Object
sockRead instance method (UNIXNetworkStreamReader class): UNIXNetworkStreamReader
sockWrite instance method (UNIXNetworkStreamWriter class): UNIXNetworkStreamWriter
sortAscending instance method (List class): List
sortAscendingByName instance method (List class): List
sortDescending instance method (List class): List
sortDescendingByName instance method (List class): List
sortedDirectoryList instance method (DirectoryStream class): DirectoryStream
SortedList class: SortedList
spacingHint instance variable (X11TextEntryPane class): X11TextEntryPane
spacingHint resource (X11TextEntryPane class): X11TextEntryPane
spawnC instance method (Application class): Application
sphere instance method (GLUTApplication class): GLUTApplication
split instance method (String class): String
sprintf(3) C function: sprintf
sprintf(3) C function: vsnprintf
sprintf(3) C function: vsprintf
sqrt(3) C function: sqrt
srand(3) C function: srand
sscanf(3) C function: Variable arguments
sscanf(3) C function: sscanf
sStart instance variable (X11TextEditorPane class): X11TextEditorPane
sStart instance variable (X11TextEntryPane class): X11TextEntryPane
start instance variable (Line class): Line
statFile instance method (FileStream class): FileStream
statStream instance method (FileStream class): FileStream
stderr: WriteFileStream
stderr: fscanf
stderr: sscanf
stderrStream (WriteFileStream class): WriteFileStream
stderrStream (WriteFileStream class): fscanf
stderrStream (WriteFileStream class): sscanf
stdin: ReadFileStream
stdin: fscanf
stdin: sscanf
stdinStream (ReadFileStream class): ReadFileStream
stdinStream (ReadFileStream class): fscanf
stdinStream (ReadFileStream class): sscanf
stdout: WriteFileStream
stdout: fscanf
stdout: sscanf
stdoutStream (WriteFileStream class): WriteFileStream
stdoutStream (WriteFileStream class): fscanf
stdoutStream (WriteFileStream class): sscanf
strcasecmp(3) C function: CFunction
strcasecmp(3) C function: strcat-strcpy
strcat(3) C function: CFunction
strcat(3) C function: strcat-strcpy
strchr(3) C function: strchr
strcmp(3) C function: CFunction
strcmp(3) C function: strcat-strcpy
strcoll(3) C function: strcoll
strcpy(3) C function: strcat-strcpy
Stream class: Stream
streamEof instance method (FileStream class): FileStream
strerror(3) C function: strerror
strftime(3) C function: strftime
String class: String
strlen(3) C function: CFunction
strlen(3) C function: strlen
strncasecmp(3) C function: CFunction
strncasecmp(3) C function: strncat-strncpy
strncat(3) C function: CFunction
strncat(3) C function: strncat-strncpy
strncmp(3) C function: CFunction
strncmp(3) C function: strncat-strncpy
strncpy(3) C function: CFunction
strncpy(3) C function: strncat-strncpy
strpbrk(3) C function: strpbrk
strrchr(3) C function: strrchr
strspn(3) C function: strspn
strstr(3) C function: strstr
strtod(3) C function: strtod
strtok(3) C function: strtok
strtoll(3) C function: strtoll
strxfrm(3) C function: strxfrm
STR_0XHEX_TO_PTR macro: C Macros
STR_IS_NULL macro: Object
STR_IS_NULL macro: C Macros
str_is_zero_q function: Ctalk library
style instance variable (X11FreeTypeFont class): X11FreeTypeFont
subMenuGadget instance method (X11PopupMenu class): X11PopupMenu
Subpane geometry: X11CanvasPane
subPaneButton instance method (X11FileSelectDialog class): X11FileSelectDialog
subPaneButton instance method (X11MessageBoxPane class): X11MessageBoxPane
subPaneButton instance method (X11YesNoBoxPane class): X11YesNoBoxPane
subPaneButtonPress instance method (X11ButtonPane class): X11ButtonPane
subPaneButtonPress instance method (X11TextEditorPane class): X11TextEditorPane
subPaneButtonPress instance method (X11TextEntryPane class): X11TextEntryPane
subPaneDestroy instance method (X11CanvasPane class): X11CanvasPane
subPaneDestroy instance method (X11PaneDispatcher class): X11PaneDispatcher
subPaneDestroy instance method (X11ScrollBarPane class): X11ScrollBarPane
subPaneDestroy instance method (X11TextPane class): X11TextPane
subPaneEnter instance method (X11ButtonPane class): X11ButtonPane
subPaneEnter instance method (X11LabelPane class): X11LabelPane
subPaneEnter instance method (X11ListBox class): X11ListBox
subPaneEnter instance method (X11TextEntryBox class): X11TextEntryBox
subPaneEnter instance method (X11TextEntryPane class): X11TextEntryPane
subPaneEnterNotify instance method (X11ScrollBarPane class): X11ScrollBarPane
subPaneExpose instance method (X11ButtonPane class): X11ButtonPane
subPaneExpose instance method (X11CanvasPane class): X11CanvasPane
subPaneExpose instance method (X11LabelPane class): X11LabelPane
subPaneExpose instance method (X11MessageBoxPane class): X11MessageBoxPane
subPaneExpose instance method (X11ScrollBarPane class): X11ScrollBarPane
subPaneExpose instance method (X11TextEntryPane class): X11TextEntryPane
subPaneExpose instance method (X11TextPane class): X11TextPane
subPaneExpose instance method (X11YesNoBoxPane class): X11YesNoBoxPane
subPaneFocusIn instance method (X11ButtonPane class): X11ButtonPane
subPaneFocusOut instance method (X11ButtonPane class): X11ButtonPane
subPaneGeometry instance method (X11PaneDispatcher class): X11PaneDispatcher
subPaneKbd instance method (X11TextEntryPane class): X11TextEntryPane
subPaneKbdInput instance method (X11PaneDispatcher class): X11PaneDispatcher
subPaneKbdInput instance method (X11TextEditorPane class): X11TextEditorPane
subPaneKbdInput instance method (X11TextPane class): X11TextPane
subPaneLeave instance method (X11ButtonPane class): X11ButtonPane
subPaneLeave instance method (X11LabelPane class): X11LabelPane
subPaneLeave instance method (X11ListBox class): X11ListBox
subPaneLeave instance method (X11TextEntryBox class): X11TextEntryBox
subPaneLeave instance method (X11TextEntryPane class): X11TextEntryPane
subPaneLeaveNotify instance method (X11ScrollBarPane class): X11ScrollBarPane
subPaneMotionNotify instance method (X11TextEditorPane class): X11TextEditorPane
subPaneMove instance method (X11PaneDispatcher class): X11PaneDispatcher
subPaneNotify instance method (X11Pane class): X11Pane
subPanePointerInput instance method (X11CanvasPane class): X11CanvasPane
subPanePointerInput instance method (X11PaneDispatcher class): X11PaneDispatcher
subPanePointerInput instance method (X11ScrollBarPane class): X11ScrollBarPane
subPanePointerMotion instance method (X11PaneDispatcher class): X11PaneDispatcher
subPanePointerMotion instance method (X11ScrollBarPane class): X11ScrollBarPane
subPanePointerMotion instance method (X11TextEntryPane class): X11TextEntryPane
subPaneResize instance method (X11ButtonPane class): X11ButtonPane
subPaneResize instance method (X11CanvasPane class): X11CanvasPane
subPaneResize instance method (X11LabelPane class): X11LabelPane
subPaneResize instance method (X11PaneDispatcher class): X11PaneDispatcher
subPaneResize instance method (X11ScrollBarPane class): X11ScrollBarPane
subPaneResize instance method (X11TextEditorPane class): X11TextEditorPane
subPaneResize instance method (X11TextPane class): X11TextPane
subPaneSelectionClear instance method (X11TextEditorPane class): X11TextEditorPane
subPaneSelectionClear instance method (X11TextEntryPane class): X11TextEntryPane
substrcat function: Ctalk library
substrcpy function: Ctalk library
subString instance method (String class): String
SUCCESS_X exception: Exception
super keyword: Self and super
super keyword: Method keywords
superclassName instance method (Object class): Object
SUPERCLASSNAME macro: C Macros
swapBuffers instance method (GLXCanvasPane class): GLXCanvasPane
Symbol class: Symbol
Symbol class: C statements
symbolReference instance method (Symbol class): Symbol
SYMTOOBJ macro () function: Ctalk library
SYMVAL macro: Scoping
SYMVAL macro () function: Ctalk library
syncSwap instance method (GLXCanvasPane class): GLXCanvasPane
sysErrno (SystemErrnoException class): SystemErrnoException
sysErrnoStr instance method (String class): String
system(3) C function: system
SystemErrnoException class: Exception
SystemErrnoException Class: SystemErrnoException

T
tabFocus instance variable (X11PaneDispatcher class): X11PaneDispatcher
tail instance method (Collection class): Collection
tan(3) C function: tan
tanh(3) C function: tanh
targetPath instance variable (X11FileSelectDialog class): X11FileSelectDialog
TCPIPNetworkStream class: TCPIPNetworkStream
TCPIPNetworkStreamReader class: TCPIPNetworkStreamReader
TCPIPNetworkStreamWriter class: TCPIPNetworkStreamWriter
TCPIPV6UNIXNetworkStream class: TCPIPV6NetworkStream
TCPIPV6UNIXNetworkStreamReader class: TCPIPV6NetworkStreamReader
TCPIPV6UNIXNetworkStreamWriter class: TCPIPV6NetworkStreamWriter
teapot instance method (GLUTApplication class): GLUTApplication
template command: Templates
Templates: Templates
terminalHeight instance method (ANSITerminalPane class): ANSITerminalPane
TerminalStream class: TerminalStream
terminalWidth instance method (ANSITerminalPane class): ANSITerminalPane
termioCCFlag instance variable (ANSITerminalStream class): ANSITerminalStream
termioCIFlag instance variable (ANSITerminalStream class): ANSITerminalStream
termioCLFlag instance variable (ANSITerminalStream class): ANSITerminalStream
termioCOFlag instance variable (ANSITerminalStream class): ANSITerminalStream
tetrahedron instance method (GLUTApplication class): GLUTApplication
text (SignalHandler class): SignalEvent
Text editing: Ctalk library
Text editor example program: X11TextEditorPane
text instance method (X11ButtonPane class): X11ButtonPane
text instance method (X11LabelPane class): X11LabelPane
text instance method (X11LabelPane class): X11LabelPane
text instance variable (ANSILabelPane class): ANSILabelPane
text instance variable (ANSITextBoxPane class): ANSITextBoxPane
text instance variable (X11TextPane class): X11TextPane
textColor instance variable (X11LabelPane class): X11LabelPane
textColor resource (X11ButtonPane class): X11ButtonPane
textColor resource (X11LabelPane class): X11LabelPane
textColor resource (X11ListPane class): X11ListPane
textColor resource (X11PopupMenu class): X11PopupMenu
textColor resource (X11TextEntryPane class): X11TextEntryPane
textEntry instance method (X11FileSelectDialog class): X11FileSelectDialog
textHeight instance method (X11FreeTypeFont class): X11FreeTypeFont
textHeight instance variable (X11PopupMenu class): X11PopupMenu
textHeightBasic instance method (X11FreeTypeFont class): X11FreeTypeFont
textLength instance variable (X11TextEditorPane class): X11TextEditorPane
textLine instance variable (X11LabelPane class): X11LabelPane
textLines instance variable (X11LabelPane class): X11LabelPane
textLines instance variable (X11TextPane class): X11TextPane
textList instance variable (X11TextPane class): X11TextPane
textRBearing instance method (X11FreeTypeFont class): X11FreeTypeFont
textWidth instance method (GLXCanvasPane class): GLXCanvasPane
textWidth instance method (X11Font class): X11Font
textWidth instance method (X11FreeTypeFont class): X11FreeTypeFont
textWidthBasic instance method (X11FreeTypeFont class): X11FreeTypeFont
textWidthFT instance method (GLXCanvasPane class): GLXCanvasPane
thumb instance variable (X11ScrollBarPane class): X11ScrollBarPane
thumbBackgroundColor instance variable (X11ScrollBarPane class): X11ScrollBarPane
thumbColor resource (X11ListPane class): X11ListPane
thumbDimensions instance method (X11ScrollBarPane class): X11ScrollBarPane
thumbErasePen instance variable (X11ScrollBarPane class): X11ScrollBarPane
thumbExt instance variable (X11ListPane class): X11ListPane
thumbHeight instance variable (ANSIScrollPane class): ANSIScrollPane
thumbHeight instance variable (X11ScrollBarPane class): X11ScrollBarPane
thumbMargin resource (X11ListPane class): X11ListPane
thumbOrg instance variable (X11ListPane class): X11ListPane
thumbPen instance variable (X11ScrollBarPane class): X11ScrollBarPane
thumbPercent instance method (X11ScrollBarPane class): X11ScrollBarPane
thumbPix instance variable (X11ScrollBarPane class): X11ScrollBarPane
thumbStartLine instance variable (ANSIScrollPane class): ANSIScrollPane
Time class: CTime
timeout instance variable (TCPIPNetworkStreamReader class): TCPIPNetworkStreamReader
timeout instance variable (TCPIPV6NetworkStreamReader class): TCPIPV6NetworkStreamReader
timerMSec instance variable (GLXCanvasPane class): GLXCanvasPane
timerTickHandler instance variable (GLXCanvasPane class): GLXCanvasPane
timeZone instance variable (CalendarTime class): CalendarTime
timeZoneName instance method (CTime class): CTime
timeZoneOffset instance method (CTime class): CTime
time_t type: C statements
title instance method (GLXCanvasPane class): GLXCanvasPane
title method (ANSIWidgetPane class): ANSIWidgetPane
titleString instance variable (ANSIWidgetPane class): ANSIWidgetPane
titleText resource (X11MessageBoxPane class): X11MessageBoxPane
titleText resource (X11YesNoBoxPane class): X11YesNoBoxPane
tmpnam(3) C function: tmpnam
tokenize instance method (String class): String
tokenize instance method (String class): Documentation
tokenizeLine instance method (String class): String
toLower instance method (Character class): Character
tolower(3) C function: tolower
top instance variable (Rectangle class): Rectangle
topMargin resource (X11PopupMenu class): X11PopupMenu
torus instance method (GLUTApplication class): GLUTApplication
totalLines instance variable (ANSIListBoxPane class): ANSIListBoxPane
totalLines instance variable (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
toUpper instance method (Character class): Character
toupper(3) C function: toupper
traceEnabled instance method (Object class): Object
TreeNode class: TreeNode
TRIM_CHAR macro: Character
TRIM_CHAR macro: Ctalk library
TRIM_CHAR_BUF macro: Ctalk library
TRIM_LITERAL macro: Ctalk library
trunc(3) C function: trunc
ttyDevice instance variable (ANSITerminalStream class): ANSITerminalStream
Typedefs: C statements
tzDst instance variable (CalendarTime class): CalendarTime
tzStd instance variable (CalendarTime class): CalendarTime

U
UNDEFINED_CLASS_X exception: Exception
UNDEFINED_LABEL_X exception: Exception
UNDEFINED_METHOD_X exception: Exception
UNDEFINED_PARAM_CLASS_X exception: Exception
UNDEFINED_RECEIVER_X exception: Exception
UNDEFINED_TYPE_X exception: Exception
underlineOnOff instance method (ANSITerminalPane class): ANSITerminalPane
ungetc(3) C function: ungetc
Unimplemented C type warning: C statements
UNIXNetworkStream class: UNIXNetworkStream
UNIXNetworkStreamReader class: UNIXNetworkStreamReader
UNIXNetworkStreamWriter class: UNIXNetworkStreamWriter
UNKNOWN_FILE_MODE_X exception: Exception
unmap instance method (ANSITerminalPane class): ANSITerminalPane
unmap method (ANSIWidgetPane class): ANSIWidgetPane
unshift instance method (List class): List
updateLabel instance method (X11FileSelectDialog class): X11FileSelectDialog
useCursor instance method (X11Pane class): X11Pane
useEntryBox instance variable (X11FileSelectDialog class): X11FileSelectDialog
useEntryBox resource (X11FileSelectDialog class): X11FileSelectDialog
useFTFont instance method (GLXCanvasPane class): GLXCanvasPane
userObjects instance variable (Method class): Method
USER_EXCEPTION_X exception: Exception
useXFont instance method (GLXCanvasPane class): GLXCanvasPane
useXRender instance method (Application class): Application
useXRender instance method (X11Pane class): X11Pane
usingXRender instance Method (Application class): Application
usingXRender instance Method (X11Pane class): X11Pane
uSleep instance method (Application class): Application
utcTime instance method (CTime class): CTime

V
vAlignHint resource (X11ListPane class): X11ListPane
value instance method (List class): List
value instance method (Object class): Object
value instance method (ReadFileStream class): ReadFileStream
value instance variable (Array class): Array
value instance variable (Character class): Character
value instance variable (Float class): Float
value instance variable (Integer class): Integer
value instance variable (Key class): Key
value instance variable (LongInteger class): LongInteger
value instance variable (Object class): Object
value instance variable (String class): String
value instance variable (Symbol class): Symbol
value method (Object class): Method API
value method (WriteFileStream class): WriteFileStream
varargs instance variable (Method class): Method
Variable arguments: Variable arguments
Variable identifiers (tags): Ctalk library
Vector class: Vector
verbose instance method (X11FreeTypeFont class): X11FreeTypeFont
verbose instance variable (ObjectInspector class): ObjectInspector
verbosity instance method (X11FreeTypeFont class): X11FreeTypeFont
vfprintf(3) C function: vfprintf
vfscanf(3) C function: vfscanf
viewHeight instance variable (ANSILabelPane class): ANSILabelPane
viewHeight instance variable (ANSIProgressBarPane class): ANSIProgressBarPane
viewHeight instance variable (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
viewHeight instance variable (ANSIScrollPane class): ANSIScrollPane
viewHeight instance variable (ANSITextBoxPane class): ANSITextBoxPane
viewHeight instance variable (X11CanvasPane class): X11CanvasPane
viewHeight instance variable (X11TextPane class): X11TextPane
viewStartLine instance variable (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
viewStartLine instance variable (ANSITextBoxPane class): ANSITextBoxPane
viewStartLine instance variable (X11TextPane class): X11TextPane
viewStartY instance variable (X11ListPane class): X11ListPane
viewWidth instance variable (ANSILabelPane class): ANSILabelPane
viewWidth instance variable (ANSIProgressBarPane class): ANSIProgressBarPane
viewWidth instance variable (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
viewWidth instance variable (ANSIScrollPane class): ANSIScrollPane
viewWidth instance variable (ANSITextBoxPane class): ANSITextBoxPane
viewWidth instance variable (X11CanvasPane class): X11CanvasPane
viewWidth instance variable (X11TextPane class): X11TextPane
viewXOffset instance variable (ANSITextBoxPane class): ANSITextBoxPane
viewXOffset instance variable (X11TextPane class): X11TextPane
viewXOrg instance variable (X11CanvasPane class): X11CanvasPane
viewYOrg instance variable (X11CanvasPane class): X11CanvasPane
visualAlphaAccumSize instance variable (GLXCanvasPane class): GLXCanvasPane
visualAlphaSize instance variable (GLXCanvasPane class): GLXCanvasPane
visualAuxBuffers instance variable (GLXCanvasPane class): GLXCanvasPane
visualBlueAccumSize instance variable (GLXCanvasPane class): GLXCanvasPane
visualBlueSize instance variable (GLXCanvasPane class): GLXCanvasPane
visualBufferSize instance variable (GLXCanvasPane class): GLXCanvasPane
visualDepthSize instance variable (GLXCanvasPane class): GLXCanvasPane
visualDoubleBuffer instance variable (GLXCanvasPane class): GLXCanvasPane
visualGreenAccumSize instance variable (GLXCanvasPane class): GLXCanvasPane
visualGreenSize instance variable (GLXCanvasPane class): GLXCanvasPane
visualInfoPtr instance variable (GLXCanvasPane class): GLXCanvasPane
visualRedAccumSize instance variable (GLXCanvasPane class): GLXCanvasPane
visualRedSize instance variable (GLXCanvasPane class): GLXCanvasPane
visualRGBA instance variable (GLXCanvasPane class): GLXCanvasPane
visualStencilPlanes instance variable (GLXCanvasPane class): GLXCanvasPane
visualStereo instance variable (GLXCanvasPane class): GLXCanvasPane
vPad resource (X11TextEntryPane class): X11TextEntryPane
vprintf(3) C function: vprintf
vPrintOn instance method (String class): String
vscanf(3) C function: vscanf
vsnprintf(3) C function: vsnprintf
vsprintf(3) C function: vsprintf
vsscanf(3) C function: vsscanf

W
waitCursor instance variable (X11FileSelectDialog class): X11FileSelectDialog
waitStatus instance method (SignalHandler class): SignalHandler
Warnings: Errors
watch instance method (X11Cursor class): X11Cursor
weight instance variable (X11FreeTypeFont class): X11FreeTypeFont
while statements: Control structures
width instance variable (Pen class): Pen
width instance variable (X11Bitmap class): X11Bitmap
width resource (X11CheckBoxPane class): X11CheckBoxPane
Win32TerminalStream class: Win32TerminalStream
Window geometry: X11PaneDispatcher
Window geometry: Ctalk library
windowID instance method (GLUTApplication class): GLUTApplication
winHeight instance variable (Application class): Application
winWidth instance variable (Application class): Application
winXOrg instance variable (Application class): Application
winYOrg instance variable (Application class): Application
withArg instance method (Method class): Method
withBorder instance method (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
withBorder instance method (ANSITerminalPane class): ANSITerminalPane
withBorder instance method (ANSIYesNoBoxPane class): ANSIYesNoBoxPane
withBorder method (ANSITerminalPane class): ANSIWidgetPane
withdraw instance method (X11MessageBoxPane class): X11MessageBoxPane
withdraw instance method (X11YesNoBoxPane class): X11YesNoBoxPane
withdraw instance variable (ANSIWidgetPane class): ANSIWidgetPane
withdraw method (ANSITextEntryPane class): ANSIWidgetPane
withdraw method (ANSITextEntryPane class): ANSITextEntryPane
withPrompt method (ANSITextEntryPane class): ANSITextEntryPane
withShadow instance method (ANSIScrollingListBoxPane class): ANSIScrollingListBoxPane
withShadow instance method (ANSITerminalPane class): ANSITerminalPane
withShadow instance method (ANSIYesNoBoxPane class): ANSIYesNoBoxPane
withShadow method (ANSITerminalPane class): ANSIWidgetPane
withText instance method (ANSIButtonPane class): ANSIButtonPane
withText instance method (ANSIMessageBoxPane class): ANSIMessageBoxPane
withText instance method (ANSIYesNoBoxPane class): ANSIYesNoBoxPane
writeChar method (WriteFileStream class): WriteFileStream
WriteFileStream class: WriteFileStream
writeFormat instance method (String class): String
writeFormat method (String class): Variable arguments
writeFormat method (WriteFileStream class): WriteFileStream
writeFormat method (WriteFileStream class): Variable arguments
writeStream method (WriteFileStream class): WriteFileStream
writeText instance method (TCPIPNetworkStream class): TCPIPNetworkStream
writeText instance method (TCPIPV6NetworkStream class): TCPIPV6NetworkStream
writeVec instance method (TCPIPNetworkStream class): TCPIPNetworkStream
writeVec instance method (TCPIPV6NetworkStream class): TCPIPV6NetworkStream
writeVec instance method (WriteFileStream class): WriteFileStream
WRONG_NUMBER_OF_ARGUMENTS_X exception: Exception

X
X events: X11TerminalStream
X events: InputEvent
x instance variable (Point class): Point
X Render Extension: Application
X Render Extension: X11Pane
X resources: X11Pane
X Selection: X11TextEditorPane
X Window System: C library functions
X11Bitmap class: X11Bitmap
X11ButtonPane class: X11ButtonPane
X11CanvasPane class: X11CanvasPane
X11CheckBoxPane class: X11CheckBoxPane
x11Color instance method (RGBAColor class): RGBAColor
X11Cursor class: X11Cursor
X11FileSelectDialog class: X11FileSelectDialog
X11Font class: X11Font
X11FreeTypeFont class: X11FreeTypeFont
X11LabelPane class: X11LabelPane
X11ListBox class: X11ListBox
X11ListPane class: X11ListPane
X11MessageBoxPane class: X11MessageBoxPane
x11Name instance variable (RGBAColor class): RGBAColor
X11Pane class: X11Pane
X11PaneDispatcher class: X11PaneDispatcher
x11Pixel instance variable (RGBAColor class): RGBAColor
X11PopupMenu class: X11PopupMenu
X11ScrollBarPane class: X11ScrollBarPane
X11TextEditorPane class: X11TextEditorPane
X11TextEntryBox class: X11TextEntryBox
X11TextEntryPane class: X11TextEntryPane
X11TextPane class: X11TextPane
X11YesNoBoxPane class: X11YesNoBoxPane
xColormap class variable (X11Pane class): X11Pane
xEventData1 instanceVariable (InputEvent class): InputEvent
xEventData2 instanceVariable (InputEvent class): InputEvent
xEventData3 instanceVariable (InputEvent class): InputEvent
xEventData4 instanceVariable (InputEvent class): InputEvent
xEventData5 instanceVariable (InputEvent class): InputEvent
xfopen () function: Ctalk library
xfprintf () function: Ctalk library
xfscanf () function: Ctalk library
Xft configuration: X11FreeTypeFont
XftConfig file: X11FreeTypeFont
xGC instance variable (X11Bitmap class): X11Bitmap
xGC instance variable (X11Pane class): X11Pane
xID instance variable (X11Bitmap class): X11Bitmap
XLFD, determining: String
xLineHeight instance variable (GLXCanvasPane class): GLXCanvasPane
xMaxCharWidth instance variable (GLXCanvasPane class): GLXCanvasPane
xmemcpy () function: Ctalk library
xmemmove () function: Ctalk library
xmemset () function: Ctalk library
xpmCharsPerColorFromData instance method (X11Bitmap class): X11Bitmap
xpmColorsFromData instance method (X11Bitmap class): X11Bitmap
xpmHeightFromData instance method (X11Bitmap class): X11Bitmap
xpmInfoFromData instance method (X11Bitmap class): X11Bitmap
xpmToTexture instance method (GLXCanvasPane class): GLXCanvasPane
xpmToTexture method (GLUTApplication class): GLUTApplication
xpmWidthFromData instance method (X11Bitmap class): X11Bitmap
xsprintf () function: Ctalk library
xstderr () function: Ctalk library
xstdin () function: Ctalk library
xstdout () function: Ctalk library
xstrcat () function: Ctalk library
xstrcpy () function: Ctalk library
xstrncat () function: Ctalk library
xstrncpy () function: Ctalk library
Xt object classes: C library functions
xterm instance method (X11Cursor class): X11Cursor
xWindowID instance variable (X11Pane class): X11Pane

Y
y instance variable (Point class): Point
year instance variable (CalendarTime class): CalendarTime

Z
zoneInfo instance method (CalendarTime class): CalendarTime

Jump to:   !   #   $   %   &   (   )   *   +   -   .   /   <   =   >   ?   \   ^   _   |   ~  
A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z