Bitmap/PPM conversion through a pipe: Difference between revisions

m
→‎{{header|Phix}}: added syntax colouring, marked p2js incompatible
(Added Wren)
m (→‎{{header|Phix}}: added syntax colouring, marked p2js incompatible)
Line 239:
=={{header|Phix}}==
Uses the provided demo\rosetta\viewppm.exw utility to accomplish this task.
<!--<lang Phix>(notonline)-->
<langspan Phixstyle="color: #000080;font-style:italic;">-- demo\rosetta\Bitmap_PPM_conversion_through_a_pipe.exw</span>
requires("0.8.4")
<span style="color: #008080;">without</span> <span style="color: #008080;">js</span> <span style="color: #000080;font-style:italic;">-- file i/o, system_exec(), pipes[!!]</span>
include builtins\pipeio.e
<span style="color: #008080;">include</span> <span style="color: #000000;">builtins</span><span style="color: #0000FF;">\</span><span style="color: #000000;">pipeio</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span>
include builtins\serialize.e
<span style="color: #008080;">include</span> <span style="color: #000000;">builtins</span><span style="color: #0000FF;">\</span><span style="color: #7060A8;">serialize</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span>
include ppm.e -- read_ppm()
<span style="color: #008080;">include</span> <span style="color: #000000;">ppm</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span> <span style="color: #000080;font-style:italic;">-- read_ppm()</span>
 
sequence pipes = repeat(0,3)
<span style="color: #004080;">sequence</span> <span style="color: #000000;">pipes</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">)</span>
pipes[PIPEIN] = create_pipe(INHERIT_WRITE)
<span style="color: #000000;">pipes</span><span style="color: #0000FF;">[</span><span style="color: #000000;">PIPEIN</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">create_pipe</span><span style="color: #0000FF;">(</span><span style="color: #000000;">INHERIT_WRITE</span><span style="color: #0000FF;">)</span>
 
<span style="color: #000080;font-style:italic;">-- Create the child process, with replacement stdin. </span>
string cmd = sprintf("%s viewppm -save test.jpg",{get_interpreter(true)})
<span style="color: #004080;">string</span> <span style="color: #000000;">cmd</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"%s viewppm -save test.jpg"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">get_interpreter</span><span style="color: #0000FF;">(</span><span style="color: #004600;">true</span><span style="color: #0000FF;">)})</span>
atom hProc = system_exec(cmd, 12, pipes),
<span style="color: #004080;">atom</span> <span style="color: #000000;">hProc</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">system_exec</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cmd</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">pipes</span><span style="color: #0000FF;">),</span>
hPipe = pipes[PIPEIN][WRITE_PIPE]
<span style="color: #000000;">hPipe</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">pipes</span><span style="color: #0000FF;">[</span><span style="color: #000000;">PIPEIN</span><span style="color: #0000FF;">][</span><span style="color: #000000;">WRITE_PIPE</span><span style="color: #0000FF;">]</span>
 
sequence img = serialize(read_ppm("Lena.ppm",bFlat:=true))
<span style="color: #004080;">sequence</span> <span style="color: #000000;">img</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">serialize</span><span style="color: #0000FF;">(</span><span style="color: #000000;">read_ppm</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"Lena.ppm"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">bFlat</span><span style="color: #0000FF;">:=</span><span style="color: #004600;">true</span><span style="color: #0000FF;">))</span>
if not write_to_pipe(hPipe,img) then crash("error") end if
<span style="color: #008080;">if</span> <span style="color: #008080;">not</span> <span style="color: #000000;">write_to_pipe</span><span style="color: #0000FF;">(</span><span style="color: #000000;">hPipe</span><span style="color: #0000FF;">,</span><span style="color: #000000;">img</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span> <span style="color: #7060A8;">crash</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"error"</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
 
<span style="color: #000080;font-style:italic;">-- Close the pipe handle so the child process stops reading.
--hPipe = close_handles(hPipe)
pipes --hPipe = close_handles(pipes) -- (may as well do the lothPipe)</langspan>
<span style="color: #000000;">pipes</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">close_handles</span><span style="color: #0000FF;">(</span><span style="color: #000000;">pipes</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- (may as well do the lot)</span>
<span style="color: #0000FF;">?</span><span style="color: #008000;">"done"</span>
<span style="color: #0000FF;">{}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">wait_key</span><span style="color: #0000FF;">()</span>
<!--</lang>-->
 
=={{header|PicoLisp}}==
7,806

edits