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 / SGTOOL11.ARC / CHARFLIP.C < prev    next >
C/C++ Source or Header  |  1993-07-25  |  3KB  |  117 lines

  1. /*
  2. SG C Tools 1.1
  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 and set global vars */
  35.   clrscrvdc(appClrScrCh);        /* clear screen */
  36.   clrattrvdc(vdcAltChrSet);      /* clear attributes */
  37.   setcursorvdc(0,0,vdcCurNone);  /* turn cursor off */
  38.   outvdc(vdcFgBgColor,vdcBlack); /* set new screen color */
  39.   flipcharset();                 /* flips both character sets */
  40.   while (getch() != 0x0D);       /* wait for return press */
  41.   restorevdc();                  /* restore registers saved by savevdc() */
  42.   putchar(0x1A);                 /* adm-3a clear-home cursor */
  43. }
  44.  
  45. /* draws character set in a 64 X 4 grid given x and y offsets */
  46.  
  47. void drawcharset(uchar X1, uchar Y1, uchar Attr)
  48. {
  49.   uchar X, Y;
  50.  
  51.   for (Y = 0; Y < 4; Y++)
  52.   {
  53.     fillattrvdc(X1,Y+Y1,64,Attr);
  54.     for (X = 0; X < 64; X++)
  55.       filldspvdc(X+X1,Y+Y1,1,Y*64+X);
  56.   }
  57. }
  58.  
  59. /* prints string and sets y position for next string */
  60.  
  61. void println(char * TextStr)
  62. {
  63.   printstrvdc(0,appTextY++,vdcAltChrSet+vdcLightGreen,TextStr);
  64. }
  65.  
  66. /* flip both 8x8 char sets */
  67.  
  68. void flipcharset(void)
  69. {
  70.   uchar CurByte, CharSave;
  71.   ushort CurChar, CharOfs;
  72.   uchar *BufPtr;
  73.  
  74.   drawcharset(7,0,vdcDarkCyan);                  /* draw char sets */
  75.   drawcharset(7,5,vdcAltChrSet+vdcLightBlue);
  76.  
  77.   println("coping vdc character set to buffer...");
  78.   BufPtr = memtobufvdc(vdcCharMem,vdcCharMemSize); /* copy char sets to buf */
  79.  
  80.   if (BufPtr != NULL)
  81.   {
  82.     println("flipping patterns in buffer...");
  83.     for(CurChar = 0; CurChar < 512; CurChar++) /* flip char sets in buf */
  84.     {
  85.       CharOfs = CurChar*vdcCharBytes;
  86.       for(CurByte = 0; CurByte < 4; CurByte++)
  87.       {
  88.         CharSave = BufPtr[CharOfs+CurByte];
  89.         BufPtr[CharOfs+CurByte] = BufPtr[CharOfs+(7-CurByte)];
  90.         BufPtr[CharOfs+(7-CurByte)] = CharSave;
  91.       }
  92.     }
  93.     println("coping buffer to vdc character set...");
  94.     buftomemvdc(BufPtr,vdcCharMem,vdcCharMemSize);
  95.  
  96.     println("Press [RETURN].");
  97.     while (getch() != 0x0D);
  98.  
  99.     println("flipping patterns in buffer..."); /* flip em back */
  100.     for(CurChar = 0; CurChar < 512; CurChar++)
  101.     {
  102.       CharOfs = CurChar*vdcCharBytes;
  103.       for(CurByte = 0; CurByte < 4; CurByte++)
  104.       {
  105.         CharSave = BufPtr[CharOfs+CurByte];
  106.         BufPtr[CharOfs+CurByte] = BufPtr[CharOfs+(7-CurByte)];
  107.         BufPtr[CharOfs+(7-CurByte)] = CharSave;
  108.       }
  109.     }
  110.     println("coping buffer to vdc character set...");
  111.     buftomemvdc(BufPtr,vdcCharMem,vdcCharMemSize);
  112.  
  113.     println("Done.  Press [RETURN].");
  114.     free(BufPtr);                             /* dealloc buf */
  115.   }
  116. }
  117.