File: tw_class.c

package info (click to toggle)
biew 5.6.2-2
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 4,000 kB
  • ctags: 7,157
  • sloc: ansic: 50,860; asm: 809; makefile: 396; pascal: 371
file content (76 lines) | stat: -rw-r--r-- 2,132 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/**
 * @namespace   biewlib
 * @file        biewlib/tw_class.c
 * @brief       This file contains implementation of classes for Text Window manager.
 * @version     -
 * @remark      this source file is part of Binary vIEW project (BIEW).
 *              The Binary vIEW (BIEW) is copyright (C) 1995 Nick Kurshev.
 *              All rights reserved. This software is redistributable under the
 *              licence given in the file "Licence.en" ("Licence.ru" in russian
 *              translation) distributed in the BIEW archive.
 * @note        Requires POSIX compatible development system
 *
 * @author      Nick Kurshev
 * @since       2000
 * @note        Development, fixes and improvements
**/
#include "biewlib/twin.h"
#include <string.h>
#include <stdlib.h>

static linearArray *class_set = NULL;

static tCompare __FASTCALL__ comp_class(const void __HUGE__ *e1,const void __HUGE__ *e2)
{
  const TwClass __HUGE__ *t1, __HUGE__ *t2;
  t1 = (const TwClass __HUGE__ *)e1;
  t2 = (const TwClass __HUGE__ *)e2;
  return stricmp(t1->name, t2->name);
}

tBool __FASTCALL__ twcRegisterClass(const char *name, unsigned flags, twClassFunc method)
{
  TwClass newest;
  TwClass *exists = twcFindClass(name);
  if(!exists)
  {
     if(!class_set) class_set = la_Build(0,sizeof(TwClass),NULL);
     if(class_set)
     {
        newest.name = malloc(strlen(name)+1);
        if(newest.name)
        {
          strcpy(newest.name,name);
          newest.flags = flags;
          newest.method= method;
          if(!la_AddData(class_set,&newest, NULL))
          {
            free(newest.name);
            return False;
          }
          la_Sort(class_set, comp_class);
          return True;
        }
     }
  }
  return False;
}

static void __FASTCALL__ del_class(void __HUGE__ *it)
{
  const TwClass __HUGE__ *t1;
  t1 = (const TwClass __HUGE__ *)it;
  free(t1->name);
}

void __FASTCALL__ twcDestroyClassSet(void)
{
  if(class_set) la_IterDestroy(class_set, del_class);
}

TwClass * __FASTCALL__ twcFindClass(const char *name)
{
 TwClass key;
 key.name = name;
 return (TwClass *)la_Find(class_set,&key, comp_class);
}