home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 8 Other / 08-Other.zip / GRAFDEMO.ZIP / GRAF.C < prev    next >
Text File  |  1989-05-23  |  3KB  |  140 lines

  1. #include <dos.h>
  2.  
  3. #define INCL_BASE
  4. #include <os2.h>
  5.  
  6. #define NULL (void *)0
  7.  
  8. /*****************/
  9.  
  10. int EGA_base_adr;
  11. extern setpxl(int,int,int);
  12.  
  13. char *EGA_font_descr;
  14. extern write_text(int,int,char *,int);
  15.  
  16. char  *save_redraw_thread_stack;
  17. unsigned    stack_seg;
  18. #define     stack_size 4096
  19.  
  20. int    save_redraw_id;
  21. extern save_redraw_thread();
  22.  
  23. char  *mode_thread_stack;
  24. int    mode_id;
  25. extern mode_thread();
  26. /****************/
  27. graf()
  28.  
  29. {
  30.   VIOPHYSBUF   phys_buf;
  31.            
  32.   VIOMODEINFO  mode_info;
  33.   
  34.   VIOFONTINFO  font_info;
  35.   
  36.   /* setting up SaveRedrawWait-Thread */
  37.   
  38.   DosAllocSeg(stack_size,&stack_seg,0);
  39.   FP_SEG(save_redraw_thread_stack) = stack_seg;
  40.   FP_OFF(save_redraw_thread_stack) = stack_size - 2;
  41.   
  42.   DosCreateThread(save_redraw_thread,&save_redraw_id,save_redraw_thread_stack);
  43.            
  44.   /* setting up ModeWait-Thread */
  45.   
  46.   DosAllocSeg(stack_size,&stack_seg,0);
  47.   FP_SEG(mode_thread_stack) = stack_seg;
  48.   FP_OFF(mode_thread_stack) = stack_size - 2;
  49.   
  50.   DosCreateThread(mode_thread,&mode_id,mode_thread_stack);
  51.            
  52.   /* setting VGA-640*480 */
  53.  
  54.   mode_info.cb     = sizeof(VIOMODEINFO);
  55.   VioGetMode(&mode_info,0);
  56.   
  57.   mode_info.fbType = VGMT_GRAPHICS | VGMT_OTHER;
  58.   mode_info.color  = 4;
  59.   mode_info.col    = 80;
  60.   mode_info.row    = 30;
  61.   mode_info.hres   = 640;
  62.   mode_info.vres   = 480;
  63.            
  64.   VioSetMode(&mode_info,0);
  65.   
  66.   FP_SEG(phys_buf.pBuf) = 0x000a;
  67.   FP_OFF(phys_buf.pBuf) = 0;
  68.   phys_buf.cb           = 38400;
  69.   
  70.   VioGetPhysBuf(&phys_buf,0);
  71.   EGA_base_adr = phys_buf.asel[0];
  72.   
  73.   {
  74.     /* zeichne 480 Pixel lange Diagonale */
  75.     /* vorher Loeschen des Schirms       */
  76.     
  77.     unsigned i;
  78.     int   color;
  79.     
  80.     /* Bildschirm Loeschen */
  81.     
  82.     {
  83.       char *buffer;
  84.   
  85.       FP_SEG(buffer) = phys_buf.asel[0];
  86.     
  87.       for (i = 0; i < 38400; i++)
  88.       {
  89.         FP_OFF(buffer) = i;
  90.         *buffer = 0;
  91.       }
  92.     }
  93.     
  94.     /* Gerade Zeichnen */
  95.     
  96.     for (i = 0; i <= 479; i++)
  97.     {
  98.       color = i/30;
  99.       setpxl(i,479 - i,color);
  100.     }
  101.   }
  102.  
  103.   font_info.cb     = sizeof(VIOFONTINFO);
  104.   font_info.type   = VGFI_GETROMFONT;
  105.   font_info.cxCell = 8;
  106.   font_info.cyCell = 16;
  107.   font_info.pbData = NULL;
  108.   font_info.cbData = 0;
  109.   
  110.   VioGetFont(&font_info,0);
  111.   EGA_font_descr = font_info.pbData;
  112.     
  113.   /* Textausgabe */
  114.   {
  115.     write_text(0,0,"Text links oben",3);
  116.     write_text(20,15,"Text in der Mitte",5);
  117.     write_text(60,29,"Text rechts unten",12);
  118.   }
  119.     
  120.   
  121.   scanf("ende");
  122.   
  123.   mode_info.cb     = sizeof(VIOMODEINFO);
  124.   VioGetMode(&mode_info,0);
  125.   
  126.   mode_info.fbType = VGMT_OTHER;
  127.   mode_info.color  = 4;
  128.   mode_info.col    = 80;
  129.   mode_info.row    = 25;
  130.   mode_info.hres   = 720;
  131.   mode_info.vres   = 400;
  132.            
  133.   VioSetMode(&mode_info,0);
  134.            
  135.   printf("handle was %d\n",phys_buf.asel[0]);
  136.                                    
  137.   printf("fertig!\n");
  138.   
  139. }
  140.