/*
* PC/HW routine collection v1.3 for DOS/DJGPP
*
- * Copyright (C) 2002 - Borca Daniel
+ * Copyright (C) 2002 - Daniel Borca
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
#include "pc_hw.h"
+
/*
* atexit
*/
static volatile int atexitcnt;
static VFUNC atexittbl[MAX_ATEXIT];
-static void __attribute__((destructor)) doexit (void)
+
+static void __attribute__((destructor))
+doexit (void)
{
- while (atexitcnt) atexittbl[--atexitcnt]();
+ while (atexitcnt) atexittbl[--atexitcnt]();
}
-int pc_clexit (VFUNC f)
+
+int
+pc_clexit (VFUNC f)
{
- int i;
-
- for (i=0;i<atexitcnt;i++) {
- if (atexittbl[i]==f) {
- for (atexitcnt--;i<atexitcnt;i++) atexittbl[i] = atexittbl[i+1];
- atexittbl[i] = 0;
- return 0;
- }
- }
- return -1;
+ int i;
+
+ for (i = 0; i < atexitcnt; i++) {
+ if (atexittbl[i] == f) {
+ for (atexitcnt--; i < atexitcnt; i++) atexittbl[i] = atexittbl[i+1];
+ atexittbl[i] = 0;
+ return 0;
+ }
+ }
+ return -1;
}
-int pc_atexit (VFUNC f)
+
+int
+pc_atexit (VFUNC f)
{
- pc_clexit(f);
- if (atexitcnt<MAX_ATEXIT) {
- atexittbl[atexitcnt++] = f;
- return 0;
- }
- return -1;
+ pc_clexit(f);
+ if (atexitcnt < MAX_ATEXIT) {
+ atexittbl[atexitcnt++] = f;
+ return 0;
+ }
+ return -1;
}
+
/*
* locked memory allocation
*/
-void *pc_malloc (size_t size)
+void *
+pc_malloc (size_t size)
{
- void *p = malloc(size);
+ void *p = malloc(size);
- if (p) {
- if (_go32_dpmi_lock_data(p, size)) {
- free(p);
- return NULL;
- }
- }
+ if (p) {
+ if (_go32_dpmi_lock_data(p, size)) {
+ free(p);
+ return NULL;
+ }
+ }
- return p;
+ return p;
}
+
/*
* standard redirection
*/
static char errname[L_tmpnam];
static int h_err, h_errbak;
-int pc_open_stdout (void)
+
+int
+pc_open_stdout (void)
{
- tmpnam(outname);
+ tmpnam(outname);
- if ((h_out=open(outname, O_WRONLY | O_CREAT | O_TEXT | O_TRUNC, S_IREAD | S_IWRITE)) > 0) {
- h_outbak = dup(STDOUT_FILENO);
- fflush(stdout);
- dup2(h_out, STDOUT_FILENO);
- }
+ if ((h_out=open(outname, O_WRONLY | O_CREAT | O_TEXT | O_TRUNC, S_IREAD | S_IWRITE)) > 0) {
+ h_outbak = dup(STDOUT_FILENO);
+ fflush(stdout);
+ dup2(h_out, STDOUT_FILENO);
+ }
- return h_out;
+ return h_out;
}
-void pc_close_stdout (void)
+
+void
+pc_close_stdout (void)
{
- FILE *f;
- char *line = alloca(512);
-
- if (h_out > 0) {
- dup2(h_outbak, STDOUT_FILENO);
- close(h_out);
- close(h_outbak);
-
- f = fopen(outname, "rt");
- while (fgets(line, 512, f)) {
- fputs(line, stdout);
- }
- fclose(f);
-
- remove(outname);
- }
+ FILE *f;
+ char *line = alloca(512);
+
+ if (h_out > 0) {
+ dup2(h_outbak, STDOUT_FILENO);
+ close(h_out);
+ close(h_outbak);
+
+ f = fopen(outname, "rt");
+ while (fgets(line, 512, f)) {
+ fputs(line, stdout);
+ }
+ fclose(f);
+
+ remove(outname);
+ }
}
-int pc_open_stderr (void)
+
+int
+pc_open_stderr (void)
{
- tmpnam(errname);
+ tmpnam(errname);
- if ((h_err=open(errname, O_WRONLY | O_CREAT | O_TEXT | O_TRUNC, S_IREAD | S_IWRITE)) > 0) {
- h_errbak = dup(STDERR_FILENO);
- fflush(stderr);
- dup2(h_err, STDERR_FILENO);
- }
+ if ((h_err=open(errname, O_WRONLY | O_CREAT | O_TEXT | O_TRUNC, S_IREAD | S_IWRITE)) > 0) {
+ h_errbak = dup(STDERR_FILENO);
+ fflush(stderr);
+ dup2(h_err, STDERR_FILENO);
+ }
- return h_err;
+ return h_err;
}
-void pc_close_stderr (void)
+
+void
+pc_close_stderr (void)
{
- FILE *f;
- char *line = alloca(512);
-
- if (h_err > 0) {
- dup2(h_errbak, STDERR_FILENO);
- close(h_err);
- close(h_errbak);
-
- f = fopen(errname, "rt");
- while (fgets(line, 512, f)) {
- fputs(line, stderr);
- }
- fclose(f);
-
- remove(errname);
- }
+ FILE *f;
+ char *line = alloca(512);
+
+ if (h_err > 0) {
+ dup2(h_errbak, STDERR_FILENO);
+ close(h_err);
+ close(h_errbak);
+
+ f = fopen(errname, "rt");
+ while (fgets(line, 512, f)) {
+ fputs(line, stderr);
+ }
+ fclose(f);
+
+ remove(errname);
+ }
}
/*
* PC/HW routine collection v1.4 for DOS/DJGPP
*
- * Copyright (C) 2002 - Borca Daniel
+ * Copyright (C) 2002 - Daniel Borca
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
/*
* PC/HW routine collection v1.3 for DOS/DJGPP
*
- * Copyright (C) 2002 - Borca Daniel
+ * Copyright (C) 2002 - Daniel Borca
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
/*
* PC/HW routine collection v1.3 for DOS/DJGPP
*
- * Copyright (C) 2002 - Borca Daniel
+ * Copyright (C) 2002 - Daniel Borca
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
#include "pc_hw.h"
-
#define KEYB_IRQ 1
#define KEY_BUFFER_SIZE 64
static int keyboard_installed;
static volatile struct {
- volatile int start, end;
- volatile int key[KEY_BUFFER_SIZE];
+ volatile int start, end;
+ volatile int key[KEY_BUFFER_SIZE];
} key_buffer;
static volatile int key_enhanced, key_pause_loop, key_shifts;
static volatile char pc_key[KEY_MAX];
-
/* convert Allegro format scancodes into key_shifts flag bits */
-static unsigned short modifier_table[KEY_MAX - KEY_MODIFIERS] =
-{
+static unsigned short modifier_table[KEY_MAX - KEY_MODIFIERS] = {
KB_SHIFT_FLAG, KB_SHIFT_FLAG, KB_CTRL_FLAG,
KB_CTRL_FLAG, KB_ALT_FLAG, KB_ALT_FLAG,
KB_LWIN_FLAG, KB_RWIN_FLAG, KB_MENU_FLAG,
};
-
/* lookup table for converting hardware scancodes into Allegro format */
-static unsigned char hw_to_mycode[128] =
-{
+static unsigned char hw_to_mycode[128] = {
/* 0x00 */ 0, KEY_ESC, KEY_1, KEY_2,
/* 0x04 */ KEY_3, KEY_4, KEY_5, KEY_6,
/* 0x08 */ KEY_7, KEY_8, KEY_9, KEY_0,
};
-
/* lookup table for converting extended hardware codes into Allegro format */
-static unsigned char hw_to_mycode_ex[128] =
-{
+static unsigned char hw_to_mycode_ex[128] = {
/* 0x00 */ 0, KEY_ESC, KEY_1, KEY_2,
/* 0x04 */ KEY_3, KEY_4, KEY_5, KEY_6,
/* 0x08 */ KEY_7, KEY_8, KEY_9, KEY_0,
};
-
/* default mapping table for the US keyboard layout */
-static unsigned short standard_key_ascii_table[KEY_MAX] =
-{
+static unsigned short standard_key_ascii_table[KEY_MAX] = {
/* start */ 0,
/* alphabet */ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
/* numbers */ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
};
-
/* capslock mapping table for the US keyboard layout */
-static unsigned short standard_key_capslock_table[KEY_MAX] =
-{
+static unsigned short standard_key_capslock_table[KEY_MAX] = {
/* start */ 0,
/* alphabet */ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
/* numbers */ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
};
-
/* shifted mapping table for the US keyboard layout */
-static unsigned short standard_key_shift_table[KEY_MAX] =
-{
+static unsigned short standard_key_shift_table[KEY_MAX] = {
/* start */ 0,
/* alphabet */ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
/* numbers */ ')', '!', '@', '#', '$', '%', '^', '&', '*', '(',
};
-
/* ctrl+key mapping table for the US keyboard layout */
-static unsigned short standard_key_control_table[KEY_MAX] =
-{
+static unsigned short standard_key_control_table[KEY_MAX] = {
/* start */ 0,
/* alphabet */ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
/* numbers */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
};
-
/* convert numeric pad scancodes into arrow codes */
-static unsigned char numlock_table[10] =
-{
+static unsigned char numlock_table[10] = {
KEY_INSERT, KEY_END, KEY_DOWN, KEY_PGDN, KEY_LEFT,
KEY_5_PAD, KEY_RIGHT, KEY_HOME, KEY_UP, KEY_PGUP
};
-
/* kb_wait_for_write_ready:
* Wait for the keyboard controller to set the ready-for-write bit.
*/
-static __inline int kb_wait_for_write_ready (void)
+static __inline int
+kb_wait_for_write_ready (void)
{
- int timeout = 4096;
+ int timeout = 4096;
- while ((timeout>0) && (inportb(0x64)&2)) timeout--;
+ while ((timeout > 0) && (inportb(0x64) & 2)) timeout--;
- return (timeout>0);
+ return (timeout > 0);
}
-
/* kb_wait_for_read_ready:
* Wait for the keyboard controller to set the ready-for-read bit.
*/
-static __inline int kb_wait_for_read_ready (void)
+static __inline int
+kb_wait_for_read_ready (void)
{
- int timeout = 16384;
+ int timeout = 16384;
- while ((timeout>0) && (!(inportb(0x64)&1))) timeout--;
+ while ((timeout > 0) && (!(inportb(0x64) & 1))) timeout--;
- return (timeout>0);
+ return (timeout > 0);
}
-
/* kb_send_data:
* Sends a byte to the keyboard controller. Returns 1 if all OK.
*/
-static __inline int kb_send_data (unsigned char data)
+static __inline int
+kb_send_data (unsigned char data)
{
- int resends = 4;
- int timeout, temp;
+ int resends = 4;
+ int timeout, temp;
- do {
- if (!kb_wait_for_write_ready())
- return 0;
+ do {
+ if (!kb_wait_for_write_ready())
+ return 0;
- outportb(0x60, data);
- timeout = 4096;
+ outportb(0x60, data);
+ timeout = 4096;
- while (--timeout>0) {
- if (!kb_wait_for_read_ready())
- return 0;
+ while (--timeout > 0) {
+ if (!kb_wait_for_read_ready())
+ return 0;
- temp = inportb(0x60);
+ temp = inportb(0x60);
- if (temp == 0xFA)
- return 1;
+ if (temp == 0xFA)
+ return 1;
- if (temp == 0xFE)
- break;
- }
- } while ((resends-- > 0) && (timeout > 0));
+ if (temp == 0xFE)
+ break;
+ }
+ } while ((resends-- > 0) && (timeout > 0));
- return 0;
+ return 0;
}
-
-static void update_leds (int leds)
+static void
+update_leds (int leds)
{
- if (leds_ok) {
- if (!in_a_terrupt)
- DISABLE();
-
- if (!kb_send_data(0xED)) {
- kb_send_data(0xF4);
- leds_ok = FALSE;
- } else if (!kb_send_data((leds>>8)&7)) {
- kb_send_data(0xF4);
- leds_ok = FALSE;
- }
-
- if (!in_a_terrupt)
- ENABLE();
- }
+ if (leds_ok) {
+ if (!in_a_terrupt)
+ DISABLE();
+
+ if (!kb_send_data(0xED)) {
+ kb_send_data(0xF4);
+ leds_ok = FALSE;
+ } else if (!kb_send_data((leds >> 8) & 7)) {
+ kb_send_data(0xF4);
+ leds_ok = FALSE;
+ }
+
+ if (!in_a_terrupt)
+ ENABLE();
+ }
} ENDOFUNC(update_leds)
-
-static void inject_key (int scancode)
+static void
+inject_key (int scancode)
{
- unsigned short *table;
-
- if ((scancode >= KEY_0_PAD) && (scancode <= KEY_9_PAD)) {
- if (((key_shifts & KB_NUMLOCK_FLAG) != 0) == ((key_shifts & KB_SHIFT_FLAG) != 0)) {
- scancode = numlock_table[scancode - KEY_0_PAD];
- }
- table = standard_key_ascii_table;
- } else if (key_shifts & KB_CTRL_FLAG) {
- table = standard_key_control_table;
- } else if (key_shifts & KB_SHIFT_FLAG) {
- if (key_shifts & KB_CAPSLOCK_FLAG) {
- if (standard_key_ascii_table[scancode]==standard_key_capslock_table[scancode]) {
- table = standard_key_shift_table;
- } else {
- table = standard_key_ascii_table;
- }
- } else {
- table = standard_key_shift_table;
- }
- } else if (key_shifts & KB_CAPSLOCK_FLAG) {
- table = standard_key_capslock_table;
- } else {
- table = standard_key_ascii_table;
- }
-
- key_buffer.key[key_buffer.end++] = (scancode<<16)|table[scancode];
-
- if (key_buffer.end>=KEY_BUFFER_SIZE)
- key_buffer.end = 0;
- if (key_buffer.end==key_buffer.start) {
- key_buffer.start++;
- if (key_buffer.start>=KEY_BUFFER_SIZE)
- key_buffer.start = 0;
- }
+ unsigned short *table;
+
+ if ((scancode >= KEY_0_PAD) && (scancode <= KEY_9_PAD)) {
+ if (((key_shifts & KB_NUMLOCK_FLAG) != 0) == ((key_shifts & KB_SHIFT_FLAG) != 0)) {
+ scancode = numlock_table[scancode - KEY_0_PAD];
+ }
+ table = standard_key_ascii_table;
+ } else if (key_shifts & KB_CTRL_FLAG) {
+ table = standard_key_control_table;
+ } else if (key_shifts & KB_SHIFT_FLAG) {
+ if (key_shifts & KB_CAPSLOCK_FLAG) {
+ if (standard_key_ascii_table[scancode] == standard_key_capslock_table[scancode]) {
+ table = standard_key_shift_table;
+ } else {
+ table = standard_key_ascii_table;
+ }
+ } else {
+ table = standard_key_shift_table;
+ }
+ } else if (key_shifts & KB_CAPSLOCK_FLAG) {
+ table = standard_key_capslock_table;
+ } else {
+ table = standard_key_ascii_table;
+ }
+
+ key_buffer.key[key_buffer.end++] = (scancode << 16) | table[scancode];
+
+ if (key_buffer.end >= KEY_BUFFER_SIZE)
+ key_buffer.end = 0;
+ if (key_buffer.end == key_buffer.start) {
+ key_buffer.start++;
+ if (key_buffer.start >= KEY_BUFFER_SIZE)
+ key_buffer.start = 0;
+ }
} ENDOFUNC(inject_key)
-static void handle_code (int scancode, int keycode)
+
+static void
+handle_code (int scancode, int keycode)
{
- in_a_terrupt++;
-
- if (keycode==0) { /* pause */
- inject_key(scancode);
- pc_key[KEY_PAUSE] ^= TRUE;
- } else if (scancode) {
- int flag;
-
- if (scancode>=KEY_MODIFIERS) {
- flag = modifier_table[scancode - KEY_MODIFIERS];
- } else {
- flag = 0;
- }
- if ((char)keycode<0) { /* release */
- pc_key[scancode] = FALSE;
- if (flag&KB_MODIFIERS) {
- key_shifts &= ~flag;
- }
- } else { /* keypress */
- pc_key[scancode] = TRUE;
- if (flag&KB_MODIFIERS) {
- key_shifts |= flag;
- }
- if (flag&KB_LED_FLAGS) {
- key_shifts ^= flag;
- update_leds(key_shifts);
- }
- if (scancode<KEY_MODIFIERS) {
- inject_key(scancode);
- }
- }
- }
-
- in_a_terrupt--;
+ in_a_terrupt++;
+
+ if (keycode == 0) { /* pause */
+ inject_key(scancode);
+ pc_key[KEY_PAUSE] ^= TRUE;
+ } else if (scancode) {
+ int flag;
+
+ if (scancode >= KEY_MODIFIERS) {
+ flag = modifier_table[scancode - KEY_MODIFIERS];
+ } else {
+ flag = 0;
+ }
+ if ((char)keycode < 0) { /* release */
+ pc_key[scancode] = FALSE;
+ if (flag & KB_MODIFIERS) {
+ key_shifts &= ~flag;
+ }
+ } else { /* keypress */
+ pc_key[scancode] = TRUE;
+ if (flag & KB_MODIFIERS) {
+ key_shifts |= flag;
+ }
+ if (flag & KB_LED_FLAGS) {
+ key_shifts ^= flag;
+ update_leds(key_shifts);
+ }
+ if (scancode < KEY_MODIFIERS) {
+ inject_key(scancode);
+ }
+ }
+ }
+
+ in_a_terrupt--;
} ENDOFUNC(handle_code)
-static int keyboard ()
+
+static int
+keyboard ()
{
- unsigned char temp, scancode;
-
- temp = inportb(0x60);
-
- if (temp<=0xe1) {
- if (key_pause_loop) {
- if (!--key_pause_loop) handle_code(KEY_PAUSE, 0);
- } else
- switch (temp) {
- case 0xe0:
- key_enhanced = TRUE;
- break;
- case 0xe1:
- key_pause_loop = 5;
- break;
- default:
- if (key_enhanced) {
- key_enhanced = FALSE;
- scancode = hw_to_mycode_ex[temp&0x7f];
- } else {
- scancode = hw_to_mycode[temp&0x7f];
- }
- handle_code(scancode, temp);
- }
- }
-
- if (((temp==0x4F)||(temp==0x53))&&(key_shifts&KB_CTRL_FLAG)&&(key_shifts&KB_ALT_FLAG)) {
- /* Hack alert:
- only SIGINT (but not Ctrl-Break)
- calls the destructors and will safely clean up
- */
- __asm("\n\
+ unsigned char temp, scancode;
+
+ temp = inportb(0x60);
+
+ if (temp <= 0xe1) {
+ if (key_pause_loop) {
+ if (!--key_pause_loop) handle_code(KEY_PAUSE, 0);
+ } else
+ switch (temp) {
+ case 0xe0:
+ key_enhanced = TRUE;
+ break;
+ case 0xe1:
+ key_pause_loop = 5;
+ break;
+ default:
+ if (key_enhanced) {
+ key_enhanced = FALSE;
+ scancode = hw_to_mycode_ex[temp & 0x7f];
+ } else {
+ scancode = hw_to_mycode[temp & 0x7f];
+ }
+ handle_code(scancode, temp);
+ }
+ }
+
+ if (((temp==0x4F)||(temp==0x53))&&(key_shifts&KB_CTRL_FLAG)&&(key_shifts&KB_ALT_FLAG)) {
+ /* Hack alert:
+ * only SIGINT (but not Ctrl-Break)
+ * calls the destructors and will safely clean up
+ */
+ __asm("\n\
movb $0x79, %%al \n\
call ___djgpp_hw_exception \n\
- ":::"%eax", "%ebx", "%ecx", "%edx", "%esi", "%edi", "memory");
- }
+ ":::"%eax", "%ebx", "%ecx", "%edx", "%esi", "%edi", "memory");
+ }
- __asm("\n\
+ __asm("\n\
inb $0x61, %%al \n\
movb %%al, %%ah \n\
orb $0x80, %%al \n\
outb %%al, $0x61 \n\
movb $0x20, %%al \n\
outb %%al, $0x20 \n\
- ":::"%eax");
- return 0;
+ ":::"%eax");
+ return 0;
} ENDOFUNC(keyboard)
-int pc_keypressed (void)
+int
+pc_keypressed (void)
{
- return (key_buffer.start!=key_buffer.end);
+ return (key_buffer.start!=key_buffer.end);
}
-int pc_readkey (void)
+
+int
+pc_readkey (void)
{
- if (keyboard_installed) {
- int key;
-
- while (key_buffer.start==key_buffer.end) {
- __dpmi_yield();
- }
-
- DISABLE();
- key = key_buffer.key[key_buffer.start++];
- if (key_buffer.start>=KEY_BUFFER_SIZE)
- key_buffer.start = 0;
- ENABLE();
-
- return key;
- } else {
- return 0;
- }
+ if (keyboard_installed) {
+ int key;
+
+ while (key_buffer.start == key_buffer.end) {
+ __dpmi_yield();
+ }
+
+ DISABLE();
+ key = key_buffer.key[key_buffer.start++];
+ if (key_buffer.start >= KEY_BUFFER_SIZE)
+ key_buffer.start = 0;
+ ENABLE();
+
+ return key;
+ } else {
+ return 0;
+ }
}
-int pc_keydown (int code)
+
+int
+pc_keydown (int code)
{
- return pc_key[code];
+ return pc_key[code];
}
-int pc_keyshifts (void)
+
+int
+pc_keyshifts (void)
{
- return key_shifts;
+ return key_shifts;
}
-void pc_remove_keyb (void)
+
+void
+pc_remove_keyb (void)
{
- if (keyboard_installed) {
- int s1, s2, s3;
-
- keyboard_installed = FALSE;
- pc_clexit(pc_remove_keyb);
-
- DISABLE();
- _farsetsel(__djgpp_dos_sel);
- _farnspokew(0x41c, _farnspeekw(0x41a));
-
- s1 = _farnspeekb(0x417) & 0x80;
- s2 = _farnspeekb(0x418) & 0xFC;
- s3 = _farnspeekb(0x496) & 0xF3;
-
- if (pc_key[KEY_RSHIFT]) { s1 |= 1; }
- if (pc_key[KEY_LSHIFT]) { s1 |= 2; }
- if (pc_key[KEY_LCONTROL]) { s2 |= 1; s1 |= 4; }
- if (pc_key[KEY_ALT]) { s1 |= 8; s2 |= 2; }
- if (pc_key[KEY_RCONTROL]) { s1 |= 4; s3 |= 4; }
- if (pc_key[KEY_ALTGR]) { s1 |= 8; s3 |= 8; }
-
- if (key_shifts&KB_SCROLOCK_FLAG) s1 |= 16;
- if (key_shifts&KB_NUMLOCK_FLAG) s1 |= 32;
- if (key_shifts&KB_CAPSLOCK_FLAG) s1 |= 64;
-
- _farnspokeb(0x417, s1);
- _farnspokeb(0x418, s2);
- _farnspokeb(0x496, s3);
- update_leds(key_shifts);
-
- ENABLE();
- pc_remove_irq(KEYB_IRQ);
- }
+ if (keyboard_installed) {
+ int s1, s2, s3;
+
+ keyboard_installed = FALSE;
+ pc_clexit(pc_remove_keyb);
+
+ DISABLE();
+ _farsetsel(__djgpp_dos_sel);
+ _farnspokew(0x41c, _farnspeekw(0x41a));
+
+ s1 = _farnspeekb(0x417) & 0x80;
+ s2 = _farnspeekb(0x418) & 0xFC;
+ s3 = _farnspeekb(0x496) & 0xF3;
+
+ if (pc_key[KEY_RSHIFT]) { s1 |= 1; }
+ if (pc_key[KEY_LSHIFT]) { s1 |= 2; }
+ if (pc_key[KEY_LCONTROL]) { s2 |= 1; s1 |= 4; }
+ if (pc_key[KEY_ALT]) { s1 |= 8; s2 |= 2; }
+ if (pc_key[KEY_RCONTROL]) { s1 |= 4; s3 |= 4; }
+ if (pc_key[KEY_ALTGR]) { s1 |= 8; s3 |= 8; }
+
+ if (key_shifts & KB_SCROLOCK_FLAG) s1 |= 16;
+ if (key_shifts & KB_NUMLOCK_FLAG) s1 |= 32;
+ if (key_shifts & KB_CAPSLOCK_FLAG) s1 |= 64;
+
+ _farnspokeb(0x417, s1);
+ _farnspokeb(0x418, s2);
+ _farnspokeb(0x496, s3);
+ update_leds(key_shifts);
+
+ ENABLE();
+ pc_remove_irq(KEYB_IRQ);
+ }
}
-int pc_install_keyb (void)
+
+int
+pc_install_keyb (void)
{
- if (keyboard_installed||pc_install_irq(KEYB_IRQ, keyboard)) {
- return -1;
- } else {
- int s1, s2, s3;
-
- LOCKDATA(key_buffer);
- LOCKDATA(key_enhanced);
- LOCKDATA(key_pause_loop);
- LOCKDATA(key_shifts);
- LOCKDATA(leds_ok);
- LOCKDATA(in_a_terrupt);
- LOCKDATA(pc_key);
- LOCKDATA(modifier_table);
- LOCKDATA(hw_to_mycode);
- LOCKDATA(hw_to_mycode_ex);
- LOCKDATA(standard_key_ascii_table);
- LOCKDATA(standard_key_capslock_table);
- LOCKDATA(standard_key_shift_table);
- LOCKDATA(standard_key_control_table);
- LOCKDATA(numlock_table);
- LOCKFUNC(update_leds);
- LOCKFUNC(inject_key);
- LOCKFUNC(handle_code);
- LOCKFUNC(keyboard);
-
- DISABLE();
- _farsetsel(__djgpp_dos_sel);
- _farnspokew(0x41c, _farnspeekw(0x41a));
-
- key_shifts = 0;
- s1 = _farnspeekb(0x417);
- s2 = _farnspeekb(0x418);
- s3 = _farnspeekb(0x496);
-
- if (s1&1) { key_shifts |= KB_SHIFT_FLAG; pc_key[KEY_RSHIFT] = TRUE; }
- if (s1&2) { key_shifts |= KB_SHIFT_FLAG; pc_key[KEY_LSHIFT] = TRUE; }
- if (s2&1) { key_shifts |= KB_CTRL_FLAG; pc_key[KEY_LCONTROL] = TRUE; }
- if (s2&2) { key_shifts |= KB_ALT_FLAG; pc_key[KEY_ALT] = TRUE; }
- if (s3&4) { key_shifts |= KB_CTRL_FLAG; pc_key[KEY_RCONTROL] = TRUE; }
- if (s3&8) { key_shifts |= KB_ALT_FLAG; pc_key[KEY_ALTGR] = TRUE; }
-
- if (s1&16) key_shifts |= KB_SCROLOCK_FLAG;
- if (s1&32) key_shifts |= KB_NUMLOCK_FLAG;
- if (s1&64) key_shifts |= KB_CAPSLOCK_FLAG;
- update_leds(key_shifts);
-
- key_enhanced = key_pause_loop = 0;
- key_buffer.start = key_buffer.end = 0;
- ENABLE();
-
- pc_atexit(pc_remove_keyb);
- keyboard_installed = TRUE;
- return 0;
- }
+ if (keyboard_installed || pc_install_irq(KEYB_IRQ, keyboard)) {
+ return -1;
+ } else {
+ int s1, s2, s3;
+
+ LOCKDATA(key_buffer);
+ LOCKDATA(key_enhanced);
+ LOCKDATA(key_pause_loop);
+ LOCKDATA(key_shifts);
+ LOCKDATA(leds_ok);
+ LOCKDATA(in_a_terrupt);
+ LOCKDATA(pc_key);
+ LOCKDATA(modifier_table);
+ LOCKDATA(hw_to_mycode);
+ LOCKDATA(hw_to_mycode_ex);
+ LOCKDATA(standard_key_ascii_table);
+ LOCKDATA(standard_key_capslock_table);
+ LOCKDATA(standard_key_shift_table);
+ LOCKDATA(standard_key_control_table);
+ LOCKDATA(numlock_table);
+ LOCKFUNC(update_leds);
+ LOCKFUNC(inject_key);
+ LOCKFUNC(handle_code);
+ LOCKFUNC(keyboard);
+
+ DISABLE();
+ _farsetsel(__djgpp_dos_sel);
+ _farnspokew(0x41c, _farnspeekw(0x41a));
+
+ key_shifts = 0;
+ s1 = _farnspeekb(0x417);
+ s2 = _farnspeekb(0x418);
+ s3 = _farnspeekb(0x496);
+
+ if (s1 & 1) { key_shifts |= KB_SHIFT_FLAG; pc_key[KEY_RSHIFT] = TRUE; }
+ if (s1 & 2) { key_shifts |= KB_SHIFT_FLAG; pc_key[KEY_LSHIFT] = TRUE; }
+ if (s2 & 1) { key_shifts |= KB_CTRL_FLAG; pc_key[KEY_LCONTROL] = TRUE; }
+ if (s2 & 2) { key_shifts |= KB_ALT_FLAG; pc_key[KEY_ALT] = TRUE; }
+ if (s3 & 4) { key_shifts |= KB_CTRL_FLAG; pc_key[KEY_RCONTROL] = TRUE; }
+ if (s3 & 8) { key_shifts |= KB_ALT_FLAG; pc_key[KEY_ALTGR] = TRUE; }
+
+ if (s1 & 16) key_shifts |= KB_SCROLOCK_FLAG;
+ if (s1 & 32) key_shifts |= KB_NUMLOCK_FLAG;
+ if (s1 & 64) key_shifts |= KB_CAPSLOCK_FLAG;
+ update_leds(key_shifts);
+
+ key_enhanced = key_pause_loop = 0;
+ key_buffer.start = key_buffer.end = 0;
+ ENABLE();
+
+ pc_atexit(pc_remove_keyb);
+ keyboard_installed = TRUE;
+ return 0;
+ }
}
/*
* PC/HW routine collection v1.3 for DOS/DJGPP
*
- * Copyright (C) 2002 - Borca Daniel
+ * Copyright (C) 2002 - Daniel Borca
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
#include "pc_hw.h"
-
#define PC_CUTE_WHEEL 1 /* CuteMouse WheelAPI */
#define MOUSE_STACK_SIZE 16384
#define CLEAR_MICKEYS() \
- do { \
- __asm __volatile ("movw $0xb, %%ax; int $0x33":::"%eax", "%ecx", "%edx"); \
- ox = oy = 0; \
- } while (0)
+ do { \
+ __asm __volatile ("movw $0xb, %%ax; int $0x33":::"%eax", "%ecx", "%edx"); \
+ ox = oy = 0; \
+ } while (0)
extern void mouse_wrap (void);
extern int mouse_wrap_end[];
static __dpmi_regs mouse_regs;
static volatile struct {
- volatile int x, y, z, b;
+ volatile int x, y, z, b;
} pc_mouse;
static int minx = 0;
static int ox, oy;
-static void mouse (__dpmi_regs *r)
+static void
+mouse (__dpmi_regs *r)
{
- int nx = (signed short)r->x.si / sx;
- int ny = (signed short)r->x.di / sy;
- int dx = nx - ox;
- int dy = ny - oy;
+ int nx = (signed short)r->x.si / sx;
+ int ny = (signed short)r->x.di / sy;
+ int dx = nx - ox;
+ int dy = ny - oy;
#if PC_CUTE_WHEEL
- int dz = (signed char)r->h.bh;
+ int dz = (signed char)r->h.bh;
#endif
- ox = nx;
- oy = ny;
+ ox = nx;
+ oy = ny;
- pc_mouse.b = r->h.bl;
- pc_mouse.x = MID(minx, pc_mouse.x + dx, maxx);
- pc_mouse.y = MID(miny, pc_mouse.y + dy, maxy);
+ pc_mouse.b = r->h.bl;
+ pc_mouse.x = MID(minx, pc_mouse.x + dx, maxx);
+ pc_mouse.y = MID(miny, pc_mouse.y + dy, maxy);
#if PC_CUTE_WHEEL
- pc_mouse.z = MID(minz, pc_mouse.z + dz, maxz);
+ pc_mouse.z = MID(minz, pc_mouse.z + dz, maxz);
#endif
- if (emulat3) {
- if ((pc_mouse.b&3)==3) {
- pc_mouse.b = 4;
- }
- }
+ if (emulat3) {
+ if ((pc_mouse.b & 3) == 3) {
+ pc_mouse.b = 4;
+ }
+ }
- if (mouse_func) {
- mouse_func(pc_mouse.x, pc_mouse.y, pc_mouse.z, pc_mouse.b);
- }
+ if (mouse_func) {
+ mouse_func(pc_mouse.x, pc_mouse.y, pc_mouse.z, pc_mouse.b);
+ }
} ENDOFUNC(mouse)
-void pc_remove_mouse (void)
+
+void
+pc_remove_mouse (void)
{
- if (mouse_callback) {
- pc_clexit(pc_remove_mouse);
- __asm("\n\
+ if (mouse_callback) {
+ pc_clexit(pc_remove_mouse);
+ __asm("\n\
movl %%edx, %%ecx \n\
shrl $16, %%ecx \n\
movw $0x0304, %%ax \n\
movw $0x000c, %%ax \n\
xorl %%ecx, %%ecx \n\
int $0x33 \n\
- "::"d"(mouse_callback):"%eax", "%ecx");
+ "::"d"(mouse_callback):"%eax", "%ecx");
- mouse_callback = 0;
+ mouse_callback = 0;
- free((void *)(mouse_wrap_end[0] - MOUSE_STACK_SIZE));
- }
+ free((void *)(mouse_wrap_end[0] - MOUSE_STACK_SIZE));
+ }
}
-int pc_install_mouse (void)
+
+int
+pc_install_mouse (void)
{
- int buttons;
+ int buttons;
- /* fail if already call-backed */
- if (mouse_callback) {
- return 0;
- }
+ /* fail if already call-backed */
+ if (mouse_callback) {
+ return 0;
+ }
- /* reset mouse and get status */
- __asm("\n\
+ /* reset mouse and get status */
+ __asm("\n\
xorl %%eax, %%eax \n\
int $0x33 \n\
andl %%ebx, %%eax \n\
movl %%eax, %0 \n\
- ":"=g" (buttons)::"%eax", "%ebx");
- if (!buttons) {
- return 0;
- }
-
- /* lock wrapper */
- LOCKDATA(mouse_func);
- LOCKDATA(mouse_callback);
- LOCKDATA(mouse_regs);
- LOCKDATA(pc_mouse);
- LOCKDATA(minx);
- LOCKDATA(maxx);
- LOCKDATA(miny);
- LOCKDATA(maxy);
- LOCKDATA(minz);
- LOCKDATA(maxz);
- LOCKDATA(sx);
- LOCKDATA(sy);
- LOCKDATA(emulat3);
- LOCKDATA(ox);
- LOCKDATA(oy);
- LOCKFUNC(mouse);
- LOCKFUNC(mouse_wrap);
-
- mouse_wrap_end[1] = __djgpp_ds_alias;
- /* grab a locked stack */
- if ((mouse_wrap_end[0] = (int)pc_malloc(MOUSE_STACK_SIZE)) == NULL) {
- return 0;
- }
-
- /* try to hook a call-back */
- __asm("\n\
+ ":"=g" (buttons)::"%eax", "%ebx");
+ if (!buttons) {
+ return 0;
+ }
+
+ /* lock wrapper */
+ LOCKDATA(mouse_func);
+ LOCKDATA(mouse_callback);
+ LOCKDATA(mouse_regs);
+ LOCKDATA(pc_mouse);
+ LOCKDATA(minx);
+ LOCKDATA(maxx);
+ LOCKDATA(miny);
+ LOCKDATA(maxy);
+ LOCKDATA(minz);
+ LOCKDATA(maxz);
+ LOCKDATA(sx);
+ LOCKDATA(sy);
+ LOCKDATA(emulat3);
+ LOCKDATA(ox);
+ LOCKDATA(oy);
+ LOCKFUNC(mouse);
+ LOCKFUNC(mouse_wrap);
+
+ mouse_wrap_end[1] = __djgpp_ds_alias;
+ /* grab a locked stack */
+ if ((mouse_wrap_end[0] = (int)pc_malloc(MOUSE_STACK_SIZE)) == NULL) {
+ return 0;
+ }
+
+ /* try to hook a call-back */
+ __asm("\n\
pushl %%ds \n\
pushl %%es \n\
movw $0x0303, %%ax \n\
movw %%dx, %%cx \n\
movl %%ecx, %0 \n\
0: \n\
- ":"=g"(mouse_callback)
- :"S" (mouse_wrap), "D"(&mouse_regs)
- :"%eax", "%ecx", "%edx");
- if (!mouse_callback) {
- free((void *)mouse_wrap_end[0]);
- return 0;
- }
-
- /* adjust stack */
- mouse_wrap_end[0] += MOUSE_STACK_SIZE;
-
- /* install the handler */
- mouse_regs.x.ax = 0x000c;
+ ":"=g"(mouse_callback)
+ :"S" (mouse_wrap), "D"(&mouse_regs)
+ :"%eax", "%ecx", "%edx");
+ if (!mouse_callback) {
+ free((void *)mouse_wrap_end[0]);
+ return 0;
+ }
+
+ /* adjust stack */
+ mouse_wrap_end[0] += MOUSE_STACK_SIZE;
+
+ /* install the handler */
+ mouse_regs.x.ax = 0x000c;
#if PC_CUTE_WHEEL
- mouse_regs.x.cx = 0x7f | 0x80;
+ mouse_regs.x.cx = 0x7f | 0x80;
#else
- mouse_regs.x.cx = 0x7f;
+ mouse_regs.x.cx = 0x7f;
#endif
- mouse_regs.x.dx = mouse_callback&0xffff;
- mouse_regs.x.es = mouse_callback>>16;
- __dpmi_int(0x33, &mouse_regs);
+ mouse_regs.x.dx = mouse_callback & 0xffff;
+ mouse_regs.x.es = mouse_callback >> 16;
+ __dpmi_int(0x33, &mouse_regs);
- CLEAR_MICKEYS();
+ CLEAR_MICKEYS();
- emulat3 = buttons<3;
- pc_atexit(pc_remove_mouse);
- return buttons;
+ emulat3 = (buttons < 3);
+ pc_atexit(pc_remove_mouse);
+ return buttons;
}
-MFUNC pc_install_mouse_handler (MFUNC handler)
+
+MFUNC
+pc_install_mouse_handler (MFUNC handler)
{
- MFUNC old;
+ MFUNC old;
- if (!mouse_callback && !pc_install_mouse()) {
- return NULL;
- }
+ if (!mouse_callback && !pc_install_mouse()) {
+ return NULL;
+ }
- old = mouse_func;
- mouse_func = handler;
- return old;
+ old = mouse_func;
+ mouse_func = handler;
+ return old;
}
-void pc_mouse_area (int x1, int y1, int x2, int y2)
+
+void
+pc_mouse_area (int x1, int y1, int x2, int y2)
{
- minx = x1;
- maxx = x2;
- miny = y1;
- maxy = y2;
+ minx = x1;
+ maxx = x2;
+ miny = y1;
+ maxy = y2;
}
-void pc_mouse_speed (int xspeed, int yspeed)
+
+void
+pc_mouse_speed (int xspeed, int yspeed)
{
- DISABLE();
+ DISABLE();
- sx = MAX(1, xspeed);
- sy = MAX(1, yspeed);
+ sx = MAX(1, xspeed);
+ sy = MAX(1, yspeed);
- ENABLE();
+ ENABLE();
}
-int pc_query_mouse (int *x, int *y, int *z)
+
+int
+pc_query_mouse (int *x, int *y, int *z)
{
- *x = pc_mouse.x;
- *y = pc_mouse.y;
- *z = pc_mouse.z;
- return pc_mouse.b;
+ *x = pc_mouse.x;
+ *y = pc_mouse.y;
+ *z = pc_mouse.z;
+ return pc_mouse.b;
}
-void pc_warp_mouse (int x, int y)
+
+void
+pc_warp_mouse (int x, int y)
{
- CLEAR_MICKEYS();
+ CLEAR_MICKEYS();
- pc_mouse.x = MID(minx, x, maxx);
- pc_mouse.y = MID(miny, y, maxy);
+ pc_mouse.x = MID(minx, x, maxx);
+ pc_mouse.y = MID(miny, y, maxy);
- if (mouse_func) {
- mouse_func(pc_mouse.x, pc_mouse.y, pc_mouse.z, pc_mouse.b);
- }
+ if (mouse_func) {
+ mouse_func(pc_mouse.x, pc_mouse.y, pc_mouse.z, pc_mouse.b);
+ }
}
+
/* Hack alert:
* `mouse_wrap_end' actually holds the
* address of stack in a safe data selector.
/*
* PC/HW routine collection v1.5 for DOS/DJGPP
*
- * Copyright (C) 2002 - Borca Daniel
+ * Copyright (C) 2002 - Daniel Borca
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
static int timer_installed;
typedef struct {
- volatile unsigned int counter, clock_ticks, freq;
- volatile PFUNC func;
- volatile void *parm;
+ volatile unsigned int counter, clock_ticks, freq;
+ volatile PFUNC func;
+ volatile void *parm;
} TIMER;
static TIMER timer_main, timer_func[MAX_TIMERS];
-
/* Desc: main timer callback
*
* In : -
*
* Note: -
*/
-static int timer ()
+static int
+timer ()
{
- int i;
-
- for (i = 0; i < MAX_TIMERS; i++) {
- TIMER *t = &timer_func[i];
- if (t->func) {
- t->clock_ticks += t->counter;
- if (t->clock_ticks >= timer_main.counter) {
- t->clock_ticks -= timer_main.counter;
- t->func(unvolatile(t->parm, void *));
- }
- }
- }
-
- timer_main.clock_ticks += timer_main.counter;
- if (timer_main.clock_ticks >= 0x10000) {
- timer_main.clock_ticks -= 0x10000;
- return 1;
- } else {
- outportb(0x20, 0x20);
- return 0;
- }
+ int i;
+
+ for (i = 0; i < MAX_TIMERS; i++) {
+ TIMER *t = &timer_func[i];
+ if (t->func) {
+ t->clock_ticks += t->counter;
+ if (t->clock_ticks >= timer_main.counter) {
+ t->clock_ticks -= timer_main.counter;
+ t->func(unvolatile(t->parm, void *));
+ }
+ }
+ }
+
+ timer_main.clock_ticks += timer_main.counter;
+ if (timer_main.clock_ticks >= 0x10000) {
+ timer_main.clock_ticks -= 0x10000;
+ return 1;
+ } else {
+ outportb(0x20, 0x20);
+ return 0;
+ }
} ENDOFUNC(timer)
-
/* Desc: uninstall timer engine
*
* In : -
*
* Note: -
*/
-void pc_remove_timer (void)
+void
+pc_remove_timer (void)
{
- if (timer_installed) {
- timer_installed = FALSE;
- pc_clexit(pc_remove_timer);
-
- DISABLE();
- outportb(0x43, 0x34);
- outportb(0x40, 0);
- outportb(0x40, 0);
- ENABLE();
-
- pc_remove_irq(TIMER_IRQ);
- }
+ if (timer_installed) {
+ timer_installed = FALSE;
+ pc_clexit(pc_remove_timer);
+
+ DISABLE();
+ outportb(0x43, 0x34);
+ outportb(0x40, 0);
+ outportb(0x40, 0);
+ ENABLE();
+
+ pc_remove_irq(TIMER_IRQ);
+ }
}
-
/* Desc: remove timerfunc
*
* In : timerfunc id
*
* Note: tries to relax the main timer whenever possible
*/
-int pc_remove_int (int fid)
+int
+pc_remove_int (int fid)
{
- int i;
- unsigned int freq = 0;
-
- /* are we installed? */
- if (!timer_installed) {
- return -1;
- }
-
- /* sanity check */
- if ((fid < 0) || (fid >= MAX_TIMERS) || (timer_func[fid].func == NULL)) {
- return -1;
- }
- timer_func[fid].func = NULL;
-
- /* scan for maximum frequency */
- for (i = 0; i < MAX_TIMERS; i++) {
- TIMER *t = &timer_func[i];
- if (t->func) {
- if (freq < t->freq) {
- freq = t->freq;
- }
- }
- }
-
- /* if there are no callbacks left, cleanup */
- if (!freq) {
- pc_remove_timer();
- return 0;
- }
-
- /* if we just lowered the maximum frequency, try to relax the timer engine */
- if (freq < timer_main.freq) {
- unsigned int new_counter = PIT_FREQ / freq;
-
- DISABLE();
-
- for (i = 0; i < MAX_TIMERS; i++) {
- if (timer_func[i].func) {
- ADJUST(timer_func[i], freq);
- }
- }
-
- outportb(0x43, 0x34);
- outportb(0x40, (unsigned char)new_counter);
- outportb(0x40, (unsigned char)(new_counter>>8));
- timer_main.clock_ticks = 0;
- timer_main.counter = new_counter;
- timer_main.freq = freq;
-
- ENABLE();
- }
+ int i;
+ unsigned int freq = 0;
+
+ /* are we installed? */
+ if (!timer_installed) {
+ return -1;
+ }
+
+ /* sanity check */
+ if ((fid < 0) || (fid >= MAX_TIMERS) || (timer_func[fid].func == NULL)) {
+ return -1;
+ }
+ timer_func[fid].func = NULL;
+
+ /* scan for maximum frequency */
+ for (i = 0; i < MAX_TIMERS; i++) {
+ TIMER *t = &timer_func[i];
+ if (t->func) {
+ if (freq < t->freq) {
+ freq = t->freq;
+ }
+ }
+ }
+
+ /* if there are no callbacks left, cleanup */
+ if (!freq) {
+ pc_remove_timer();
+ return 0;
+ }
+
+ /* if we just lowered the maximum frequency, try to relax the timer engine */
+ if (freq < timer_main.freq) {
+ unsigned int new_counter = PIT_FREQ / freq;
+
+ DISABLE();
+
+ for (i = 0; i < MAX_TIMERS; i++) {
+ if (timer_func[i].func) {
+ ADJUST(timer_func[i], freq);
+ }
+ }
+
+ outportb(0x43, 0x34);
+ outportb(0x40, (unsigned char)new_counter);
+ outportb(0x40, (unsigned char)(new_counter>>8));
+ timer_main.clock_ticks = 0;
+ timer_main.counter = new_counter;
+ timer_main.freq = freq;
+
+ ENABLE();
+ }
- return 0;
+ return 0;
} ENDOFUNC(pc_remove_int)
-
/* Desc: adjust timerfunc
*
* In : timerfunc id, new frequency (Hz)
*
* Note: might change the main timer frequency
*/
-int pc_adjust_int (int fid, unsigned int freq)
+int
+pc_adjust_int (int fid, unsigned int freq)
{
- int i;
-
- /* are we installed? */
- if (!timer_installed) {
- return -1;
- }
-
- /* sanity check */
- if ((fid < 0) || (fid >= MAX_TIMERS) || (timer_func[fid].func == NULL)) {
- return -1;
- }
- timer_func[fid].freq = freq;
-
- /* scan for maximum frequency */
- freq = 0;
- for (i = 0; i < MAX_TIMERS; i++) {
- TIMER *t = &timer_func[i];
- if (t->func) {
- if (freq < t->freq) {
- freq = t->freq;
- }
- }
- }
-
- /* update main timer / sons to match highest frequency */
- DISABLE();
-
- /* using '>' is correct still (and avoids updating
- * the HW timer too often), but doesn't relax the timer!
- */
- if (freq != timer_main.freq) {
- unsigned int new_counter = PIT_FREQ / freq;
-
- for (i = 0; i < MAX_TIMERS; i++) {
- if (timer_func[i].func) {
- ADJUST(timer_func[i], freq);
- }
- }
-
- outportb(0x43, 0x34);
- outportb(0x40, (unsigned char)new_counter);
- outportb(0x40, (unsigned char)(new_counter>>8));
- timer_main.clock_ticks = 0;
- timer_main.counter = new_counter;
- timer_main.freq = freq;
- } else {
- ADJUST(timer_func[fid], timer_main.freq);
- }
-
- ENABLE();
-
- return 0;
+ int i;
+
+ /* are we installed? */
+ if (!timer_installed) {
+ return -1;
+ }
+
+ /* sanity check */
+ if ((fid < 0) || (fid >= MAX_TIMERS) || (timer_func[fid].func == NULL)) {
+ return -1;
+ }
+ timer_func[fid].freq = freq;
+
+ /* scan for maximum frequency */
+ freq = 0;
+ for (i = 0; i < MAX_TIMERS; i++) {
+ TIMER *t = &timer_func[i];
+ if (t->func) {
+ if (freq < t->freq) {
+ freq = t->freq;
+ }
+ }
+ }
+
+ /* update main timer / sons to match highest frequency */
+ DISABLE();
+
+ /* using '>' is correct still (and avoids updating
+ * the HW timer too often), but doesn't relax the timer!
+ */
+ if (freq != timer_main.freq) {
+ unsigned int new_counter = PIT_FREQ / freq;
+
+ for (i = 0; i < MAX_TIMERS; i++) {
+ if (timer_func[i].func) {
+ ADJUST(timer_func[i], freq);
+ }
+ }
+
+ outportb(0x43, 0x34);
+ outportb(0x40, (unsigned char)new_counter);
+ outportb(0x40, (unsigned char)(new_counter>>8));
+ timer_main.clock_ticks = 0;
+ timer_main.counter = new_counter;
+ timer_main.freq = freq;
+ } else {
+ ADJUST(timer_func[fid], timer_main.freq);
+ }
+
+ ENABLE();
+
+ return 0;
} ENDOFUNC(pc_adjust_int)
-
/* Desc: install timer engine
*
* In : -
*
* Note: initial frequency is 18.2 Hz
*/
-static int install_timer (void)
+static int
+install_timer (void)
{
- if (timer_installed || pc_install_irq(TIMER_IRQ, timer)) {
- return -1;
- } else {
- memset(timer_func, 0, sizeof(timer_func));
-
- LOCKDATA(timer_func);
- LOCKDATA(timer_main);
- LOCKFUNC(timer);
- LOCKFUNC(pc_adjust_int);
- LOCKFUNC(pc_remove_int);
-
- timer_main.counter = 0x10000;
-
- DISABLE();
- outportb(0x43, 0x34);
- outportb(0x40, 0);
- outportb(0x40, 0);
- timer_main.clock_ticks = 0;
- ENABLE();
-
- pc_atexit(pc_remove_timer);
- timer_installed = TRUE;
- return 0;
- }
+ if (timer_installed || pc_install_irq(TIMER_IRQ, timer)) {
+ return -1;
+ } else {
+ memset(timer_func, 0, sizeof(timer_func));
+
+ LOCKDATA(timer_func);
+ LOCKDATA(timer_main);
+ LOCKFUNC(timer);
+ LOCKFUNC(pc_adjust_int);
+ LOCKFUNC(pc_remove_int);
+
+ timer_main.counter = 0x10000;
+
+ DISABLE();
+ outportb(0x43, 0x34);
+ outportb(0x40, 0);
+ outportb(0x40, 0);
+ timer_main.clock_ticks = 0;
+ ENABLE();
+
+ pc_atexit(pc_remove_timer);
+ timer_installed = TRUE;
+ return 0;
+ }
}
-
/* Desc: install timerfunc
*
* In : callback function, opaque pointer to be passed to callee, freq (Hz)
*
* Note: returns -1 if error
*/
-int pc_install_int (PFUNC func, void *parm, unsigned int freq)
+int
+pc_install_int (PFUNC func, void *parm, unsigned int freq)
{
- int i;
- TIMER *t = NULL;
-
- /* ensure the timer engine is set up */
- if (!timer_installed) {
- if (install_timer()) {
- return -1;
- }
- }
-
- /* find an empty slot */
- for (i = 0; i < MAX_TIMERS; i++) {
- if (!timer_func[i].func) {
- t = &timer_func[i];
- break;
- }
- }
- if (t == NULL) {
- return -1;
- }
-
- DISABLE();
-
- t->func = func;
- t->parm = parm;
- t->freq = freq;
- t->clock_ticks = 0;
-
- /* update main timer / sons to match highest frequency */
- if (freq > timer_main.freq) {
- unsigned int new_counter = PIT_FREQ / freq;
-
- for (i = 0; i < MAX_TIMERS; i++) {
- if (timer_func[i].func) {
- ADJUST(timer_func[i], freq);
- }
- }
-
- outportb(0x43, 0x34);
- outportb(0x40, (unsigned char)new_counter);
- outportb(0x40, (unsigned char)(new_counter>>8));
- timer_main.clock_ticks = 0;
- timer_main.counter = new_counter;
- timer_main.freq = freq;
- } else {
- /* t == &timer_func[i] */
- ADJUST(timer_func[i], timer_main.freq);
- }
-
- i = t - timer_func;
-
- ENABLE();
-
- return i;
+ int i;
+ TIMER *t = NULL;
+
+ /* ensure the timer engine is set up */
+ if (!timer_installed) {
+ if (install_timer()) {
+ return -1;
+ }
+ }
+
+ /* find an empty slot */
+ for (i = 0; i < MAX_TIMERS; i++) {
+ if (!timer_func[i].func) {
+ t = &timer_func[i];
+ break;
+ }
+ }
+ if (t == NULL) {
+ return -1;
+ }
+
+ DISABLE();
+
+ t->func = func;
+ t->parm = parm;
+ t->freq = freq;
+ t->clock_ticks = 0;
+
+ /* update main timer / sons to match highest frequency */
+ if (freq > timer_main.freq) {
+ unsigned int new_counter = PIT_FREQ / freq;
+
+ for (i = 0; i < MAX_TIMERS; i++) {
+ if (timer_func[i].func) {
+ ADJUST(timer_func[i], freq);
+ }
+ }
+
+ outportb(0x43, 0x34);
+ outportb(0x40, (unsigned char)new_counter);
+ outportb(0x40, (unsigned char)(new_counter>>8));
+ timer_main.clock_ticks = 0;
+ timer_main.counter = new_counter;
+ timer_main.freq = freq;
+ } else {
+ /* t == &timer_func[i] */
+ ADJUST(timer_func[i], timer_main.freq);
+ }
+
+ i = t - timer_func;
+
+ ENABLE();
+
+ return i;
}
/*
* DOS/DJGPP glut driver v1.3 for Mesa
*
- * Copyright (C) 2002 - Borca Daniel
+ * Copyright (C) 2002 - Daniel Borca
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
#include "GL/dmesa.h"
+#define CLAMP(i) ((i) > 1.0F ? 1.0F : ((i) < 0.0F ? 0.0F : (i)))
-#define CLAMP(i) ((i) > 1.0 ? 1.0 : ((i) < 0.0 ? 0.0 : (i)))
-
-
-void APIENTRY glutSetColor (int ndx, GLfloat red, GLfloat green, GLfloat blue)
+void APIENTRY
+glutSetColor (int ndx, GLfloat red, GLfloat green, GLfloat blue)
{
- if (g_display_mode & GLUT_INDEX) {
- if ((ndx >= 0) && (ndx < (256 - RESERVED_COLORS))) {
- DMesaSetCI(ndx, CLAMP(red), CLAMP(green), CLAMP(blue));
- }
- }
+ if (g_display_mode & GLUT_INDEX) {
+ if ((ndx >= 0) && (ndx < (256 - RESERVED_COLORS))) {
+ DMesaSetCI(ndx, CLAMP(red), CLAMP(green), CLAMP(blue));
+ }
+ }
}
-
-GLfloat APIENTRY glutGetColor (int ndx, int component)
+GLfloat APIENTRY
+glutGetColor (int ndx, int component)
{
- return 0.0;
+ return 0.0;
}
-
-void APIENTRY glutCopyColormap (int win)
+void APIENTRY
+glutCopyColormap (int win)
{
}
/*
* DOS/DJGPP glut driver v1.3 for Mesa
*
- * Copyright (C) 2002 - Borca Daniel
+ * Copyright (C) 2002 - Daniel Borca
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
#include "glutint.h"
-
GLUTmenuStatusCB g_menu_status_func = NULL;
-
-void APIENTRY glutMenuStateFunc (GLUTmenuStateCB func)
+void APIENTRY
+glutMenuStateFunc (GLUTmenuStateCB func)
{
- g_menu_status_func = (GLUTmenuStatusCB)func;
+ g_menu_status_func = (GLUTmenuStatusCB)func;
}
-
-void APIENTRY glutMenuStatusFunc (GLUTmenuStatusCB func)
+void APIENTRY
+glutMenuStatusFunc (GLUTmenuStatusCB func)
{
- g_menu_status_func = func;
+ g_menu_status_func = func;
}
-
-int APIENTRY glutCreateMenu (GLUTselectCB func)
+int APIENTRY
+glutCreateMenu (GLUTselectCB func)
{
- return 0;
+ return 0;
}
-
-void APIENTRY glutDestroyMenu (int menu)
+void APIENTRY
+glutDestroyMenu (int menu)
{
}
-
-int APIENTRY glutGetMenu (void)
+int APIENTRY
+glutGetMenu (void)
{
- return 0;
+ return 0;
}
-
-void APIENTRY glutSetMenu (int menu)
+void APIENTRY
+glutSetMenu (int menu)
{
}
-
-void APIENTRY glutAddMenuEntry (const char *label, int value)
+void APIENTRY
+glutAddMenuEntry (const char *label, int value)
{
}
-
-void APIENTRY glutAddSubMenu (const char *label, int submenu)
+void APIENTRY
+glutAddSubMenu (const char *label, int submenu)
{
}
-
-void APIENTRY glutChangeToMenuEntry (int item, const char *label, int value)
+void APIENTRY
+glutChangeToMenuEntry (int item, const char *label, int value)
{
}
-
-void APIENTRY glutChangeToSubMenu (int item, const char *label, int submenu)
+void APIENTRY
+glutChangeToSubMenu (int item, const char *label, int submenu)
{
}
-
-void APIENTRY glutRemoveMenuItem (int item)
+void APIENTRY
+glutRemoveMenuItem (int item)
{
}
-
-void APIENTRY glutAttachMenu (int button)
+void APIENTRY
+glutAttachMenu (int button)
{
}
-
-void APIENTRY glutDetachMenu (int button)
+void APIENTRY
+glutDetachMenu (int button)
{
}
/*
* DOS/DJGPP glut driver v1.3 for Mesa
*
- * Copyright (C) 2002 - Borca Daniel
+ * Copyright (C) 2002 - Daniel Borca
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
#include "glutint.h"
-
int g_mouse;
int g_mouse_x = 0, g_mouse_y = 0;
-
-void __glutInitMouse (void)
+void
+__glutInitMouse (void)
{
- if ((g_mouse = pc_install_mouse())) {
- pc_mouse_area(g_curwin->xpos, g_curwin->ypos, g_curwin->xpos + g_curwin->width - 1, g_curwin->ypos + g_curwin->height - 1);
+ if ((g_mouse = pc_install_mouse())) {
+ pc_mouse_area(g_curwin->xpos, g_curwin->ypos, g_curwin->xpos + g_curwin->width - 1, g_curwin->ypos + g_curwin->height - 1);
- g_curwin->show_mouse = (g_curwin->mouse || g_curwin->motion || g_curwin->passive);
- }
+ g_curwin->show_mouse = (g_curwin->mouse || g_curwin->motion || g_curwin->passive);
+ }
}
-
-void APIENTRY glutSetCursor (int cursor)
+void APIENTRY
+glutSetCursor (int cursor)
{
- /* XXX completely futile until full mouse support (maybe never) */
+ /* XXX completely futile until full mouse support (maybe never) */
}
-
-void APIENTRY glutWarpPointer (int x, int y)
+void APIENTRY
+glutWarpPointer (int x, int y)
{
- pc_warp_mouse(x, y);
+ pc_warp_mouse(x, y);
}
/*
* DOS/DJGPP glut driver v1.3 for Mesa
*
- * Copyright (C) 2002 - Borca Daniel
+ * Copyright (C) 2002 - Daniel Borca
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
#include "glutint.h"
-
-int APIENTRY glutLayerGet (GLenum info)
+int APIENTRY
+glutLayerGet (GLenum info)
{
- switch (info) {
- case GLUT_OVERLAY_POSSIBLE:
- case GLUT_HAS_OVERLAY:
- return GL_FALSE;
- case GLUT_LAYER_IN_USE:
- return GLUT_NORMAL;
- case GLUT_NORMAL_DAMAGED:
- return GL_FALSE;
- case GLUT_OVERLAY_DAMAGED:
- case GLUT_TRANSPARENT_INDEX:
- default:
- return -1;
- }
+ switch (info) {
+ case GLUT_OVERLAY_POSSIBLE:
+ case GLUT_HAS_OVERLAY:
+ return GL_FALSE;
+ case GLUT_LAYER_IN_USE:
+ return GLUT_NORMAL;
+ case GLUT_NORMAL_DAMAGED:
+ return GL_FALSE;
+ case GLUT_OVERLAY_DAMAGED:
+ case GLUT_TRANSPARENT_INDEX:
+ default:
+ return -1;
+ }
}
-
-void APIENTRY glutOverlayDisplayFunc (GLUTdisplayCB func)
+void APIENTRY
+glutOverlayDisplayFunc (GLUTdisplayCB func)
{
}
-
-void APIENTRY glutEstablishOverlay (void)
+void APIENTRY
+glutEstablishOverlay (void)
{
}
-
-void APIENTRY glutRemoveOverlay (void)
+void APIENTRY
+glutRemoveOverlay (void)
{
}
-
-void APIENTRY glutUseLayer (GLenum layer)
+void APIENTRY
+glutUseLayer (GLenum layer)
{
}
-
-void APIENTRY glutPostOverlayRedisplay (void)
+void APIENTRY
+glutPostOverlayRedisplay (void)
{
}
-
-void APIENTRY glutShowOverlay (void)
+void APIENTRY
+glutShowOverlay (void)
{
}
-
-void APIENTRY glutHideOverlay (void)
+void APIENTRY
+glutHideOverlay (void)
{
}
/*
* DOS/DJGPP glut driver v1.4 for Mesa
*
- * Copyright (C) 2002 - Borca Daniel
+ * Copyright (C) 2002 - Daniel Borca
* Email : dborca@yahoo.com
* Web : http://www.geocities.com/dborca
*/
#include "glutstroke.h"
-
#ifdef GLUT_IMPORT_LIB
extern StrokeFontRec glutStrokeRoman, glutStrokeMonoRoman;
extern BitmapFontRec glutBitmap8By13, glutBitmap9By15, glutBitmapTimesRoman10, glutBitmapTimesRoman24, glutBitmapHelvetica10, glutBitmapHelvetica12, glutBitmapHelvetica18;
GLUT API constants such as GLUT_STROKE_ROMAN have to get passed
through a case statement to get mapped to the actual data structure
address. */
-void *__glutFont (void *font)
+void *
+__glutFont (void *font)
{
- switch ((int)font) {
- case (int)GLUT_STROKE_ROMAN:
- return &glutStrokeRoman;
- case (int)GLUT_STROKE_MONO_ROMAN:
- return &glutStrokeMonoRoman;
- case (int)GLUT_BITMAP_9_BY_15:
- return &glutBitmap9By15;
- case (int)GLUT_BITMAP_8_BY_13:
- return &glutBitmap8By13;
- case (int)GLUT_BITMAP_TIMES_ROMAN_10:
- return &glutBitmapTimesRoman10;
- case (int)GLUT_BITMAP_TIMES_ROMAN_24:
- return &glutBitmapTimesRoman24;
- case (int)GLUT_BITMAP_HELVETICA_10:
- return &glutBitmapHelvetica10;
- case (int)GLUT_BITMAP_HELVETICA_12:
- return &glutBitmapHelvetica12;
- case (int)GLUT_BITMAP_HELVETICA_18:
- return &glutBitmapHelvetica18;
- default: /* NOTREACHED */
- __glutFatalError("bad font!");
- return NULL;
- }
+ switch ((int)font) {
+ case (int)GLUT_STROKE_ROMAN:
+ return &glutStrokeRoman;
+ case (int)GLUT_STROKE_MONO_ROMAN:
+ return &glutStrokeMonoRoman;
+ case (int)GLUT_BITMAP_9_BY_15:
+ return &glutBitmap9By15;
+ case (int)GLUT_BITMAP_8_BY_13:
+ return &glutBitmap8By13;
+ case (int)GLUT_BITMAP_TIMES_ROMAN_10:
+ return &glutBitmapTimesRoman10;
+ case (int)GLUT_BITMAP_TIMES_ROMAN_24:
+ return &glutBitmapTimesRoman24;
+ case (int)GLUT_BITMAP_HELVETICA_10:
+ return &glutBitmapHelvetica10;
+ case (int)GLUT_BITMAP_HELVETICA_12:
+ return &glutBitmapHelvetica12;
+ case (int)GLUT_BITMAP_HELVETICA_18:
+ return &glutBitmapHelvetica18;
+ default: /* NOTREACHED */
+ __glutFatalError("bad font!");
+ return NULL;
+ }
}
#endif
/*
* DOS/DJGPP glut driver v1.4 for Mesa
*
- * Copyright (C) 2002 - Borca Daniel
+ * Copyright (C) 2002 - Daniel Borca
* Email : dborca@users.sourceforge.net
* Web : http://www.geocities.com/dborca
*/
#include "GL/dmesa.h"
-
GLUTwindow *g_curwin;
static GLuint swaptime, swapcount;
GLUTwindow *g_windows[MAX_WINDOWS];
-
-static void clean (void)
+static void
+clean (void)
{
- int i;
+ int i;
- for (i=1; i<=MAX_WINDOWS; i++) {
- glutDestroyWindow(i);
- }
- if (visual) DMesaDestroyVisual(visual);
+ for (i=1; i<=MAX_WINDOWS; i++) {
+ glutDestroyWindow(i);
+ }
+ if (visual) DMesaDestroyVisual(visual);
- pc_close_stdout();
- pc_close_stderr();
+ pc_close_stdout();
+ pc_close_stderr();
}
-
-int APIENTRY glutCreateWindow (const char *title)
+int APIENTRY
+glutCreateWindow (const char *title)
{
- int i;
- int m8width = (g_init_w + 7) & ~7;
-
- /* We set the Visual once. This will be our desktop (graphic mode).
- * We should do this in the `glutInit' code, but we don't have any idea
- * about its geometry. Supposedly, when we are about to create one
- * window, we have a slight idea about resolution.
- */
- if (!visual) {
- if ((visual=DMesaCreateVisual(g_init_x + m8width, g_init_y + g_init_h, g_bpp, g_refresh,
- g_display_mode & GLUT_DOUBLE,
- !(g_display_mode & GLUT_INDEX),
- (g_display_mode & GLUT_ALPHA ) ? g_alpha : 0,
- (g_display_mode & GLUT_DEPTH ) ? g_depth : 0,
- (g_display_mode & GLUT_STENCIL) ? g_stencil : 0,
- (g_display_mode & GLUT_ACCUM ) ? g_accum : 0))==NULL) {
- return 0;
- }
-
- /* Also hook stdio/stderr once */
- pc_open_stdout();
- pc_open_stderr();
- pc_atexit(clean);
- }
-
- /* Search for an empty slot.
- * Each window has its own rendering Context and its own Buffer.
- */
- for (i=0; i<MAX_WINDOWS; i++) {
- if (g_windows[i] == NULL) {
- DMesaContext c;
- DMesaBuffer b;
- GLUTwindow *w;
-
- if ((w = (GLUTwindow *)calloc(1, sizeof(GLUTwindow))) == NULL) {
- return 0;
- }
-
- /* Allocate the rendering Context. */
- if ((c = DMesaCreateContext(visual, NULL)) == NULL) {
- free(w);
- return 0;
- }
-
- /* Allocate the Buffer (displayable area).
- * We have to specify buffer size and position (inside the desktop).
- */
- if ((b = DMesaCreateBuffer(visual, g_init_x, g_init_y, m8width, g_init_h)) == NULL) {
- DMesaDestroyContext(c);
- free(w);
- return 0;
- }
-
- /* Bind Buffer to Context and make the Context the current one. */
- if (!DMesaMakeCurrent(c, b)) {
- DMesaDestroyBuffer(b);
- DMesaDestroyContext(c);
- free(w);
- return 0;
- }
-
- g_curwin = g_windows[i] = w;
-
- w->num = ++i;
- w->xpos = g_init_x;
- w->ypos = g_init_y;
- w->width = m8width;
- w->height = g_init_h;
- w->context = c;
- w->buffer = b;
-
- return i;
- }
- }
-
- return 0;
+ int i;
+ int m8width = (g_init_w + 7) & ~7;
+
+ /* We set the Visual once. This will be our desktop (graphic mode).
+ * We should do this in the `glutInit' code, but we don't have any idea
+ * about its geometry. Supposedly, when we are about to create one
+ * window, we have a slight idea about resolution.
+ */
+ if (!visual) {
+ if ((visual=DMesaCreateVisual(g_init_x + m8width, g_init_y + g_init_h, g_bpp, g_refresh,
+ g_display_mode & GLUT_DOUBLE,
+ !(g_display_mode & GLUT_INDEX),
+ (g_display_mode & GLUT_ALPHA ) ? g_alpha : 0,
+ (g_display_mode & GLUT_DEPTH ) ? g_depth : 0,
+ (g_display_mode & GLUT_STENCIL) ? g_stencil : 0,
+ (g_display_mode & GLUT_ACCUM ) ? g_accum : 0))==NULL) {
+ return 0;
+ }
+
+ /* Also hook stdio/stderr once */
+ pc_open_stdout();
+ pc_open_stderr();
+ pc_atexit(clean);
+ }
+
+ /* Search for an empty slot.
+ * Each window has its own rendering Context and its own Buffer.
+ */
+ for (i=0; i<MAX_WINDOWS; i++) {
+ if (g_windows[i] == NULL) {
+ DMesaContext c;
+ DMesaBuffer b;
+ GLUTwindow *w;
+
+ if ((w = (GLUTwindow *)calloc(1, sizeof(GLUTwindow))) == NULL) {
+ return 0;
+ }
+
+ /* Allocate the rendering Context. */
+ if ((c = DMesaCreateContext(visual, NULL)) == NULL) {
+ free(w);
+ return 0;
+ }
+
+ /* Allocate the Buffer (displayable area).
+ * We have to specify buffer size and position (inside the desktop).
+ */
+ if ((b = DMesaCreateBuffer(visual, g_init_x, g_init_y, m8width, g_init_h)) == NULL) {
+ DMesaDestroyContext(c);
+ free(w);
+ return 0;
+ }
+
+ /* Bind Buffer to Context and make the Context the current one. */
+ if (!DMesaMakeCurrent(c, b)) {
+ DMesaDestroyBuffer(b);
+ DMesaDestroyContext(c);
+ free(w);
+ return 0;
+ }
+
+ g_curwin = g_windows[i] = w;
+
+ w->num = ++i;
+ w->xpos = g_init_x;
+ w->ypos = g_init_y;
+ w->width = m8width;
+ w->height = g_init_h;
+ w->context = c;
+ w->buffer = b;
+
+ return i;
+ }
+ }
+
+ return 0;
}
-
-int APIENTRY glutCreateSubWindow (int win, int x, int y, int width, int height)
+int APIENTRY
+glutCreateSubWindow (int win, int x, int y, int width, int height)
{
- return GL_FALSE;
+ return GL_FALSE;
}
-
-void APIENTRY glutDestroyWindow (int win)
+void APIENTRY
+glutDestroyWindow (int win)
{
- if (g_windows[--win]) {
- GLUTwindow *w = g_windows[win];
- DMesaMakeCurrent(NULL, NULL);
- DMesaDestroyBuffer(w->buffer);
- DMesaDestroyContext(w->context);
- free(w);
- g_windows[win] = NULL;
- }
+ if (g_windows[--win]) {
+ GLUTwindow *w = g_windows[win];
+ DMesaMakeCurrent(NULL, NULL);
+ DMesaDestroyBuffer(w->buffer);
+ DMesaDestroyContext(w->context);
+ free(w);
+ g_windows[win] = NULL;
+ }
}
-
-void APIENTRY glutPostRedisplay (void)
+void APIENTRY
+glutPostRedisplay (void)
{
- g_curwin->redisplay = GL_TRUE;
+ g_curwin->redisplay = GL_TRUE;
}
-
-void APIENTRY glutSwapBuffers (void)
+void APIENTRY
+glutSwapBuffers (void)
{
- if (g_curwin->show_mouse) {
- /* XXX scare mouse */
- DMesaSwapBuffers(g_curwin->buffer);
- /* XXX unscare mouse */
- } else {
- DMesaSwapBuffers(g_curwin->buffer);
- }
-
- if (g_fps) {
- GLint t = glutGet(GLUT_ELAPSED_TIME);
- swapcount++;
- if (swaptime == 0)
- swaptime = t;
- else if (t - swaptime > g_fps) {
- double time = 0.001 * (t - swaptime);
- double fps = (double)swapcount / time;
- fprintf(stderr, "GLUT: %d frames in %.2f seconds = %.2f FPS\n", swapcount, time, fps);
- swaptime = t;
- swapcount = 0;
- }
- }
+ if (g_curwin->show_mouse) {
+ /* XXX scare mouse */
+ DMesaSwapBuffers(g_curwin->buffer);
+ /* XXX unscare mouse */
+ } else {
+ DMesaSwapBuffers(g_curwin->buffer);
+ }
+
+ if (g_fps) {
+ GLint t = glutGet(GLUT_ELAPSED_TIME);
+ swapcount++;
+ if (swaptime == 0)
+ swaptime = t;
+ else if (t - swaptime > g_fps) {
+ double time = 0.001 * (t - swaptime);
+ double fps = (double)swapcount / time;
+ fprintf(stderr, "GLUT: %d frames in %.2f seconds = %.2f FPS\n", swapcount, time, fps);
+ swaptime = t;
+ swapcount = 0;
+ }
+ }
}
-
-int APIENTRY glutGetWindow (void)
+int APIENTRY
+glutGetWindow (void)
{
- return g_curwin->num;
+ return g_curwin->num;
}
-
-void APIENTRY glutSetWindow (int win)
+void APIENTRY
+glutSetWindow (int win)
{
- g_curwin = g_windows[win - 1];
- DMesaMakeCurrent(g_curwin->context, g_curwin->buffer);
+ g_curwin = g_windows[win - 1];
+ DMesaMakeCurrent(g_curwin->context, g_curwin->buffer);
}
-
-void APIENTRY glutSetWindowTitle (const char *title)
+void APIENTRY
+glutSetWindowTitle (const char *title)
{
}
-
-void APIENTRY glutSetIconTitle (const char *title)
+void APIENTRY
+glutSetIconTitle (const char *title)
{
}
-
-void APIENTRY glutPositionWindow (int x, int y)
+void APIENTRY
+glutPositionWindow (int x, int y)
{
- if (DMesaMoveBuffer(x, y)) {
- g_curwin->xpos = x;
- g_curwin->ypos = y;
- }
+ if (DMesaMoveBuffer(x, y)) {
+ g_curwin->xpos = x;
+ g_curwin->ypos = y;
+ }
}
-
-void APIENTRY glutReshapeWindow (int width, int height)
+void APIENTRY
+glutReshapeWindow (int width, int height)
{
- if (DMesaResizeBuffer(width, height)) {
- g_curwin->width = width;
- g_curwin->height = height;
- if (g_curwin->reshape) {
- g_curwin->reshape(width, height);
- } else {
- glViewport(0, 0, width, height);
- }
- }
+ if (DMesaResizeBuffer(width, height)) {
+ g_curwin->width = width;
+ g_curwin->height = height;
+ if (g_curwin->reshape) {
+ g_curwin->reshape(width, height);
+ } else {
+ glViewport(0, 0, width, height);
+ }
+ }
}
-
-void APIENTRY glutFullScreen (void)
+void APIENTRY
+glutFullScreen (void)
{
}
-
-void APIENTRY glutPopWindow (void)
+void APIENTRY
+glutPopWindow (void)
{
}
-
-void APIENTRY glutPushWindow (void)
+void APIENTRY
+glutPushWindow (void)
{
}
-
-void APIENTRY glutIconifyWindow (void)
+void APIENTRY
+glutIconifyWindow (void)
{
}
-
-void APIENTRY glutShowWindow (void)
+void APIENTRY
+glutShowWindow (void)
{
}
-
-void APIENTRY glutHideWindow (void)
+void APIENTRY
+glutHideWindow (void)
{
}