zOs/REXX.O13/PITEST

/* copy piTest begin ************************************************/
m.trace = 0
call wrIni 0
if 1 then call wrTestAll
if 1 then call rsTest
if 1 then call piTest
exit

piTest: procedure expose m.
    call piTestPipe
    call piTestSeq
    call piTestComp
    return
endProcedure piTest

piTestComp: procedure expose m.
    pT = wrNew()
    pR = wrNew('piTestComp')
    call outPush pT
    call wrTest pT,
       ,  "--- rsTestComp1 s pi1 ==> 2 lines    call piWC ""ch1 li"",",
       || " ""ch1 op"", ""ch1 cl """,
       ,  "--- running s pi1 without pipe",
       ,  "ch2 op",
       ,  "ch2 li ch1 op",
       ,  "ch2 li ch1 cl  0 lines and 0 characters",
       ,  "ch2 cl  2 lines and 38 characters",
       ,  "--- running s pi1 piping",
       ,  "ch2 op",
       ,  "--- writing 2 lines",
       ,  "--- closing run",      /* wkOld war nach writeLN two */
       ,  "ch2 li ch1 op",
       ,  "ch2 li ch1 li writeLn line one",
       ,  "ch2 li ch1 li writeLn line two",
       ,  "ch2 li ch1 cl  2 lines and 32 characters",
       ,  "ch2 cl  4 lines and 85 characters"
    call piTestComp1 's pi1', wrArgs('xyz',0,
       , '   call piWC "ch1 li", "ch1 op", "ch1 cl "',
       , '$! call piWC "ch2 li", "ch2 op", "ch2 cl "')
    call wrTest pT,
        ,  "--- rsTestComp1 s pi2 ==> 6 lines $:{   call piWC ""ch1 li",
        || """, ""ch1 op"", ""ch1 cl """,
        ,  "--- running s pi2 without pipe",
        ,  "ch1 op",
        ,  "ch1 li line eins",
        ,  "ch1 li leine zwei",
        ,  "ch1 cl  2 lines and 19 characters",
        ,  "ch2 op",
        ,  "ch2 cl  0 lines and 0 characters",
        ,  "--- running s pi2 piping",
        ,  "--- writing 2 lines",
        ,  "--- closing run",  /* wkOld war nach zwei */
        ,  "ch1 op",
        ,  "ch1 li line eins",
        ,  "ch1 li leine zwei",
        ,  "ch1 cl  2 lines and 19 characters",
        ,  "ch2 op",
        ,  "ch2 cl  0 lines and 0 characters"
    call piTestComp1 's pi2', wrArgs('xyz',0,
       , '$:{   call piWC "ch1 li", "ch1 op", "ch1 cl "',
       , '   $; call piWC "ch2 li", "ch2 op", "ch2 cl "',
       , '$:} $<<e1   ', 'line eins', 'leine zwei',
       ,        'e1   ')
    call wrTest pT,
        ,  "--- rsTestComp1 s pi3 ==> 3 lines $:{   call piWC ""ch1 li",
        || """, ""ch1 op"", ""ch1 cl """,
        ,  "--- running s pi3 without pipe",
        ,  "ch1 op",
        ,  "ch1 cl  0 lines and 0 characters",
        ,  "ch2 op",
        ,  "ch2 cl  0 lines and 0 characters",
        ,  "--- running s pi3 piping",
        ,  "--- writing 2 lines",
        ,  "--- closing run", /* wkOld war nach two */
        ,  "ch1 op",
        ,  "ch1 li writeLn line one",
        ,  "ch1 li writeLn line two",
        ,  "ch1 cl  2 lines and 32 characters",
        ,  "ch2 op",
        ,  "ch2 cl  0 lines and 0 characters"
    call piTestComp1 's pi3', wrArgs('xyz',0,
       , '$:{   call piWC "ch1 li", "ch1 op", "ch1 cl "',
       , '   $; call piWC "ch2 li", "ch2 op", "ch2 cl "',
       , '   $:}   ')
    call wrTest pT,
        ,  "--- rsTestComp1 s pi4 ==> 1 lines $:li $| ""liEins<"" m.li",
        || "ne "">liEins""",
        ,  "--- running s pi4 without pipe",
        ,  "--- running s pi4 piping",
        ,  "--- writing 2 lines",
        ,  "--- closing run", /* wkOld war nach liEins */
        ,  "liEins< writeLn line one >liEins",
        ,  "liEins< writeLn line two >liEins",
    call piTestComp1 's pi4', wrArgs('xyz',0,
       , '$:li $| "liEins<" m.line ">liEins"')
    call wrTest pT,
        ,  "--- rsTestComp1 s pi5 ==> 2 lines $$ liZwei open ",
        ,  "--- running s pi5 without pipe",
        ,  " liZwei open ",
        ,  " liZwei close",
        ,  "--- running s pi5 piping",
        ,  " liZwei open ",
        ,  "--- writing 2 lines",
        ,  "--- closing run",    /* wkOld war nch >liZwei */
        ,  "liZwei< writeLn line one >liZwei",
        ,  "liZwei< writeLn line two >liZwei",
        ,  " liZwei close"
    call piTestComp1 's pi5', wrArgs('xyz',0,
       , '$$ liZwei open ',
       , '$:li $| "liZwei<" m.line ">liZwei"  $:cl $$ liZwei close')
    call wrTest pT,
        ,  "--- rsTestComp1 s pi6 ==> 2 lines $$ inDrei open ",
        ,  "--- running s pi6 without pipe",
        ,  " inDrei open ",
        ,  " inDrei close",
        ,  "--- running s pi6 piping",
        ,  " inDrei open ",
        ,  "--- writing 2 lines",
        ,  "--- closing run",   /* wkOld war nach >inDrei */
        ,  "inDrei< writeLn line one >inDrei",
        ,  "inDrei< writeLn line two >inDrei",
        ,  " inDrei close"
    call piTestComp1 's pi6', wrArgs('xyz',0,
       , '$$ inDrei open ',
       , '$:in m.line="inDrei<" m.line ">inDrei"  $:cl $$ inDrei close')
    call wrTest pT,
        ,  "--- rsTestComp1 s pi7 ==> 3 lines $$ wrVier open ",
        ,  "--- running s pi7 without pipe",
        ,  " wrVier open ",
        ,  " wrVier close",
        ,  "--- running s pi7 piping",
        ,  " wrVier open ",
        ,  "--- writing 2 lines",
        ,  "--- closing run",   /* wkOld war nach line one */
        ,  "wrVier stem.2 first writeLn line one",
        ,  " wrVier close"
    call piTestComp1 's pi7', wrArgs('xyz',0,
       , '$$ wrVier open ',
       , '$:wr $| "wrVier stem."m.stem.0 "first" m.stem.1',
       , ' $:cl $$ wrVier close')
    call wrTest pT,
        ,  "--- rsTestComp1 s pi8 ==> 5 lines    call piWC ""ch1 li"",",
        || " ""ch1 op"", ""ch1 cl """,
        ,  "--- running s pi8 without pipe",
        ,  "ch2 op",
        ,  "ch2 li  wrFuenf open ",
        ,  "ch2 li wrFuenf stem.2 first ch1 op",
        ,  "ch2 li  wrFuenf close",
        ,  "ch2 cl  3 lines and 55 characters",
        ,  "--- running s pi8 piping",
        ,  "ch2 op",
        ,  "--- writing 2 lines",
        ,  "--- closing run",   /* wkOld war nach two */
        ,  "ch2 li  wrFuenf open ",
        ,  "ch2 li wrFuenf stem.4 first ch1 op",
        ,  "ch2 li  wrFuenf close",
        ,  "ch2 cl  3 lines and 55 characters"
    call piTestComp1 's pi8', wrArgs('xyz',0,
       , '   call piWC "ch1 li", "ch1 op", "ch1 cl "',
       , '$! $$ wrFuenf open ',
       , '   $:wr $| "wrFuenf stem."m.stem.0 "first" m.stem.1',
       , '   $:cl $$ wrFuenf close',
       , '$! call piWC "ch2 li", "ch2 op", "ch2 cl "')
    call outPop
    call wrTestTotal pT
    return
endProcedure piTestComp

piTestComp1:
parse arg typ, st
   call wrTestOut pT, 'rsTestComp1' typ '==>' m.st.0 'lines' m.st.1
   code = rsCompile(pC, st, left(typ, 1)'p') /* nur mit pipe | */
   say 'code' code
   call wrTestOut pT, 'running' typ 'without pipe'
   call rsRun code
   call wrTestOut pT, 'running' typ 'piping'
   call outPush , pR
   call rsRun code
   call wrTestOut pT, 'writing 2 lines'
   call writeLn pR, 'writeLn line one', 'writeLn line two'
   call wrTestOut pT, 'closing run'
   call wrClose pR
   call outPop
   call wrClose pT
   return
endProcedure piTestComp1

piTestSeq: procedure expose m.
    pT = wrNew()
    call outPush pT
    sq = piSeqNew()
    call piSeqAdd sq, 'call outLn "first seq"'
    call piSeqAdd sq, 'call outLn "second seq"'
    call piSeqAdd sq, 'call piWC "seq3 li", "seq3 op", "seq3 cl"'
    call piSeqAdd sq, 'call outLn "four th seq"'
    call piSeqAdd sq, 'call piWC "seq5 li", "seq5 op", "seq5 cl"'
    call piSeqAdd sq, 'call outLn "six th seq end"'

    call wrTest pT,
       ,  "--- before piSeq immediate",
       ,  "first seq",
       ,  "second seq",
       ,  "seq3 op",
       ,  "seq3 cl 0 lines and 0 characters",
       ,  "four th seq",
       ,  "seq5 op",
       ,  "seq5 cl 0 lines and 0 characters",
       ,  "six th seq end",
       ,  "--- before piSeq close"
    call wrTestOut pt, 'before piSeq immediate'
    call piSeq sq
    call wrTestOut pt, 'before piSeq close'
    call wrClose sq
    call wrClose pT

    call outPop
    pp = wrNew('abc')
    call outPush pT, pP
    call wrTest pT,
       ,  "--- before piSeq in pipe no write",
       ,  "--- before piSeq close",
       ,  "first seq",
       ,  "second seq",
       ,  "seq3 op",
       ,  "seq3 cl 0 lines and 0 characters",
       ,  "four th seq",
       ,  "seq5 op",
       ,  "seq5 cl 0 lines and 0 characters",
       ,  "six th seq end"
    call wrTestOut pt, 'before piSeq in pipe no write'
    call piSeq sq
    call wrTestOut pt, 'before piSeq close'
    call wrClose pp
    call wrClose pT

    call wrTest pT,
       ,  "--- before piSeq in pipe 2 writes",
       ,  "--- before write",
       ,  "--- before piSeq close",  /* wkOld war nach before close*/
       ,  "first seq",
       ,  "second seq",
       ,  "seq3 op",
       ,  "seq3 li writeLn line one",
       ,  "seq3 li and two before close",
       ,  "seq3 cl 2 lines and 36 characters",
       ,  "four th seq",
       ,  "seq5 op",
       ,  "seq5 cl 0 lines and 0 characters",
       ,  "six th seq end"
    call wrTestOut pt, 'before piSeq in pipe 2 writes'
    call piSeq sq
    call wrTestOut pt, 'before write'
    call writeLn pp, 'writeLn line one', 'and two before close'
    call wrTestOut pt, 'before piSeq close'
    call wrClose pp
    call wrClose pT

    call outPop
    call wrTestTotal pT
    return
