home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / except2x.zip / sym.c < prev    next >
Text File  |  1993-12-08  |  2KB  |  59 lines

  1. #define INCL_BASE
  2. #define INCL_DOS
  3. #include <os2.h>
  4. #include "sym.h"
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <errno.h>
  8. int main(int argc,char *argv[])
  9. {
  10.    FILE * SymFile;
  11.    MAPDEF MapDef;
  12.    SEGDEF   SegDef;
  13.    SEGDEF *pSegDef;
  14.    SYMDEF32 SymDef32;
  15.    SYMDEF16 SymDef16;
  16.    char    Buffer[256];
  17.    int     SegNum,SymNum;
  18.    unsigned short int SegOffset,SymOffset,SymPtrOffset;
  19.    if (argc==1) {
  20.       printf("No file name entered\n");
  21.    } else {
  22.       SymFile=fopen(argv[1],"rb");
  23.       if (SymFile==0) {
  24.          perror("Error opening file ");
  25.          exit(99);
  26.       } /* endif */
  27.    } /* endif */
  28.    fread(&MapDef,sizeof(MAPDEF),1,SymFile);
  29.    SegOffset= SEGDEFOFFSET(MapDef);
  30.    for (SegNum=0;SegNum<MapDef.cSegs;SegNum++) {
  31.         /* printf("Scanning segment #%d Offset %4.4hX\n",SegNum+1,SegOffset); */
  32.         if (fseek(SymFile,SegOffset,SEEK_SET)) {
  33.            perror("Seek error ");
  34.         }
  35.         fread(&SegDef,sizeof(SEGDEF),1,SymFile);
  36.         for (SymNum=0;SymNum<SegDef.cSymbols;SymNum++) {
  37.            SymPtrOffset=SYMDEFOFFSET(SegOffset,SegDef,SymNum);
  38.            fseek(SymFile,SymPtrOffset,SEEK_SET);
  39.            fread(&SymOffset,sizeof(unsigned short int),1,SymFile);
  40.            fseek(SymFile,SymOffset+SegOffset,SEEK_SET);
  41.            if (SegDef.bFlags&0x01) {
  42.               fread(&SymDef32,sizeof(SYMDEF32),1,SymFile);
  43.               Buffer[0]= SymDef32.achSymName[0];
  44.               fread(&Buffer[1],1,SymDef32.cbSymName,SymFile);
  45.               Buffer[SymDef32.cbSymName]=0x00;
  46.               printf("32 Bit Symbol <%s> Address %p\n",Buffer,SymDef32.wSymVal);
  47.            } else {
  48.               fread(&SymDef16,sizeof(SYMDEF16),1,SymFile);
  49.               Buffer[0]=SymDef16.achSymName[0];
  50.               fread(&Buffer[1],1,SymDef16.cbSymName,SymFile);
  51.               Buffer[SymDef16.cbSymName]=0x00;
  52.               printf("16 Bit Symbol <%s> Address %p\n",Buffer,SymDef16.wSymVal);
  53.            } /* endif */
  54.         }
  55.         SegOffset=NEXTSEGDEFOFFSET(SegDef);
  56.    } /* endwhile */
  57.    fclose(SymFile);
  58. }
  59.