summaryrefslogtreecommitdiff
path: root/irtable.c
diff options
context:
space:
mode:
authorjacomi1999-01-25 18:35:13 +0000
committerjacomi1999-01-25 18:35:13 +0000
commitca51f6abf6debc1b6718f59129886fea04ee12b0 (patch)
treeb074cbd71c73bfa0d39a28f73e19cd8d28a653f6 /irtable.c
parentf63e7d593f9a1ca8152ec8180ac052e75c892a60 (diff)
downloadirbox-ca51f6abf6debc1b6718f59129886fea04ee12b0.zip
irbox-ca51f6abf6debc1b6718f59129886fea04ee12b0.tar.gz
irbox-ca51f6abf6debc1b6718f59129886fea04ee12b0.tar.bz2
irbox-ca51f6abf6debc1b6718f59129886fea04ee12b0.tar.xz
new directory structure and data
Diffstat (limited to 'irtable.c')
-rw-r--r--irtable.c225
1 files changed, 0 insertions, 225 deletions
diff --git a/irtable.c b/irtable.c
deleted file mode 100644
index 4bd4977..0000000
--- a/irtable.c
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- *
- * IRBOX, an Ivy driver for infra-red remote controls
- *
- * Copyright 1998-1999
- * Centre d'Etudes de la Navigation Aerienne
- *
- * Tables for decoding events
- *
- * Authors: Stephane Chatty <chatty@cenatoulouse.dgac.fr>
- *
- * $Id$
- *
- * Please refer to file version.h for the
- * copyright notice regarding this software
- */
-
-#include "irtable.h"
-#include "irdev.h"
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-typedef struct _irtablecell IrTableCell;
-
-struct _irtablecell {
- IrTable* table;
- unsigned char code[6];
- const char* key;
- IrTableCell* next;
-};
-
-
-#define KEYCELLS 127
-#define CODECELLS 1023
-
-static IrTableCell* KeyToCell [KEYCELLS];
-static IrTableCell* CodeToCell [CODECELLS];
-static int Initialized = 0;
-
-
-IrTable*
-IrCreateTable ()
-{
- if (!Initialized) {
- Initialized = 1;
- memset (KeyToCell, 0, sizeof (KeyToCell));
- memset (CodeToCell, 0, sizeof (CodeToCell));
- }
- return (IrTable*) malloc (sizeof (IrTable));
-}
-
-void
-IrTableName (IrTable* t, const char* n)
-{
- t->name = strdup (n);
-}
-
-void
-IrTableType (IrTable* t, const char* type)
-{
- t->type = strdup (type);
-}
-
-void
-IrTableAddBrand (IrTable* t, const char* b)
-{
-}
-
-
-
-static unsigned int
-IrHashKey (const char* key)
-{
- register unsigned int h = 0;
- register const char* p = key;
- while (*p)
- h += (h << 3) + *p++; /* this hash function was stolen from Tcl */
- return h % KEYCELLS;
-}
-
-static unsigned int
-IrHashCode (const unsigned char* code)
-{
- register unsigned int h = 0;
- register const unsigned char* p = code;
- register const unsigned char* q = p+6;
- while (p < q)
- h += (h << 3) + *p++; /* A ADAPTER */
- return h % CODECELLS;
-}
-
-void
-IrTableAddKey (IrTable* t, const char* k, int c0, int c1, int c2, int c3 , int c4, int c5)
-{
- IrTableCell* c = (IrTableCell*) malloc (sizeof (IrTableCell));
- IrTableCell** cc;
- IrTableCell* p;
-
- c->table = t;
- c->code[0] = c0;
- c->code[1] = c1;
- c->code[2] = c2;
- c->code[3] = c3;
- c->code[4] = c4;
- c->code[5] = c5;
- cc = CodeToCell + IrHashCode (c->code);
-
- /* collision handling */
- p = *cc;
- while (p) {
- if (strncmp (p->code, c->code, 6) == 0) {
- fprintf (stderr, "Code for key \'%s\' on %s", k, t->name);
- fprintf (stderr, " was already registered");
- fprintf (stderr, " for key \'%s\' on %s\n", p->key, p->table->name);
- free (c);
- return;
- }
- p = p->next;
- }
-
- /* fine, we can keep on storing that key */
- c->key = strdup (k);
- c->next = *cc;
- *cc = c;
-}
-
-int
-IrTableTranslateCode (const unsigned char* code, IrTable** table, const char** key)
-{
- IrTableCell* c;
-
- c = CodeToCell [IrHashCode (code)];
- while (c) {
- if (strncmp (code, c->code, 6) == 0)
- break;
- c = c->next;
- }
- if (c) {
- if (table) *table = c->table;
- if (key) *key = c->key;
- } else {
- if (table) *table = 0;
- if (key) *key = 0;
- }
- return (int) (c);
-}
-
-void
-IrResetTables (void)
-{
-#if 0 /* THIS CODE TRIGGERS A MEMORY BUG */
- /* WE'LL SEE TO THAT LATER */
-
- /* free all cells in hash tables */
- if (Initialized) {
- /* erase hash tables */
- IrTableCell** cc;
- for (cc = CodeToCell; cc < CodeToCell + CODECELLS; ++cc) {
- IrTableCell* c = *cc;
- while (c) {
- IrTableCell* old = c;
- c = c->next;
- free ((char*) old->key);
- free (old);
- }
- }
-
- for (cc = KeyToCell; cc < KeyToCell + CODECELLS; ++cc) {
- IrTableCell* c = *cc;
- while (c) {
- IrTableCell* old = c;
- c = c->next;
- free ((char*) old->key);
- free (old);
- }
- }
- }
-#endif
- /* initialize hash tables to zero */
- Initialized = 1;
- memset (KeyToCell, 0, sizeof (KeyToCell));
- memset (CodeToCell, 0, sizeof (CodeToCell));
-
- /* should also free tables */
-
-}
-
-void
-IrReadTables (const char* dirname)
-{
- char indexname[512];
- char filebuf [512];
- char absfilebuf [1024];
- FILE* index;
- int res;
- int nbline = 0;
-
- strcpy (indexname, dirname);
- strcat (indexname, "/tables.dir");
- index = fopen (indexname, "r");
-
-
- if (!index) {
- char errmsg [1024];
- sprintf (errmsg, "Cannot open index file %s", indexname);
- perror (errmsg);
- fprintf (stderr, "No table loaded\n");
- return;
- }
-
- /* scan index file, and launch parsing of every file listed in the index */
- while ((res = fscanf (index, "%512s", filebuf)) != EOF) {
- ++nbline;
- if (!res) {
- fprintf (stderr, "Malformatted line in %s, line %d:\n", indexname, nbline);
- continue;
- }
- strcpy (absfilebuf, dirname);
- strcat (absfilebuf, "/");
- strcat (absfilebuf, filebuf);
- IrTableReadFile (absfilebuf);
- }
-}
-