endProcedure piTestSeq

piTestPipe: procedure expose m.
    pT = wrNew()
    pR = wrNew('abc')
    call outPush pT, pR
    call wrTest pT,
       ,  "--- piTest begin pipe(1) no wrDefine",
       ,  "zeile eins aus pipe(1)",
       ,  "zeile drei aus pipe(1)",
       ,  "vier und Schluss",
       ,  "--- piTest begin pipe(1) with wrDefine",
       ,  "zeile eins aus pipe(1)",
       ,  "--- before piCh1 piWriClose",
       ,  "zeile drei aus pipe(1) nach wrDefine",
       ,  "vier",
       ,  "--- before piCh1 piEnd",
       ,  "--- after  piCh1 piEnd",
       ,  "piCh1 line writeLn pp zwei",
       ,  "piCh1 line writeLn pp fuenf",    /* wkOld alt nach drei */
       ,  "piCh1 line writeLn pp sechs nach piEnd",
       ,  "piCh1 line sieben vor close",
       ,  "close piCh1"
    call wrTestOut pT, 'piTest begin pipe(1) no wrDefine'
    pp = piNew(1)
    call piBegin pp
    call outLn 'zeile eins aus pipe(1)'
    call writeLn pp, 'writeLn pp zwei, disappear no wrDefine'
    call outLn 'zeile drei aus pipe(1)', 'vier und Schluss'
    call piEnd pp, 1
    call wrTestOut pT, 'piTest begin pipe(1) with wrDefine'
    call piBegin pp
    call outLn 'zeile eins aus pipe(1)'
    call writeLn pp, 'writeLn pp zwei'
    call wrTestOut pT, 'before piCh1 piWriClose'
    call piDefine , "call outLn 'close piCh1'",
                    , "call outLn 'piCh1 line' m.line"
    call outLn 'zeile drei aus pipe(1) nach wrDefine', 'vier'
    call writeLn pp, 'writeLn pp fuenf'
    call wrTestOut pT, 'before piCh1 piEnd'
    call piEnd pp, 0
    call wrTestOut pT, 'after  piCh1 piEnd'
    call writeLn pp, 'writeLn pp sechs nach piEnd', 'sieben vor close'
    call wrClose pp
    call wrClose pT
    call wrTest pT,
       ,  "--- piTest begin pipe(1) immediate",
       ,  "zeile eins aus pipe(1)",
       ,  "--- before piCh1 piWriClose",
       ,  "zeile drei aus pipe(1) nach wrDefine",
       ,  "vier",
       ,  "--- before piCh1 piEnd immediate",
       ,  "piCh1 line writeLn pp zwei",
       ,  "piCh1 line writeLn pp fuenf",    /* wkOld alt nach vier */
       ,  "close piCh1",
       ,  "--- after  piCh1 piEnd immediate"
    call wrTestOut pT, 'piTest begin pipe(1) immediate'
    call piBegin pp
    call outLn 'zeile eins aus pipe(1)'
    call writeLn pp, 'writeLn pp zwei'
    call wrTestOut pT, 'before piCh1 piWriClose'
    call piDefine , "call outLn 'close piCh1'",
                    , "call outLn 'piCh1 line' m.line"
    call outLn 'zeile drei aus pipe(1) nach wrDefine', 'vier'
    call writeLn pp, 'writeLn pp fuenf'
    call wrTestOut pT, 'before piCh1 piEnd immediate'
    call piEnd pp, 1
    call wrTestOut pT, 'after  piCh1 piEnd immediate'
    call wrClose pT
    call wrTest pT,
       ,  "--- piTest begin pipe(2) ",
       ,  "--- before piCh1 piWriClose",
       ,  "outLn piCh2 fuenf nach bar",
       ,  "outLn piCh2 sieben vor wrDefine",
       ,  "--- before piCh2 piDefine",
       ,  "zeile acht aus piCh2 nach wrDefine",
       ,  "vier vor bar",
       ,  "--- before piCh1 piEnd 0",
       ,  "--- after  piEnd 0 vor close",
       ,  "piCh2 line zeile eins aus piCh1",
       ,  "piCh2 line zeile drei aus piCh1 nach wrDefine",
       ,  "piCh2 line vier vor bar",
       ,  "piCh2 line piCh1 line writeLn pp zwei", /* wkOld na sechs */
       ,  "piCh2 line piCh1 line writeLn pp sechs",
       ,  "piCh2 line close piCh1",
       ,  "close piCh2"
    call wrTestOut pT, 'piTest begin pipe(2) '
    pp = piNew(2)
    call piBegin pp
    call outLn 'zeile eins aus piCh1'
    call writeLn pp, 'writeLn pp zwei'
    call wrTestOut pT, 'before piCh1 piWriClose'
    call piDefine , "call outLn 'close piCh1'",
                    , "call outLn 'piCh1 line' m.line"
    call outLn 'zeile drei aus piCh1 nach wrDefine', 'vier vor bar'
    call piBar
    call outLn 'outLn piCh2 fuenf nach bar'
    call writeLn pp, 'writeLn pp sechs'
    call outLn 'outLn piCh2 sieben vor wrDefine'
    call wrTestOut pT, 'before piCh2 piDefine'
    call piDefine , "call outLn 'close piCh2'",
                    , "call outLn 'piCh2 line' m.line"
    call outLn 'zeile acht aus piCh2 nach wrDefine', 'vier vor bar'
    call wrTestOut pT, 'before piCh1 piEnd 0'
    call piEnd pp, 0
    call wrTestOut pT, 'after  piEnd 0 vor close'
    call wrClose pp
    call wrClose pT
    call wrTest pT,
       ,  "--- piTest begin pipe(2) ",
       ,  "--- before piCh1 piWriClose",
       ,  "outLn piCh2 fuenf nach bar",
       ,  "outLn piCh2 sieben vor wrDefine",
       ,  "--- before piCh2 piDefine",
       ,  "zeile acht aus piCh2 nach wrDefine",
       ,  "vier vor bar",
       ,  "--- before piCh1 piEnd 0",
       ,  "--- after  piEnd ",
       ,  "piCh2 line zeile eins aus piCh1",
       ,  "piCh2 line zeile drei aus piCh1 nach wrDefine",
       ,  "piCh2 line vier vor bar",
       ,  "piCh2 line piCh1 line writeLn pp zwei", /*wkOld nach sechs*/
       ,  "piCh2 line piCh1 line writeLn pp sechs",
       ,  "piCh2 line piCh1 line neun nach end",
       ,  "piCh2 line piCh1 line zehn schluss",
       ,  "piCh2 line close piCh1",
       ,  "close piCh2"
    call wrTestOut pT, 'piTest begin pipe(2) '
    pp = piNew(2)
    call piBegin pp
    call outLn 'zeile eins aus piCh1'
    call writeLn pp, 'writeLn pp zwei'
    call wrTestOut pT, 'before piCh1 piWriClose'
    call piDefine , "call outLn 'close piCh1'",
                    , "call outLn 'piCh1 line' m.line"
    call outLn 'zeile drei aus piCh1 nach wrDefine', 'vier vor bar'
    call piBar
    call outLn 'outLn piCh2 fuenf nach bar'
    call writeLn pp, 'writeLn pp sechs'
    call outLn 'outLn piCh2 sieben vor wrDefine'
    call wrTestOut pT, 'before piCh2 piDefine'
    call piDefine , "call outLn 'close piCh2'",
                    , "call outLn 'piCh2 line' m.line"
    call outLn 'zeile acht aus piCh2 nach wrDefine', 'vier vor bar'
    call wrTestOut pT, 'before piCh1 piEnd 0'
    call piEnd pp, 0
    call wrTestOut pT, 'after  piEnd '
    call writeLn pp, 'neun nach end', 'zehn schluss'
    call wrClose pp
    call wrClose pT
    call wrTest pT,
       ,  "--- piTestWc chi 4 end 0 writes 0",
       ,  "piCh4 open",
       ,  "--- before piEnd 0",
       ,  "--- before write 0",
       ,  "--- before close",
       ,  "piCh4 line piCh3 open",
       ,  "piCh4 line piCh3 line piCh2 open",
       ,  "piCh4 line piCh3 line piCh2 line piCh1 open",
       ,  "piCh4 line piCh3 line piCh2 line piCh1 close 0 lines and 0",
       || " characters",
       ,  "piCh4 line piCh3 line piCh2 close 2 lines and 46 character",
       || "s",
       ,  "piCh4 line piCh3 close 4 lines and 115 characters",
       ,  "piCh4 close 6 lines and 207 characters"
    pp = piNew(4)
    call piTestWC pp, pT, 4, 0, 0
    call wrClose pT

    call wrTest pT,
       ,  "--- piTestWc chi 4 end 1 writes 0",
       ,  "piCh4 open",
       ,  "--- before piEnd 1",
       ,  "piCh4 line piCh3 open",
       ,  "piCh4 line piCh3 line piCh2 open",
       ,  "piCh4 line piCh3 line piCh2 line piCh1 open",
       ,  "piCh4 line piCh3 line piCh2 line piCh1 close 0 lines and 0",
       || " characters",
       ,  "piCh4 line piCh3 line piCh2 close 2 lines and 46 character",
       || "s",
       ,  "piCh4 line piCh3 close 4 lines and 115 characters",
       ,  "piCh4 close 6 lines and 207 characters",
       ,  "--- before write 0",
       ,  "--- before close"
    call piTestWC pp, pT, 4, 1, 0
    call wrClose pT

    call wrTest pT,
       ,  "--- piTestWc chi 4 end 0 writes 4",
       ,  "piCh4 open",
       ,  "--- before piEnd 0",
       ,  "--- before write 4",
       ,  "--- before close",  /* wkOld war nach end4 */
       ,  "piCh4 line piCh3 open",
       ,  "piCh4 line piCh3 line piCh2 open",
       ,  "piCh4 line piCh3 line piCh2 line piCh1 open",
       ,  "piCh4 line piCh3 line piCh2 line piCh1 line write after en",
       || "d 1",
       ,  "piCh4 line piCh3 line piCh2 line piCh1 line write after en",
       || "d 2",
       ,  "piCh4 line piCh3 line piCh2 line piCh1 line write after en",
       || "d 3",
       ,  "piCh4 line piCh3 line piCh2 line piCh1 line write after en",
       || "d 4",
       ,  "piCh4 line piCh3 line piCh2 line piCh1 close 4 lines and 6",
       || "8 characters",
       ,  "piCh4 line piCh3 line piCh2 close 6 lines and 159 characte",
       || "rs",
       ,  "piCh4 line piCh3 close 8 lines and 273 characters",
       ,  "piCh4 close 10 lines and 409 characters"
    call piTestWC pp, pT, 4, 0, 4
    call wrClose pT
    call wrTest pT,
       ,  "--- piTestWc chi 4 end 0 writes 4",
       ,  "--- before piEnd 0",
       ,  "--- before write 4",
       ,  "--- before close",
       ,  "--- wrFromDs stem=abc",
       ,  "piCh4 open",
       ,  "piCh4 line piCh3 open",
       ,  "piCh4 line piCh3 line piCh2 open",
       ,  "piCh4 line piCh3 line piCh2 line piCh1 open",
       ,  "piCh4 line piCh3 line piCh2 line piCh1 line write after en",
       || "d 1",
       ,  "piCh4 line piCh3 line piCh2 line piCh1 line write after en",
       || "d 2",
       ,  "piCh4 line piCh3 line piCh2 line piCh1 line write after en",
       || "d 3",
       ,  "piCh4 line piCh3 line piCh2 line piCh1 line write after en",
       || "d 4",
       ,  "piCh4 line piCh3 line piCh2 line piCh1 close 4 lines and 6",
       || "8 characters",
       ,  "piCh4 line piCh3 line piCh2 close 6 lines and 159 characte",
       || "rs",
       ,  "piCh4 line piCh3 close 8 lines and 273 characters",
       ,  "piCh4 close 10 lines and 409 characters"
    pp = piNew(4,0,1)
    call piTestWC pp, pT, 4, 0, 4, 'stem=abc'
    call wrTestOut pT, 'wrFromDs stem=abc'
    call wrFromDS pT, 'stem=abc'
    call wrClose pT

    call wrTest pT,
       ,  "--- pipe both redirections start",
       ,  "--- after piEnd state c",
       ,  "--- after piClose state c",
       ,  "--- wrFromDs stem=ghi",
       ,  "piCh2 open",
       ,  "piCh2 line def eins",
       ,  "piCh2 line def zwei",
       ,  "piCh2 line def drei",
       ,  "piCh2 close 3 lines and 24 characters"
    call wrTestOut pT, 'pipe both redirections start'
    pp = piNew(1,1,1)
    call wrArgs "def", 0, 'def eins', 'def zwei', 'def drei'
    call piBegin pp, 'stem=ghi'
    call piDefine , 'call wrFromDs m.wr.out, "stem=def"'
    call piBar
    call piWC 'piCh2 line', 'piCh2 open', 'piCh2 close'
    call piEnd pp
    call wrTestOut pT, 'after piEnd state' m.wr.prcSta.pp
    call wrClose pp
    call wrTestOut pT, 'after piClose state' m.wr.prcSta.pp
    call wrTestOut pT, 'wrFromDs stem=ghi'
    call wrFromDS pT, 'stem=ghi'
    call wrClose pT
    call outPop

    call wrTestTotal pT
    return
endProcedure piTestPipe

piTestWC: procedure expose m.
parse arg pp, pT, cCh, cEnd, cAf, cBeg
    call wrTestOut pT, 'piTestWc chi' cCh 'end' cEnd 'writes' cAf
    call piBegin pp, cBeg
    call piWC 'piCh1 line', 'piCh1 open', 'piCh1 close'
    do c=2 to cCh
        call piBar
        call piWC 'piCh'c 'line', 'piCh'c 'open', 'piCh'c 'close'
        end
    call wrTestOut pT, 'before piEnd' cEnd
    call piEnd pp, cEnd
    call wrTestOut pT, 'before write' cAf
    do c=1 to cAf
        call writeLn pp, 'write after end' c
        end
    call wrTestOut pT, 'before close'
    call wrClose pp
    return
endProcedure piTestWC
/* copy piTest end **************************************************/