home *** CD-ROM | disk | FTP | other *** search
/ Micro R&D 1 / MicroRD-CD-ROM-Vol1-1994.iso / os20 / cli / cdtools1_0.lha / replace.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-10-20  |  1.5 KB  |  94 lines

  1. #include <exec/types.h>
  2. #include <exec/memory.h>
  3. #include <dos/dosextens.h>
  4.  
  5. #include <proto/exec_protos.h>
  6. #include <proto/dos_protos.h>
  7.  
  8. #include <stdlib.h>
  9.  
  10. #ifndef __COMMODORE_DATE__
  11. #define __COMMODORE_DATE__ __DATE__
  12. #endif
  13.  
  14. #define BASENAME "Replace"
  15.  
  16. STATIC char VER[] = "$VER: " BASENAME " 1.0 (" __COMMODORE_DATE__ ")";
  17.  
  18. STATIC ULONG Strlen(STRPTR s)
  19. {
  20. STRPTR b = s;
  21.  
  22.    while (*s) ++s;
  23.  
  24.    return (s-b);
  25. }
  26.  
  27. STATIC BOOL Replace(BPTR in,BPTR out,STRPTR find,STRPTR replace)
  28. {
  29. int ret = FALSE;
  30.  
  31.    if (in && out)
  32.       {
  33.       STRPTR buffer = AllocVec(Strlen(find)+1,MEMF_ANY);
  34.  
  35.       if (buffer)
  36.      {
  37.      STRPTR f = find;
  38.      STRPTR t = buffer;
  39.      LONG c;
  40.  
  41.      while ((c = FGetC(in))!=-1)
  42.         {
  43.         *t++ = c;
  44.         if (c==*f)
  45.            {
  46.            f++;
  47.            if (*f=='\0')
  48.           {
  49.           FPuts(out,replace);
  50.           f = find;
  51.           t = buffer;
  52.           };
  53.            }
  54.         else
  55.            {
  56.            *t = '\0';
  57.            FPuts(out,buffer);
  58.            t = buffer;
  59.            };
  60.         };
  61.  
  62.      ret = TRUE;
  63.      FreeVec(buffer);
  64.      };
  65.       };
  66.  
  67.   return ret;
  68. }
  69.  
  70. __stkargs void _main(int unused_arglen,char *unused_argptr)
  71. {
  72. int ret = RETURN_FAIL;
  73.  
  74.    if ((DOSBase->lib_Version>=37) && (SysBase->lib_Version>=37))
  75.       {
  76.       LONG array[] = { NULL, NULL };
  77.       struct RDArgs *rdargs = ReadArgs("FIND/A,REPLACE/A", array, NULL);
  78.       if (rdargs)
  79.      {
  80.      if (Replace(Input(),Output(),(STRPTR)array[0],(STRPTR)array[1]))
  81.         ret = RETURN_OK;
  82.  
  83.      FreeArgs(rdargs);
  84.      };
  85.  
  86.       if (ret)
  87.      PrintFault(ret = IoErr(),"Replace");
  88.       };
  89.  
  90.    _exit(ret);
  91. }
  92.  
  93.  
  94.