Merge branch 'wip-manual-2'

Conflicts:

	doc/ref/api-translation.texi
This commit is contained in:
Neil Jerram 2010-04-16 22:26:32 +01:00
commit 892cf97107
35 changed files with 254 additions and 229 deletions

View file

@ -56,9 +56,9 @@ guile_TEXINFOS = preface.texi \
posix.texi \
expect.texi \
scsh.texi \
tcltk.texi \
scheme-scripts.texi \
api-overview.texi \
api-discdepr.texi \
scheme-debugging.texi \
scheme-using.texi \
indices.texi \

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Binding Constructs
@section Definitions and Variable Bindings

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Compound Data Types
@section Compound Data Types

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Control Mechanisms
@section Controlling the Flow of Program Execution

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Simple Data Types
@section Simple Generic Data Types

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Debugging
@section Debugging Infrastructure

38
doc/ref/api-discdepr.texi Normal file
View file

@ -0,0 +1,38 @@
@c -*-texinfo-*-
@c This is part of the GNU Guile Reference Manual.
@c Copyright (C) 1996, 1997, 2000, 2001, 2002, 2003, 2004
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@node Discouraged and Deprecated
@section Discouraged and Deprecated
From time to time functions and other features of Guile become
obsolete. Guile has some mechanisms in place that can help you cope
with this.
Guile has two levels of obsoleteness: things can be @emph{deprecated},
meaning that their use is considered harmful and should be avoided,
even in old code; or they can be merely @emph{discouraged}, meaning
that they are fine in and of themselves, but that there are better
alternatives that should be used in new code.
When you use a feature that is deprecated, you will likely get a
warning message at run-time. Also, deprecated features are not ready
for production use: they might be very slow. When something is merely
discouraged, it performs normally and you wont get any messages at
run-time.
The primary source for information about just what things are
discouraged or deprecated in a given release is the file
@file{NEWS}. That file also documents what you should use instead
of the obsoleted things.
The file @file{README} contains instructions on how to control the
inclusion or removal of the deprecated and/or discouraged features
from the public API of Guile, and how to control the warning messages
for deprecated features.
The idea behind those mechanisms is that normally all deprecated and
discouraged features are available, but that you can omit them on
purpose to check whether your code still relies on them.

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Read/Load/Eval/Compile
@section Reading and Evaluating Scheme Code

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Internationalization
@section Support for Internationalization

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Input and Output
@section Input and Output

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Other Languages
@section Support for Other Languages

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Memory Management
@section Memory Management and Garbage Collection
@ -479,7 +478,6 @@ to the value, it is eligible to be returned from a guardian.
@end deffn
@page
@node Objects
@section Objects

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Modules
@section Modules
@cindex modules

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Options and Config
@section Configuration, Features and Runtime Options

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node API Overview
@section Overview of the Guile API

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Procedures
@section Procedures

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Scheduling
@section Threads, Mutexes, Asyncs and Dynamic Roots

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Smobs
@section Smobs

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Utility Functions
@section General Utility Functions

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Expect
@section Expect

View file

