home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 January
/
usenetsourcesnewsgroupsinfomagicjanuary1994.iso
/
sources
/
x
/
volume8
/
xmenu
/
patch1
< prev
next >
Wrap
Text File
|
1990-07-08
|
11KB
|
381 lines
Path: uunet!tut.cis.ohio-state.edu!cs.utexas.edu!sun-barr!newstop!sun!ukc.ac.uk
From: rlh2@ukc.ac.uk (Richard Hesketh)
Newsgroups: comp.sources.x
Subject: v08i049: xmenu, Patch1, Part01/01
Message-ID: <138565@sun.Eng.Sun.COM>
Date: 9 Jul 90 07:23:33 GMT
Sender: news@sun.Eng.Sun.COM
Lines: 370
Approved: argv@sun.com
Submitted-by: Richard Hesketh <rlh2@ukc.ac.uk>
Posting-number: Volume 8, Issue 49
Archive-name: xmenu/patch1
Patch-To: xmenu: Volume 8, Issue 8
This patches some problems found by JQ Johnson <jqj@rt-jqj.stanford.edu>,
who also offered the extensions.
Note that now, by default, the name of the menu item is printed. To
have nothing printed simply use "item=". Plus the "line" argument has
been changed to "-line". Also xmenu now sets the exit status ala xmessage;
the menu items being numbered from 101.
Richard Hesketh : @nsfnet-relay.ac.uk:rlh2@ukc.ac.uk
: rlh2@ukc.ac.uk ..!mcvax!ukc!rlh2
---
Computing Lab., University of Kent at Canterbury,
Canterbury, Kent, CT2 7NF, United Kingdom. Tel: +44 227 764000 ext 7620/3682
----
*** DIST/README Fri Jun 29 16:52:41 1990
--- README Fri Jun 29 17:03:31 1990
***************
*** 4,10 ****
the command line arguments as menu entries. If an argument contains
a non-escaped '=' (equals sign) the string to the left is the name
displayed in the menu and the string to the right is the text output
! when this menu button is pressed.
A special argument "line" can be used to draw a dividing line between
successive menu entries.
--- 4,11 ----
the command line arguments as menu entries. If an argument contains
a non-escaped '=' (equals sign) the string to the left is the name
displayed in the menu and the string to the right is the text output
! when this menu button is pressed. If no equals sign is given the name of
! the menu button is output.
A special argument "line" can be used to draw a dividing line between
successive menu entries.
*** DIST/patchlevel.h Fri Jun 29 16:52:42 1990
--- patchlevel.h Fri Jun 29 17:03:31 1990
***************
*** 1 ****
! #define patchlevel 0
--- 1 ----
! #define patchlevel 1
*** DIST/xmenu.c Fri Jun 29 16:52:43 1990
--- xmenu.c Fri Jun 29 17:04:06 1990
***************
*** 1,5 ****
#ifndef lint
! static char rcsid[] = "$Header: xmenu.c,v 1.1 90/06/19 16:59:36 rlh2 Rel $";
#endif !lint
/*
--- 1,5 ----
#ifndef lint
! static char rcsid[] = "$Header: xmenu.c 1.3 90/06/29 17:00:22 rlh2 Rel $";
#endif !lint
/*
***************
*** 38,44 ****
* displayed in the menu and the string to the right is the text output
* when this menu button is pressed.
*
! * A special argument "line" can be used to draw a dividing line between
* successive menu entries.
*
* A menu title can be given as an argument after a "-heading" flag.
--- 38,44 ----
* displayed in the menu and the string to the right is the text output
* when this menu button is pressed.
*
! * A special argument "-line" can be used to draw a dividing line between
* successive menu entries.
*
* A menu title can be given as an argument after a "-heading" flag.
***************
*** 52,62 ****
*
* xmenu -heading "Choose Files by Suffix" Compressed="*.Z" \
* "C sources"="*.c" "Headers"="*.h" \
! * line line " Cancel"
*
! * xmenu Hello="Hello World" line " " " " line Goodbye="Goodbye World"
*/
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/Xaw/SimpleMenu.h>
--- 52,63 ----
*
* xmenu -heading "Choose Files by Suffix" Compressed="*.Z" \
* "C sources"="*.c" "Headers"="*.h" \
! * -line -line " Cancel"
*
! * xmenu Hello="Hello World" -line "" "" -line Goodbye="Goodbye World"
*/
+ #include <stdio.h>
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/Xaw/SimpleMenu.h>
***************
*** 64,71 ****
#include <X11/Xaw/SmeLine.h>
#define LINE (String)1
! #define LINE_TOK "line"
static String MTrans = "<EnterWindow>: highlight()\n\
<LeaveWindow>: unhighlight()\n\
<MotionNotify>: highlight()\n\
--- 65,78 ----
#include <X11/Xaw/SmeLine.h>
#define LINE (String)1
! #define LINE_TOK "-line"
! #define STATUS_START 101
+ struct ret {
+ String out_val;
+ Cardinal exit_status;
+ };
+
static String MTrans = "<EnterWindow>: highlight()\n\
<LeaveWindow>: unhighlight()\n\
<MotionNotify>: highlight()\n\
***************
*** 82,106 ****
Widget w;
XtPointer client_data, call_data;
{
! if (client_data != NULL)
! printf("%s\n", client_data);
! exit(0);
}
String
! get_prompt(str, out_val)
String str;
! String *out_val;
{
int s, t;
char name[1000];
Boolean found_escape = FALSE;
! *out_val = NULL;
if (strncmp(str, LINE_TOK, strlen(LINE_TOK)) == 0)
return (LINE);
for (t = s = 0; str[s] != '\0'; s++) {
if (str[s] == '\\') {
if (found_escape) {
--- 89,120 ----
Widget w;
XtPointer client_data, call_data;
{
! struct ret *values = (struct ret *)client_data;
!
! if (values->out_val != NULL)
! fprintf(stdout, "%s\n", values->out_val);
! exit(values->exit_status);
}
+
String
! get_prompt(str, values)
String str;
! struct ret **values;
{
+ static Cardinal count = STATUS_START;
int s, t;
char name[1000];
Boolean found_escape = FALSE;
! *values = NULL;
if (strncmp(str, LINE_TOK, strlen(LINE_TOK)) == 0)
return (LINE);
+ *values = XtNew(struct ret);
+ (*values)->out_val = NULL;
+
for (t = s = 0; str[s] != '\0'; s++) {
if (str[s] == '\\') {
if (found_escape) {
***************
*** 113,119 ****
found_escape = FALSE;
name[t++] = '=';
} else {
! *out_val = str + s + 1;
break;
}
} else
--- 127,133 ----
found_escape = FALSE;
name[t++] = '=';
} else {
! (*values)->out_val = str + s + 1;
break;
}
} else
***************
*** 120,125 ****
--- 134,143 ----
name[t++] = str[s];
}
name[t] = '\0';
+ if ((*values)->out_val == NULL)
+ (*values)->out_val = str;
+
+ (*values)->exit_status = count++;
return (XtNewString(name));
}
***************
*** 136,145 ****
int junk2;
unsigned int junk3;
Display *dpy;
! String out_val;
String name, heading;
char *blank;
XrmValue value;
x = y = 400; /* just in case XQueryPointer() fails 8-) */
--- 154,164 ----
int junk2;
unsigned int junk3;
Display *dpy;
! struct ret *output_values;
String name, heading;
char *blank;
XrmValue value;
+ Boolean used_callback = FALSE;
x = y = 400; /* just in case XQueryPointer() fails 8-) */
***************
*** 169,179 ****
if (heading != NULL)
button = XtVaCreateManagedWidget("menuLine",
smeLineObjectClass, shell,
! XtNlineWidth, 3,
NULL);
for (i = 1; i < argc; i++) {
! name = get_prompt(argv[i], &out_val);
if (name == LINE)
button = XtVaCreateManagedWidget("menuLine",
--- 188,198 ----
if (heading != NULL)
button = XtVaCreateManagedWidget("menuLine",
smeLineObjectClass, shell,
! XtNlineWidth, 2,
NULL);
for (i = 1; i < argc; i++) {
! name = get_prompt(argv[i], &output_values);
if (name == LINE)
button = XtVaCreateManagedWidget("menuLine",
***************
*** 185,192 ****
XtNlabel, name,
NULL);
XtAddCallback(button, XtNcallback, button_pressed,
! (XtPointer)out_val);
}
}
XtRealizeWidget(shell);
--- 204,216 ----
XtNlabel, name,
NULL);
XtAddCallback(button, XtNcallback, button_pressed,
! (XtPointer)output_values);
! used_callback = TRUE;
}
+ }
+ if (!used_callback) {
+ fprintf(stderr, "xmenu: no menu items given.\n");
+ exit(1);
}
XtRealizeWidget(shell);
*** DIST/xmenu.man Fri Jun 29 16:52:43 1990
--- xmenu.man Fri Jun 29 17:03:33 1990
***************
*** 2,8 ****
.SH NAME
xmenu \- provide simple popup menus to shell scripts
.SH SYNOPSIS
! \fBxmenu\fP [-heading "menu title"] [menu_entry[=output_value] | line]...
.SH DESCRIPTION
\fIxmenu\fP provides a quick and easy way of producing a single popup
menu for use by shell scripts. The \fI-heading\fP is used to set the menu's
--- 2,8 ----
.SH NAME
xmenu \- provide simple popup menus to shell scripts
.SH SYNOPSIS
! \fBxmenu\fP [-heading "menu title"] [menu_entry[=output_value] | -line]...
.SH DESCRIPTION
\fIxmenu\fP provides a quick and easy way of producing a single popup
menu for use by shell scripts. The \fI-heading\fP is used to set the menu's
***************
*** 9,27 ****
title, all other arguments are used as items in the menu. If an argument
contains an equals sign then the string to the left of the equals is used as
the displayed menu item and the the string to the right is used as the text
! output when the item is pressed. The argument "line" is recognised as
! denoting a line separating menu items.
By default the menu is popped up to the right and below of the current pointer
position but this can be overridden using the standard toolkit "-geometry".
.SH EXAMPLES
.DS
xmenu -heading "Choose Files by Suffix" Compressed="*.Z" \\
"C sources"="*.c" "Headers"="*.h" \\
! line line " Cancel"
! xmenu Hello="Hello World" line " " " " line Goodbye="Goodbye World"
.DE
.SH AUTHOR
Richard Hesketh, University of Kent at Canterbury, June 1990
.br
--- 9,35 ----
title, all other arguments are used as items in the menu. If an argument
contains an equals sign then the string to the left of the equals is used as
the displayed menu item and the the string to the right is used as the text
! output when the item is pressed. If no equals sign is present in the
! argument then the argument itself is output. The argument "-line" is
! recognised as denoting a line separating menu items.
By default the menu is popped up to the right and below of the current pointer
position but this can be overridden using the standard toolkit "-geometry".
+
+ Following the example of \fIxmessage\fP the exit status is set to a number
+ greater than or equal to 101, indicating which menu item was pressed.
.SH EXAMPLES
.DS
xmenu -heading "Choose Files by Suffix" Compressed="*.Z" \\
"C sources"="*.c" "Headers"="*.h" \\
! -line -line " Cancel"
! xmenu Hello="Hello World" -line " " " " -line Goodbye="Goodbye World"
.DE
+ .SH EXIT STATUS
+ The exit status is set to a number greater than or equal to 101. This number
+ corresponds to the position of the pressed button in the menu, 101 for the
+ first button, 102 for the second and so on.
.SH AUTHOR
Richard Hesketh, University of Kent at Canterbury, June 1990
.br
dan
----------------------------------------------------
O'Reilly && Associates argv@sun.com / argv@ora.com
Opinions expressed reflect those of the author only.