Updated forked linenoise to latest upstream.

This removes the need to force it to build as C++, and adds proper UTF-8
support for Windows.

Since this is a fork of linenoise, there's no hope for getting
lua-linenoise to sync with it upstream.  I made the bare minimum changes
to keep it working, but didn't add bindings for new functionality (e.g.
multi-line editing).
This commit is contained in:
Vas Crabb 2023-03-07 05:33:37 +11:00
parent e9ecdc9a6e
commit 8384223ac8
14 changed files with 2558 additions and 1321 deletions

View File

@ -1,13 +1,23 @@
all: linenoise_example linenoise_utf8_example linenoise_cpp_example
CFLAGS += -Wall -W -Os -g
CC ?= gcc
linenoise_example: linenoise.h linenoise.c example.c
$(CC) -Wall -W -Os -g -o $@ linenoise.c example.c
all: linenoise_example linenoise_utf8_example
linenoise_utf8_example: linenoise.c utf8.c example.c
$(CC) -DNO_COMPLETION -DUSE_UTF8 -Wall -W -Os -g -o $@ linenoise.c utf8.c example.c
linenoise_example: linenoise.h linenoise-ship.c linenoise-win32.c example.c
$(CC) $(CFLAGS) -o $@ linenoise-ship.c example.c
linenoise_cpp_example: linenoise.h linenoise.c
g++ -Wall -W -Os -g -o $@ linenoise.c example.c
linenoise_utf8_example: linenoise.h linenoise-ship.c linenoise-win32.c
$(CC) $(CFLAGS) -DUSE_UTF8 -o $@ linenoise-ship.c example.c
clean:
rm -f linenoise_example linenoise_utf8_example linenoise_cpp_example *.o
rm -f linenoise_example linenoise_utf8_example linenoise-ship.c *.o
ship: linenoise-ship.c
# linenoise-ship.c simplifies delivery of linenoise support
# simple copy linenoise-ship.c to linenoise.c in your application, and also linenoise.h
# - If you want win32 support, also copy linenoise-win32.c
# - If you never want to support utf-8, you can omit utf8.h and utf8.c
linenoise-ship.c: utf8.h utf8.c stringbuf.h stringbuf.c linenoise.c
cat $^ >$@

View File

