Advertisement
Guest User

scanf

a guest
Feb 25th, 2012
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.52 KB | None | 0 0
  1. //Estas funciones estan bajo la licencia GPL v3
  2. #include <stdio.h>
  3.  
  4. int key_aski (int i)
  5. {
  6.     struct tabla_aski *p;
  7.     p = t_aski;
  8.     while(p->ascii){
  9.         p++;
  10.         if (i ==p->ascii)return p->keycode;
  11.     }
  12.     return 0;
  13. }
  14. /*
  15. int scancode(unsigned char c,char *buffer,int salir)
  16. {
  17.     switch(c & 0x7f) {
  18.     case 1: //esc
  19.         strcat(buffer,"Esc");
  20.         salir++;
  21.         break;
  22.     case 2: //1
  23.         if(capslock==0) {
  24.             printk("1");
  25.             strcat(buffer,"1");
  26.         } else if(capslock==1) {
  27.             printk("!");
  28.             strcat(buffer,"!");
  29.         }          
  30.         break;
  31.     case 3: //2
  32.         if(capslock==0) {
  33.             printk("2");
  34.             strcat(buffer,"2");
  35.         } else if(capslock==1) {
  36.             printk("%c",'"');
  37.             strcat(buffer,(char *)'"');
  38.         }
  39.         break;
  40.     case 4: //3
  41.         if(capslock==0) {
  42.             printk("3");
  43.             strcat(buffer,"3");
  44.         } else if(capslock==1) {
  45.             printk("#");
  46.             strcat(buffer,"#");
  47.         }
  48.         break;
  49.     case 5: //4
  50.         if(capslock==0) {
  51.             printk("4");
  52.             strcat(buffer,"4");
  53.         } else if(capslock==1) {
  54.             printk("$");
  55.             strcat(buffer,"$");
  56.         }
  57.         break;
  58.     case 6: //5
  59.         if(capslock==0) {
  60.             printk("5");
  61.             strcat(buffer,"5");
  62.         } else if(capslock==1) {
  63.             printk("%");
  64.             strcat(buffer,"%");
  65.         }  
  66.         break;
  67.     case 7: //6
  68.         if(capslock==0) {
  69.             printk("6");
  70.             strcat(buffer,"6");
  71.         } else if(capslock==1) {
  72.             printk("&");
  73.             strcat(buffer,"&");
  74.         }
  75.         break;
  76.     case 8: //7
  77.         if(capslock==0) {
  78.             printk("7");
  79.             strcat(buffer,"7");
  80.         } else if(capslock==1) {
  81.             printk("/");
  82.             strcat(buffer,"/");
  83.         }
  84.         break;
  85.     case 9: //8
  86.         if(capslock==0) {
  87.             printk("8");
  88.             strcat(buffer,"8");
  89.         } else if(capslock==1) {
  90.             printk("(");
  91.             strcat(buffer,"(");
  92.         }
  93.         break;
  94.     case 10: //9
  95.         if(capslock==0) {
  96.             printk("9");
  97.             strcat(buffer,"9");
  98.         } else if(capslock==1) {
  99.             printk(")");
  100.             strcat(buffer,")");
  101.         }
  102.         break;
  103.     case 11: //0
  104.         if(capslock==0) {
  105.             printk("0");
  106.             strcat(buffer,"0");
  107.         } else if(capslock==1) {
  108.             printk("=");
  109.             strcat(buffer,"=");
  110.         }  
  111.         break;
  112.     case 12: //'
  113.         if(capslock==0) {
  114.             printk("'");
  115.             strcat(buffer,"'");
  116.         } else if(capslock==1) {
  117.             printk("?");
  118.             strcat(buffer,"?");
  119.         }  
  120.         break;
  121.     case 13: //¿
  122.         if(capslock==0) {
  123.             printk("%c",es[7]);
  124.             strcat(buffer,"¿");
  125.         } else if(capslock==1) {
  126.             printk("%c",es[8]);
  127.             strcat(buffer,"¡");
  128.         }  
  129.         break;
  130.     case 16: //q
  131.         if(capslock==0) printk("q");
  132.         else if(capslock==1) printk("Q");
  133.         strcat(buffer,"q");
  134.         break;
  135.     case 17: //w
  136.         if(capslock==0) printk("w");
  137.         else if(capslock==1) printk("W");
  138.         strcat(buffer,"w");
  139.         break;
  140.     case 18: //e
  141.         if(capslock==0) {
  142.             if(tilde==0) printk("e");
  143.             else if(tilde==1) printk("%c",es[3]);
  144.         }
  145.         else if(capslock==1) printk("E");
  146.         tilde=0;
  147.         strcat(buffer,"e");                
  148.         break;
  149.     case 19: //r
  150.         if(capslock==0) printk("r");
  151.         else if(capslock==1) printk("R");
  152.         strcat(buffer,"r");
  153.         break;
  154.     case 20: //t
  155.         if(capslock==0) printk("t");
  156.         else if(capslock==1) printk("T");
  157.         strcat(buffer,"t");
  158.         break;
  159.     case 21: //y
  160.         if(capslock==0) printk("y");
  161.         else if(capslock==1) printk("Y");
  162.         strcat(buffer,"y");
  163.         break;
  164.     case 22: //u
  165.         if(capslock==0) {
  166.             if(tilde==0) printk("u");
  167.             else if(tilde==1) printk("%c",es[6]);
  168.         } else if(capslock==1) printk("U");
  169.         tilde=0;
  170.         strcat(buffer,"u");
  171.         break;
  172.     case 23: //i
  173.         if(capslock==0) {
  174.             if(tilde==0) printk("i");
  175.             else if(tilde==1) printk("%c",es[4]);
  176.         } else if(capslock==1) printk("I");
  177.         tilde=0;
  178.         strcat(buffer,"i");
  179.         break;
  180.     case 24: //o
  181.         if(capslock==0) {
  182.             if(tilde==0) printk("o");
  183.             else if(tilde==1) printk("%c",es[5]);
  184.         } else if(capslock==1) printk("O");
  185.         tilde=0;
  186.         strcat(buffer,"o");
  187.         break;
  188.     case 25: //p
  189.         if(capslock==0) printk("p");
  190.         else if(capslock==1) printk("P");
  191.         strcat(buffer,"p");
  192.         break;
  193.     case 26: //'
  194.         tilde = 1;
  195.         break;
  196.     case 27: //+
  197.         if(capslock==0) {
  198.             printk("+");
  199.             strcat(buffer,"+");
  200.         } else if(capslock==1) {
  201.             printk("*");
  202.             strcat(buffer,"*");
  203.         }
  204.         break;
  205.     case 30: //a
  206.         if(capslock==0) {
  207.             if(tilde==0) printk("a");
  208.             else if(tilde==1) printk("%c",es[2]);
  209.         }
  210.         else if(capslock==1) printk("A");
  211.         tilde=0;
  212.         strcat(buffer,"a");
  213.         break;
  214.     case 31: //s
  215.         if(capslock==0) printk("s");
  216.         else if(capslock==1) printk("S");
  217.         strcat(buffer,"s");
  218.         break;
  219.     case 32: //d
  220.         if(capslock==0) printk("d");
  221.         else if(capslock==1) printk("D");
  222.         strcat(buffer,"d");
  223.         break;
  224.     case 33: //f
  225.         if(capslock==0) printk("f");
  226.         else if(capslock==1) printk("F");
  227.         strcat(buffer,"f");
  228.         break;
  229.     case 34: //g
  230.         if(capslock==0) printk("g");
  231.         else if(capslock==1) printk("G");
  232.         strcat(buffer,"g");
  233.         break;
  234.     case 35: //h
  235.         if(capslock==0) printk("h");
  236.         else if(capslock==1) printk("H");
  237.         strcat(buffer,"h");
  238.         break;
  239.     case 36: //j
  240.         if(capslock==0) printk("j");
  241.         else if(capslock==1) printk("J");
  242.         strcat(buffer,"j");
  243.         break;
  244.     case 37: //k
  245.         if(capslock==0) printk("k");
  246.         else if(capslock==1) printk("K");
  247.         strcat(buffer,"k");
  248.         break;
  249.     case 38: //l
  250.         if(capslock==0) printk("l");
  251.         else if(capslock==1) printk("L");
  252.         strcat(buffer,"l");
  253.         break;
  254.     case 39: //ñ
  255.         if(capslock==0) printk("%c",es[0]);
  256.         else if(capslock==1) printk("%c",es[1]);
  257.         strcat(buffer,(char*)es[1]);
  258.         break;
  259.     case 40: //{
  260.         if(capslock==0) {
  261.             printk("{");
  262.             strcat(buffer,"{");
  263.         } else if(capslock==1) {
  264.             printk("[");
  265.             strcat(buffer,"[");
  266.         }
  267.         break;
  268.     case 43: //}
  269.         if(capslock==0) {
  270.             printk("}");
  271.             strcat(buffer,"}");
  272.         } else if(capslock==1) {
  273.             printk("]");
  274.             strcat(buffer,"]");
  275.         }
  276.         break;
  277.     case 86: //<
  278.         if(capslock==0) {
  279.             printk("<");
  280.             strcat(buffer,"<");
  281.         } else if(capslock==1) {
  282.             printk(">");
  283.             strcat(buffer,">");
  284.         }
  285.         break;
  286.     case 44: //z
  287.         if(capslock==0) printk("z");
  288.         else if(capslock==1) printk("Z");
  289.         strcat(buffer,"z");
  290.         break;
  291.     case 45: //x
  292.         if(capslock==0) printk("x");
  293.         else if(capslock==1) printk("X");
  294.         strcat(buffer,"x");
  295.         break;
  296.     case 46: //c
  297.         if(capslock==0) printk("c");
  298.         else if(capslock==1) printk("C");
  299.         strcat(buffer,"c");
  300.         break;
  301.     case 47: //v
  302.         if(capslock==0) printk("v");
  303.         else if(capslock==1) printk("V");
  304.         strcat(buffer,"v");
  305.         break;
  306.     case 48: //b
  307.         if(capslock==0) printk("b");
  308.         else if(capslock==1) printk("B");
  309.         strcat(buffer,"b");
  310.         break;
  311.     case 49: //n
  312.         if(capslock==0) printk("n");
  313.         else if(capslock==1) printk("N");
  314.         strcat(buffer,"n");
  315.         break;
  316.     case 50: //m
  317.         if(capslock==0) printk("m");
  318.         else if(capslock==1) printk("M");
  319.         strcat(buffer,"m");
  320.         break;
  321.     case 51: //,
  322.         if(capslock==0) {
  323.             printk(",");
  324.             strcat(buffer,",");
  325.         } else if(capslock==1) {
  326.             printk(";");
  327.             strcat(buffer,";");
  328.         }
  329.         break;
  330.     case 52: //.
  331.         if(capslock==0) {
  332.             printk(".");
  333.             strcat(buffer,".");
  334.         } else if(capslock==1) {
  335.             printk(":");
  336.             strcat(buffer,":");
  337.         }
  338.         break;
  339.     case 53: //-
  340.         if(capslock==0) {
  341.             printk("-");
  342.             strcat(buffer,"-");
  343.         } else if(capslock==1) {
  344.             printk("_");
  345.             strcat(buffer,"_");
  346.         }
  347.         break;
  348.     case 42: //LShift
  349.         if(capslock==0) capslock=1;
  350.         else if(capslock==1) capslock=0;
  351.         break;
  352.     case 54: //RShift
  353.         if(capslock==0) capslock=1;
  354.         else if(capslock==1) capslock=0;
  355.         break;
  356.     case 56: //LAlt
  357.         lalt=0;
  358.         break;
  359.     case 28: //Enter
  360.         if(strcmp(buffer,"")!=0) salir++;
  361.         break;
  362.     case 29: //LCtrl
  363.         break;
  364.     case 57: //Espacio
  365.         printk(" ");
  366.         strcat(buffer," ");
  367.         break;
  368.     case 58: //Bloq Mayus
  369.         if(capslock==0) capslock=1;
  370.         else if(capslock==1) capslock=0;
  371.         break;
  372.     case 14: //Retroceso
  373.         if(strcmp(buffer,"")!=0) {
  374.             tot=strlen(buffer)-1;
  375.             buffer[tot]='\0';
  376.             DEFAULT_COLUMN-=2;
  377.             printk(" ");
  378.             DEFAULT_COLUMN-=2;
  379.             curmov();
  380.         }
  381.         break;
  382.         //faltan declarar un monton todavia... 
  383.     }
  384.     return salir;      
  385. }*/
  386.  
  387. int ascancode(unsigned char c,char *buffer,int salir)
  388. {
  389.     switch(c & 0x7f) {
  390.         case 42: //LShift
  391.             if(capslock==0) capslock=1;
  392.             else if(capslock==1) capslock=0;
  393.             break;
  394.         case 54: //RShift
  395.             if(capslock==0) capslock=1;
  396.             else if(capslock==1) capslock=0;
  397.             break;
  398.         case 56: //Alt
  399.             lalt=1;
  400.             break;
  401.     }
  402.     return salir;      
  403. }
  404.  
  405. int get_code() {
  406.     int c; 
  407.     c = inb(0x64);
  408.     if ((c & 1) == 0) {
  409.         int comp;
  410.         comp = inb((5)+0x3f8);
  411.         if (comp & 0x01){
  412.             c = inb((0)+0x3f8);
  413.             return (key_aski(c));  
  414.         }
  415.         return(0);
  416.     }
  417.     c = inb(0x60);
  418.     return((c));
  419. }
  420.  
  421. int scanf(char *buffer)
  422. {
  423.     int salir=0;
  424.     while(salir==0){
  425.         unsigned char c = get_code();
  426.         if ((c & 0x80)!=0) {
  427.             //salir=scancode(c,buffer,0);
  428.         } else if (c!=0) {
  429.             salir=ascancode(c,buffer,0);
  430.         }
  431.         curmov();
  432.     }
  433.     if (strcmp(buffer,"")!=0) printk("\n");
  434.     curmov();
  435.     return 0;
  436. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement