#!/usr/bin/env tclsh
source streamtestlib.tcl

# Define records, protocol and startup (text goes to files)
# The asynPort "device" is connected to a network TCP socket
# Talk to the socket with send/receive/assure
# Send commands to the ioc shell with ioccmd

set records {
    record (bo, "DZ:ready")
    {
        field (DTYP, "stream")
        field (OUT,  "@test.proto ready device")
        field (PINI, "YES")
    }
    record (longin, "DZ:read")
    {
        field (DTYP, "stream")
        field (INP,  "@test.proto readintr device")
        field (SCAN, "I/O Intr")
        field (FLNK, "DZ:count")
    }
    record (calc, "DZ:count")
    {
        field (INPA, "DZ:count")
        field (CALC, "A+1")
        field (FLNK, "DZ:errorcount")
    }
    record (calc, "DZ:errorcount")
    {
        field (INPA, "DZ:errorcount")
        field (INPB, "DZ:read")
        field (INPC, "DZ:count")
        field (CALC, "A+(B#C)")
    }
    record (longout, "DZ:printresult")
    {
        field (DTYP, "stream")
        field (DOL,  "DZ:read")
        field (OMSL, "closed_loop")
        field (OUT,  "@test.proto printresult device")
    }
}

set protocol {
    Terminator = LF;
    PollPeriod=10;
    ReadTimeout=50;
    ready {out "ready"; }
    readintr {in "This is a line in chunks with number %d"; }
    printresult {out "Last line received: %d";
                 out "Line count: %(DZ:count)d";
                 out "Error count: %(DZ:errorcount)d"; }
}

set startup {
}

set debug 0

startioc

set rep 10

assure "ready\n"
for {set i 1} {$i <= $rep} {incr i} {
    send "This "
    after 10
    send "is a "
    after 10
    send "line in chunks "
    after 10
    send "with number $i\n"
    after 100
}
ioccmd {dbpf "DZ:printresult.PROC" 1}
assure "Last line received: $rep\n"
assure "Line count: $rep\n"
assure "Error count: 0\n"
finish

