.#& 0 Filter_Processes+ $ NULL0 Filter_Processes,* # pid+* ! s+ 0 Filter_Processes! s. ! s $ NULLB/. ! s"# pid # pidA.v/c ! s"$ next! s/f ! sw3 find_filter_process,* ! s+ 0 Filter_Processes $ NULLA.w/c 0 Filter_Processes ! sA. ! s"$ next 0 Filter_Processes $ NULL ! s$ nextw/c* $ prev+ 0 Filter_Processes$ prev* $ next+ $ prev"$ next$ next. $ next ! sB/. $ next $ NULLA.w/c $ next$ prev $ next"$ next$ next/f $ next"$ next $ prev$ next $ NULL ! s$ next5 delete_filter_process,* # pid % flags & status+ % flags! 1A.w/c* ! s+ # pid 3 find_filter_process! s ! s $ NULLA.w/c % flags! 4A. & status ! s+ exit_status/." -1 ! s+ exit_status/d6 process_signal_handler,* # pid+* ! s+# pid+ exit_status$ next! 3! s # pid ! s# pid 0 Filter_Processes ! s$ next ! s0 Filter_Processes ! sw7 allocate_filter_process,* $ argv & output+ $ argv & typeof * Array_TypeB. $ argv$ argv/c* % nargs+ $ argv & length% nargs $ argv./* $ args+ % nargs * __pop_args$ args* # pgm+ ! 0 $ argv!# pgm* # pid+ $ args + __push_args % nargs! 1: 1 open_process_pipe# pid" -1 # pidA.4 failed to execute %s # pgm & verror/c* ! s+ # pid 7 allocate_filter_process! s # pid& signal}6 process_signal_handler + set_process # pid & output & output + set_process # pidw3 open_filter_process,* # pid+* ! s+ # pid 3 find_filter_process! s ! s $ NULLA." -1w/c! 0 1 get_process_input* + next_signal+! 2+ next_signal. ! s"+ exit_status $ NULLA/.! 0 & update. # pid + next_signal . signal_process + next_signal! 9B. , _clear_error/c! 9+ next_signal/n! 5 1 get_process_input/f* & status+ ! s"+ exit_status& status ! s 5 delete_filter_process & statusw4 close_filter_process,* # cmd & output+* # str+ ) bufsubstr# str* # pid+ # cmd & output 3 open_filter_process# pid # pid" -1A.w/c # pid # str , send_process # pid 0 send_process_eof3 Process returned %d # pid 4 close_filter_process ( vmessage3 call_process_region