/* SDB - AMSTRAD specific procedures and error messages */

#include "bdscio.h"
#include "dbqdefs.h"

int getcx(fp)
	FILE *fp;
{
	int ch, i;

	if (fp!=STDIN)
		if ((ch = getc(fp)) == '\r') {
			if (dbv_verify) {
				putchar(ch);
				putchar('\n');
				}
			return (getc(fp));
			}
		else {
			if (dbv_verify)
				putchar(ch);
			return (ch);
		}

	if (*pbuf > 0)
		return *pbuf++;

	pbuf = gbuf;
/* TEMP
	for (i = 0; (ch = getc(fp)) != -1; )
		if (i < LINEMAX) {
			if (ch == ESC) {
				i = 0;
				putchar('\n');
				fflush(STDOUT);
			}
			else
			if (ch == BS) {
				if (i > 0) {
					printf("\010\033\116\010\033\116");
			/* That should be 010 020 010 020 for CPM 2.2 */

					i--;
					}
				}
				else
					gbuf[i++] = ch;
			if (ch == '\n') break;
			}
		else {
			printf("*** line too long ***\nRetype> ");
			i = 0;
		}
	gbuf[i] = EOS;
*/
	linein(gbuf);
	return getcx(fp);
}

linein(lbuf)
char *lbuf;
{
	char ibuf[256];
	int ilen;

	ibuf[0] = LINEMAX;
	ibuf[1] = 1;
	ibuf[2] = 0;
	bdos(10,&ibuf);
	ilen = ibuf[1];
	ibuf[ilen+3] = EOS;
	ibuf[ilen+2] = 10;
	strcpy(lbuf,&ibuf[2]);
	if (dbv_logging)
		fputs(lbuf,dbv_lfp);
	putchar('\n');
} 

strncpy(to, from, n)
	char *to, *from;
	int n;
{
	char *cp;

	for( cp=to; n-- && (*cp++ = *from++); ) ;
	if (n < 0)
		*cp = 0;
	return (to);
}
/*	We'll use our own, thanks
int strncmp(s1, s2, n)
  char *s1, *s2;
{
  if (!n) return 0;
  while (*s1 == *s2)
    {
      if ( ! *s1) return 0;
      if ( ! --n) break;
      ++s1;  ++s2;
    }
  return *s1 - *s2;
}
*/
strncmp(s1, s2, n)
	char *s1,*s2;
	int n;
{
	for ( ; n-- && (*s1 == *s2); s2++ )
		if (!*s1++)
			return (0);
	if (n < 0)
		return 0;
	if (*s1 < *s2)
		return -1;
	return 1;
}

/*	error routine		*/


char *db_ertxt(msg)
 int msg;
{
	char *txt;

	switch (msg) {
	case INSMEM:
		txt = "memory full";
		break;
	case RELFNF:
		txt = "database file not found";
		break;
	case BADHDR:
		txt = "bad file header";
		break;
	case TUPINP:
		txt = "reading record";
		break;
	case TUPOUT:
		txt = "writing record";
		break;
	case RELFUL:
		txt = "database full";
		break;
	case RELCRE:
		txt = "creating database";
		break;
	case DUPATT:
		txt = "field name duplicated";
		break;
	case MAXATT:
		txt = "too many fields";
		break;
	case INSBLK:
		txt = "disk full";
		break;
	case SYNTAX:
		txt = "syntax error";
		break;
	case ATUNDF:
		txt = "field not defined";
		break;
	case ATAMBG:
		txt = "field name ambiguous";
		break;
	case RLUNDF:
		txt = "database name undefined";
		break;
	case CDSIZE:
		txt = "expression too complex";
		break;
	case INPFNF:
		txt = "input file not found";
		break;
	case OUTCRE:
		txt = "creating output file";
		break;
	case INDFNF:
		txt = "command file not found";
		break;
	case BADSET:
		txt = "set parameter unknown";
		break;
	default:
		txt = "bad error number";
		break;
	}

	return (txt);
}
ADSET:
		txt = "set parameter unknown";
		b