@ -1,50 +0,0 @@
@c -*-texinfo-*-
@c This is part of the GNU Guile Reference Manual.
@c Copyright (C) 1996, 1997, 2000, 2001, 2002, 2003, 2004
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Libguile Intro
@chapter Using Guile as an Extension Language
The chapters in this part of the manual explain how to use Guile as a
powerful application extension language.
An important change for the 1.6.x series of Guile releases is that the
GH interface is now deprecated. For the reasoning behind this decision,
see @xref{GH deprecation}. The GH interface will continue to be
supported for the 1.6.x and 1.8.x release series, but will be dropped
thereafter, so developers are encouraged to switch progressively to the
scm interface. The last chapter in this part of the manual (@pxref{GH})
documents both how to use GH and how to switch from GH to scm.
The Guile developers believe that clarification of the GH vs. scm
debate, and the consequent deprecation of the GH interface, are in the
long term interests of the project. However it does create an
unfortunate situation for developers who want to start a project using
Guile and so read the manual to find out how to proceed. They will
discover that the GH interface, although quite well documented, is
deprecated, but that there is almost no adequate documentation for its
theoretical replacement, the scm interface. Moreover, the scm interface
still has the odd few rough edges which need smoothing down.
Therefore, although deprecated, it is quite OK to continue to use the GH
interface if you feel uncomfortable with the `scm_' interface as it
stands today. By the time that support for GH is dropped, we plan to
have thoroughly documented the `scm_' interface, and to have enhanced it
such that conversion from GH to the `scm_' interface will be very
straightforward, and probably mostly automated.
As far as documentation of the scm interface is concerned, the current
position is that it is a bit confused, but that the situation should
improve rapidly once the 1.6.0 release is out. The plan is to refocus
the bulk of Part II, currently ``Guile Scheme'', as the ``Guile API
Reference'' so that it covers both Scheme and C interfaces. (This makes
sense because almost all of Guile's primitive procedures on the Scheme
level --- e.g. @code{memq} --- are also available as C level primitives
in the scm interface --- e.g. @code{scm_memq}.) There will then remain
a certain amount of Scheme-specific (such as the ``Basic Ideas''
chapter) and C-specific documentation (such as SMOB usage and
interaction with the garbage collector) to collect into corresponding
chapters.

View file

@ -167,7 +167,7 @@ x
@menu
* Preface::
* Introduction to Guile::
* Introduction::
* Programming in Scheme::
* Programming in C::
@ -289,6 +289,7 @@ available through both Scheme and C interfaces.
@menu
* API Overview:: Overview of the Guile API.
* Discouraged and Deprecated:: Obsolete back-compatible APIs.
* The SCM Type:: The fundamental data type for C code.
* Initialization:: Initializing Guile.
* Snarfing Macros:: Macros for snarfing initialization actions.
@ -315,6 +316,7 @@ available through both Scheme and C interfaces.
@end menu
@include api-overview.texi
@include api-discdepr.texi
@include api-scm.texi
@include api-init.texi
@include api-snarf.texi

View file

@ -4,50 +4,121 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@node Introduction to Guile
@chapter Introduction to Guile
@node Introduction
@chapter Introduction
Guile is an implementation of the Scheme programming language. Scheme
(@url{schemers.org}) is an elegant and conceptually simple dialect of
Lisp, originated by Guy Steele and Gerald Sussman, and since evolved
by the series of reports known as RnRS (the
@tex
Revised$^n$
@end tex
@ifnottex
Revised^n
@end ifnottex
Reports on Scheme).
Unlike -- for example -- Python or Perl, Scheme has no benevolent
dictator. There are many Scheme implementations, with different
characteristics and with communities and academic activities around
them, and the language develops as a result of the interplay between
these. Guile's particular characteristics are that
@itemize
@item
it is easy to combine with other code written in C
@item
it has a historical and continuing connection with the GNU Project
@item
it emphasizes interactive and incremental programming
@item
it actually supports several languages, not just Scheme.
@end itemize
@noindent
The next few sections explain what we mean by these points. The
sections after that cover how you can obtain and install Guile, a tour
of the ways that you can use it, how to report any problems that you
encounter, and the typographical conventions that we use in this
manual.
@menu
* What is Guile?::
* Guile and Scheme::
* Combining with C::
* Guile and the GNU Project::
* Interactive Programming::
* Supporting Multiple Languages::
* Obtaining and Installing Guile::
* Whirlwind Tour::
* Discouraged and Deprecated::
* Reporting Bugs::
* Typographical Conventions::
@end menu
@node What is Guile?
@section What is Guile?
@node Guile and Scheme
@section Guile and Scheme
Guile is an interpreter for the Scheme programming language, packaged
for use in a wide variety of environments. Guile implements Scheme as
described in the
Guile implements Scheme as described in the
@tex
Revised$^5$
@end tex
@ifnottex
Revised^5
@end ifnottex
Report on the Algorithmic Language Scheme (usually known as @acronym{R5RS}),
providing clean and general data and control structures. Guile goes
beyond the rather austere language presented in @acronym{R5RS}, extending it with
a module system, full access to @acronym{POSIX} system calls, networking support,
multiple threads, dynamic linking, a foreign function call interface,
powerful string processing, and many other features needed for
programming in the real world.
Report on the Algorithmic Language Scheme (usually known as
@acronym{R5RS}), providing clean and general data and control
structures. Guile goes beyond the rather austere language presented
in @acronym{R5RS}, extending it with a module system, full access to
@acronym{POSIX} system calls, networking support, multiple threads,
dynamic linking, a foreign function call interface, powerful string
processing, and many other features needed for programming in the real
world.
Like a shell, Guile can run interactively, reading expressions from the
user, evaluating them, and displaying the results, or as a script
interpreter, reading and executing Scheme code from a file. However,
Guile is also packaged as an object library, allowing other applications
to easily incorporate a complete Scheme interpreter. An application can
then use Guile as an extension language, a clean and powerful configuration
language, or as multi-purpose ``glue'', connecting primitives provided
by the application. It is easy to call Scheme code from C code and vice
versa, giving the application designer full control of how and when to
invoke the interpreter. Applications can add new functions, data types,
control structures, and even syntax to Guile, creating a domain-specific
language tailored to the task at hand, but based on a robust language
design.
The Scheme community has recently agreed and published R6RS, the
latest installment in the RnRS series. R6RS significantly expands the
core Scheme language, and standardises many non-core functions that
implementations -- including Guile -- have previously done in
different ways. Guile has been updated to incorporate some of the
features of R6RS, and to adjust some existing features to conform to
the R6RS specification, but it is by no means a complete R6RS
implementation.
Between R5RS and R6RS, the SRFI process (@url{http://srfi.schemers.org/})
standardised interfaces for many practical needs, such as multithreaded
programming and multidimensional arrays. Guile supports many SRFIs, as
documented in detail in @ref{SRFI Support}.
In summary, so far as relationship to the Scheme standards is
concerned, Guile is an R5RS implementation with many extensions, some
of which conform to SRFIs or to the relevant parts of R6RS.
@node Combining with C
@section Combining with C Code
Like a shell, Guile can run interactively --- reading expressions from the user,
evaluating them, and displaying the results --- or as a script interpreter,
reading and executing Scheme code from a file. Guile also provides an object
library, @dfn{libguile}, that allows other applications to easily incorporate a
complete Scheme interpreter. An application can then use Guile as an extension
language, a clean and powerful configuration language, or as multi-purpose
``glue'', connecting primitives provided by the application. It is easy to call
Scheme code from C code and vice versa, giving the application designer full
control of how and when to invoke the interpreter. Applications can add new
functions, data types, control structures, and even syntax to Guile, creating a
domain-specific language tailored to the task at hand, but based on a robust
language design.
This kind of combination is helped by four aspects of Guile's design
and history. First is that Guile has always been targeted as an
extension language. Hence its C API has always been of great
importance, and has been developed accordingly. Second and third are
rather technical points -- that Guile uses conservative garbage
collection, and that it implements the Scheme concept of continuations
by copying and reinstating the C stack -- but whose practical
consequence is that most existing C code can be glued into Guile as
is, without needing modifications to cope with strange Scheme
execution flows. Last is the module system, which helps extensions to
coexist without stepping on each others' toes.
Guile's module system allows one to break up a large program into
manageable sections with well-defined interfaces between them.
@ -58,10 +129,57 @@ routines for general distribution; as of this writing, one can find
Emacs interfaces, database access routines, compilers, @acronym{GUI}
toolkit interfaces, and @acronym{HTTP} client functions, among others.
In the future, we hope to expand Guile to support other languages like
Tcl and Perl by translating them to Scheme code. This means that users
can program applications which use Guile in the language of their
choice, rather than having the tastes of the application's author
@node Guile and the GNU Project
@section Guile and the GNU Project
Guile was conceived by the GNU Project following the fantastic success
of Emacs Lisp as an extension language within Emacs. Just as Emacs
Lisp allowed complete and unanticipated applications to be written
within the Emacs environment, the idea was that Guile should do the
same for other GNU Project applications. This remains true today.
Guile is now used by GNU project applications such as AutoGen, Lilypond, Denemo,
Mailutils, TeXmacs and Gnucash, and we hope that there will be many more in
future.
@node Interactive Programming
@section Interactive Programming
Non-free software has no interest in its users being able to see how it works.
They are supposed to just accept it, or to report problems and hope that the
source code owners will choose to work on them.
Free software aims to work reliably just as much as non-free software does, but
it should also empower its users by making its workings available. This is
useful for many reasons, including education, auditing and enhancements, as well
as for debugging problems.
The ideal free software system achieves this by making it easy for interested
users to see the source code for a feature that they are using, and to follow
through that source code step-by-step, as it runs. In Emacs, good examples of
this are the source code hyperlinks in the help system, and @code{edebug}.
Then, for bonus points and maximising the ability for the user to experiment
quickly with code changes, the system should allow parts of the source code to
be modified and reloaded into the running program, to take immediate effect.
Guile allows this kind of interactive programming, and this distinguishes it
from many Scheme implementations that instead prioritise running a fixed Scheme
program as fast as possible --- because there are tradeoffs between performance
and the ability to modify parts of an already running program. There are faster
Schemes than Guile, but Guile is a GNU project and so prioritises the GNU vision
of programming freedom and experimentation.
@node Supporting Multiple Languages
@section Supporting Multiple Languages
Since the 2.0 release, Guile's architecture supports compiling any language to
its core virtual machine bytecode, and Scheme is just one of the supported
languages. Other supported languages are Emacs Lisp, ECMAScript (commonly known
as Javascript) and Brainfuck, and work is under discussion for Lua, Ruby and
Python.
This means that users can program applications which use Guile in the language
of their choice, rather than having the tastes of the application's author
imposed on them.
@node Obtaining and Installing Guile
@ -69,7 +187,7 @@ imposed on them.
Guile can be obtained from the main GNU archive site
@url{ftp://ftp.gnu.org} or any of its mirrors. The file will be named
guile-version.tar.gz. The current version is @value{VERSION}, so the
guile-@var{version}.tar.gz. The current version is @value{VERSION}, so the
file you should grab is:
@url{ftp://ftp.gnu.org/pub/gnu/guile/guile-@value{VERSION}.tar.gz}
@ -94,9 +212,8 @@ make install
@end example
This will install the Guile executable @file{guile}, the Guile library
@file{libguile} and various associated header files and support
libraries. It will also install the Guile tutorial and reference
manual.
@file{libguile} and various associated header files and support libraries. It
will also install the Guile reference manual.
@c [[include instructions for getting R5RS]]
@ -385,39 +502,6 @@ There is also a way to manipulate the module system from C but only
Scheme files can be autoloaded. Thus, we recommend that you define
your modules in Scheme.
@node Discouraged and Deprecated
@section Discouraged and Deprecated
From time to time functions and other features of Guile become
obsolete. Guile has some mechanisms in place that can help you cope
with this.
Guile has two levels of obsoleteness: things can be @emph{deprecated},
meaning that their use is considered harmful and should be avoided,
even in old code; or they can be merely @emph{discouraged}, meaning
that they are fine in and of themselves, but that there are better
alternatives that should be used in new code.
When you use a feature that is deprecated, you will likely get a
warning message at run-time. Also, deprecated features are not ready
for production use: they might be very slow. When something is merely
discouraged, it performs normally and you wont get any messages at
run-time.
The primary source for information about just what things are
discouraged or deprecated in a given release is the file
@file{NEWS}. That file also documents what you should use instead
of the obsoleted things.
The file @file{README} contains instructions on how to control the
inclusion or removal of the deprecated and/or discouraged features
from the public API of Guile, and how to control the warning messages
for deprecated features.
The idea behind those mechanisms is that normally all deprecated and
discouraged features are available, but that you can omit them on
purpose to check whether your code still relies on them.
@node Reporting Bugs
@section Reporting Bugs
@ -586,6 +670,53 @@ contents are themselves pointers).
@end itemize
@node Typographical Conventions
@section Typographical Conventions
We use some conventions in this manual.
@itemize @bullet
@item
For some procedures, notably type predicates, we use ``iff'' to mean
``if and only if''. The construct is usually something like: `Return
@var{val} iff @var{condition}', where @var{val} is usually
``@nicode{#t}'' or ``non-@nicode{#f}''. This typically means that
@var{val} is returned if @var{condition} holds, and that @samp{#f} is
returned otherwise. To clarify: @var{val} will @strong{only} be
returned when @var{condition} is true.
@cindex iff
@item
In examples and procedure descriptions and all other places where the
evaluation of Scheme expression is shown, we use some notation for
denoting the output and evaluation results of expressions.
The symbol @samp{@result{}} is used to tell which value is returned by
an evaluation:
@lisp
(+ 1 2)
@result{} 3
@end lisp
Some procedures produce some output besides returning a value. This
is denoted by the symbol @samp{@print{}}.
@lisp
(begin (display 1) (newline) 'hooray)
@print{} 1
@result{} hooray
@end lisp
As you can see, this code prints @samp{1} (denoted by
@samp{@print{}}), and returns @code{hooray} (denoted by
@samp{@result{}}). Do not confuse the two.
@c Add other conventions here.
@end itemize
@c Local Variables:
@c TeX-master: "guile.texi"

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node General Libguile Concepts
@section General concepts for using libguile

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Programming Overview
@section An Overview of Guile Programming

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Pretty Printing
@section Pretty Printing
@ -121,7 +120,6 @@ allowed to consume all of the available width.
@end deffn
@page
@node Formatted Output
@section Formatted Output
@cindex formatted output

View file

@ -5,27 +5,14 @@
@c See the file guile.texi for copying conditions.
@node Preface
@chapter Preface
@unnumbered Preface
This manual documents version @value{VERSION} of Guile, GNU's
Ubiquitous Intelligent Language for Extensions. It describes how to
use Guile in many useful and interesting ways.
@menu
* Manual Layout::
* Manual Conventions::
* Contributors::
* Guile License::
@end menu
@node Manual Layout
@section Layout of this Manual
The manual is divided into the following chapters.
This manual describes how to use Guile, GNU's Ubiquitous Intelligent
Language for Extensions. It relates particularly to Guile version
@value{VERSION}. The manual is divided into the following chapters.
@table @strong
@item Chapter 1: Introduction to Guile
@item Chapter 1: Introduction
This part provides an overview of what Guile is and how you can use
it. A whirlwind tour shows how Guile can be used interactively and as
a script interpreter, how to link Guile into your own applications,
@ -64,56 +51,13 @@ classes, multiple inheritance and generic functions.
@end table
@node Manual Conventions
@section Conventions used in this Manual
We use some conventions in this manual.
@itemize @bullet
@item
For some procedures, notably type predicates, we use ``iff'' to mean
``if and only if''. The construct is usually something like: `Return
@var{val} iff @var{condition}', where @var{val} is usually
``@nicode{#t}'' or ``non-@nicode{#f}''. This typically means that
@var{val} is returned if @var{condition} holds, and that @samp{#f} is
returned otherwise. To clarify: @var{val} will @strong{only} be
returned when @var{condition} is true.
@cindex iff
@item
In examples and procedure descriptions and all other places where the
evaluation of Scheme expression is shown, we use some notation for
denoting the output and evaluation results of expressions.
The symbol @samp{@result{}} is used to tell which value is returned by
an evaluation:
@lisp
(+ 1 2)
@result{} 3
@end lisp
Some procedures produce some output besides returning a value. This
is denoted by the symbol @samp{@print{}}.
@lisp
(begin (display 1) (newline) 'hooray)
@print{} 1
@result{} hooray
@end lisp
As you can see, this code prints @samp{1} (denoted by
@samp{@print{}}), and returns @code{hooray} (denoted by
@samp{@result{}}). Do not confuse the two.
@c Add other conventions here.
@end itemize
@menu
* Contributors::
* Guile License::
@end menu
@node Contributors
@section Contributors to this Manual
@unnumberedsec Contributors to this Manual
The Guile reference and tutorial manuals were written and edited
largely by Mark Galassi and Jim Blandy. In particular, Jim wrote the
@ -149,7 +93,7 @@ The chapter on GOOPS was written by Christian Lynbech, Mikael
Djurfeldt and Neil Jerram.
@node Guile License
@section The Guile License
@unnumberedsec The Guile License
@cindex copying
@cindex GPL
@cindex LGPL

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Readline Support
@section Readline Support
@ -255,7 +254,6 @@ possibilities in @var{string-list}. Matching is case-sensitive.
@end defun
@page
@node Value History
@section Value History

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Tracing
@section Tracing

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Further Reading
@section Further Reading

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Guile Scripting
@section Guile Scripting

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Command Line Handling
@section Handling Command Line Options and Arguments

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node The Scheme shell (scsh)
@section The Scheme shell (scsh)
@cindex SCSH

View file

@ -4,7 +4,6 @@
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node SRFI Support
@section SRFI Support Modules
@cindex SRFI

View file

@ -1,9 +0,0 @@
@c -*-texinfo-*-
@c This is part of the GNU Guile Reference Manual.
@c Copyright (C) 1996, 1997, 2000, 2001, 2002, 2003, 2004
@c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@page
@node Tcl/Tk Interface
@chapter Tcl/Tk Interface