/*
* Acess 2 Login
+ * - By John Hodge (thePowersGang)
*/
#include "header.h"
+#include <acess/devices/pty.h> // Enable/disable echo
// === CONSTANTS ===
#define BUFLEN 1024
for(;;)
{
sUsername = GetUsername();
- if(!sUsername) continue;
+ if(!sUsername || !sUsername[0]) continue;
sPassword = GetPassword();
- if(!sPassword) continue;
+ if(!sPassword) {
+ free(sUsername);
+ continue;
+ }
if( (uid = ValidateUser(sUsername, sPassword)) == -1 )
{
printf("\nInvalid username or password\n");
// Wait for child to terminate
_SysWaitTID(pid, &status);
+
+ // Clear graphics mode
+ struct ptymode mode = {.InputMode = PTYIMODE_ECHO|PTYIMODE_CANON,.OutputMode=0};
+ _SysIOCtl(0, PTY_IOCTL_SETMODE, &mode);
+ fprintf(stderr, "\x1b[R");
}
return 0;
int pos = 0;
char ch;
+ struct ptymode mode;
+ const int is_pty = (_SysIOCtl(0, DRV_IOCTL_TYPE, NULL) == DRV_TYPE_TERMINAL);
+
+ // Clear PTY echo
+ if( !bEcho && is_pty ) {
+ _SysIOCtl(0, PTY_IOCTL_GETMODE, &mode);
+ mode.InputMode &= ~PTYIMODE_ECHO;
+ _SysIOCtl(0, PTY_IOCTL_SETMODE, &mode);
+ }
+
// Read in text
while( (ch = fgetc(stdin)) != -1 && ch != '\n' )
{
else
ret[pos++] = ch;
- // Don't echo out to the screen
- if( bEcho ) {
- fputc(ch, stdout);
- fflush(stdout);
- }
-
if(pos == BUFLEN-1) break;
}
ret[pos] = '\0';
-
- printf("\n");
+
+ // Re-set echo
+ if( !bEcho && is_pty ) {
+ mode.InputMode |= PTYIMODE_ECHO;
+ _SysIOCtl(0, PTY_IOCTL_SETMODE, &mode);
+ }
+
return strdup(ret);
}