home *** CD-ROM | disk | FTP | other *** search
/ Aminet 18 / aminetcdnumber181997.iso / Aminet / util / cli / htype.lha / HType.c next >
Encoding:
C/C++ Source or Header  |  1997-01-31  |  2.9 KB  |  130 lines

  1. #include <exec/types.h>
  2. #include <libraries/dos.h>
  3. #include <stdio.h>
  4.  
  5. char *show_ascii();
  6.  
  7. char *types[]={
  8. "Unknomn","IFF","GIF","PCX","Sound Arranger instrument file",
  9. "Icon file","PowerPacked file","AmigaGuide","Executable",
  10. "C Object file", "AmiNet readme file", "Lha archive",
  11. "DMS archive", "ZIP archive", "DBTools database",
  12. "AmigaBase database", "Quickfile database",
  13. };
  14.  
  15. BPTR fh=NULL;
  16.  
  17. void __regargs _CXBRK(void)
  18. {
  19.     if(fh) Close(fh);
  20.     printf("- Aborted -------------------------------------------------------------------\n");
  21. }
  22.  
  23. int IdH(char *bf, char i1, char i2, char i3, char i4)
  24. {
  25.     if(i1==bf[0] && i2==bf[1] && i3==bf[2] && i4==bf[3])
  26.         return TRUE;
  27.     else
  28.         return FALSE;
  29. }
  30.  
  31. void main(argc,argv)
  32. char *argv[];
  33. {
  34.  unsigned char bf[17],buffer[256],filebfr[200];
  35.  int i,rd=16,size,offs=0;
  36.  int ftp=0;
  37.  
  38.  bf[16]=0;
  39.  
  40.  if(argc==0) {
  41.   printf("HexType V1.2\n");
  42.   printf("Enter filename > ");
  43.   gets(filebfr);
  44.   argc=2;
  45.   argv[1]=filebfr;
  46.  }
  47.  
  48.  if(argc<2) {
  49.   printf("HexType V1.2 ©1995-1997 Henrik I\n");
  50.   printf("USAGE: %s FILE/A\n",argv[0]);
  51.  }
  52.  
  53.  fh=Open(argv[1],MODE_OLDFILE);
  54.  if(fh) {
  55.     Seek(fh,0,OFFSET_END);
  56.     size=Seek(fh,0,OFFSET_BEGINNING);
  57.  
  58.     Read(fh,buffer,256);
  59.  
  60.     if(Id(buffer,"FORM")) ftp=1;
  61.     if(Id(buffer,"GIF"))  ftp=2;
  62.     if(IdH(buffer,10,5,1,8))  ftp=3;
  63.     if(Id(buffer,"SASI"))  ftp=4;
  64.     if(IdH(buffer,0xe3,0x10,0x00,0x01))  ftp=5;
  65.     if(Id(buffer,"PP"))  ftp=6;
  66.     if(Id(buffer,"@da"))  ftp=7;
  67.     if(Id(buffer,"@DA"))  ftp=7;
  68.     if(Id(buffer,"@Da"))  ftp=7;
  69.     if(IdH(buffer,0x0,0x0,0x3,243))  ftp=8;
  70.     if(IdH(buffer,0x0,0x0,0x3,231))  ftp=9;
  71.     if(Id(buffer,"Short:"))  ftp=10;
  72.     if(Id(buffer,"**-lh"))  ftp=11;
  73.     if(Id(buffer,"DMS"))  ftp=12;
  74.     if(Id(buffer,"PK"))  ftp=13;
  75.     if(Id(buffer,"DBTDAT"))  ftp=13;
  76.     if(Id(buffer,"ABST"))  ftp=14;
  77.     if(Id(buffer,"QuickFile"))  ftp=15;
  78.  
  79.     Seek(fh,0,OFFSET_BEGINNING);
  80.  
  81.     printf("-----------------------------------------------------------------------------\n");
  82.     printf(" File: %s\n",argv[1]);
  83.     printf(" Size: %ld bytes\n",size);
  84.     printf(" File type: %s\n",types[ftp]);
  85.     printf("-----------------------------------------------------------------------------\n");
  86.     printf("OFFSET:  HEX:                                                ASCII:\n");
  87.     printf("-------- -----------  -----------  -----------  -----------  ----------------\n");
  88.     while(rd==16) {
  89.         printf("%08lx ",offs);
  90.         offs+=0x10;
  91.         rd=Read(fh,bf,sizeof(bf)-1);
  92.         for(i=0;i<16;i++) {
  93.             if(i>rd) bf[i]=0;
  94.             printf("%02x ",bf[i]);
  95.             if(i==3 || i==7 || i==11 || i==15) printf(" ");
  96.         }
  97.         printf("%s\n",show_ascii(bf));
  98.     }
  99.     printf("-----------------------------------------------------------------------------\n");
  100.     Close(fh);
  101.  } else {
  102.     printf("Error! File %s not found!\n",argv[1]);
  103.  }
  104. }
  105.  
  106. char *show_ascii(bf)
  107. char *bf;
  108. {
  109.  int i;
  110.  
  111.  for(i=0;i<16;i++) {
  112.   if(bf[i]<' ' || bf[i]>'~') bf[i]='.';
  113.  }
  114.  
  115.  return bf;
  116. }
  117.  
  118. int Id(bf,str)
  119. char *bf,*str;
  120. {
  121.  int i;
  122.  
  123.  for(i=0;str[i]!=0;i++) {
  124.   if(str[i]!=bf[i]) {
  125.     if(str[i]!='*') return FALSE;
  126.   }
  127.  }
  128.  return TRUE;
  129. }
  130.