⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 windows.c

📁 如果RH
💻 C
字号:
/***************************************************************************** * *  xdbx - X Window System interface to dbx * *  Copyright 1989, 1990 The University of Texas at Austin * *  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 The University of Texas *  not be used in advertising or publicity pertaining to distribution of *  the software without specific, written prior permission.  The *  University of Texas makes no representations about the suitability of *  this software for any purpose.  It is provided "as is" without express *  or implied warranty. * *  THE UNIVERSITY OF TEXAS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS *  SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND *  FITNESS, IN NO EVENT SHALL THE UNIVERSITY OF TEXAS BE LIABLE FOR ANY *  SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER *  RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF *  CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN *  CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * *  Author:  	Po Cheung, The University of Texas at Austin *  Created:   	March 10, 1989 * ***************************************************************************** *  *  xxgdb - X Window System interface to the gdb debugger *   * 	Copyright 1990,1993 Thomson Consumer Electronics, Inc. *   *  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 Thomson Consumer *  Electronics (TCE) not be used in advertising or publicity pertaining *  to distribution of the software without specific, written prior *  permission.  TCE makes no representations about the suitability of *  this software for any purpose.  It is provided "as is" without express *  or implied warranty. * *  TCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *  ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT *  SHALL TCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES *  OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, *  WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, *  ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS *  SOFTWARE. * *  Adaptation to GDB:  Pierre Willard *  XXGDB Created:   	December, 1990 * *****************************************************************************//*  windows.c: * *    CreateTitleBar() :	Create title bar. *    CreateFileLabel() :	Create file label in file window. *    CreateLineLabel() :	Create line label in file window. *    CreateFileWindow() :	Create file window. *    CreateMessageWindow() :	Create message window. *    CreateDisplayWindow() :	Create display window. *    CreateSubWindows() :	Create the subwindows. *    UpdateFileLabel() :	Update file label. *    UpdateLineLabel() :	Update line label. *    UpdateMessageWindow() :	Update message window. */#include "global.h"Widget	fileWindow,			/* parent of fileLabel and lineLabel */	messageWindow,			/* window for displaying messages */	separator,			/* separator in vpane */	displayWindow;			/* area for displaying variables */static Widget 	fileLabel,		/* filename of displayed text */		lineLabel;		/* line number of caret position *//* *  Private routines for creating various subwindows for xdbx. */static void CreateFileLabel(parent)Widget parent;{    Arg 	args[MAXARGS];    Cardinal 	n;    n = 0;    XtSetArg(args[n], XtNlabel, (XtArgVal) "No Source File");           n++;    XtSetArg(args[n], XtNborderWidth, (XtArgVal) 0);           		n++;    fileLabel = XtCreateManagedWidget("fileLabel", labelWidgetClass, 				      parent, args, n);}static void CreateLineLabel(parent)Widget parent;{    Arg 	args[MAXARGS];    Cardinal 	n;    n = 0;    XtSetArg(args[n], XtNlabel, (XtArgVal) "");           		n++;    XtSetArg(args[n], XtNborderWidth, (XtArgVal) 0);           		n++;    XtSetArg(args[n], XtNfromHoriz, (XtArgVal) fileLabel);          	n++;    XtSetArg(args[n], XtNhorizDistance, (XtArgVal) 0);          	n++;    lineLabel = XtCreateManagedWidget("lineLabel", labelWidgetClass, 				      parent, args, n);}static void CreateFileWindow(parent)Widget parent;{    Arg 	args[MAXARGS];    Cardinal 	n;    n = 0;    XtSetArg(args[n], XtNshowGrip, (XtArgVal) False);			n++;    fileWindow = XtCreateManagedWidget("fileWindow", formWidgetClass, 				       parent, args, n);    CreateFileLabel(fileWindow);    CreateLineLabel(fileWindow);}static void CreateMessageWindow(parent)Widget parent;{    Arg 	args[MAXARGS];    Cardinal 	n;    n = 0;    XtSetArg(args[n], XtNlabel, (XtArgVal) ""); 			n++;    XtSetArg(args[n], XtNjustify, (XtArgVal) XtJustifyLeft);          	n++;    XtSetArg(args[n], XtNshowGrip, (XtArgVal) False);			n++;    messageWindow = XtCreateManagedWidget("messageWindow", labelWidgetClass,					  parent, args, n);}/*  Create a window for displaying variables as specified by the display *  command in dbx. */static void CreateDisplayWindow(parent)Widget parent;{    Arg 	args[MAXARGS];    Cardinal 	n;#ifndef NEW_INTERFACE    n = 0;    XtSetArg(args[n], XtNborderWidth, (XtArgVal) 0);                    n++;    XtSetArg(args[n], XtNmin, (XtArgVal) 2); 				n++;    XtSetArg(args[n], XtNmax, (XtArgVal) 2); 				n++;    XtSetArg(args[n], XtNshowGrip, (XtArgVal) False);			n++;    separator = XtCreateWidget("", labelWidgetClass, parent, args, n);#endif    n = 0;    XtSetArg(args[n], XtNeditType, (XtArgVal) XawtextRead);		n++;#ifdef NEW_INTERFACE    displayWindow = XtCreateManagedWidget("displayWindow",					  asciiTextWidgetClass, 					  parent, args, n);#else    displayWindow = XtCreateWidget("displayWindow", asciiTextWidgetClass, 				   parent, args, n);#endif#ifndef NEW_INTERFACE    if (app_resources.displayWindow) {	XtManageChild(separator);	XtManageChild(displayWindow);    }#endif}#ifdef NEW_INTERFACEWidget pcWindow;Widget sourceShell;Widget sourceToggle;Widget commandShell;Widget commandToggle;Widget displayShell;Widget displayToggle;Atom   wm_delete_window;Widget MatchToggleFromShell(shell)Widget shell;{  if (shell == sourceShell) return sourceToggle;  if (shell == commandShell) return commandToggle;  if (shell == displayShell) return displayToggle;  return NULL;}void State_Transient(w, client_data, call_data)     Widget w;     Widget client_data;     XtPointer call_data;{  Arg 	args[MAXARGS];  Cardinal 	n;  Boolean       ToggleState;  XtVaGetValues(w, XtNstate, &ToggleState, NULL);  if (ToggleState)    XtPopup(client_data, XtGrabNone);  else    XtPopdown(client_data);}void WMDeleteWindow(w, client_data, msg)     Widget w;     XtPointer client_data;     XClientMessageEvent *msg;{    if (msg->type == ClientMessage && msg->data.l[0] == wm_delete_window) {      w = MatchToggleFromShell(client_data);      if (w) XawToggleUnsetCurrent(w);    }}void SetupWMProtocol(shell)Widget shell;{  XtRealizeWidget(shell);  XSetWMProtocols(XtDisplay(shell), XtWindow(shell), &wm_delete_window, 1);  XtAddEventHandler(shell, NoEventMask, True, WMDeleteWindow, (XtPointer) shell);}void CreatePCToggle(parent, toggle, name, label, shell)Widget	parent;Widget  *toggle;char *name;XtPointer label;Widget shell;{    Arg 	args[MAXARGS];    Cardinal 	n;    n = 0;    XtSetArg(args[n], XtNresize, (XtArgVal) False);			n++;    XtSetArg(args[n], XtNlabel, label);          			n++;    XtSetArg(args[n], XtNwidth, 130);                                   n++;#ifdef OPEN_ALL_WINDOWS    XtSetArg(args[n], XtNstate, True);                                   n++;#endif    *toggle = XtCreateManagedWidget(name, toggleWidgetClass,				   parent, args, n);    XtAddCallback(*toggle, XtNcallback, State_Transient, shell);}static void CreatePopupControls(parent)Widget parent;{  Widget QuitButtonTwo;  Arg 	args[MAXARGS];  Cardinal 	n;    n = 0;  XtSetArg(args[n], XtNshowGrip, (XtArgVal) False);			n++;  pcWindow = XtCreateManagedWidget("pcWindow", boxWidgetClass, 				   parent, args, n);  CreatePCToggle(pcWindow, &sourceToggle , "pcSource"  ,		 "Source Listing"  , sourceShell );  CreatePCToggle(pcWindow, &commandToggle, "pcCommand" ,		 "Command Buttons" , commandShell);#ifdef GDB  CreatePCToggle(pcWindow, &displayToggle, "pcDisplay" ,                 "Display Window"  , displayShell);#endif  n = 0;  QuitButtonTwo = XtCreateManagedWidget("Quit", commandWidgetClass,					pcWindow, args, n);  XtAddCallback(QuitButtonTwo, XtNcallback, Quit, NULL);}#endif /* NEW_INTERFACE *//*  PUBLIC ROUTINES *//* *  Top level function for creating all the xdbx subwindows. */void CreateSubWindows(parent)Widget parent;{    Widget	vpane;		/* outer widget containing various subwindows */#ifdef NEW_INTERFACE    Widget      listingForm; /* file listing Shell */    Widget      displayForm; /* file listing Shell */#endif    Arg 	args[MAXARGS];    Cardinal 	n;    n = 0;    vpane = XtCreateManagedWidget("vpane", panedWidgetClass, parent, args, n);#ifdef NEW_INTERFACE    wm_delete_window = XInternAtom(XtDisplay(toplevel), "WM_DELETE_WINDOW", False);    n = 0;    XtSetArg(args[n], XtNtitle, "xxgdb Source Display");                n++;    sourceShell = XtCreatePopupShell("sourceShell", 				     transientShellWidgetClass,				     toplevel, args, n);    n=0;    listingForm = XtCreateManagedWidget("listingForm", 					formWidgetClass,					sourceShell, args, n);    CreateFileWindow(listingForm);    CreateSourceWindow(listingForm);    SetupWMProtocol(sourceShell);#else    CreateFileWindow(vpane);    CreateSourceWindow(vpane);#endif    CreateMessageWindow(vpane);#ifdef NEW_INTERFACE    n = 0;    XtSetArg(args[n], XtNtitle, "xxgdb Commands");                n++;    commandShell = XtCreatePopupShell("commandShell", 				     transientShellWidgetClass,				     toplevel, args, n);    CreateCommandPanel(commandShell);    SetupWMProtocol(commandShell);#else    CreateCommandPanel(vpane);#endif    CreateDialogWindow(vpane);#ifdef GDB#ifdef NEW_INTERFACE    n = 0;    XtSetArg(args[n], XtNtitle, "xxgdb Variable Display");                n++;    displayShell = XtCreatePopupShell("displayShell", 				      transientShellWidgetClass,				      toplevel, args, n);    n=0;    displayForm = XtCreateManagedWidget("displayForm",					formWidgetClass,					displayShell, args, n);    CreateDisplayWindow(displayForm);    SetupWMProtocol(displayShell);#else    CreateDisplayWindow(vpane);#endif#else /* not GDB */#ifndef BSD    CreateDisplayWindow(vpane);#endif#endif	/* not GDB */#ifdef NEW_INTERFACE    CreatePopupControls(vpane);#endif} /* *  Routines for updating fields for the filename and line number *  in the file window, and the execution status in the message window. */void UpdateFileLabel(string)char *string;{    Arg 	args[MAXARGS];    Cardinal 	n;    n = 0;    XtSetArg(args[n], XtNlabel, (XtArgVal) string);        		n++;    XtSetValues(fileLabel, args, n);}void UpdateLineLabel(line)Cardinal line;{    Arg 	args[MAXARGS];    Cardinal 	n;    char 	string[10];    n = 0;    if (line > 0)    	sprintf(string, "%d", line);    else	strcpy(string, "");    XtSetArg(args[n], XtNlabel, (XtArgVal) string);        	n++;    XtSetValues(lineLabel, args, n);}/*--------------------------------------------------------------------------+|																			||	Note : UpdateMessageWindow assumes that the format string				||			can only contain one %s specifier.								||		arg is either NULL or is a string.									||		format is a string (never NULL).									||																			|+--------------------------------------------------------------------------*/void UpdateMessageWindow(format, arg)char *format, *arg;{	char *message;	char string[LINESIZ];	int fulllength;    Arg 	args[MAXARGS];    Cardinal 	n;	/* fix bug where if a debugged program function arg is a stringthat looks like "%s", and UpdateMesssageWindow is passed that stringin format (with a NULL arg), then UpdateMessageWindow expects anotherarg.  We fix by seeing if arg is NULL.  If so, then make format "%s"and arg whatever the format string was. */	if (arg == NULL) {	    arg = format;	    format = "%s";	}	fulllength = strlen ("  ") + strlen (format) + 1 + ((arg == NULL) ? 0 : strlen (arg));		if (fulllength > LINESIZ)		message = (char*) XtMalloc (fulllength);	else		message = string;		    strcpy(message, "  ");    sprintf(message + strlen(message), format, arg);        n = 0;    XtSetArg(args[n], XtNlabel, (XtArgVal) message);		n++;    XtSetValues(messageWindow, args, n);    	if (fulllength > LINESIZ)		XtFree(message);}void ClearMessageWindow(){    Arg 	args[MAXARGS];    Cardinal 	n;    n = 0;    XtSetArg(args[n], XtNlabel, (XtArgVal) "");			n++;    XtSetValues(messageWindow, args, n);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -