ir-tk works like wish.
authorAdam Dickmeiss <adam@indexdata.dk>
Mon, 26 Jun 1995 10:20:19 +0000 (10:20 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Mon, 26 Jun 1995 10:20:19 +0000 (10:20 +0000)
CHANGELOG
Makefile.in
doc/ir-tcl.sgml
tclmain.c

index fa3be03..ba510d9 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,4 +1,4 @@
-$Id: CHANGELOG,v 1.1 1995-06-25 10:24:58 adam Exp $
+$Id: CHANGELOG,v 1.2 1995-06-26 10:20:19 adam Exp $
 
 06/19/95 Release of ir-tcl-1.0b
 ------------------------------------------------------
@@ -21,3 +21,9 @@ $Id: CHANGELOG,v 1.1 1995-06-25 10:24:58 adam Exp $
 
 06/22/95 Preferred record syntax can be specified by the user in client.tcl.
 
+06/26/95 ir-tk doesn't read client.tcl when no options are given. Instead
+         it works like wish. The demonstrating client is named 'irclient'
+         when installed in the directory with executables.
+------------------------------------------------------
+06/26/95 Release of ir-tcl-1.0b1
+         
index 5aacd02..5252448 100644 (file)
@@ -2,7 +2,7 @@
 # (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
@@ -54,8 +54,8 @@ O=ir-tcl.o marc.o
 
 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
@@ -77,12 +77,15 @@ install: ir-tcl
        $(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
@@ -108,5 +111,5 @@ distribution:
 .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
 
index aba6909..bef13c1 100644 (file)
@@ -1,13 +1,13 @@
 <!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 &mdash; an information retrieval toolkit for
 Tcl and Tk that provides access to the Z39.50/SR protocol.
@@ -40,8 +40,8 @@ See &lsqb;ref 2&rsqb; for more information about the XTI/mOSI implementation.
 <itemize>
 <item> A simple command line shell &mdash; 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 &mdash; makes it very easy to implement GUI clients.
 </itemize>
 
 <sect>Compilation and installation
@@ -101,32 +101,36 @@ $ make install
 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> &mdash;
-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> &mdash;
-defaults to <tt>/usr/local/bin</tt>.
+<tag><tt>ir-tk</tt></tag> The <sf/IrTcl/ shell for Tk.
+ Installed in <tt>BINDIR</tt> &mdash; 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> &mdash; 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>
+ &mdash; defaults to <tt>/usr/local/lib/irtcl</tt>.
 <tag><tt>libirtcl.a</tt></tag> The <sf/IrTcl/ library. 
-Installed in <tt>LIBDIR</tt> &mdash; defaults to <tt>/usr/local/lib</tt>.
+ Installed in <tt>LIBDIR</tt> &mdash; defaults to <tt>/usr/local/lib</tt>.
 <tag><tt>ir-tcl.h</tt></tag> The <sf/IrTcl/ header file.
-Installed in <tt>INCDIR</tt> &mdash; defaults to <tt>/usr/local/include</tt>.
-<tag><tt>client.tcl</tt></tag> A graphical client written in TK. 
-Installed in <tt>IRTCLDIR</tt> &mdash; defaults to 
-<tt>/usr/local/lib/irtcl</tt>.
+ Installed in <tt>INCDIR</tt> &mdash; 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> &mdash; 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> &mdash; 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> &mdash; defaults to <tt>/usr/local/lib/irtcl</tt>.
+ in Tk. Read by <tt>client.tcl</tt>. Installed 
+ in <tt>IRTCLDIR</tt> &mdash; 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> &mdash; defaults to <tt>/usr/local/lib/irtcl</tt>.
+ <tt>client.tcl</tt>. Installed 
+ in <tt>IRTCLDIR</tt> &mdash; 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> &mdash; defaults to <tt>/usr/local/lib/irtcl</tt>.
+ <tt>client.tcl</tt>. Installed 
+ in <tt>IRTCLDIR</tt> &mdash; defaults to <tt>/usr/local/lib/irtcl</tt>.
 </descrip>
 
 <sect1>ir-tcl
@@ -143,14 +147,12 @@ as a script.
 <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.
 
@@ -977,9 +979,9 @@ record.
 
 <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
 
index e17cd1e..4277b1a 100644 (file)
--- a/tclmain.c
+++ b/tclmain.c
@@ -5,7 +5,10 @@
  * 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
@@ -90,11 +93,34 @@ int main (int argc, char **argv)
             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);
 }
 
@@ -112,7 +138,7 @@ void tcl_mainloop (Tcl_Interp *interp, int interactive)
     if (interactive)
     {
         Tcl_DStringInit (&command);
-        printf ("[TCL]"); fflush (stdout);
+        printf ("%% "); fflush (stdout);
     }
     while (1)
     {
@@ -169,8 +195,8 @@ void tcl_mainloop (Tcl_Interp *interp, int interactive)
         }
         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);
@@ -180,10 +206,10 @@ void tcl_mainloop (Tcl_Interp *interp, int interactive)
                 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);
             }
         }
     }