home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / x / volume17 / xwbstrmt / part03 < prev    next >
Encoding:
Text File  |  1992-04-13  |  21.0 KB  |  577 lines

  1. Newsgroups: comp.sources.x
  2. Path: uunet!cis.ohio-state.edu!zaphod.mps.ohio-state.edu!mips!msi!dcmartin
  3. From: cattelan@everest.ee.umn.edu (Russell Cattelan)
  4. Subject: v17i057: xwebster (MOTIF) (REPOST), Part03/03
  5. Message-ID: <1992Apr14.141632.7959@msi.com>
  6. Originator: dcmartin@fascet
  7. Sender: dcmartin@msi.com (David C. Martin - Moderator)
  8. Nntp-Posting-Host: fascet
  9. Organization: Molecular Simulations, Inc.
  10. References: <csx-17i055-xwebster-motif@uunet.UU.NET>
  11. Date: Tue, 14 Apr 1992 14:16:32 GMT
  12. Approved: dcmartin@msi.com
  13. Lines: 562
  14.  
  15. Submitted-by: cattelan@everest.ee.umn.edu (Russell Cattelan)
  16. Posting-number: Volume 17, Issue 57
  17. Archive-name: xwebster-motif/part03
  18.  
  19. #!/bin/sh
  20. # this is part.03 (part 3 of a multipart archive)
  21. # do not concatenate these parts, unpack them in order with /bin/sh
  22. # file xwebster.c continued
  23. #
  24. if test ! -r _shar_seq_.tmp; then
  25.     echo 'Please unpack part 1 first!'
  26.     exit 1
  27. fi
  28. (read Scheck
  29.  if test "$Scheck" != 3; then
  30.     echo Please unpack part "$Scheck" next!
  31.     exit 1
  32.  else
  33.     exit 0
  34.  fi
  35. ) < _shar_seq_.tmp || exit 1
  36. if test ! -f _shar_wnt_.tmp; then
  37.     echo 'x - still skipping xwebster.c'
  38. else
  39. echo 'x - continuing file xwebster.c'
  40. sed 's/^X//' << 'SHAR_EOF' >> 'xwebster.c' &&
  41. X      Controlpanel_Titlebar_Set_Label("Word not in dictionary. Do you mean:");
  42. X      Wordlist_Reset();
  43. X      webster_state = GET_WORDLIST; current_wordlist_is_xrefs = FALSE;
  44. X    }
  45. X    else if (strncmp(line, "WILD 0\n", 7) == 0) { /* returned by DEFINE */
  46. X      Controlpanel_Titlebar_Set_Label("No Match!");
  47. X      XBell(display, 100);
  48. X      Wordlist_Reset();
  49. X      Controlpanel_Reactivate();
  50. X      /* webster_state = WEBSTER_READY; */
  51. X    } 
  52. X    else if (strncmp(line, "WILD\n", 5) == 0) {    /* returned by DEFINE */
  53. X      Controlpanel_Titlebar_Set_Label("Choose a word:");
  54. X      Wordlist_Reset();
  55. X      webster_state = GET_WORDLIST; current_wordlist_is_xrefs = FALSE;
  56. X    }      
  57. X    else if (strncmp(line, "DEFINITION ", 11) == 0) { /* returned by DEFINE */
  58. X      sscanf(line, "DEFINITION %d\n", &num_xrefs);
  59. X      if (num_xrefs == 0) {
  60. X    /** don't clear the wordlist if last define req came from the wordlist **/
  61. X    if (Controlpanel_Cur_Word_Is_From_TextEdit()) {
  62. X      Wordlist_Reset();
  63. X      Controlpanel_Titlebar_Set_Label("\000");
  64. X    }
  65. X    webster_state = GET_DEFINITION;
  66. X      }
  67. X      else {
  68. X    /** don't clear old xrefs if new set of xrefs gend from a word in old xrefs **/
  69. X    if (Controlpanel_Cur_Word_Is_From_TextEdit() || !current_wordlist_is_xrefs)
  70. X      Wordlist_Reset();
  71. X    Controlpanel_Titlebar_Set_Label("Cross References:");
  72. X    webster_state = GET_XREFS; current_wordlist_is_xrefs = TRUE;
  73. X      }
  74. X    }
  75. X    else if (strncmp(line, "ERROR RECOVERABLE", 17) == 0) {
  76. X      Controlpanel_Titlebar_Set_Label("Error:");
  77. X      Display_Def_Text_Reset();
  78. X      Display_Def_Text_Append(line);
  79. X      Display_Def_Refresh();
  80. X      XBell(display, 100); XBell(display, 100);
  81. X      Wordlist_Reset();
  82. X      Controlpanel_Reactivate();
  83. X      /* webster_state = WEBSTER_READY; */
  84. X    }
  85. X    else if (strncmp(line, "ERROR FATAL", 11) == 0) {
  86. X      XBell(display, 100); XBell(display, 100);
  87. X      XBell(display, 100); XBell(display, 100);
  88. X      Display_Def_Text_Reset();
  89. X      Display_Def_Text_Append(line);
  90. X      Display_Def_Refresh();
  91. X      Webster_Disconnect();
  92. X      Controlpanel_Reactivate();
  93. X    }
  94. X    else {
  95. X      sprintf(temptext, "unknown server message: %s", line);
  96. X      Controlpanel_Titlebar_Set_Label(temptext); 
  97. X      XBell(display, 100); XBell(display, 100);
  98. X      Wordlist_Reset();
  99. X      Controlpanel_Reactivate();
  100. X      /* webster_state = WEBSTER_READY; */
  101. X    }
  102. X    break;
  103. X  case GET_WORDLIST:        /* get words, one per line, till EOF reached */
  104. X    if (line == NULL) {        /* EOF reached */
  105. X      Wordlist_Show();
  106. X      Controlpanel_Reactivate(); /* ready for user input */
  107. X      webster_state = WEBSTER_READY;
  108. X    }
  109. X    else {
  110. X      sscanf(line, "%*d %[^\n]", temptext);
  111. X      Wordlist_Add(temptext);
  112. X      /* webster_state = GET_WORDLIST; */
  113. X    }
  114. X    break;
  115. X  case GET_XREFS:
  116. X    if (line == NULL) {
  117. X      Display_Def_Refresh();    /* show the definition */
  118. X      Controlpanel_Reactivate();
  119. X      webster_state = WEBSTER_READY;
  120. X      break;
  121. X    }
  122. X    sscanf(line, "%*d %[^\n]", temptext);
  123. X    Wordlist_Add(temptext);
  124. X    num_xrefs--;
  125. X    if (num_xrefs == 0) {
  126. X      Wordlist_Show();
  127. X      webster_state = GET_DEFINITION;
  128. X    }
  129. X    /* else
  130. X       webster_state = GET_XREFS; */
  131. X    break;
  132. X  case GET_DEFINITION:
  133. X    if (line == NULL) {        /* EOF reached */
  134. /*
  135. X * Hmm why is this here? Everytime word is selected from the buttons it sets 
  136. X * the input window word to ""  not friendly in my opinion RMC 
  137. X */
  138. /*      Controlpanel_Set_Input_Word("");  */
  139. X      Display_Def_Refresh();    /* show the definition */
  140. X      Controlpanel_Reactivate(); /* ready for user input */
  141. X      webster_state = WEBSTER_READY;
  142. X    }
  143. X    else {
  144. X      Display_Def_Text_Append(line);
  145. X      /* webster_state = GET_DEFINITION; */
  146. X    }
  147. X    break;
  148. X  default:
  149. X    XBell(display, 100);
  150. X    Controlpanel_Titlebar_Set_Label("error -- xwebster programmer goofed");
  151. X    Controlpanel_Reactivate();
  152. X    webster_state = WEBSTER_READY;
  153. X    break;
  154. X  }
  155. }
  156. X
  157. /******************************************************************************
  158. X * returns 0 if it couldn't send, else 1.
  159. X ******************************************************************************/
  160. int 
  161. X  Webster_Send(buf)
  162. char *buf;
  163. {
  164. X  extern int sys_nerr;
  165. X  extern char *sys_errlist[];
  166. X  extern int errno;
  167. X
  168. X  if (webster_Socket == NULL)
  169. X    Webster_Reconnect();
  170. X  if (webster_Socket == NULL)
  171. X    return(0);
  172. X  if (send(webster_Socket, buf, strlen(buf), 0) < 0) {
  173. X    Display_Def_Text_Reset();
  174. X    if (errno < sys_nerr)
  175. X      (void) sprintf(temptext, "Error sending to webster server: %s\n", sys_errlist[errno]);
  176. X    else
  177. X      (void) strcpy(temptext, "Error sending to webster server: unknown error\n");
  178. X    Display_Def_Text_Append(temptext);
  179. X    Display_Def_Refresh();
  180. X    return(0);
  181. X  }
  182. X  return(1);
  183. }
  184. X
  185. /******************************************************************************
  186. X * originally from webster.c, but by now, highly modified.
  187. X ******************************************************************************/
  188. static int 
  189. X  Webster_Connect_To_Server(host_addr, host_port, host_service_name)
  190. char* host_addr;
  191. int host_port;
  192. char* host_service_name;
  193. {
  194. X  struct sockaddr_in sin;
  195. X  register int s;
  196. X  register struct servent *sp;
  197. X
  198. X  /* Look up the host in the host file. */
  199. X  memset( (char*) &sin, '\000', sizeof(struct sockaddr_in));
  200. X  sin.sin_family = AF_INET;
  201. X  sin.sin_addr.s_addr = inet_addr(host_addr);
  202. X  if (sin.sin_addr.s_addr == -1) {
  203. X    fprintf(stderr, "xwebster: %s: unknown host.\n", host_addr);
  204. X    return(-1);
  205. X  }
  206. X
  207. X  if ((sp = getservbyname(host_service_name, "tcp")) == NULL)
  208. X    sin.sin_port = htons(host_port);
  209. X  else
  210. X    sin.sin_port = sp->s_port;
  211. X
  212. X  /* Get a TCP socket. */
  213. X  if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
  214. X    return(-1);
  215. X  }
  216. X
  217. X  /* Try to connect. */
  218. X  if (connect(s, &sin, sizeof(struct sockaddr_in)) < 0) {
  219. X    return(-1);
  220. X  }
  221. X  return(s);
  222. }
  223. X
  224. /******************************************************************************
  225. X * Try to connect up to a webster server. Xwebster will try each host address
  226. X * in the Xdefault hostAddrList successively until it connects succesfully
  227. X * or until it runs out of hosts to try to connect.
  228. X ******************************************************************************/
  229. static void 
  230. X  Webster_Reconnect()
  231. {
  232. X  extern int   sys_nerr;
  233. X  extern char* sys_errlist[];
  234. X  extern int   errno;
  235. X  extern char* strtok();    /* if you don't have this, get the source from 
  236. X                   Henry Spencer's public domain strings package */
  237. X
  238. X  char* host_addr = strtok(user_prefs.host_addr_list, " \t");
  239. /* If more than one host compiled into the default list strtok core dumps */
  240. /* find out why */
  241. X  Display_Def_Text_Reset();
  242. X  do {
  243. X    sprintf(temptext, "Trying webster server at address %s ...\n", host_addr);
  244. X    Display_Def_Text_Append(temptext);
  245. X    Display_Def_Refresh();
  246. X    XSync(display, FALSE);
  247. X    while (XtPending()) {    /* since we can't get back to XtMainLoop yet-*/
  248. X      XEvent event;        /*-we process the events here... (yech) */
  249. X      XtNextEvent(&event);
  250. X      XtDispatchEvent(&event);
  251. X    }
  252. X    webster_Socket = Webster_Connect_To_Server(host_addr, user_prefs.host_port, 
  253. X                           user_prefs.host_service_name);
  254. X    if (webster_Socket < 0) {
  255. X      Display_Def_Text_Reset();
  256. X      (void) sprintf(temptext, "Problem with server host %s\n", host_addr);
  257. X      Display_Def_Text_Append(temptext);
  258. X      if (errno < sys_nerr)
  259. X    (void) sprintf(temptext, "webster server error: %s\n", sys_errlist[errno]);
  260. X      else
  261. X    (void) strcpy(temptext, "webster server error: unknown error\n");
  262. X      Display_Def_Text_Append(temptext);
  263. X    }
  264. X  } while ((webster_Socket < 0) && ((host_addr = strtok(NULL, " \t")) != NULL));
  265. X    
  266. X  if (webster_Socket < 0) {
  267. X    Controlpanel_Titlebar_Set_Label("Error:");
  268. X    Display_Def_Text_Reset();
  269. X    Display_Def_Text_Append("Couldn't access a webster host. Be sure that the following Xdefaults\n");
  270. X    Display_Def_Text_Append("have been set correctly for accessing your Webster server:\n");
  271. X    Display_Def_Text_Append("*hostAddrList *hostPort *hostServiceName\n");
  272. X    sprintf(temptext, "See %s/Xwebster for details.\n", APPDEFAULTSDIR);
  273. X    Display_Def_Text_Append(temptext);
  274. X    Display_Def_Refresh();
  275. X    webster_Socket = NULL;  /* indicates we still don't have server connection */
  276. X  } 
  277. X  else {
  278. X    Controlpanel_Titlebar_Set_Label(xwebster_version);
  279. X    Display_Def_Text_Reset();
  280. X    webster_xinput = XtAppAddInput(webster_app,
  281. X                   webster_Socket,
  282. X                   (XtPointer)XtInputReadMask,
  283. X                   (XtInputCallbackProc)Webster_Get_Server_Output,
  284. X                   NULL);
  285. X    webster_xexcept = XtAppAddInput(webster_app,
  286. X                    webster_Socket,
  287. X                    (XtPointer)XtInputExceptMask,
  288. X                    (XtInputCallbackProc)Webster_Handle_Server_Exception,
  289. X                    NULL);
  290. X  }
  291. }
  292. X
  293. /******************************************************************************
  294. X * This procedure is called indirectly, via XtAddInput() callback from 
  295. X * XtMainLoop() whenever an exception occurs on webster_Socket. This callback
  296. X * is setup in procedure Webster_Reconnect().
  297. X ******************************************************************************/
  298. static XtInputCallbackProc 
  299. X  Webster_Handle_Server_Exception(client_data, source_fildes, id)
  300. X     caddr_t   client_data;
  301. X     int       source_fildes;
  302. X     XtInputId id;
  303. {
  304. X  Webster_Disconnect();
  305. }
  306. X
  307. /******************************************************************************
  308. X *
  309. X ******************************************************************************/
  310. static void 
  311. X  Webster_Disconnect()
  312. {
  313. X  extern int   sys_nerr;
  314. X  extern char* sys_errlist[];
  315. X  extern int   errno;
  316. X
  317. X  Controlpanel_Titlebar_Set_Label("Webster Server Error:");
  318. X  Display_Def_Text_Reset();
  319. X  if (errno < sys_nerr)
  320. X    (void) sprintf(temptext, "Webster server error: %s\n", sys_errlist[errno]);
  321. X  else
  322. X    (void) strcpy(temptext, "Webster server error: unknown error\n");
  323. X  Display_Def_Text_Append(temptext);
  324. X  Display_Def_Text_Append("Webster server connection closed.\n");
  325. X  Display_Def_Refresh();
  326. X  XtRemoveInput(webster_xinput);
  327. X  XtRemoveInput(webster_xexcept);
  328. X  close(webster_Socket);
  329. X  webster_Socket = NULL;
  330. X  Controlpanel_Reactivate();
  331. X  /* No point reconnecting - we'll wait till we try to do something. */
  332. X    /* Well it seems that the next websterd will close if given a null word */
  333. X    /* while this does seem to be a problem with the websterd we do want to give */
  334. X    /* the user another chance to type a word soooo go aheand and reactivevate */
  335. X    /* the controlpanel  RMC*/
  336. }
  337. SHAR_EOF
  338. echo 'File xwebster.c is complete' &&
  339. chmod 0644 xwebster.c ||
  340. echo 'restore of xwebster.c failed'
  341. Wc_c="`wc -c < 'xwebster.c'`"
  342. test 22128 -eq "$Wc_c" ||
  343.     echo 'xwebster.c: original size 22128, current size' "$Wc_c"
  344. rm -f _shar_wnt_.tmp
  345. fi
  346. # ============= xwebster.h ==============
  347. if test -f 'xwebster.h' -a X"$1" != X"-c"; then
  348.     echo 'x - skipping xwebster.h (File already exists)'
  349.     rm -f _shar_wnt_.tmp
  350. else
  351. > _shar_wnt_.tmp
  352. echo 'x - extracting xwebster.h (Text)'
  353. sed 's/^X//' << 'SHAR_EOF' > 'xwebster.h' &&
  354. /* -*-C-*-
  355. ********************************************************************************
  356. *
  357. * File:         xwebster.h
  358. * RCS:          $Header: /home/everest1/cattelan/work/xwebster.motif/RCS/xwebster.h,v 1.1 1992/03/21 22:39:43 cattelan Exp $
  359. * Description:  Miscellaneous macros
  360. * Author:       Niels Mayer, HPLabs
  361. * Created:      Wed Aug 31 14:09:08 1988
  362. * Modified:     Tue Sep 13 15:33:32 1988 (Niels Mayer) mayer@hplnpm
  363. * Language:     C
  364. * Package:      N/A
  365. * Status:       G-Job
  366. *
  367. * xwebster - dictionary browser
  368. *
  369. * Copyright 1988 Hewlett-Packard Company
  370. *
  371. * Permission to use, copy, modify, and distribute this software and its
  372. * documentation for any purpose and without fee is hereby granted, provided
  373. * that the above copyright notice appear in all copies and that both that
  374. * copyright notice and this permission notice appear in supporting
  375. * documentation, and that the name of HP not be used in advertising or
  376. * publicity pertaining to distribution of the software without specific,
  377. * written prior permission.  HP makes no representations about the
  378. * suitability of this software for any purpose.  It is provided "as is"
  379. * without express or implied warranty.
  380. *
  381. * Please send any improvements, bug fixes, useful modifications, and comments
  382. * to mayer@hplabs.hp.com.
  383. ********************************************************************************
  384. */
  385. static char rcs_identity_xwebster[] = "@(#)$Header: /home/everest1/cattelan/work/xwebster.motif/RCS/xwebster.h,v 1.1 1992/03/21 22:39:43 cattelan Exp $";
  386. X
  387. #include <X11/Xos.h>
  388. #include <X11/StringDefs.h>
  389. #include <X11/Intrinsic.h>
  390. #include <Xm/Xm.h>
  391. X
  392. X
  393. /*----------------------------------------------------------------------------
  394. X * Kludges to sweeten Xt's ugly argument processing for widget creation.
  395. X *---------------------------------------------------------------------------*/
  396. static Arg _args[100];
  397. static int _num_args;
  398. X
  399. #define ARGLIST_RESET() \
  400. X  _num_args = 0
  401. X
  402. #define ARGLIST_ADD(name, value) \
  403. X  XtSetArg(_args[_num_args], (name), (value)); _num_args++
  404. X
  405. #define ARGLIST_SET_LAST_ELT(name, value) \
  406. X  XtSetArg(_args[(_num_args - 1)], (name), (value))
  407. X
  408. #define ARGLIST() \
  409. X  _args, _num_args
  410. X
  411. static char temptext[1024]; /* local text storage, mostly used for sprintf */
  412. X
  413. #define FONTHEIGHT(f) ((f)->max_bounds.ascent + (f)->max_bounds.descent)
  414. #define FONTWIDTH(f)  (f)->max_bounds.width
  415. X
  416. #define COPY_STRING(str) \
  417. X  (char *) strcpy(XtMalloc((strlen(str)+1) * sizeof(char)), (str))
  418. SHAR_EOF
  419. chmod 0644 xwebster.h ||
  420. echo 'restore of xwebster.h failed'
  421. Wc_c="`wc -c < 'xwebster.h'`"
  422. test 2464 -eq "$Wc_c" ||
  423.     echo 'xwebster.h: original size 2464, current size' "$Wc_c"
  424. rm -f _shar_wnt_.tmp
  425. fi
  426. # ============= xwebster.man ==============
  427. if test -f 'xwebster.man' -a X"$1" != X"-c"; then
  428.     echo 'x - skipping xwebster.man (File already exists)'
  429.     rm -f _shar_wnt_.tmp
  430. else
  431. > _shar_wnt_.tmp
  432. echo 'x - extracting xwebster.man (Text)'
  433. sed 's/^X//' << 'SHAR_EOF' > 'xwebster.man' &&
  434. .TH XWEBSTER 1 "March 6, 1989" "X Version 11"
  435. .SH NAME
  436. xwebster \- X interface to look up words in the dictionary
  437. .SH SYNOPSIS
  438. .B xwebster
  439. [\fBX Toolkit option\fP]
  440. .SH DESCRIPTION
  441. .PP
  442. \fIXwebster\fP is used to look up words in the online copy of Webster's
  443. dictionary.  It puts up an application window that contains subwindows to
  444. interact with the user and display the results. The top half has a browser
  445. window in which alternative words will be shown, below that is a row of
  446. windows consisting of an interaction window where the user may enter words
  447. to be looked up, and buttons which the user may click on to select a
  448. program function. The lower window is used to display the definitions that
  449. are found.
  450. .PP
  451. Just type the word you want defined in the interaction window and hit
  452. Return to see the definition (or click on the \fB[Define]\fP button).  If
  453. the word is found, \fIxwebster\fP will then provide the complete dictionary
  454. entry for the word including definitions, pronunciation, and derivation.
  455. If the specified word was not found, \fIxwebster\fP will try to find close
  456. matches, as if you spelled the word wrong.  The possibilities are displayed
  457. in buttons.  To select one of them, you can just click on it.
  458. .PP
  459. Additionally, \fIxwebster\fP can match words using wildcards.
  460. The character
  461. `%' in a word means match exactly one character,
  462. so ``w%n'' matches
  463. ``win'',
  464. ``won'',
  465. ``wan'',
  466. etc.
  467. The character `*' matches zero or more characters,
  468. so ``a*d''matches
  469. ``ad'',
  470. ``and'',
  471. ``abound'',
  472. ``absentminded'',
  473. and so on.
  474. Any number of wildcards can be used,
  475. and in any arrangement.
  476. .PP
  477. Typing \fB'?'\fP or mousing \fB[Endings]\fP following part of a word will
  478. cause \fIxwebster\fP to list all words beginning with the partial word in
  479. the word browser panel. The program will beep and give an error message if
  480. nothing matches.
  481. .PP
  482. Typing \fB<tab>\fP or mousing \fB[Complete]\fP causes the program to
  483. attempt to complete the word.  If the word can be completed, the new word
  484. is placed in the TextEdit widget; otherwise, the program beeps and displays
  485. a message indicating that the word is ambiguous.
  486. .PP
  487. \fB(NeXT Mode only):\fP 
  488. .LP
  489. Mousing \fB[Thesaurus]\fP sets the wester server to "thesaurus mode",
  490. before doing a lookup. Subsequent lookups via <Return> in the word
  491. input window will be from the thesaurus data base. Mousing
  492. \fB[Define]\fP will set it back to "dictionary mode".
  493. .SH CUSTOMIZING
  494. All the resources for \fIxwebster\fP are specified in the application
  495. default file Xwebster.ad, which MUST be installed in
  496. APPDEFAULTSDIR/Xwebster.  Fully qualified resource names are used in this
  497. app-defaults file so as to document the widget hierarchy in the
  498. application. Documentation on customizing \fIxwebster\fP also appears in
  499. this defaults file.  (APPDEFAULTSDIR is set in the imake defaults, it is
  500. usually /usr/lib/X11/app-defaults/)
  501. .PP
  502. Parameters for connecting to a webster server are contained in the
  503. resources \fB``hostAddrList''\fP, \fB``hostPort''\fP, and
  504. \fB``hostServiceName''\fP. See the aforementioned Xwebster.ad file for
  505. details and documentation.
  506. .SH HISTORY
  507. This program was inspired by the webster(1) tty-based client to a webster
  508. server written by Dave Curry <davy@riacs.edu>, although most of the code
  509. was written from scratch because I didn't find the webster(1) source code
  510. until after the application was prototyped. The original webster
  511. client/server was written in MIDAS and ran under Tops-20, it was probably
  512. done by someone at SRI-NIC.
  513. .PP
  514. \fIXwebster\fP was originally written and released by Niels Mayer
  515. <mayer@hplabs.hp.com> on the X11r3 contrib tape. Mark Moraes
  516. <moraes@csri.toronto.edu> took that version, updated it to work with the r3
  517. HP Xwidgets and r3 Toolkit Intrinsics, and fixed a bunch of stupid bugs
  518. that were making \fIxwebster\fP dump core an a SUN. Russell Cattelan
  519. <cattelan@everest.ee.umn.edu> updated it again to use the Motif Widget
  520. set, and the R5 Toolkit.
  521. .PP
  522. If you have contributions to make to \fIxwebster\fP, please send them to
  523. cattelan@everest.ee.umn.edu or mayer@hplabs.hp.com. 
  524. .SH SEE ALSO
  525. look(1), spell(1), webster(1), websterd(8)
  526. .SH FILES
  527. /usr/lib/X11/app-defaults/Xwebster
  528. $HOME/.Xdefaults
  529. .SH AUTHORS
  530. Niels Mayer (mayer@hplabs.hp.com or hplabs!mayer)
  531. .PP
  532. Mark Moraes (moraes@csri.toronto.edu)
  533. .PP
  534. Russell Cattelan (cattelan@everest.ee.umn.edu)
  535. .SH BUGS
  536. The first word takes a longer time to define, because there is a
  537. non-trivial setup time involved on initially starting the server.
  538. Likewise, if the server times out (you'll note error messages to this
  539. effect), the next word will take a longer time to define since
  540. \fIxwebster\fP must reconnect to a server. 
  541. .PP
  542. It is possible to grab one of the "handles" on paned window and eliminate
  543. from view any of the sections, most notably the middle input
  544. section. I have tried setting the min height but without much luck,
  545. I'm sure it is something simple I am overlooking.
  546. .PP
  547. The translation between all the neat special characters in the dictionary
  548. such as upside-down e's, cedillas, accent marks, etc. and a simple ASCII
  549. terminal is marginal at best.  Most of the characters are fairly well
  550. faked, but a few of them are impossible.  In particular, the schwa
  551. (upside-down e) is represented by an asterisk.
  552. .PP
  553. There are fixed internal limits on the number of words that can be
  554. displayed in the browser (16384), and the number of characters of text in
  555. the lower window (16384). The defaults should be adequate given the number
  556. of words and the description sizes of the standard webster dictionary
  557. database. If you end up trying to get the dictionary to return all the
  558. words available by abusing the wildcarding feature, then expect \fIxwebster\fP
  559. to crash.
  560. .PP
  561. SHAR_EOF
  562. chmod 0644 xwebster.man ||
  563. echo 'restore of xwebster.man failed'
  564. Wc_c="`wc -c < 'xwebster.man'`"
  565. test 5680 -eq "$Wc_c" ||
  566.     echo 'xwebster.man: original size 5680, current size' "$Wc_c"
  567. rm -f _shar_wnt_.tmp
  568. fi
  569. rm -f _shar_seq_.tmp
  570. echo You have unpacked the last part
  571. exit 0
  572. -- 
  573. --
  574. Molecular Simulations, Inc.            mail: dcmartin@msi.com
  575. 796 N. Pastoria Avenue                uucp: uunet!dcmartin
  576. Sunnyvale, California 94086            at&t: 408/522-9236
  577.