' +----------------------------------------------------------------------+ ' | | ' | PBClone Copyright (c) 1990-1991 Thomas G. Hanlin III | ' | | ' +----------------------------------------------------------------------+ DECLARE SUB FindPatch (FileName$, SearchSt$, MoveBack%, ErrCode%) DECLARE SUB SetPatch (St$) DECLARE SUB PatchDone () DEFINT A-Z ' --- We read SearchSt$ to avoid duplicating it in an assignment statement. ' --- The ConfigSt$ is the value we patched in last time. READ SearchSt$, ConfigSt$ ' --- Get the value to patch in this time. St$ = LTRIM$(RTRIM$(COMMAND$)) ' --- Make it the right length (this is important)! IF LEN(St$) < LEN(ConfigSt$) THEN St$ = St$ + SPACE$(LEN(ConfigSt$) - LEN(St$)) ELSE St$ = LEFT$(St$, LEN(ConfigSt$)) END IF ' --- Tell 'em what's up. PRINT "This is a demo of the PBClone routines which allow a program to patch itself." PRINT "It patches itself with whatever you enter on the command line." PRINT PRINT "The last entry was: "; CHR$(34); RTRIM$(ConfigSt$); CHR$(34) PRINT "Next time it'll be: "; CHR$(34); RTRIM$(St$); CHR$(34) ' --- Here we do the actual patching. ' --- Note that the ".EXE" extension is optional. FindPatch "PATCHER", SearchSt$, 0, ErrCode IF ErrCode THEN PRINT "Unable to patch PATCHER.EXE-- error code: "; ErrCode END END IF SetPatch St$ PatchDone ' --- Here's the data: one quoted string per statement, with the first ' --- statement containing a unique string. The first statement won't be ' --- patched, since we may need it again another time. The second data ' --- statement will be the first patched. There is no limit to the ' --- number of data statements which may be patched. DATA "UniqueString" DATA "This space intentionally left blank! "