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

📄 sinit.c

📁 MMI层OBJ不能完全编译
💻 C
字号:
/****************************************************************************/
/*  sinit     v2.54                                                         */
/*  Copyright (c) 1996-2004 Texas Instruments Incorporated                  */
/****************************************************************************/
#include <stdlib.h>

extern void _DATA_ACCESS (*_dtors_ptr)(void);

/*************************************************************************/
/* LIST OF REQUIRED STATIC DESTRUCTIONS.  object POINTS TO THE OBJECT    */
/* TO BE DESTROYED, OR NULL IF THERE ARE SEVERAL.  dtor IS THE           */
/* DESTRUCTOR FOR THE OBJECT, AND dfun IS A FUNCTION THAT WILL CALL ALL  */
/* OF THE DESTRUCTORS IS THERE ARE SEVERAL.  ALWAYS ADD TO THE HEAD OF   */
/* THE LIST TO ENSURE THE PROPER ORDER OF DESTRUCTION.                   */
/*************************************************************************/
typedef struct dtor_list
{
   struct dtor_list *next;
   void             *object;
   union
   {
      void  (*dtor)(void *, int);
      void  (*dfun)(void);
   } fun;
} DTOR_LIST;

DTOR_LIST *dtors = NULL;
	 
/****************************************************************************/
/* CALL_DTORS() - PERFORM STATIC DESTRUCTION.                               */
/****************************************************************************/
void call_dtors(void)
{
   while (dtors)
   {
      /*-----------------------------------------------------------------*/
      /* SINCE A DESTRUCTOR MAY ADD NEW DESTRUCTORS TO THE LIST, NOTE    */
      /* AND REMOVE THE HEAD OF THE DESTRUCTOR LIST NOW.                 */
      /*-----------------------------------------------------------------*/
      DTOR_LIST *curr_dtor = dtors;
      dtors = dtors->next;

      /*-----------------------------------------------------------------*/
      /* IF A SINGLE OBJECT, CALL ITS DESTRUCTOR ON ITSELF (A FLAG VALUE */
      /* OF 2 INDICATES THAT OPERATOR DELETE SHOULD NOT BE CALLED).      */
      /* IF MULTIPLE OBJECTS, CALL THE SUPPLIED FUNCTION TO DESTROY THEM */
      /* ALL.                                                            */
      /*-----------------------------------------------------------------*/
      if (curr_dtor->object)  curr_dtor->fun.dtor(curr_dtor->object, 2);
      else                    curr_dtor->fun.dfun();
   }
}

/****************************************************************************/
/* ADD_DTOR() - ADD A DESTRUCTOR TO THE LIST OF STATIC DESTRUCTIONS.        */
/****************************************************************************/
void __add_dtor(DTOR_LIST *dtor_entry)
{
   /*-----------------------------------------------------------------------*/
   /* REGISTER call_dtors() SO exit() WILL CALL IT.  call_dtors() ISN'T     */
   /* CALLED DIRECTLY FROM exit() SO THAT IT ISN'T LINKED IN IF NOT USED.   */
   /*-----------------------------------------------------------------------*/
   _dtors_ptr = call_dtors;

   /*-----------------------------------------------------------------------*/
   /* ADD THE DESTRUCTOR TO THE LIST.                                       */
   /*-----------------------------------------------------------------------*/
   dtor_entry->next = dtors;
   dtors = dtor_entry;
}

⌨️ 快捷键说明

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