This commit is contained in:
Dave Love 1999-10-03 19:36:13 +00:00
parent 0c898dd963
commit e745ede747
39 changed files with 5368 additions and 0 deletions

546
oldXMenu/Activate.c Normal file
View file

@ -0,0 +1,546 @@
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/Activate.c,v 1.1 1992/04/11 22:10:17 jimb Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
#include "copyright.h"
/*
* XMenu: MIT Project Athena, X Window system menu package
*
* XMenuActivate - Maps a given menu to the display and activates
* the menu for user selection. The user is allowed to
* specify which pane and selection will be current,
* the X and Y location of the menu (relative to the
* parent window) and the mouse button event mask that
* will be used to identify a selection request.
*
* A menu selection is shown to be current by placing
* a highlight box around the selection as the mouse
* cursor enters its active region. Inactive selections
* will not be highlighted. As the mouse cursor moved
* from one menu pane to another menu pane the pane being
* entered is raised and made current and the pane being
* left is lowered.
*
* Anytime XMenuActivate returns, the p_num and
* s_num are left at their last known values (i.e.,
* the last known current pane and selection indices).
* The following are the defined return states:
*
* 1) If at any time an error occurs the data
* pointer is left untouched and XM_FAILURE
* is returned.
*
* 2) When a selection request is received (i.e.,
* when the specified mouse event occurs) the
* data pointer will be set to the data
* associated with the particular selection
* current at the time of the selection request
* and XM_SUCCESS is returned.
*
* 3) If no selection was current at the time a
* selection request is made the data pointer
* will be left untouched and XM_NO_SELECT will
* be returned.
*
* 4) If the selection that was current at the time
* a selection request is made is not an active
* selection the data pointer will be left
* untouched and XM_IA_SELECT will be returned.
*
* Since X processes events in an asynchronous manner
* it is likely that XMenuActivate will encounter
* a "foreign event" while it is executing. Foreign
* events are handled in one of three ways:
*
* 1) The event is discarded. This is the default
* mode and requires no action on the part of the
* application.
*
* 2) The application has identified an asynchronous
* event handler that will be called and the
* foreign event handed off to it. Note:
* AEQ mode disables this mode temporarily.
*
* 3) The application has enabled asynchronous event
* queuing mode. In this mode all foreign events
* will be queued up untill XMenuActivate
* terminates; at which time they will be
* returned to the X event queue. As long as
* AEQ mode is enabled any asynchronous event
* handler as temporarily disabled.
*
* Any events encountered while taking down the menu
* (i.e., exposure events from occluded windows) will
* automatically be returned to the X event queue after
* XMenuActivate has cleaned the queue of any of its own
* events that are no longer needed.
*
* Author: Tony Della Fera, DEC
* March 12, 1986
*
*/
#include <config.h>
#include "XMenuInt.h"
int
XMenuActivate(display, menu, p_num, s_num, x_pos, y_pos, event_mask, data)
register Display *display; /* Display to put menu on. */
register XMenu *menu; /* Menu to activate. */
int *p_num; /* Pane number selected. */
int *s_num; /* Selection number selected. */
int x_pos; /* X coordinate of menu position. */
int y_pos; /* Y coordinate of menu position. */
unsigned int event_mask; /* Mouse button event mask. */
char **data; /* Pointer to return data value. */
{
int status; /* X routine call status. */
int orig_x; /* Upper left menu origin X coord. */
int orig_y; /* Upper left menu origin Y coord. */
int ret_val; /* Return value. */
register XMPane *p_ptr; /* Current XMPane. */
register XMPane *event_xmp; /* Event XMPane pointer. */
register XMPane *cur_p; /* Current pane. */
register XMSelect *cur_s; /* Current selection. */
XMWindow *event_xmw; /* Event XMWindow pointer. */
XEvent event; /* X input event. */
XEvent peek_event; /* X input peek ahead event. */
Bool selection = False; /* Selection has been made. */
Bool forward = True; /* Moving forward in the pane list. */
Window root, child;
int root_x, root_y, win_x, win_y;
unsigned int mask;
/*
* Define and allocate a foreign event queue to hold events
* that don't belong to XMenu. These events are later restored
* to the X event queue.
*/
typedef struct _xmeventque {
XEvent event;
struct _xmeventque *next;
} XMEventQue;
XMEventQue *feq = NULL; /* Foreign event queue. */
XMEventQue *feq_tmp; /* Foreign event queue temporary. */
/*
* If there are no panes in the menu then return failure
* because the menu is not initialized.
*/
if (menu->p_count == 0) {
_XMErrorCode = XME_NOT_INIT;
return(XM_FAILURE);
}
/*
* Find the desired current pane.
*/
cur_p = _XMGetPanePtr(menu, *p_num);
if (cur_p == NULL) {
return(XM_FAILURE);
}
cur_p->activated = cur_p->active;
/*
* Find the desired current selection.
* If the current selection index is out of range a null current selection
* will be assumed and the cursor will be placed in the current pane
* header.
*/
cur_s = _XMGetSelectionPtr(cur_p, *s_num);
/*
* Compute origin of menu so that cursor is in
* Correct pane and selection.
*/
_XMTransToOrigin(display,
menu,
cur_p, cur_s,
x_pos, y_pos,
&orig_x, &orig_y);
menu->x_pos = orig_x; /* Store X and Y coords of menu. */
menu->y_pos = orig_y;
if (XMenuRecompute(display, menu) == XM_FAILURE) {
return(XM_FAILURE);
}
/*
* Flush the window creation queue.
* This batches all window creates since lazy evaluation
* is more efficient than individual evaluation.
* This routine also does an XFlush().
*/
if (_XMWinQueFlush(display, menu, cur_p, cur_s) == _FAILURE) {
return(XM_FAILURE);
}
/*
* Make sure windows are in correct order (in case we were passed
* an already created menu in incorrect order.)
*/
for(p_ptr = menu->p_list->next; p_ptr != cur_p; p_ptr = p_ptr->next)
XRaiseWindow(display, p_ptr->window);
for(p_ptr = menu->p_list->prev; p_ptr != cur_p->prev; p_ptr = p_ptr->prev)
XRaiseWindow(display, p_ptr->window);
/*
* Make sure all selection windows are mapped.
*/
for (
p_ptr = menu->p_list->next;
p_ptr != menu->p_list;
p_ptr = p_ptr->next
){
XMapSubwindows(display, p_ptr->window);
}
/*
* Synchronize the X buffers and the event queue.
* From here on, all events in the queue that don't belong to
* XMenu are sent back to the application via an application
* provided event handler or discarded if the application has
* not provided an event handler.
*/
XSync(display, 0);
/*
* Grab the mouse for menu input.
*/
status = XGrabPointer(
display,
menu->parent,
True,
event_mask,
GrabModeAsync,
GrabModeAsync,
None,
menu->mouse_cursor,
CurrentTime
);
if (status == _X_FAILURE) {
_XMErrorCode = XME_GRAB_MOUSE;
return(XM_FAILURE);
}
/*
* Map the menu panes.
*/
XMapWindow(display, cur_p->window);
for (p_ptr = menu->p_list->next;
p_ptr != cur_p;
p_ptr = p_ptr->next)
XMapWindow(display, p_ptr->window);
for (p_ptr = cur_p->next;
p_ptr != menu->p_list;
p_ptr = p_ptr->next)
XMapWindow(display, p_ptr->window);
XRaiseWindow(display, cur_p->window); /* Make sure current */
/* pane is on top. */
cur_s = NULL; /* Clear current selection. */
/*
* Begin event processing loop.
*/
while (1) {
XNextEvent(display, &event); /* Get next event. */
switch (event.type) { /* Dispatch on the event type. */
case Expose:
event_xmp = (XMPane *)XLookUpAssoc(display,
menu->assoc_tab,
event.xexpose.window);
if (event_xmp == NULL) {
/*
* If AEQ mode is enabled then queue the event.
*/
if (menu->aeq) {
feq_tmp = (XMEventQue *)malloc(sizeof(XMEventQue));
if (feq_tmp == NULL) {
_XMErrorCode = XME_CALLOC;
return(XM_FAILURE);
}
feq_tmp->event = event;
feq_tmp->next = feq;
feq = feq_tmp;
}
else if (_XMEventHandler) (*_XMEventHandler)(&event);
break;
}
if (event_xmp->activated) {
XSetWindowBackground(display,
event_xmp->window,
menu->bkgnd_color);
}
else {
XSetWindowBackgroundPixmap(display,
event_xmp->window,
menu->inact_pixmap);
}
_XMRefreshPane(display, menu, event_xmp);
break;
case EnterNotify:
/*
* First wait a small period of time, and see
* if another EnterNotify event follows hard on the
* heels of this one. i.e., the user is simply
* "passing through". If so, ignore this one.
*/
event_xmw = (XMWindow *)XLookUpAssoc(display,
menu->assoc_tab,
event.xcrossing.window);
if (event_xmw == NULL) break;
if (event_xmw->type == SELECTION) {
/*
* We have entered a selection.
*/
/* if (XPending(display) == 0) usleep(150000); */
if (XPending(display) != 0) {
XPeekEvent(display, &peek_event);
if(peek_event.type == LeaveNotify) {
break;
}
}
cur_s = (XMSelect *)event_xmw;
/*
* If the pane we are in is active and the
* selection entered is active then activate
* the selection.
*/
if (cur_p->active && cur_s->active > 0) {
cur_s->activated = 1;
_XMRefreshSelection(display, menu, cur_s);
}
}
else {
/*
* We have entered a pane.
*/
/* if (XPending(display) == 0) usleep(150000); */
if (XPending(display) != 0) {
XPeekEvent(display, &peek_event);
if (peek_event.type == EnterNotify) break;
}
XQueryPointer(display,
menu->parent,
&root, &child,
&root_x, &root_y,
&win_x, &win_y,
&mask);
event_xmp = (XMPane *)XLookUpAssoc(display,
menu->assoc_tab,
child);
if (event_xmp == NULL) break;
if (event_xmp == cur_p) break;
if (event_xmp->serial > cur_p->serial) forward = True;
else forward = False;
p_ptr = cur_p;
while (p_ptr != event_xmp) {
if (forward) p_ptr = p_ptr->next;
else p_ptr = p_ptr->prev;
XRaiseWindow(display, p_ptr->window);
}
if (cur_p->activated) {
cur_p->activated = False;
XSetWindowBackgroundPixmap(display,
cur_p->window,
menu->inact_pixmap);
_XMRefreshPane(display, menu, cur_p);
}
if (event_xmp->active) event_xmp->activated = True;
#if 1
/*
* i suspect the we don't get an EXPOSE event when backing
* store is enabled; the menu windows content is probably
* not drawn in when it should be in that case.
* in that case, this is probably an ugly fix!
* i hope someone more familiar with this code would
* take it from here. -- caveh@eng.sun.com.
*/
XSetWindowBackground(display,
event_xmp->window,
menu->bkgnd_color);
_XMRefreshPane(display, menu, event_xmp);
#endif
cur_p = event_xmp;
}
break;
case LeaveNotify:
event_xmw = (XMWindow *)XLookUpAssoc(
display,
menu->assoc_tab,
event.xcrossing.window
);
if (event_xmw == NULL) break;
if(cur_s == NULL) break;
/*
* If the current selection was activated then
* deactivate it.
*/
if (cur_s->activated) {
cur_s->activated = False;
_XMRefreshSelection(display, menu, cur_s);
}
cur_s = NULL;
break;
case ButtonPress:
case ButtonRelease:
*p_num = cur_p->serial;
/*
* Check to see if there is a current selection.
*/
if (cur_s != NULL) {
/*
* Set the selection number to the current selection.
*/
*s_num = cur_s->serial;
/*
* If the current selection was activated then
* we have a valid selection otherwise we have
* an inactive selection.
*/
if (cur_s->activated) {
*data = cur_s->data;
ret_val = XM_SUCCESS;
}
else {
ret_val = XM_IA_SELECT;
}
}
else {
/*
* No selection was current.
*/
ret_val = XM_NO_SELECT;
}
selection = True;
break;
default:
/*
* If AEQ mode is enabled then queue the event.
*/
if (menu->aeq) {
feq_tmp = (XMEventQue *)malloc(sizeof(XMEventQue));
if (feq_tmp == NULL) {
_XMErrorCode = XME_CALLOC;
return(XM_FAILURE);
}
feq_tmp->event = event;
feq_tmp->next = feq;
feq = feq_tmp;
}
else if (_XMEventHandler) (*_XMEventHandler)(&event);
}
/*
* If a selection has been made, break out of the event loop.
*/
if (selection == True) break;
}
/*
* Unmap the menu.
*/
for ( p_ptr = menu->p_list->next;
p_ptr != menu->p_list;
p_ptr = p_ptr->next)
{
XUnmapWindow(display, p_ptr->window);
}
/*
* Ungrab the mouse.
*/
XUngrabPointer(display, CurrentTime);
/*
* Restore bits under where the menu was if we managed
* to save them and free the pixmap.
*/
/*
* If there is a current selection deactivate it.
*/
if (cur_s != NULL) cur_s->activated = 0;
/*
* Deactivate the current pane.
*/
cur_p->activated = 0;
XSetWindowBackgroundPixmap(display, cur_p->window, menu->inact_pixmap);
/*
* Synchronize the X buffers and the X event queue.
*/
XSync(display, 0);
/*
* Dispatch any events remaining on the queue.
*/
while (QLength(display)) {
/*
* Fetch the next event.
*/
XNextEvent(display, &event);
/*
* Discard any events left on the queue that belong to XMenu.
* All others are held and then returned to the event queue.
*/
switch (event.type) {
case Expose:
case EnterNotify:
case LeaveNotify:
case ButtonPress:
case ButtonRelease:
/*
* Does this event belong to one of XMenu's windows?
* If so, discard it and process the next event.
* If not fall through and treat it as a foreign event.
*/
event_xmp = (XMPane *)XLookUpAssoc(
display,
menu->assoc_tab,
event.xbutton.window
);
if (event_xmp != NULL) continue;
default:
/*
* This is a foreign event.
* Queue it for later return to the X event queue.
*/
feq_tmp = (XMEventQue *)malloc(sizeof(XMEventQue));
if (feq_tmp == NULL) {
_XMErrorCode = XME_CALLOC;
return(XM_FAILURE);
}
feq_tmp->event = event;
feq_tmp->next = feq;
feq = feq_tmp;
}
}
/*
* Return any foreign events that were queued to the X event queue.
*/
while (feq != NULL) {
feq_tmp = feq;
XPutBackEvent(display, &feq_tmp->event);
feq = feq_tmp->next;
free((char *)feq_tmp);
}
/*
* Return successfully.
*/
_XMErrorCode = XME_NO_ERROR;
return(ret_val);
}

104
oldXMenu/AddPane.c Normal file
View file

@ -0,0 +1,104 @@
#include "copyright.h"
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/AddPane.c,v 1.1 1992/04/11 22:10:17 jimb Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
* XMenu: MIT Project Athena, X Window system menu package
*
* XMenuAddPane - Adds a pane to an XMenu object.
*
* Author: Tony Della Fera, DEC
* August, 1985
*
*/
#include <config.h>
#include "XMenuInt.h"
int
XMenuAddPane(display, menu, label, active)
Display *display;
register XMenu *menu; /* Menu object to be modified. */
register char *label; /* Selection label. */
int active; /* Make selection active? */
{
register XMPane *pane; /* Newly created pane. */
register XMSelect *select; /* Initial selection for the new pane. */
int label_length; /* Label length in characters. */
int label_width; /* Label width in pixels. */
/*
* Check for NULL pointers!
*/
if (label == NULL) {
_XMErrorCode = XME_ARG_BOUNDS;
return(XM_FAILURE);
}
/*
* Calloc the XMPane structure and the initial XMSelect.
*/
pane = (XMPane *)calloc(1, sizeof(XMPane));
if (pane == NULL) {
_XMErrorCode = XME_CALLOC;
return(XM_FAILURE);
}
select = (XMSelect *)calloc(1, sizeof(XMSelect));
if (select == NULL) {
_XMErrorCode = XME_CALLOC;
return(XM_FAILURE);
}
/*
* Determine label size.
*/
label_length = strlen(label);
label_width = XTextWidth(menu->p_fnt_info,
label,
label_length);
/*
* Set up the initial selection.
* Values not explicitly set are zeroed by calloc.
*/
select->next = select;
select->prev = select;
select->type = SL_HEADER;
select->serial = -1;
select->parent_p = pane;
/*
* Fill the XMPane structure.
* X and Y position are set to 0 since a recompute will follow.
*/
pane->type = PANE;
pane->active = active;
pane->serial = -1;
pane->label = label;
pane->label_width = label_width;
pane->label_length = label_length;
pane->s_list = select;
/*
* Insert the pane at the end of the pane list.
*/
emacs_insque(pane, menu->p_list->prev);
/*
* Update the pane count.
*/
menu->p_count++;
/*
* Schedule a recompute.
*/
menu->recompute = 1;
/*
* Return the pane number just added.
*/
_XMErrorCode = XME_NO_ERROR;
return((menu->p_count - 1));
}

