mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-24 00:44:23 +00:00
Upload
Digital Research
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
/***********************************************************************
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
**************************************************************************/
|
||||
#include <portab.h>
|
||||
#include <cpm.h>
|
||||
BYTE *getpass(prompt)
|
||||
BYTE *prompt;
|
||||
{
|
||||
MLOCAL ibuf[9];
|
||||
|
||||
_chrout(prompt,(LONG)strlen(prompt),CONOUT);/* same fn write uses */
|
||||
_noecho(ibuf,9);
|
||||
return(ibuf);
|
||||
}
|
||||
|
||||
#define INCHAR 0xFFL
|
||||
#define DEL 0177
|
||||
#define CTRLX 030
|
||||
#define CTRLC 003
|
||||
VOID _noecho(bf,ln)
|
||||
BYTE *bf;
|
||||
WORD ln;
|
||||
{
|
||||
WORD cur;
|
||||
WORD ch;
|
||||
|
||||
cur = 0;
|
||||
FOREVER {
|
||||
switch( ch = __BDOS(CONIO,INCHAR) & 0177 ) {
|
||||
case '\b':
|
||||
case DEL:
|
||||
if( cur>0 ) {
|
||||
cur--;
|
||||
bf--;
|
||||
}
|
||||
break;
|
||||
case CTRLX:
|
||||
bf -= cur;
|
||||
cur = 0;
|
||||
break;
|
||||
case '\r':
|
||||
case '\n':
|
||||
*bf = ZERO;
|
||||
return;
|
||||
case CTRLC:
|
||||
exit(1);
|
||||
default:
|
||||
*bf++ = ch;
|
||||
cur++;
|
||||
if( cur+1 >= ln ) {
|
||||
*bf = ZERO;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user