home *** CD-ROM | disk | FTP | other *** search
- /*****************************************************************************/
- /* */
- /* */
- /* CP/M emulator version 0.1 */
- /* */
- /* written by Michael Bischoff (mbi@mo.math.nat.tu-bs.de) */
- /* June-1994 */
- /* */
- /* This file is distributed under the GNU COPYRIGHT */
- /* see COPYRIGHT.GNU for Copyright details */
- /* */
- /* */
- /*****************************************************************************/
- #include "cpmemu.h"
-
- /* read a character from input */
- /* if the character is ctrl-@, it is interpreted as BREAK */
-
- int conin(void) {
- int c;
- if (!(c = getch())) {
- debug = 2;
- longjmp(mainloop, 1);
- }
- return c < 0 ? 0 : c;
- }
- int getdig(int mindig) {
- int c;
- fflush(stdout);
- do {
- c = conin();
- } while (c < mindig || c > '9');
- putchar(c);
- fflush(stdout);
- return c;
- }
- char *rdcmdline(int max, int ctrl_c_enable) {
- int i, c;
- static char s[258];
-
- fflush(stdout);
- max &= 0xff;
- i = 1; /* number of next character */
- loop:
- c = conin();
- if (c < ' ' || c == 0x7f) {
- switch (c) {
- case 3:
- if (ctrl_c_enable) {
- putch('^');
- putch('C');
- z80regs.pc = BIOS+3;
- s[0] = 0;
- return s;
- }
- break;
- case 8:
- case 0x7f:
- if (i > 1) {
- --i;
- printf("\b \b");
- fflush(stdout);
- }
- break;
- case '\n':
- case '\r':
- s[0] = i-1;
- if (i <= max)
- s[i] = '\r';
- return s;
- }
- goto loop;
- } else if (i <= max) {
- s[i++] = c;
- putchar(c);
- fflush(stdout);
- }
- goto loop;
- }
- unsigned gethex(void) {
- unsigned u;
- char *s;
- fflush(stdout);
- s = rdcmdline(4, 0);
- putchar('\r'); putchar('\n');
- fflush(stdout);
- s[s[0]+1] = '\0';
- if (!s[0])
- return z80regs.pc;
- sscanf(s+1, "%x", &u);
- return u;
- }
-