/* chario.c September 14, 1982 9:22 PM */
#include "env.h"
/* runtime */
extern SSReturn();
extern IsDigit();
extern PutCRChar();
extern GetChar();
extern LC();
/* user interface data */
char leftover;
int any;
int mlerr[3];
int eGetChar() /* GetChar with echo */
{
leftover = GetChar() & 0177;
PutCRChar(leftover);
if (leftover == 0177) SSReturn(mlerr, 1);
return(leftover);
};
int GetHex()
{
return(GetNum(16));
};
int GetDecimal()
{
return(GetNum(10));
};
/* get string, upto l characters returns number gotten */
int ReadID(s, l)
char *s;
int l;
{
char c;
int w;
int first;
first = true;
w = 0;
for (;;) {
if (w == l) {
s[0] = 0;
break;
};
if (s[w] == 0) break;
w += 1;
};
w = 0;
for (;;) {
c = eGetChar();
if (first && (c == '\033')) {
wf1("%s", s);
while (s[w] != 0) w += 1;
first = false;
continue;
};
first = false;
switch (c) {
case '\010': {
if (w > 0) w -= 1;
putchar(' ');
putchar('\010');
s[w] = 0;
break;
};
case '\t':
case ' ':
case '\n':
case '\r': return(w);
default: {
s[w] = c;
w += 1;
s[w] = 0;
if (w == (l-1)) return(w-1);
break;
};
};
};
};
int GetNum(radix)
int radix;
{
int v, sbit;
v = 0;
sbit = false;
any = 0;
for (;;) {
eGetChar();
if (IsDigit(leftover)) {
v = v * radix;
v += ((int) leftover-'0');
any = 1;
continue;
};
leftover = LC(leftover);
if (leftover>='a' && leftover<='f') {
v = v * radix;
v += ((int) leftover-'a'+10);
any = 1;
continue;
};
if (leftover == '-') {
sbit = true;
continue;
};
break;
};
if (sbit) v = -v;
return(v);
};