103
oldXMenu/AddSel.c Normal file
View file

@ -0,0 +1,103 @@
#include "copyright.h"
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/AddSel.c,v 1.1 1992/04/11 22:10:17 jimb Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
* XMenu: MIT Project Athena, X Window system menu package
*
* XMenuAddSelection - Adds a selection to an XMenu object.
*
* Author: Tony Della Fera, DEC
* August, 1985
*
*/
#include <config.h>
#include "XMenuInt.h"
int
XMenuAddSelection(display, menu, p_num, data, label, active)
Display *display;
register XMenu *menu; /* Menu object to be modified. */
register int p_num; /* Pane number to be modified. */
char *data; /* Data value. */
char *label; /* Selection label. */
int active; /* Make selection active? */
{
register XMPane *pane; /* Pane containing the new selection. */
register XMSelect *select; /* Newly created selection. */
int label_length; /* Label lenght in characters. */
int label_width; /* Label width in pixels. */
/*
* Check for NULL pointers!
*/
if (label == NULL) {
_XMErrorCode = XME_ARG_BOUNDS;
return(XM_FAILURE);
}
/*
* Find the right pane.
*/
pane = _XMGetPanePtr(menu, p_num);
if (pane == NULL) return(XM_FAILURE);
/*
* Calloc the XMSelect structure.
*/
select = (XMSelect *)calloc(1, sizeof(XMSelect));
if (select == NULL) {
_XMErrorCode = XME_CALLOC;
return(XM_FAILURE);
}
/*
* Determine label size.
*/
label_length = strlen(label);
label_width = XTextWidth(menu->s_fnt_info, label, label_length);
/*
* Fill the XMSelect structure.
*/
if (!strcmp (label, "--") || !strcmp (label, "---"))
{
select->type = SEPARATOR;
select->active = 0;
}
else
{
select->type = SELECTION;
select->active = active;
}
select->serial = -1;
select->label = label;
select->label_width = label_width;
select->label_length = label_length;
select->data = data;
select->parent_p = pane;
/*
* Insert the selection at the end of the selection list.
*/
emacs_insque(select, pane->s_list->prev);
/*
* Update the selection count.
*/
pane->s_count++;
/*
* Schedule a recompute.
*/
menu->recompute = 1;
/*
* Return the selection number just added.
*/
_XMErrorCode = XME_NO_ERROR;
return((pane->s_count - 1));
}

397
oldXMenu/ChangeLog Normal file
View file

