Newsgroup: it.comp.lang.c
Titolo: [Aiuto] dove spaglio?

Ciao a tutti NG,
Allora inizio suto dicendo che questo che segue non è un semplice
codice di un programma X ma è un pezzo fondamentale del mio OS...
infatti è la procedura di LOG IN nel sistema... percui non posso
utilizare nessun file .h standard ne altre procedure standard...
quello che vedete è un codice semplificato infatti ho un procedura per
scrivere direttamente le sringe ma qui ho preferito scrivere sono
quella per scrivere un singolo caratere.
Io conosco poco il C/C++ e ancor di meno il C/C++ ANSI percui se ho
fatto qualche cavolata vi prego di dirmelo.... e se il codice è
ottimizabile meglio...
Ah dimenticavo io ho il Turbo C++ v1.01. uso questo (e non LCC o VC o
GCC) perche apparentemente solo questo ti ristituisce in modo quasi
indolore il file .asm che poi io inseriro al interno del mio OS... i
file .asm sono + manegevoli ed ottimizabili.
detto questo devo dire che io conosco meglio il PASCL del C/C++ percui
ho scritto prima la procedura in PASCAL (che regolamente funzione)
prima che in C/C++ (che regolarmente non funge) percui se volete
potete vedere il sorgente PASCAL prima di andare a vedere quello C/C++
naturalmente a me interessa principalmente la procedura GetPassword
per questo posto solo questo pezzo del LOGIN.PAS visto che il resto
non l'ho fatto io ma bensi è fatto da procedure standard (readln,
writeln)
Procedure GetPassword(PassChr : Char; Var PassVar : String);
Var Ch : Char;
Begin
  Repeat
    Ch := ReadKey;
    If Ch <> #13
      Then If Ch <> #8
        Then Begin
          Write(PassChr);
          PassVar:= PassVar + Ch;
          End
        Else If Length(PassVar) > 0
          Then Begin
            Write(Ch,' ', Ch);
            Delete(PassVar,Length(PassChr),1);
            End;
  Until Ch = Chr(13);
  WriteLn;
End;
mentre il codice di login.cpp e tutto vostro
void putchar(char chr) {
  asm {
    mov ah, 0x0E
    mov al, chr
    mov bx, 7
    int 0x10
    }
  }
char getchar() {
  char chr;
  asm {
    xor   ax, ax
    int   16h
    mov   chr, al
  }
  return chr;
}
char *GetPassword(char PassChar) {
  char *pws;
  char  chr = 0;
  int  cursor = 0;
  while (chr != 13) {
    chr = getchar();
    if (chr != 13)
      if (chr != 8) {
        putchar(PassChar);
        pws[cursor] = chr;
        cursor++;
      } else
        if (cursor > 0) {
          putchar(chr);
          putchar(' ');
          putchar(chr);
          cursor--;
          }
      }
    pws[cursor] = '\0';
    return pws;
}
char *GetString() {
  char *pws;
  char  chr = 0;
  int  cursor = 0;
  while (chr != 13) {
    chr = getchar();
    if (chr != 13)
      if (chr != 8) {
        putchar(chr);
        pws[cursor] = chr;
        cursor++;
      } else
        if (cursor > 0) {
          putchar(chr);
          putchar(' ');
          putchar(chr);
	  cursor--;
	}
      }
  pws[cursor] = '\0';
  return pws;
}
void main(void) {
  char *AddMinPass = "pass";
  char *AddMinUser = "admin";
  char *user = "UserName: ";
  char *pass = "Password: ";
  char *error = "Error!!!";
  char *AMU;
  char *AMP;
  int i;
  for (i=0;i<10;i++)
    putchar(user[i]);
  AMU = GetString();
  putchar(13); putchar(10);
  for (i=0;i<10;i++)
    putchar(pass[i]);
  AMP = GetPassword('*');
  if ((AMP == AddMinPass) && (AMU == AddMinUser))
    {
      putchar('O');
      putchar('K');
    } else {
      for (i=0;i<8;i++)
      putchar(error[i]);
    }
}
Il Razziatore,
The Only Good Windows in an uninstalled Windows
-----------------------------------------------
E-MAILs : IlRazziat...@NOSPAMnetscape.net
WEB     : 
http://www.razziatore.dns2go.com/
ICQ     : 67552596
Il Razziatore,
The Only Good Windows in an uninstalled Windows
-----------------------------------------------
E-MAILs : IlRazziat...@NOSPAMnetscape.net
WEB     : 
http://www.razziatore.dns2go.com/
ICQ     : 67552596

Forse in ortografia ? ;)