/*--------------------------------------------------------------------------*/ /* */ /* */ /* ------------ Bit-Bucket Software, Co. */ /* \ 10001101 / Writers and Distributors of */ /* \ 011110 / Freely Available Software. */ /* \ 1011 / */ /* ------ */ /* */ /* (C) Copyright 1987-96, Bit Bucket Software Co. */ /* */ /* This module was originally written by Bob Hartman */ /* */ /* BinkleyTerm VFOSSIL module */ /* */ /* */ /* For complete details of the licensing restrictions, please refer */ /* to the License agreement, which is published in its entirety in */ /* the MAKEFILE and BT.C, and also contained in the file LICENSE.260. */ /* */ /* USE OF THIS FILE IS SUBJECT TO THE RESTRICTIONS CONTAINED IN THE */ /* BINKLEYTERM LICENSING AGREEMENT. IF YOU DO NOT FIND THE TEXT OF */ /* THIS AGREEMENT IN ANY OF THE AFOREMENTIONED FILES, OR IF YOU DO */ /* NOT HAVE THESE FILES, YOU SHOULD IMMEDIATELY CONTACT BIT BUCKET */ /* SOFTWARE CO. AT ONE OF THE ADDRESSES LISTED BELOW. IN NO EVENT */ /* SHOULD YOU PROCEED TO USE THIS FILE WITHOUT HAVING ACCEPTED THE */ /* TERMS OF THE BINKLEYTERM LICENSING AGREEMENT, OR SUCH OTHER */ /* AGREEMENT AS YOU ARE ABLE TO REACH WITH BIT BUCKET SOFTWARE, CO. */ /* */ /* */ /* You can contact Bit Bucket Software Co. at any one of the following */ /* addresses: */ /* */ /* Bit Bucket Software Co. FidoNet 1:104/501, 1:343/491 */ /* P.O. Box 460398 AlterNet 7:42/1491 */ /* Aurora, CO 80046 BBS-Net 86:2030/1 */ /* Internet f491.n343.z1.fidonet.org */ /* */ /* Please feel free to contact us at any time to share your comments about */ /* our software and/or licensing policies. */ /* */ /*--------------------------------------------------------------------------*/ /* Include this file before any other includes or defines! */ #include "includes.h" extern VIOMODEINFO vfos_mode; #ifdef OS_2 /*PLF Fri 05-05-1989 05:35:11 OS/2 version notes: * * I have basically made this two completely different versions. A lot * of the original real mode version deals with the case when vfossil * does not exist. Under OS/2, it is always active. * */ extern int vfossil_installed; void vfossil_init (void) { PVIOMODEINFO q; vfossil_installed = 1; q = (PVIOMODEINFO) & vfos_mode; vfos_mode.cb = sizeof (VIOMODEINFO); VioGetMode (q, 0); VioSetAnsi (ANSI_ON, 0); } void vfossil_cursor (int st) { VIOCURSORINFO cur; VioGetCurType (&cur, 0); cur.attr = (USHORT) (st ? 0 : -1); VioSetCurType (&cur, 0); } void vfossil_close (void) { vfossil_cursor (1); vfossil_installed = 0; } void fossil_gotoxy (int col, int row) { VioSetCurPos ((USHORT) row, (USHORT) col, 0); } int fossil_wherex (void) { USHORT row, col = 0; VioGetCurPos ((PUSHORT) & row, (PUSHORT) & col, 0); return (col); } int fossil_wherey (void) { USHORT row = 0, col; VioGetCurPos ((PUSHORT) & row, (PUSHORT) & col, 0); return (row); } #ifdef BINKLEY_SOUNDS /* MB 93-12-18 */ static HMODULE ModHandle = NULL; static ULONG (*APIENTRY mciSendString) (PSZ pszCommandBuf, PSZ pszReturnString, USHORT wReturnLength, HWND hwndCallBack, USHORT usUserParm); static BOOL mmpm_unavail = FALSE; void Make_Sound (char *WaveFile) { APIRET rc; PSZ MMPM_ERROR = "!%s Error %d initializing MMPM/2 support"; char mciStr[100]; char mciAlias[8]; if (WaveFile == NULL || mmpm_unavail) return; if (!ModHandle) { /* load the MMPM/2 MDM.DLL */ if (rc = DosLoadModule (mciStr, sizeof (mciStr), "MDM", &ModHandle)) { status_line (MMPM_ERROR, "DosLoadModule", rc); mmpm_unavail = TRUE; return; } /* get the mciSendString entry point */ if (rc = DosQueryProcAddr (ModHandle, 0L, "mciSendString", (PFN *) & mciSendString)) { status_line (MMPM_ERROR, "DosQueryProcAddr", rc); DosFreeModule (ModHandle); mmpm_unavail = TRUE; return; } } /* Create an alias for talking to mciSendString */ sprintf (mciAlias, "bt%02xsnd", TaskNumber); /* Open the file */ sprintf (mciStr, "open %s alias %s wait", WaveFile, mciAlias); if (!mciSendString ((PSZ) mciStr, (PSZ) NULL, 0, (HWND) 0, 0)) { /* Play the file */ sprintf (mciStr, "play %s wait", mciAlias); mciSendString ((PSZ) mciStr, (PSZ) NULL, 0, (HWND) 0, 0); /* Close the file */ sprintf (mciStr, "close %s wait", mciAlias); mciSendString ((PSZ) mciStr, (PSZ) NULL, 0, (HWND) 0, 0); } } #endif /* BINKLEY_SOUNDS */ #endif /* OS_2 */ #ifdef _WIN32 extern int vfossil_installed; void vfossil_init (void) { #if 0 PVIOMODEINFO q; vfossil_installed = 1; q = (PVIOMODEINFO) & vfos_mode; vfos_mode.cb = sizeof (VIOMODEINFO); VioGetMode (q, 0); VioSetAnsi (ANSI_ON, 0); #endif } void vfossil_cursor (int st) { #if 0 VIOCURSORINFO cur; VioGetCurType (&cur, 0); cur.attr = (USHORT) (st ? 0 : -1); VioSetCurType (&cur, 0); #endif } void vfossil_close (void) { vfossil_cursor (1); vfossil_installed = 0; } void fossil_gotoxy (int col, int row) { #if 0 VioSetCurPos ((USHORT) row, (USHORT) col, 0); #endif } int fossil_wherex (void) { return 1; #if 0 USHORT row, col; VioGetCurPos ((PUSHORT) & row, (PUSHORT) & col, 0); return (col); #endif } int fossil_wherey (void) { return 1; #if 0 USHORT row, col; VioGetCurPos ((PUSHORT) & row, (PUSHORT) & col, 0); return (row); #endif } USHORT VioWrtTTY (PCH pchString, USHORT cbString, USHORT hvio) { return 0; } USHORT VioWrtCellStr (PCH pchCellString, USHORT cbCellString, USHORT usRow, USHORT usColumn, USHORT hvio) { return 0; } #endif #ifdef DOS16 USHORT far pascal write_screen (PCH, USHORT, USHORT, USHORT, USHORT); USHORT far pascal write_chars (PCH, USHORT, USHORT, USHORT, USHORT); USHORT far pascal video_mode (PVIOMODEINFO, USHORT); void vfossil_init () { char far *q; union REGS inregs, outregs; struct SREGS s; VFOSSIL v; v.vfossil_size = sizeof (VFOSSIL); q = (char far *) &v; vfossil_installed = 0; inregs.h.ah = 0x81; inregs.h.al = 0; segread (&s); s.es = FP_SEG (q); inregs.x.di = FP_OFF (q); (void) int86x (0x14, &inregs, &outregs, &s); if (outregs.x.ax == 0x1954) { /* There is a VFOSSIL out there, so set it up for use */ inregs.h.al = 1; inregs.x.cx = 80; q = (char far *) &vfossil_funcs; inregs.x.di = FP_OFF (q); s.es = FP_SEG (q); (void) int86x (0x14, &inregs, &outregs, &s); if ((outregs.x.ax == 0x1954) && (outregs.x.bx >= 14)) { /* It is really out there */ vfossil_installed = 1; q = (char far *) &vfos_mode; vfos_mode.cb = sizeof (VIOMODEINFO); (void) VioGetMode ((PVIOMODEINFO) q, 0); } } if (!vfossil_installed) { (void) memset ((char *) &vfossil_funcs, 0, sizeof (vfossil_funcs)); vfossil_funcs.GetMode = video_mode; vfossil_funcs.WrtCellStr = write_screen; vfossil_funcs.WrtCharStr = write_chars; } } void vfossil_cursor (int st) { CURSOR cur; if ((long) vfossil_funcs.GetCurType) { /* We can make the cursor go away */ (void) VioGetCurType (&cur, 0); cur.cur_attr = st ? 0 : -1; (void) VioSetCurType (&cur, 0); } } void vfossil_close () { union REGS r; vfossil_cursor (1); r.h.ah = 0x81; r.h.al = 2; (void) int86 (0x14, &r, &r); vfossil_installed = 0; } USHORT far pascal video_mode (PVIOMODEINFO s, USHORT h) { if (s->cb < 8) { return (382); } if (h != 0) { return (436); } s->fbType = 1; s->color = 1; s->col = 80; s->row = 23; return (0); } USHORT far pascal write_screen (PCH s, USHORT l, USHORT r, USHORT c, USHORT h) { USHORT i; int far *p; p = (int far *) s; /* The following line is just to make -W3 happy */ i = h; gotoxy (c, r); l = l / 2; for (i = 0; i < l; i++) { (void) WRITE_BIOS (*p); ++p; } return (0); } USHORT far pascal write_chars (PCH s, USHORT l, USHORT r, USHORT c, USHORT h) { USHORT i; /* The following line is just to make -W3 happy */ i = h; gotoxy (c, r); for (i = 0; i < l; i++) { (void) WRITE_BIOS (*s); ++s; } return (0); } #endif /*defined DOS16 */