VFOSSIL.C

7.8 KB 943c981b6980c327…
/*--------------------------------------------------------------------------*/
/*                                                                          */
/*                                                                          */
/*      ------------         Bit-Bucket Software, Co.                       */
/*      \ 10001101 /         Writers and Distributors of                    */
/*       \ 011110 /          Freely Available<tm> Software.                 */
/*        \ 1011 /                                                          */
/*         ------                                                           */
/*                                                                          */
/*  (C) Copyright 1987-91, Bit Bucket Software Co., a Delaware Corporation. */
/*                                                                          */
/*                                                                          */
/*           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.250.    */
/*                                                                          */
/*    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:491/0                          */
/* 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 = 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;

   VioGetCurPos ((PUSHORT) &row, (PUSHORT) &col, 0);
   return (col);
}

int fossil_wherey (void)
{
   USHORT row, col;

   VioGetCurPos ((PUSHORT) &row, (PUSHORT) &col, 0);
   return (row);
}

#else   /* ifdef OS_2 */

unsigned int far pascal write_screen (PCH, unsigned int, unsigned int, unsigned int, unsigned int);
unsigned int far pascal write_chars (char far *, unsigned int, unsigned int, unsigned int, unsigned int);
unsigned int far pascal video_mode (PVIOMODEINFO, unsigned int);

void vfossil_init ()
{
#ifndef MILQ

   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;
      }
#endif

}

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;
}

unsigned int far pascal video_mode (PVIOMODEINFO s, unsigned int 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);
}

#ifndef MILQ

unsigned int far pascal write_screen (PCH s, unsigned int l, 
                              unsigned int r, unsigned int c, unsigned int h)
{
   unsigned int 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);
}

unsigned int far pascal write_chars (char far *s, unsigned int l, 
                              unsigned int r, unsigned int c, unsigned int h)
{
   unsigned int 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 MILQ */
#endif          /*defined OS_2 */