home *** CD-ROM | disk | FTP | other *** search
/ Acorn User 10 / AU_CD10.iso / Archived / Updates / Flash / writeflash / !MakeFlash / c / dictionary < prev    next >
Text File  |  2000-04-24  |  1KB  |  90 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>
  5. #include <math.h>
  6. #include <ctype.h>
  7. //
  8. #include "proto.h"
  9. #include "dictionary.h"
  10.  
  11.  
  12. CHARACTER *dictionary[65536];
  13. unsigned int used_characters = 0;
  14.  
  15. static U32 useddepths[65536/32], usedids[65536/32];
  16.  
  17.  
  18. void dictionary_init() {
  19.  
  20.   unsigned int i;
  21.  
  22.   for (i = 0; i < 65536/32; i++)
  23.     useddepths[i] = usedids[i] = 0;
  24. }
  25.  
  26.  
  27. int is_depth_used(U16 depth) {
  28.  
  29.   if (useddepths[depth>>5] & (1<<(depth &31)))  return 1;
  30.  
  31.   return 0;
  32. }
  33.  
  34.  
  35. void use_depth(U16 depth, int use) {
  36.  
  37.   if (use)
  38.     useddepths[depth>>5] |= 1<<(depth &31);
  39.   else
  40.     useddepths[depth>>5] &= ~(1<<(depth &31));
  41. }
  42.  
  43.  
  44. int is_id_used(U16 id) {
  45.  
  46.   if (get_character_type(id) == CHARACTER_NOT_FOUND)  return 0;
  47.   return 1;
  48. }
  49.  
  50.  
  51. void use_id(U16 id) {
  52.  
  53.   usedids[id>>5] |= 1<<(id &31);
  54. }
  55.  
  56.  
  57. int get_character_type(U16 id) {
  58.  
  59.   unsigned int i;
  60.  
  61.   for (i = 0; i < used_characters; i++)
  62.     if (dictionary[i]->id == id)         return dictionary[i]->type;
  63.  
  64.   return CHARACTER_NOT_FOUND;
  65. }
  66.  
  67.  
  68. int add_character(U16 id, void *data, int type) {
  69.  
  70.   CHARACTER *character;
  71.  
  72.   if (is_id_used(id)) {
  73.     fprintf(stderr, "Dublicate character ID (%d)\n", id);
  74.     return 1;
  75.   }
  76.  
  77.   character = malloc(sizeof(CHARACTER));
  78.   if (!character) {
  79.     fprintf(stderr, "No room\n");
  80.     return 1;
  81.   }
  82.   character->type     = type;
  83.   character->data.raw = data;
  84.   character->id       = id;
  85.   character->used     = 0;
  86.   dictionary[used_characters++] = character;
  87.  
  88.   return 0;
  89. }
  90.