import err

byte pstrlen(pointer str) {
    return str[0]
}

sbyte pstrcmp(pointer str1, pointer str2) {
    byte size
    byte i
    size = str1[0]
    if str2[0] < size {
        size = str2[0]
    }
    for i,1,to,size{
        if str1[i] != str2[i] {
            if str1[i] < str2[i] { return -1 }
            return 1
        }
    }
    if str1[0] == size {
        if str2[0] == size { return 0 }
        return -1
    }
    return 1
}

void pstrcopy(pointer dest, pointer src) {
    byte i
    byte size
    size = src[0]
    for i,0,parallelto,size{
        dest[i] = src[i]
    }
}

void pstrappend(pointer buffer, pointer str) {
    byte i
    byte size
    pointer dest
    dest = buffer + buffer[0] + 1
    size = str[0]
    for i,0,paralleluntil,size{
        dest[i] = str[i + 1]
    }
    buffer[0] += size
}

void pstrpaste(pointer dest, pointer str) {
    byte i, size
    dest -= 1
    size = str[0]
    for i,1,parallelto,size{
        dest[i] = str[i]
    }
}

void pstrappendchar(pointer buffer, byte char) {
   buffer[0] += 1
   buffer[buffer[0]] = char
}

word pstr2word(pointer str) {
    byte size, i, char
    word next, result
    result = 0
    size = str[0]
    errno = err_ok
    for i,1,to,size {
        char = str[i]
        if '0' <= char <= '0' + 9 {
            next = result * 10
            next += char - '0'
            if next < result {
                errno = err_range
            }
            result = next
        } else {
            errno = err_numberformat
            return result
        }
    }
    return result
}