home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #16 / NN_1992_16.iso / spool / comp / lang / c / 11662 < prev    next >
Encoding:
Text File  |  1992-07-27  |  3.5 KB  |  109 lines

  1. Path: sparky!uunet!cs.utexas.edu!swrinde!mips!mips!octela!shaun
  2. From: shaun@octel.com (Ralph Neutrino)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: Curious bug...
  5. Message-ID: <1992Jul28.043405.21402@octel.com>
  6. Date: 28 Jul 92 04:34:05 GMT
  7. References: <1992Jul22.050021.3974@uwm.edu>
  8. Organization: Octel Communications Inc., Milpitas Ca.
  9. Lines: 98
  10.  
  11. In article <1992Jul22.050021.3974@uwm.edu> pegasus@csd4.csd.uwm.edu (David R Hucke) writes:
  12. >Hello everybody!
  13. >What happens is this:  When I run the program in the QC Environment it
  14. >works fine.  The characters are correct, and the colors are not correct.
  15. >
  16. >When I run the program from DOS (outside of the QC Environment) the characters
  17. >are correct but the colors are not correct.
  18. >
  19. >Can somebody tell me what is wrong here?
  20.  
  21. Not sure, but you might want to try opening the file
  22. >   if(!(file = fopen("c:\\test.scn","r"))){
  23.  
  24. using binary mode ("rb") instead of text mode.
  25.  
  26. >    for(j=0;j<8;j++)
  27. >    for(i=0;i<20;i++){
  28. >           fscanf(file,"%c%c",&x,&y);    /* reading in attribute and
  29. >                         character bytes */
  30. >        menu[j][i] = (short)((y<<8)+x);  /* putting together screen
  31. >                        character ---> attribute
  32. >                        and character.  Shifting
  33. >                        one of the bytes. */
  34. >    }
  35.  
  36. This loop is really inefficient.  I've used the following definitions and
  37. accompanying functions with good success in the past:
  38.  
  39. --- 8< snip >8 ---
  40.  
  41. /* code by @Man & Spike */
  42. /* public domain 1989   */
  43.  
  44. struct cell                     /* single character cell on screen      */
  45. {
  46.      char character;
  47.      char attribute;
  48. };
  49.  
  50. typedef struct cell screen [25][80];    /* whole screen in one array    */
  51.  
  52. cputchxy(char q, int x, int y)
  53. {
  54.    screen far *scr = (screen far *)0xb8000000l;      /* CGA - EGA - VGA */
  55. /* screen far *scr = (screen far *)0xb0000000l;         MDA - hercules  */
  56.  
  57.    (*scr)[y][x].character = q;                       /* write to screen */
  58. }
  59.  
  60. print(char *str, int x, int y)
  61. {
  62.    screen far *scr = (screen far *)0xb8000000l;      /* CGA - EGA - VGA */
  63. /* screen far *scr = (screen far *)0xb0000000l;         MDA - hercules  */
  64.  
  65.     while(*str)
  66.         (*scr)[y][x++].character = *str++;            /* write to screen */
  67. }
  68. --- 8< snip >8 ---
  69.  
  70. Using the above definition for screen, I'm almost positive you could use
  71. fread() to read the screen into a near duplicate of the screen array
  72. (since fread() can't read into far pointers) and then use memcpy() to move
  73. it to the video buffer quickly.  Be sure you're using the large model if you
  74. use memcpy(); use movedata() in the small and medium models.  Be sure to
  75. #include <mem.h>.  This should work and be faster than your old code, unless
  76. TheDraw saves the characater and attribute in the wrong order.  If you're 
  77. still curious about your old code, a wild guess is to try turning on word
  78. alignment.  
  79.  
  80. You will have to change this for larger screen modes.  The following items
  81. may help you:
  82.  
  83. unsigned char far *p_cols = (unsigned char far *)0x0000044A;
  84.                           /* ptr to bios data area:columns */
  85.  
  86. unsigned char far *p_lines = (unsigned char far *)0x00000484;
  87.                           /* ptr to bios data area:lines   */
  88.  
  89. These seem to work even for Big Monster Video Modes (BMVMs) like 132x60.
  90.  
  91. Best of luck!
  92.  
  93. >===
  94. >pegasus@csd4.csd.uwm.edu
  95. >
  96. >-- 
  97. >pegasus@csd4.csd.uwm.edu                David R. Hucke
  98. >                                        UW-Milwaukee Film Major
  99. >--
  100.  
  101. Ooh!  Henious duplicate signature!  Bummer.
  102.  
  103. @Man
  104. -- 
  105. shaun@octel.com  ||  G is for Jesus
  106.  
  107. "We will buy Iron Camels from GoMotion
  108.    Unlimited in Santa Clara California."
  109.