mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-24 17:04:19 +00:00
Upload
Digital Research
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
/***********************************************************************
|
||||
*
|
||||
* g e t p a s s F u n c t i o n
|
||||
* -------------------------------
|
||||
* Copyright 1982 by Digital Research Inc. All rights reserved.
|
||||
*
|
||||
* "getpass" writes a prompt to the console (NOT stdout) and accepts
|
||||
* a string of 1-8 chars from the console (NOT stdin) without
|
||||
* echoing the input to the terminal. Only limited CP/M line edit
|
||||
* commands are available (CTL H, DEL, CTL X) on input.
|
||||
*
|
||||
* Calling sequence:
|
||||
* pret = getpass(prompt)
|
||||
* Where:
|
||||
* pret -> ptr to 1-8 chars of null terminated password
|
||||
* prompt -> null teminated console out msg.
|
||||
*
|
||||
* Modified:
|
||||
* Oct 83 whf - handle OS Independent Raw Input
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
#include "portab.h"
|
||||
#include "osif.h"
|
||||
|
||||
BYTE * getpass(prompt) /* CLEAR FUNCTION ***********/
|
||||
BYTE *prompt;
|
||||
{
|
||||
MLOCAL BYTE ibuf[9];
|
||||
|
||||
_conout(prompt,strlen(prompt),CONOUT); /* same fn write uses */
|
||||
_noecho(ibuf,9);
|
||||
return(ibuf);
|
||||
}
|
||||
|
||||
#define CMASK 0x7F
|
||||
#define DEL 0x7F
|
||||
#define CTRLX 0x18
|
||||
#define CTRLC 0x03
|
||||
MLOCAL _noecho(bf,ln)
|
||||
REG BYTE *bf;
|
||||
WORD ln;
|
||||
{
|
||||
REG WORD cur;
|
||||
WORD ch;
|
||||
|
||||
cur = 0;
|
||||
FOREVER {
|
||||
switch( ch = CMASK & _ttyinraw()) {
|
||||
case '\b':
|
||||
case DEL:
|
||||
if( cur>0 ) {
|
||||
cur--;
|
||||
bf--;
|
||||
}
|
||||
break;
|
||||
case CTRLX:
|
||||
bf -= cur;
|
||||
cur = 0;
|
||||
break;
|
||||
case '\r':
|
||||
case '\n':
|
||||
*bf = NULL;
|
||||
return;
|
||||
case CTRLC:
|
||||
exit(1);
|
||||
default:
|
||||
*bf++ = ch;
|
||||
cur++;
|
||||
if( cur+1 >= ln ) {
|
||||
*bf = NULL;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
|
||||
MLOCAL _conout(buffer,count,os_func) /***************************/
|
||||
REG BYTE *buffer; /* -> 1st char output */
|
||||
REG WORD count; /* = # bytes to xfer */
|
||||
REG WORD os_func; /* OS function to use */
|
||||
{ /***************************/
|
||||
WORD xcount; /* save area for count */
|
||||
/* */
|
||||
while(count-- > 0) /* Until all written */
|
||||
__OSIF(os_func,*buffer++); /* Output next character */
|
||||
} /***************************/
|
||||
Reference in New Issue
Block a user