?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. #include <oscalls.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. union{
  6.         unsigned int w;
  7.         struct{
  8.                 unsigned char x;
  9.                 unsigned char y;
  10.         }xy;
  11. }cxy;
  12.  
  13. char * gets(char *str)  {
  14.         char * pstr;
  15.         char curs = 0;
  16.         char ch;
  17.         cxy.w = OS_GETXY();
  18.         *str=0x00;
  19.         while(1)
  20.         {
  21.                 OS_SETXY(cxy.xy.x,cxy.xy.y);
  22.                 pstr=str;
  23.                 while(*pstr) putchar(*pstr++);
  24.                 putchar(' ');
  25.                 OS_SETXY(cxy.xy.x+curs,cxy.xy.y);
  26.                 OS_PRATTR(INK_WHITE|PAPER_CYAN);
  27.                 ch=getchar();
  28.                 OS_PRATTR(INK_WHITE|PAPER_BLACK);
  29.                 switch(ch){
  30.                         case 0x0d:
  31.                                 putchar(0x0a);
  32.                                 return str;
  33.                         case 0x08:
  34.                                 if(curs){
  35.                                         strcpy(str + curs - 1,str + curs);
  36.                                         curs--;
  37.                                 }
  38.                                 break;
  39.                         case 0xf8:
  40.                                 if(curs)curs--;
  41.                                 break;
  42.                         case 0xfb:
  43.                                 if(*(str+curs))curs++;
  44.                                 break;
  45.                         default:
  46.                                 pstr = str + strlen(str+curs) + curs;
  47.                                 if(((pstr - str) + cxy.xy.x)!=78){
  48.                                         while(1){
  49.                                                 pstr[1]=pstr[0];
  50.                                                 if(pstr==(str+curs)) break;
  51.                                                 pstr--;
  52.                                         }
  53.                                         *(str+curs) = ch;
  54.                                         curs++;
  55.                                 }
  56.                                 break;
  57.                 }
  58.         }
  59.         return str;
  60. }