home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / RiscOS / APP / DEVS / LIB / DOSLIB.ZIP / DosLib / c / ConioDemo
Text File  |  1997-03-12  |  4KB  |  186 lines

  1. /*
  2.    Name     : ConioDemo.c
  3.    Purpose  : Demonstration program for DOSLib
  4.    Author   : LogiX
  5.    Copyright: ⌐ Topix, 11 March 1997
  6. */
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include "conio.h"
  11.  
  12. /******************************************************************************
  13.   in: bx, by    = box coordinates
  14.       w, h      = width, height
  15.       linestyle = 1 (single) or 2 (double)
  16.       bgcolor   = background color
  17.       borderclr = border color
  18.  out: -
  19. desc: draws a box on screen with the given size and attributes
  20. *******************************************************************************/
  21.  
  22. void draw_box(int bx, int by, int w, int h,
  23.               int linestyle, int bgcolor, int borderclr)
  24. {
  25.    int y;
  26.    char topl, topr, botl, botr, hor, ver;
  27.    char *empty;
  28.    void *scr;
  29.  
  30.    empty = malloc((w + h + 10) * 4);
  31.  
  32.    if (abs(linestyle == 2))
  33.    {
  34.       topl = '╔';
  35.       topr = '╗';
  36.       botl = '╚';
  37.       botr = '╝';
  38.       ver  = '║';
  39.       hor  = '═';
  40.    }
  41.    else
  42.    {
  43.       topl = '┌';
  44.       topr = '┐';
  45.       botl = '└';
  46.       botr = '┘';
  47.       ver  = '│';
  48.       hor  = '─';
  49.    }
  50.  
  51.    // top
  52.  
  53.    gotoxy(bx, by);
  54.    textattr(borderclr);
  55.    cprintf("%c", topl);
  56.    memset(empty, hor, w + 1);
  57.    empty[w + 1] = '\0';
  58.    cprintf(empty);
  59.    cprintf("%c", topr);
  60.  
  61.    // centre
  62.  
  63.    for (y = by + 1; y < by + h; y++)
  64.    {
  65.       gotoxy(bx, y);
  66.       textattr(borderclr);
  67.       cprintf("%c", ver);
  68.       textattr(bgcolor);
  69.       memset(empty, ' ', w + 1);
  70.       empty[w + 1] = '\0';
  71.       cprintf(empty);
  72.       textattr(borderclr);
  73.       cprintf("%c", ver);
  74.    }
  75.  
  76.    // bottom
  77.  
  78.    gotoxy(bx, by + h);
  79.    textattr(borderclr);
  80.    cprintf("%c", botl);
  81.    memset(empty, hor, w + 1);
  82.    empty[w + 1] = '\0';
  83.    cprintf(empty);
  84.    cprintf("%c", botr);
  85.  
  86.    if (linestyle > 0)
  87.    {
  88.       // vertical shadow
  89.  
  90.       gettext(bx + w + 3, by + 1, bx + w + 3, by + h + 1, empty);
  91.       for (y = 0; y < h; y++)
  92.          empty[y * 2 + 1] = DARKGRAY;
  93.       puttext(bx + w + 3, by + 1, bx + w + 3, by + h + 1, empty);
  94.  
  95.       // horizontal shadow
  96.  
  97.       gettext(bx + 1, by + h + 1, bx + w + 4, by + h + 2, empty);
  98.       for (y = 0; y < w + 3; y++)
  99.          empty[y * 2 + 1] = DARKGRAY;
  100.       puttext(bx + 1, by + h + 1, bx + w + 4, by + h + 2, empty);
  101.    }
  102.  
  103.    free(empty);
  104. }
  105.  
  106.  
  107. /******************************************************************************
  108.   in: -
  109.  out: EXIT_SUCCESS
  110. desc: demonstrates some of the conio.h functions
  111. *******************************************************************************/
  112.  
  113. int main(void)
  114. {
  115.    int   c,
  116.          x = 12,
  117.          y = 5,
  118.          w = 33,
  119.          h = 10;
  120.    void *screen_mem;
  121.    char *colour[] = {"black",    "blue",         "green",      "cyan",
  122.                      "red",      "magenta",      "brown",      "lightgray",
  123.                      "darkgray", "lightblue",    "lightgreen", "lightcyan",
  124.                      "lightred", "lightmagenta", "yellow",     "white"};
  125.  
  126.    dos_init();
  127.    textmode(C80);
  128.    clrscr();
  129.  
  130.    printf("All possible colours in a 16 colour mode\n");
  131.    printf("Note: in DOS only the first 8 colours can be a background colour");
  132.  
  133.    for (c = 0; c < 16; c++)
  134.    {
  135.       textattr(c);
  136.       gotoxy(1, c + 4);
  137.       cprintf("This is colour %d (%s)\n", c, colour[c]);
  138.       textattr(WHITE + (c % 8) * 16);
  139.       gotoxy(36, c + 4);
  140.       cprintf("This is background %d (%s)\n", c, colour[c]);
  141.    }
  142.  
  143.    printf("\n\n");
  144.    textattr(WHITE);
  145.  
  146.    // read a keycode
  147.  
  148.    printf("Press a key: ");
  149.    printf("ASCII code %d\n", getch());
  150.  
  151.    // switch off the cursor
  152.  
  153.    _setcursortype(_NOCURSOR);
  154.  
  155.    // save the screen behind the window
  156.  
  157.    screen_mem = malloc(w * h * 4);
  158.    gettext(x, y, x + w, y + h, screen_mem);
  159.  
  160.    // draw the window
  161.  
  162.    draw_box(x, y, w - 3, h - 2, 2, BLUE + BLUE * 16, WHITE + BLUE * 16);
  163.    textattr(WHITE + BLUE * 16);
  164.    gotoxy(x + 2, y + 2);
  165.    cprintf("A simple window with shadow");
  166.    gotoxy(x + 2, y + 4);
  167.    cprintf("Press any key to continue...");
  168.    gotoxy(x + 2, y + 6);
  169.    cprintf("and to restore the background");
  170.  
  171.    // wait for a key, restore the background and release the screen memory
  172.  
  173.    getch();
  174.    puttext(x, y, x + w, y + h, screen_mem);
  175.    free(screen_mem);
  176.  
  177.    textattr(WHITE);
  178.    gotoxy(1, 24);
  179.  
  180.    // switch on the cursor
  181.  
  182.    _setcursortype(_NORMALCURSOR);
  183.  
  184.    return EXIT_SUCCESS;
  185. }
  186.