/* EASys! System © TNE) 1998 RemoteEd.rexx Insert, replace, append, prepend, extract text parts from,to ASCII arg Date: 08/99 Author: Thomas Neidhardt (TNE), Deutschland, Erlangen InterNet: thomas.neidhardt@fen-net.de Needs: The EASys! Configuration Environment. Referenced by: ${RefTable/Text-RemoteEd} */ PARSE ARG AllArguments CALL ParseArgs CALL Init IF (arg.1='' | arg.1='h' | arg.1='help') THEN CALL Help IF (arg.1='appendtext') THEN CALL AppendText(arg.2,arg.3) IF (arg.1='prependtext') THEN CALL PrependText(arg.2,arg.3) IF (arg.1='replacestring') THEN CALL ReplaceString(arg.2,arg.3,arg.4) IF (arg.1='inserttext') THEN CALL InsertText(arg.2,arg.3,arg.4) IF (arg.1='replacetext') THEN CALL ReplaceText(arg.2,arg.3,arg.4,arg.5) IF (arg.1='movetext') THEN CALL MoveText(arg.2,arg.3,arg.4,arg.5) CALL ExitMe /* -------------------------- */ AppendText: PARSE ARG modifyFile,appendFile IF (appendFile='') THEN CALL Help tmpFile=modifyFile'_t' IF (~EXISTS(modifyFile) | ~EXISTS(appendFile)) THEN RETURN IF EXISTS(tmpFile) THEN ADDRESS COMMAND 'delete "'tmpFile'" FORCE QUIET' ADDRESS COMMAND 'join "'modifyFile'" "'appendFile'" TO "'tmpFile'"' CALL BackupFile(modifyFile) CALL MakeModifiedFile RETURN /* -------------------------- */ PrependText: PARSE ARG preFile,modifyFile IF (modifyFile='') THEN CALL Help tmpFile=modifyFile'_t' IF (~EXISTS(preFile) | ~EXISTS(modifyFile)) THEN RETURN IF EXISTS(tmpFile) THEN ADDRESS COMMAND 'delete "'tmpFile'" FORCE QUIET' ADDRESS COMMAND 'join "'preFile'" "'modifyFile'" TO "'tmpFile'"' CALL BackupFile(modifyFile) CALL MakeModifiedFile RETURN /* -------------------------- */ ReplaceString: PARSE ARG modifyFile,string,newstring IF (modifyFile='') THEN CALL Help CALL BackupFile(modifyFile) ADDRESS COMMAND 'Install_C:ReplaceStrings "'modifyFile'" "'string'" "'newstring'"' RETURN /* -------------------------- */ InsertText: PARSE ARG insertFile,StartString,modifyFile IF (modifyFile='') THEN CALL Help CALL Prepare tmpFile='T:SrcFile_'ProcessNumber IF StartString='sTaRt' THEN DO ADDRESS COMMAND 'JOIN "'modifyFile'" "'insertFile'" TO 'tmpFile found=1 END ELSE DO IF ~Open(fModifyfile,modifyFile,'R') THEN CALL Err_ShowMessage(modifyFile) IF ~Open(fInsertFile,insertFile,'R') THEN CALL Err_ShowMessage(insertFile) IF ~Open(ftmpFile,tmpFile,'W') THEN CALL Err_ShowMessage(tmpFile) DO FOREVER Line=ReadLn(fModifyfile) IF EOF(fModifyfile) THEN LEAVE IF found=1 | POS(UPPER(StartString),UPPER(Line))=0 THEN r=WriteLn(ftmpFile,Line) /* keep lines until found StartString and after inserting */ ELSE DO found=1 DO FOREVER /* write lines of InsertFile */ newLine=ReadLN(fInsertFile) IF EOF(fInsertFile) THEN LEAVE ELSE r=WriteLn(ftmpFile,newLine) END r=WriteLn(ftmpFile,Line) /* and write the line after the inserted lines */ END END r=Close(fModifyfile) r=Close(fInsertFile) r=Close(ftmpFile) END IF found=1 THEN DO CALL BackupFile(modifyFile) CALL MakeModifiedFile END RETURN /* -------------------------- */ ReplaceText: PARSE ARG replaceFile,StartString,EndString,modifyFile IF (modifyFile='') THEN CALL Help CALL Prepare tmpFile='T:SrcFile_'ProcessNumber IF ~Open(fModifyfile,modifyFile,'R') THEN CALL Err_ShowMessage(modifyFile) IF ~Open(freplaceFile,replaceFile,'R') THEN CALL Err_ShowMessage(replaceFile) IF ~Open(ftmpFile,tmpFile,'W') THEN CALL Err_ShowMessage(tmpFile) DO FOREVER /* read and put all lines until StartString */ Line=ReadLn(fModifyfile) IF EOF(fModifyfile) THEN LEAVE IF POS(uStartString,UPPER(Line))=0 & ExcludeStart=0 & ~(StartString='sTaRt') THEN r=WriteLn(ftmpFile,Line) ELSE DO found=1 LEAVE END END IF found=1 THEN DO IF ExcludeStart=1 THEN r=WriteLn(ftmpFile,Line) /* write first line to file, do not replace it */ DO FOREVER /* write the replacing lines */ replaceLine=ReadLN(fReplaceFile) IF EOF(fReplaceFile) THEN LEAVE ELSE r=WriteLn(ftmpFile,replaceLine) END DO FOREVER /* scan for EndString, don't write the replaced lines */ Line=ReadLn(fModifyfile) uLine=UPPER(Line) SELECT WHEN EOF(fModifyfile) THEN LEAVE WHEN ExcludeEnd=1 & POS(uEndString,uLine)>0 THEN DO /* Line(EndString) is excluded from being replaced */ r=WriteLn(ftmpFile,Line) LEAVE END WHEN POS(uEndString,uLine)>0 THEN LEAVE OTHERWISE NOP END END IF ~EOF(fModifyFile) THEN DO FOREVER /* write rest of source back */ Line=ReadLn(fModifyfile) IF EOF(fModifyFile) THEN LEAVE ELSE r=WriteLn(ftmpFile,Line) END END r=Close(fModifyfile) r=Close(freplaceFile) r=Close(ftmpFile) IF found=1 THEN DO CALL BackupFile(modifyFile) CALL MakeModifiedFile END RETURN /* -------------------------- */ MoveText: PARSE ARG modifyFile,StartString,EndString,destFile IF (destFile='') THEN CALL Help CALL Prepare tmpFile='T:SrcFile_'ProcessNumber tmpDest='T:DestFile_'ProcessNumber IF ~Open(fModifyfile,modifyFile,'R') THEN CALL Err_ShowMessage(modifyFile) IF ~Open(fDestFile,tmpDest,'W') THEN CALL Err_ShowMessage(tmpDest) IF ~Open(ftmpFile,tmpFile,'W') THEN CALL Err_ShowMessage(tmpFile) DO FOREVER /* handle part of file until StartString */ Line=ReadLn(fModifyfile) IF EOF(fModifyfile) THEN LEAVE IF POS(uStartString,UPPER(Line))>0 | StartString='sTaRt' THEN DO found=1 LEAVE END ELSE r=WriteLn(ftmpFile,Line) END IF found=1 THEN DO /* handle first found line */ IF IncludeStart=1 | StartString='sTaRt' | EndString='1LiNe' | PatternEnd=1 THEN r=WriteLn(fDestFile,Line) /* move first found line */ ELSE r=WriteLn(ftmpFile,Line) /* keep first found line */ DO FOREVER /* handle rest of File */ Line=ReadLn(fModifyfile) IF EOF(fModifyfile) THEN LEAVE uLine=UPPER(Line) IF POS(uEndString,uLine)>0 | EndString='1LiNe' | ((EndString='*sAmE' | PatternEnd=1) & POS(uStartString,uLine)=0) THEN end_found=1 SELECT WHEN end_found=0 & (ExcludeEnd=1 | EndString='*sAmE' | PatternEnd=1) THEN r=WriteLn(fDestFile,Line) WHEN end_found=1 & IncludeEnd=1 & end_included=0 THEN DO end_included=1 r=WriteLn(fDestFile,Line) END WHEN end_found=0 THEN r=WriteLn(fDestFile,Line) OTHERWISE r=WriteLn(ftmpFile,Line) END END END r=Close(fModifyfile) r=Close(fDestFile) r=Close(ftmpFile) IF found=1 THEN DO ADDRESS COMMAND 'type "'tmpDest'" >>"'DestFile'"' CALL BackupFile(modifyFile) CALL MakeModifiedFile END ADDRESS COMMAND 'delete "'tmpDest'" QUIET' RETURN /* -------------------------- */ Prepare: IF ~EXISTS(modifyFile) THEN CALL Err_ShowMessage(modifyFile' does not exist!') IncludeStart=0 ExcludeStart=0 IncludeEnd=0 ExcludeEnd=0 PatternEnd=0 done=0 found=0 end_included=0 end_1Line=0 end_found=0 IF POS('~~',StartString)=1 THEN DO StartString=RIGHT(StartString,LENGTH(StartString)-2) ExcludeStart=1 END ELSE IncludeStart=1 SELECT WHEN POS('~~',EndString)=1 THEN DO EndString=RIGHT(EndString,LENGTH(EndString)-2) ExcludeEnd=1 END WHEN RIGHT(EndString,2)='#?' THEN DO EndString=LEFT(EndString,LENGTH(EndString)-2) PatternEnd=1 END WHEN EndString='*sAmE' THEN NOP WHEN EndString='1LiNe' THEN NOP OTHERWISE IncludeEnd=1 END uStartString=UPPER(StartString) uEndString=UPPER(EndString) RETURN /* -------------------------- */ MakeModifiedFile: ADDRESS COMMAND 'protect "'modifyFile'" +wd' 'copy "'tmpFile'" "'modifyFile'"' /* CALL Present(modifyFile) */ RETURN /* -------------------------- */ BackupFile: PARSE ARG bakFile n=2 IF EXISTS(bakFile'.'n) THEN DO DO i=2 to n k=i-1 ADDRESS COMMAND 'protect "'bakFile'.'i'" +wd' 'copy "'bakFile'.'i'" "'bakFile'.'k'" CLONE QUIET' END 'copy "'bakFile'" "'bakFile'.'n'" CLONE QUIET' END ELSE DO i=1 to n IF ~EXISTS(bakFile'.'i) THEN DO ADDRESS COMMAND 'copy "'bakFile'" "'bakFile'.'i'" CLONE QUIET' LEAVE i END END RETURN /* -------------------------- */ Init: CR='0a'x OPTIONS RESULTS OPTIONS FAILAT 21 ProcessNumber=PRAGMA('ID') TimeStamp=MyGetENV('TimeStamp') RETURN /* -------------------------- */ MyGetENV: PROCEDURE PARSE ARG name TheFile="ENV:" || name IF (Open(fTmp, TheFile, 'read')) THEN DO ENVvalue=ReadLn(fTmp) r=Close(fTmp) END ELSE ENVvalue="???" RETURN ENVvalue /* -------------------------- */ ParseArgs: DO i=1 TO 5 arg.i='' END i=0 DO FOREVER i=i+1 IF POS('"', AllArguments)=1 THEN PARSE VAR AllArguments '"'arg.i'"' AllArguments /* parse the line */ ELSE PARSE VAR AllArguments arg.i' 'AllArguments IF (arg.i = " ") THEN DO IF POS('"',AllArguments)=1 THEN PARSE VAR AllArguments '"'arg.i'"' AllArguments /* parse the line */ ELSE PARSE VAR AllArguments arg.i' 'AllArguments END arg.i = strip(arg.i,T,' ') arg.i = strip(arg.i,B,'"') IF (arg.i='') THEN DO /* Break if end of Command-line */ arg.count=i-1 LEAVE END END RETURN /* -------------------------- */ Err_ShowMessage: PARSE ARG ErrText say CR' Error while accessing File "'ErrText'"'CR CALL ExitMe /* -------------------------- */ Help: say ' ERROR: Wrong commandline options' CALL ExitMe /* -------------------------- */ ExitMe: ADDRESS COMMAND 'delete "'tmpFile'" QUIET' EXIT 0