Add get_diacrs() and top level functions
authorAlexey Gladkov <gladkov.alexey@gmail.com>
Fri, 4 Jan 2013 22:05:02 +0000 (02:05 +0400)
committerAlexey Gladkov <gladkov.alexey@gmail.com>
Fri, 4 Jan 2013 22:05:02 +0000 (02:05 +0400)
Signed-off-by: Alexey Gladkov <gladkov.alexey@gmail.com>
src/libkeymap/dump.c
src/libkeymap/keymap.h
src/libkeymap/keymapP.h
src/libkeymap/load.c
src/libkeymap/parse.y

index 3ab45ad..697c982 100644 (file)
@@ -545,3 +545,12 @@ unexpected:
                }
        }
 }
+
+void
+dump_keymap(struct keymap *kmap, FILE *fd, char table_shape, char numeric)
+{
+       dump_keymaps(kmap, fd);
+       dump_keys(kmap, fd, table_shape, numeric);
+       dump_funcs(kmap, fd);
+       dump_diacs(kmap, fd);
+}
index d4f0f43..38d9cb6 100644 (file)
@@ -94,13 +94,16 @@ int keymap_init(struct keymap *km);
 void keymap_free(struct keymap *kmap);
 int parse_keymap(struct keymap *kmap, lkfile_t *f);
 
+int get_keymap(struct keymap *kmap, int console);
 int get_keys(struct keymap *kmap, int console);
 int get_funcs(struct keymap *kmap, int console);
+int get_diacrs(struct keymap *kmap, int console);
 
 int loadkeys(struct keymap *kmap, int fd, int kbd_mode);
 int dump_bkeymap(struct keymap *kmap);
 int dump_ctable(struct keymap *kmap, FILE *fd);
 
+void dump_keymap(struct keymap *kmap, FILE *fd, char table_shape, char numeric);
 void dump_keymaps(struct keymap *kmap, FILE *fd);
 void dump_funcs(struct keymap *kmap, FILE *fd);
 void dump_diacs(struct keymap *kmap, FILE *fd);
index 539c4b2..06c777d 100644 (file)
@@ -14,5 +14,6 @@ void dumpchar(FILE *fd, unsigned char c, int comma);
 
 int addkey(struct keymap *kmap, int k_index, int k_table, int keycode);
 int addfunc(struct keymap *kmap, struct kbsentry kbs);
+int compose(struct keymap *kmap, unsigned int diacr, unsigned int base, unsigned int res);
 
 #endif /* LK_KEYMAP_PRIVATE_H */
index 5533ffe..0467545 100644 (file)
@@ -68,3 +68,41 @@ get_funcs(struct keymap *kmap, int fd)
 
        return 0;
 }
+
+int
+get_diacrs(struct keymap *kmap, int fd)
+{
+#ifdef KDGKBDIACRUC
+       int request = KDGKBDIACRUC;
+       struct kbdiacrsuc kd;
+       struct kbdiacruc *ar = kd.kbdiacruc;
+#else
+       int request = KDGKBDIACR;
+       struct kbdiacrs kd;
+       struct kbdiacr *ar = kd.kbdiacr;
+#endif
+       int i;
+
+       if (ioctl(fd, request, (unsigned long) &kd)) {
+               log_error(kmap, _("KDGKBDIACR(UC): %s: Unable to get accent table"),
+                       strerror(errno));
+               return -1;
+       }
+
+       for (i = 0; i < kd.kb_cnt; i++) {
+               if (compose(kmap, (ar+i)->diacr, (ar+i)->base, (ar+i)->result) < 0)
+                       return -1;
+       }
+
+       return 0;
+}
+
+int
+get_keymap(struct keymap *kmap, int fd)
+{
+       if (get_keys(kmap, fd)   < 0 ||
+           get_funcs(kmap, fd)  < 0 ||
+           get_diacrs(kmap, fd) < 0)
+               return -1;
+       return 0;
+}
index bad2e1b..28c436e 100644 (file)
@@ -266,8 +266,8 @@ addfunc(struct keymap *kmap, struct kbsentry kbs)
        return 0;
 }
 
-static int
-compose(struct keymap *kmap, int diacr, int base, int res)
+int
+compose(struct keymap *kmap, unsigned int diacr, unsigned int base, unsigned int res)
 {
        accent_entry *ptr;
        int direction;