ncurses 5.7
[ncurses.git] / menu / m_pattern.c
index 54d72a550301d2b09493f64e54e4cd798a675571..1171390e214c8fae89aca191d12a0e315b42207c 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998 Free Software Foundation, Inc.                        *
+ * Copyright (c) 1998-2005,2006 Free Software Foundation, Inc.              *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
@@ -27,7 +27,7 @@
  ****************************************************************************/
 
 /****************************************************************************
- *   Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997        *
+ *   Author:  Juergen Pfeifer, 1995,1997                                    *
  ****************************************************************************/
 
 /***************************************************************************
@@ -37,7 +37,7 @@
 
 #include "menu.priv.h"
 
-MODULE_ID("$Id: m_pattern.c,v 1.2 1998/02/11 12:13:50 tom Exp $")
+MODULE_ID("$Id: m_pattern.c,v 1.15 2006/11/04 18:46:39 tom Exp $")
 
 /*---------------------------------------------------------------------------
 |   Facility      :  libnmenu  
@@ -50,9 +50,13 @@ MODULE_ID("$Id: m_pattern.c,v 1.2 1998/02/11 12:13:50 tom Exp $")
 |                                    pattern is stored
 |                    PatternString - as expected
 +--------------------------------------------------------------------------*/
-char *menu_pattern(const MENU * menu)
+NCURSES_EXPORT(char *)
+menu_pattern(const MENU * menu)
 {
-  return (menu ? (menu->pattern ? menu->pattern : "") : (char *)0);
+  static char empty[] = "";
+
+  T((T_CALLED("menu_pattern(%p)"), menu));
+  returnPtr(menu ? (menu->pattern ? menu->pattern : empty) : 0);
 }
 
 /*---------------------------------------------------------------------------
@@ -64,53 +68,56 @@ char *menu_pattern(const MENU * menu)
 |
 |   Return Values :  E_OK              - success
 |                    E_BAD_ARGUMENT    - invalid menu or pattern pointer
-|                    E_NOT_CONNECTED   - no items connected to menu
 |                    E_BAD_STATE       - menu in user hook routine
+|                    E_NOT_CONNECTED   - no items connected to menu
 |                    E_NO_MATCH        - no item matches pattern
 +--------------------------------------------------------------------------*/
-int set_menu_pattern(MENU *menu, const char *p)
+NCURSES_EXPORT(int)
+set_menu_pattern(MENU * menu, const char *p)
 {
   ITEM *matchitem;
-  int   matchpos;
-  
-  if (!menu || !p)     
+  int matchpos;
+
+  T((T_CALLED("set_menu_pattern(%p,%s)"), menu, _nc_visbuf(p)));
+
+  if (!menu || !p)
     RETURN(E_BAD_ARGUMENT);
-  
+
   if (!(menu->items))
     RETURN(E_NOT_CONNECTED);
-  
-  if ( menu->status & _IN_DRIVER )
+
+  if (menu->status & _IN_DRIVER)
     RETURN(E_BAD_STATE);
-  
+
   Reset_Pattern(menu);
-  
+
   if (!(*p))
     {
       pos_menu_cursor(menu);
       RETURN(E_OK);
     }
-  
-  if (menu->status & _LINK_NEEDED) 
+
+  if (menu->status & _LINK_NEEDED)
     _nc_Link_Items(menu);
-  
-  matchpos  = menu->toprow;
+
+  matchpos = menu->toprow;
   matchitem = menu->curitem;
   assert(matchitem);
-  
-  while(*p)
+
+  while (*p)
     {
-      if ( !isprint(*p) || 
-         (_nc_Match_Next_Character_In_Item_Name(menu,*p,&matchitem) != E_OK) )
+      if (!isprint(UChar(*p)) ||
+         (_nc_Match_Next_Character_In_Item_Name(menu, *p, &matchitem) != E_OK))
        {
          Reset_Pattern(menu);
          pos_menu_cursor(menu);
          RETURN(E_NO_MATCH);
        }
       p++;
-    }                  
-  
+    }
+
   /* This is reached if there was a match. So we position to the new item */
-  Adjust_Current_Item(menu,matchpos,matchitem);
+  Adjust_Current_Item(menu, matchpos, matchitem);
   RETURN(E_OK);
 }