[Info-vax] Can C #includes like this be made to work onVMS?

Craig A. Berry craigberry at nospam.mac.com
Wed Oct 16 21:34:49 EDT 2024


On 10/16/24 5:44 PM, Arne Vajhøj wrote:
> On 10/15/2024 7:48 PM, Arne Vajhøj wrote:
>> $ type bc.eve
>> all replace "#include ""b/" "#include ""c/"
>> exit
> 
>> $ type cd.tpu
>> eve_all_replace("#include ""c/", "#include ""d/");
>> eve_exit();
> 
> Just realized that one is custom not standard.
> 
> !
> !  Replace all occurences of string with another string (without
> !  confirm).
> !
> !  High-level.
> !
> procedure eve_all_replace(fndstr,rplstr)
> local fnd_string,
>        rpl_string,
>        pos_mark,
>        count_integer;
> if not (eve$prompt_string(fndstr,fnd_string,"Old string: ",
>                            "No old string given")) then
>      return;
> endif;
> if not (eve$prompt_string(rplstr,rpl_string,"New string ",
>                            "No new string given")) then
>      return;
> endif;
> pos_mark:=mark(none);
> set (screen_update, off);
> eve$all_replace(fnd_string,rpl_string,count_integer);
> position (pos_mark);
> set (screen_update, on);
> delete (pos_mark);
> message("Total of "+str(count_integer)+" replaces");
> endprocedure;
> !
> !  Replace all occurences of string with another string (without
> !  confirm).
> !
> !  Low-level.
> !
> procedure eve$all_replace(fndstr,rplstr,count)
> local find_mark;
> position (beginning_of(current_buffer));
> count:=0;
> loop
>      find_mark:=search_quietly(fndstr, forward);
>      exitif find_mark = 0;
>      count:=count+1;
>      position (find_mark);
>      copy_text (rplstr);
>      erase_character (length(fndstr));
> endloop;
> endprocedure;


eve_all_replace may be custom, but as far as I know eve_global_replace 
is standard.  Here's an example of using TPU as a poor man's Perl:

$ edit/tpu/nodisplay/noinitialization -
	/section=sys$library:eve$section.tpu$section -
	/command=sys$input/output=myfile.txt myfile.txt
input_file := GET_INFO (COMMAND_LINE, "file_name");
main_buffer:= CREATE_BUFFER ("main", input_file);
POSITION (BEGINNING_OF (main_buffer));
eve_global_replace("foo","bar");
out_file := GET_INFO (COMMAND_LINE, "output_file");
WRITE_FILE (main_buffer, out_file);
quit;
^Z

But yeah, Perl is way easier:

$ perl -pi -e "s/foo/bar/g;" myfile.txt


More information about the Info-vax mailing list