home *** CD-ROM | disk | FTP | other *** search
- #include <exec/types.h>
- #include <exec/memory.h>
- #include <dos/dosextens.h>
-
- #include <proto/exec_protos.h>
- #include <proto/dos_protos.h>
-
- #include <stdlib.h>
-
- #ifndef __COMMODORE_DATE__
- #define __COMMODORE_DATE__ __DATE__
- #endif
-
- #define BASENAME "Replace"
-
- STATIC char VER[] = "$VER: " BASENAME " 1.0 (" __COMMODORE_DATE__ ")";
-
- STATIC ULONG Strlen(STRPTR s)
- {
- STRPTR b = s;
-
- while (*s) ++s;
-
- return (s-b);
- }
-
- STATIC BOOL Replace(BPTR in,BPTR out,STRPTR find,STRPTR replace)
- {
- int ret = FALSE;
-
- if (in && out)
- {
- STRPTR buffer = AllocVec(Strlen(find)+1,MEMF_ANY);
-
- if (buffer)
- {
- STRPTR f = find;
- STRPTR t = buffer;
- LONG c;
-
- while ((c = FGetC(in))!=-1)
- {
- *t++ = c;
- if (c==*f)
- {
- f++;
- if (*f=='\0')
- {
- FPuts(out,replace);
- f = find;
- t = buffer;
- };
- }
- else
- {
- *t = '\0';
- FPuts(out,buffer);
- t = buffer;
- };
- };
-
- ret = TRUE;
- FreeVec(buffer);
- };
- };
-
- return ret;
- }
-
- __stkargs void _main(int unused_arglen,char *unused_argptr)
- {
- int ret = RETURN_FAIL;
-
- if ((DOSBase->lib_Version>=37) && (SysBase->lib_Version>=37))
- {
- LONG array[] = { NULL, NULL };
- struct RDArgs *rdargs = ReadArgs("FIND/A,REPLACE/A", array, NULL);
- if (rdargs)
- {
- if (Replace(Input(),Output(),(STRPTR)array[0],(STRPTR)array[1]))
- ret = RETURN_OK;
-
- FreeArgs(rdargs);
- };
-
- if (ret)
- PrintFault(ret = IoErr(),"Replace");
- };
-
- _exit(ret);
- }
-
-
-