コード例 #1
0
ファイル: ex_utf8.c プロジェクト: dradtke/battlechess
/* Test al_ustr_equal. */
static void t10(void)
{
   ALLEGRO_USTR *us1;
   ALLEGRO_USTR *us2;
   const ALLEGRO_USTR *us3;
   ALLEGRO_USTR_INFO us3_info;
   const char us3_data[] = "aábdð\0eéfgh";

   us1 = al_ustr_new("aábdð");
   us2 = al_ustr_dup(us1);
   us3 = al_ref_buffer(&us3_info, us3_data, sizeof(us3_data));

   CHECK(al_ustr_equal(us1, us2));
   CHECK(!al_ustr_equal(us1, al_ustr_empty_string()));

   /* Check comparison doesn't stop at embedded NUL. */
   CHECK(!al_ustr_equal(us1, us3));

   al_ustr_free(us1);
   al_ustr_free(us2);
}
コード例 #2
0
ファイル: ljoynu.c プロジェクト: BorisCarvajal/allegro5
static ALLEGRO_JOYSTICK_LINUX *ljoy_by_device_name(
    const ALLEGRO_USTR *device_name)
{
    unsigned i;

    for (i = 0; i < _al_vector_size(&joysticks); i++) {
        ALLEGRO_JOYSTICK_LINUX **slot = _al_vector_ref(&joysticks, i);
        ALLEGRO_JOYSTICK_LINUX *joy = *slot;

        if (joy && al_ustr_equal(device_name, joy->device_name))
            return joy;
    }

    return NULL;
}
コード例 #3
0
//locates a resource by name
static _RESOURCE *_find_resource_by_name(const char *name) {
    ALGUI_LIST_NODE *node;
    _RESOURCE *res;    
    ALLEGRO_USTR_INFO info;
    ALLEGRO_USTR *name_ustr;
    
    //create a temporary name ustr to use in comparison
    name_ustr = al_ref_cstr(&info, name);
    
    //iterate the resources
    for(node = algui_get_first_list_node(&_resources); node; node = algui_get_next_list_node(node)) {
    
        //get the resource
        res = (_RESOURCE *)algui_get_list_node_data(node);
        
        //compare the strings
        if (al_ustr_equal(res->name, name_ustr)) return res;
    }
    
    //not found
    return NULL;
}
コード例 #4
0
ファイル: path.c プロジェクト: sesc4mt/mvcdecoder
/* parse_path_string:
 *
 * Parse a path string according to the following grammar.  The last
 * component, if it is not followed by a directory separator, is interpreted
 * as the filename component, unless it is "." or "..".
 *
 * GRAMMAR
 *
 * path     ::=   "//" c+ "/" nonlast        [Windows only]
 *            |   c ":" nonlast              [Windows only]
 *            |   nonlast
 *
 * nonlast  ::=   c* "/" nonlast
 *            |   last
 *
 * last     ::=   "."
 *            |   ".."
 *            |   filename
 *
 * filename ::=   c*                         [but not "." and ".."]
 *
 * c        ::=   any character but '/'
 */
static bool parse_path_string(const ALLEGRO_USTR *str, ALLEGRO_PATH *path)
{
   ALLEGRO_USTR_INFO    dot_info;
   ALLEGRO_USTR_INFO    dotdot_info;
   const ALLEGRO_USTR *  dot = al_ref_cstr(&dot_info, ".");
   const ALLEGRO_USTR *  dotdot = al_ref_cstr(&dotdot_info, "..");

   ALLEGRO_USTR *piece = al_ustr_new("");
   int pos = 0;
   bool on_windows;

   /* We compile the drive handling code on non-Windows platforms to prevent
    * it becoming broken.
    */
#ifdef ALLEGRO_WINDOWS
   on_windows = true;
#else
   on_windows = false;
#endif
   if (on_windows) {
      /* UNC \\server\share name */
      if (al_ustr_has_prefix_cstr(str, "//")) {
         int slash = al_ustr_find_chr(str, 2, '/');
         if (slash == -1 || slash == 2) {
            /* Missing slash or server component is empty. */
            goto Error;
         }
         al_ustr_assign_substr(path->drive, str, pos, slash);
         pos = slash + 1;
      }
      else {
         /* Drive letter. */
         int colon = al_ustr_offset(str, 1);
         if (colon > -1 && al_ustr_get(str, colon) == ':') {
            /* Include the colon in the drive string. */
            al_ustr_assign_substr(path->drive, str, 0, colon + 1);
            pos = colon + 1;
         }
      }
   }

   for (;;) {
      int slash = al_ustr_find_chr(str, pos, '/');

      if (slash == -1) {
         /* Last component. */
         al_ustr_assign_substr(piece, str, pos, al_ustr_size(str));
         if (al_ustr_equal(piece, dot) || al_ustr_equal(piece, dotdot)) {
            al_append_path_component(path, al_cstr(piece));
         }
         else {
            /* This might be an empty string, but that's okay. */
            al_ustr_assign(path->filename, piece);
         }
         break;
      }

      /* Non-last component. */
      al_ustr_assign_substr(piece, str, pos, slash);
      al_append_path_component(path, al_cstr(piece));
      pos = slash + 1;
   }

   al_ustr_free(piece);
   return true;

Error:

   al_ustr_free(piece);
   return false;
}