home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / progc / itcapr91.arj / MEMTST.C < prev    next >
Text File  |  1991-09-07  |  2KB  |  69 lines

  1. /****************************************************************
  2. * MEMTST.C -- Demonstrate memset() and memcpy() by clearing        *
  3. * video RAM, and copy a string to the screen. (This program        *
  4. * assumes you're in 80x25 text mode.)                            *
  5. *                                                                *
  6. * To compile: "tcc -ml MEMTST"                                    *
  7. ****************************************************************/
  8.  
  9. #include <stdio.h>            /* puts()                            */
  10. #include <stdlib.h>            /* exit(), EXIT_FAILURE                */
  11. #include <string.h>            /* memcpy(), memset(), strlen()        */
  12. #include <dos.h>            /* geninterrupt()                    */
  13. #include <assert.h>            /* assert()                            */
  14.  
  15.  
  16. #define MAXSIZE   (80 * 25)
  17. #define GREEN     32        /* Black letters on Green attribute    */
  18. #define RED          64        /* Black letters on Red attribute    */
  19. #define MAXROWS   10
  20. #define ROW       80
  21.  
  22. void main(void)
  23.    {
  24.    char buff[] = "Inside Turbo C";
  25.    unsigned message[26];
  26.    unsigned dot, i, len, mode, scale;
  27.    unsigned far *scrptr, far *base;
  28.  
  29.    /* Ensure that we use the correct memory model (the memset()    */
  30.    /* function expects NEAR pointers in TINY, SMALL, and MEDIUM    */
  31.    /* memory models).                                            */
  32.    assert(sizeof(void *) == sizeof(void far *));
  33.  
  34.    /* Get the current video mode */
  35.    _AX = 0x0f00;
  36.    geninterrupt(0x10);
  37.    mode = _AX & 0xff;
  38.  
  39.    /* Point to the beginning of the video buffer */
  40.    if (mode==7)
  41.       base = scrptr = (unsigned far *)MK_FP(0xb000,0);
  42.    else if (mode==2 || mode==3)
  43.       base = scrptr = (unsigned far *)MK_FP(0xb800,0);
  44.    else
  45.       {
  46.       puts("Invalid display mode");
  47.       exit(EXIT_FAILURE);
  48.       }
  49.  
  50.    /* Clear the screen */
  51.    scale = MAXSIZE * 2;                /* (each cell is 2 bytes)    */
  52.    memset(base, GREEN, scale);        /* black on green AND space    */
  53.  
  54.    /* Initialize message background */
  55.    dot = RED << 8;                    /* Red background for msg    */
  56.    len = strlen(buff);
  57.    for (i = 0; i < len; i++)
  58.       message[i] = dot + buff[i];
  59.  
  60.    /* Write message on screen */
  61.    len *= sizeof(unsigned);            /* (each cell is 2 bytes)    */
  62.    scrptr += 3 * ROW + 20;            /* Line 3, column 20        */
  63.    for (i = 0; i < 10; i++)            /* Write msg on lines 3..13    */
  64.       {
  65.       memcpy(scrptr, message, len);        /* Put msg on CRT    */
  66.       scrptr += ROW;                    /* Point to next row*/
  67.       }
  68.    }
  69.