//===-- editlinewin.h -------------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#pragma once

#include <stdio.h>

// EditLine editor function return codes.
// For user-defined function interface
#define CC_NORM 0
#define CC_NEWLINE 1
#define CC_EOF 2
#define CC_ARGHACK 3
#define CC_REFRESH 4
#define CC_CURSOR 5
#define CC_ERROR 6
#define CC_FATAL 7
#define CC_REDISPLAY 8
#define CC_REFRESH_BEEP 9

// el_set/el_get parameters
#define EL_PROMPT 0      // , el_pfunc_t
#define EL_TERMINAL 1    // , const char *
#define EL_EDITOR 2      // , const char *
#define EL_SIGNAL 3      // , int);
#define EL_BIND 4        // , const char *, ..., NULL
#define EL_TELLTC 5      // , const char *, ..., NULL
#define EL_SETTC 6       // , const char *, ..., NULL
#define EL_ECHOTC 7      // , const char *, ..., NULL
#define EL_SETTY 8       // , const char *, ..., NULL
#define EL_ADDFN 9       // , const char *, const char *, el_func_t
#define EL_HIST 10       // , hist_fun_t, const char *
#define EL_EDITMODE 11   // , int
#define EL_RPROMPT 12    // , el_pfunc_t
#define EL_GETCFN 13     // , el_rfunc_t
#define EL_CLIENTDATA 14 // , void *
#define EL_UNBUFFERED 15 // , int
#define EL_PREP_TERM 16  // , int
#define EL_GETTC 17      // , const char *, ..., NULL
#define EL_GETFP 18      // , int, FILE **
#define EL_SETFP 19      // , int, FILE *
#define EL_REFRESH 20    // , void
#define EL_PROMPT_ESC 21 // , prompt_func, Char);              set/get

#define EL_BUILTIN_GETCFN (NULL)

// history defines
#define H_FUNC 0        // , UTSL
#define H_SETSIZE 1     // , const int
#define H_GETSIZE 2     // , void
#define H_FIRST 3       // , void
#define H_LAST 4        // , void
#define H_PREV 5        // , void
#define H_NEXT 6        // , void
#define H_CURR 8        // , const int
#define H_SET 7         // , int
#define H_ADD 9         // , const char *
#define H_ENTER 10      // , const char *
#define H_APPEND 11     // , const char *
#define H_END 12        // , void
#define H_NEXT_STR 13   // , const char *
#define H_PREV_STR 14   // , const char *
#define H_NEXT_EVENT 15 // , const int
#define H_PREV_EVENT 16 // , const int
#define H_LOAD 17       // , const char *
#define H_SAVE 18       // , const char *
#define H_CLEAR 19      // , void
#define H_SETUNIQUE 20  // , int
#define H_GETUNIQUE 21  // , void
#define H_DEL 22        // , int

struct EditLine {};

struct LineInfo {
  const char *buffer;
  const char *cursor;
  const char *lastchar;
};

struct History {};

struct HistEvent {
  int num;
  const char *str;
};

extern "C" {
// edit line API
EditLine *el_init(const char *, FILE *, FILE *, FILE *);
const char *el_gets(EditLine *, int *);
int el_set(EditLine *, int, ...);

void el_end(EditLine *);
void el_reset(EditLine *);
int el_getc(EditLine *, char *);
void el_push(EditLine *, const char *);
void el_beep(EditLine *);
int el_parse(EditLine *, int, const char **);
int el_get(EditLine *, int, ...);
int el_source(EditLine *, const char *);
void el_resize(EditLine *);
const LineInfo *el_line(EditLine *);
int el_insertstr(EditLine *, const char *);
void el_deletestr(EditLine *, int);

// history API
History *history_init(void);
void history_end(History *);
int history(History *, HistEvent *, int, ...);
};
