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

📄 tuidata.c

📁 gdb-6.0 linux 下的调试工具
💻 C
📖 第 1 页 / 共 2 页
字号:
/*   ** allocGenericWinInfo(). */TuiGenWinInfoPtrallocGenericWinInfo (void){  TuiGenWinInfoPtr win;  if ((win = (TuiGenWinInfoPtr) xmalloc (		     sizeof (TuiGenWinInfoPtr))) != (TuiGenWinInfoPtr) NULL)    initGenericPart (win);  return win;}				/* allocGenericWinInfo *//*   ** initGenericPart(). */voidinitGenericPart (TuiGenWinInfoPtr win){  win->width =    win->height =    win->origin.x =    win->origin.y =    win->viewportHeight =    win->contentSize =    win->lastVisibleLine = 0;  win->handle = (WINDOW *) NULL;  win->content = (OpaquePtr) NULL;  win->contentInUse =    win->isVisible = FALSE;  win->title = 0;}/*   ** initContentElement(). */voidinitContentElement (TuiWinElementPtr element, TuiWinType type){  element->highlight = FALSE;  switch (type)    {    case SRC_WIN:    case DISASSEM_WIN:      element->whichElement.source.line = (char *) NULL;      element->whichElement.source.lineOrAddr.lineNo = 0;      element->whichElement.source.isExecPoint = FALSE;      element->whichElement.source.hasBreak = FALSE;      break;    case DATA_WIN:      initGenericPart (&element->whichElement.dataWindow);      element->whichElement.dataWindow.type = DATA_ITEM_WIN;      ((TuiGenWinInfoPtr) & element->whichElement.dataWindow)->content =	(OpaquePtr) allocContent (1, DATA_ITEM_WIN);      ((TuiGenWinInfoPtr)       & element->whichElement.dataWindow)->contentSize = 1;      break;    case CMD_WIN:      element->whichElement.command.line = (char *) NULL;      break;    case DATA_ITEM_WIN:      element->whichElement.data.name = (char *) NULL;      element->whichElement.data.type = TUI_REGISTER;      element->whichElement.data.itemNo = UNDEFINED_ITEM;      element->whichElement.data.value = (Opaque) NULL;      element->whichElement.data.highlight = FALSE;      break;    case LOCATOR_WIN:      element->whichElement.locator.fileName[0] =	element->whichElement.locator.procName[0] = (char) 0;      element->whichElement.locator.lineNo = 0;      element->whichElement.locator.addr = 0;      break;    case EXEC_INFO_WIN:      memset(element->whichElement.simpleString, ' ',             sizeof(element->whichElement.simpleString));      break;    default:      break;    }  return;}				/* initContentElement *//*   ** initWinInfo(). */voidinitWinInfo (TuiWinInfoPtr winInfo){  initGenericPart (&winInfo->generic);  winInfo->canHighlight =    winInfo->isHighlighted = FALSE;  switch (winInfo->generic.type)    {    case SRC_WIN:    case DISASSEM_WIN:      winInfo->detail.sourceInfo.executionInfo = (TuiGenWinInfoPtr) NULL;      winInfo->detail.sourceInfo.hasLocator = FALSE;      winInfo->detail.sourceInfo.horizontalOffset = 0;      winInfo->detail.sourceInfo.startLineOrAddr.addr = 0;      winInfo->detail.sourceInfo.filename = 0;      break;    case DATA_WIN:      winInfo->detail.dataDisplayInfo.dataContent = (TuiWinContent) NULL;      winInfo->detail.dataDisplayInfo.dataContentCount = 0;      winInfo->detail.dataDisplayInfo.regsContent = (TuiWinContent) NULL;      winInfo->detail.dataDisplayInfo.regsContentCount = 0;      winInfo->detail.dataDisplayInfo.regsDisplayType =	TUI_UNDEFINED_REGS;      winInfo->detail.dataDisplayInfo.regsColumnCount = 1;      winInfo->detail.dataDisplayInfo.displayRegs = FALSE;      break;    case CMD_WIN:      winInfo->detail.commandInfo.curLine = 0;      winInfo->detail.commandInfo.curch = 0;      break;    default:      winInfo->detail.opaque = (Opaque) NULL;      break;    }  return;}				/* initWinInfo *//*   ** allocWinInfo(). */TuiWinInfoPtrallocWinInfo (TuiWinType type){  TuiWinInfoPtr winInfo = (TuiWinInfoPtr) NULL;  winInfo = (TuiWinInfoPtr) xmalloc (sizeof (TuiWinInfo));  if (m_winPtrNotNull (winInfo))    {      winInfo->generic.type = type;      initWinInfo (winInfo);    }  return winInfo;}				/* allocWinInfo *//*   ** allocContent().   **        Allocates the content and elements in a block. */TuiWinContentallocContent (int numElements, TuiWinType type){  TuiWinContent content = (TuiWinContent) NULL;  char *elementBlockPtr = (char *) NULL;  int i;  if ((content = (TuiWinContent)  xmalloc (sizeof (TuiWinElementPtr) * numElements)) != (TuiWinContent) NULL)    {				/*				   ** All windows, except the data window, can allocate the elements				   ** in a chunk.  The data window cannot because items can be				   ** added/removed from the data display by the user at any time.				 */      if (type != DATA_WIN)	{	  if ((elementBlockPtr = (char *)	   xmalloc (sizeof (TuiWinElement) * numElements)) != (char *) NULL)	    {	      for (i = 0; i < numElements; i++)		{		  content[i] = (TuiWinElementPtr) elementBlockPtr;		  initContentElement (content[i], type);		  elementBlockPtr += sizeof (TuiWinElement);		}	    }	  else	    {	      tuiFree ((char *) content);	      content = (TuiWinContent) NULL;	    }	}    }  return content;}				/* allocContent *//*   ** addContentElements().   **        Adds the input number of elements to the windows's content.  If   **        no content has been allocated yet, allocContent() is called to   **        do this.  The index of the first element added is returned,   **        unless there is a memory allocation error, in which case, (-1)   **        is returned. */intaddContentElements (TuiGenWinInfoPtr winInfo, int numElements){  TuiWinElementPtr elementPtr;  int i, indexStart;  if (winInfo->content == (OpaquePtr) NULL)    {      winInfo->content = (OpaquePtr) allocContent (numElements, winInfo->type);      indexStart = 0;    }  else    indexStart = winInfo->contentSize;  if (winInfo->content != (OpaquePtr) NULL)    {      for (i = indexStart; (i < numElements + indexStart); i++)	{	  if ((elementPtr = (TuiWinElementPtr)	       xmalloc (sizeof (TuiWinElement))) != (TuiWinElementPtr) NULL)	    {	      winInfo->content[i] = (Opaque) elementPtr;	      initContentElement (elementPtr, winInfo->type);	      winInfo->contentSize++;	    }	  else			/* things must be really hosed now! We ran out of memory!? */	    return (-1);	}    }  return indexStart;}				/* addContentElements *//* Delete all curses windows associated with winInfo, leaving everything   else intact.  */voidtuiDelWindow (TuiWinInfoPtr winInfo){  TuiGenWinInfoPtr genericWin;  switch (winInfo->generic.type)    {    case SRC_WIN:    case DISASSEM_WIN:      genericWin = locatorWinInfoPtr ();      if (genericWin != (TuiGenWinInfoPtr) NULL)	{	  tuiDelwin (genericWin->handle);	  genericWin->handle = (WINDOW *) NULL;	  genericWin->isVisible = FALSE;	}      if (winInfo->detail.sourceInfo.filename)        {          xfree (winInfo->detail.sourceInfo.filename);          winInfo->detail.sourceInfo.filename = 0;        }      genericWin = winInfo->detail.sourceInfo.executionInfo;      if (genericWin != (TuiGenWinInfoPtr) NULL)	{	  tuiDelwin (genericWin->handle);	  genericWin->handle = (WINDOW *) NULL;	  genericWin->isVisible = FALSE;	}      break;    case DATA_WIN:      if (winInfo->generic.content != (OpaquePtr) NULL)	{	  tuiDelDataWindows (winInfo->detail.dataDisplayInfo.regsContent,                             winInfo->detail.dataDisplayInfo.regsContentCount);	  tuiDelDataWindows (winInfo->detail.dataDisplayInfo.dataContent,                             winInfo->detail.dataDisplayInfo.dataContentCount);	}      break;    default:      break;    }  if (winInfo->generic.handle != (WINDOW *) NULL)    {      tuiDelwin (winInfo->generic.handle);      winInfo->generic.handle = (WINDOW *) NULL;      winInfo->generic.isVisible = FALSE;    }}/*   **  freeWindow(). */voidfreeWindow (TuiWinInfoPtr winInfo){  TuiGenWinInfoPtr genericWin;  switch (winInfo->generic.type)    {    case SRC_WIN:    case DISASSEM_WIN:      genericWin = locatorWinInfoPtr ();      if (genericWin != (TuiGenWinInfoPtr) NULL)	{	  tuiDelwin (genericWin->handle);	  genericWin->handle = (WINDOW *) NULL;	}      freeWinContent (genericWin);      if (winInfo->detail.sourceInfo.filename)        {          xfree (winInfo->detail.sourceInfo.filename);          winInfo->detail.sourceInfo.filename = 0;        }      genericWin = winInfo->detail.sourceInfo.executionInfo;      if (genericWin != (TuiGenWinInfoPtr) NULL)	{	  tuiDelwin (genericWin->handle);	  genericWin->handle = (WINDOW *) NULL;	  freeWinContent (genericWin);	}      break;    case DATA_WIN:      if (winInfo->generic.content != (OpaquePtr) NULL)	{	  freeDataContent (			    winInfo->detail.dataDisplayInfo.regsContent,			  winInfo->detail.dataDisplayInfo.regsContentCount);	  winInfo->detail.dataDisplayInfo.regsContent =	    (TuiWinContent) NULL;	  winInfo->detail.dataDisplayInfo.regsContentCount = 0;	  freeDataContent (			    winInfo->detail.dataDisplayInfo.dataContent,			  winInfo->detail.dataDisplayInfo.dataContentCount);	  winInfo->detail.dataDisplayInfo.dataContent =	    (TuiWinContent) NULL;	  winInfo->detail.dataDisplayInfo.dataContentCount = 0;	  winInfo->detail.dataDisplayInfo.regsDisplayType =	    TUI_UNDEFINED_REGS;	  winInfo->detail.dataDisplayInfo.regsColumnCount = 1;	  winInfo->detail.dataDisplayInfo.displayRegs = FALSE;	  winInfo->generic.content = (OpaquePtr) NULL;	  winInfo->generic.contentSize = 0;	}      break;    default:      break;    }  if (winInfo->generic.handle != (WINDOW *) NULL)    {      tuiDelwin (winInfo->generic.handle);      winInfo->generic.handle = (WINDOW *) NULL;      freeWinContent (&winInfo->generic);    }  if (winInfo->generic.title)    xfree (winInfo->generic.title);  xfree (winInfo);}/*   ** freeAllSourceWinsContent(). */voidfreeAllSourceWinsContent (void){  int i;  for (i = 0; i < (sourceWindows ())->count; i++)    {      TuiWinInfoPtr winInfo = (TuiWinInfoPtr) (sourceWindows ())->list[i];      if (m_winPtrNotNull (winInfo))	{	  freeWinContent (&(winInfo->generic));	  freeWinContent (winInfo->detail.sourceInfo.executionInfo);	}    }  return;}				/* freeAllSourceWinsContent *//*   ** freeWinContent(). */voidfreeWinContent (TuiGenWinInfoPtr winInfo){  if (winInfo->content != (OpaquePtr) NULL)    {      freeContent ((TuiWinContent) winInfo->content,		   winInfo->contentSize,		   winInfo->type);      winInfo->content = (OpaquePtr) NULL;    }  winInfo->contentSize = 0;  return;}				/* freeWinContent */voidtuiDelDataWindows (TuiWinContent content, int contentSize){  int i;  /*     ** Remember that data window content elements are of type TuiGenWinInfoPtr,     ** each of which whose single element is a data element.   */  for (i = 0; i < contentSize; i++)    {      TuiGenWinInfoPtr genericWin = &content[i]->whichElement.dataWindow;      if (genericWin != (TuiGenWinInfoPtr) NULL)	{	  tuiDelwin (genericWin->handle);	  genericWin->handle = (WINDOW *) NULL;	  genericWin->isVisible = FALSE;	}    }  return;}				/* tuiDelDataWindows */voidfreeDataContent (TuiWinContent content, int contentSize){  int i;  /*     ** Remember that data window content elements are of type TuiGenWinInfoPtr,     ** each of which whose single element is a data element.   */  for (i = 0; i < contentSize; i++)    {      TuiGenWinInfoPtr genericWin = &content[i]->whichElement.dataWindow;      if (genericWin != (TuiGenWinInfoPtr) NULL)	{	  tuiDelwin (genericWin->handle);	  genericWin->handle = (WINDOW *) NULL;	  freeWinContent (genericWin);	}    }  freeContent (content,	       contentSize,	       DATA_WIN);  return;}				/* freeDataContent *//************************************ LOCAL STATIC FUNCTIONS        ************************************//*   ** freeContent(). */static voidfreeContent (TuiWinContent content, int contentSize, TuiWinType winType){  if (content != (TuiWinContent) NULL)    {      freeContentElements (content, contentSize, winType);      tuiFree ((char *) content);    }  return;}				/* freeContent *//*   ** freeContentElements(). */static voidfreeContentElements (TuiWinContent content, int contentSize, TuiWinType type){  if (content != (TuiWinContent) NULL)    {      int i;      if (type == SRC_WIN || type == DISASSEM_WIN)	{	  /* free whole source block */	  if (content[0]->whichElement.source.line != (char *) NULL)	    tuiFree (content[0]->whichElement.source.line);	}      else	{	  for (i = 0; i < contentSize; i++)	    {	      TuiWinElementPtr element;	      element = content[i];	      if (element != (TuiWinElementPtr) NULL)		{		  switch (type)		    {		    case DATA_WIN:		      tuiFree ((char *) element);		      break;		    case DATA_ITEM_WIN:		      /*		         ** Note that data elements are not allocated		         ** in a single block, but individually, as needed.		       */		      if (element->whichElement.data.type != TUI_REGISTER)			tuiFree ((char *)				 element->whichElement.data.name);		      tuiFree ((char *) element->whichElement.data.value);		      tuiFree ((char *) element);		      break;		    case CMD_WIN:		      tuiFree ((char *) element->whichElement.command.line);		      break;		    default:		      break;		    }		}	    }	}      if (type != DATA_WIN && type != DATA_ITEM_WIN)	tuiFree ((char *) content[0]);	/* free the element block */    }  return;}				/* freeContentElements */

⌨️ 快捷键说明

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