@ -0,0 +1,397 @@
1999-07-12 Richard Stallman <rms@gnu.org>
* Version 20.4 released.
1998-08-19 Richard Stallman <rms@psilocin.ai.mit.edu>
* Version 20.3 released.
1997-09-19 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
* Version 20.2 released.
1997-09-15 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
* Version 20.1 released.
1996-08-11 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
* Version 19.33 released.
1996-07-31 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
* Version 19.32 released.
1996-06-12 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
* Internal.c (_XMRefreshSelection): Check for type SEPARATOR.
* InsSel.c (XMenuInsertSelection): Use SEPARATOR if nec.
* AddSel.c (XMenuAddSelection): Use SEPARATOR if nec.
* XMenu.h: New alternative SEPARATOR.
1996-05-25 Karl Heuer <kwzh@gnu.ai.mit.edu>
* Version 19.31 released.
1995-11-24 Richard Stallman <rms@mole.gnu.ai.mit.edu>
* Version 19.30 released.
1995-11-13 Richard Stallman <rms@mole.gnu.ai.mit.edu>
* Makefile.in (ALL_CFLAGS): Add some -I options.
* Activate.c, AddPane.c, AddSel.c, Create.c, InsPane.c, InsSel.c:
* Internal.c, XCrAssoc.c, XMakeAssoc.c: Include config.h.
1995-06-19 Richard Stallman <rms@mole.gnu.ai.mit.edu>
* Version 19.29 released.
1995-02-07 Richard Stallman <rms@pogo.gnu.ai.mit.edu>
* Makefile.in (maintainer-clean): Renamed from realclean.
1994-10-25 Richard Stallman <rms@mole.gnu.ai.mit.edu>
* Makefile.in (ALL_CFLAGS): Reorder the switches more rationally.
1994-10-24 Jim Wilson (wilson@chestnut.cygnus.com)
* Makefile.in (ALL_CFLAGS): Add C_SWITCH_X_MACHINE.
1994-09-11 Richard Stallman <rms@mole.gnu.ai.mit.edu>
* Version 19.27 released.
1994-09-07 Richard Stallman <rms@mole.gnu.ai.mit.edu>
* Version 19.26 released.
1994-07-23 Richard Stallman <rms@mole.gnu.ai.mit.edu>
* Error.c (XMenuError): Make `message' static.
1994-06-28 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Create.c (XAllocDisplayColor): New function.
Use it throughout in place of XAllocNamedColor.
1994-05-30 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Version 19.25 released.
1994-05-23 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Version 19.24 released.
1994-05-17 Karl Heuer (kwzh@hal.gnu.ai.mit.edu)
* Create.c (XMenuCreate): Declare `data' as char*.
1994-05-16 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Version 19.23 released.
1994-04-12 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Create.c (XMenuCreate): Declare `data' as unsigned char*.
1994-01-03 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* XMakeAssoc.c (XMakeAssoc): Use xmalloc.
(_XIOErrorFunction): Decl deleted.
1993-11-27 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Version 19.22 released.
1993-11-26 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Activate.c (XMenuActivate):
Call XSetWindowBackground and _XMRefreshPane.
1993-11-16 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Version 19.21 released.
1993-11-13 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Makefile.in (libXMenu11.a): Tell make not to worry if ranlib fails.
Tell user too, in case make doesn't pay attention.
1993-11-11 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Version 19.20 released.
1993-10-25 Brian Fox (bfox@albert.gnu.ai.mit.edu)
* Makefile.in (ALL_CFLAGS): Add C_SWITCH_X_SYSTEM.
1993-09-27 Brian Fox (bfox@valhalla)
* Makefile.in (CPP, LN_S, C_SWITCH_X_SITE, CC, CFLAGS): Allow
`configure' to supply the values for these variables.
1993-09-26 Brian Fox (bfox@ai.mit.edu)
* Makefile.in (VPATH, srcdir): Now that `configure' creates the
Makefiles, do not append the current directory to the value of
`srcdir' or `VPATH'.
1993-08-14 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Version 19.19 released.
1993-08-08 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Version 19.18 released.
1993-07-30 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Internal.c (_XMWinQueInit): Use explicit loop, not bzero.
1993-07-27 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Makefile (ALL_CFLAGS): Use all 6 C_SWITCH_... vars.
Among them, put the ..._SITE vars last.
1993-07-18 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu)
* Version 19.17 released.
1993-07-07 Jim Blandy (jimb@geech.gnu.ai.mit.edu)
* Makefile.in: Write out the dependencies for the object files;
otherwise, VPATH won't work.
* Makefile.in: Re-arrange, to put `all' target at the top.
1993-07-06 Jim Blandy (jimb@geech.gnu.ai.mit.edu)
* Version 19.16 released.
1993-06-19 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu)
* version 19.15 released.
1993-06-18 Jim Blandy (jimb@geech.gnu.ai.mit.edu)
* Makefile.in (ALL_CFLAGS): Always #define EMACS_BITMAP_FILES.
This should make it work under any circumstances.
* Makefile.in (mostlyclean): Use rm -f.
1993-06-17 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu)
* Version 19.14 released.
1993-06-17 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Makefile.in (ALL_CFLAGS): Include C_SWITCH_MACHINE, and CPPFLAGS.
Put CFLAGS last.
1993-06-16 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu)
Bring mumbleclean targets into conformance with GNU coding standards.
* Makefile.in (mostlyclean, realclean): New targets.
1993-06-08 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu)
* Version 19.13 released.
1993-05-30 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Version 19.10 released.
1993-05-29 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Create.c: Handle EMACS_BITMAP_FILES.
Use new names of renamed bitmap files.
1993-05-28 Jim Blandy (jimb@geech.gnu.ai.mit.edu)
* AddPane.c, AddSel.c, DelPane.c, DelSel.c, InsPane.c, InsSel.c,
XDelAssoc.c, XMakeAssoc.c, XMenu.h, insque.c: Changed all uses of
insque and remque to emacs_insque and emacs_remque, so we can
safely include insque.c in the library on all systems.
1993-05-27 Jim Blandy (jimb@geech.gnu.ai.mit.edu)
* Makefile.in (.c.o): Use $< instead of ${srcdir}/$*.c; the latter
only works with GNU Make.
1993-05-27 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Create.c (XMenuCreate): Use classes PaneFont and SelectionFont.
1993-05-27 Jim Blandy (jimb@geech.gnu.ai.mit.edu)
* Version 19.9 released.
1993-05-27 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Create.c (XMenuCreate): Use x_get_resource_string, not XGetDefault.
1993-05-24 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu)
* Version 19.8 released.
1993-05-23 Jim Blandy (jimb@geech.gnu.ai.mit.edu)
* Makefile.in (C_SWITCH_X_SITE): New variable, so that the
configuration process can correctly implement the --x-includes
option.
1993-05-22 Jim Blandy (jimb@geech.gnu.ai.mit.edu)
* Create.c (XMenuCreate): Initialize the menu's pixmaps to None,
not NULL.
1993-05-22 Jim Blandy (jimb@geech.gnu.ai.mit.edu)
* Version 19.7 released.
1993-05-15 Jim Blandy (jimb@geech.gnu.ai.mit.edu)
* Makefile.in: Renamed from Makefile, so that the top-level
makefile can edit it.
1993-04-13 Jim Blandy (jimb@totoro.cs.oberlin.edu)
* XLookAssoc.c, XMakeAssoc: VMS needs <X11/Xresource.h>, not
<X11/Xos.h>.
* XCrAssoc.c: #include <errno.h>, not "errno.h".
(XCreateAssocTable): Doc fix.
1993-03-24 Jim Blandy (jimb@geech.gnu.ai.mit.edu)
* Makefile (.c.o): Include C_SWITCH_SITE and C_SWITCH_SYSTEM in
the options to the C compiler.
* compile.com, descrip.mms: New files for VMS from Richard
Levitte.
* XCrAssoc.c, XLookAssoc.c, XDestAssoc.c, XDelAssoc.c: Use <angle
brackets> around the names of the X Windows #include files; VMS
needs this.
* XLookAssoc.c, XMakeAssoc.c: #include <X11/Xos.h>. VMS needs
this.
* Create.c: On VMS, we have to look for the bitmap files in
`./src/bitmaps', not <X11/bitmaps>.
1993-03-14 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Makefile (.c.o): Don't rm the .o files.
1993-03-13 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Activate.c (XMenuActivate): If `active' field is negative,
don't allow selecting a string.
1993-03-09 Jim Blandy (jimb@totoro.cs.oberlin.edu)
* Create.c (XMenuCreate): New variable `root', holding the
display's default root window, so we don't have to write out
"RootWindow (display, DefaultScreen (display))" a jillion times.
* Create.c (XMenuCreate): Don't assume that all the
<X11/bitmaps/foo> patterns are 16x16. Instead of building a
bitmap and then converting it to a pixmap of the appropriate
depth if necessary, build a pixmap of the appropriate depth
directly, using XCreatePixmapFromBitmapData.
* Imakefile: Include XCrAssoc.c, XDelAssoc.c, XDestAssoc.c,
XLookAssoc.c, and XMakeAssoc.c in SRCS. Similarly for OBJS.
* XMenuInt.h: #include <stdio.h> before <X11/Xlib.h>, to avoid
warnings about redefining NULL.
* XMakeAssoc.c, XLookAssoc.c, XDestAssoc.c, XDelAssoc.c,
XCrAssoc.c: #include X11/Xlib.h instead of X11/Xlibint.h.
* XMakeAssoc.c, XLookAssoc.c, XCrAssoc.c: If NULL isn't defined by
any of the `.h' files, define it.
* XMakeAssoc.c, XCrAssoc.c: #include <errno.h>.
Add an extern declaration for errno.
* XMakeAssoc.c: Add an extern declaration for _XIOErrorFunction.
(XMakeAssoc): Use malloc instead of Xmalloc to allocate new
parts of the assoc table.
* XCrAssoc.c (XCreateAssocTable): Same.
* XDestAssoc.c (XDestroyAssocTable): Use free instead of Xfree.
* XDelAssoc.c (XDeleteAssoc): Same.
1992-10-18 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* XMakeAssoc.c (XMakeAssoc): Use malloc, not Xmalloc.
* XCrAssoc.c (XCreateAssocTable): Use malloc and calloc directly.
* XDelAssoc.c (XDeleteAssoc): Use free, not Xfree.
* XDestAssoc.c (XDestroyAssocTable): Likewise.
1992-10-17 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* XDelAssoc.c, XLookAssoc.c, XCrAssoc.c, XDestAssoc.c, XMakeAssoc.c:
Use Xlib.h, not Xlibint.h.
* XLookAssoc.c, XMakeAssoc.c, XCrAssoc.c (NULL): Defined.
* XMakeAssoc.c, XCrAssoc.c: Include errno.h. Declare errno.
* XMakeAssoc.c (_XIOErrorFunction): Declared.
1992-09-19 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* XDelAssoc.c, XLookAssoc.c, XCrAssoc.c, XDestAssoc.c, XMakeAssoc.c:
Specify dir X11/ when including Xlibint.h.
1992-09-17 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* XDelAssoc.c, XLookAssoc.c, XCrAssoc.c, XDestAssoc.c, XMakeAssoc.c:
New files.
* Makefile (SRCS, OBJS): Compile those files.
1992-01-31 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Makefile (clean): Delete object files and library.
(distclean): New target.
1992-01-29 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Makefile (libXMenu11.a): Put `-' on ranlib line.
1992-01-27 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Makefile (EXTRA): New variable.
(libXMenu11.a): Use that.
* insque.c: New file.
1992-01-26 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Makefile (CC): Assignment commented out.
1991-11-16 Noah Friedman (friedman at nutrimat)
* copyright.h: New file (copied from X11R4 distribution)
* All files: Replaced occurrences of #include <X11/copyright.h>
with #include "copyright.h"
1991-10-25 Richard Stallman (rms at mole.gnu.ai.mit.edu)
* XMenu.h (enum _xmmode): Remove spurious comma.
* X10.h: New file.
* XMenu.h, XMenuInt.h: Include X10.h from this dir.
1990-11-13 Richard Stallman (rms at mole.ai.mit.edu)
* XMenu.h (struct _xmenu): Use unsigned long for colors.
1990-11-12 Richard Stallman (rms at mole.ai.mit.edu)
* Internal.c: Declare argument `display' in some functions.

66
oldXMenu/ChgPane.c Normal file
View file

@ -0,0 +1,66 @@
#include "copyright.h"
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/ChgPane.c,v 1.1 1992/04/11 22:10:17 jimb Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
* XMenu: MIT Project Athena, X Window system menu package
*
* XMenuChangePane - Change the label of a menu pane.
*
* Author: Tony Della Fera, DEC
* December 19, 1985
*
*/
#include "XMenuInt.h"
int
XMenuChangePane(menu, p_num, label)
register XMenu *menu; /* Menu object to be modified. */
register int p_num; /* Pane number to be modified. */
char *label; /* Selection label. */
{
register XMPane *p_ptr; /* XMPane pointer. */
int label_length; /* Label length in characters. */
int label_width; /* Label width in pixels. */
/*
* Check for NULL pointers!
*/
if (label == NULL) {
_XMErrorCode = XME_ARG_BOUNDS;
return(XM_FAILURE);
}
/*
* Find the right pane.
*/
p_ptr = _XMGetPanePtr(menu, p_num);
if (p_ptr == NULL) return(XM_FAILURE);
/*
* Determine label size.
*/
label_length = strlen(label);
label_width = XTextWidth(menu->p_fnt_info, label, label_length);
/*
* Change the pane data.
*/
p_ptr->label = label;
p_ptr->label_width = label_width;
p_ptr->label_length = label_length;
/*
* Schedule a recompute.
*/
menu->recompute = 1;
/*
* Return the pane number just changed.
*/
_XMErrorCode = XME_NO_ERROR;
return(p_num);
}

88
oldXMenu/ChgSel.c Normal file
View file

@ -0,0 +1,88 @@
#include "copyright.h"
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/ChgSel.c,v 1.1 1992/04/11 22:10:17 jimb Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
* XMenu: MIT Project Athena, X Window system menu package
*
* XMenuChangeSelection - Change a menu selection.
*
* Author: Tony Della Fera, DEC
* December 19, 1985
*
*/
#include "XMenuInt.h"
int
XMenuChangeSelection(display, menu, p_num, s_num, data, data_sw, label, label_sw)
Display *display; /* previously opened display. */
register XMenu *menu; /* Menu object to be modified. */
register int p_num; /* Pane number to be modified. */
register int s_num; /* Selection number to modified. */
char *data; /* Data value. */
int data_sw; /* Change to new data value? */
char *label; /* Selection label. */
int label_sw; /* Change to new label? */
{
register XMPane *p_ptr; /* XMPane pointer. */
register XMSelect *s_ptr; /* XMSelect pointer. */
int label_length; /* Label length in characters. */
int label_width; /* Label width in pixels. */
/*
* Check for NULL pointers!
*/
if (label == NULL) {
_XMErrorCode = XME_ARG_BOUNDS;
return(XM_FAILURE);
}
/*
* Find the right pane.
*/
p_ptr = _XMGetPanePtr(menu, p_num);
if (p_ptr == NULL) return(XM_FAILURE);
/*
* Find the right selection.
*/
s_ptr = _XMGetSelectionPtr(p_ptr, s_num);
if (s_ptr == NULL) return(XM_FAILURE);
/*
* Reset the label?
*/
if (label_sw) {
/*
* Determine label size.
*/
label_length = strlen(label);
label_width = XTextWidth(menu->s_fnt_info, label, label_length);
/*
* Change the selection data.
*/
s_ptr->label = label;
s_ptr->label_width = label_width;
s_ptr->label_length = label_length;
/*
* Schedule a recompute.
*/
menu->recompute = 1;
}
/*
* Reset the data?
*/
if (data_sw) s_ptr->data = data;
/*
* Return successfully.
*/
_XMErrorCode = XME_NO_ERROR;
return(s_num);
}

761
oldXMenu/Create.c Normal file
View file

@ -0,0 +1,761 @@
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/Create.c,v 1.4 1993/03/09 18:18:01 jimb Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
#include "copyright.h"
/*
* XMenu: MIT Project Athena, X Window system menu package
*
* XMenuCreate - Creates an X window system menu object.
*
* Author: Tony Della Fera, DEC
* January 23, 1986
*
*/
#include <config.h>
#include "XMenuInt.h"
#ifdef EMACS_BITMAP_FILES
#include "../src/bitmaps/dimple1.xbm"
#include "../src/bitmaps/dimple3.xbm"
#include "../src/bitmaps/gray1.xbm"
#include "../src/bitmaps/gray3.xbm"
#include "../src/bitmaps/crosswv.xbm"
#include "../src/bitmaps/leftptr.xbm"
#include "../src/bitmaps/leftpmsk.xbm"
#include "../src/bitmaps/rtptr.xbm"
#include "../src/bitmaps/rtpmsk.xbm"
#include "../src/bitmaps/cntrptr.xbm"
#include "../src/bitmaps/cntrpmsk.xbm"
#include "../src/bitmaps/stipple.xbm"
#else
#ifndef VMS
#include <X11/bitmaps/dimple1>
#include <X11/bitmaps/dimple3>
#include <X11/bitmaps/gray1>
#include <X11/bitmaps/gray3>
#include <X11/bitmaps/cross_weave>
#include <X11/bitmaps/left_ptr>
#include <X11/bitmaps/left_ptrmsk>
#include <X11/bitmaps/right_ptr>
#include <X11/bitmaps/right_ptrmsk>
#include <X11/bitmaps/cntr_ptr>
#include <X11/bitmaps/cntr_ptrmsk>
#include <X11/bitmaps/stipple>
#else
#include "[-.src.bitmaps]dimple1.xbm"
#include "[-.src.bitmaps]dimple3.xbm"
#include "[-.src.bitmaps]gray1.xbm"
#include "[-.src.bitmaps]gray3.xbm"
#include "[-.src.bitmaps]crosswv.xbm"
#include "[-.src.bitmaps]leftptr.xbm"
#include "[-.src.bitmaps]leftpmsk.xbm"
#include "[-.src.bitmaps]rtptr.xbm"
#include "[-.src.bitmaps]rtpmsk.xbm"
#include "[-.src.bitmaps]cntrptr.xbm"
#include "[-.src.bitmaps]cntrpmsk.xbm"
#include "[-.src.bitmaps]stipple.xbm"
#endif /* VMS */
#endif /* not EMACS_BITMAP_FILES */
#define DEF_FREEZE 0
#define DEF_REVERSE 0
#define DEF_MENU_STYLE LEFT
#define DEF_MENU_MODE BOX
#define DEF_INACT_PNUM 3
#define MAX_INACT_PNUM 4
#define DEF_P_STYLE CENTER
#define DEF_P_EVENTS (EnterWindowMask | ExposureMask)
#define DEF_P_FNT_NAME "fixed"
#define DEF_P_SPREAD 0.5
#define DEF_P_BDR_WIDTH 2
#define DEF_S_STYLE LEFT
#define DEF_S_EVENTS (EnterWindowMask | LeaveWindowMask)
#define DEF_S_FNT_NAME "fixed"
#define DEF_S_SPREAD 0.10
#define DEF_S_BDR_WIDTH 1
#define XASSOC_TABLE_SIZE 64
#define TILE_BUF_SIZE 5
int atoi();
double atof();
char *x_get_resource_string ();
static Status
XAllocDisplayColor(display, map, colorName, color, junk)
Display *display;
Colormap map;
char *colorName;
XColor *color;
XColor *junk;
{
return (colorName!=0 &&
XParseColor(display, map, colorName, color) &&
XAllocColor(display, map, color));
}
XMenu *
XMenuCreate(display, parent, def_env)
Display *display; /* ID of previously opened display */
Window parent; /* Window ID of the menu's parent window. */
register char *def_env; /* X Defaults program environment name. */
{
register int i; /* Loop counter. */
register int j; /* Loop counter. */
register char *def_val; /* X Default value temp variable. */
register XMenu *menu; /* Pointer to the new menu. */
XMStyle menu_style; /* Menu display style. */
XMMode menu_mode; /* Menu display mode. */
XMPane *pane; /* Pane list header. */
XAssocTable *assoc_tab; /* XAssocTable pointer. */
int freeze; /* Freeze server mode. */
int reverse; /* Reverse video mode. */
XMStyle p_style; /* Pane display style. */
char *p_fnt_name; /* Flag font name. */
XFontStruct *p_fnt_info; /* Flag font structure */
int p_fnt_pad; /* Flag font padding in pixels. */
double p_spread; /* Pane spread in flag height fractions. */
int p_fnt_height; /* Pane character height. */
int p_bdr_width; /* Pane border width. */
int flag_height; /* Flag window height. */
int p_height; /* Pane window height. */
int p_x_off; /* Pane X offset. */
int p_y_off; /* Pane Y offset. */
GC pane_GC; /* Pane graphics context. */
XMStyle s_style; /* Selection display style. */
char *s_fnt_name; /* Selection font name. */
XFontStruct *s_fnt_info; /* Selection font structure. */
int s_fnt_pad; /* Selection font padding in pixels. */
int s_fnt_height; /* Selection font character height */
double s_spread; /* Select spread in line height fractions. */
int s_bdr_width; /* Highlight border width. */
int s_height; /* Selection window height. */
int s_x_off; /* Selection window X offset. */
int s_y_off; /* Selection window Y offset. */
GC normal_select_GC; /* GC used for normal video selection. */
GC inverse_select_GC; /* GC used for inverse video selection. */
GC inact_GC; /* GC for inactive pane header and */
/* selections. */
GC inact_GC_noexpose;
XColor color_def; /* Temp color definition holder. */
XColor screen_def; /* Temp screen color definition holder */
XColor p_bdr_color; /* Color of border. */
XColor s_bdr_color; /* Color of highlight. */
XColor p_frg_color; /* Color of pane foreground color. */
XColor s_frg_color; /* Color of selection foreground. */
XColor bkgnd_color; /* Color of background.. */
XColor mouse_color; /* Color of mouse cursor. */
Cursor mouse_cursor; /* Mouse cursor. */
Pixmap inact_bitmap; /* Menu inactive pixmap. */
int inact_pnum; /* Inactive background pattern number. */
Pixel p_bdr_pixel; /* Pane border pixel. */
Pixel s_bdr_pixel; /* Selection border pixel. */
Pixel p_frg_pixel; /* Pane foreground pixel. */
Pixel s_frg_pixel; /* Selection foreground pixel. */
Pixel bkgnd_pixel; /* Menu background pixel. */
int *width, *height;
Pixmap *bitmap;
int *x_hot, *y_hot;
int status; /* Return code from XReadBitmapFile. */
Pixmap cursor; /* Cursor pixmap holder. */
Pixmap cursor_mask; /* Cursor mask pixmap holder. */
Pixmap stipple_pixmap; /* Stipple mask for half-tone text. */
unsigned long valuemask;
XGCValues *values;
Window root = RootWindow (display, DefaultScreen (display));
/*
* Calloc the XMenu structure and the initial pane.
*/
menu = (XMenu *)calloc(1, sizeof(XMenu));
if (menu == NULL) {
_XMErrorCode = XME_CALLOC;
return(NULL);
}
pane = (XMPane *)calloc(1, sizeof(XMPane));
if (pane == NULL) {
_XMErrorCode = XME_CALLOC;
return(NULL);
}
/*
* Create the XAssocTable
*/
assoc_tab = (XAssocTable *)XCreateAssocTable(XASSOC_TABLE_SIZE);
if(assoc_tab == NULL) {
_XMErrorCode= XME_CREATE_ASSOC;
return(NULL);
}
/*
* Set up the default environment name.
*/
if (def_env == NULL || *def_env == '\0') def_env = "XMenu";
/*
* Set up internal fail-safe defaults.
*/
freeze = DEF_FREEZE;
reverse = DEF_REVERSE;
menu_style = DEF_MENU_STYLE;
menu_mode = DEF_MENU_MODE;
inact_pnum = DEF_INACT_PNUM;
p_style = DEF_P_STYLE;
p_spread = DEF_P_SPREAD;
p_fnt_name = DEF_P_FNT_NAME;
p_bdr_width = DEF_P_BDR_WIDTH;
s_style = DEF_S_STYLE;
s_spread = DEF_S_SPREAD;
s_fnt_name = DEF_S_FNT_NAME;
s_bdr_width = DEF_S_BDR_WIDTH;
/*
* Get default values from X.
*/
def_val = x_get_resource_string ("menuFreeze", "MenuFreeze");
if (def_val != NULL) {
if (strcmp(def_val, "on") == 0) freeze = 1;
else if (strcmp(def_val, "off") == 0) freeze = 0;
}
def_val = x_get_resource_string ("menuReverseVideo", "MenuReverseVideo");
if (def_val != NULL) {
if (strcmp(def_val, "on") == 0) reverse = 1;
else if (strcmp(def_val, "off") == 0) reverse = 0;
}
def_val = x_get_resource_string ("menuStyle", "MenuStyle");
if (def_val != NULL) {
if (strcmp(def_val, "right_hand") == 0) menu_style = RIGHT;
else if (strcmp(def_val, "left_hand") == 0) menu_style = LEFT;
else if (strcmp(def_val, "center") == 0) menu_style = CENTER;
}
def_val = x_get_resource_string ("menuMode", "MenuMode");
if (def_val != NULL) {
if (strcmp(def_val, "box") == 0) menu_mode = BOX;
else if (strcmp(def_val, "invert") == 0) menu_mode = INVERT;
}
def_val = x_get_resource_string ("menuMouse", "MenuMouse");
if (
def_val != NULL &&
DisplayCells(display, DefaultScreen(display)) > 2 &&
XAllocDisplayColor(display,
DefaultColormap(display, DefaultScreen(display)),
def_val,
&mouse_color, &color_def)
);
else if (reverse &&
XAllocDisplayColor(display,
DefaultColormap(display, DefaultScreen(display)),
"white",
&mouse_color, &color_def)
);
else if (XAllocDisplayColor(display,
DefaultColormap(display, DefaultScreen(display)),
"black",
&mouse_color, &color_def)
);
else ;
def_val = x_get_resource_string ("menuBackground", "MenuBackground");
if (
def_val != NULL &&
DisplayCells(display, DefaultScreen(display)) > 2 &&
XAllocDisplayColor(display,
DefaultColormap(display, DefaultScreen(display)),
def_val,
&bkgnd_color, &color_def)
);
else if (reverse &&
XAllocDisplayColor(display,
DefaultColormap(display, DefaultScreen(display)),
"black",
&bkgnd_color, &color_def)
);
else if (XAllocDisplayColor(display,
DefaultColormap(display, DefaultScreen(display)),
"white",
&bkgnd_color, &color_def)
);
else;
def_val = x_get_resource_string ("menuInactivePattern", "MenuInactivePattern");
if (def_val != NULL) {
if (strcmp(def_val, "dimple1") == 0) inact_pnum = 0;
else if (strcmp(def_val, "dimple3") == 0) inact_pnum = 1;
else if (strcmp(def_val, "gray1") == 0) inact_pnum = 2;
else if (strcmp(def_val, "gray3") == 0) inact_pnum = 3;
else if (strcmp(def_val, "cross_weave") == 0) inact_pnum = 4;
}
def_val = x_get_resource_string ("paneStyle", "PaneStyle");
if (def_val != NULL) {
if (strcmp(def_val, "flush_left") == 0) p_style = LEFT;
else if (strcmp(def_val, "flush_right") == 0) p_style = RIGHT;
else if (strcmp(def_val, "center") == 0) p_style = CENTER;
}
def_val = x_get_resource_string ("paneFont", "PaneFont");
if (def_val != NULL) p_fnt_name = def_val;
def_val = x_get_resource_string ("paneForeground", "PaneForeground");
if (
def_val != NULL &&
DisplayCells(display, DefaultScreen(display)) > 2
)
XAllocDisplayColor(display, DefaultColormap(display,
DefaultScreen(display)),
def_val,
&p_frg_color, &color_def);
else if (reverse) XAllocDisplayColor(display,
DefaultColormap(display,
DefaultScreen(display)),
"white",
&p_frg_color, &color_def);
else XAllocDisplayColor(display,
DefaultColormap(display, DefaultScreen(display)),
"black",
&p_frg_color, &color_def);
def_val = x_get_resource_string ("paneBorder", "PaneBorder");
if (
def_val != NULL &&
DisplayCells(display, DefaultScreen(display)) > 2 &&
XAllocDisplayColor(display,
DefaultColormap(display, DefaultScreen(display)),
def_val,
&p_bdr_color, &color_def)
);
else if (reverse &&
XAllocDisplayColor(display,
DefaultColormap(display, DefaultScreen(display)),
"white",
&p_bdr_color, &color_def)
);
else XAllocDisplayColor(display,
DefaultColormap(display, DefaultScreen(display)),
"black",
&p_bdr_color, &color_def);
def_val = x_get_resource_string ("paneBorderWidth", "PaneBorderWidth");
if (def_val != NULL) p_bdr_width = atoi(def_val);
def_val = x_get_resource_string ("paneSpread", "PaneSpread");
if (def_val != NULL) p_spread = atof(def_val);
def_val = x_get_resource_string ("selectionStyle", "SelectionStyle");
if (def_val != NULL) {
if (strcmp(def_val, "flush_left") == 0) s_style = LEFT;
else if (strcmp(def_val, "flush_right") == 0) s_style = RIGHT;
else if (strcmp(def_val, "center") == 0) s_style = CENTER;
}
def_val = x_get_resource_string ("selectionFont", "SelectionFont");
if (def_val != NULL) s_fnt_name = def_val;
def_val = x_get_resource_string ("selectionForeground", "SelectionForeground");
if (
def_val != NULL &&
DisplayCells(display, DefaultScreen(display)) > 2 &&
XAllocDisplayColor(display,
DefaultColormap(display, DefaultScreen(display)),
def_val,
&s_frg_color, &color_def)
);
else if (reverse &&
XAllocDisplayColor(display,
DefaultColormap(display, DefaultScreen(display)),
"white",
&s_frg_color, &color_def)
) ;
else if (XAllocDisplayColor(display,
DefaultColormap(display, DefaultScreen(display)),
"black",
&s_frg_color, &color_def)
) ;
else ;
def_val = x_get_resource_string ("selectionBorder", "SelectionBorder");
if (
def_val != NULL &&
DisplayCells(display, DefaultScreen(display)) > 2 &&
XAllocDisplayColor(display,
DefaultColormap(display, DefaultScreen(display)),
def_val,
&s_bdr_color, &color_def)
) ;
else if (reverse &&
XAllocDisplayColor(display,
DefaultColormap(display, DefaultScreen(display)),
"white",
&s_bdr_color, &color_def)
) ;
else if (XAllocDisplayColor(display,
DefaultColormap(display, DefaultScreen(display)),
"black",
&s_bdr_color, &color_def)
) ;
else ;
def_val = x_get_resource_string ("selectionBorderWidth", "SelectionBorderWidth");
if (def_val != NULL) s_bdr_width = atoi(def_val);
def_val = x_get_resource_string ("selectionSpread", "SelectionSpread");
if (def_val != NULL) s_spread = atof(def_val);
/*
* Create and store the inactive pattern pixmap.
*/
{
char *data = NULL;
int width, height;
switch (inact_pnum)
{
case 0:
data = (char *)dimple1_bits;
width = dimple1_width;
height = dimple1_height;
break;
case 1:
data = (char *)dimple3_bits;
width = dimple3_width;
height = dimple3_height;
break;
case 2:
data = (char *)gray1_bits;
width = gray1_width;
height = gray1_height;
break;
case 3:
data = (char *)gray3_bits;
width = gray3_width;
height = gray3_height;
break;
case 4:
data = (char *)cross_weave_bits;
width = cross_weave_width;
height = cross_weave_height;
break;
}
if (! data)
{
_XMErrorCode = XME_STORE_BITMAP;
return(NULL);
}
inact_bitmap =
XCreatePixmapFromBitmapData
(display, root, data, width, height,
p_frg_color.pixel, bkgnd_color.pixel,
DisplayPlanes (display, DefaultScreen (display)));
}
/*
* Load the mouse cursor.
*/
switch (menu_style) {
case LEFT:
cursor = XCreateBitmapFromData(display,
root,
left_ptr_bits,
left_ptr_width,
left_ptr_height);
cursor_mask = XCreateBitmapFromData(display,
root,
left_ptrmsk_bits,
left_ptrmsk_width,
left_ptrmsk_height);
mouse_cursor = XCreatePixmapCursor(
display,
cursor, cursor_mask,
&mouse_color, &bkgnd_color,
left_ptr_x_hot,
left_ptr_y_hot
);
XFreePixmap(display, cursor);
XFreePixmap(display, cursor_mask);
break;
case RIGHT:
cursor = XCreateBitmapFromData(display,
root,
right_ptr_bits,
right_ptr_width,
right_ptr_height);
cursor_mask = XCreateBitmapFromData(display,
root,
right_ptrmsk_bits,
right_ptrmsk_width,
right_ptrmsk_height);
mouse_cursor = XCreatePixmapCursor(
display,
cursor, cursor_mask,
&mouse_color, &bkgnd_color,
right_ptr_x_hot,
right_ptr_y_hot
);
XFreePixmap(display, cursor);
XFreePixmap(display, cursor_mask);
break;
case CENTER:
cursor = XCreateBitmapFromData(display,
root,
cntr_ptr_bits,
cntr_ptr_width,
cntr_ptr_height);
cursor_mask = XCreateBitmapFromData(display,
root,
cntr_ptrmsk_bits,
cntr_ptrmsk_width,
cntr_ptrmsk_height);
mouse_cursor = XCreatePixmapCursor(
display,
cursor, cursor_mask,
&mouse_color, &bkgnd_color,
cntr_ptr_x_hot,
cntr_ptr_y_hot
);
XFreePixmap(display, cursor);
XFreePixmap(display, cursor_mask);
break;
default:
/* Error! Invalid style parameter. */
_XMErrorCode = XME_STYLE_PARAM;
return(NULL);
}
if (mouse_cursor == _X_FAILURE) {
_XMErrorCode = XME_CREATE_CURSOR;
return(NULL);
}
/*
* Open the pane and selection fonts.
*/
p_fnt_info = XLoadQueryFont(display, p_fnt_name);
if (p_fnt_info == NULL) {
_XMErrorCode = XME_OPEN_FONT;
return(NULL);
}
s_fnt_info = XLoadQueryFont(display, s_fnt_name);
if (s_fnt_info == NULL) {
_XMErrorCode = XME_OPEN_FONT;
return(NULL);
}
/*
* Calculate the fixed padding value in pixels for each font.
*/
p_fnt_height = p_fnt_info->max_bounds.ascent + p_fnt_info->max_bounds.descent;
s_fnt_height = s_fnt_info->max_bounds.ascent + s_fnt_info->max_bounds.descent;
p_fnt_pad = s_spread * p_fnt_height;
s_fnt_pad = s_spread * s_fnt_height;
/*
* Calculate fixed height and offset requirements.
*/
flag_height = p_fnt_height + (p_fnt_pad << 1);
p_height = 0;
p_y_off = flag_height + p_bdr_width;
p_x_off = p_y_off * p_spread;
s_height = s_fnt_height + (s_fnt_pad << 1) + (s_bdr_width << 1);
s_y_off = s_height;
s_x_off = p_x_off;
/*
* Set up the pane list header.
*/
pane->next = pane;
pane->prev = pane;
pane->type = PL_HEADER;
pane->serial = -1;
/*
* Initialize the internal pane and selection creation queues.
*/
_XMWinQueInit();
/*
* Create pane, active, and inactive GC's.
*/
values = (XGCValues *)malloc(sizeof(XGCValues));
valuemask = (GCForeground | GCBackground | GCFont | GCLineWidth);
/*
* First, pane.
*/
values->foreground = p_frg_color.pixel;
values->background = bkgnd_color.pixel;
values->font = p_fnt_info->fid;
values->line_width = p_bdr_width;
pane_GC = XCreateGC(
display,
root,
valuemask,
values);
/*
* Then normal video selection.
*/
values->foreground = s_frg_color.pixel;
values->background = bkgnd_color.pixel;
values->font = s_fnt_info->fid;
values->line_width = s_bdr_width;
normal_select_GC = XCreateGC(display,
root,
valuemask,
values);
/*
* Inverse video selection.
*/
values->foreground = bkgnd_color.pixel;
values->background = s_frg_color.pixel;
values->font = s_fnt_info->fid;
values->line_width = s_bdr_width;
inverse_select_GC = XCreateGC(display,
root,
valuemask,
values);
stipple_pixmap = XCreateBitmapFromData(display,
root,
stipple_bits,
stipple_width,
stipple_height);
/*
* Finally, inactive pane header and selections
*/
valuemask |= (GCFillStyle | GCStipple);
values->foreground = s_frg_color.pixel;
values->background = bkgnd_color.pixel;
values->font = s_fnt_info->fid;
values->line_width = s_bdr_width;
values->fill_style = FillStippled;
values->stipple = stipple_pixmap;
inact_GC = XCreateGC(display,
root,
valuemask,
values);
valuemask |= (GCGraphicsExposures);
values->graphics_exposures = False;
inact_GC_noexpose = XCreateGC (display,
root,
valuemask, values);
/*
* Construct the XMenu object.
*/
/* -------------------- Menu data -------------------- */
menu->menu_style = menu_style;
menu->menu_mode = menu_mode;
menu->freeze = freeze;
menu->aeq = 0;
menu->recompute = 1;
menu->parent = parent;
menu->height = 0;
menu->width = 0;
menu->mouse_cursor = mouse_cursor;
menu->assoc_tab = assoc_tab;
menu->p_list = pane;
/* -------------------- Pane window data -------------------- */
menu->p_style = p_style;
menu->p_events = DEF_P_EVENTS;
menu->p_fnt_info = p_fnt_info;
menu->p_fnt_pad = p_fnt_pad;
menu->p_spread = p_spread;
menu->p_bdr_width = p_bdr_width;
menu->flag_height = flag_height;
menu->p_width = 0;
menu->p_height = p_height;
menu->p_x_off = p_x_off;
menu->p_y_off = p_y_off;
menu->p_count = 0;
menu->pane_GC = pane_GC;
menu->x_pos = 0;
menu->y_pos = 0;
/* -------------------- Selection window data -------------------- */
menu->s_style = s_style;
menu->s_events = DEF_S_EVENTS;
menu->s_fnt_info = s_fnt_info;
menu->s_fnt_pad = s_fnt_pad;
menu->s_spread = s_spread;
menu->s_bdr_width = s_bdr_width; /* unnecessary */
menu->s_width = 0;
menu->s_height = s_height;
menu->s_x_off = s_x_off;
menu->s_y_off = s_y_off;
menu->s_count = 0;
menu->normal_select_GC = normal_select_GC;
menu->inverse_select_GC = inverse_select_GC;
menu->inact_GC = inact_GC;
/* -------------------- Color data -------------------- */
menu->p_bdr_color = p_bdr_color.pixel;
menu->s_bdr_color = s_bdr_color.pixel;
menu->p_frg_color = p_frg_color.pixel;
menu->s_frg_color = s_frg_color.pixel;
menu->bkgnd_color = bkgnd_color.pixel;
/* -------------------- Pixmap data -------------------- */
menu->p_bdr_pixmap = None;
menu->s_bdr_pixmap = None;
menu->p_frg_pixmap = None;
menu->s_frg_pixmap = None;
menu->bkgnd_pixmap = None;
menu->inact_pixmap = inact_bitmap;
/*
* Return the completed XMenu.
*/
_XMErrorCode = XME_NO_ERROR;
return(menu);
}

88
oldXMenu/DelPane.c Normal file
View file

@ -0,0 +1,88 @@
#include "copyright.h"
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/DelPane.c,v 1.1 1992/04/11 22:10:18 jimb Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
* XMenu: MIT Project Athena, X Window system menu package
*
* XMenuDeletePane - Deletes a pane from an XMenu object.
*
* Author: Tony Della Fera, DEC
* 20-Nov-85
*
*/
#include "XMenuInt.h"
int
XMenuDeletePane(display, menu, p_num)
register Display *display; /* Previously opened display */
register XMenu *menu; /* Menu object to be modified. */
register int p_num; /* Pane number to be deleted. */
{
register XMPane *p_ptr; /* Pointer to pane being deleted. */
register XMSelect *s_ptr; /* Pointer to selections being deleted. */
register XMSelect *s_next; /* Pointer to next selection to be deleted. */
/*
* Find the right pane.
*/
p_ptr = _XMGetPanePtr(menu, p_num);
if (p_ptr == NULL) return(XM_FAILURE);
/*
* Remove the pane from the association table.
*/
XDeleteAssoc(display, menu->assoc_tab, p_ptr->window);
/*
* Remove the pane from the pane list and update
* the pane count.
*/
emacs_remque(p_ptr);
menu->p_count--;
/*
* Remove all the selections in the pane from the
* association table and free their XMSelect structures.
*/
for (
s_ptr = p_ptr->s_list->next;
s_ptr != p_ptr->s_list;
s_ptr = s_next
) {
XDeleteAssoc(display, menu->assoc_tab, s_ptr->window);
s_next = s_ptr->next;
free(s_ptr);
}
free(p_ptr->s_list);
if (p_ptr->window) {
/*
* Destroy the selection transparencies.
*/
XDestroySubwindows(display, p_ptr->window);
/*
* Destroy the pane window.
*/
XDestroyWindow(display, p_ptr->window);
}
/*
* Free the pane's XMPane structure.
*/
free(p_ptr);
/*
* Schedule a recompute.
*/
menu->recompute = 1;
/*
* Return the pane number just deleted.
*/
_XMErrorCode = XME_NO_ERROR;
return(p_num);
}

72
oldXMenu/DelSel.c Normal file
View file

@ -0,0 +1,72 @@
#include "copyright.h"
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/DelSel.c,v 1.1 1992/04/11 22:10:18 jimb Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
* XMenu: MIT Project Athena, X Window system menu package
*
* XMenuDeleteSelection - Deletes a selection from an XMenu object.
*
* Author: Tony Della Fera, DEC
* 20-Nov-85
*
*/
#include "XMenuInt.h"
int
XMenuDeleteSelection(display, menu, p_num, s_num)
register Display *display; /* Previously opened display. */
register XMenu *menu; /* Menu object to be modified. */
register int p_num; /* Pane number to be deleted. */
register int s_num; /* Selection number to be deleted. */
{
register XMPane *p_ptr; /* Pointer to pane being deleted. */
register XMSelect *s_ptr; /* Pointer to selections being deleted. */
/*
* Find the right pane.
*/
p_ptr = _XMGetPanePtr(menu, p_num);
if (p_ptr == NULL) return(XM_FAILURE);
/*
* Find the right selection.
*/
s_ptr = _XMGetSelectionPtr(p_ptr, s_num);
if (s_ptr == NULL) return(XM_FAILURE);
/*
* Remove the selection from the association table.
*/
XDeleteAssoc(display, menu->assoc_tab, s_ptr->window);
/*
* Remove the selection from the parent pane's selection
* list and update the selection count.
*/
emacs_remque(s_ptr);
p_ptr->s_count--;
/*
* Destroy the selection transparency.
*/
if (s_ptr->window) XDestroyWindow(display, s_ptr->window);
/*
* Free the selection's XMSelect structure.
*/
free(s_ptr);
/*
* Schedule a recompute.
*/
menu->recompute = 1;
/*
* Return the selection number just deleted.
*/
_XMErrorCode = XME_NO_ERROR;
return(s_num);
}

116
oldXMenu/Destroy.c Normal file
View file

@ -0,0 +1,116 @@
#include "copyright.h"
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/Destroy.c,v 1.1 1992/04/11 22:10:18 jimb Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
* XMenu: MIT Project Athena, X Window system menu package
*
* XMenuDestroy - Free all resources associated with and XMenu.
*
* Author: Tony Della Fera, DEC
* August, 1985
*
*/
#include "XMenuInt.h"
XMenuDestroy(display, menu)
Display *display;
register XMenu *menu; /* Menu object to destroy. */
{
register XMPane *p_ptr; /* Pointer to the current pane. */
register XMPane *p_next; /* Pointer to the next pane. */
register XMSelect *s_ptr; /* Pointer to the current selection. */
register XMSelect *s_next; /* Pointer to the next selection. */
/*
* Destroy the selection and pane X windows and free
* their corresponding XMWindows.
*/
for (
p_ptr = menu->p_list->next;
p_ptr != menu->p_list;
p_ptr = p_next
) {
for (
s_ptr = p_ptr->s_list->next;
s_ptr != p_ptr->s_list;
s_ptr = s_next
) {
s_next = s_ptr->next;
free(s_ptr);
}
if (p_ptr->window) {
XDestroySubwindows(display, p_ptr->window);
XDestroyWindow(display, p_ptr->window);
}
p_next = p_ptr->next;
free(p_ptr);
}
/*
* Destroy the association table.
*/
XDestroyAssocTable(menu->assoc_tab);
/*
* Free the mouse cursor.
*/
XFreeCursor(display, menu->mouse_cursor);
/*
* Free the fonts.
*/
XFreeFont(display, menu->p_fnt_info);
XFreeFont(display, menu->s_fnt_info);
/*
* Free the pixmaps.
*/
/* XFreePixmap(display, menu->p_bdr_pixmap);
XFreePixmap(display, menu->s_bdr_pixmap);
XFreePixmap(display, menu->p_frg_pixmap);
XFreePixmap(display, menu->s_frg_pixmap);
XFreePixmap(display, menu->bkgnd_pixmap); */
XFreePixmap(display, menu->inact_pixmap);
/*
* Free the color cells.
*/
if ((menu->p_bdr_color != BlackPixel(display, DefaultScreen(display))) && (menu->p_bdr_color != WhitePixel(display, DefaultScreen(display))))
XFreeColors(
display,
DefaultColormap(display, DefaultScreen(display)),
&menu->p_bdr_color,
1, 0);
if ((menu->s_bdr_color != BlackPixel(display, DefaultScreen(display))) && (menu->s_bdr_color != WhitePixel(display, DefaultScreen(display))))
XFreeColors(
display,
DefaultColormap(display, DefaultScreen(display)),
&menu->s_bdr_color,
1, 0);
if ((menu->p_frg_color != BlackPixel(display, DefaultScreen(display))) && (menu->p_frg_color != WhitePixel(display, DefaultScreen(display))))
XFreeColors(
display,
DefaultColormap(display, DefaultScreen(display)),
&menu->p_frg_color,
1, 0);
if ((menu->s_frg_color != BlackPixel(display, DefaultScreen(display))) && (menu->s_frg_color != WhitePixel(display, DefaultScreen(display))))
XFreeColors(
display,
DefaultColormap(display, DefaultScreen(display)),
&menu->s_frg_color,
1, 0);
if ((menu->bkgnd_color != BlackPixel(display, DefaultScreen(display))) && (menu->bkgnd_color != WhitePixel(display, DefaultScreen(display))))
XFreeColors(
display,
DefaultColormap(display, DefaultScreen(display)),
&menu->bkgnd_color,
1, 0);
/*
* Free the XMenu.
*/
free(menu);
}

30
oldXMenu/Error.c Normal file
View file

@ -0,0 +1,30 @@
#include "copyright.h"
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/Error.c,v 1.1 1992/04/11 22:10:18 jimb Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
* XMenu: MIT Project Athena, X Window system menu package
*
* XMenuError - Returns a string description of the current
* XMenu error status flag.
*
* Author: Tony Della Fera, DEC
* August, 1985
*
*/
#include "XMenuInt.h"
char *
XMenuError()
{
static char message[128]; /* Error message buffer. */
if ((_XMErrorCode < XME_CODE_COUNT) && (_XMErrorCode >= 0)) {
return(_XMErrorList[_XMErrorCode]);
}
sprintf(message, "Unknown _XMErrorCode: %d", _XMErrorCode);
return(message);
}

26
oldXMenu/EvHand.c Normal file
View file

@ -0,0 +1,26 @@
#include "copyright.h"
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/EvHand.c,v 1.1 1992/04/11 22:10:19 jimb Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
* XMenu: MIT Project Athena, X Window system menu package
*
* XMenuEventHandler - Set the XMenu asynchronous event handler.
*
* Author: Tony Della Fera, DEC
* December 19, 1985
*
*/
#include "XMenuInt.h"
XMenuEventHandler(handler)
int (*handler)();
{
/*
* Set the global event handler variable.
*/
_XMEventHandler = handler;
}

64
oldXMenu/FindPane.c Normal file
View file

@ -0,0 +1,64 @@
#include "copyright.h"
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/FindPane.c,v 1.1 1992/04/11 22:10:19 jimb Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
* XMenu: MIT Project Athena, X Window system menu package
*
* XMenuFindPane - Find the first menu pane who's label matches a
* particular string.
*
* Author: Tony Della Fera, DEC
* January 22, 1986
*
*/
#include "XMenuInt.h"
int
XMenuFindPane(menu, label)
register XMenu *menu;
register char *label;
{
register XMPane *p_ptr;
register int i = 0;
/*
* Check for NULL pointers!
*/
if (label == NULL) {
_XMErrorCode = XME_ARG_BOUNDS;
return(XM_FAILURE);
}
/*
* Find the pane who's label matches the given label.
*/
for (
p_ptr = menu->p_list->next;
p_ptr != menu->p_list;
p_ptr = p_ptr->next
){
if (p_ptr->label_length == 0) {
if (*label == '\0') {
_XMErrorCode = XME_NO_ERROR;
return (i);
}
}
else {
if (strncmp (label, p_ptr->label, p_ptr->label_length) == 0) {
_XMErrorCode = XME_NO_ERROR;
return (i);
}
}
i++;
}
/*
* If we get here then we have not found
* a match.
*/
_XMErrorCode = XME_P_NOT_FOUND;
return (XM_FAILURE);
}

72
oldXMenu/FindSel.c Normal file
View file

@ -0,0 +1,72 @@
#include "copyright.h"
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/FindSel.c,v 1.1 1992/04/11 22:10:19 jimb Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
* XMenu: MIT Project Athena, X Window system menu package
*
* XMenuFindSelection - Find the first selection in a pane who's
* label matches a particular string.
*
* Author: Tony Della Fera, DEC
* January 22, 1986
*
*/
#include "XMenuInt.h"
int
XMenuFindSelection(menu, p_num, label)
register XMenu *menu;
int p_num;
register char *label;
{
register XMPane *p_ptr;
register XMSelect *s_ptr;
register int i = 0;
/*
* Check for NULL pointers!
*/
if (label == NULL) {
_XMErrorCode = XME_ARG_BOUNDS;
return(XM_FAILURE);
}
/*
* Find the right pane.
*/
p_ptr = _XMGetPanePtr(menu, p_num);
if (p_ptr == NULL) return(XM_FAILURE);
/*
* Find the right selection.
*/
for (
s_ptr = p_ptr->s_list->next;
s_ptr != p_ptr->s_list;
s_ptr = s_ptr->next
){
if (s_ptr->label_length == 0) {
if (*label == '\0') {
_XMErrorCode = XME_NO_ERROR;
return (i);
}
}
else {
if (strncmp (label, s_ptr->label, s_ptr->label_length) == 0) {
_XMErrorCode = XME_NO_ERROR;
return (i);
}
}
i++;
}
/*
* If we get here then we have not found
* a match.
*/
_XMErrorCode = XME_S_NOT_FOUND;
return (XM_FAILURE);
}

97
oldXMenu/Imakefile Normal file
View file

@ -0,0 +1,97 @@
HEADERS = XMenu.h
LINTLIBS = ../lib/X/llib-lX.ln
INSTALLFLAGS = $(INSTINCFLAGS)
RANLIB = ranlib -t
SRCS = Activate.c \
AddPane.c \
AddSel.c \
ChgPane.c \
ChgSel.c \
Create.c \
DelPane.c \
DelSel.c \
Destroy.c \
Error.c \
EvHand.c \
FindPane.c \
FindSel.c \
InsPane.c \
InsSel.c \
Internal.c \
Locate.c \
Post.c \
Recomp.c \
SetAEQ.c \
SetFrz.c \
SetPane.c \
SetSel.c \
XCrAssoc.c \
XDelAssoc.c \
XDestAssoc.c \
XLookAssoc.c \
XMakeAssoc.c
OBJS = Activate.o \
AddPane.o \
AddSel.o \
ChgPane.o \
ChgSel.o \
Create.o \
DelPane.o \
DelSel.o \
Destroy.o \
Error.o \
EvHand.o \
FindPane.o \
FindSel.o \
InsPane.o \
InsSel.o \
Internal.o \
Locate.o \
Post.o \
Recomp.o \
SetAEQ.o \
SetFrz.o \
SetPane.o \
SetSel.o \
XCrAssoc.o \
XDelAssoc.o \
XDestAssoc.o \
XLookAssoc.o \
XMakeAssoc.o
#if DebugOldLibXMenu && ProfileOldLibXMenu
DebuggedAndProfiledLibraryObjectRule()
#else
# if DebugOldLibXMenu
DebuggedLibraryObjectRule()
# else
# if ProfileOldLibXMenu
ProfiledLibraryObjectRule()
# else
NormalLibraryObjectRule()
# endif
# endif
#endif
NormalLibraryTarget(XMenu11,$(OBJS))
LintLibraryTarget(XMenu11,$(SRCS))
InstallLibrary(XMenu11,$(USRLIBDIR))
#if InstallLintLibs
InstallLintLibrary(XMenu11,$(LINTLIBDIR))
#endif
InstallMultiple($(HEADERS),$(INCDIR))
#if ProfileOldLibXMenu
ProfiledLibraryTarget(XMenu11,$(OBJS))
InstallLibrary(XMenu11_p,$(USRLIBDIR))
#endif
#if DebugOldLibXMenu
DebuggedLibraryTarget(XMenu11,$(OBJS))
#endif
DependTarget()
NormalLintTarget($(SRCS))

112
oldXMenu/InsPane.c Normal file
View file

@ -0,0 +1,112 @@
#include "copyright.h"
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/InsPane.c,v 1.1 1992/04/11 22:10:19 jimb Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
* XMenu: MIT Project Athena, X Window system menu package
*
* XMenuInsertPane - Inserts a pane into an XMenu object in
* a particular position.
*
* Author: Tony Della Fera, DEC
* 20-Nov-85
*
*/
#include <config.h>
#include "XMenuInt.h"
int
XMenuInsertPane(menu, p_num, label, active)
register XMenu *menu; /* Menu object to be modified. */
register int p_num; /* Pane number of new pane. */
char *label; /* Selection label. */
int active; /* Make selection active? */
{
register XMPane *p_ptr; /* XMPane pointer. */
register XMPane *pane; /* Newly created pane. */
register XMSelect *select; /* Initial selection for the new pane. */
int label_length; /* Label length in characters. */
int label_width; /* Label width in pixels. */
/*
* Check for NULL pointers!
*/
if (label == NULL) {
_XMErrorCode = XME_ARG_BOUNDS;
return(XM_FAILURE);
}
/*
* Find the pane number one less than the one specified since that
* is the pane after which the insertion will occur.
*/
p_ptr = _XMGetPanePtr(menu, (p_num - 1));
if (p_ptr == NULL) return(XM_FAILURE);
/*
* Calloc the XMPane structure and the initial XMSelect.
*/
pane = (XMPane *)calloc(1, sizeof(XMPane));
if (pane == NULL) {
_XMErrorCode = XME_CALLOC;
return(XM_FAILURE);
}
select = (XMSelect *)calloc(1, sizeof(XMSelect));
if (select == NULL) {
_XMErrorCode = XME_CALLOC;
return(XM_FAILURE);
}
/*
* Determine label size.
*/
label_length = strlen(label);
label_width = XTextWidth(menu->p_fnt_info, label, label_length);
/*
* Set up the initial selection.
* Values not explicitly set are zeroed by calloc.
*/
select->next = select;
select->prev = select;
select->type = SL_HEADER;
select->serial = -1;
select->parent_p = pane;
/*
* Fill the XMPane structure.
*/
pane->type = PANE;
pane->active = active;
pane->serial = -1;
pane->label = label;
pane->label_width = label_width;
pane->label_length = label_length;
pane->s_list = select;
/*
* Insert the pane after the pane with the pane
* number one less than the desired number for the
* new pane.
*/
emacs_insque(pane, p_ptr);
/*
* Update the pane count.
*/
menu->p_count++;
/*
* Schedule a recompute.
*/
menu->recompute = 1;
/*
* Return the number of the pane just added.
*/
_XMErrorCode = XME_NO_ERROR;
return(p_num);
}

116
oldXMenu/InsSel.c Normal file
View file

@ -0,0 +1,116 @@
#include "copyright.h"
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/InsSel.c,v 1.1 1992/04/11 22:10:19 jimb Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
* XMenu: MIT Project Athena, X Window system menu package
*
* XMenuInsertSelection - Inserts a selection into an XMenu object
*
* Author: Tony Della Fera, DEC
* 20-Nov-85
*
*/
#include <config.h>
#include "XMenuInt.h"
int
XMenuInsertSelection(menu, p_num, s_num, data, label, active)
register XMenu *menu; /* Menu object to be modified. */
register int p_num; /* Pane number to be modified. */
register int s_num; /* Selection number of new selection. */
char *data; /* Data value. */
char *label; /* Selection label. */
int active; /* Make selection active? */
{
register XMPane *p_ptr; /* XMPane pointer. */
register XMSelect *s_ptr; /* XMSelect pointer. */
XMSelect *select; /* Newly created selection. */
int label_length; /* Label length in characters. */
int label_width; /* Label width in pixels. */
/*
* Check for NULL pointers!
*/
if (label == NULL) {
_XMErrorCode = XME_ARG_BOUNDS;
return(XM_FAILURE);
}
/*
* Find the right pane.
*/
p_ptr = _XMGetPanePtr(menu, p_num);
if (p_ptr == NULL) return(XM_FAILURE);
/*
* Find the selection number one less than the one specified since that
* is the selection after which the insertion will occur.
*/
s_ptr = _XMGetSelectionPtr(p_ptr, (s_num - 1));
if (s_ptr == NULL) return(XM_FAILURE);
/*
* Calloc the XMSelect structure.
*/
select = (XMSelect *)calloc(1, sizeof(XMSelect));
if (select == NULL) {
_XMErrorCode = XME_CALLOC;
return(XM_FAILURE);
}
/*
* Determine label size.
*/
label_length = strlen(label);
label_width = XTextWidth(menu->s_fnt_info, label, label_length);
/*
* Fill the XMSelect structure.
*/
if (!strcmp (label, "--") || !strcmp (label, "---"))
{
select->type = SEPARATOR;
select->active = 0;
}
else
{
select->type = SELECTION;
select->active = active;
}
select->active = active;
select->serial = -1;
select->label = label;
select->label_width = label_width;
select->label_length = label_length;
select->data = data;
select->parent_p = p_ptr;
/*
* Insert the selection after the selection with the selection
* number one less than the desired number for the new selection.
*/
emacs_insque(select, s_ptr);
/*
* Update the selection count.
*/
p_ptr->s_count++;
/*
* Schedule a recompute.
*/
menu->recompute = 1;
/*
* Return the selection number just inserted.
*/
_XMErrorCode = XME_NO_ERROR;
return(s_num);
}

1006
oldXMenu/Internal.c Normal file

File diff suppressed because it is too large Load diff

78
oldXMenu/Locate.c Normal file
View file

@ -0,0 +1,78 @@
#include "copyright.h"
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/Locate.c,v 1.1 1992/04/11 22:10:20 jimb Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
* XMenu: MIT Project Athena, X Window system menu package
*
* XMenuLocate - Return data necessary to position and locate
* a menu on the screen.
*
* Author: Tony Della Fera, DEC
* January 11, 1985
*
*/
#include "XMenuInt.h"
int
XMenuLocate(display, menu, p_num, s_num, x_pos, y_pos, ul_x, ul_y, width, height)
register Display *display; /* Previously opened display. */
register XMenu *menu; /* Menu object being located. */
int p_num; /* Active pane number. */
int s_num; /* Active selection number. */
int x_pos; /* X coordinate of mouse active position. */
int y_pos; /* Y coordinate of mouse active position. */
int *ul_x; /* Returned upper left menu X coordinate. */
int *ul_y; /* Returned upper left menu Y coordinate. */
int *width; /* Returned menu width. */
int *height; /* Returned menu height. */
{
register XMPane *p_ptr; /* XMPane pointer. */
register XMSelect *s_ptr; /* XMSelect pointer. */
/*
* Are the position arguments positive?
*/
if ((x_pos <= 0) || (y_pos <= 0)) {
_XMErrorCode = XME_ARG_BOUNDS;
return(XM_FAILURE);
}
/*
* Find the right pane.
*/
p_ptr = _XMGetPanePtr(menu, p_num);
if (p_ptr == NULL) return(XM_FAILURE);
/*
* Find the right selection.
*/
s_ptr = _XMGetSelectionPtr(p_ptr, s_num);
/*
* Check to see that the menu's dependencies have been
* recomputed and are up to date. If not, do it now.
*/
if (menu->recompute) XMenuRecompute(display, menu);
/*
* Compute the new menu origin such that the active point lies
* in the center of the desired active pane and selection.
* This sets the values of ul_x and ul_y.
*/
_XMTransToOrigin(display, menu, p_ptr, s_ptr, x_pos, y_pos, ul_x, ul_y);
/*
* Set remaining return argument values.
*/
*width = menu->width;
*height = menu->height;
/*
* Return successfully.
*/
_XMErrorCode = XME_NO_ERROR;
return(XM_SUCCESS);
}

109
oldXMenu/Makefile.in Normal file
View file

@ -0,0 +1,109 @@
srcdir=@srcdir@
VPATH=@srcdir@
C_SWITCH_X_SITE=@C_SWITCH_X_SITE@
EXTRA=insque.o
CC=@CC@
CFLAGS=@CFLAGS@
CPP=@CPP@
LN_S=@LN_S@
AS = as
LD = ld
TAGS = etags
RM = rm -f
MV = mv
RANLIB = ranlib
# Solaris 2.1 ar doesn't accept the 'l' option.
AR = ar cq
LS = ls
LINTOPTS = -axz
LINTLIBFLAG = -C
MAKE = make
STD_DEFINES =
CDEBUGFLAGS = -O
RM_CMD = $(RM) *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a \
tags TAGS make.log
OBJS = Activate.o \
AddPane.o \
AddSel.o \
ChgPane.o \
ChgSel.o \
Create.o \
DelPane.o \
DelSel.o \
Destroy.o \
Error.o \
EvHand.o \
FindPane.o \
FindSel.o \
InsPane.o \
InsSel.o \
Internal.o \
Locate.o \
Post.o \
Recomp.o \
SetAEQ.o \
SetFrz.o \
SetPane.o \
SetSel.o \
XDelAssoc.o XLookAssoc.o XCrAssoc.o XDestAssoc.o XMakeAssoc.o
all:: libXMenu11.a
ALL_CFLAGS=$(C_SWITCH_SITE) $(C_SWITCH_SYSTEM) $(C_SWITCH_MACHINE) \
$(C_SWITCH_X_SITE) $(C_SWITCH_X_SYSTEM) $(C_SWITCH_X_MACHINE) \
$(CPPFLAGS) $(CFLAGS) -DEMACS_BITMAP_FILES \
-I../src -I${srcdir} -I${srcdir}/../src
.c.o:
$(CC) -c ${ALL_CFLAGS} $<
libXMenu11.a: $(OBJS) $(EXTRA)
$(RM) $@
$(AR) $@ $(OBJS) $(EXTRA)
@echo Do not be alarmed if the following ranlib command
@echo fails due to the absence of a ranlib program on your system.
-$(RANLIB) $@ || true
#If running ranlib fails, probably there is none.
#That's ok. So don't stop the build.
Activate.o: Activate.c XMenuInt.h XMenu.h X10.h
AddPane.o: AddPane.c XMenuInt.h XMenu.h X10.h
AddSel.o: AddSel.c XMenuInt.h XMenu.h X10.h
ChgPane.o: ChgPane.c XMenuInt.h XMenu.h X10.h
ChgSel.o: ChgSel.c XMenuInt.h XMenu.h X10.h
Create.o: Create.c XMenuInt.h XMenu.h X10.h
DelPane.o: DelPane.c XMenuInt.h XMenu.h X10.h
DelSel.o: DelSel.c XMenuInt.h XMenu.h X10.h
Destroy.o: Destroy.c XMenuInt.h XMenu.h X10.h
Error.o: Error.c XMenuInt.h XMenu.h X10.h
EvHand.o: EvHand.c XMenuInt.h XMenu.h X10.h
FindPane.o: FindPane.c XMenuInt.h XMenu.h X10.h
FindSel.o: FindSel.c XMenuInt.h XMenu.h X10.h
InsPane.o: InsPane.c XMenuInt.h XMenu.h X10.h
InsSel.o: InsSel.c XMenuInt.h XMenu.h X10.h
Internal.o: Internal.c XMenuInt.h XMenu.h X10.h
Locate.o: Locate.c XMenuInt.h XMenu.h X10.h
Post.o: Post.c XMenuInt.h XMenu.h X10.h
Recomp.o: Recomp.c XMenuInt.h XMenu.h X10.h
SetAEQ.o: SetAEQ.c XMenuInt.h XMenu.h X10.h
SetFrz.o: SetFrz.c XMenuInt.h XMenu.h X10.h
SetPane.o: SetPane.c XMenuInt.h XMenu.h X10.h
SetSel.o: SetSel.c XMenuInt.h XMenu.h X10.h
XDelAssoc.o: XDelAssoc.c X10.h
XLookAssoc.o: XLookAssoc.c X10.h
XCrAssoc.o: XCrAssoc.c X10.h
XDestAssoc.o: XDestAssoc.c X10.h
XMakeAssoc.o: XMakeAssoc.c X10.h
insque.o: insque.c
FRC.mostlyclean:
mostlyclean: FRC.mostlyclean
rm -f libXMenu11.a ${OBJS} ${EXTRA}
clean: mostlyclean
distclean: clean
maintainer-clean: distclean
tags::
$(TAGS) -t *.[ch]

85
oldXMenu/Post.c Normal file
View file

@ -0,0 +1,85 @@
#include "copyright.h"
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/Post.c,v 1.1 1992/04/11 22:10:20 jimb Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
* XMenu: MIT Project Athena, X Window system menu package
*
* XMenuPost - Maps a given menu to the display and activates
* the menu for user selection. The user is allowed to
* specify the mouse button event mask that will be used
* to identify a selection request. When a selection
* request is received (i.e., when the specified mouse
* event occurs) the data returned will be either the
* data associated with the particular selection active
* at the time of the selection request or NULL if no
* selection was active. A menu selection is shown to
* be active by placing a highlight box around the
* selection as the mouse cursor enters its active
* region. Inactive selections will not be highlighted.
* As the mouse cursor moved from one menu pane
* to another menu pane the pane being entered is raised
* and activated and the pane being left is deactivated.
* If an error occurs NULL will be returned with the
* p_num set to POST_ERROR, s_num set to
* NO_SELECTION and _XMErrorCode set to an
* appropriate value.
* Every time the routine returns successfully the
* p_num and s_num indices will be set to indicate
* the currently active pane and/or selection. If the
* mouse was not in a selection window at the time
* s_num will be set to NO_SELECTION.
*
* Author: Tony Della Fera, DEC
* August, 1984
*
*/
#include "XMenuInt.h"
char *
XMenuPost(display, menu, p_num, s_num, x_pos, y_pos, event_mask)
register Display *display; /* Previously opened display. */
register XMenu *menu; /* Menu to post. */
register int *p_num; /* Pane number selected. */
register int *s_num; /* Selection number selected. */
register int x_pos; /* X coordinate of menu position. */
register int y_pos; /* Y coordinate of menu position. */
int event_mask; /* Mouse button event mask. */
{
register int stat; /* Routine call return status. */
char *data; /* Return data. */
/*
* Set up initial pane and selection assumptions.
*/
/*
* Make the procedure call.
*/
stat = XMenuActivate(
display,
menu,
p_num, s_num,
x_pos, y_pos,
event_mask,
&data);
/*
* Check the return value and return accordingly.
*/
switch (stat) {
case XM_FAILURE:
*p_num = POST_ERROR;
*s_num = NO_SELECTION;
return(NULL);
case XM_NO_SELECT:
case XM_IA_SELECT:
*s_num = NO_SELECTION;
return(NULL);
case XM_SUCCESS:
default:
return(data);
}
}

6
oldXMenu/README Normal file
View file

@ -0,0 +1,6 @@
This directory contains the source code for the X11R2 XMenu library.
As of Release 2 of the X Window System, Version 11 from MIT, the XMenu
library no longer supported. It is not used in any software supplied
by MIT and its use is not encouraged.

104
oldXMenu/Recomp.c Normal file
View file

@ -0,0 +1,104 @@
#include "copyright.h"
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/Recomp.c,v 1.1 1992/04/11 22:10:20 jimb Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
* XMenu: MIT Project Athena, X Window system menu package
*
* XMenuRecompute - Recompute XMenu object dependencies.
*
* Author: Tony Della Fera, DEC
* September, 1985
*
*/
#include "XMenuInt.h"
int
XMenuRecompute(display, menu)
Display *display;
register XMenu *menu; /* Menu object to be recomputed. */
{
register XMPane *p_ptr; /* Pane pointer. */
register XMSelect *s_ptr; /* Selection pointer. */
register int p_num; /* Pane serial number. */
register int s_num; /* Selection serial number. */
/*
* If there are no panes in the menu then return failure
* because the menu is not initialized.
*/
if (menu->p_count == 0) {
_XMErrorCode = XME_NOT_INIT;
return(XM_FAILURE);
}
/*
* Recompute menu wide global values: pane window size,
* selection size and maximum selection count.
*/
_XMRecomputeGlobals(display, menu);
/*
* For each pane in the menu...
*/
p_num = 0;
for (
p_ptr = menu->p_list->next;
p_ptr != menu->p_list;
p_ptr = p_ptr->next
){
/*
* Recompute pane dependencies.
*/
if (_XMRecomputePane(display, menu, p_ptr, p_num) == _FAILURE) {
return(XM_FAILURE);
}
p_num++;
/*
* For each selection in the pane...
*/
s_num = 0;
for (
s_ptr = p_ptr->s_list->next;
s_ptr != p_ptr->s_list;
s_ptr = s_ptr->next
) {
/*
* Recompute selection dependencies.
*/
if (_XMRecomputeSelection(display, menu, s_ptr, s_num) == _FAILURE) {
return(XM_FAILURE);
}
s_num++;
}
}
/*
* Recompute menu size.
*/
if (menu->menu_style == CENTER) {
menu->width = menu->p_width + (menu->p_bdr_width << 1);
}
else {
menu->width = menu->p_width + (menu->p_bdr_width << 1) +
((menu->p_count - 1) * menu->p_x_off);
}
menu->height = menu->p_height + (menu->p_bdr_width << 1) +
((menu->p_count - 1) * menu->p_y_off);
/*
* Reset the recompute flag.
*/
menu->recompute = 0;
/*
* Return successfully.
*/
_XMErrorCode = XME_NO_ERROR;
return(XM_SUCCESS);
}

29
oldXMenu/SetAEQ.c Normal file
View file

@ -0,0 +1,29 @@
#include "copyright.h"
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/SetAEQ.c,v 1.1 1992/04/11 22:10:20 jimb Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
* XMenu: MIT Project Athena, X Window system menu package
*
* XMenuSetAEQ - Set Asynchronous event queuing mode.
* When enabled asynchronous events will be queue while
* a menu is being displayed and restored to the X
* event queue when the menu is taken down.
*
* Author: Tony Della Fera, DEC
* March 12, 1986
*
*/
#include "XMenuInt.h"
XMenuSetAEQ(menu, aeq)
register XMenu *menu; /* Menu object to be modified. */
register int aeq; /* AEQ mode? */
{
/*
* Set the AEQ mode switch.
*/
menu->aeq = aeq;
}

28
oldXMenu/SetFrz.c Normal file
View file

@ -0,0 +1,28 @@
#include "copyright.h"
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/SetFrz.c,v 1.1 1992/04/11 22:10:21 jimb Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
* XMenu: MIT Project Athena, X Window system menu package
*
* XMenuSetFreeze - Forcibly set the menu freeze mode switch
* overriding the Xdefaults setting.
* This is necessary in some situations.
*
* Author: Tony Della Fera, DEC
* January 29, 1986
*
*/
#include "XMenuInt.h"
XMenuSetFreeze(menu, freeze)
register XMenu *menu; /* Menu object to be modified. */
register int freeze; /* Freeze mode? */
{
/*
* Set the freeze mode switch.
*/
menu->freeze = freeze;
}

43
oldXMenu/SetPane.c Normal file
View file

@ -0,0 +1,43 @@
#include "copyright.h"
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/SetPane.c,v 1.1 1992/04/11 22:10:21 jimb Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
* XMenu: MIT Project Athena, X Window system menu package
*
* XMenuSetPane - Set a menu pane to be active or inactive.
*
* Author: Tony Della Fera, DEC
* August, 1985
*
*/
#include "XMenuInt.h"
int
XMenuSetPane(menu, p_num, active)
register XMenu *menu; /* Menu object to be modified. */
register int p_num; /* Pane number to be modified. */
register int active; /* Make selection active? */
{
register XMPane *p_ptr; /* XMPane pointer. */
/*
* Find the right pane.
*/
p_ptr = _XMGetPanePtr(menu, p_num);
if (p_ptr == NULL) return(XM_FAILURE);
/*
* Set its active switch.
*/
p_ptr->active = active;
if (p_ptr->active == False) p_ptr->activated = False;
/*
* Return the pane number just set.
*/
_XMErrorCode = XME_NO_ERROR;
return(p_num);
}

50
oldXMenu/SetSel.c Normal file
View file

@ -0,0 +1,50 @@
#include "copyright.h"
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/SetSel.c,v 1.1 1992/04/11 22:10:21 jimb Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
* XMenu: MIT Project Athena, X Window system menu package
*
* XMenuSetSelection - Set a menu selection to be active or inactive.
*
* Author: Tony Della Fera, DEC
* August, 1985
*
*/
#include "XMenuInt.h"
int
XMenuSetSelection(menu, p_num, s_num, active)
register XMenu *menu; /* Menu object to be modified. */
register int p_num; /* Pane number to be modified. */
register int s_num; /* Selection number to modified. */
int active; /* Make selection active? */
{
register XMPane *p_ptr; /* XMPane pointer. */
register XMSelect *s_ptr; /* XMSelect pointer. */
/*
* Find the right pane.
*/
p_ptr = _XMGetPanePtr(menu, p_num);
if (p_ptr == NULL) return(XM_FAILURE);
/*
* Find the right selection.
*/
s_ptr = _XMGetSelectionPtr(p_ptr, s_num);
if (s_ptr == NULL) return(XM_FAILURE);
/*
* Set its active switch.
*/
s_ptr->active = active;
/*
* Return the selection number just set.
*/
_XMErrorCode = XME_NO_ERROR;
return(s_num);
}

78
oldXMenu/X10.h Normal file
View file

@ -0,0 +1,78 @@
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/X10.h,v 1.1 1992/04/11 22:10:21 jimb Exp $ */
/*
* Copyright 1985, 1986, 1987 by the Massachusetts Institute of Technology
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in advertising
* or publicity pertaining to distribution of the software without specific,
* written prior permission. M.I.T. makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*
* The X Window System is a Trademark of MIT.
*
*/
/*
* X10.h - Header definition and support file for the C subroutine
* interface library for V10 support routines.
*/
#ifndef _X10_H_
#define _X10_H_
/* Used in XDraw and XDrawFilled */
typedef struct {
short x, y;
unsigned short flags;
} Vertex;
/* The meanings of the flag bits. If the bit is 1 the predicate is true */
#define VertexRelative 0x0001 /* else absolute */
#define VertexDontDraw 0x0002 /* else draw */
#define VertexCurved 0x0004 /* else straight */
#define VertexStartClosed 0x0008 /* else not */
#define VertexEndClosed 0x0010 /* else not */
/*#define VertexDrawLastPoint 0x0020 */ /* else don't */
/*
The VertexDrawLastPoint option has not been implemented in XDraw and
XDrawFilled so it shouldn't be defined.
*/
/*
* XAssoc - Associations used in the XAssocTable data structure. The
* associations are used as circular queue entries in the association table
* which is contains an array of circular queues (buckets).
*/
typedef struct _XAssoc {
struct _XAssoc *next; /* Next object in this bucket. */
struct _XAssoc *prev; /* Previous obejct in this bucket. */
Display *display; /* Display which owns the id. */
XID x_id; /* X Window System id. */
char *data; /* Pointer to untyped memory. */
} XAssoc;
/*
* XAssocTable - X Window System id to data structure pointer association
* table. An XAssocTable is a hash table whose buckets are circular
* queues of XAssoc's. The XAssocTable is constructed from an array of
* XAssoc's which are the circular queue headers (bucket headers).
* An XAssocTable consists an XAssoc pointer that points to the first
* bucket in the bucket array and an integer that indicates the number
* of buckets in the array.
*/
typedef struct {
XAssoc *buckets; /* Pointer to first bucket in bucket array.*/
int size; /* Table size (number of buckets). */
} XAssocTable;
XAssocTable *XCreateAssocTable();
char *XLookUpAssoc();
#endif /* _X10_H_ */

68
oldXMenu/XCrAssoc.c Normal file
View file

@ -0,0 +1,68 @@
/* $XConsortium: XCrAssoc.c,v 10.17 91/01/06 12:04:57 rws Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
Permission to use, copy, modify, distribute, and sell this software and its
documentation for any purpose is hereby granted without fee, provided that
the above copyright notice appear in all copies and that both that
copyright notice and this permission notice appear in supporting
documentation, and that the name of M.I.T. not be used in advertising or
publicity pertaining to distribution of the software without specific,
written prior permission. M.I.T. makes no representations about the
suitability of this software for any purpose. It is provided "as is"
without express or implied warranty.
*/
#include <config.h>
#include <X11/Xlib.h>
#include <errno.h>
#include "X10.h"
#ifndef NULL
#define NULL 0
#endif
extern int errno;
/*
* XCreateAssocTable - Create an XAssocTable. The size argument should be
* a power of two for efficiency reasons. Some size suggestions: use 32
* buckets per 100 objects; a reasonable maximum number of object per
* buckets is 8. If there is an error creating the XAssocTable, a NULL
* pointer is returned.
*/
XAssocTable *XCreateAssocTable(size)
register int size; /* Desired size of the table. */
{
register XAssocTable *table; /* XAssocTable to be initialized. */
register XAssoc *buckets; /* Pointer to the first bucket in */
/* the bucket array. */
/* Malloc the XAssocTable. */
if ((table = (XAssocTable *)malloc(sizeof(XAssocTable))) == NULL) {
/* malloc call failed! */
errno = ENOMEM;
return(NULL);
}
/* calloc the buckets (actually just their headers). */
buckets = (XAssoc *)calloc((unsigned)size, (unsigned)sizeof(XAssoc));
if (buckets == NULL) {
/* calloc call failed! */
errno = ENOMEM;
return(NULL);
}
/* Insert table data into the XAssocTable structure. */
table->buckets = buckets;
table->size = size;
while (--size >= 0) {
/* Initialize each bucket. */
buckets->prev = buckets;
buckets->next = buckets;
buckets++;
}
return(table);
}

71
oldXMenu/XDelAssoc.c Normal file
View file

@ -0,0 +1,71 @@
/* $XConsortium: XDelAssoc.c,v 10.19 91/01/06 12:06:39 rws Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
Permission to use, copy, modify, distribute, and sell this software and its
documentation for any purpose is hereby granted without fee, provided that
the above copyright notice appear in all copies and that both that
copyright notice and this permission notice appear in supporting
documentation, and that the name of M.I.T. not be used in advertising or
publicity pertaining to distribution of the software without specific,
written prior permission. M.I.T. makes no representations about the
suitability of this software for any purpose. It is provided "as is"
without express or implied warranty.
*/
#include <X11/Xlib.h>
#include "X10.h"
void emacs_remque();
struct qelem {
struct qelem *q_forw;
struct qelem *q_back;
char q_data[1];
};
/*
* XDeleteAssoc - Delete an association in an XAssocTable keyed on
* an XId. An association may be removed only once. Redundant
* deletes are meaningless (but cause no problems).
*/
XDeleteAssoc(dpy, table, x_id)
register Display *dpy;
register XAssocTable *table;
register XID x_id;
{
int hash;
register XAssoc *bucket;
register XAssoc *Entry;
/* Hash the XId to get the bucket number. */
hash = x_id & (table->size - 1);
/* Look up the bucket to get the entries in that bucket. */
bucket = &table->buckets[hash];
/* Get the first entry in the bucket. */
Entry = bucket->next;
/* Scan through the entries in the bucket for the right XId. */
for (; Entry != bucket; Entry = Entry->next) {
if (Entry->x_id == x_id) {
/* We have the right XId. */
if (Entry->display == dpy) {
/* We have the right display. */
/* We have the right entry! */
/* Remove it from the queue and */
/* free the entry. */
emacs_remque((struct qelem *)Entry);
free((char *)Entry);
return;
}
/* Oops, identical XId's on different displays! */
continue;
}
if (Entry->x_id > x_id) {
/* We have gone past where it should be. */
/* It is apparently not in the table. */
return;
}
}
/* It is apparently not in the table. */
return;
}

49
oldXMenu/XDestAssoc.c Normal file
View file

@ -0,0 +1,49 @@
/* $XConsortium: XDestAssoc.c,v 10.17 91/02/08 13:11:50 rws Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
Permission to use, copy, modify, distribute, and sell this software and its
documentation for any purpose is hereby granted without fee, provided that
the above copyright notice appear in all copies and that both that
copyright notice and this permission notice appear in supporting
documentation, and that the name of M.I.T. not be used in advertising or
publicity pertaining to distribution of the software without specific,
written prior permission. M.I.T. makes no representations about the
suitability of this software for any purpose. It is provided "as is"
without express or implied warranty.
*/
#include <X11/Xlib.h>
#include "X10.h"
/*
* XDestroyAssocTable - Destroy (free the memory associated with)
* an XAssocTable.
*/
XDestroyAssocTable(table)
register XAssocTable *table;
{
register int i;
register XAssoc *bucket;
register XAssoc *Entry, *entry_next;
/* Free the buckets. */
for (i = 0; i < table->size; i++) {
bucket = &table->buckets[i];
for (
Entry = bucket->next;
Entry != bucket;
Entry = entry_next
) {
entry_next = Entry->next;
free((char *)Entry);
}
}
/* Free the bucket array. */
free((char *)table->buckets);
/* Free the table. */
free((char *)table);
}

68
oldXMenu/XLookAssoc.c Normal file
View file

@ -0,0 +1,68 @@
/* $XConsortium: XLookAssoc.c,v 10.16 91/01/06 12:09:24 rws Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
Permission to use, copy, modify, distribute, and sell this software and its
documentation for any purpose is hereby granted without fee, provided that
the above copyright notice appear in all copies and that both that
copyright notice and this permission notice appear in supporting
documentation, and that the name of M.I.T. not be used in advertising or
publicity pertaining to distribution of the software without specific,
written prior permission. M.I.T. makes no representations about the
suitability of this software for any purpose. It is provided "as is"
without express or implied warranty.
*/
#include <X11/Xlib.h>
#include <X11/Xresource.h>
#include "X10.h"
#ifndef NULL
#define NULL 0
#endif
/*
* XLookUpAssoc - Retrieve the data stored in an XAssocTable by its XId.
* If an appropriately matching XId can be found in the table the routine will
* return apointer to the data associated with it. If the XId can not be found
* in the table the routine will return a NULL pointer. All XId's are relative
* to the currently active Display.
*/
caddr_t XLookUpAssoc(dpy, table, x_id)
register Display *dpy;
register XAssocTable *table; /* XAssocTable to search in. */
register XID x_id; /* XId to search for. */
{
int hash;
register XAssoc *bucket;
register XAssoc *Entry;
/* Hash the XId to get the bucket number. */
hash = x_id & (table->size - 1);
/* Look up the bucket to get the entries in that bucket. */
bucket = &table->buckets[hash];
/* Get the first entry in the bucket. */
Entry = bucket->next;
/* Scan through the entries in the bucket for the right XId. */
for (; Entry != bucket; Entry = Entry->next) {
if (Entry->x_id == x_id) {
/* We have the right XId. */
if (Entry->display == dpy) {
/* We have the right display. */
/* We have the right entry! */
return(Entry->data);
}
/* Oops, identical XId's on different displays! */
continue;
}
if (Entry->x_id > x_id) {
/* We have gone past where it should be. */
/* It is apparently not in the table. */
return(NULL);
}
}
/* It is apparently not in the table. */
return(NULL);
}

102
oldXMenu/XMakeAssoc.c Normal file
View file

@ -0,0 +1,102 @@
/* $XConsortium: XMakeAssoc.c,v 10.18 91/01/06 12:09:28 rws Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
Permission to use, copy, modify, distribute, and sell this software and its
documentation for any purpose is hereby granted without fee, provided that
the above copyright notice appear in all copies and that both that
copyright notice and this permission notice appear in supporting
documentation, and that the name of M.I.T. not be used in advertising or
publicity pertaining to distribution of the software without specific,
written prior permission. M.I.T. makes no representations about the
suitability of this software for any purpose. It is provided "as is"
without express or implied warranty.
*/
#include <config.h>
#include <X11/Xlib.h>
#include <X11/Xresource.h>
#include "X10.h"
#include <errno.h>
#ifndef NULL
#define NULL 0
#endif
extern int errno;
void emacs_insque();
struct qelem {
struct qelem *q_forw;
struct qelem *q_back;
char q_data[1];
};
/*
* XMakeAssoc - Insert data into an XAssocTable keyed on an XId.
* Data is inserted into the table only once. Redundant inserts are
* meaningless (but cause no problems). The queue in each association
* bucket is sorted (lowest XId to highest XId).
*/
XMakeAssoc(dpy, table, x_id, data)
register Display *dpy;
register XAssocTable *table;
register XID x_id;
register caddr_t data;
{
int hash;
register XAssoc *bucket;
register XAssoc *Entry;
register XAssoc *new_entry;
/* Hash the XId to get the bucket number. */
hash = x_id & (table->size - 1);
/* Look up the bucket to get the entries in that bucket. */
bucket = &table->buckets[hash];
/* Get the first entry in the bucket. */
Entry = bucket->next;
/* If (Entry != bucket), the bucket is empty so make */
/* the new entry the first entry in the bucket. */
/* if (Entry == bucket), the we have to search the */
/* bucket. */
if (Entry != bucket) {
/* The bucket isn't empty, begin searching. */
/* If we leave the for loop then we have either passed */
/* where the entry should be or hit the end of the bucket. */
/* In either case we should then insert the new entry */
/* before the current value of "Entry". */
for (; Entry != bucket; Entry = Entry->next) {
if (Entry->x_id == x_id) {
/* Entry has the same XId... */
if (Entry->display == dpy) {
/* Entry has the same Display... */
/* Therefore there is already an */
/* entry with this XId and Display, */
/* reset its data value and return. */
Entry->data = data;
return;
}
/* We found an association with the right */
/* id but the wrong display! */
continue;
}
/* If the current entry's XId is greater than the */
/* XId of the entry to be inserted then we have */
/* passed the location where the new XId should */
/* be inserted. */
if (Entry->x_id > x_id) break;
}
}
/* If we are here then the new entry should be inserted just */
/* before the current value of "Entry". */
/* Create a new XAssoc and load it with new provided data. */
new_entry = (XAssoc *) xmalloc(sizeof(XAssoc));
new_entry->display = dpy;
new_entry->x_id = x_id;
new_entry->data = data;
/* Insert the new entry. */
emacs_insque((struct qelem *)new_entry, (struct qelem *)Entry->prev);
}

262
oldXMenu/XMenu.h Normal file
View file

@ -0,0 +1,262 @@
#include "copyright.h"
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/XMenu.h,v 1.1 1992/04/11 22:10:21 jimb Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
* XMenu: MIT Project Athena, X Window system menu package
*
* XMenu.h - Include file for the MIT Project Athena
* XMenu X window system menu package.
*
* Author: Tony Della Fera, DEC
* August, 1984
*/
#ifndef _XMenu_h_
#define _XMenu_h_
#include <X11/Xutil.h>
#include "X10.h"
#define FAILURE -1
#define SUCCESS 1
#define POST_ERROR -1
#define NO_SELECTION -1
#define XM_FAILURE -1
#define XM_SUCCESS 1
#define XM_NO_SELECT 2
#define XM_IA_SELECT 3
#define XME_CODE_COUNT 17
#define XME_NO_ERROR 0
#define XME_NOT_INIT 1
#define XME_ARG_BOUNDS 2
#define XME_P_NOT_FOUND 3
#define XME_S_NOT_FOUND 4
#define XME_STYLE_PARAM 5
#define XME_GRAB_MOUSE 6
#define XME_INTERP_LOC 7
#define XME_CALLOC 8
#define XME_CREATE_ASSOC 9
#define XME_STORE_BITMAP 10
#define XME_MAKE_TILES 11
#define XME_MAKE_PIXMAP 12
#define XME_CREATE_CURSOR 13
#define XME_OPEN_FONT 14
#define XME_CREATE_WINDOW 15
#define XME_CREATE_TRANSP 16
/*
* XMenu error code and error list definitions.
*/
extern int _XMErrorCode;
extern char *_XMErrorList[];
/*
* Define the XMWindow datatypes.
*
* An XMWindow is either an XMPane or an XMSelect.
*
* XMWindow is wrapper used to identify the constant window
* information that makes up XMPane and XMSelect objects.
*
* An XMPane is a menu pane made up of one or more XMSelect and a label.
*
* An XMSelect is a menu selection object with a label and a data pointer.
*/
typedef enum _xmwintype {PANE, SELECTION, PL_HEADER, SL_HEADER, SEPARATOR} XMWType;
typedef struct _xmwindow {
struct _xmwindow *next; /* Next obj pointer (for emacs_insque). */
struct _xmwindow *prev; /* Prev obj pointer (for emacs_insque). */
XMWType type; /* Type of window. */
Window window; /* X Window Id. */
int window_x; /* Window upper left X coordinate. */
int window_y; /* Window upper left y coordinate. */
int window_w; /* Window width. */
int window_h; /* Window height. */
int active; /* Window active? */
int activated; /* Window activated? */
int pad_l1; /* ---- */
char *pad_l2; /* ---- */
int pad_l3; /* ---- */
int pad_l4; /* ---- */
int pad_l5; /* ---- */
int pad_l6; /* ---- */
int pad_l7; /* ---- */
int pad_l8; /* ---- */
struct _xmwindow *pad_l9; /* ---- */
char *pad_l10; /* ---- */
struct _xmwindow *pad_l11; /* ---- */
} XMWindow;
typedef struct _xmpane {
struct _xmpane *next; /* Next obj pointer (for emacs_insque). */
struct _xmpane *prev; /* Prev obj pointer (for emacs_insque). */
XMWType type; /* Type of window. */
Window window; /* X Window Id. */
int window_x; /* Window upper left X coordinate. */
int window_y; /* Window upper left y coordinate. */
int window_w; /* Window width. */
int window_h; /* Window height. */
int active; /* Window active? */
int activated; /* Window activated? */
int serial; /* -- Pane serial number. */
char *label; /* -- Pane label. */
int label_width; /* -- Pane label width in pixels. */
int label_length; /* -- Pane label length in chars. */
int label_x; /* -- Pane label X offset. */
int label_uy; /* -- Pane label upper Y offset. */
int label_ly; /* -- Pane label lower Y offset. */
int s_count; /* -- Selections in this pane. */
struct _xmselect *s_list; /* -- Selection window list. */
char *pad_l10; /* ---- */
struct _xmwindow *pad_l11; /* ---- */
} XMPane;
typedef struct _xmselect {
struct _xmselect *next; /* Next obj pointer (for emacs_insque). */
struct _xmselect *prev; /* Prev obj pointer (for emacs_insque). */
XMWType type; /* Type of window. */
Window window; /* X Window Id. */
Window parent; /* X Window id of parent window. */
int window_x; /* Window upper left X coordinate. */
int window_y; /* Window upper left y coordinate. */
int window_w; /* Window width. */
int window_h; /* Window height. */
int active; /* Window active? */
int activated; /* Window activated? */
int serial; /* -- Selection serial number. */
char *label; /* -- Selection label. */
int label_width; /* -- Selection label width in pixels. */
int label_length; /* -- Selection label length in chars. */
int label_x; /* -- Selection label X offset. */
int label_y; /* -- Selection label Y offset. */
int pad_l7; /* ---- */
int pad_l8; /* ---- */
struct _xmwindow *pad_l9; /* ---- */
char *data; /* -- Selection data pointer. */
struct _xmpane *parent_p; /* -- Selection parent pane structure. */
} XMSelect;
/*
* Define the XMStyle datatype.
*
* Menu presentation style information.
*
*/
typedef enum _xmstyle {
LEFT, /* Left oriented obejct. */
RIGHT, /* Right oriented obejct. */
CENTER /* Center oriented object. */
} XMStyle;
/*
* Define the XMMode datatype.
*
* Menu presentation mode information.
*
*/
typedef enum _xmmode {
BOX, /* BOXed graphic rendition. */
INVERT /* INVERTed graphic rendition. */
} XMMode;
/*
* Define the XMenu datatype.
*
* All dimensions are in pixels unless otherwise noted.
*/
typedef struct _xmenu {
/* -------------------- Menu data -------------------- */
XMStyle menu_style; /* Menu display style. */
XMMode menu_mode; /* Menu display mode. */
int freeze; /* Freeze server mode? */
int aeq; /* Asynchronous Event Queuing mode? */
int recompute; /* Recompute menu dependencies? */
Window parent; /* Menu's parent window. */
int width; /* Overall menu width. */
int height; /* Overall menu height. */
int x_pos; /* Oveall menu origin. */
int y_pos; /* Overall menu origin. */
Cursor mouse_cursor; /* Mouse cursor raster. */
XAssocTable *assoc_tab; /* XMWindow association table. */
XMPane *p_list; /* List of XMPanes. */
/* -------------------- Pane window data -------------------- */
XMStyle p_style; /* Pane display style. */
int p_events; /* Pane window X events. */
XFontStruct *p_fnt_info; /* Flag font info structure. */
GC pane_GC; /* Pane graphics context. */
int p_fnt_pad; /* Fixed flag font padding in pixels. */
double p_spread; /* Pane spread in flag height fractions. */
int p_bdr_width; /* Pane border width. */
int flag_height; /* Flag height. */
int p_width; /* Menu pane width. */
int p_height; /* Menu pane height. */
int p_x_off; /* Pane window X offset. */
int p_y_off; /* Pane window Y offset. */
int p_count; /* Number of panes per menu. */
/* -------------------- Selection window data -------------------- */
XMStyle s_style; /* Selection display style. */
int s_events; /* Selection window X events. */
XFontStruct *s_fnt_info; /* Body font info structure. */
int s_fnt_pad; /* Fixed body font padding in pixels. */
double s_spread; /* Select spread in line height fractions. */
int s_bdr_width; /* Select border width. */
int s_width; /* Selection window width. */
int s_height; /* Selection window height. */
int s_x_off; /* Selection window X offset. */
int s_y_off; /* Selection window Y offset. */
int s_count; /* Maximum number of selections per pane. */
GC normal_select_GC; /* GC used for inactive selections. */
GC inverse_select_GC; /* GC used for active (current) selection. */
GC inact_GC; /* GC used for inactive selections and */
/* panes headers. */
/* -------------------- Color data -------------------- */
unsigned long p_bdr_color; /* Color of pane border pixmap. */
unsigned long s_bdr_color; /* Color of selection border pixmap. */
unsigned long p_frg_color; /* Color of pane foreground pixmap. */
unsigned long s_frg_color; /* Color of selection pixmap. */
unsigned long bkgnd_color; /* Color of menu background pixmap. */
/* -------------------- Pixmap data -------------------- */
Pixmap p_bdr_pixmap; /* Pane border pixmap. */
Pixmap s_bdr_pixmap; /* Selection border pixmap. */
Pixmap p_frg_pixmap; /* Pane foreground pixmap. */
Pixmap s_frg_pixmap; /* Selection foreground pixmap. */
Pixmap bkgnd_pixmap; /* Menu background pixmap. */
Pixmap inact_pixmap; /* Menu inactive pixmap. */
} XMenu;
/*
* XMenu library routine declarations.
*/
XMenu *XMenuCreate();
int XMenuAddPane();
int XMenuAddSelection();
int XMenuInsertPane();
int XMenuInsertSelection();
int XMenuFindPane();
int XMenuFindSelection();
int XMenuChangePane();
int XMenuChangeSelection();
int XMenuSetPane();
int XMenuSetSelection();
int XMenuRecompute();
int XMenuEventHandler(); /* No value actually returned. */
int XMenuLocate();
int XMenuSetFreeze(); /* No value actually returned. */
int XMenuActivate();
char *XMenuPost();
int XMenuDeletePane();
int XMenuDeleteSelection();
int XMenuDestroy(); /* No value actually returned. */
char *XMenuError();
#endif
/* Don't add after this point. */

63
oldXMenu/XMenuInt.h Normal file
View file

@ -0,0 +1,63 @@
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/XMenuInt.h,v 1.3 1992/10/10 16:05:10 jimb Exp $ */
/* Copyright Massachusetts Institute of Technology 1985 */
/*
* XMenu: MIT Project Athena, X Window system menu package
*
* XMenuInternal.h - Internal menu system include file for the
* MIT Project Athena XMenu X window system
* menu package.
*
* Author: Tony Della Fera, DEC
* October, 1985
*/
#ifndef _XMenuInternal_h_
#define _XMenuInternal_h_
/* Avoid warnings about redefining NULL by including <stdio.h> first;
the other file which wants to define it (<stddef.h> on Ultrix
systems) can deal if NULL is already defined, but <stdio.h> can't. */
#include <stdio.h>
#include <X11/Xlib.h>
#include "X10.h"
#include "XMenu.h"
#define min(x, y) ((x) <= (y) ? (x) : (y))
#define max(x, y) ((x) >= (y) ? (x) : (y))
#define abs(a) ((a) < 0 ? -(a) : (a))
#define _X_FAILURE -1
#define _SUCCESS 1
#define _FAILURE -1
/*
* XMenu internal event handler variable.
*/
extern int (*_XMEventHandler)();
#ifndef Pixel
#define Pixel unsigned long
#endif
/*
* Internal routine declarations.
*/
int _XMWinQueInit(); /* No value actually returned. */
int _XMWinQueAddPane();
int _XMWinQueAddSelection();
int _XMWinQueFlush();
XMPane *_XMGetPanePtr();
XMSelect *_XMGetSelectionPtr();
int _XMRecomputeGlobals(); /* No value actually returned. */
int _XMRecomputePane();
int _XMRecomputeSelection();
int _XMTransToOrigin(); /* No value actually returned. */
int _XMRefreshPane(); /* No value actually returned. */
int _XMRefreshSelections(); /* No value actually returned. */
int _XMHighlightSelection(); /* No value actually returned. */
#endif
/* Don't add stuff after this #endif */

66
oldXMenu/compile.com Normal file
View file

@ -0,0 +1,66 @@
$! This file was autogenerated with the command:
$!
$! mms/noaction/output = compile.com
$ if f$search("ACTIVATE.OBJ") then delete ACTIVATE.OBJ.*
$ cc /obj=ACTIVATE.OBJ /NOLIST/OBJECT=ACTIVATE.OBJ ACTIVATE.c
$ if f$search("ADDPANE.OBJ") then delete ADDPANE.OBJ.*
$ cc /obj=ADDPANE.OBJ /NOLIST/OBJECT=ADDPANE.OBJ ADDPANE.c
$ if f$search("ADDSEL.OBJ") then delete ADDSEL.OBJ.*
$ cc /obj=ADDSEL.OBJ /NOLIST/OBJECT=ADDSEL.OBJ ADDSEL.c
$ if f$search("CHGPANE.OBJ") then delete CHGPANE.OBJ.*
$ cc /obj=CHGPANE.OBJ /NOLIST/OBJECT=CHGPANE.OBJ CHGPANE.c
$ if f$search("CHGSEL.OBJ") then delete CHGSEL.OBJ.*
$ cc /obj=CHGSEL.OBJ /NOLIST/OBJECT=CHGSEL.OBJ CHGSEL.c
$ if f$search("CREATE.OBJ") then delete CREATE.OBJ.*
$ cc /obj=CREATE.OBJ /NOLIST/OBJECT=CREATE.OBJ CREATE.c
$ if f$search("DELPANE.OBJ") then delete DELPANE.OBJ.*
$ cc /obj=DELPANE.OBJ /NOLIST/OBJECT=DELPANE.OBJ DELPANE.c
$ if f$search("DELSEL.OBJ") then delete DELSEL.OBJ.*
$ cc /obj=DELSEL.OBJ /NOLIST/OBJECT=DELSEL.OBJ DELSEL.c
$ if f$search("DESTROY.OBJ") then delete DESTROY.OBJ.*
$ cc /obj=DESTROY.OBJ /NOLIST/OBJECT=DESTROY.OBJ DESTROY.c
$ if f$search("ERROR.OBJ") then delete ERROR.OBJ.*
$ cc /obj=ERROR.OBJ /NOLIST/OBJECT=ERROR.OBJ ERROR.c
$ if f$search("EVHAND.OBJ") then delete EVHAND.OBJ.*
$ cc /obj=EVHAND.OBJ /NOLIST/OBJECT=EVHAND.OBJ EVHAND.c
$ if f$search("FINDPANE.OBJ") then delete FINDPANE.OBJ.*
$ cc /obj=FINDPANE.OBJ /NOLIST/OBJECT=FINDPANE.OBJ FINDPANE.c
$ if f$search("FINDSEL.OBJ") then delete FINDSEL.OBJ.*
$ cc /obj=FINDSEL.OBJ /NOLIST/OBJECT=FINDSEL.OBJ FINDSEL.c
$ if f$search("INSPANE.OBJ") then delete INSPANE.OBJ.*
$ cc /obj=INSPANE.OBJ /NOLIST/OBJECT=INSPANE.OBJ INSPANE.c
$ if f$search("INSSEL.OBJ") then delete INSSEL.OBJ.*
$ cc /obj=INSSEL.OBJ /NOLIST/OBJECT=INSSEL.OBJ INSSEL.c
$ if f$search("INTERNAL.OBJ") then delete INTERNAL.OBJ.*
$ cc /obj=INTERNAL.OBJ /NOLIST/OBJECT=INTERNAL.OBJ INTERNAL.c
$ if f$search("LOCATE.OBJ") then delete LOCATE.OBJ.*
$ cc /obj=LOCATE.OBJ /NOLIST/OBJECT=LOCATE.OBJ LOCATE.c
$ if f$search("POST.OBJ") then delete POST.OBJ.*
$ cc /obj=POST.OBJ /NOLIST/OBJECT=POST.OBJ POST.c
$ if f$search("RECOMP.OBJ") then delete RECOMP.OBJ.*
$ cc /obj=RECOMP.OBJ /NOLIST/OBJECT=RECOMP.OBJ RECOMP.c
$ if f$search("SETAEQ.OBJ") then delete SETAEQ.OBJ.*
$ cc /obj=SETAEQ.OBJ /NOLIST/OBJECT=SETAEQ.OBJ SETAEQ.c
$ if f$search("SETFRZ.OBJ") then delete SETFRZ.OBJ.*
$ cc /obj=SETFRZ.OBJ /NOLIST/OBJECT=SETFRZ.OBJ SETFRZ.c
$ if f$search("SETPANE.OBJ") then delete SETPANE.OBJ.*
$ cc /obj=SETPANE.OBJ /NOLIST/OBJECT=SETPANE.OBJ SETPANE.c
$ if f$search("SETSEL.OBJ") then delete SETSEL.OBJ.*
$ cc /obj=SETSEL.OBJ /NOLIST/OBJECT=SETSEL.OBJ SETSEL.c
$ if f$search("XDELASSOC.OBJ") then delete XDELASSOC.OBJ.*
$ cc /obj=XDELASSOC.OBJ /NOLIST/OBJECT=XDELASSOC.OBJ XDELASSOC.c
$ if f$search("XLOOKASSOC.OBJ") then delete XLOOKASSOC.OBJ.*
$ cc /obj=XLOOKASSOC.OBJ /NOLIST/OBJECT=XLOOKASSOC.OBJ XLOOKASSOC.c
$ if f$search("XCRASSOC.OBJ") then delete XCRASSOC.OBJ.*
$ cc /obj=XCRASSOC.OBJ /NOLIST/OBJECT=XCRASSOC.OBJ XCRASSOC.c
$ if f$search("XDESTASSOC.OBJ") then delete XDESTASSOC.OBJ.*
$ cc /obj=XDESTASSOC.OBJ /NOLIST/OBJECT=XDESTASSOC.OBJ XDESTASSOC.c
$ if f$search("XMAKEASSOC.OBJ") then delete XMAKEASSOC.OBJ.*
$ cc /obj=XMAKEASSOC.OBJ /NOLIST/OBJECT=XMAKEASSOC.OBJ XMAKEASSOC.c
$ if f$search("INSQUE.OBJ") then delete INSQUE.OBJ.*
$ cc /obj=INSQUE.OBJ /NOLIST/OBJECT=INSQUE.OBJ INSQUE.c
$ if f$search("LIBXMENU11.OLB") then delete LIBXMENU11.OLB.*
$ library/insert/create LIBXMENU11.OLB Activate.obj, AddPane.obj, AddSel.obj, ChgPane.obj, ChgSel.obj, Create.obj, DelPane.obj, DelSel.obj, Destroy.obj, Error.obj, EvHand.obj, FindPane.obj, FindSel.obj, InsPane.obj, InsSel.obj, Internal.-
obj, Locate.obj, Post.obj, Recomp.obj, SetAEQ.obj, SetFrz.obj, SetPane.obj, SetSel.obj, XDelAssoc.obj, XLookAssoc.obj, XCrAssoc.obj, XDestAssoc.obj, XMakeAssoc.obj
$ if ("insque.obj" .nes. "") then library/insert LIBXMENU11.OLB insque.obj
$ !

19
oldXMenu/copyright.h Normal file
View file

@ -0,0 +1,19 @@
/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/copyright.h,v 1.1 1992/04/11 22:10:22 jimb Exp $ */
/*
Copyright 1985, 1986, 1987 by the Massachusetts Institute of Technology
Permission to use, copy, modify, and distribute this
software and its documentation for any purpose and without
fee is hereby granted, provided that the above copyright
notice appear in all copies and that both that copyright
notice and this permission notice appear in supporting
documentation, and that the name of M.I.T. not be used in
advertising or publicity pertaining to distribution of the
software without specific, written prior permission.
M.I.T. makes no representations about the suitability of
this software for any purpose. It is provided "as is"
without express or implied warranty.
*/

88
oldXMenu/descrip.mms Normal file
View file

@ -0,0 +1,88 @@
!# Uncomment following line if linking temacs complains about missing insque.
EXTRA=insque.obj
AS = as
CC = cc
LD = link
TAGS = etags
RM = delete
MV = rename
AR = library/insert
MAKE = mms
STD_DEFINES =
CDEBUGFLAGS = /debug/noopt
RM_CMD = $(RM) *.BAK.*, *.obj.*
SRCS = Activate.c, -
AddPane.c, -
AddSel.c, -
ChgPane.c, -
ChgSel.c, -
Create.c, -
DelPane.c, -
DelSel.c, -
Destroy.c, -
Error.c, -
EvHand.c, -
FindPane.c, -
FindSel.c, -
InsPane.c, -
InsSel.c, -
Internal.c, -
Locate.c, -
Post.c, -
Recomp.c, -
SetAEQ.c, -
SetFrz.c, -
SetPane.c, -
SetSel.c, -
XDelAssoc.c, XLookAssoc.c, XCrAssoc.c, XDestAssoc.c, XMakeAssoc.c
OBJS = Activate.obj, -
AddPane.obj, -
AddSel.obj, -
ChgPane.obj, -
ChgSel.obj, -
Create.obj, -
DelPane.obj, -
DelSel.obj, -
Destroy.obj, -
Error.obj, -
EvHand.obj, -
FindPane.obj, -
FindSel.obj, -
InsPane.obj, -
InsSel.obj, -
Internal.obj, -
Locate.obj, -
Post.obj, -
Recomp.obj, -
SetAEQ.obj, -
SetFrz.obj, -
SetPane.obj, -
SetSel.obj, -
XDelAssoc.obj, XLookAssoc.obj, XCrAssoc.obj, XDestAssoc.obj, -
XMakeAssoc.obj
.c.obj :
if f$search("$@") then $(RM) $@.*
$(CC) /obj=$@ $(CFLAGS) $*.c
all :: libXMenu11.olb
!
libXMenu11.olb : $(OBJS) $(EXTRA)
if f$search("$@") then $(RM) $@.*
$(AR)/create $@ $(OBJS)
if ("$(EXTRA)" .nes. "") then $(AR) $@ $(EXTRA)
#If running ranlib fails, probably there is none.
#That's ok. So don't stop the build.
distclean : clean
!
clean ::
$(RM_CMD) \#* libXMenu11.a *.obj,
tags ::
$(TAGS) -t *.[ch]

38
oldXMenu/insque.c Normal file
View file

@ -0,0 +1,38 @@
/* This file implements the emacs_insque and emacs_remque functions,
copies of the insque and remque functions of BSD. They and all
their callers have been renamed to emacs_mumble to allow us to
include this file in the menu library on all systems. */
struct qelem {
struct qelem *q_forw;
struct qelem *q_back;
char q_data[1];
};
/* Insert ELEM into a doubly-linked list, after PREV. */
void
emacs_insque (elem, prev)
struct qelem *elem, *prev;
{
struct qelem *next = prev->q_forw;
prev->q_forw = elem;
if (next)
next->q_back = elem;
elem->q_forw = next;
elem->q_back = prev;
}
/* Unlink ELEM from the doubly-linked list that it is in. */
emacs_remque (elem)
struct qelem *elem;
{
struct qelem *next = elem->q_forw;
struct qelem *prev = elem->q_back;
if (next)
next->q_back = prev;
if (prev)
prev->q_forw = next;
}