NAME=ps+ libc++ 32bit
FILE=bins/elf/stdstring32-libc++.LOAD1
ARGS=-n -m 0x08049ee8
CMDS=<<EOF
on bins/elf/stdstring32-libc++.heap 0x09eb8000 > /dev/null
f obj.empty_str 12 @ 0x0804a064
f obj.long_str1 12 @ 0x0804a04c
f obj.short_str1 12 @ 0x0804a034
f obj.long_str2 12 @ 0x0804a058
f obj.short_str2 12 @ 0x0804a040
e asm.bits=32
e str.search.encoding=utf8
ps+ @ obj.short_str1
ps+ @ obj.short_str2
ps+ @ obj.empty_str
ps+ @ obj.long_str1
ps+ @ obj.long_str2
EOF
EXPECT=<<EOF
a
abcdefghij

abcdefghijk
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
EOF
RUN

NAME=ps+ libc++ 64bit
FILE=bins/elf/stdstring64-libc++.LOAD1
ARGS=-n -m 0x00600dc8
CMDS=<<EOF
on bins/elf/stdstring64-libc++.heap 0x0128b000 > /dev/null
f obj.empty_str 24 @ 0x006010b8
f obj.long_str1 24 @ 0x00601088
f obj.short_str1 24 @ 0x00601058
f obj.long_str2 24 @ 0x006010a0
f obj.short_str2 24 @ 0x00601070
e asm.bits=64
e str.search.encoding=utf8
ps+ @ obj.short_str1
ps+ @ obj.short_str2
ps+ @ obj.empty_str
ps+ @ obj.long_str1
ps+ @ obj.long_str2
EOF
EXPECT=<<EOF
a
abcdefghijklmnopqrstuv

abcdefghijklmnopqrstuvw
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
EOF
RUN

NAME=psn escapes newlines (#10037)
FILE==
CMDS=<<EOF
wz abc\n123\n
psn @! 9
EOF
EXPECT=<<EOF
abc\x0a123\x0a\x00
EOF
RUN

NAME=ps N and initial nulls (#10037)
FILE==
CMDS=<<EOF
ps block @! 1
ps block @! 2
ps block @! 3
ps block @! 4
ps block @! 8
EOF
EXPECT=<<EOF
\x00
\x00\x00
\x00\x00\x00
\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00
EOF
RUN

NAME=ps+ libc++ 16bit error
FILE==
CMDS=<<EOF
e asm.arch=x86
e asm.bits=16
f obj.empty_str 12 @ 0x0804a064
ps+ @ obj.empty_str
EOF
EXPECT_ERR=<<EOF
ERROR: core: 16 bits are not supported by ps+
EOF
RUN

NAME=psc define C C++ string
FILE==
CMDS=<<EOF
wx 90919241424322
psc @! 7
EOF
EXPECT=<<EOF
#define STRING_SIZE 7
const char s[STRING_SIZE] = "\x90\x91\x92\x41\x42\x43\x22";
EOF
RUN

NAME=psc define C C++ multiline string
FILE==
CMDS=<<EOF
wx 909192414243229091924142432290919241424322
psc @! 21
EOF
EXPECT=<<EOF
#define STRING_SIZE 21
const char s[STRING_SIZE] = "\x90\x91\x92\x41\x42\x43\x22\x90\x91\x92\x41\x42\x43\x22\x90\x91"
                            "\x92\x41\x42\x43\x22";
EOF
RUN