home *** CD-ROM | disk | FTP | other *** search
/ Hall of Fame Game Cube 1: DOS / aztechhalloffamegamecubedisc1- / batlemm / show-grf.c < prev    next >
Text File  |  1995-02-18  |  4KB  |  232 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <malloc.h>
  4. #include <dos.h>
  5. #include "palette.fct"
  6.  
  7. #define TRUE  1
  8. #define FALSE 0
  9. #define OK    1
  10. #define ERR   0
  11. #define PALETTE_MASK     0x3c6
  12. #define PALETTE_REGISTER 0x3c8
  13. #define PALETTE_DATA     0x3c9
  14.  
  15. char far *video_mem=(char far *)0xA0000000L;
  16. char curr_pal[768];
  17.  
  18. void setvideomode(unsigned int mode)
  19. {
  20. union REGS regs;
  21.  
  22. regs.x.ax=mode;
  23. int86(0x10,®s,®s);
  24. }
  25.  
  26. void set_color(int index, char red, char green, char blue)
  27. {
  28. outp(PALETTE_MASK,0xff);
  29. outp(PALETTE_REGISTER,index);
  30. outp(PALETTE_DATA,red);
  31. outp(PALETTE_DATA,green);
  32. outp(PALETTE_DATA,blue);
  33. }
  34.  
  35. void fade_in(char speed)
  36. {
  37. long pause,num;
  38. int x,y;
  39. for(x=0;x<255;x++)
  40.     {
  41.     for(pause=0;pause<speed*5;pause++)
  42.     {}
  43.     for(y=0;y<768;y++)
  44.     if(curr_pal[y]<pal[y])
  45.         curr_pal[y]+=1;
  46.     for(y=0;y<256;y++)
  47.     set_color(y,curr_pal[y*3],curr_pal[y*3+1],curr_pal[y*3+2]);
  48.     }
  49. }
  50.  
  51. void fade_out(char speed)
  52. {
  53. long pause;
  54. int x,y;
  55. for(x=0;x<90;x++)
  56.     {
  57.     for(pause=0;pause<32000;pause++)
  58.     {}
  59.     for(y=0;y<768;y++)
  60.     if(curr_pal[y]>0)
  61.         curr_pal[y]-=speed;
  62.     for(y=0;y<256;y++)
  63.     set_color(y,curr_pal[y*3],curr_pal[y*3+1],curr_pal[y*3+2]);
  64.     }
  65. }
  66.  
  67.  
  68. void view_picture(char *file_name,char typ_in, char typ_out)
  69. {
  70. char far *double_buffer;
  71. char inp;
  72. int how_high[320];
  73. char how_fast[320];
  74. long num,num2;
  75. FILE *pic;
  76. int x,y;
  77.  
  78. if(typ_in==1)
  79. {
  80. fade_out(1);
  81. pic=fopen(file_name,"rb");
  82. for(num=0;num<64000;num++)
  83.     video_mem[num]=getc(pic);
  84. fclose(pic);
  85. fade_in(1);
  86. }
  87.  
  88. if(typ_in==2)
  89. {
  90. double_buffer=(char far *)_fmalloc((unsigned int)64000);
  91. pic=fopen(file_name,"rb");
  92. for(num=0;num<64000;num++)
  93.     double_buffer[num]=getc(pic);
  94. fclose(pic);
  95. for(num=0;num<400000;num++)
  96.     {
  97. //    num2=rand()%64000;
  98.     x=rand()%320;
  99.     y=rand()%200;
  100.     video_mem[x+y*320]=double_buffer[x+y*320];
  101.     }
  102. _fmemcpy((char far *)&video_mem[0],(char far *)&double_buffer[0],(unsigned int)64000);
  103. _ffree(double_buffer);
  104. }
  105.  
  106. if(typ_in==3)
  107. {
  108. double_buffer=(char far *)_fmalloc((unsigned int)64000);
  109. pic=fopen(file_name,"rb");
  110. for(num=0;num<64000;num++)
  111.     double_buffer[num]=getc(pic);
  112. fclose(pic);
  113. for(num=0;num<320;num++)
  114.     {
  115. //    y=rand()%10+5;
  116. //    for(x=0;x<5;x++)
  117. //{
  118.     how_high[num]=0;
  119.     how_fast[num]=rand()%10+5;
  120. //    }
  121.     }
  122. for(num=0;num<50;num++)
  123. {
  124. for(num2=0;num2<320;num2++)
  125.     {
  126.     how_high[num2]+=how_fast[num2];
  127.     if(how_high[num2]>200)
  128.     how_high[num2]=200;
  129.     }
  130. for(num2=0;num2<320;num2++)
  131. {
  132. for(x=0;x<how_high[num2];x++)
  133.     video_mem[num2+x*320]=double_buffer[num2+(200-how_high[num2]+x)*320];
  134. }
  135. }
  136. _ffree(double_buffer);
  137. }
  138.  
  139. if(typ_in==4)
  140. {
  141. double_buffer=(char far *)_fmalloc((unsigned int)64000);
  142. pic=fopen(file_name,"rb");
  143. for(num=0;num<64000;num++)
  144.     double_buffer[num]=getc(pic);
  145. fclose(pic);
  146.  
  147.  
  148. for(y=0;y<200;y+=3)
  149.     _fmemcpy((char far *)&video_mem[64000-y*320],(char far *)&double_buffer[0],y*320);
  150. _ffree(double_buffer);
  151. }
  152.  
  153. if(typ_in==5)
  154. {
  155. double_buffer=(char far *)_fmalloc((unsigned int)64000);
  156. pic=fopen(file_name,"rb");
  157. for(num=0;num<64000;num++)
  158.     double_buffer[num]=getc(pic);
  159. fclose(pic);
  160.  
  161. for(x=0;x<320;x+=11)
  162. {
  163. for(y=0;y<100;y++)
  164. {
  165. _fmemcpy((char far *)&video_mem[y*640],(char far *)&double_buffer[y*640+319-x],x);
  166. _fmemcpy((char far *)&video_mem[y*640+639-x],(char far *)&double_buffer[y*640+320],x);
  167. }
  168. }
  169. _ffree(double_buffer);
  170. }
  171.  
  172. //printf("\n Press any key to continue.\n");
  173. inp=getch();
  174. }
  175.  
  176. void main(argc,argv)
  177. int argc;
  178. char *argv[];
  179. {
  180.    char pcxname[13];
  181.  
  182.    strncpy(pcxname,argv[1],13);
  183.    if (!check_suffix(pcxname))
  184.    {
  185.       printf("unable to open grf file: %s",argv[1]);
  186.       exit(1);
  187.    }
  188.  
  189.    setvideomode(19);
  190.  
  191.    fade_in(5);
  192.  
  193.    view_picture(pcxname,3,7);
  194.    setvideomode(3);
  195.  
  196.    exit(0);
  197. }
  198.  
  199. check_suffix(char *fname)
  200. {
  201.    char *strptr;
  202.    int index;
  203.    int error;
  204.  
  205.    error = FALSE;
  206.    strptr = strchr(fname,'.');
  207.  
  208.    /* period in string */
  209.    if (strptr > 0)
  210.    {
  211.       index = (int)(strptr - fname);
  212.       if (index > 8)
  213.       error = TRUE;
  214.    }
  215.  
  216.    /* no period in string */
  217.    else
  218.    {
  219.       index = strlen(fname);
  220.       if (index > 8)
  221.         error = TRUE;
  222.       else
  223.       {
  224.         fname[index] = '.';
  225.     strcat(fname,"grf");
  226.       }
  227.    }
  228.    if (error) return(ERR);
  229.    return(OK);
  230. }
  231. 
  232.