@ -1,5 +1,74 @@
# Linenoise
## What's different in this fork?
- Win32 console
- full utf8 support (what about utf8 on windows)
- insert control characters
- now with multiline
## How do I include linenoise line editing support in my application?
From the Makefile:
linenoise-ship.c simplifies delivery of linenoise support
simple copy linenoise-ship.c to linenoise.c in your application, and also linenoise.h
* If you want win32 support, also copy linenoise-win32.c
* If you never want to support utf-8, you can omit utf8.h and utf8.c
To enable utf-8 support, define USE_UTF8
## Where do I get it?
Get it here: [https://github.com/msteveb/linenoise](https://github.com/msteveb/linenoise)
## Key bindings
This version supports the following key bindings:
ctrl-j, Enter Return the current line as the result
ctrl-a, Home Go to the start of the line
ctrl-e, End Go to the end of the line
ctrl-u Delete to beginning of line
ctrl-k Delete to end of line
ctrl-y Insert previously deleted chars at cursor
ctrl-l Clear screen
ctrl-c Quit
ctrl-z Exit to background (Unix only)
ctrl-h, Backspace Delete char to left of cursor
ctrl-d With empty line - return
ctrl-d, Del Delete char to right of cursor
meta-b Move word left
meta-f Move word right
ctrl-w Delete word to left
ctrl-t Transpose char and cursor and char to left of cursor, then move right
ctrl-v Insert next char as control character
ctrl-b, Left Move one char left
ctrl-f, Right Move one char right
ctrl-p, Up Move to previous history line
ctrl-n, Down Move to next history line
Page-Up Move to start of history
Page-Down Move to end of history
Tab Tab complete
ctrl-r Begin reverse incremental search
In reverse incremental search:
Normal char Add char to incremental search word
ctrl-h, Backspace Remove last char from incremental search word
ctrl-p, Up Move to previous match
ctrl-n, Down Move to next match
ctrl-g, ctrl-c Return to normal mode with empty line
Any other key Return to normal mode with the current line and process the key
--------------------------------------------------------
## Original README below
Can a line editing library be 20k lines of code?
A minimal, zero-config, BSD licensed, readline replacement.
News: linenoise now includes minimal completion support, thanks to Pieter Noordhuis (@pnoordhuis).

View File

@ -5,50 +5,70 @@
#ifndef NO_COMPLETION
void completion(const char *buf, linenoiseCompletions *lc, void *userdata) {
(void)userdata;
if (buf[0] == 'h') {
linenoiseAddCompletion(lc,"hello");
linenoiseAddCompletion(lc,"hello there");
}
}
char *hints(const char *buf, int *color, int *bold, void *userdata) {
(void)userdata;
if (!strcasecmp(buf,"hello")) {
*color = 35;
*bold = 0;
return " World";
}
return NULL;
}
#endif
int main(int argc, char *argv[]) {
const char *prompt = "hello> ";
char *line;
#ifdef HAVE_MULTILINE
/* Note: multiline support has not yet been integrated */
char *prgname = argv[0];
const char *initial;
/* Parse options, with --multiline we enable multi line editing. */
while(argc > 1) {
while(argc > 1 && argv[1][0] == '-') {
argc--;
argv++;
if (!strcmp(*argv,"--multiline")) {
linenoiseSetMultiLine(1);
printf("Multi-line mode enabled.\n");
} else if (!strcmp(*argv,"--fancyprompt")) {
prompt = "\x1b[1;31m\xf0\xa0\x8a\x9d-\xc2\xb5hello>\x1b[0m ";
} else if (!strcmp(*argv,"--prompt") && argc > 1) {
argc--;
argv++;
prompt = *argv;
} else {
fprintf(stderr, "Usage: %s [--multiline]\n", prgname);
fprintf(stderr, "Usage: %s [--multiline] [--fancyprompt] [--prompt text]\n", prgname);
exit(1);
}
}
#endif
#ifndef NO_COMPLETION
/* Set the completion callback. This will be called every time the
* user uses the <tab> key. */
linenoiseSetCompletionCallback(completion, NULL);
linenoiseSetHintsCallback(hints, NULL);
#endif
/* Load history from file. The history file is just a plain text file
* where entries are separated by newlines. */
linenoiseHistoryLoad("history.txt"); /* Load the history at startup */
initial = (argc > 1) ? argv[1] : "";
/* Now this is the main loop of the typical linenoise-based application.
* The call to linenoise() will block as long as the user types something
* and presses enter.
*
* The typed string is returned as a malloc() allocated string by
* linenoise, so the user needs to free() it. */
while((line = linenoise("hello> ")) != NULL) {
while((line = linenoiseWithInitial(prompt, initial)) != NULL) {
initial = "";
/* Do something with the string. */
if (line[0] != '\0' && line[0] != '/') {
printf("echo: '%s'\n", line);

377
3rdparty/linenoise/linenoise-win32.c vendored Normal file
View File

@ -0,0 +1,377 @@
/* this code is not standalone
* it is included into linenoise.c
* for windows.
* It is deliberately kept separate so that
* applications that have no need for windows
* support can omit this
*/
static DWORD orig_consolemode = 0;
static int flushOutput(struct current *current);
static void outputNewline(struct current *current);
static void refreshStart(struct current *current)
{
(void)current;
}
static void refreshEnd(struct current *current)
{
(void)current;
}
static void refreshStartChars(struct current *current)
{
assert(current->output == NULL);
/* We accumulate all output here */
current->output = sb_alloc();
#ifdef USE_UTF8
current->ubuflen = 0;
#endif
}
static void refreshNewline(struct current *current)
{
DRL("<nl>");
outputNewline(current);
}
static void refreshEndChars(struct current *current)
{
assert(current->output);
flushOutput(current);
sb_free(current->output);
current->output = NULL;
}
static int enableRawMode(struct current *current) {
DWORD n;
INPUT_RECORD irec;
current->outh = GetStdHandle(STD_OUTPUT_HANDLE);
current->inh = GetStdHandle(STD_INPUT_HANDLE);
if (!PeekConsoleInput(current->inh, &irec, 1, &n)) {
return -1;
}
if (getWindowSize(current) != 0) {
return -1;
}
if (GetConsoleMode(current->inh, &orig_consolemode)) {
SetConsoleMode(current->inh, ENABLE_PROCESSED_INPUT);
}
#ifdef USE_UTF8
/* XXX is this the right thing to do? */
SetConsoleCP(65001);
#endif
return 0;
}
static void disableRawMode(struct current *current)
{
SetConsoleMode(current->inh, orig_consolemode);
}
void linenoiseClearScreen(void)
{
/* XXX: This is ugly. Should just have the caller pass a handle */
struct current current;
current.outh = GetStdHandle(STD_OUTPUT_HANDLE);
if (getWindowSize(&current) == 0) {
COORD topleft = { 0, 0 };
DWORD n;
FillConsoleOutputCharacter(current.outh, ' ',
current.cols * current.rows, topleft, &n);
FillConsoleOutputAttribute(current.outh,
FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN,
current.cols * current.rows, topleft, &n);
SetConsoleCursorPosition(current.outh, topleft);
}
}
static void cursorToLeft(struct current *current)
{
COORD pos;
DWORD n;
pos.X = 0;
pos.Y = (SHORT)current->y;
FillConsoleOutputAttribute(current->outh,
FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN, current->cols, pos, &n);
current->x = 0;
}
#ifdef USE_UTF8
static void flush_ubuf(struct current *current)
{
COORD pos;
DWORD nwritten;
pos.Y = (SHORT)current->y;
pos.X = (SHORT)current->x;
SetConsoleCursorPosition(current->outh, pos);
WriteConsoleW(current->outh, current->ubuf, current->ubuflen, &nwritten, 0);
current->x += current->ubufcols;
current->ubuflen = 0;
current->ubufcols = 0;
}
static void add_ubuf(struct current *current, int ch)
{
/* This code originally by: Author: Mark E. Davis, 1994. */
static const int halfShift = 10; /* used for shifting by 10 bits */
static const DWORD halfBase = 0x0010000UL;
static const DWORD halfMask = 0x3FFUL;
#define UNI_SUR_HIGH_START 0xD800
#define UNI_SUR_HIGH_END 0xDBFF
#define UNI_SUR_LOW_START 0xDC00
#define UNI_SUR_LOW_END 0xDFFF
#define UNI_MAX_BMP 0x0000FFFF
if (ch > UNI_MAX_BMP) {
/* convert from unicode to utf16 surrogate pairs
* There is always space for one extra word in ubuf
*/
ch -= halfBase;
current->ubuf[current->ubuflen++] = (WORD)((ch >> halfShift) + UNI_SUR_HIGH_START);
current->ubuf[current->ubuflen++] = (WORD)((ch & halfMask) + UNI_SUR_LOW_START);
}
else {
current->ubuf[current->ubuflen++] = ch;
}
current->ubufcols += utf8_width(ch);
if (current->ubuflen >= UBUF_MAX_CHARS) {
flush_ubuf(current);
}
}
#endif
static int flushOutput(struct current *current)
{
const char *pt = sb_str(current->output);
int len = sb_len(current->output);
#ifdef USE_UTF8
/* convert utf8 in current->output into utf16 in current->ubuf
*/
while (len) {
int ch;
int n = utf8_tounicode(pt, &ch);
pt += n;
len -= n;
add_ubuf(current, ch);
}
flush_ubuf(current);
#else
DWORD nwritten;
COORD pos;
pos.Y = (SHORT)current->y;
pos.X = (SHORT)current->x;
SetConsoleCursorPosition(current->outh, pos);
WriteConsoleA(current->outh, pt, len, &nwritten, 0);
current->x += len;
#endif
sb_clear(current->output);
return 0;
}
static int outputChars(struct current *current, const char *buf, int len)
{
if (len < 0) {
len = strlen(buf);
}
assert(current->output);
sb_append_len(current->output, buf, len);
return 0;
}
static void outputNewline(struct current *current)
{
/* On the last row output a newline to force a scroll */
if (current->y + 1 == current->rows) {
outputChars(current, "\n", 1);
}
flushOutput(current);
current->x = 0;
current->y++;
}
static void setOutputHighlight(struct current *current, const int *props, int nprops)
{
int colour = FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN;
int bold = 0;
int reverse = 0;
int i;
for (i = 0; i < nprops; i++) {
switch (props[i]) {
case 0:
colour = FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN;
bold = 0;
reverse = 0;
break;
case 1:
bold = FOREGROUND_INTENSITY;
break;
case 7:
reverse = 1;
break;
case 30:
colour = 0;
break;
case 31:
colour = FOREGROUND_RED;
break;
case 32:
colour = FOREGROUND_GREEN;
break;
case 33:
colour = FOREGROUND_RED | FOREGROUND_GREEN;
break;
case 34:
colour = FOREGROUND_BLUE;
break;
case 35:
colour = FOREGROUND_RED | FOREGROUND_BLUE;
break;
case 36:
colour = FOREGROUND_BLUE | FOREGROUND_GREEN;
break;
case 37:
colour = FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN;
break;
}
}
flushOutput(current);
if (reverse) {
SetConsoleTextAttribute(current->outh, BACKGROUND_INTENSITY);
}
else {
SetConsoleTextAttribute(current->outh, colour | bold);
}
}
static void eraseEol(struct current *current)
{
COORD pos;
DWORD n;
pos.X = (SHORT) current->x;
pos.Y = (SHORT) current->y;
FillConsoleOutputCharacter(current->outh, ' ', current->cols - current->x, pos, &n);
}
static void setCursorXY(struct current *current)
{
COORD pos;
pos.X = (SHORT) current->x;
pos.Y = (SHORT) current->y;
SetConsoleCursorPosition(current->outh, pos);
}
static void setCursorPos(struct current *current, int x)
{
current->x = x;
setCursorXY(current);
}
static void cursorUp(struct current *current, int n)
{
current->y -= n;
setCursorXY(current);
}
static void cursorDown(struct current *current, int n)
{
current->y += n;
setCursorXY(current);
}
static int fd_read(struct current *current)
{
while (1) {
INPUT_RECORD irec;
DWORD n;
if (WaitForSingleObject(current->inh, INFINITE) != WAIT_OBJECT_0) {
break;
}
if (!ReadConsoleInputW(current->inh, &irec, 1, &n)) {
break;
}
if (irec.EventType == KEY_EVENT) {
KEY_EVENT_RECORD *k = &irec.Event.KeyEvent;
if (k->bKeyDown || k->wVirtualKeyCode == VK_MENU) {
if (k->dwControlKeyState & ENHANCED_KEY) {
switch (k->wVirtualKeyCode) {
case VK_LEFT:
return SPECIAL_LEFT;
case VK_RIGHT:
return SPECIAL_RIGHT;
case VK_UP:
return SPECIAL_UP;
case VK_DOWN:
return SPECIAL_DOWN;
case VK_INSERT:
return SPECIAL_INSERT;
case VK_DELETE:
return SPECIAL_DELETE;
case VK_HOME:
return SPECIAL_HOME;
case VK_END:
return SPECIAL_END;
case VK_PRIOR:
return SPECIAL_PAGE_UP;
case VK_NEXT:
return SPECIAL_PAGE_DOWN;
}
}
/* Note that control characters are already translated in AsciiChar */
else if (k->wVirtualKeyCode == VK_CONTROL)
continue;
else {
return k->uChar.UnicodeChar;
}
}
}
}
return -1;
}
static int getWindowSize(struct current *current)
{
CONSOLE_SCREEN_BUFFER_INFO info;
if (!GetConsoleScreenBufferInfo(current->outh, &info)) {
return -1;
}
current->cols = info.dwSize.X;
current->rows = info.dwSize.Y;
if (current->cols <= 0 || current->rows <= 0) {
current->cols = 80;
return -1;
}
current->y = info.dwCursorPosition.Y;
current->x = info.dwCursorPosition.X;
return 0;
}

File diff suppressed because it is too large Load Diff

View File

@ -37,29 +37,38 @@
#ifndef __LINENOISE_H
#define __LINENOISE_H
#ifdef __cplusplus
extern "C" {
#endif
#ifndef NO_COMPLETION
typedef struct linenoiseCompletions {
size_t len;
char **cvec;
int pos;
} linenoiseCompletions;
/*
* The callback type for tab completion handlers.
*/
typedef void(linenoiseCompletionCallback)(const char *prefix, linenoiseCompletions *comp, int pos);
typedef void(linenoiseCompletionCallback)(const char *prefix, linenoiseCompletions *comp, void *userdata);
/*
* Sets the current tab completion handler and returns the previous one, or NULL
* if no prior one has been set.
*/
linenoiseCompletionCallback * linenoiseSetCompletionCallback(linenoiseCompletionCallback *comp);
linenoiseCompletionCallback * linenoiseSetCompletionCallback(linenoiseCompletionCallback *comp, void *userdata);
/*
* Adds a copy of the given string to the given completion list. The copy is owned
* by the linenoiseCompletions object.
*/
void linenoiseAddCompletion(linenoiseCompletions *comp, const char *str, int pos);
void linenoiseAddCompletion(linenoiseCompletions *comp, const char *str);
typedef char*(linenoiseHintsCallback)(const char *, int *color, int *bold, void *userdata);
typedef void(linenoiseFreeHintsCallback)(void *hint, void *userdata);
void linenoiseSetHintsCallback(linenoiseHintsCallback *callback, void *userdata);
void linenoiseSetFreeHintsCallback(linenoiseFreeHintsCallback *callback);
#endif
/*
@ -71,6 +80,11 @@ void linenoiseAddCompletion(linenoiseCompletions *comp, const char *str, int pos
*/
char *linenoise(const char *prompt);
/**
* Like linenoise() but starts with an initial buffer.
*/
char *linenoiseWithInitial(const char *prompt, const char *initial);
/**
* Clear the screen.
*/
@ -123,8 +137,13 @@ char **linenoiseHistory(int *len);
*/
int linenoiseColumns(void);
void linenoisePreloadBuffer(const char* preloadText);
/**
* Enable or disable multiline mode (disabled by default)
*/
void linenoiseSetMultiLine(int enableml);
void linenoiseRefresh(void);
#ifdef __cplusplus
}
#endif
#endif /* __LINENOISE_H */

173
3rdparty/linenoise/stringbuf.c vendored Normal file
View File

@ -0,0 +1,173 @@
/**
* resizable string buffer
*
* (c) 2017-2020 Steve Bennett <steveb@workware.net.au>
*
* See utf8.c for licence details.
*/
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <assert.h>
#ifndef STRINGBUF_H
#include "stringbuf.h"
#endif
#ifdef USE_UTF8
#ifndef UTF8_UTIL_H
#include "utf8.h"
#endif
#endif
#define SB_INCREMENT 200
stringbuf *sb_alloc(void)
{
stringbuf *sb = (stringbuf *)malloc(sizeof(*sb));
sb->remaining = 0;
sb->last = 0;
#ifdef USE_UTF8
sb->chars = 0;
#endif
sb->data = NULL;
return(sb);
}
void sb_free(stringbuf *sb)
{
if (sb) {
free(sb->data);
}
free(sb);
}
static void sb_realloc(stringbuf *sb, int newlen)
{
sb->data = (char *)realloc(sb->data, newlen);
sb->remaining = newlen - sb->last;
}
void sb_append(stringbuf *sb, const char *str)
{
sb_append_len(sb, str, strlen(str));
}
void sb_append_len(stringbuf *sb, const char *str, int len)
{
if (sb->remaining < len + 1) {
sb_realloc(sb, sb->last + len + 1 + SB_INCREMENT);
}
memcpy(sb->data + sb->last, str, len);
sb->data[sb->last + len] = 0;
sb->last += len;
sb->remaining -= len;
#ifdef USE_UTF8
sb->chars += utf8_strlen(str, len);
#endif
}
char *sb_to_string(stringbuf *sb)
{
if (sb->data == NULL) {
/* Return an allocated empty string, not null */
return strdup("");
}
else {
/* Just return the data and free the stringbuf structure */
char *pt = sb->data;
free(sb);
return pt;
}
}
/* Insert and delete operations */
/* Moves up all the data at position 'pos' and beyond by 'len' bytes
* to make room for new data
*
* Note: Does *not* update sb->chars
*/
static void sb_insert_space(stringbuf *sb, int pos, int len)
{
assert(pos <= sb->last);
/* Make sure there is enough space */
if (sb->remaining < len) {
sb_realloc(sb, sb->last + len + SB_INCREMENT);
}
/* Now move it up */
memmove(sb->data + pos + len, sb->data + pos, sb->last - pos);
sb->last += len;
sb->remaining -= len;
/* And null terminate */
sb->data[sb->last] = 0;
}
/**
* Move down all the data from pos + len, effectively
* deleting the data at position 'pos' of length 'len'
*/
static void sb_delete_space(stringbuf *sb, int pos, int len)
{
assert(pos < sb->last);
assert(pos + len <= sb->last);
#ifdef USE_UTF8
sb->chars -= utf8_strlen(sb->data + pos, len);
#endif
/* Now move it up */
memmove(sb->data + pos, sb->data + pos + len, sb->last - pos - len);
sb->last -= len;
sb->remaining += len;
/* And null terminate */
sb->data[sb->last] = 0;
}
void sb_insert(stringbuf *sb, int index, const char *str)
{
if (index >= sb->last) {
/* Inserting after the end of the list appends. */
sb_append(sb, str);
}
else {
int len = strlen(str);
sb_insert_space(sb, index, len);
memcpy(sb->data + index, str, len);
#ifdef USE_UTF8
sb->chars += utf8_strlen(str, len);
#endif
}
}
/**
* Delete the bytes at index 'index' for length 'len'
* Has no effect if the index is past the end of the list.
*/
void sb_delete(stringbuf *sb, int index, int len)
{
if (index < sb->last) {
char *pos = sb->data + index;
if (len < 0) {
len = sb->last;
}
sb_delete_space(sb, pos - sb->data, len);
}
}
void sb_clear(stringbuf *sb)
{
if (sb->data) {
/* Null terminate */
sb->data[0] = 0;
sb->last = 0;
#ifdef USE_UTF8
sb->chars = 0;
#endif
}
}

137
3rdparty/linenoise/stringbuf.h vendored Normal file
View File

@ -0,0 +1,137 @@
#ifndef STRINGBUF_H
#define STRINGBUF_H
/**
* resizable string buffer
*
* (c) 2017-2020 Steve Bennett <steveb@workware.net.au>
*
* See utf8.c for licence details.
*/
#ifdef __cplusplus
extern "C" {
#endif
/** @file
* A stringbuf is a resizing, null terminated string buffer.
*
* The buffer is reallocated as necessary.
*
* In general it is *not* OK to call these functions with a NULL pointer
* unless stated otherwise.
*
* If USE_UTF8 is defined, supports utf8.
*/
/**
* The stringbuf structure should not be accessed directly.
* Use the functions below.
*/
typedef struct {
int remaining; /**< Allocated, but unused space */
int last; /**< Index of the null terminator (and thus the length of the string) */
#ifdef USE_UTF8
int chars; /**< Count of characters */
#endif
char *data; /**< Allocated memory containing the string or NULL for empty */
} stringbuf;
/**
* Allocates and returns a new stringbuf with no elements.
*/
stringbuf *sb_alloc(void);
/**
* Frees a stringbuf.
* It is OK to call this with NULL.
*/
void sb_free(stringbuf *sb);
/**
* Returns an allocated copy of the stringbuf
*/
stringbuf *sb_copy(stringbuf *sb);
/**
* Returns the byte length of the buffer.
*
* Returns 0 for both a NULL buffer and an empty buffer.
*/
static inline int sb_len(stringbuf *sb) {
return sb->last;
}
/**
* Returns the utf8 character length of the buffer.
*
* Returns 0 for both a NULL buffer and an empty buffer.
*/
static inline int sb_chars(stringbuf *sb) {
#ifdef USE_UTF8
return sb->chars;
#else
return sb->last;
#endif
}
/**
* Appends a null terminated string to the stringbuf
*/
void sb_append(stringbuf *sb, const char *str);
/**
* Like sb_append() except does not require a null terminated string.
* The length of 'str' is given as 'len'
*
* Note that in utf8 mode, characters will *not* be counted correctly
* if a partial utf8 sequence is added with sb_append_len()
*/
void sb_append_len(stringbuf *sb, const char *str, int len);
/**
* Returns a pointer to the null terminated string in the buffer.
*
* Note this pointer only remains valid until the next modification to the
* string buffer.
*
* The returned pointer can be used to update the buffer in-place
* as long as care is taken to not overwrite the end of the buffer.
*/
static inline char *sb_str(const stringbuf *sb)
{
return sb->data;
}
/**
* Inserts the given string *before* (zero-based) byte 'index' in the stringbuf.
* If index is past the end of the buffer, the string is appended,
* just like sb_append()
*/
void sb_insert(stringbuf *sb, int index, const char *str);
/**
* Delete 'len' bytes in the string at the given index.
*
* Any bytes past the end of the buffer are ignored.
* The buffer remains null terminated.
*
* If len is -1, deletes to the end of the buffer.
*/
void sb_delete(stringbuf *sb, int index, int len);
/**
* Clear to an empty buffer.
*/
void sb_clear(stringbuf *sb);
/**
* Return an allocated copy of buffer and frees 'sb'.
*
* If 'sb' is empty, returns an allocated copy of "".
*/
char *sb_to_string(stringbuf *sb);
#ifdef __cplusplus
}
#endif
#endif

137
3rdparty/linenoise/teststringbuf.c vendored Normal file
View File

@ -0,0 +1,137 @@
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
#include <assert.h>
#include <stringbuf.h>
static void show_buf(stringbuf *sb)
{
printf("[%d] = %s\n", sb_len(sb), sb_str(sb));
}
#define validate_buf(SB, EXP) validate_buf_(__FILE__, __LINE__, SB, EXP)
static void validate_buf_(const char *file, int line, stringbuf *sb, const char *expected)
{
const char *pt = sb_str(sb);
if (pt == NULL) {
if (expected != NULL) {
fprintf(stderr, "%s:%d: Error: Expected NULL, got '%s'\n", file, line, pt);
abort();
}
}
else if (strcmp(pt, expected) != 0) {
show_buf(sb);
fprintf(stderr, "%s:%d: Error: Expected '%s', got '%s'\n", file, line, expected, pt);
abort();
}
sb_free(sb);
}
int main(void)
{
stringbuf *sb;
char *pt;
sb = sb_alloc();
validate_buf(sb, NULL);
sb = sb_alloc();
sb_append(sb, "hello");
sb_append(sb, "world");
validate_buf(sb, "helloworld");
sb = sb_alloc();
sb_append(sb, "hello");
sb_append(sb, "world");
sb_append(sb, "");
sb_append(sb, "xxx");
assert(sb_len(sb) == 13);
validate_buf(sb, "helloworldxxx");
sb = sb_alloc();
sb_append(sb, "first");
sb_append(sb, "string");
validate_buf(sb, "firststring");
sb = sb_alloc();
sb_append(sb, "");
validate_buf(sb, "");
sb = sb_alloc();
sb_append_len(sb, "one string here", 3);
sb_append_len(sb, "second string here", 6);
validate_buf(sb, "onesecond");
sb = sb_alloc();
sb_append_len(sb, "one string here", 3);
sb_append_len(sb, "second string here", 6);
pt = sb_to_string(sb);
assert(strcmp(pt, "onesecond") == 0);
free(pt);
sb = sb_alloc();
pt = sb_to_string(sb);
assert(strcmp(pt, "") == 0);
free(pt);
sb = sb_alloc();
sb_append(sb, "one");
sb_append(sb, "three");
sb_insert(sb, 3, "two");
validate_buf(sb, "onetwothree");
sb = sb_alloc();
sb_insert(sb, 0, "two");
sb_insert(sb, 0, "one");
sb_insert(sb, 20, "three");
validate_buf(sb, "onetwothree");
sb = sb_alloc();
sb_append(sb, "one");
sb_append(sb, "extra");
sb_append(sb, "two");
sb_append(sb, "three");
sb_delete(sb, 3, 5);
validate_buf(sb, "onetwothree");
sb = sb_alloc();
sb_append(sb, "one");
sb_append(sb, "two");
sb_append(sb, "three");
validate_buf(sb, "onetwothree");
/*sb_delete(sb, 6, -1);*/
/*validate_buf(sb, "onetwo");*/
sb = sb_alloc();
sb_append(sb, "one");
sb_append(sb, "two");
sb_append(sb, "three");
sb_delete(sb, 0, -1);
validate_buf(sb, "");
sb = sb_alloc();
sb_append(sb, "one");
sb_append(sb, "two");
sb_append(sb, "three");
sb_delete(sb, 50, 20);
validate_buf(sb, "onetwothree");
/* OK to sb_free() a NULL pointer */
sb_free(NULL);
#ifdef USE_UTF8
sb = sb_alloc();
sb_append(sb, "oneµtwo");
assert(sb_len(sb) == 8);
assert(sb_chars(sb) == 7);
sb_delete(sb, 3, 2);
assert(sb_len(sb) == 6);
assert(sb_chars(sb) == 6);
validate_buf(sb, "onetwo");
#endif
return(0);
}

View File

@ -1,16 +1,39 @@
/**
* UTF-8 utility functions
*
* (c) 2010-2016 Steve Bennett <steveb@workware.net.au>
* (c) 2010-2019 Steve Bennett <steveb@workware.net.au>
*
* See LICENCE for licence details.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#ifndef UTF8_UTIL_H
#include "utf8.h"
#endif
#ifdef USE_UTF8
int utf8_fromunicode(char *p, unsigned uc)
@ -64,7 +87,7 @@ int utf8_strlen(const char *str, int bytelen)
if (bytelen < 0) {
bytelen = strlen(str);
}
while (bytelen) {
while (bytelen > 0) {
int c;
int l = utf8_tounicode(str, &c);
charlen++;
@ -108,19 +131,28 @@ int utf8_tounicode(const char *str, int *uc)
if (s[0] < 0xe0) {
if ((s[1] & 0xc0) == 0x80) {
*uc = ((s[0] & ~0xc0) << 6) | (s[1] & ~0x80);
return 2;
if (*uc >= 0x80) {
return 2;
}
/* Otherwise this is an invalid sequence */
}
}
else if (s[0] < 0xf0) {
if (((str[1] & 0xc0) == 0x80) && ((str[2] & 0xc0) == 0x80)) {
*uc = ((s[0] & ~0xe0) << 12) | ((s[1] & ~0x80) << 6) | (s[2] & ~0x80);
return 3;
if (*uc >= 0x800) {
return 3;
}
/* Otherwise this is an invalid sequence */
}
}
else if (s[0] < 0xf8) {
if (((str[1] & 0xc0) == 0x80) && ((str[2] & 0xc0) == 0x80) && ((str[3] & 0xc0) == 0x80)) {
*uc = ((s[0] & ~0xf0) << 18) | ((s[1] & ~0x80) << 12) | ((s[2] & ~0x80) << 6) | (s[3] & ~0x80);
return 4;
if (*uc >= 0x10000) {
return 4;
}
/* Otherwise this is an invalid sequence */
}
}
@ -136,52 +168,68 @@ struct utf8range {
/* From http://unicode.org/Public/UNIDATA/UnicodeData.txt */
static const struct utf8range unicode_range_combining[] = {
{ 0x0300, 0x0370 }, { 0x0483, 0x048a }, { 0x0591, 0x05be }, { 0x05bf, 0x05c0 },
{ 0x05c1, 0x05c3 }, { 0x05c4, 0x05c6 }, { 0x05c7, 0x05d0 }, { 0x0610, 0x061b },
{ 0x064b, 0x0660 }, { 0x0670, 0x0671 }, { 0x06d6, 0x06dd }, { 0x06de, 0x06e5 },
{ 0x06e7, 0x06e9 }, { 0x06ea, 0x06ee }, { 0x0711, 0x0712 }, { 0x0730, 0x074d },
{ 0x07a6, 0x07b1 }, { 0x07eb, 0x07f4 }, { 0x0816, 0x081a }, { 0x081b, 0x0824 },
{ 0x0825, 0x0828 }, { 0x0829, 0x0830 }, { 0x0900, 0x0904 }, { 0x093c, 0x093d },
{ 0x093e, 0x0950 }, { 0x0951, 0x0958 }, { 0x0962, 0x0964 }, { 0x0981, 0x0985 },
{ 0x09bc, 0x09bd }, { 0x09be, 0x09ce }, { 0x09d7, 0x09dc }, { 0x09e2, 0x09e6 },
{ 0x0a01, 0x0a05 }, { 0x0a3c, 0x0a59 }, { 0x0a70, 0x0a72 }, { 0x0a75, 0x0a85 },
{ 0x0abc, 0x0abd }, { 0x0abe, 0x0ad0 }, { 0x0ae2, 0x0ae6 }, { 0x0b01, 0x0b05 },
{ 0x0b3c, 0x0b3d }, { 0x0b3e, 0x0b5c }, { 0x0b62, 0x0b66 }, { 0x0b82, 0x0b83 },
{ 0x0bbe, 0x0bd0 }, { 0x0bd7, 0x0be6 }, { 0x0c01, 0x0c05 }, { 0x0c3e, 0x0c58 },
{ 0x0c62, 0x0c66 }, { 0x0c82, 0x0c85 }, { 0x0cbc, 0x0cbd }, { 0x0cbe, 0x0cde },
{ 0x0ce2, 0x0ce6 }, { 0x0d02, 0x0d05 }, { 0x0d3e, 0x0d60 }, { 0x0d62, 0x0d66 },
{ 0x0d82, 0x0d85 }, { 0x0dca, 0x0df4 }, { 0x0e31, 0x0e32 }, { 0x0e34, 0x0e3f },
{ 0x0e47, 0x0e4f }, { 0x0eb1, 0x0eb2 }, { 0x0eb4, 0x0ebd }, { 0x0ec8, 0x0ed0 },
{ 0x0f18, 0x0f1a }, { 0x0f35, 0x0f36 }, { 0x0f37, 0x0f38 }, { 0x0f39, 0x0f3a },
{ 0x0f3e, 0x0f40 }, { 0x0f71, 0x0f85 }, { 0x0f86, 0x0f88 }, { 0x0f90, 0x0fbe },
{ 0x0fc6, 0x0fc7 }, { 0x102b, 0x103f }, { 0x1056, 0x105a }, { 0x105e, 0x1061 },
{ 0x1062, 0x1065 }, { 0x1067, 0x106e }, { 0x1071, 0x1075 }, { 0x1082, 0x108e },
{ 0x108f, 0x1090 }, { 0x109a, 0x109e }, { 0x135f, 0x1360 }, { 0x1712, 0x1720 },
{ 0x1732, 0x1735 }, { 0x1752, 0x1760 }, { 0x1772, 0x1780 }, { 0x17b6, 0x17d4 },
{ 0x17dd, 0x17e0 }, { 0x180b, 0x180e }, { 0x18a9, 0x18aa }, { 0x1920, 0x1940 },
{ 0x19b0, 0x19c1 }, { 0x19c8, 0x19d0 }, { 0x1a17, 0x1a1e }, { 0x1a55, 0x1a80 },
{ 0x1b00, 0x1b05 }, { 0x1b34, 0x1b45 }, { 0x1b6b, 0x1b74 }, { 0x1b80, 0x1b83 },
{ 0x1ba1, 0x1bae }, { 0x1c24, 0x1c3b }, { 0x1cd0, 0x1cd3 }, { 0x1cd4, 0x1ce9 },
{ 0x1ced, 0x1cee }, { 0x1cf2, 0x1d00 }, { 0x1dc0, 0x1e00 }, { 0x20d0, 0x2100 },
{ 0x2cef, 0x2cf9 }, { 0x2de0, 0x2e00 }, { 0x302a, 0x3030 }, { 0x3099, 0x309b },
{ 0xa66f, 0xa673 }, { 0xa67c, 0xa67e }, { 0xa6f0, 0xa6f2 }, { 0xa802, 0xa803 },
{ 0xa806, 0xa807 }, { 0xa80b, 0xa80c }, { 0xa823, 0xa828 }, { 0xa880, 0xa882 },
{ 0xa8b4, 0xa8ce }, { 0xa8e0, 0xa8f2 }, { 0xa926, 0xa92e }, { 0xa947, 0xa95f },
{ 0xa980, 0xa984 }, { 0xa9b3, 0xa9c1 }, { 0xaa29, 0xaa40 }, { 0xaa43, 0xaa44 },
{ 0xaa4c, 0xaa50 }, { 0xaa7b, 0xaa80 }, { 0xaab0, 0xaab1 }, { 0xaab2, 0xaab5 },
{ 0xaab7, 0xaab9 }, { 0xaabe, 0xaac0 }, { 0xaac1, 0xaac2 }, { 0xabe3, 0xabeb },
{ 0xabec, 0xabf0 }, { 0xfb1e, 0xfb1f }, { 0xfe00, 0xfe10 }, { 0xfe20, 0xfe30 },
{ 0x0300, 0x0370 }, { 0x0483, 0x048a }, { 0x0591, 0x05d0 }, { 0x0610, 0x061b },
{ 0x064b, 0x0660 }, { 0x0670, 0x0671 }, { 0x06d6, 0x06dd }, { 0x06df, 0x06e5 },
{ 0x06e7, 0x06ee }, { 0x0711, 0x0712 }, { 0x0730, 0x074d }, { 0x07a6, 0x07b1 },
{ 0x07eb, 0x07f4 }, { 0x0816, 0x0830 }, { 0x0859, 0x085e }, { 0x08d4, 0x0904 },
{ 0x093a, 0x0958 }, { 0x0962, 0x0964 }, { 0x0981, 0x0985 }, { 0x09bc, 0x09ce },
{ 0x09d7, 0x09dc }, { 0x09e2, 0x09e6 }, { 0x0a01, 0x0a05 }, { 0x0a3c, 0x0a59 },
{ 0x0a70, 0x0a72 }, { 0x0a75, 0x0a85 }, { 0x0abc, 0x0ad0 }, { 0x0ae2, 0x0ae6 },
{ 0x0afa, 0x0b05 }, { 0x0b3c, 0x0b5c }, { 0x0b62, 0x0b66 }, { 0x0b82, 0x0b83 },
{ 0x0bbe, 0x0bd0 }, { 0x0bd7, 0x0be6 }, { 0x0c00, 0x0c05 }, { 0x0c3e, 0x0c58 },
{ 0x0c62, 0x0c66 }, { 0x0c81, 0x0c85 }, { 0x0cbc, 0x0cde }, { 0x0ce2, 0x0ce6 },
{ 0x0d00, 0x0d05 }, { 0x0d3b, 0x0d4e }, { 0x0d57, 0x0d58 }, { 0x0d62, 0x0d66 },
{ 0x0d82, 0x0d85 }, { 0x0dca, 0x0de6 }, { 0x0df2, 0x0df4 }, { 0x0e31, 0x0e32 },
{ 0x0e34, 0x0e3f }, { 0x0e47, 0x0e4f }, { 0x0eb1, 0x0eb2 }, { 0x0eb4, 0x0ebd },
{ 0x0ec8, 0x0ed0 }, { 0x0f18, 0x0f1a }, { 0x0f35, 0x0f3a }, { 0x0f3e, 0x0f40 },
{ 0x0f71, 0x0f88 }, { 0x0f8d, 0x0fbe }, { 0x0fc6, 0x0fc7 }, { 0x102b, 0x103f },
{ 0x1056, 0x105a }, { 0x105e, 0x1065 }, { 0x1067, 0x106e }, { 0x1071, 0x1075 },
{ 0x1082, 0x1090 }, { 0x109a, 0x109e }, { 0x135d, 0x1360 }, { 0x1712, 0x1720 },
{ 0x1732, 0x1735 }, { 0x1752, 0x1760 }, { 0x1772, 0x1780 }, { 0x17b4, 0x17d4 },
{ 0x17dd, 0x17e0 }, { 0x180b, 0x180e }, { 0x1885, 0x1887 }, { 0x18a9, 0x18aa },
{ 0x1920, 0x1940 }, { 0x1a17, 0x1a1e }, { 0x1a55, 0x1a80 }, { 0x1ab0, 0x1b05 },
{ 0x1b34, 0x1b45 }, { 0x1b6b, 0x1b74 }, { 0x1b80, 0x1b83 }, { 0x1ba1, 0x1bae },
{ 0x1be6, 0x1bfc }, { 0x1c24, 0x1c3b }, { 0x1cd0, 0x1ce9 }, { 0x1ced, 0x1cee },
{ 0x1cf2, 0x1cf5 }, { 0x1cf7, 0x1d00 }, { 0x1dc0, 0x1e00 }, { 0x20d0, 0x2100 },
{ 0x2cef, 0x2cf2 }, { 0x2d7f, 0x2d80 }, { 0x2de0, 0x2e00 }, { 0x302a, 0x3030 },
{ 0x3099, 0x309b }, { 0xa66f, 0xa67e }, { 0xa69e, 0xa6a0 }, { 0xa6f0, 0xa6f2 },
{ 0xa802, 0xa803 }, { 0xa806, 0xa807 }, { 0xa80b, 0xa80c }, { 0xa823, 0xa828 },
{ 0xa880, 0xa882 }, { 0xa8b4, 0xa8ce }, { 0xa8e0, 0xa8f2 }, { 0xa926, 0xa92e },
{ 0xa947, 0xa95f }, { 0xa980, 0xa984 }, { 0xa9b3, 0xa9c1 }, { 0xa9e5, 0xa9e6 },
{ 0xaa29, 0xaa40 }, { 0xaa43, 0xaa44 }, { 0xaa4c, 0xaa50 }, { 0xaa7b, 0xaa7e },
{ 0xaab0, 0xaab5 }, { 0xaab7, 0xaab9 }, { 0xaabe, 0xaac2 }, { 0xaaeb, 0xaaf0 },
{ 0xaaf5, 0xab01 }, { 0xabe3, 0xabf0 }, { 0xfb1e, 0xfb1f }, { 0xfe00, 0xfe10 },
{ 0xfe20, 0xfe30 },
};
/* From http://unicode.org/Public/UNIDATA/EastAsianWidth.txt */
static const struct utf8range unicode_range_wide[] = {
{ 0x1100, 0x115f }, { 0x2329, 0x232a }, { 0x2e80, 0x2e99 }, { 0x2e9b, 0x2ef3 },
{ 0x2f00, 0x2fd5 }, { 0x2ff0, 0x2ffb }, { 0x3000, 0x303e }, { 0x3041, 0x3096 },
{ 0x3099, 0x30ff }, { 0x3105, 0x312d }, { 0x3131, 0x318e }, { 0x3190, 0x31ba },
{ 0x31c0, 0x31e3 }, { 0x31f0, 0x321e }, { 0x3220, 0x3247 }, { 0x3250, 0x4dbf },
{ 0x4e00, 0xa48c }, { 0xa490, 0xa4c6 }, { 0xa960, 0xa97c }, { 0xac00, 0xd7a3 },
{ 0xf900, 0xfaff }, { 0xfe10, 0xfe19 }, { 0xfe30, 0xfe52 }, { 0xfe54, 0xfe66 },
{ 0xfe68, 0xfe6b }, { 0xff01, 0xffe6 }, { 0x1b000, 0x1b001 }, { 0x1f200, 0x1f202 },
{ 0x1f210, 0x1f23a }, { 0x1f240, 0x1f248 }, { 0x1f250, 0x1f251 }, { 0x20000, 0x3fffd },
{ 0x1100, 0x115f }, { 0x231a, 0x231b }, { 0x2329, 0x232a }, { 0x23e9, 0x23ec },
{ 0x23f0, 0x23f0 }, { 0x23f3, 0x23f3 }, { 0x25fd, 0x25fe }, { 0x2614, 0x2615 },
{ 0x2648, 0x2653 }, { 0x267f, 0x267f }, { 0x2693, 0x2693 }, { 0x26a1, 0x26a1 },
{ 0x26aa, 0x26ab }, { 0x26bd, 0x26be }, { 0x26c4, 0x26c5 }, { 0x26ce, 0x26ce },
{ 0x26d4, 0x26d4 }, { 0x26ea, 0x26ea }, { 0x26f2, 0x26f3 }, { 0x26f5, 0x26f5 },
{ 0x26fa, 0x26fa }, { 0x26fd, 0x26fd }, { 0x2705, 0x2705 }, { 0x270a, 0x270b },
{ 0x2728, 0x2728 }, { 0x274c, 0x274c }, { 0x274e, 0x274e }, { 0x2753, 0x2755 },
{ 0x2757, 0x2757 }, { 0x2795, 0x2797 }, { 0x27b0, 0x27b0 }, { 0x27bf, 0x27bf },
{ 0x2b1b, 0x2b1c }, { 0x2b50, 0x2b50 }, { 0x2b55, 0x2b55 }, { 0x2e80, 0x2e99 },
{ 0x2e9b, 0x2ef3 }, { 0x2f00, 0x2fd5 }, { 0x2ff0, 0x2ffb }, { 0x3001, 0x303e },
{ 0x3041, 0x3096 }, { 0x3099, 0x30ff }, { 0x3105, 0x312e }, { 0x3131, 0x318e },
{ 0x3190, 0x31ba }, { 0x31c0, 0x31e3 }, { 0x31f0, 0x321e }, { 0x3220, 0x3247 },
{ 0x3250, 0x32fe }, { 0x3300, 0x4dbf }, { 0x4e00, 0xa48c }, { 0xa490, 0xa4c6 },
{ 0xa960, 0xa97c }, { 0xac00, 0xd7a3 }, { 0xf900, 0xfaff }, { 0xfe10, 0xfe19 },
{ 0xfe30, 0xfe52 }, { 0xfe54, 0xfe66 }, { 0xfe68, 0xfe6b }, { 0x16fe0, 0x16fe1 },
{ 0x17000, 0x187ec }, { 0x18800, 0x18af2 }, { 0x1b000, 0x1b11e }, { 0x1b170, 0x1b2fb },
{ 0x1f004, 0x1f004 }, { 0x1f0cf, 0x1f0cf }, { 0x1f18e, 0x1f18e }, { 0x1f191, 0x1f19a },
{ 0x1f200, 0x1f202 }, { 0x1f210, 0x1f23b }, { 0x1f240, 0x1f248 }, { 0x1f250, 0x1f251 },
{ 0x1f260, 0x1f265 }, { 0x1f300, 0x1f320 }, { 0x1f32d, 0x1f335 }, { 0x1f337, 0x1f37c },
{ 0x1f37e, 0x1f393 }, { 0x1f3a0, 0x1f3ca }, { 0x1f3cf, 0x1f3d3 }, { 0x1f3e0, 0x1f3f0 },
{ 0x1f3f4, 0x1f3f4 }, { 0x1f3f8, 0x1f43e }, { 0x1f440, 0x1f440 }, { 0x1f442, 0x1f4fc },
{ 0x1f4ff, 0x1f53d }, { 0x1f54b, 0x1f54e }, { 0x1f550, 0x1f567 }, { 0x1f57a, 0x1f57a },
{ 0x1f595, 0x1f596 }, { 0x1f5a4, 0x1f5a4 }, { 0x1f5fb, 0x1f64f }, { 0x1f680, 0x1f6c5 },
{ 0x1f6cc, 0x1f6cc }, { 0x1f6d0, 0x1f6d2 }, { 0x1f6eb, 0x1f6ec }, { 0x1f6f4, 0x1f6f8 },
{ 0x1f910, 0x1f93e }, { 0x1f940, 0x1f94c }, { 0x1f950, 0x1f96b }, { 0x1f980, 0x1f997 },
{ 0x1f9c0, 0x1f9c0 }, { 0x1f9d0, 0x1f9e6 }, { 0x20000, 0x2fffd }, { 0x30000, 0x3fffd },
};
#define ARRAYSIZE(A) sizeof(A) / sizeof(*(A))
@ -202,7 +250,7 @@ static int cmp_range(const void *key, const void *cm)
static int utf8_in_range(const struct utf8range *range, int num, int ch)
{
const struct utf8range *r =
(const struct utf8range *)bsearch(&ch, range, num, sizeof(*range), cmp_range);
bsearch(&ch, range, num, sizeof(*range), cmp_range);
if (r) {
return 1;

View File

@ -8,15 +8,16 @@ extern "C" {
/**
* UTF-8 utility functions
*
* (c) 2010-2016 Steve Bennett <steveb@workware.net.au>
* (c) 2010-2019 Steve Bennett <steveb@workware.net.au>
*
* See LICENCE for licence details.
* See utf8.c for licence details.
*/
#define USE_UTF8
#ifndef USE_UTF8
#include <ctype.h>
#define MAX_UTF8_LEN 1
/* No utf-8 support. 1 byte = 1 char */
#define utf8_strlen(S, B) ((B) < 0 ? (int)strlen(S) : (B))
#define utf8_strwidth(S, B) utf8_strlen((S), (B))
@ -26,6 +27,9 @@ extern "C" {
#define utf8_width(C) 1
#else
#define MAX_UTF8_LEN 4
/**
* Converts the given unicode codepoint (0 - 0x1fffff) to utf-8
* and stores the result at 'p'.

View File

@ -44,7 +44,7 @@ static int handle_ln_ok(lua_State *L)
return 1;
}
static void completion_callback_wrapper(const char *line, linenoiseCompletions *completions, int pos)
static void completion_callback_wrapper(const char *line, linenoiseCompletions *completions, void *userdata)
{
lua_State *L = completion_state;
@ -54,9 +54,8 @@ static void completion_callback_wrapper(const char *line, linenoiseCompletions *
lua_setmetatable(L, -2);
lua_pushstring(L, line);
lua_pushinteger(L, pos);
lua_pcall(L, 3, 0, 0);
lua_pcall(L, 2, 0, 0);
}
static int l_linenoise(lua_State *L)
@ -102,14 +101,6 @@ static int l_historyadd(lua_State *L)
return handle_ln_ok(L);
}
static int l_preloadbuffer(lua_State *L)
{
const char *line = luaL_checkstring(L, 1);
linenoisePreloadBuffer(line);
return handle_ln_ok(L);
}
static int l_historysetmaxlen(lua_State *L)
{
int len = luaL_checkinteger(L, 1);
@ -153,7 +144,7 @@ static int l_setcompletion(lua_State *L)
lua_pushvalue(L, 1);
completion_func_ref = luaL_ref(L, LUA_REGISTRYINDEX);
linenoiseSetCompletionCallback(completion_callback_wrapper);
linenoiseSetCompletionCallback(completion_callback_wrapper, NULL);
return handle_ln_ok(L);
}
@ -162,19 +153,12 @@ static int l_addcompletion(lua_State *L)
{
linenoiseCompletions *completions = *((linenoiseCompletions **) luaL_checkudata(L, 1, LN_COMPLETION_TYPE));
const char *entry = luaL_checkstring(L, 2);
int pos = luaL_checkinteger(L, 3);
linenoiseAddCompletion(completions, (char *) entry, pos);
linenoiseAddCompletion(completions, (char *) entry);
return handle_ln_ok(L);
}
static int l_refresh(lua_State *L)
{
linenoiseRefresh();
return handle_ln_ok(L);
}
static int l_historyget(lua_State *L)
{
int len, i;
@ -198,8 +182,6 @@ luaL_Reg linenoise_funcs[] = {
{ "clearscreen", l_clearscreen },
{ "setcompletion", l_setcompletion},
{ "addcompletion", l_addcompletion },
{ "preload", l_preloadbuffer },
{ "refresh", l_refresh },
/* Aliases for more consistent function names */
{ "addhistory", l_historyadd },

View File

@ -23,16 +23,6 @@ function console.startplugin()
local matches = {}
local lastindex = 0
local consolebuf
_G.history = function (index)
local history = ln.historyget()
if index then
ln.preload(history[index])
return
end
for num, line in ipairs(history) do
print(num, line)
end
end
print(" /| /| /| /| /| _______")
print(" / | / | / | / | / | / /")
print(" / |/ | / | / |/ | / ____/ ")
@ -51,11 +41,11 @@ function console.startplugin()
ln.historysetmaxlen(50)
local scr = [[
local ln = require('linenoise')
ln.setcompletion(function(c, str, pos)
status = str .. "\x01" .. tostring(pos)
ln.setcompletion(
function(c, str)
yield()
ln.addcompletion(c, status:match("([^\x01]*)\x01(.*)"))
end)
ln.addcompletion(c, str)
end)
local ret = ln.linenoise('$PROMPT')
if ret == nil then
return "\n"
@ -256,7 +246,7 @@ function console.startplugin()
lastindex = lastindex + 1
print(consolebuf[lastindex])
end
ln.refresh()
-- ln.refresh() FIXME: how to replicate this now that the API has been removed?
end
if conth.yield then
conth:continue(get_completions(conth.result:match("([^\x01]*)\x01(.*)")))

View File

@ -220,349 +220,350 @@ end
--------------------------------------------------
project "softfloat3"
uuid "9c22fc90-53fd-11e8-b566-0800200c9a66"
kind "StaticLib"
uuid "9c22fc90-53fd-11e8-b566-0800200c9a66"
kind "StaticLib"
options {
"ForceCPP",
}
includedirs {
MAME_DIR .. "src/osd",
MAME_DIR .. "3rdparty/softfloat3/build/MAME",
MAME_DIR .. "3rdparty/softfloat3/source",
MAME_DIR .. "3rdparty/softfloat3/source/include",
MAME_DIR .. "3rdparty/softfloat3/source/8086",
}
configuration { "gmake or ninja" }
buildoptions_cpp {
"-x c++",
}
if _OPTIONS["gcc"]~=nil and not string.find(_OPTIONS["gcc"], "clang") then
buildoptions_cpp {
"-Wno-error=implicit-fallthrough",
options {
"ForceCPP",
}
includedirs {
MAME_DIR .. "src/osd",
MAME_DIR .. "3rdparty/softfloat3/build/MAME",
MAME_DIR .. "3rdparty/softfloat3/source",
MAME_DIR .. "3rdparty/softfloat3/source/include",
MAME_DIR .. "3rdparty/softfloat3/source/8086",
}
configuration { "gmake or ninja" }
buildoptions_cpp {
"-x c++",
}
if _OPTIONS["gcc"]~=nil and not string.find(_OPTIONS["gcc"], "clang") then
buildoptions_cpp {
"-Wno-error=implicit-fallthrough",
}
end
configuration { "vs*" }
buildoptions {
"/wd4701", -- warning C4701: potentially uninitialized local variable 'xxx' used
"/wd4703", -- warning C4703: potentially uninitialized local pointer variable 'xxx' used
}
configuration { "vs*" }
buildoptions {
"/wd4701", -- warning C4701: potentially uninitialized local variable 'xxx' used
"/wd4703", -- warning C4703: potentially uninitialized local pointer variable 'xxx' used
}
configuration { }
defines {
"SOFTFLOAT_ROUND_ODD",
"INLINE_LEVEL=5",
"SOFTFLOAT_FAST_DIV32TO16",
"SOFTFLOAT_FAST_DIV64TO32",
"SOFTFLOAT_FAST_INT64"
}
configuration { }
files {
MAME_DIR .. "3rdparty/softfloat3/source/s_eq128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_le128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_lt128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_shortShiftLeft128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_shortShiftRight128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_shortShiftRightJam64.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_shortShiftRightJam64Extra.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_shortShiftRightJam128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_shortShiftRightJam128Extra.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_shiftRightJam32.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_shiftRightJam64.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_shiftRightJam64Extra.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_shiftRightJam128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_shiftRightJam128Extra.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_shiftRightJam256M.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_countLeadingZeros8.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_countLeadingZeros16.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_countLeadingZeros32.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_countLeadingZeros64.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_add128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_add256M.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_sub128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_sub256M.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_mul64ByShifted32To128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_mul64To128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_mul128By32.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_mul128To256M.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_approxRecip_1Ks.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_approxRecip32_1.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_approxRecipSqrt_1Ks.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_approxRecipSqrt32_1.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/softfloat_raiseFlags.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_commonNaNToF16UI.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_propagateNaNF16UI.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_f32UIToCommonNaN.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_commonNaNToF32UI.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_propagateNaNF32UI.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_f64UIToCommonNaN.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_commonNaNToF64UI.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_propagateNaNF64UI.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/extF80M_isSignalingNaN.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_extF80UIToCommonNaN.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_commonNaNToExtF80UI.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_propagateNaNExtF80UI.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/f128M_isSignalingNaN.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_f128UIToCommonNaN.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_commonNaNToF128UI.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_propagateNaNF128UI.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_roundToUI32.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_roundToUI64.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_roundToI32.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_roundToI64.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_normSubnormalF16Sig.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_roundPackToF16.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_normRoundPackToF16.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_addMagsF16.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_subMagsF16.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_mulAddF16.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_normSubnormalF32Sig.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_roundPackToF32.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_normRoundPackToF32.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_addMagsF32.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_subMagsF32.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_mulAddF32.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_normSubnormalF64Sig.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_roundPackToF64.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_normRoundPackToF64.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_addMagsF64.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_subMagsF64.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_mulAddF64.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_normSubnormalExtF80Sig.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_roundPackToExtF80.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_normRoundPackToExtF80.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_addMagsExtF80.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_subMagsExtF80.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_normSubnormalF128Sig.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_roundPackToF128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_normRoundPackToF128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_addMagsF128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_subMagsF128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_mulAddF128.c",
MAME_DIR .. "3rdparty/softfloat3/source/softfloat_state.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui32_to_f16.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui32_to_f32.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui32_to_f64.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui32_to_extF80.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui32_to_extF80M.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui32_to_f128.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui32_to_f128M.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui64_to_f16.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui64_to_f32.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui64_to_f64.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui64_to_extF80.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui64_to_extF80M.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui64_to_f128.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui64_to_f128M.c",
MAME_DIR .. "3rdparty/softfloat3/source/i32_to_f16.c",
MAME_DIR .. "3rdparty/softfloat3/source/i32_to_f32.c",
MAME_DIR .. "3rdparty/softfloat3/source/i32_to_f64.c",
MAME_DIR .. "3rdparty/softfloat3/source/i32_to_extF80.c",
MAME_DIR .. "3rdparty/softfloat3/source/i32_to_extF80M.c",
MAME_DIR .. "3rdparty/softfloat3/source/i32_to_f128.c",
MAME_DIR .. "3rdparty/softfloat3/source/i32_to_f128M.c",
MAME_DIR .. "3rdparty/softfloat3/source/i64_to_f16.c",
MAME_DIR .. "3rdparty/softfloat3/source/i64_to_f32.c",
MAME_DIR .. "3rdparty/softfloat3/source/i64_to_f64.c",
MAME_DIR .. "3rdparty/softfloat3/source/i64_to_extF80.c",
MAME_DIR .. "3rdparty/softfloat3/source/i64_to_extF80M.c",
MAME_DIR .. "3rdparty/softfloat3/source/i64_to_f128.c",
MAME_DIR .. "3rdparty/softfloat3/source/i64_to_f128M.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_ui32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_ui64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_i32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_i64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_ui32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_ui64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_i32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_i64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_f32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_f64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_extF80.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_extF80M.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_f128.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_f128M.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_roundToInt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_add.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_sub.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_mul.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_mulAdd.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_div.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_rem.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_sqrt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_eq.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_le.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_lt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_eq_signaling.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_le_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_lt_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_isSignalingNaN.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_ui32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_ui64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_i32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_i64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_ui32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_ui64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_i32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_i64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_f16.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_f64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_extF80.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_extF80M.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_f128.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_f128M.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_roundToInt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_add.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_sub.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_mul.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_mulAdd.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_div.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_rem.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_sqrt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_eq.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_le.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_lt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_eq_signaling.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_le_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_lt_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_isSignalingNaN.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_ui32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_ui64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_i32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_i64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_ui32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_ui64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_i32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_i64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_f16.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_f32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_extF80.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_extF80M.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_f128.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_f128M.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_roundToInt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_add.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_sub.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_mul.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_mulAdd.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_div.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_rem.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_sqrt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_eq.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_le.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_lt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_eq_signaling.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_le_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_lt_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_isSignalingNaN.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_to_ui32.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_to_ui64.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_to_i32.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_to_i64.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_to_ui32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_to_ui64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_to_i32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_to_i64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_to_f16.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_to_f32.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_to_f64.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_to_f128.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_roundToInt.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_add.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_sub.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_mul.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_div.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_rem.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_sqrt.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_eq.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_le.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_lt.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_eq_signaling.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_le_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_lt_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_isSignalingNaN.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_to_ui32.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_to_ui64.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_to_i32.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_to_i64.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_to_ui32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_to_ui64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_to_i32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_to_i64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_to_f16.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_to_f32.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_to_f64.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_to_f128M.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_roundToInt.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_add.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_sub.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_mul.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_div.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_rem.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_sqrt.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_eq.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_le.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_lt.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_eq_signaling.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_le_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_lt_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_to_ui32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_to_ui64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_to_i32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_to_i64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_to_ui32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_to_ui64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_to_i32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_to_i64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_to_f16.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_to_f32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_to_extF80.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_to_f64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_roundToInt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_add.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_sub.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_mul.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_mulAdd.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_div.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_rem.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_sqrt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_eq.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_le.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_lt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_eq_signaling.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_le_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_lt_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_isSignalingNaN.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_to_ui32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_to_ui64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_to_i32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_to_i64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_to_ui32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_to_ui64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_to_i32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_to_i64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_to_f16.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_to_f32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_to_extF80M.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_to_f64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_roundToInt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_add.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_sub.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_mul.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_mulAdd.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_div.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_rem.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_sqrt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_eq.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_le.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_lt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_eq_signaling.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_le_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_lt_quiet.c",
}
defines {
"SOFTFLOAT_ROUND_ODD",
"INLINE_LEVEL=5",
"SOFTFLOAT_FAST_DIV32TO16",
"SOFTFLOAT_FAST_DIV64TO32",
"SOFTFLOAT_FAST_INT64"
}
files {
MAME_DIR .. "3rdparty/softfloat3/source/s_eq128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_le128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_lt128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_shortShiftLeft128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_shortShiftRight128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_shortShiftRightJam64.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_shortShiftRightJam64Extra.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_shortShiftRightJam128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_shortShiftRightJam128Extra.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_shiftRightJam32.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_shiftRightJam64.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_shiftRightJam64Extra.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_shiftRightJam128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_shiftRightJam128Extra.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_shiftRightJam256M.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_countLeadingZeros8.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_countLeadingZeros16.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_countLeadingZeros32.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_countLeadingZeros64.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_add128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_add256M.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_sub128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_sub256M.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_mul64ByShifted32To128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_mul64To128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_mul128By32.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_mul128To256M.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_approxRecip_1Ks.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_approxRecip32_1.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_approxRecipSqrt_1Ks.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_approxRecipSqrt32_1.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/softfloat_raiseFlags.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_commonNaNToF16UI.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_propagateNaNF16UI.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_f32UIToCommonNaN.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_commonNaNToF32UI.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_propagateNaNF32UI.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_f64UIToCommonNaN.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_commonNaNToF64UI.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_propagateNaNF64UI.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/extF80M_isSignalingNaN.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_extF80UIToCommonNaN.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_commonNaNToExtF80UI.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_propagateNaNExtF80UI.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/f128M_isSignalingNaN.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_f128UIToCommonNaN.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_commonNaNToF128UI.c",
MAME_DIR .. "3rdparty/softfloat3/source/8086/s_propagateNaNF128UI.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_roundToUI32.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_roundToUI64.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_roundToI32.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_roundToI64.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_normSubnormalF16Sig.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_roundPackToF16.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_normRoundPackToF16.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_addMagsF16.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_subMagsF16.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_mulAddF16.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_normSubnormalF32Sig.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_roundPackToF32.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_normRoundPackToF32.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_addMagsF32.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_subMagsF32.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_mulAddF32.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_normSubnormalF64Sig.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_roundPackToF64.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_normRoundPackToF64.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_addMagsF64.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_subMagsF64.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_mulAddF64.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_normSubnormalExtF80Sig.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_roundPackToExtF80.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_normRoundPackToExtF80.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_addMagsExtF80.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_subMagsExtF80.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_normSubnormalF128Sig.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_roundPackToF128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_normRoundPackToF128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_addMagsF128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_subMagsF128.c",
MAME_DIR .. "3rdparty/softfloat3/source/s_mulAddF128.c",
MAME_DIR .. "3rdparty/softfloat3/source/softfloat_state.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui32_to_f16.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui32_to_f32.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui32_to_f64.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui32_to_extF80.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui32_to_extF80M.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui32_to_f128.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui32_to_f128M.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui64_to_f16.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui64_to_f32.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui64_to_f64.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui64_to_extF80.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui64_to_extF80M.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui64_to_f128.c",
MAME_DIR .. "3rdparty/softfloat3/source/ui64_to_f128M.c",
MAME_DIR .. "3rdparty/softfloat3/source/i32_to_f16.c",
MAME_DIR .. "3rdparty/softfloat3/source/i32_to_f32.c",
MAME_DIR .. "3rdparty/softfloat3/source/i32_to_f64.c",
MAME_DIR .. "3rdparty/softfloat3/source/i32_to_extF80.c",
MAME_DIR .. "3rdparty/softfloat3/source/i32_to_extF80M.c",
MAME_DIR .. "3rdparty/softfloat3/source/i32_to_f128.c",
MAME_DIR .. "3rdparty/softfloat3/source/i32_to_f128M.c",
MAME_DIR .. "3rdparty/softfloat3/source/i64_to_f16.c",
MAME_DIR .. "3rdparty/softfloat3/source/i64_to_f32.c",
MAME_DIR .. "3rdparty/softfloat3/source/i64_to_f64.c",
MAME_DIR .. "3rdparty/softfloat3/source/i64_to_extF80.c",
MAME_DIR .. "3rdparty/softfloat3/source/i64_to_extF80M.c",
MAME_DIR .. "3rdparty/softfloat3/source/i64_to_f128.c",
MAME_DIR .. "3rdparty/softfloat3/source/i64_to_f128M.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_ui32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_ui64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_i32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_i64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_ui32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_ui64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_i32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_i64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_f32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_f64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_extF80.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_extF80M.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_f128.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_to_f128M.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_roundToInt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_add.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_sub.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_mul.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_mulAdd.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_div.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_rem.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_sqrt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_eq.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_le.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_lt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_eq_signaling.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_le_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_lt_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/f16_isSignalingNaN.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_ui32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_ui64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_i32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_i64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_ui32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_ui64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_i32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_i64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_f16.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_f64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_extF80.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_extF80M.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_f128.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_to_f128M.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_roundToInt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_add.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_sub.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_mul.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_mulAdd.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_div.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_rem.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_sqrt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_eq.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_le.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_lt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_eq_signaling.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_le_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_lt_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/f32_isSignalingNaN.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_ui32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_ui64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_i32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_i64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_ui32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_ui64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_i32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_i64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_f16.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_f32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_extF80.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_extF80M.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_f128.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_to_f128M.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_roundToInt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_add.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_sub.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_mul.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_mulAdd.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_div.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_rem.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_sqrt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_eq.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_le.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_lt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_eq_signaling.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_le_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_lt_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/f64_isSignalingNaN.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_to_ui32.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_to_ui64.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_to_i32.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_to_i64.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_to_ui32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_to_ui64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_to_i32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_to_i64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_to_f16.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_to_f32.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_to_f64.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_to_f128.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_roundToInt.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_add.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_sub.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_mul.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_div.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_rem.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_sqrt.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_eq.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_le.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_lt.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_eq_signaling.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_le_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_lt_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80_isSignalingNaN.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_to_ui32.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_to_ui64.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_to_i32.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_to_i64.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_to_ui32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_to_ui64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_to_i32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_to_i64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_to_f16.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_to_f32.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_to_f64.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_to_f128M.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_roundToInt.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_add.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_sub.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_mul.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_div.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_rem.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_sqrt.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_eq.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_le.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_lt.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_eq_signaling.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_le_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/extF80M_lt_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_to_ui32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_to_ui64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_to_i32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_to_i64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_to_ui32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_to_ui64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_to_i32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_to_i64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_to_f16.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_to_f32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_to_extF80.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_to_f64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_roundToInt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_add.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_sub.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_mul.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_mulAdd.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_div.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_rem.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_sqrt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_eq.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_le.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_lt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_eq_signaling.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_le_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_lt_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128_isSignalingNaN.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_to_ui32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_to_ui64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_to_i32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_to_i64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_to_ui32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_to_ui64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_to_i32_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_to_i64_r_minMag.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_to_f16.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_to_f32.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_to_extF80M.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_to_f64.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_roundToInt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_add.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_sub.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_mul.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_mulAdd.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_div.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_rem.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_sqrt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_eq.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_le.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_lt.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_eq_signaling.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_le_quiet.c",
MAME_DIR .. "3rdparty/softfloat3/source/f128M_lt_quiet.c",
}
-------------------------------------------------
@ -848,8 +849,8 @@ project "lua"
}
configuration { "gmake or ninja" }
buildoptions_c {
"-Wno-bad-function-cast"
buildoptions_cpp {
"-x c++",
}
configuration { "vs*" }
@ -939,6 +940,9 @@ project "lualibs"
buildoptions {
"-Wno-error=unused-variable",
}
buildoptions_cpp {
"-x c++",
}
configuration { "vs*" }
buildoptions {
@ -1674,14 +1678,10 @@ project "linenoise"
addprojectflags()
options {
"ForceCPP",
}
configuration { "gmake or ninja" }
buildoptions {
"-Wno-error=unused-variable",
"-Wno-error=implicit-fallthrough",
"-Wno-error=strict-prototypes",
}
configuration { "vs*" }
@ -1691,13 +1691,18 @@ project "linenoise"
configuration { }
defines {
"USE_UTF8",
}
includedirs {
MAME_DIR .. "3rdparty/linenoise",
}
files {
MAME_DIR .. "3rdparty/linenoise/utf8.c",
MAME_DIR .. "3rdparty/linenoise/linenoise.c",
MAME_DIR .. "3rdparty/linenoise/stringbuf.c",
MAME_DIR .. "3rdparty/linenoise/utf8.c",
}