home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 13
/
AACD13.ISO
/
AACD
/
System
/
EASys
/
EASys!_update_481_to_482
/
c
/
ReplaceFileContents.rexx
< prev
next >
Wrap
OS/2 REXX Batch file
|
2000-04-21
|
11KB
|
531 lines
/*
EASys! System © TNE) 1998
ReplaceFileContents.rexx
Find and change Contents of Files by an intuitive dialog-process.
Date: 07/98
Author: Thomas Neidhardt (TNE), Deutschland, Erlangen
InterNet: thomas.neidhardt@fen-net.de
Needs: RexxReqTools Package by Rafael D'Halleweyn ( rdhall@rug.ac.be )
and the EASys! Configuration Environment.
Referenced by: ${RefTable/File-ReplaceContents}
Complies to Standard Workbench-CLI-Command "search ... QUICK"
*/
PARSE ARG args
OPTIONS RESULTS
OPTIONS FAILAT 21
CALL Init
/*--------------------------------------------*/
IF ~(args='' | args='ARGS') THEN
DO
CALL ArgParser
SearchedName=args.1
Search=SearchedName
NewName=args.2
Replace=NewName
SearchPath=args.3
IF SearchPath='' THEN CALL ExitMe
IF args.4="AUTO" THEN AutomaticRun=1
CALL Searcher
CALL ExitMe
END
ELSE
DO
IF (Search="" | Search="SEARCH") THEN Search="???"
Replace=MyGetENV("Flags/ActualReplace2")
IF (Replace="" | Replace="REPLACE") THEN Replace="???"
DO FOREVER
DO FOREVER
SearchedName=''
SearchedName=ShowMessage('ReplaceFileContents.1',,,Search,AppName)
If (Action=2) THEN CALL Help
ELSE LEAVE
END
If (SearchedName='') THEN CALL ExitMe
Search=SearchedName
DO FOREVER
NewName=''
NewName=ShowMessage('ReplaceFileContents.2',,,Replace,AppName)
If (Action=2) THEN CALL Help
ELSE LEAVE
END
If (NewName='') THEN CALL ExitMe
Replace=NewName
CALL PathReq
CALL Searcher
again=0
IF (Count=0) THEN
DO
CALL CloseCon
again=ShowMessage('ReplaceFileContents.6',,,,AppName,SearchedText)
END
ELSE
again=ShowMessage('ReplaceFileContents.7',,,,AppName)
IF (again=0) THEN LEAVE
END
END
CALL ExitMe
/* ----------------------------------------- */
PathReq:
ActualPath=SearchPath
IF (RIGHT(ActualPath,1)=":" | ActualPath='???') THEN
DO
ADDRESS COMMAND 'assign >NIL: "'ActualPath'" EXISTS'
IF (RC>1) THEN ActualPath="SYS:"
END
ELSE
IF (~EXISTS(ActualPath) | ActualPath="") THEN ActualPath="SYS:"
SearchPath=''
SearchPath=ShowMessage('ReplaceFileContents.3',ActualPath,,,AppName)
IF (SearchPath='') THEN CALL ExitMe
RETURN
/* ----------------------------------------- */
Searcher:
SearchedText='"'SearchedName'"'
ReplacingText ='"'NewName'"'
CALL ShowMessage('ReplaceFileContents.4',,,,AppName,SearchedText,ReplacingText,SearchPath)
ADDRESS COMMAND 'sys:c/search >'FoundLog '"'SearchPath'" 'SearchedText' QUICK ALL'
CALL CloseCon
IF AutomaticRun=1 THEN
AUTOREPLACE=1
ELSE
AUTOREPLACE=0
REPLACEIT=0
Count=0
IF ~(open(SearchFile, FoundLog, 'read')) THEN
DO
MsgFile=FoundLog
CALL Err_ShowMessage
END
DO UNTIL (EOF(SearchFile))
r=READLN(SearchFile) /* Read each line then analyze it */
IF Right(r,1)="
" THEN
DO
Count=Count + 1
endpos=LastPos("
",r)-4
begpos=LastPos("
",r,endpos-1)+3
IF (begpos=3) THEN begpos=0
FilePath=RIGHT(r,LENGTH(r)-BegPos)
FilePath='"'LEFT(FilePath,LENGTH(FilePath)-4)'"'
IF(AUTOREPLACE=0) THEN
DO
Action=ShowMessage('ReplaceFileContents.5',,,,AppName,SearchedText,ReplacingText,FilePath)
IF(Action=0) THEN LEAVE
IF(Action=1) THEN REPLACEIT=1
IF(Action=2) THEN AUTOREPLACE=1
IF(Action=3) THEN REPLACEIT=0
IF(Action=4) THEN LEAVE
END
IF ((REPLACEIT=1) | (AUTOREPLACE=1)) THEN
DO
REPLACEIT=0
ADDRESS COMMAND 'Install_C:ReplaceStrings 'FilePath SearchedText ReplacingText' I'
END
END
END
Result=close(SearchFile)
RETURN
/*--------------------------------------------*/
ShowMessage:
PARSE ARG Mesg,ReqPath,ReqFile,PresetString,Parameter1,Parameter2,Parameter3,Parameter4
drop Action
ReqType=""
MsgFile='EASys!_rexx:'Language'/'Mesg
IF (Open(TEMPFILE, MsgFile, 'read')) THEN
DO
ReqType=ReadLn(TEMPFILE) /* read Requester-Type */
Line=ReadLn(TEMPFILE) /* read Title-Line */
CALL Substitutions
ReqTitle=Line
Line=ReadLn(TEMPFILE) /* free line after Title */
Message=""
DO UNTIL EOF(TEMPFILE)
Line=ReadLn(TEMPFILE)
CALL Substitutions
IF POS(">>>", Line) > 0 THEN
DO
rtBtns=STRIP(Line, 'L', '>')
LEAVE
END
ELSE
Message=Message || CR || Line
END
r=Close(TEMPFILE)
END
ELSE
CALL Err_ShowMessage
uReqType=UPPER(ReqType)
IF (uReqType='MULTI REQUEST') THEN
DO
r=rtezrequest(Message,rtBtns,ReqTitle,PosTags)
RETURN r
END
IF (uReqType='GET ONE FILE') THEN
DO
r=rtfilerequest(ReqPath,ReqFile,ReqTitle,rtBtns,ONEFILE_TAG, Files)
RETURN r
END
IF (uReqType='GETFILES') THEN
DO
r=rtfilerequest(ReqPath,ReqFile,ReqTitle,rtBtns, FILE_TAGS, Files)
RETURN r
END
IF (uReqType='GETPATH') THEN
DO
r=rtfilerequest(ReqPath,,ReqTitle,rtBtns, DIR_TAGS)
RETURN r
END
IF (uReqType='GETSTRING') THEN
DO
r=rtgetstring(PresetString,Message,ReqTitle,rtBtns,GStags,Action)
RETURN r
END
IF (uReqType='GETSTRING SIMPLE') THEN
DO
r=rtgetstring(PresetString,Message,ReqTitle,,GStags,Action)
RETURN r
END
IF (uReqType='CONSOLE') THEN
DO
ShowConsole='CON:'ReqLE'/'ReqTE'/'ConW'/'ConH'/'ReqTitle'/NOCLOSE'
IF ~(Open(Con,ShowConsole,'write')) THEN
DO
MsgFile=ThisConsole
CALL Err_ShowMessage
ConStat=0
END
ConStat=1
r=WriteLn(Con,Message)
RETURN
END
CALL Err_ShowMessage /* Error if arrived here */
RETURN
/*--------------------------------------------*/
Substitutions:
IF POS("%1", Line) > 0 THEN /* substitution parameters for each message */
DO UNTIL POS("%1", Line)=0 /* and per line */
parse var Line part1 '%1' part2
Line=part1''parameter1''part2
END
IF POS("%2", Line) > 0 THEN
DO UNTIL POS("%2", Line)=0
parse var Line part1 '%2' part2
Line=part1''parameter2''part2
END
IF POS("%3", Line) > 0 THEN
DO UNTIL POS("%3", Line)=0
parse var Line part1 '%3' part2
Line=part1''parameter3''part2
END
IF POS("%4", Line) > 0 THEN
DO UNTIL POS("%4", Line)=0
parse var Line part1 '%4' part2
Line=part1''parameter4''part2
END
RETURN
/*--------------------------------------------*/
Err_ShowMessage:
Message=AppName':' CR CR "Sorry, an error has occured accessing the MessageFile" CR CR " "MsgFile CR CR "... exiting."
rtBtns='Oh no!'
Action=rtezrequest(Message,rtBtns,ReqTitle,PosTags)
CALL ExitMe
RETURN
/*--------------------------------------------*/
CloseCon:
IF (ConStat=1) THEN
DO
ADDRESS COMMAND 'wait 1'
r=Close(Con)
ConStat=0
END
RETURN
/*--------------------------------------------*/
MyGetENV: PROCEDURE
PARSE ARG name
TheFile="ENV:" || name
IF (open(TEMPFILE, TheFile, 'read')) THEN
DO
ENVvalue=READLN(TEMPFILE)
Closed=close(TEMPFILE)
END
ELSE
ENVvalue="???"
RETURN ENVvalue
/*--------------------------------------------*/
GetLanguage:
LanguageNumber=1 /* Presets */
Language=''
IF (open(TEMPFILE, 'ENV:sys/locale.prefs', 'read')) THEN
DO
DO i=1 to 50
r=READCH(TEMPFILE)
END
Land=''
i=0
DO UNTIL EOF(TEMPFILE)
i=i+1
Char=ReadCh(TEMPFILE)
IF (C2D(Char)=0) THEN
LEAVE
ELSE
Land=Land''Char
END
/* 32 characters from begin of Lang_x to begin of Lang_y */
DO j=i to 31 UNTIL EOF(TEMPFILE)
r=READCH(TEMPFILE)
END
Language=ReadLanguage()
r=Close(TEMPFILE)
END
IF (Language='') THEN Language='english'
drop Char
drop r
ADDRESS COMMAND 'setenv LANGUAGE 'Language
IF ~EXISTS('EASys!_rexx:'Language'/FileManager.1') THEN
Language='english'
RETURN
/*----------------------------------*/
ReadLanguage:
Langua=''
Langua=ReadCh(TEMPFILE)
IF (C2D(Langua)=0) THEN RETURN ''
i=1
DO UNTIL EOF(TEMPFILE)
i=i+1
Char=ReadCh(TEMPFILE)
IF (C2D(Char)=0) THEN
LEAVE
ELSE
Langua=Langua''Char
END
/* 30 characters from begin of Lang_x to begin of Lang_y */
DO j=i to 29 UNTIL EOF(TEMPFILE)
r=READCH(TEMPFILE)
END
RETURN Langua
/*--------------------------------------------*/
ArgParser:
i=0
DO forever
i=i+1
args.i=''
IF POS('"',WORD(args,1))=0 THEN PARSE VAR args args.i args
ELSE IF POS('"',WORD(args,1))=1 THEN PARSE VAR args'"'args.i'"'args
args.i=strip(args.i,B,'"')
IF (args.i='' & POS('20'x,args.i)=0) THEN
DO /* Break if end of Command-line */
args.count=i-1
LEAVE
END
END
i=args.count /* set last path to Actual path */
Path=Path.i
RETURN 1
/*--------------------------------------------*/
Init:
AppName="© TNE) Text-Replacer"
CR='0a'x
CALL GetLanguage
if ~show('L','rexxreqtools.library') THEN Result=ADDLIB('rexxreqtools.library',0,-30,0)
if ~show('L','rexxsupport.library') THEN Result=ADDLIB('rexxsupport.library',0,-30,0)
ProcessNumber=PRAGMA('ID')
CALL FORBID
Intui =showlist(l, 'intuition.library',, a)
Screen=next(intui, 56)
Font =next(screen, 136)
FontSize=c2d(import(offset(font, 20), 2))
CALL PERMIT
MaxTitleChars=MyGetENV("RefTable/GUI-ShellTitleChars")
ConsoleType=MyGetENV("RefTable/GUI-ConsoleType")
ConsoleSize=MyGetENV("SHELLsize")
IF (ConsoleSize="") THEN ConsoleSize="40/50/600/200"
ConW=520
ConH=210
ReqLE=MyGetENV("RefTable/GUI-ReqLE") /* Main Window */
ReqTE=MyGetENV("RefTable/GUI-ReqTE")
ReqHeight=MyGetENV("RefTable/GUI-ReqHeight")
rt_TE1=ReqTE + FontSize + 4 /* Requester-Windows */
rt_LE1=ReqLE + 6
PosTags="rt_reqpos=reqpos_topleftscr rt_leftoffset=" ReqLE " rt_topoffset=" ReqTE
EZtags=PosTags
GLtags=PosTags || "rtgl_min=0 rtgl_max=1500 rtgl_backfill=true "
GStags=PosTags || " rtgs_backfill=false rtgs_width=300"
POINTER_TAGS="rt_reqpos=reqpos_pointer"
DIR_TAGS=PosTags || " rtfi_flags=freqf_nofiles|freqf_save rtfi_height=" ReqHeight
FILE_TAGS=PosTags || " rtfi_flags=freqf_multiselect|freqf_selectdirs" || " rtfi_height=" ReqHeight
Console='>"'ConsoleType || ConsoleSize'/'AppName' Messages.../AUTO/NOCLOSE/ALT'ReqLE'/'ReqTE'/500/40"'
/*-----------------------*/
FoundLog='T:RS_FoundInFiles_'ProcessNumber
SearchPath=MyGetENV("Flags/ActualPath")
Search=MyGetENV("Flags/ActualReplace1")
RETURN
/*--------------------------------------------*/
Help:
ADDRESS COMMAND '${RefTable/Text-ViewGUIDE} EASys!:Help/'Language'/EASys!_TextFunctions.guide'
RETURN
/*--------------------------------------------*/
ExitMe:
Len=LENGTH(SearchPath)
DevicePos=LASTPOS(':', SearchPath)
DirPos=LASTPOS('/', SearchPath)
IF (DirPos > 0) THEN
SearchPath=LEFT(SearchPath, DirPos-1)
ELSE
SearchPath=LEFT(SearchPath, DevicePos)
ADDRESS COMMAND
'setenv Flags/ActualReplace1 "'Search'"'
'setenv Flags/ActualReplace2 "'Replace'"'
'delete 'FoundLog' QUIET'
'assign >NIL: Profile: EXISTS'
IF RC=0 THEN
DO
ADDRESS COMMAND
'copy ENV:Flags/ActualPath Profile:ENV/Flags CLONE'
'copy ENV:Flags/ActualReplace1 Profile:ENV/Flags CLONE QUIET'
'copy ENV:Flags/ActualReplace2 Profile:ENV/Flags clone quiet'
END
ELSE
DO
ADDRESS COMMAND
'copy ENV:Flags/ActualPath EASys!:Flags CLONE'
'copy ENV:Flags/ActualReplace1 EASys!:Flags CLONE QUIET'
'copy ENV:Flags/ActualReplace2 EASys!:Flags clone quiet'
END
EXIT 0