#!/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 (longout, "DZ:test1")
    {
        field (DTYP, "stream")
        field (OUT,  "@test.proto test1 device")
    }
    record (longin, "DZ:test2")
    {
        field (DTYP, "stream")
        field (INP,  "@test.proto test2 device")
    }
    record (longin, "DZ:test3")
    {
        field (DTYP, "stream")
        field (INP,  "@test.proto test3 device")
    }
    record (longin, "DZ:test4")
    {
        field (DTYP, "stream")
        field (INP,  "@test.proto test4 device")
    }
}

set protocol {
    OutTerminator = LF;
    MaxInput = 4;
    test1 {
           out "%r"; out "%.1r"; out "%.2r"; out "%.3r"; out "%.4r"; out "%.5r";
           out "%#r"; out "%#.1r"; out "%#.2r"; out "%#.3r"; out "%#.4r"; out "%#.5r";
           out "%r"; out "%1r"; out "%2r"; out "%3r"; out "%4r"; out "%5r";
           out "%0r"; out "%01r"; out "%02r"; out "%03r"; out "%04r"; out "%05r";
           out "%#0r"; out "%#01r"; out "%#02r"; out "%#03r"; out "%#04r"; out "%#05r";
           };
    test2 {
        in "%04.4r";        
        out "%08x";
    }
    test3{
        in "%#3r\?";        
        out "%08x";
    }
    test4{
        in "%#03r\?";        
        out "%08x";
    }
}

set startup {
}

set debug 0

startioc

ioccmd {dbpf DZ:test1 0}
assure "\x00\n"
assure "\x00\n"
assure "\x00\x00\n"
assure "\x00\x00\x00\n"
assure "\x00\x00\x00\x00\n"
assure "\x00\x00\x00\x00\x00\n"
assure "\x00\n"
assure "\x00\n"
assure "\x00\x00\n"
assure "\x00\x00\x00\n"
assure "\x00\x00\x00\x00\n"
assure "\x00\x00\x00\x00\x00\n"
assure "\x00\n"
assure "\x00\n"
assure "\x00\x00\n"
assure "\x00\x00\x00\n"
assure "\x00\x00\x00\x00\n"
assure "\x00\x00\x00\x00\x00\n"
assure "\x00\n"
assure "\x00\n"
assure "\x00\x00\n"
assure "\x00\x00\x00\n"
assure "\x00\x00\x00\x00\n"
assure "\x00\x00\x00\x00\x00\n"
assure "\x00\n"
assure "\x00\n"
assure "\x00\x00\n"
assure "\x00\x00\x00\n"
assure "\x00\x00\x00\x00\n"
assure "\x00\x00\x00\x00\x00\n"

ioccmd {dbpf DZ:test1 1}
assure "\x01\n"
assure "\x01\n"
assure "\x00\x01\n"
assure "\x00\x00\x01\n"
assure "\x00\x00\x00\x01\n"
assure "\x00\x00\x00\x00\x01\n"
assure "\x01\n"
assure "\x01\n"
assure "\x01\x00\n"
assure "\x01\x00\x00\n"
assure "\x01\x00\x00\x00\n"
assure "\x01\x00\x00\x00\x00\n"
assure "\x01\n"
assure "\x01\n"
assure "\x00\x01\n"
assure "\x00\x00\x01\n"
assure "\x00\x00\x00\x01\n"
assure "\x00\x00\x00\x00\x01\n"
assure "\x01\n"
assure "\x01\n"
assure "\x00\x01\n"
assure "\x00\x00\x01\n"
assure "\x00\x00\x00\x01\n"
assure "\x00\x00\x00\x00\x01\n"
assure "\x01\n"
assure "\x01\n"
assure "\x01\x00\n"
assure "\x01\x00\x00\n"
assure "\x01\x00\x00\x00\n"
assure "\x01\x00\x00\x00\x00\n"

