# (c) Index Data 1995
# See the file LICENSE for details.
# Sebastian Hammer, Adam Dickmeiss
-# $Id: Makefile.in,v 1.6 1995-06-25 10:24:59 adam Exp $
+# $Id: Makefile.in,v 1.7 1995-06-26 10:20:20 adam Exp $
SHELL=/bin/sh
# IrTcl Version
all: ir-tk ir-tcl
-ir-tk: libirtcl.a tkmain.o
- $(CC) $(CFLAGS) tkmain.o -o ir-tk libirtcl.a $(YAZLIB) $(TKLIB) \
+ir-tk: libirtcl.a tkinit.o
+ $(CC) $(CFLAGS) tkinit.o -o ir-tk libirtcl.a $(YAZLIB) $(TKLIB) \
$(TCLLIB) $(XLIB) $(LIBS)
ir-tcl: libirtcl.a tclmain.o
$(INSTALL_PROGRAM) ir-tcl $(BINDIR)
$(INSTALL_DATA) libirtcl.a $(LIBDIR)
$(INSTALL_DATA) ir-tcl.h $(INCDIR)
- $(INSTALL_DATA) LICENSE clientrc.tcl $(IRTCLDIR)
- sed "s,^set libdir LIBDIR,set libdir $(IRTCLDIR)," <client.tcl >client.bak
- if [ -f ir-tk ]; then $(INSTALL_PROGRAM) ir-tk $(BINDIR)
- $(INSTALL_DATA) client.bak $(IRTCLDIR)/client.tcl
- $(INSTALL_DATA) formats/*.tcl $(IRTCLDIR)/formats
- $(INSTALL_DATA) bitmaps/book? $(IRTCLDIR)/bitmaps
+ if [ -f ir-tk ]; then \
+ $(INSTALL_PROGRAM) ir-tk $(BINDIR); \
+ echo "#! $(BINDIR)/ir-tk -f" >head.bak; \
+ cat head.bak client.tcl| sed "s,^set libdir LIBDIR,set libdir $(IRTCLDIR)," >client.bak; \
+ $(INSTALL_PROGRAM) client.bak $(BINDIR)/irclient; \
+ $(INSTALL_DATA) LICENSE clientrc.tcl $(IRTCLDIR); \
+ $(INSTALL_DATA) formats/*.tcl $(IRTCLDIR)/formats; \
+ $(INSTALL_DATA) bitmaps/book? $(IRTCLDIR)/bitmaps; \
+ fi;
clean:
rm -f *.[oa] ir-tk ir-tcl core gmon.out mon.out *.bak config.cache
.c.o:
$(CC) -c $(CFLAGS) $(DEFS) $<
-$(O) tkmain.o tclmain.o: ir-tcl.h ir-tclp.h
+$(O) tkinit.o tclmain.o: ir-tcl.h ir-tclp.h
<!doctype linuxdoc system>
<!--
- $Id: ir-tcl.sgml,v 1.9 1995-06-25 10:25:33 adam Exp $
+ $Id: ir-tcl.sgml,v 1.10 1995-06-26 10:20:45 adam Exp $
-->
<article>
<title>IrTcl User's Guide and Reference
<author>Index Data, <tt/info@index.ping.dk/
-<date>$Revision: 1.9 $
+<date>$Revision: 1.10 $
<abstract>
This document describes IrTcl — an information retrieval toolkit for
Tcl and Tk that provides access to the Z39.50/SR protocol.
<itemize>
<item> A simple command line shell — useful for
testing purposes.
-<item> A system which operates within the Tk environment which
-makes it very easy to implement GUI clients.
+<item> A simple command line shell which operates within the Tk
+ environment — makes it very easy to implement GUI clients.
</itemize>
<sect>Compilation and installation
Summary of files installed (the names refer to the Makefile variables):
<descrip>
-<tag><tt>ir-tk</tt></tag> The Tk client. Installed in <tt>BINDIR</tt> —
-defaults to <tt>/usr/local/bin</tt>. When ir-tk starts it reads
-<tt>client.tcl</tt>. If the files doesn't exist in the current
-directory it tries to read it from <tt>IRTCLDIR</tt> - defaults
-to <tt>/usr/local/lib/irtcl</tt>.
-<tag><tt>ir-tcl</tt></tag> The Tcl client. Installed in <tt>BINDIR</tt> —
-defaults to <tt>/usr/local/bin</tt>.
+<tag><tt>ir-tk</tt></tag> The <sf/IrTcl/ shell for Tk.
+ Installed in <tt>BINDIR</tt> — defaults to
+ <tt>/usr/local/bin</tt>. <tt>ir-tk</tt> works like
+ <tt>wish</tt> &mdash without arguments it reads commands from stdin.
+ A source file may be specified by option <tt>-f</tt>. <tt>ir-tk</tt>
+ accept the same set of options as <tt>wish</tt>.
+<tag><tt>ir-tcl</tt></tag> The <sf/IrTcl/ shell for Tcl. Installed in
+ <tt>BINDIR</tt> — defaults to <tt>/usr/local/bin</tt>.
+<tag><tt>client.tcl</tt></tag> A graphical client for <tt>ir-tk</tt>.
+ The client is installed as an executable script called <tt>irclient</tt> in
+ <tt>BINDIR</tt>. This client needs a number of files, bitmaps, etc.
+ The client looks for the files in the current directory &mdash if
+ this fails it tries to look in the directory <tt>IRTCLDIR</tt>
+ — defaults to <tt>/usr/local/lib/irtcl</tt>.
<tag><tt>libirtcl.a</tt></tag> The <sf/IrTcl/ library.
-Installed in <tt>LIBDIR</tt> — defaults to <tt>/usr/local/lib</tt>.
+ Installed in <tt>LIBDIR</tt> — defaults to <tt>/usr/local/lib</tt>.
<tag><tt>ir-tcl.h</tt></tag> The <sf/IrTcl/ header file.
-Installed in <tt>INCDIR</tt> — defaults to <tt>/usr/local/include</tt>.
-<tag><tt>client.tcl</tt></tag> A graphical client written in TK.
-Installed in <tt>IRTCLDIR</tt> — defaults to
-<tt>/usr/local/lib/irtcl</tt>.
+ Installed in <tt>INCDIR</tt> — defaults to <tt>/usr/local/include</tt>.
<tag><tt>clientrc.tcl</tt></tag> A setup file with definitions
-of target and queries. Read and updated by <tt>client.tcl</tt>. Installed
-in <tt>IRTCLDIR</tt> — defaults to <tt>/usr/local/lib/irtcl</tt>.
+ of target and queries. Read and updated by <tt>client.tcl</tt>. Installed
+ in <tt>IRTCLDIR</tt> — defaults to <tt>/usr/local/lib/irtcl</tt>.
<tag><tt>formats/*</tt></tag> Display format files written
-in Tk. Read by <tt>client.tcl</tt>. Installed
-in <tt>IRTCLDIR</tt> — defaults to <tt>/usr/local/lib/irtcl</tt>.
+ in Tk. Read by <tt>client.tcl</tt>. Installed
+ in <tt>IRTCLDIR</tt> — defaults to <tt>/usr/local/lib/irtcl</tt>.
<tag><tt>bitmaps/*</tt></tag> Various bitmap files. Read by
-<tt>client.tcl</tt>. Installed
-in <tt>IRTCLDIR</tt> — defaults to <tt>/usr/local/lib/irtcl</tt>.
+ <tt>client.tcl</tt>. Installed
+ in <tt>IRTCLDIR</tt> — defaults to <tt>/usr/local/lib/irtcl</tt>.
<tag><tt>LICENSE</tt></tag> LICENSE file. Read by
-<tt>client.tcl</tt>. Installed
-in <tt>IRTCLDIR</tt> — defaults to <tt>/usr/local/lib/irtcl</tt>.
+ <tt>client.tcl</tt>. Installed
+ in <tt>IRTCLDIR</tt> — defaults to <tt>/usr/local/lib/irtcl</tt>.
</descrip>
<sect1>ir-tcl
<sect1>ir-tk
<p>
-<tt>ir-tk</tt> is a program which basically waits for X events and
-socket events (assocated with Z39.50/SR targets). <tt>ir-tk</tt> normally
-tries to evaluate the file named <tt>client.tcl</tt> when it
-starts. However, this behaviour may be changed by specifying another
-filename with the <tt>-file</tt> option.
-
-The enclosed script <tt>client.tcl</tt> is a graphical client which
-demonstates an example of a user interface for the Z39.50/SR protocols.
+<tt>ir-tk</tt> is a program that works like <tt>wish</tt> except that
+<tt>ir-tk</tt> include the new set of commands.
+
+The enclosed script <tt>client.tcl</tt> for <tt>ir-tk</tt>
+is a graphical client which demonstates an example of a user interface
+for the Z39.50/SR protocols.
At first the script was relatively small but it has grown since the
beginning. At present it is about 3000 lines.
<sect1>SUTRS
+<p>
In <sf/IrTcl/ a SUTRS record is treated as one single string. To retrieve
-a SUTRS string at a given index, the <tt>getSutrs</tt> should be used.
-The <tt>getSutrs</tt> is immediately followed by a index.
+a SUTRS record use the <tt>getSutrs</tt> followed by an index.
<sect>Scan
* Sebastian Hammer, Adam Dickmeiss
*
* $Log: tclmain.c,v $
- * Revision 1.8 1995-06-21 15:16:44 adam
+ * Revision 1.9 1995-06-26 10:20:20 adam
+ * ir-tk works like wish.
+ *
+ * Revision 1.8 1995/06/21 15:16:44 adam
* More work on configuration.
*
* Revision 1.7 1995/06/21 11:04:54 adam
exit (1);
tcl_mainloop (interp, 0);
}
- else
+ else if (isatty(0))
{
+
Tcl_SetVar (interp, "tcl_interactive", "1", TCL_GLOBAL_ONLY);
tcl_mainloop (interp, 1);
}
+ else
+ {
+ Tcl_DString command;
+ char input_buf[1024];
+ int count;
+
+ printf ("xx\n");
+ Tcl_DStringInit (&command);
+ while (fgets (input_buf, 1024, stdin))
+ {
+ count = strlen(input_buf);
+ Tcl_DStringAppend (&command, input_buf, count);
+ if (Tcl_CommandComplete (Tcl_DStringValue (&command)))
+ {
+ int code = Tcl_Eval (interp, Tcl_DStringValue (&command));
+ Tcl_DStringFree (&command);
+ if (code)
+ printf ("Error: %s\n", interp->result);
+ }
+ }
+ tcl_mainloop (interp, 0);
+ }
exit (0);
}
if (interactive)
{
Tcl_DStringInit (&command);
- printf ("[TCL]"); fflush (stdout);
+ printf ("%% "); fflush (stdout);
}
while (1)
{
}
if (interactive && FD_ISSET(0, &fdset_tcl_r))
{
- char input_buf[256];
- int count = read (0, input_buf, 256);
+ char input_buf[1024];
+ int count = read (0, input_buf, 1024);
if (count <= 0)
exit (0);
int code = Tcl_Eval (interp, Tcl_DStringValue (&command));
Tcl_DStringFree (&command);
if (code)
- printf ("[ERR:%s]\n", interp->result);
+ printf ("Error: %s\n", interp->result);
else
- printf ("[RES:%s]\n", interp->result);
- printf ("[TCL]"); fflush (stdout);
+ printf ("%s", interp->result);
+ printf ("%% "); fflush (stdout);
}
}
}