port-work; won't compile or even work
[ppcskel.git] / main.c
diff --git a/main.c b/main.c
index 133d998531a4271cbb0e707f33c115b66385adfe..67d6d88c26a3224b997f44b943af21462bb2cac0 100644 (file)
--- a/main.c
+++ b/main.c
@@ -128,6 +128,7 @@ int main(void)
        /* load HID keyboard driver */
        usb_hidkb_init();
 
+wait_kb:
        /* wait for usb keyboard plugged in */
        if(!usb_hidkb_inuse()) {
                print_str("plug in an usb keyboard", 23);
@@ -145,17 +146,33 @@ int main(void)
 #define TABSIZE 4
        /* you are welcome to make this nice :) */
        char str[7];
-       u16 i, j, y=STDOUT_BORDER_TOP, x=STDOUT_BORDER_LEFT;
+       u16 i, j, ret=0, y=STDOUT_BORDER_TOP, x=STDOUT_BORDER_LEFT;
        u16 old_x, old_y;
-       struct kbrep *k;
+       struct kbrep *k, *old=NULL;
 
-       while(1) {
+       while(usb_hidkb_inuse()) {
                memset(str, '\0', 7);
-               j=0;
                k = usb_hidkb_getChars();
+               j=0;
                old_x = x; /* save actual x and y position for printing after the loop */
                old_y = y;
                for(i=0; k->keys[i]>0; i++) {
+
+                       /* dropping char's if necessary */
+                       if(old) {
+                               for(j=0; j < 6; j++) {
+                                       if(old->keys[j] == k->keys[i]) {
+                                               ret = 1;
+                                               break;
+                                       }
+                               }
+                       }
+                       if(ret) {
+                               ret = 0;
+                               continue;
+                       }
+                       j = 0;
+
                        unsigned char key = usb_hidkb_get_char_from_keycode(k->keys[i],
                                        (k->mod & MOD_lshift) || (k->mod & MOD_rshift));
                        /* no key or key not relevant? next, please. */
@@ -166,9 +183,11 @@ int main(void)
                        if (key == '\n') {
                                x = STDOUT_BORDER_LEFT;
                                y += FONT_HEIGHT;
+                               printf("\n");
                        /* TAB pressed? */
                        } else if (key == '\t') {
                                x += (TABSIZE*FONT_WIDTH);
+                               printf("\t");
 
                        /* BACKSPACE pressed? */
                        } else if (key == '\r') {
@@ -191,14 +210,18 @@ int main(void)
                                y = STDOUT_BORDER_TOP;
                        }
                }
-               free(k);
+               if(old) {
+                       free(old);
+               }
+               old = k;
                if(j > 0) { /* when there was any printable stuff, show it */
                        print_str_noscroll(old_x, old_y, str);
-                       printf("y: %d\n", y);
+                       printf("%s", str);
                }
-
        }
 
+       goto wait_kb;
+
 #if 0
        printf("===============================\n");