home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ENTERPRS / CPM / UTILS / S / SGTOOL12.ARC / EXAMPLES.ARC / CHARFLIP.C next >
C/C++ Source or Header  |  1993-08-09  |  3KB  |  118 lines

  1. /*
  2. SG C Tools 1.2
  3.  
  4. (C) 1993 Steve Goldsmith
  5. All Rights Reserved
  6.  
  7. Example of xfering VDC memory to and from a dynamic buffer.
  8.  
  9. Compiled with HI-TECH C 3.09 (CP/M-80).
  10.  
  11. To compile with HI-TECH C and SG C Tools source on same disk use:
  12. C FLIPCHAR.C -LC128
  13. */
  14.  
  15. #include <stdlib.h>
  16. #include <hitech.h>
  17. #include <conio.h>
  18. #include <vdc.h>
  19.  
  20. #define appClrScrCh 32
  21.  
  22. void drawcharset(uchar X1, uchar Y1, uchar Attr);
  23. void println(char * TextStr);
  24. void flipcharset(void);
  25.  
  26. extern ushort vdcCharMem;
  27. extern ushort vdcCharMemSize;
  28. extern uchar  vdcCharBytes;
  29.  
  30. uchar appTextY = 10;
  31.  
  32. main()
  33. {
  34.   savevdc();                     /* save vdc regs */
  35.   mapvdc();
  36.   clrscrvdc(appClrScrCh);        /* clear screen */
  37.   clrattrvdc(vdcAltChrSet);      /* clear attributes */
  38.   setcursorvdc(0,0,vdcCurNone);  /* turn cursor off */
  39.   outvdc(vdcFgBgColor,vdcBlack); /* set new screen color */
  40.   flipcharset();                 /* flips both character sets */
  41.   while (getch() != 0x0D);       /* wait for return press */
  42.   restorevdc();                  /* restore registers saved by savevdc() */
  43.   putchar(0x1A);                 /* adm-3a clear-home cursor */
  44. }
  45.  
  46. /* draws character set in a 64 X 4 grid given x and y offsets */
  47.  
  48. void drawcharset(uchar X1, uchar Y1, uchar Attr)
  49. {
  50.   uchar X, Y;
  51.  
  52.   for (Y = 0; Y < 4; Y++)
  53.   {
  54.     fillattrvdc(X1,Y+Y1,64,Attr);
  55.     for (X = 0; X < 64; X++)
  56.       filldspvdc(X+X1,Y+Y1,1,Y*64+X);
  57.   }
  58. }
  59.  
  60. /* prints string and sets y position for next string */
  61.  
  62. void println(char * TextStr)
  63. {
  64.   printstrvdc(0,appTextY++,vdcAltChrSet+vdcLightGreen,TextStr);
  65. }
  66.  
  67. /* flip both 8x8 char sets */
  68.  
  69. void flipcharset(void)
  70. {
  71.   uchar CurByte, CharSave;
  72.   ushort CurChar, CharOfs;
  73.   uchar *BufPtr;
  74.  
  75.   drawcharset(7,0,vdcDarkCyan);                  /* draw char sets */
  76.   drawcharset(7,5,vdcAltChrSet+vdcLightBlue);
  77.  
  78.   println("coping vdc character set to buffer...");
  79.   BufPtr = memtobufvdc(vdcCharMem,vdcCharMemSize); /* copy char sets to buf */
  80.  
  81.   if (BufPtr != NULL)
  82.   {
  83.     println("flipping patterns in buffer...");
  84.     for(CurChar = 0; CurChar < 512; CurChar++) /* flip char sets in buf */
  85.     {
  86.       CharOfs = CurChar*vdcCharBytes;
  87.       for(CurByte = 0; CurByte < 4; CurByte++)
  88.       {
  89.         CharSave = BufPtr[CharOfs+CurByte];
  90.         BufPtr[CharOfs+CurByte] = BufPtr[CharOfs+(7-CurByte)];
  91.         BufPtr[CharOfs+(7-CurByte)] = CharSave;
  92.       }
  93.     }
  94.     println("coping buffer to vdc character set...");
  95.     buftomemvdc(BufPtr,vdcCharMem,vdcCharMemSize);
  96.  
  97.     println("Press [RETURN].");
  98.     while (getch() != 0x0D);
  99.  
  100.     println("flipping patterns in buffer..."); /* flip em back */
  101.     for(CurChar = 0; CurChar < 512; CurChar++)
  102.     {
  103.       CharOfs = CurChar*vdcCharBytes;
  104.       for(CurByte = 0; CurByte < 4; CurByte++)
  105.       {
  106.         CharSave = BufPtr[CharOfs+CurByte];
  107.         BufPtr[CharOfs+CurByte] = BufPtr[CharOfs+(7-CurByte)];
  108.         BufPtr[CharOfs+(7-CurByte)] = CharSave;
  109.       }
  110.     }
  111.     println("coping buffer to vdc character set...");
  112.     buftomemvdc(BufPtr,vdcCharMem,vdcCharMemSize);
  113.  
  114.     println("Done.  Press [RETURN].");
  115.     free(BufPtr);                             /* dealloc buf */
  116.   }
  117. }
  118.