home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol179 / trace.lbr / TRACE.CQ / TRACE.C
Text File  |  1985-02-09  |  3KB  |  149 lines

  1. #define        VERSION        "trace ver. 1.1"
  2.   /*
  3.   TRACE  for Aztec CII
  4.  
  5.     input:  FILE.ASM  from CII compiler with -t option
  6.     output: FILE.TRA  with calls to TRACE1
  7.  
  8.         GAE  09/04/83
  9.   */
  10.  
  11. #include "libc.h"
  12. #define CPMEOF 0x1a
  13. #define MAX 200        /* maximum line length in files */
  14.  
  15. char werr[] = "Write error.\n";
  16.  
  17. main(argc,argv)
  18.   int argc;
  19.   char ** argv;
  20.   {
  21.   FILE *fopen(), *newf, *oldf;
  22.   char *fgets();
  23.   char buffer[MAX], oldn[30], newn[30];
  24.  
  25.   printf(VERSION);
  26.   if (argc==1)
  27.     {
  28.     printf("\nUsage: TRACE FILE\n");
  29.     printf("    This will create FILE.TRA by inserting\n");
  30.     printf("       trace code in FILE.ASM .\n");
  31.     exit(0);
  32.     }
  33.  
  34.   strcpy(oldn,argv[1]);
  35.   striptype(oldn);
  36.   strcpy(newn,oldn);
  37.   strcpy(oldn+strlen(oldn),".ASM");
  38.   strcpy(newn+strlen(newn),".TRA");
  39.  
  40.   if((oldf = fopen(oldn,"r")) == NULL)
  41.     {
  42.     printf("\nCan't open %s",oldn);
  43.     exit(1);
  44.     }
  45.   if((newf = fopen(newn,"w")) == NULL)
  46.     {
  47.     printf("\nCan't open %s",newn);
  48.     exit(1);
  49.     }
  50.   printf("    %s --> %s\n",oldn,newn);
  51.  
  52.   while(fgets(buffer,MAX,oldf) != NULL)
  53.     {
  54.     if(*buffer == CPMEOF)
  55.       break;
  56.     /* Aztec CII 1.05g has a bug in agets EOF recognition*/
  57.     if(*buffer != ';')
  58.       {
  59.       if(fputs(buffer,newf) < 0)
  60.         {
  61.         printf(werr);
  62.         exit(1);
  63.         }
  64.       }
  65.     else
  66.       {
  67.       if(fputs("\tCALL\tTRACE1##\n",newf) < 0)
  68.         {
  69.         printf(werr);
  70.         exit(1);
  71.         }
  72.       if(fputs("\tDB\t",newf) < 0)
  73.         {
  74.         printf(werr);
  75.         exit(1);
  76.         }
  77.       fputq(newf);
  78.       nonewl(buffer);
  79.       fputse(buffer,newf);
  80.       fputq(newf);
  81.       if(fputs(",0DH,0AH,0\n",newf) < 0)
  82.         {
  83.         printf(werr);
  84.         exit(1);
  85.         }
  86.       }
  87.     }
  88.   fclose(newf);
  89.  
  90.   exit(0);
  91.   }
  92.  
  93. nonewl(s)    /* strip newline character */
  94.   register char *s;
  95.   {
  96.   while (*s)
  97.     {
  98.     if (*s == '\n')  *s = '\0';
  99.     else s++;
  100.     }
  101.   }
  102.  
  103. striptype(s)    /* remove file type (if any) */
  104.   register char *s;
  105.   {
  106.   while (*s)
  107.     {
  108.     if (*s == '.')  *s = '\0';
  109.     else s++;
  110.     }
  111.   }
  112.  
  113. fputq(fp)
  114.   FILE * fp;
  115.   {
  116.   if(aputc('\'',fp) < 0)
  117.     {
  118.     printf(werr);
  119.     exit(1);
  120.     }
  121.   }
  122.  
  123. fputse(s,p)    /* output string, special for quote (') */
  124.   register char *s;
  125.   FILE *p;
  126.   {
  127.   while( *s )
  128.     {
  129.     if(*s == '\'')
  130.       {
  131.       fputq(p);
  132.       if(fputs(",27H,",p) < 0)
  133.         {
  134.         printf(werr);
  135.         exit(1);
  136.         }
  137.       fputq(p);
  138.       s++;
  139.       }
  140.     else if(aputc(*s++,p) < 0)
  141.       {
  142.       printf(werr);
  143.       exit(1);
  144.       }
  145.     }
  146.   return NULL;
  147.   }
  148. utse(buffer,newf);
  149.