home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / c / cl5sr386.zip / GO32 / MONO.C < prev    next >
C/C++ Source or Header  |  1992-04-13  |  2KB  |  116 lines

  1. #include <stdio.h>
  2. #include "mono.h"
  3.  
  4. extern int use_mono;
  5.  
  6. int screen_seg = 0xb800;
  7. int mono_attr = 0x07;
  8.  
  9. static int row=-1,col=-1;
  10.  
  11. mono_putc(char c)
  12. {
  13.   int i;
  14.   switch (c)
  15.   {
  16.     case 13:
  17.       col = 0;
  18.       break;
  19.     case 10:
  20.       col = 0;
  21.       row ++;
  22.       if (row == 25)
  23.       {
  24.         for (i=160; i<24*160; i++)
  25.           pokeb(0xb000, i, peekb(0xb000, i+160));
  26.         for (; i<25*160; i+=2)
  27.           poke(0xb000, i, 0x0720);
  28.         row--;
  29.       }
  30.       break;
  31.     case 9:
  32.       do {
  33.         col++;
  34.       } while (col % 8);
  35.       break;
  36.     case 8:
  37.       if (col > 0)
  38.         col--;
  39.       break;
  40.     case 7:
  41.       write(1, "\a", 1);
  42.       break;
  43.     case 12:
  44.       for (i=0; i<25*160;)
  45.       {
  46.         pokeb(0xb000, i++, 0x20);
  47.         pokeb(0xb000, i++, 0x07);
  48.       }
  49.       row = 1;
  50.       col = 0;
  51.       break;
  52.     default:
  53.       pokeb(0xb000, row*160+col*2, c);
  54.       pokeb(0xb000, row*160+col*2+1, mono_attr);
  55.       col++;
  56.       if (col == 80)
  57.       {
  58.         mono_putc(10);
  59.       }
  60.       break;
  61.   }
  62. }
  63.  
  64. int printf(const char *fmt, ...)
  65. {
  66.   char buf[200];
  67.   int i;
  68.   int n = vsprintf(buf, fmt, &...);
  69.   if (use_mono)
  70.   {
  71.     if (col == -1)
  72.       mono_putc(12);
  73.  
  74.     for (i=0; buf[i]; i++)
  75.       mono_putc(buf[i]);
  76.  
  77.     outportb(0x3b4, 15);
  78.     outportb(0x3b5, row*80+col);
  79.     outportb(0x3b4, 14);
  80.     outportb(0x3b5, (row*80+col)/256);
  81.   }
  82.   else
  83.     write(1, buf, strlen(buf));
  84.   return n;
  85. }
  86.  
  87. void mputchar(char c)
  88. {
  89.   if (use_mono)
  90.   {
  91.     mono_putc(c);
  92.     outportb(0x3b4, 15);
  93.     outportb(0x3b5, row*80+col);
  94.     outportb(0x3b4, 14);
  95.     outportb(0x3b5, (row*80+col)/256);
  96.   }
  97.   else
  98.     write(1, &c, 1);
  99. }
  100.  
  101. mono_write(char *buf, int len)
  102. {
  103.   int i;
  104.   if (col == -1)
  105.     mono_putc(12);
  106.  
  107.   for (i=0; i<len; i++)
  108.     mono_putc(buf[i]);
  109.  
  110.   outportb(0x3b4, 15);
  111.   outportb(0x3b5, row*80+col);
  112.   outportb(0x3b4, 14);
  113.   outportb(0x3b5, (row*80+col)/256);
  114.   return len;
  115. }
  116.