home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C128CPM / SGTOOL16.ARC / LIBC128.ARC / VDCBMSTI.C < prev    next >
Encoding:
C/C++ Source or Header  |  1994-02-27  |  1.9 KB  |  66 lines

  1. /*
  2. SG C Tools 1.6
  3.  
  4. (C) 1993 Steve Goldsmith
  5. All Rights Reserved
  6.  
  7. Compiled with HI-TECH C 3.09 (CP/M-80).
  8. */
  9.  
  10. #include <string.h>
  11. #include <hitech.h>
  12. #include <vdc.h>
  13.  
  14. extern uchar  vdcScrHorz;
  15. extern ushort vdcDispMem;
  16. extern ushort vdcCharMem;
  17. extern uchar  vdcCharBytes;
  18. extern uchar  vdcCharVert;
  19.  
  20. /* bit map string print given x and y char offset in current 640 X 480 page */
  21.  
  22. void printbmivdc(uchar X, uchar Y, char *TextStr)
  23. {
  24.   register uchar I;
  25.   uchar  TextLen;
  26.   uchar  CharBuf[vdcMaxCharBytes];
  27.   ushort DispOfsX, DispOfsY, DispOfsYO, CharSet, CharSetOfs;
  28.  
  29.   TextLen = strlen(TextStr);
  30.   if(TextLen > 0) /* don't print null strings */
  31.   {
  32.     DispOfsX = (((Y >> 1)*vdcScrHorz) << 4)+vdcDispMem+X;
  33.     CharSet = (vdcCharsPerSet*vdcCharBytes)+vdcCharMem; /* use alt set */
  34.     for(I = 0; TextStr[I]; I++, DispOfsX++)
  35.     {
  36.       CharSetOfs = vdcCharBytes*TextStr[I]+CharSet;
  37.       outvdc(vdcUpdAddrHi,(uchar) (CharSetOfs >> 8));
  38.       outvdc(vdcUpdAddrLo,(uchar) CharSetOfs);
  39.       for(Y = 0; Y < 8; Y++)
  40.         CharBuf[Y] = invdc(vdcCPUData);
  41.       DispOfsY = DispOfsX;
  42.       DispOfsYO = DispOfsY+vdcOddFldOfs;
  43.       for(Y = 0; Y < 8; Y += 2, DispOfsY += vdcScrHorz, DispOfsYO += vdcScrHorz)
  44.       {
  45.         outvdc(vdcUpdAddrHi,(uchar) (DispOfsY >> 8));
  46.         outvdc(vdcUpdAddrLo,(uchar) DispOfsY);
  47.         outvdc(vdcCPUData,CharBuf[Y]);
  48.  
  49.         outvdc(vdcUpdAddrHi,(uchar) (DispOfsYO >> 8));
  50.         outvdc(vdcUpdAddrLo,(uchar) DispOfsYO);
  51.         outvdc(vdcCPUData,CharBuf[Y]);
  52.  
  53.         DispOfsY += vdcScrHorz;
  54.         outvdc(vdcUpdAddrHi,(uchar) (DispOfsY >> 8));
  55.         outvdc(vdcUpdAddrLo,(uchar) DispOfsY);
  56.         outvdc(vdcCPUData,CharBuf[Y+1]);
  57.  
  58.         DispOfsYO += vdcScrHorz;
  59.         outvdc(vdcUpdAddrHi,(uchar) (DispOfsYO >> 8));
  60.         outvdc(vdcUpdAddrLo,(uchar) DispOfsYO);
  61.         outvdc(vdcCPUData,CharBuf[Y+1]);
  62.       }
  63.     }
  64.   }
  65. }
  66.