ioccmd {dbpf DZ:test1 -1}
assure "\xff\n"
assure "\xff\n"
assure "\xff\xff\n"
assure "\xff\xff\xff\n"
assure "\xff\xff\xff\xff\n"
assure "\xff\xff\xff\xff\xff\n"
assure "\xff\n"
assure "\xff\n"
assure "\xff\xff\n"
assure "\xff\xff\xff\n"
assure "\xff\xff\xff\xff\n"
assure "\xff\xff\xff\xff\xff\n"
assure "\xff\n"
assure "\xff\n"
assure "\xff\xff\n"
assure "\xff\xff\xff\n"
assure "\xff\xff\xff\xff\n"
assure "\xff\xff\xff\xff\xff\n"
assure "\xff\n"
assure "\xff\n"
assure "\x00\xff\n"
assure "\x00\x00\xff\n"
assure "\x00\x00\x00\xff\n"
assure "\x00\x00\x00\x00\xff\n"
assure "\xff\n"
assure "\xff\n"
assure "\xff\x00\n"
assure "\xff\x00\x00\n"
assure "\xff\x00\x00\x00\n"
assure "\xff\x00\x00\x00\x00\n"

ioccmd {dbpf DZ:test1 269554195}
assure "\x13\n"
assure "\x13\n"
assure "\x12\x13\n"
assure "\x11\x12\x13\n"
assure "\x10\x11\x12\x13\n"
assure "\x00\x10\x11\x12\x13\n"
assure "\x13\n"
assure "\x13\n"
assure "\x13\x12\n"
assure "\x13\x12\x11\n"
assure "\x13\x12\x11\x10\n"
assure "\x13\x12\x11\x10\x00\n"
assure "\x13\n"
assure "\x13\n"
assure "\x00\x13\n"
assure "\x00\x00\x13\n"
assure "\x00\x00\x00\x13\n"
assure "\x00\x00\x00\x00\x13\n"
assure "\x13\n"
assure "\x13\n"
assure "\x00\x13\n"
assure "\x00\x00\x13\n"
assure "\x00\x00\x00\x13\n"
assure "\x00\x00\x00\x00\x13\n"
assure "\x13\n"
assure "\x13\n"
assure "\x13\x00\n"
assure "\x13\x00\x00\n"
assure "\x13\x00\x00\x00\n"
assure "\x13\x00\x00\x00\x00\n"

ioccmd {dbpf DZ:test1 -559038737}
assure "\xef\n"
assure "\xef\n"
assure "\xbe\xef\n"
assure "\xad\xbe\xef\n"
assure "\xde\xad\xbe\xef\n"
assure "\xff\xde\xad\xbe\xef\n"
assure "\xef\n"
assure "\xef\n"
assure "\xef\xbe\n"
assure "\xef\xbe\xad\n"
assure "\xef\xbe\xad\xde\n"
assure "\xef\xbe\xad\xde\xff\n"
assure "\xef\n"
assure "\xef\n"
assure "\xff\xef\n"
assure "\xff\xff\xef\n"
assure "\xff\xff\xff\xef\n"
assure "\xff\xff\xff\xff\xef\n"
assure "\xef\n"
assure "\xef\n"
assure "\x00\xef\n"
assure "\x00\x00\xef\n"
assure "\x00\x00\x00\xef\n"
assure "\x00\x00\x00\x00\xef\n"
assure "\xef\n"
assure "\xef\n"
assure "\xef\x00\n"
assure "\xef\x00\x00\n"
assure "\xef\x00\x00\x00\n"
assure "\xef\x00\x00\x00\x00\n"

ioccmd {dbpf DZ:test2.PROC 1}
send   "\x01\x02\x03\x04"
assure "01020304\n"
ioccmd {dbpf DZ:test2.PROC 1}
send   "\xde\xad\xbe\xef"
assure "deadbeef\n"
ioccmd {dbpf DZ:test2.PROC 1}
send   "\x00\x00\x00\x00"
assure "00000000\n"

ioccmd {dbpf DZ:test3.PROC 1}
send   "\x04\x03\x02\x01"
assure "00020304\n"
ioccmd {dbpf DZ:test3.PROC 1}
send   "\xde\xad\xbe\xef"
assure "ffbeadde\n"
ioccmd {dbpf DZ:test3.PROC 1}
send   "\x00\x00\x00\x00"
assure "00000000\n"

ioccmd {dbpf DZ:test4.PROC 1}
send   "\x04\x03\x02\x01"
assure "00020304\n"
ioccmd {dbpf DZ:test4.PROC 1}
send   "\xde\xad\xbe\xef"
assure "00beadde\n"
ioccmd {dbpf DZ:test4.PROC 1}
send   "\x00\x00\x00\x00"
assure "00000000\n"


finish
