/* Reading from and writting to the server.
 *  NOTE: the IO has no clue we are using sockets.
 */
#ifndef FU_IO_H
#define FU_IO_H

#include <unistd.h>

/* The script-fu server protocol uses leading bytes
 *  to communicate meta information for clients.
 *  YYY: https://docs.gimp.org/2.10/en/gimp-filters-script-fu.html#plug-in-script-fu-console
 */
struct alignas(1) fu_response_header_t {
    char magic_byte;    // ^G
    char error_code;    // 0 on success
    char high;
    char low;
};

/* Number of bytes fu_response_header::high and fu_response_header::low encode,
 *  as defined by the script-fu documentation.
 */
const int MAX_CHUNK = 256;

/* Socket file descriptor
 */
extern int fu_fd;

#define PS1 "> " /* default value for prompt1 */
extern const char * prompt1;
extern const char * prompt2;

extern "C" {
    void fu_transmit(const char * const s);
    const char * const fu_recieve(fu_response_header_t &header);
    void put_response(fu_response_header_t h, const char * const s);
}

char * fu_readline(bool is_1 = true);

#endif