| /* Public Domain Curses */ |
| |
| #include "pdcdos.h" |
| |
| RCSID("$Id: pdcutil.c,v 1.24 2008/07/13 16:08:17 wmcbrine Exp $") |
| |
| void PDC_beep(void) |
| { |
| PDCREGS regs; |
| |
| PDC_LOG(("PDC_beep() - called\n")); |
| |
| regs.W.ax = 0x0e07; /* Write ^G in TTY fashion */ |
| regs.W.bx = 0; |
| PDCINT(0x10, regs); |
| } |
| |
| void PDC_napms(int ms) |
| { |
| PDCREGS regs; |
| long goal, start, current; |
| |
| PDC_LOG(("PDC_napms() - called: ms=%d\n", ms)); |
| |
| goal = DIVROUND((long)ms, 50); |
| if (!goal) |
| goal++; |
| |
| start = getdosmemdword(0x46c); |
| |
| goal += start; |
| |
| while (goal > (current = getdosmemdword(0x46c))) |
| { |
| if (current < start) /* in case of midnight reset */ |
| return; |
| |
| regs.W.ax = 0x1680; |
| PDCINT(0x2f, regs); |
| PDCINT(0x28, regs); |
| } |
| } |
| |
| const char *PDC_sysname(void) |
| { |
| return "DOS"; |
| } |
| |
| #ifdef __DJGPP__ |
| |
| unsigned char getdosmembyte(int offset) |
| { |
| unsigned char b; |
| |
| dosmemget(offset, sizeof(unsigned char), &b); |
| return b; |
| } |
| |
| unsigned short getdosmemword(int offset) |
| { |
| unsigned short w; |
| |
| dosmemget(offset, sizeof(unsigned short), &w); |
| return w; |
| } |
| |
| unsigned long getdosmemdword(int offset) |
| { |
| unsigned long dw; |
| |
| dosmemget(offset, sizeof(unsigned long), &dw); |
| return dw; |
| } |
| |
| void setdosmembyte(int offset, unsigned char b) |
| { |
| dosmemput(&b, sizeof(unsigned char), offset); |
| } |
| |
| void setdosmemword(int offset, unsigned short w) |
| { |
| dosmemput(&w, sizeof(unsigned short), offset); |
| } |
| |
| #endif |
| |
| #if defined(__WATCOMC__) && defined(__386__) |
| |
| void PDC_dpmi_int(int vector, pdc_dpmi_regs *rmregs) |
| { |
| union REGPACK regs = {0}; |
| |
| rmregs->w.ss = 0; |
| rmregs->w.sp = 0; |
| rmregs->w.flags = 0; |
| |
| regs.w.ax = 0x300; |
| regs.h.bl = vector; |
| regs.x.edi = FP_OFF(rmregs); |
| regs.x.es = FP_SEG(rmregs); |
| |
| intr(0x31, ®s); |
| } |
| |
| #endif |