--- src/vc.c.orig Wed Jan 24 00:16:06 2001 +++ src/vc.c Wed Jan 24 00:16:55 2001 @@ -40,7 +40,13 @@ #include #elif defined(__FreeBSD__) #include -#include +#include +#if __FreeBSD_version >= 410000 +# include +# include +#else +# include +#endif #endif #include #ifdef linux @@ -95,28 +101,26 @@ inline void blatch(void *head, int n) { - __asm__("\t clc\n" + __asm__ volatile("\t clc\n" "1:\n" "\t andb %%bl, (%%eax)\n" "\t incl %%eax\n" "\t loop 1b\n" - : - : "eax" ((long)head), "bl" (0x7F), "c" (n) - : "bl", "cx" ); + : "=bl" (head), "=c" (n) + : "eax" ((long)head), "0" (0x7F), "1" (n)); } static inline void llatch(void *head, int n) { - __asm__("\t clc\n" + __asm__ volatile("\t clc\n" "1:\n" "\t andl %%ebx, (%%eax)\n" "\t addl $4, %%eax\n" "\t loop 1b\n" - : - : "eax" ((long)head), "ebx" (0x7F7F7F7F), "c" (n>>2) - : "ebx", "cx" ); + : "=ebx" (head), "=c" (n) + : "eax" ((long)head), "0" (0x7F7F7F7F), "1" (n>>2)); } static inline u_int TextAddress(u_int x, u_int y) @@ -266,12 +270,23 @@ { struct vt_mode vtm; +#if defined(__FreeBSD__) + signal(SIGUSR1, SIG_IGN); + signal(SIGUSR2, SIG_IGN); +#else /* linux */ signal(SIGUSR1, SIG_DFL); signal(SIGUSR2, SIG_DFL); +#endif vtm.mode = VT_AUTO; vtm.waitv = 0; +#if defined(__FreeBSD__) + vtm.relsig = SIGUSR1; + vtm.acqsig = SIGUSR2; + vtm.frsig = SIGUSR1; +#else /* linux */ vtm.relsig = 0; vtm.acqsig = 0; +#endif ioctl(0, VT_SETMODE, &vtm); #if defined(__FreeBSD__) ioctl(0, VT_RELDISP, 1); @@ -297,6 +312,9 @@ vtm.waitv = 0; vtm.relsig = SIGUSR1; vtm.acqsig = SIGUSR2; +#if defined(__FreeBSD__) + vtm.frsig = SIGUSR1; +#endif ioctl(0, VT_SETMODE, &vtm); vInfo.graph_mode(); if (useHardScroll) @@ -816,21 +834,31 @@ static int ConfigBeep(const char *confstr) { - beepCount = atoi(confstr) * 10000; #if defined(linux) + beepCount = atoi(confstr) * 10000; if (beepCount > 0) ioperm(COUNTER_ADDR, 1, TRUE); #endif +#if defined(__FreeBSD__) + beepCount = atoi(confstr) * 10; +#endif return SUCCESS; } +#define BELL_PITCH 800 + void Beep(void) { - if (!con.active || beepCount <= 0) return; #if defined(linux) + if (!con.active || beepCount <= 0) return; PortOutb(PortInb(COUNTER_ADDR)|3, COUNTER_ADDR); usleep(beepCount); PortOutb(PortInb(COUNTER_ADDR)&0xFC, COUNTER_ADDR); +#endif +#if defined(__FreeBSD__) + if(beepCount <= 0) return; + ioctl(fileno(stdout), KDMKTONE, (BELL_PITCH & 0xffff) | + ((beepCount & 0xffff) << 16)); #endif }