/* 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