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

📄 textpro.c

📁 clips源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
/*FUNCTION ATTACH_LEAF :                                                      *//* Input : 1) address of current NewFetchFile                                    *//*         2) address of current topic entry-node                             *//*         3) file pointer                                                    *//*         4) name of file                                                    *//*         5) error message buffer                                            *//*         6) size of error message buffer                                    *//*         7) line count in the file                                          *//* Output :                                                                   *//*This function attaches the entry-node to its proper place in the tree of the*//*current file.  The function returns a boolean flag indicating the success   *//*(or lack thereof) of this connection.  In the case of an error, an error    *//*message is written to the caller's buffer, the file is closed, and the      *//*previous file entries are deleted from the lookup table.                    *//******************************************************************************/static int AttachLeaf(  void *theEnv,  struct lists *lnode,  struct entries *enode,  FILE *fp,  char *file,  int line_ct)  {   int p_flag;   /*Used in searching the tree for a parent*/   /*====================*/   /*First topic for file*/   /*====================*/   if (lnode->topics == NULL)     lnode->topics = enode;   /*================================*/   /*Subtopic - branch down the tree */   /*================================*/   else if (enode->level > TextProcessingData(theEnv)->parent->level)     if (TextProcessingData(theEnv)->parent->type == MENU)       {        enode->parent = TextProcessingData(theEnv)->parent;        TextProcessingData(theEnv)->parent->child = enode;       }     else       {        rm(theEnv,(void *) enode,(int) sizeof(struct entries));        GenClose(theEnv,fp);        TextLookupToss(theEnv,file);        PrintErrorID(theEnv,"TEXTPRO",7,FALSE);        EnvPrintRouter(theEnv,WERROR,"Line ");        PrintLongInteger(theEnv,WERROR,line_ct);        EnvPrintRouter(theEnv,WERROR," : Non-menu entries cannot have subtopics.\n");        return(FALSE);       }   /*====================================*/   /*Brother-topic -- same level in tree */   /*====================================*/   else if (enode->level == TextProcessingData(theEnv)->parent->level)     {      enode->parent = TextProcessingData(theEnv)->parent->parent;      enode->next = TextProcessingData(theEnv)->parent->next;      TextProcessingData(theEnv)->parent->next = enode;     }   /*==========================================================*/   /*Topic is unrelated to previous topic - branch up the tree */   /*==========================================================*/   else     {      if (TextProcessingData(theEnv)->parent != NULL)        p_flag = 1;      else        p_flag = 0;      while (p_flag > 0)        {         TextProcessingData(theEnv)->parent = TextProcessingData(theEnv)->parent->parent;         if (TextProcessingData(theEnv)->parent != NULL)           if (enode->level < TextProcessingData(theEnv)->parent->level)             p_flag = 1;           else             p_flag = 0;         else           p_flag = 0;        }      if (TextProcessingData(theEnv)->parent != NULL)        /*========*/        /*Subtopic*/        /*========*/        if (TextProcessingData(theEnv)->parent->level < enode->level)          {           enode->parent = TextProcessingData(theEnv)->parent;           enode->next = TextProcessingData(theEnv)->parent->child;           TextProcessingData(theEnv)->parent->child = enode;          }        /*=============*/        /*Brother-topic*/        /*=============*/        else          {           enode->parent = TextProcessingData(theEnv)->parent->parent;           enode->next = TextProcessingData(theEnv)->parent->next;           TextProcessingData(theEnv)->parent->next = enode;          }      /*=========*/      /*Root Node*/      /*=========*/      else        {         enode->parent = NULL;         enode->next = lnode->topics;         lnode->topics = enode;        }     }   TextProcessingData(theEnv)->parent = enode;   return(TRUE);  }/******************************************************************************//*FUNCTION LOOKUP :                                                           *//* Input : 1) name of entry-topic file to be used for reference               *//*         2) caller allocated buffer to contain the main topic name          *//*         3) name of the entry-topic to be found                             *//*         4) caller allocated buffer to store the return status              *//* Output : 1) offset from the beginning of the entry-topic file stream to the*//*             beginning of the requested topic (-1 if the topic not found)   *//*          2) status code stored in caller's buffer indicating the result of *//*             the lookup : NO_FILE, NO_TOPIC, BRANCH_UP, BRANCH_DOWN, EXIT,  *//*             or NORMAL.                                                     *//*                                                                            *//* Notes : 1) If NULL is given as an entry-topic, the lookup routine branches *//*            up one level in the tree (status BRANCH_UP).  If the current    *//*            level of the tree is already the root, all paths are set to NULL*//*            (status EXIT).                                                  *//*         2) If an entry-topic is not found, the file position of the current*//*            main topic (or menu) is returned (status NO_TOPIC).             *//******************************************************************************/static long int LookupEntry(  void *theEnv,  char *file,  char **menu,  char *name,  int *code)  {   struct lists *lptr;    /*Local pointers used to move through the tree*/   struct entries *eptr;   int l_flag, e_flag;    /*Flags used in looping to find entry-topics*/   /*===============================*/   /*Find named file in lookup list */   /*===============================*/   lptr = TextProcessingData(theEnv)->headings;   if (lptr != NULL)     if (strcmp(lptr->file,file) != 0)       l_flag = 1;     else       l_flag = 0;   else     l_flag = 0;   while (l_flag > 0)     {      lptr = lptr->next;      if (lptr != NULL)        if (strcmp(lptr->file,file) != 0)          l_flag = 1;        else          l_flag = 0;      else        l_flag = 0;     }   if (lptr == NULL)     {      *code = NO_FILE;      return(-1);     }   /*==================================================================*/   /*If entry-topic was NULL, branch up one-level in the tree, or exit */   /*the tree if already at the root.                                  */   /*==================================================================*/   if (name == NULL)     {      if (lptr->curr_menu == NULL)        {         *code = EXIT;         return(-1);        }      else        {         if (lptr->curr_menu->parent == NULL)           {            *code = EXIT;            lptr->curr_menu = NULL;            *menu = NULL;            return(-1);           }         lptr->curr_menu = lptr->curr_menu->parent;         *code = BRANCH_UP;         *menu = lptr->curr_menu->name;         return(lptr->curr_menu->offset);        }     }   /*========================================*/   /*Find the topic in the file's topic tree */   /*========================================*/   upper(name);   if (lptr->curr_menu != NULL)     eptr = lptr->curr_menu->child;   else     eptr = lptr->topics;   if (eptr != NULL)     if (findstr(eptr->name,name) == 0)       e_flag = 0;     else       e_flag = 1;   else     e_flag = 0;   while (e_flag > 0)     {      eptr = eptr->next;      if (eptr != NULL)        if (findstr(eptr->name,name) == 0)          e_flag = 0;        else          e_flag = 1;      else        e_flag = 0;     }   /*===================================================================*/   /*If the topic was not found, return the position of the current menu*/   /*===================================================================*/   if (eptr == NULL)     {      *code = NO_TOPIC;      if (lptr->curr_menu != NULL)        {         *menu = lptr->curr_menu->name;         return(lptr->curr_menu->offset);        }      return(-1);     }   /*===============================================================*/   /*If the requested topic has children, branch down to its level. */   /*===============================================================*/   if (eptr->type == MENU)     {      *code = BRANCH_DOWN;      lptr->curr_menu = eptr;     }   else     *code = NORMAL;   if (lptr->curr_menu != NULL)      *menu = lptr->curr_menu->name;   return(eptr->offset);  }/******************************************************************************//*FUNCTION TOSS :                                                             *//* Input : 1) entry-topic address                                             *//* Output : This function recursively deletes a node and all child nodes      *//******************************************************************************/static void TossFunction(  void *theEnv,  struct entries *eptr)  {   struct entries *prev;   while (eptr != NULL)     {      if (eptr->child != NULL)        TossFunction(theEnv,eptr->child);      prev = eptr;      eptr = eptr->next;      rm(theEnv,(void *) prev,(int) sizeof(struct entries));     }  }/****************************************************************************//****************************************************************************//*                          TEXT PROCESSING FUNCTIONS                       *//*                                                                          *//* The functions contained in this file can be called to handle             *//* external file referencing and accessing.  FetchCommand() loads a file    *//* onto an internal run-time lookup table, TossCommand() removes the file,  *//* PrintRegionCommand accesses the loaded file to display a requested       *//* entry, and HelpFunction() provides an on-line help facility              *//* using the external help data file specified in the header file setup.h.  *//* For information on the format of the data file(s) required, see the      *//* internal documentation in LOOKUP.C and the external documentation.       *//*                                                                          *//* For usage of these functions, see the external documentation.            *//****************************************************************************//****************************************************************************/#define SCREEN_LN 22   /*Typical terminal screen length -- 22 lines*/                       /*Used for scrolling in the help facility   *//*==========================================*//*Topic node for help facility's query list *//*==========================================*/struct topics  {   char name[NAMESIZE];      /*Name of the node                 */   struct topics *end_list;  /*Pointer to end of query list     */   struct topics *next;      /*Pointer to next topic in the list*/  };/******************************************************************************//*============================================================================*//*                        FUNCTION DECLARATIONS                               *//*============================================================================*//******************************************************************************/#if HELP_FUNCTIONSstatic int RecognizeHelpRouters(void *,char *);static int HelpPrint(void *,char *,char *);static int HelpGetc(void *,char *);static int HelpUngetc(void *,int,char *);static struct topics *AskForNewHelpTopic(void *,struct topics *,char **);#endifstatic struct topics *GetCommandLineTopics(void *);static FILE *FindTopicInEntries(void *,char *,struct topics *,char **,int *);/******************************************************************************//*============================================================================*//*                       EXTERNAL ACCESS FUNCTIONS                            *//*============================================================================*//******************************************************************************/

⌨️ 快捷键说明

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