?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. // Подготовка спрайтов для НЛО-2
  2. #include <stdio.h>
  3. #include <alloc.h>
  4. #include <io.h>
  5. #include <fcntl.h>
  6. #include <sys\stat.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9. #include <conio.h>
  10.  
  11.  
  12. int main(int n,char *arg[])
  13. {
  14. #define TIFF 194
  15.  char *b,/*huge*/ *m,*name;
  16.  unsigned i,j,k;
  17.  int h;
  18.  long len;
  19.  int h2;
  20.  unsigned ws,hs,xs,ys;
  21.  char *spr;
  22.  char *sprt;
  23.  printf("\n\t(c)1995 Mednonogov bros.\n");
  24.  printf("\tПодготовка спрайтов для НЛО-2\n");
  25.  printf("\tиз файла .tif (256x192)\n");
  26.  printf("\tс сохранением в формате .dat\n\n");
  27.  if (n==1)
  28.         {
  29.          b=(char*)malloc(60);
  30.  inp:    printf("Входной экранный файл : ");
  31.          gets(b);
  32.          if (strlen(b)==0) goto inp;
  33.         }
  34.  else b=arg[1];
  35.  for(i=strlen (b);i>0;)
  36.   {
  37.    i--;
  38.    if (b[i]=='\\') break;
  39.    if (b[i]=='.')
  40.      {
  41.       b[i]=0;
  42.       if(b[i+1]!='t' || b[i+2]!='i' || b[i+3]!='f' || b[i+4]!=0)
  43.         {printf("Неверное расширение входного файла!\n");return -1;}
  44.       break;
  45.      }
  46.   }
  47.  name=(char*)(malloc(70));
  48.  strcpy(name,b);
  49.  strcat(name,".tif");
  50.  h=open(name,O_BINARY | O_RDONLY);
  51.  if (h==-1){perror("Ошибка открытия исходного файла (tif)\7\n");return -1;}
  52.  len=filelength(h);
  53.  if(len==0){printf("Файл пуст!\n"); return -1;}
  54.  if((m=(char*)malloc(len))==0)
  55.   {
  56.    printf("Недостаточно памяти (необходимо %u Kb)!\n",len);
  57.    return -1;
  58.   }
  59.  read(h,m,len);
  60.  close(h);
  61.  strcpy(name,b);
  62.  strcat(name,".dat");
  63.  h2=open(name,O_BINARY | O_CREAT | O_RDWR | O_TRUNC,S_IWRITE);
  64.  if (h2==-1){perror("Ошибка открытия исходного файла (dat)\7\n");return -1;}
  65.  m=m+TIFF;  //TIFF prefix
  66. //---------------
  67.  printf("Укажите:\n ширину спрайта: ");
  68.  scanf("%u",&ws);
  69.  printf(" высоту спрайта: ");
  70.  scanf("%u",&hs);
  71.  printf(" начальную строку: ");
  72.  scanf("%u",&ys);
  73.  printf(" начальную колонку: ");
  74.  scanf("%u",&xs);
  75.  spr=(char *)malloc(ws*hs*8);
  76.  sprt=spr;
  77.  for (i=0;i<hs;i++)
  78.   for (k=0;k<8;k++)
  79.   for (j=0;j<ws;j++)
  80.    {
  81.     *sprt=~m[(xs+j)+k*32+(ys+i)*256];
  82.     sprt++;
  83. //    printf("%5u%5u%5u\r",i,j,k);
  84.    }
  85.  write(h2,spr,ws*hs*8);
  86.  printf("\nCохранён спрайт длиной %u байт.\n",ws*hs*8);
  87.  return 0;
  88. }