home *** CD-ROM | disk | FTP | other *** search
/ Stars of Shareware: Programmierung / SOURCE.mdf / programm / msdos / c / djgpp / go32 / mono.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-05-30  |  1.6 KB  |  95 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 8:
  32.       if (col > 0)
  33.         col--;
  34.       break;
  35.     case 7:
  36.       write(1, "\a", 1);
  37.       break;
  38.     case 12:
  39.       for (i=0; i<25*160;)
  40.       {
  41.         pokeb(0xb000, i++, 0x20);
  42.         pokeb(0xb000, i++, 0x07);
  43.       }
  44.       row = 1;
  45.       col = 0;
  46.       break;
  47.     default:
  48.       pokeb(0xb000, row*160+col*2, c);
  49.       pokeb(0xb000, row*160+col*2+1, mono_attr);
  50.       col++;
  51.       if (col == 80)
  52.       {
  53.         mono_putc(10);
  54.       }
  55.       break;
  56.   }
  57. }
  58.  
  59. int printf(const char *fmt, ...)
  60. {
  61.   char buf[200];
  62.   int i;
  63.   int n = vsprintf(buf, fmt, &...);
  64.   if (use_mono)
  65.   {
  66.     if (col == -1)
  67.       mono_putc(12);
  68.  
  69.     for (i=0; buf[i]; i++)
  70.       mono_putc(buf[i]);
  71.  
  72.     outportb(0x3b4, 15);
  73.     outportb(0x3b5, row*80+col);
  74.     outportb(0x3b4, 14);
  75.     outportb(0x3b5, (row*80+col)/256);
  76.   }
  77.   else
  78.     write(1, buf, strlen(buf));
  79.   return n;
  80. }
  81.  
  82. void mputchar(char c)
  83. {
  84.   if (use_mono)
  85.   {
  86.     mono_putc(c);
  87.     outportb(0x3b4, 15);
  88.     outportb(0x3b5, row*80+col);
  89.     outportb(0x3b4, 14);
  90.     outportb(0x3b5, (row*80+col)/256);
  91.   }
  92.   else
  93.     write(1, &c, 1);
  94. }
  95.