Revision: 18818
http://vice-emu.svn.sourceforge.net/vice-emu/?rev=18818&view=rev
Author: blackystardust
Date: 2008-05-31 20:24:13 -0700 (Sat, 31 May 2008)
Log Message:
-----------
Added the memmap feature from VICEplus, it is a feature that shows what memory places have been accessed and how. Because of the CPU overhead the feature is activated with the configure option --enable-memmap
Modified Paths:
--------------
branches/marco/ports/vice/configure.in
branches/marco/ports/vice/src/6510core.c
branches/marco/ports/vice/src/c64/c64mem.c
branches/marco/ports/vice/src/gfxoutput.h
branches/marco/ports/vice/src/gfxoutputdrv/bmpdrv.c
branches/marco/ports/vice/src/gfxoutputdrv/ffmpegdrv.c
branches/marco/ports/vice/src/gfxoutputdrv/gifdrv.c
branches/marco/ports/vice/src/gfxoutputdrv/iffdrv.c
branches/marco/ports/vice/src/gfxoutputdrv/jpegdrv.c
branches/marco/ports/vice/src/gfxoutputdrv/pcxdrv.c
branches/marco/ports/vice/src/gfxoutputdrv/pngdrv.c
branches/marco/ports/vice/src/gfxoutputdrv/ppmdrv.c
branches/marco/ports/vice/src/maincpu.c
branches/marco/ports/vice/src/monitor/mon_command.c
branches/marco/ports/vice/src/monitor/mon_lex.c
branches/marco/ports/vice/src/monitor/mon_lex.l
branches/marco/ports/vice/src/monitor/mon_parse.c
branches/marco/ports/vice/src/monitor/mon_parse.h
branches/marco/ports/vice/src/monitor/mon_parse.y
branches/marco/ports/vice/src/monitor/monitor.c
branches/marco/ports/vice/src/monitor/montypes.h
branches/marco/ports/vice/src/monitor.h
branches/marco/ports/vice/src/screenshot.c
branches/marco/ports/vice/src/screenshot.h
Modified: branches/marco/ports/vice/configure.in
===================================================================
--- branches/marco/ports/vice/configure.in 2008-05-31 20:59:20 UTC (rev 18817)
+++ branches/marco/ports/vice/configure.in 2008-06-01 03:24:13 UTC (rev 18818)
@@ -64,8 +64,8 @@
AC_ARG_WITH(oss, [ --without-oss do not use the OSS sound system])
AC_ARG_ENABLE(sdl, [ --with-sdl use sdl sound system])
AC_ARG_WITH(resid, [ --without-resid do not use the reSID engine])
-AC_ARG_WITH(png, [ --without-png do not use the PNG screenshot system])
-AC_ARG_WITH(zlib, [ --without-zlib do not use the ZLIB support])
+AC_ARG_WITH(png, [ --without-png do not use the PNG screenshot system])
+AC_ARG_WITH(zlib, [ --without-zlib do not use the ZLIB support])
AC_ARG_ENABLE(fullscreen, [ --enable-fullscreen enable XFree86 fullscreen detection], [ echo checking for XFree86 fullscreen requested...], [enable_fullscreen="no"; echo no explicit checking for XFree86 fullscreen requested, disabling fullscreen...])
AC_ARG_ENABLE(gnomeui,[ --enable-gnomeui enables gnome ui support])
AC_ARG_ENABLE(nls,[ --disable-nls disables national language support])
@@ -76,8 +76,13 @@
AC_ARG_ENABLE(parsid,[ --enable-parsid enables ParSID support])
AC_ARG_WITH(picasso96, [ --with-picasso96 use Amiga P96 grafix system instead of cgx])
AC_ARG_ENABLE(bundle, [ --disable-bundle do not use application bundles on Macs])
-AC_ARG_WITH(cocoa, [ --with-cocoa enables native Cocoa UI on Macs])
+AC_ARG_WITH(cocoa, [ --with-cocoa enables native Cocoa UI on Macs])
+AC_ARG_ENABLE(memmap, [ --enable-memmap enable the mem map feature])
+if test x"$enable_memmap" = "xyes"; then
+ AC_DEFINE(FEATURE_CPUMEMHISTORY,,[Use the memmap feature.])
+fi
+
if test x"$enable_gnomeui" = "xyes" ; then
AC_DEFINE(USE_GNOMEUI,,[Use GNOME UI.])
fi
Modified: branches/marco/ports/vice/src/6510core.c
===================================================================
--- branches/marco/ports/vice/src/6510core.c 2008-05-31 20:59:20 UTC (rev 18817)
+++ branches/marco/ports/vice/src/6510core.c 2008-06-01 03:24:13 UTC (rev 18818)
@@ -1778,8 +1778,30 @@
#endif
#endif
+#ifdef FEATURE_CPUMEMHISTORY
+#ifndef DRIVE_CPU
+ memmap_state |= (MEMMAP_STATE_INSTR | MEMMAP_STATE_OPCODE);
+#endif
+#endif
+
FETCH_OPCODE(opcode);
+#ifdef FEATURE_CPUMEMHISTORY
+#ifndef DRIVE_CPU
+ /* HACK to cope with FETCH_OPCODE optimization in x64 */
+ if (((int)reg_pc) < bank_limit) {
+ memmap_mem_read(reg_pc);
+ }
+
+ if(p0 == 0x20) {
+ monitor_cpuhistory_store(reg_pc, (BYTE)(p0), (BYTE)(p1), (BYTE)(LOAD(reg_pc+2)));
+ } else {
+ monitor_cpuhistory_store(reg_pc, (BYTE)(p0), (BYTE)(p1), (BYTE)(p2 >> 8));
+ }
+ memmap_state &= ~(MEMMAP_STATE_INSTR | MEMMAP_STATE_OPCODE);
+#endif
+#endif
+
#ifdef DEBUG
#ifdef DRIVE_CPU
if (TRACEFLG) {
Modified: branches/marco/ports/vice/src/c64/c64mem.c
===================================================================
--- branches/marco/ports/vice/src/c64/c64mem.c 2008-05-31 20:59:20 UTC (rev 18817)
+++ branches/marco/ports/vice/src/c64/c64mem.c 2008-06-01 03:24:13 UTC (rev 18818)
@@ -218,7 +218,12 @@
BYTE REGPARM1 zero_read(WORD addr)
{
addr &= 0xff;
-
+#ifdef FEATURE_CPUMEMHISTORY
+ if(!(memmap_state & MEMMAP_STATE_IGNORE)) {
+ monitor_memmap_store(addr, (memmap_state&MEMMAP_STATE_OPCODE)?MEMMAP_RAM_X:(memmap_state&MEMMAP_STATE_INSTR)?0:MEMMAP_RAM_R);
+ memmap_state &= ~(MEMMAP_STATE_OPCODE);
+ }
+#endif
switch ((BYTE)addr) {
case 0:
return pport.dir_read;
@@ -242,7 +247,9 @@
void REGPARM2 zero_store(WORD addr, BYTE value)
{
addr &= 0xff;
-
+#ifdef FEATURE_CPUMEMHISTORY
+ monitor_memmap_store(addr, MEMMAP_RAM_W);
+#endif
switch ((BYTE)addr) {
case 0:
if (vbank == 0) {
Modified: branches/marco/ports/vice/src/gfxoutput.h
===================================================================
--- branches/marco/ports/vice/src/gfxoutput.h 2008-05-31 20:59:20 UTC (rev 18817)
+++ branches/marco/ports/vice/src/gfxoutput.h 2008-06-01 03:24:13 UTC (rev 18818)
@@ -27,6 +27,8 @@
#ifndef _GFXOUTPUT_H
#define _GFXOUTPUT_H
+#include "types.h"
+
struct screenshot_s;
typedef struct gfxoutputdrv_s {
@@ -38,6 +40,9 @@
int (*write)(struct screenshot_s *);
int (*save)(struct screenshot_s *, const char *);
int (*record)(struct screenshot_s *);
+#ifdef FEATURE_CPUMEMHISTORY
+ int (*savememmap)(const char *, int, int, BYTE *, BYTE *);
+#endif
} gfxoutputdrv_t;
/* Functions called by external emulator code. */
Modified: branches/marco/ports/vice/src/gfxoutputdrv/bmpdrv.c
===================================================================
--- branches/marco/ports/vice/src/gfxoutputdrv/bmpdrv.c 2008-05-31 20:59:20 UTC (rev 18817)
+++ branches/marco/ports/vice/src/gfxoutputdrv/bmpdrv.c 2008-06-01 03:24:13 UTC (rev 18818)
@@ -348,6 +348,154 @@
return 0;
}
+#ifdef FEATURE_CPUMEMHISTORY
+static FILE *bmpdrv_memmap_fd;
+static char *bmpdrv_memmap_ext_filename;
+static BYTE *bmpdrv_memmap_bmp_data;
+
+static int bmpdrv_close_memmap(int x_size, int y_size)
+{
+ fwrite(bmpdrv_memmap_bmp_data, y_size * x_size, 1, bmpdrv_memmap_fd);
+ fclose(bmpdrv_memmap_fd);
+ lib_free(bmpdrv_memmap_ext_filename);
+ lib_free(bmpdrv_memmap_bmp_data);
+ return 0;
+}
+
+static DWORD bmpdrv_memmap_bmp_size(int x_size, int y_size)
+{
+ DWORD size = 0;
+
+ size = (DWORD)((14 + 40 + 4 * 256) + (x_size * y_size));
+
+ return size;
+}
+
+static int bmpdrv_memmap_write_bitmap_info(int x_size, int y_size, BYTE *palette)
+{
+ BYTE binfo[40];
+ BYTE *bcolor;
+ unsigned int i;
+
+ memset(binfo, 0, sizeof(binfo));
+
+ util_dword_to_le_buf(&binfo[0], sizeof(binfo));
+ util_dword_to_le_buf(&binfo[4], x_size);
+ util_dword_to_le_buf(&binfo[8], y_size);
+
+ binfo[12] = 1;
+ binfo[13] = 0;
+
+ binfo[14] = 8;
+ binfo[15] = 0;
+
+ util_dword_to_le_buf(&binfo[16], 0); /* BI_RGB */
+ util_dword_to_le_buf(&binfo[20], 0);
+
+ /* DPI in Pixels per Meter*/
+ util_dword_to_le_buf(&binfo[24], 0 * 10000 / 254);
+ util_dword_to_le_buf(&binfo[28], 0 * 10000 / 254);
+
+ util_dword_to_le_buf(&binfo[32], 256);
+ util_dword_to_le_buf(&binfo[36], 256);
+
+ if (fwrite(binfo, sizeof(binfo), 1, bmpdrv_memmap_fd) < 1)
+ return -1;
+
+ bcolor = (BYTE *)lib_malloc(256 * 4);
+
+ for (i = 0; i < 256; i++)
+ {
+ bcolor[i * 4] = palette[(i*3)+2];
+ bcolor[i * 4 + 1] = palette[(i*3)+1];
+ bcolor[i * 4 + 2] = palette[(i*3)];
+ bcolor[i * 4 + 3] = 0;
+ }
+
+ if (fwrite(bcolor, 256 * 4, 1, bmpdrv_memmap_fd) < 1)
+ {
+ lib_free(bcolor);
+ return -1;
+ }
+
+ lib_free(bcolor);
+ return 0;
+}
+
+static int bmpdrv_memmap_write_file_header(int x_size, int y_size)
+{
+ BYTE header[14];
+
+ memset(header, 0, sizeof(header));
+
+ header[0] = 'B';
+ header[1] = 'M';
+
+ util_dword_to_le_buf(&header[2], bmpdrv_memmap_bmp_size(x_size, y_size));
+
+ util_dword_to_le_buf(&header[10], (14 + 40 + 4 * 256));
+
+ if (fwrite(header, sizeof(header), 1, bmpdrv_memmap_fd) < 1)
+ return -1;
+
+ return 0;
+}
+
+static int bmpdrv_open_memmap(const char *filename, int x_size, int y_size, BYTE *palette)
+{
+ bmpdrv_memmap_ext_filename = util_add_extension_const(filename, bmp_drv.default_extension);
+
+ bmpdrv_memmap_fd = fopen(bmpdrv_memmap_ext_filename, MODE_WRITE);
+
+ if (bmpdrv_memmap_fd == NULL)
+ {
+ lib_free(bmpdrv_memmap_ext_filename);
+ return -1;
+ }
+
+ if (bmpdrv_memmap_write_file_header(x_size, y_size) < 0)
+ {
+ fclose(bmpdrv_memmap_fd);
+ lib_free(bmpdrv_memmap_ext_filename);
+ return -1;
+ }
+
+ if (bmpdrv_memmap_write_bitmap_info(x_size, y_size, palette) < 0)
+ {
+ fclose(bmpdrv_memmap_fd);
+ lib_free(bmpdrv_memmap_ext_filename);
+ return -1;
+ }
+
+ bmpdrv_memmap_bmp_data = (BYTE *)lib_malloc(x_size*y_size);
+
+ return 0;
+}
+
+static int bmpdrv_write_memmap(int line, int x_size, int y_size, BYTE *gfx)
+{
+ memcpy(bmpdrv_memmap_bmp_data + (y_size - 1 - line) * x_size, gfx+(line*x_size), x_size);
+}
+
+static int bmpdrv_memmap_save(const char *filename, int x_size, int y_size, BYTE *gfx, BYTE *palette)
+{
+ int line;
+
+ if (bmpdrv_open_memmap(filename, x_size, y_size, palette) < 0)
+ return -1;
+
+ for (line=0; line<y_size; line++)
+ {
+ bmpdrv_write_memmap(line, x_size, y_size, gfx);
+ }
+
+ if (bmpdrv_close_memmap(x_size, y_size) < 0)
+ return -1;
+
+ return 0;
+}
+#endif
+
static gfxoutputdrv_t bmp_drv =
{
"BMP",
@@ -357,7 +505,12 @@
bmpdrv_close,
bmpdrv_write,
bmpdrv_save,
+#ifdef FEATURE_CPUMEMHISTORY
+ NULL,
+ bmpdrv_memmap_save
+#else
NULL
+#endif
};
void gfxoutput_init_bmp(void)
Modified: branches/marco/ports/vice/src/gfxoutputdrv/ffmpegdrv.c
===================================================================
--- branches/marco/ports/vice/src/gfxoutputdrv/ffmpegdrv.c 2008-05-31 20:59:20 UTC (rev 18817)
+++ branches/marco/ports/vice/src/gfxoutputdrv/ffmpegdrv.c 2008-06-01 03:24:13 UTC (rev 18818)
@@ -802,7 +802,12 @@
ffmpegdrv_close,
ffmpegdrv_write,
ffmpegdrv_save,
+#ifdef FEATURE_CPUMEMHISTORY
+ ffmpegdrv_record,
+ NULL
+#else
ffmpegdrv_record
+#endif
},
/*
{
@@ -836,7 +841,11 @@
ffmpegdrv_record
},
*/
- { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
+ { NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+#ifdef FEATURE_CPUMEMHISTORY
+ NULL,
+#endi
+ NULL }
};
void gfxoutput_init_ffmpeg(void)
Modified: branches/marco/ports/vice/src/gfxoutputdrv/gifdrv.c
===================================================================
--- branches/marco/ports/vice/src/gfxoutputdrv/gifdrv.c 2008-05-31 20:59:20 UTC (rev 18817)
+++ branches/marco/ports/vice/src/gfxoutputdrv/gifdrv.c 2008-06-01 03:24:13 UTC (rev 18818)
@@ -161,6 +161,84 @@
return 0;
}
+#ifdef FEATURE_CPUMEMHISTORY
+static GifFileType *gifdrv_memmap_fd;
+static char *gifdrv_memmap_ext_filename;
+
+static int gifdrv_close_memmap(void)
+{
+ EGifCloseFile(gifdrv_memmap_fd);
+ FreeMapObject(gif_colors);
+ lib_free(gifdrv_memmap_ext_filename);
+
+ return 0;
+}
+
+static int gifdrv_write_memmap(int line, int x_size, BYTE *gfx)
+{
+ if (EGifPutLine(gifdrv_memmap_fd, gfx+(line*x_size), x_size)==GIF_ERROR)
+ return -1;
+
+ return 0;
+}
+
+static int gifdrv_open_memmap(const char *filename, int x_size, int y_size, BYTE *palette)
+{
+ unsigned int i;
+ GifColorType ColorMap256[256];
+
+ gifdrv_memmap_ext_filename=util_add_extension_const(filename, gif_drv.default_extension);
+
+ gifdrv_memmap_fd=EGifOpenFileName(gifdrv_memmap_ext_filename, FALSE);
+
+ if (gifdrv_memmap_fd==NULL)
+ {
+ lib_free(gifdrv_memmap_ext_filename);
+ return -1;
+ }
+
+ gif_colors=MakeMapObject(256, ColorMap256);
+
+ for (i = 0; i < 256; i++)
+ {
+ gif_colors->Colors[i].Blue=palette[(i*3)+2];
+ gif_colors->Colors[i].Green=palette[(i*3)+1];
+ gif_colors->Colors[i].Red=palette[i*3];
+ }
+
+ EGifSetGifVersion("87a");
+
+ if (EGifPutScreenDesc(gifdrv_memmap_fd, x_size, y_size, 8, 0, gif_colors) == GIF_ERROR ||
+ EGifPutImageDesc(gifdrv_memmap_fd, 0, 0, x_size, y_size, FALSE, NULL) == GIF_ERROR)
+ {
+ EGifCloseFile(gifdrv_memmap_fd);
+ FreeMapObject(gif_colors);
+ lib_free(gifdrv_memmap_ext_filename);
+ return -1;
+ }
+
+ return 0;
+}
+
+static int gifdrv_save_memmap(const char *filename, int x_size, int y_size, BYTE *gfx, BYTE *palette)
+{
+ int line;
+
+ if (gifdrv_open_memmap(filename, x_size, y_size, palette) < 0)
+ return -1;
+
+ for (line = 0; line < y_size; line++)
+ {
+ gifdrv_write_memmap(line, x_size, gfx);
+ }
+
+ if (gifdrv_close_memmap() < 0)
+ return -1;
+
+ return 0;
+}
+#endif
+
static gfxoutputdrv_t gif_drv =
{
"GIF",
@@ -170,7 +248,12 @@
gifdrv_close,
gifdrv_write,
gifdrv_save,
+#ifdef FEATURE_CPUMEMHISTORY
+ NULL,
+ gifdrv_save_memmap
+#else
NULL
+#endif
};
void gfxoutput_init_gif(void)
Modified: branches/marco/ports/vice/src/gfxoutputdrv/iffdrv.c
===================================================================
--- branches/marco/ports/vice/src/gfxoutputdrv/iffdrv.c 2008-05-31 20:59:20 UTC (rev 18817)
+++ branches/marco/ports/vice/src/gfxoutputdrv/iffdrv.c 2008-06-01 03:24:13 UTC (rev 18818)
@@ -225,6 +225,136 @@
return 0;
}
+#ifdef FEATURE_CPUMEMHISTORY
+static FILE *iffdrv_memmap_fd;
+static char *iffdrv_memmap_ext_filename;
+static BYTE *iffdrv_memmap_iff_data;
+static int iffdrv_memmap_iff_rowbytes;
+
+static int iffdrv_close_memmap(void)
+{
+ fclose(iffdrv_memmap_fd);
+ lib_free(iffdrv_memmap_iff_data);
+ lib_free(iffdrv_memmap_ext_filename);
+
+ return 0;
+}
+
+static int iffdrv_write_memmap(int line, int x_size, BYTE *gfx)
+{
+ int j;
+
+ for (j = 0; j<8; j++)
+ {
+ iff_c2p(gfx+(x_size*line), iffdrv_memmap_iff_data, iffdrv_memmap_iff_rowbytes, j);
+ if (fwrite(iffdrv_memmap_iff_data, iffdrv_memmap_iff_rowbytes, 1, iffdrv_memmap_fd)<1)
+ return -1;
+ }
+ return 0;
+}
+
+static int iffdrv_write_file_header_memmap(int x_size, int y_size, BYTE *palette)
+{
+ BYTE header[836];
+ int i;
+ int totalsize;
+
+ memset(header, 0, sizeof(header));
+
+ iffdrv_memmap_iff_rowbytes=((x_size+15)>>4)<<1;
+
+ totalsize=828+(iffdrv_memmap_iff_rowbytes*y_size*8);
+
+ header[0]='F';
+ header[1]='O';
+ header[2]='R';
+ header[3]='M';
+ util_dword_to_be_buf(&header[4], totalsize);
+ header[8]='I';
+ header[9]='L';
+ header[10]='B';
+ header[11]='M';
+ header[12]='B';
+ header[13]='M';
+ header[14]='H';
+ header[15]='D';
+ util_dword_to_be_buf(&header[16], 20);
+ util_word_to_be_buf(&header[20],(WORD)(x_size));
+ util_word_to_be_buf(&header[22],(WORD)(y_size));
+ header[28]=8;
+ util_word_to_be_buf(&header[36],(WORD)(x_size));
+ util_word_to_be_buf(&header[38],(WORD)(y_size));
+ header[40]='C';
+ header[41]='M';
+ header[42]='A';
+ header[43]='P';
+ util_dword_to_be_buf(&header[44],3*256);
+
+ for (i = 0; i < 256; i++)
+ {
+ header[48+(i*3)]=palette[i*3];
+ header[49+(i*3)]=palette[(i*3)+1];
+ header[50+(i*3)]=palette[(i*3)+2];
+ }
+ header[816]='C';
+ header[817]='A';
+ header[818]='M';
+ header[819]='G';
+ util_dword_to_be_buf(&header[820],4);
+ header[828]='B';
+ header[829]='O';
+ header[830]='D';
+ header[831]='Y';
+ util_dword_to_be_buf(&header[832],iffdrv_memmap_iff_rowbytes*y_size*8);
+
+ if (fwrite(header,836,1,iffdrv_memmap_fd)<1)
+ return -1;
+
+ return 0;
+}
+
+static int iffdrv_open_memmap(const char *filename, int x_size, int y_size, BYTE *palette)
+{
+ iffdrv_memmap_ext_filename=util_add_extension_const(filename, iff_drv.default_extension);
+ iffdrv_memmap_fd = fopen(iffdrv_memmap_ext_filename, "wb");
+
+ if (iffdrv_memmap_fd==NULL)
+ {
+ lib_free(iffdrv_memmap_ext_filename);
+ return -1;
+ }
+
+ if (iffdrv_write_file_header_memmap(x_size, y_size, palette)<0)
+ {
+ fclose(iffdrv_memmap_fd);
+ lib_free(iffdrv_memmap_ext_filename);
+ return -1;
+ }
+
+ iffdrv_memmap_iff_data = (BYTE *)lib_malloc(iffdrv_memmap_iff_rowbytes);
+
+ return 0;
+}
+
+static int iffdrv_save_memmap(const char *filename, int x_size, int y_size, BYTE *gfx, BYTE *palette)
+{
+ int line;
+
+ if (iffdrv_open_memmap(filename, x_size, y_size, palette) < 0)
+ return -1;
+
+ for (line = 0; line < y_size; line++)
+ {
+ iffdrv_write_memmap(line, x_size, gfx);
+ }
+
+ if (iffdrv_close_memmap() < 0)
+ return -1;
+
+ return 0;
+}
+#endif
+
static gfxoutputdrv_t iff_drv =
{
"IFF",
@@ -234,7 +364,12 @@
iffdrv_close,
iffdrv_write,
iffdrv_save,
+#ifdef FEATURE_CPUMEMHISTORY
+ NULL,
+ iffdrv_save_memmap
+#else
NULL
+#endif
};
void gfxoutput_init_iff(void)
Modified: branches/marco/ports/vice/src/gfxoutputdrv/jpegdrv.c
===================================================================
--- branches/marco/ports/vice/src/gfxoutputdrv/jpegdrv.c 2008-05-31 20:59:20 UTC (rev 18817)
+++ branches/marco/ports/vice/src/gfxoutputdrv/jpegdrv.c 2008-06-01 03:24:13 UTC (rev 18818)
@@ -135,6 +135,84 @@
return 0;
}
+#ifdef FEATURE_CPUMEMHISTORY
+static FILE *jpegdrv_memmap_fd;
+static char *jpegdrv_memmap_ext_filename;
+static BYTE *jpegdrv_memmap_data;
+
+static int jpegdrv_close_memmap(void)
+{
+ jpeg_finish_compress(&cinfo);
+ fclose(jpegdrv_memmap_fd);
+ jpeg_destroy_compress(&cinfo);
+ lib_free(jpegdrv_memmap_data);
+ lib_free(jpegdrv_memmap_ext_filename);
+
+ return 0;
+}
+
+static int jpegdrv_write_memmap(int line, int x_size, BYTE *gfx, BYTE *palette)
+{
+ int i;
+ BYTE pixval;
+ JSAMPROW rowpointer[1];
+
+ for (i=0; i<x_size; i++)
+ {
+ pixval = gfx[(line*x_size)+i];
+ jpegdrv_memmap_data[i*3]=palette[pixval*3];
+ jpegdrv_memmap_data[(i*3)+1]=palette[(pixval*3)+1];
+ jpegdrv_memmap_data[(i*3)+2]=palette[(pixval*3)+2];
+ }
+ rowpointer[0]=jpegdrv_memmap_data;
+ jpeg_write_scanlines(&cinfo, rowpointer, 1);
+
+ return 0;
+}
+
+static int jpegdrv_open_memmap(const char *filename, int x_size, int y_size)
+{
+ cinfo.err = jpeg_std_error(&jerr);
+ jpeg_create_compress(&cinfo);
+ jpegdrv_memmap_ext_filename=util_add_extension_const(filename, jpeg_drv.default_extension);
+ jpegdrv_memmap_fd = fopen(jpegdrv_memmap_ext_filename, "wb");
+ if (jpegdrv_memmap_fd==NULL)
+ {
+ jpeg_destroy_compress(&cinfo);
+ lib_free(jpegdrv_memmap_ext_filename);
+ return -1;
+ }
+ jpeg_stdio_dest(&cinfo, jpegdrv_memmap_fd);
+ jpegdrv_memmap_data = (BYTE *)lib_malloc(x_size*3);
+ cinfo.image_width = x_size;
+ cinfo.image_height = y_size;
+ cinfo.input_components = 3;
+ cinfo.in_color_space = JCS_RGB;
+ jpeg_set_defaults(&cinfo);
+ jpeg_start_compress(&cinfo, TRUE);
+
+ return 0;
+}
+
+static int jpegdrv_save_memmap(const char *filename, int x_size, int y_size, BYTE *gfx, BYTE *palette)
+{
+ int line;
+
+ if (jpegdrv_open_memmap(filename, x_size, y_size) < 0)
+ return -1;
+
+ for (line = 0; line < y_size; line++)
+ {
+ jpegdrv_write_memmap(line, x_size, gfx, palette);
+ }
+
+ if (jpegdrv_close_memmap() < 0)
+ return -1;
+
+ return 0;
+}
+#endif
+
static gfxoutputdrv_t jpeg_drv =
{
"JPEG",
@@ -144,7 +222,12 @@
jpegdrv_close,
jpegdrv_write,
jpegdrv_save,
+#ifdef FEATURE_CPUMEMHISTORY
+ NULL,
+ jpegdrv_save_memmap
+#else
NULL
+#endif
};
void gfxoutput_init_jpeg(void)
Modified: branches/marco/ports/vice/src/gfxoutputdrv/pcxdrv.c
===================================================================
--- branches/marco/ports/vice/src/gfxoutputdrv/pcxdrv.c 2008-05-31 20:59:20 UTC (rev 18817)
+++ branches/marco/ports/vice/src/gfxoutputdrv/pcxdrv.c 2008-06-01 03:24:13 UTC (rev 18818)
@@ -256,6 +256,180 @@
return 0;
}
+#ifdef FEATURE_CPUMEMHISTORY
+static FILE *pcxdrv_memmap_fd;
+static char *pcxdrv_memmap_ext_filename;
+static BYTE *pcxdrv_memmap_pcx_data;
+
+static int pcxdrv_close_memmap(BYTE *palette)
+{
+ BYTE pcx_color_prefix[2]="\x0c";
+
+ fwrite(pcx_color_prefix, 1, 1, pcxdrv_memmap_fd);
+
+ fwrite(palette, 3*256, 1, pcxdrv_memmap_fd);
+
+ fclose(pcxdrv_memmap_fd);
+ lib_free(pcxdrv_memmap_pcx_data);
+ lib_free(pcxdrv_memmap_ext_filename);
+
+ return 0;
+}
+
+static int pcxdrv_write_memmap(int line, int x_size, BYTE *gfx)
+{
+ BYTE color,amount;
+ unsigned int i,j=0;
+
+ color=gfx[(line*x_size)];
+ amount=1;
+ for (i = 1; i<x_size; i++)
+ {
+ if (gfx[(line*x_size)+i]==color)
+ {
+ amount=amount+1;
+ if (amount==63)
+ {
+ pcxdrv_memmap_pcx_data[j]=0xff;
+ pcxdrv_memmap_pcx_data[j+1]=color;
+ j=j+2;
+ amount=0;
+ }
+ }
+ else
+ {
+ if (amount==0)
+ {
+ color=gfx[(line*x_size)+i];
+ amount=1;
+ }
+ else
+ {
+ if (amount>1)
+ {
+ pcxdrv_memmap_pcx_data[j]=0xc0 | amount;
+ pcxdrv_memmap_pcx_data[j+1]=color;
+ j=j+2;
+ color=gfx[(line*x_size)+i];
+ amount=1;
+ }
+ else
+ {
+ if (color>0xbf)
+ {
+ pcxdrv_memmap_pcx_data[j]=0xc1;
+ pcxdrv_memmap_pcx_data[j+1]=color;
+ j=j+2;
+ }
+ else
+ {
+ pcxdrv_memmap_pcx_data[j]=color;
+ j++;
+ }
+ color=gfx[(line*x_size)+i];
+ amount=1;
+ }
+ }
+ }
+ }
+ if (amount==1)
+ {
+ if (color>0xbf)
+ {
+ pcxdrv_memmap_pcx_data[j]=0xc1;
+ pcxdrv_memmap_pcx_data[j+1]=color;
+ j=j+2;
+ }
+ else
+ {
+ pcxdrv_memmap_pcx_data[j]=color;
+ j++;
+ }
+ }
+ else
+ {
+ if (amount>1)
+ {
+ pcxdrv_memmap_pcx_data[j]=0xc0 | amount;
+ pcxdrv_memmap_pcx_data[j+1]=color;
+ j=j+2;
+ }
+ }
+
+ if (fwrite(pcxdrv_memmap_pcx_data, j, 1, pcxdrv_memmap_fd)<1)
+ return -1;
+
+ return 0;
+}
+
+static int pcxdrv_write_file_header_memmap(int x_size, int y_size)
+{
+ BYTE header[128];
+
+ memset(header, 0, sizeof(header));
+
+ header[0]=0xa;
+ header[1]=5;
+ header[2]=1;
+ header[3]=8;
+
+ util_word_to_le_buf(&header[8], (WORD)(x_size-1));
+ util_word_to_le_buf(&header[10], (WORD)(y_size-1));
+
+ util_word_to_le_buf(&header[12], (WORD)(0));
+ util_word_to_le_buf(&header[14], (WORD)(0));
+
+ header[65]=1;
+ util_word_to_le_buf(&header[66], (WORD)(x_size));
+
+ if (fwrite(header, sizeof(header), 1, pcxdrv_memmap_fd)<1)
+ return -1;
+
+ return 0;
+}
+
+static int pcxdrv_open_memmap(const char *filename, int x_size, int y_size)
+{
+ pcxdrv_memmap_ext_filename=util_add_extension_const(filename, pcx_drv.default_extension);
+ pcxdrv_memmap_fd = fopen(pcxdrv_memmap_ext_filename, "wb");
+
+ if (pcxdrv_memmap_fd==NULL)
+ {
+ lib_free(pcxdrv_memmap_ext_filename);
+ return -1;
+ }
+
+ if (pcxdrv_write_file_header_memmap(x_size, y_size)<0)
+ {
+ fclose(pcxdrv_memmap_fd);
+ lib_free(pcxdrv_memmap_ext_filename);
+ return -1;
+ }
+
+ pcxdrv_memmap_pcx_data = (BYTE *)lib_malloc(x_size*2);
+
+ return 0;
+}
+
+static int pcxdrv_save_memmap(const char *filename, int x_size, int y_size, BYTE *gfx, BYTE *palette)
+{
+ int line;
+
+ if (pcxdrv_open_memmap(filename, x_size, y_size) < 0)
+ return -1;
+
+ for (line = 0; line < y_size; line++)
+ {
+ pcxdrv_write_memmap(line, x_size, gfx);
+ }
+
+ if (pcxdrv_close_memmap(palette) < 0)
+ return -1;
+
+ return 0;
+}
+#endif
+
static gfxoutputdrv_t pcx_drv =
{
"PCX",
@@ -265,7 +439,12 @@
pcxdrv_close,
pcxdrv_write,
pcxdrv_save,
+#ifdef FEATURE_CPUMEMHISTORY
+ NULL,
+ pcxdrv_save_memmap
+#else
NULL
+#endif
};
void gfxoutput_init_pcx(void)
Modified: branches/marco/ports/vice/src/gfxoutputdrv/pngdrv.c
===================================================================
--- branches/marco/ports/vice/src/gfxoutputdrv/pngdrv.c 2008-05-31 20:59:20 UTC (rev 18817)
+++ branches/marco/ports/vice/src/gfxoutputdrv/pngdrv.c 2008-06-01 03:24:13 UTC (rev 18818)
@@ -161,6 +161,114 @@
return 0;
}
+#ifdef FEATURE_CPUMEMHISTORY
+static FILE *pngdrv_memmap_fd;
+static char *pngdrv_memmap_ext_filename;
+static png_structp pngdrv_memmap_png_ptr;
+static png_infop pngdrv_memmap_info_ptr;
+static BYTE *pngdrv_memmap_png_data;
+
+static int pngdrv_close_memmap(void)
+{
+ png_write_end(pngdrv_memmap_png_ptr, pngdrv_memmap_info_ptr);
+
+ png_destroy_write_struct(&(pngdrv_memmap_png_ptr), &(pngdrv_memmap_info_ptr));
+
+ fclose(pngdrv_memmap_fd);
+ lib_free(pngdrv_memmap_png_data);
+ lib_free(pngdrv_memmap_ext_filename);
+
+ return 0;
+}
+
+static int pngdrv_write_memmap(int line, int x_size, BYTE *gfx, BYTE *palette)
+{
+ int i;
+ BYTE pixval;
+
+ for (i=0; i<x_size; i++)
+ {
+ pixval = gfx[(line*x_size)+i];
+ pngdrv_memmap_png_data[i*4] = palette[pixval*3];
+ pngdrv_memmap_png_data[(i*4)+1] = palette[(pixval*3)+1];
+ pngdrv_memmap_png_data[(i*4)+2] = palette[(pixval*3)+2];
+ pngdrv_memmap_png_data[(i*4)+3] = 0;
+ }
+
+ png_write_row(pngdrv_memmap_png_ptr, (png_bytep)(pngdrv_memmap_png_data));
+
+ return 0;
+}
+
+static int pngdrv_open_memmap(const char *filename, int x_size, int y_size, BYTE *palette)
+{
+ pngdrv_memmap_png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, (void *)NULL, NULL, NULL);
+
+ if (pngdrv_memmap_png_ptr == NULL)
+ return -1;
+
+ pngdrv_memmap_info_ptr = png_create_info_struct(pngdrv_memmap_png_ptr);
+
+ if (pngdrv_memmap_info_ptr == NULL)
+ {
+ png_destroy_write_struct(&(pngdrv_memmap_png_ptr), (png_infopp)NULL);
+ return -1;
+ }
+
+ if (setjmp(pngdrv_memmap_png_ptr->jmpbuf))
+ {
+ png_destroy_write_struct(&(pngdrv_memmap_png_ptr), &(pngdrv_memmap_info_ptr));
+ return -1;
+ }
+
+ pngdrv_memmap_ext_filename = util_add_extension_const(filename, png_drv.default_extension);
+
+ pngdrv_memmap_fd = fopen(pngdrv_memmap_ext_filename, MODE_WRITE);
+
+ if (pngdrv_memmap_fd == NULL)
+ {
+ lib_free(pngdrv_memmap_ext_filename);
+ return -1;
+ }
+
+ pngdrv_memmap_png_data = (BYTE *)lib_malloc(x_size * 4);
+
+ png_init_io(pngdrv_memmap_png_ptr, pngdrv_memmap_fd);
+ png_set_compression_level(pngdrv_memmap_png_ptr, Z_BEST_COMPRESSION);
+
+ pngdrv_memmap_info_ptr->width = x_size;
+ pngdrv_memmap_info_ptr->height= y_size;
+ pngdrv_memmap_info_ptr->bit_depth = 8;
+ pngdrv_memmap_info_ptr->color_type = PNG_COLOR_TYPE_RGB_ALPHA;
+
+ png_write_info(pngdrv_memmap_png_ptr, pngdrv_memmap_info_ptr);
+
+#ifdef PNG_READ_INVERT_ALPHA_SUPPORTED
+ png_set_invert_alpha(pngdrv_memmap_png_ptr);
+#endif
+
+ return 0;
+}
+
+static int pngdrv_save_memmap(const char *filename, int x_size, int y_size, BYTE *gfx, BYTE *palette)
+{
+ int line;
+
+ if (pngdrv_open_memmap(filename, x_size, y_size, palette) < 0)
+ return -1;
+
+ for (line = 0; line < y_size; line++)
+ {
+ pngdrv_write_memmap(line, x_size, gfx, palette);
+ }
+
+ if (pngdrv_close_memmap() < 0)
+ return -1;
+
+ return 0;
+}
+#endif
+
static gfxoutputdrv_t png_drv =
{
"PNG",
@@ -170,7 +278,12 @@
pngdrv_close,
pngdrv_write,
pngdrv_save,
+#ifdef FEATURE_CPUMEMHISTORY
+ NULL,
+ pngdrv_save_memmap
+#else
NULL
+#endif
};
void gfxoutput_init_png(void)
Modified: branches/marco/ports/vice/src/gfxoutputdrv/ppmdrv.c
===================================================================
--- branches/marco/ports/vice/src/gfxoutputdrv/ppmdrv.c 2008-05-31 20:59:20 UTC (rev 18817)
+++ branches/marco/ports/vice/src/gfxoutputdrv/ppmdrv.c 2008-06-01 03:24:13 UTC (rev 18818)
@@ -151,6 +151,86 @@
return 0;
}
+#ifdef FEATURE_CPUMEMHISTORY
+static FILE *ppmdrv_memmap_fd;
+static char *ppmdrv_memmap_ext_filename;
+
+static int ppmdrv_close_memmap(void)
+{
+ fclose(ppmdrv_memmap_fd);
+ lib_free(ppmdrv_memmap_ext_filename);
+
+ return 0;
+}
+
+static int ppmdrv_write_memmap(int line, int x_size, BYTE *gfx, BYTE *palette)
+{
+ unsigned int i;
+ BYTE pixval;
+
+ for (i = 0; i<x_size; i++)
+ {
+ pixval = gfx[(line*x_size)+i];
+ if (fprintf(ppmdrv_memmap_fd, "%3d %3d %3d\x0a",palette[pixval*3],palette[(pixval*3)+1],palette[(pixval*3)+2])<0)
+ return -1;
+ }
+ return 0;
+}
+
+static int ppmdrv_write_file_header_memmap(int x_size, int y_size)
+{
+ if (fprintf(ppmdrv_memmap_fd,"P3\x0a")<0)
+ return -1;
+ if (fprintf(ppmdrv_memmap_fd,"# VICEplus generated PPM mem map grafix\x0a")<0)
+ return -1;
+ if (fprintf(ppmdrv_memmap_fd,"%d %d\x0a",x_size,y_size)<0)
+ return -1;
+ if (fprintf(ppmdrv_memmap_fd,"255\x0a")<0)
+ return -1;
+
+ return 0;
+}
+
+static int ppmdrv_open_memmap(const char *filename, int x_size, int y_size)
+{
+ ppmdrv_memmap_ext_filename=util_add_extension_const(filename, ppm_drv.default_extension);
+ ppmdrv_memmap_fd = fopen(ppmdrv_memmap_ext_filename, "wb");
+
+ if (ppmdrv_memmap_fd==NULL)
+ {
+ lib_free(ppmdrv_memmap_ext_filename);
+ return -1;
+ }
+
+ if (ppmdrv_write_file_header_memmap(x_size, y_size)<0)
+ {
+ fclose(ppmdrv_memmap_fd);
+ lib_free(ppmdrv_memmap_ext_filename);
+ return -1;
+ }
+
+ return 0;
+}
+
+static int ppmdrv_save_memmap(const char *filename, int x_size, int y_size, BYTE *gfx, BYTE *palette)
+{
+ int line;
+
+ if (ppmdrv_open_memmap(filename, x_size, y_size) < 0)
+ return -1;
+
+ for (line = 0; line < y_size; line++)
+ {
+ ppmdrv_write_memmap(line, x_size, gfx, palette);
+ }
+
+ if (ppmdrv_close_memmap() < 0)
+ return -1;
+
+ return 0;
+}
+#endif
+
static gfxoutputdrv_t ppm_drv =
{
"PPM",
@@ -160,7 +240,12 @@
ppmdrv_close,
ppmdrv_write,
ppmdrv_save,
+#ifdef FEATURE_CPUMEMHISTORY
+ NULL,
+ ppmdrv_save_memmap
+#else
NULL
+#endif
};
void gfxoutput_init_ppm(void)
Modified: branches/marco/ports/vice/src/maincpu.c
===================================================================
--- branches/marco/ports/vice/src/maincpu.c 2008-05-31 20:59:20 UTC (rev 18817)
+++ branches/marco/ports/vice/src/maincpu.c 2008-06-01 03:24:13 UTC (rev 18818)
@@ -74,24 +74,76 @@
/* ------------------------------------------------------------------------- */
+#ifndef STORE_ZERO
+#define STORE_ZERO(addr, value) \
+ zero_store((WORD)(addr), (BYTE)(value))
+#endif
+
+#ifndef LOAD_ZERO
+#define LOAD_ZERO(addr) \
+ zero_read((WORD)(addr))
+#endif
+
+#ifdef FEATURE_CPUMEMHISTORY
+
+/* HACK this is C64 specific */
+
+void REGPARM2 memmap_mem_store(WORD addr, BYTE value)
+{
+ if((addr >= 0xd000)&&(addr <= 0xdfff)) {
+ monitor_memmap_store(addr, MEMMAP_I_O_W);
+ } else {
+ monitor_memmap_store(addr, MEMMAP_RAM_W);
+ }
+ (*_mem_write_tab_ptr[(addr) >> 8])((WORD)(addr), (BYTE)(value));
+}
+
+BYTE REGPARM1 memmap_mem_read(WORD addr)
+{
+ switch(addr >> 12) {
+ case 0xa:
+ case 0xb:
+ case 0xe:
+ case 0xf:
+ memmap_state |= MEMMAP_STATE_IGNORE;
+ if(LOAD_ZERO(1) & (1 << ((addr>>14) & 1))) {
+ monitor_memmap_store(addr, (memmap_state&MEMMAP_STATE_OPCODE)?MEMMAP_ROM_X:(memmap_state&MEMMAP_STATE_INSTR)?0:MEMMAP_ROM_R);
+ } else {
+ monitor_memmap_store(addr, (memmap_state&MEMMAP_STATE_OPCODE)?MEMMAP_RAM_X:(memmap_state&MEMMAP_STATE_INSTR)?0:MEMMAP_RAM_R);
+ }
+ memmap_state &= ~(MEMMAP_STATE_IGNORE);
+ break;
+ case 0xd:
+ monitor_memmap_store(addr, MEMMAP_I_O_R);
+ break;
+ default:
+ monitor_memmap_store(addr, (memmap_state&MEMMAP_STATE_OPCODE)?MEMMAP_RAM_X:(memmap_state&MEMMAP_STATE_INSTR)?0:MEMMAP_RAM_R);
+ break;
+ }
+ memmap_state &= ~(MEMMAP_STATE_OPCODE);
+ return (*_mem_read_tab_ptr[(addr) >> 8])((WORD)(addr));
+}
+
#ifndef STORE
#define STORE(addr, value) \
- (*_mem_write_tab_ptr[(addr) >> 8])((WORD)(addr), (BYTE)(value))
+ memmap_mem_store(addr, value)
#endif
#ifndef LOAD
#define LOAD(addr) \
- (*_mem_read_tab_ptr[(addr) >> 8])((WORD)(addr))
+ memmap_mem_read(addr)
#endif
-#ifndef STORE_ZERO
-#define STORE_ZERO(addr, value) \
- zero_store((WORD)(addr), (BYTE)(value))
+#endif /* FEATURE_CPUMEMHISTORY */
+
+#ifndef STORE
+#define STORE(addr, value) \
+ (*_mem_write_tab_ptr[(addr) >> 8])((WORD)(addr), (BYTE)(value))
#endif
-#ifndef LOAD_ZERO
-#define LOAD_ZERO(addr) \
- zero_read((WORD)(addr))
+#ifndef LOAD
+#define LOAD(addr) \
+ (*_mem_read_tab_ptr[(addr) >> 8])((WORD)(addr))
#endif
#define LOAD_ADDR(addr) \
Modified: branches/marco/ports/vice/src/monitor/mon_command.c
===================================================================
--- branches/marco/ports/vice/src/monitor/mon_command.c 2008-05-31 20:59:20 UTC (rev 18817)
+++ branches/marco/ports/vice/src/monitor/mon_command.c 2008-06-01 03:24:13 UTC (rev 18818)
@@ -67,6 +67,10 @@
"<type>",
"Specify the type of CPU currently used (6502/z80)." },
+ { "cpuhistory", "chis",
+ "[<count>]",
+ "Show <count> last executed commands." },
+
{ "dump", "",
"\"<filename>\"",
"Write a snapshot of the machine into the file specified.\n"
@@ -221,6 +225,22 @@
"is specified, only one character is displayed. If no addresses are\n"
"given, the ``dot'' address is used." },
+ { "memmapsave", "mmsave",
+ "\"<filename>\" <format>",
+ "Save the memmap as a picture. Format is:\n"
+ "0 = BMP, 1 = PCX, 2 = PNG, 3 = GIF, 4 = IFF." },
+
+ { "memmapshow", "mmsh",
+ "[<mask>] [<address_opt_range>]",
+ "Show the memmap. The mask can be specified to show only those\n"
+ "locations with accesses of certain type(s). The mask is a number\n"
+ "with the bits \"ioRWXrwx\", where RWX are for ROM and rwx for RAM.\n"
+ "Optionally, an address range can be specified." },
+
+ { "memmapzap", "mmzap",
+ NULL,
+ "Clear the memmap." },
+
{ "memsprite", "ms",
"[<data_type>] [<address_opt_range>]",
"Display the contents of memory as sprite data. If only one address is\n"
Modified: branches/marco/ports/vice/src/monitor/mon_lex.c
===================================================================
--- branches/marco/ports/vice/src/monitor/mon_lex.c 2008-05-31 20:59:20 UTC (rev 18817)
+++ branches/marco/ports/vice/src/monitor/mon_lex.c 2008-06-01 03:24:13 UTC (rev 18818)
@@ -363,8 +363,8 @@
*yy_cp = '\0'; \
(yy_c_buf_p) = yy_cp;
-#define YY_NUM_RULES 169
-#define YY_END_OF_BUFFER 170
+#define YY_NUM_RULES 173
+#define YY_END_OF_BUFFER 174
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -372,116 +372,119 @@
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static yyconst flex_int16_t yy_acclist[955] =
+static yyconst flex_int16_t yy_acclist[987] =
{ 0,
- 96, 159, 96, 159, 96, 96, 96, 96, 81, 96,
- 81, 96, 96, 96, 96, 159, 96, 159, 96, 159,
- 96, 159, 96, 159, 96, 159, 96, 159, 96, 159,
- 96, 99, 96, 99, 95, 96, 95, 96, 170, 168,
- 169, 96, 169, 97, 168, 169, 79, 168, 169, 168,
- 169, 168, 169, 168, 169, 168, 169, 166, 168, 169,
- 168, 169, 159, 161, 164, 168, 169, 156, 159, 161,
- 164, 168, 169, 161, 164, 168, 169, 161, 164, 168,
- 169, 72, 168, 169, 165, 168, 169, 164, 168, 169,
- 88, 164, 168, 169, 164, 168, 169, 86, 164, 168,
+ 100, 163, 100, 163, 100, 100, 100, 100, 85, 100,
+ 85, 100, 100, 100, 100, 163, 100, 163, 100, 163,
+ 100, 163, 100, 163, 100, 163, 100, 163, 100, 163,
+ 100, 103, 100, 103, 99, 100, 99, 100, 174, 172,
+ 173, 100, 173, 101, 172, 173, 83, 172, 173, 172,
+ 173, 172, 173, 172, 173, 172, 173, 170, 172, 173,
+ 172, 173, 163, 165, 168, 172, 173, 160, 163, 165,
+ 168, 172, 173, 165, 168, 172, 173, 165, 168, 172,
+ 173, 76, 172, 173, 169, 172, 173, 168, 172, 173,
+ 92, 168, 172, 173, 168, 172, 173, 90, 168, 172,
- 169, 87, 168, 169, 89, 168, 169, 168, 169, 168,
- 169, 168, 169, 89, 168, 169, 168, 169, 168, 169,
- 168, 169, 168, 169, 2, 168, 169, 32, 168, 169,
- 3, 168, 169, 71, 168, 169, 4, 71, 168, 169,
- 71, 168, 169, 17, 71, 168, 169, 21, 71, 168,
- 169, 71, 168, 169, 30, 71, 168, 169, 31, 71,
- 168, 169, 33, 71, 168, 169, 34, 71, 168, 169,
- 71, 168, 169, 39, 71, 168, 169, 41, 71, 168,
- 169, 45, 71, 168, 169, 47, 71, 168, 169, 71,
- 168, 169, 52, 71, 168, 169, 57, 71, 168, 169,
+ 173, 91, 172, 173, 93, 172, 173, 172, 173, 172,
+ 173, 172, 173, 93, 172, 173, 172, 173, 172, 173,
+ 172, 173, 172, 173, 2, 172, 173, 33, 172, 173,
+ 3, 172, 173, 75, 172, 173, 4, 75, 172, 173,
+ 75, 172, 173, 17, 75, 172, 173, 22, 75, 172,
+ 173, 75, 172, 173, 31, 75, 172, 173, 32, 75,
+ 172, 173, 34, 75, 172, 173, 35, 75, 172, 173,
+ 75, 172, 173, 40, 75, 172, 173, 42, 75, 172,
+ 173, 49, 75, 172, 173, 51, 75, 172, 173, 75,
+ 172, 173, 56, 75, 172, 173, 61, 75, 172, 173,
- 43, 71, 168, 169, 71, 168, 169, 69, 71, 168,
- 169, 29, 71, 168, 169, 71, 168, 169, 63, 71,
- 168, 169, 1, 168, 169, 81, 168, 169, 81, 96,
- 169, 80, 168, 169, 81, 166, 168, 169, 81, 165,
- 168, 169, 100, 168, 169, 100, 166, 168, 169, 100,
- 165, 168, 169, 153, 168, 169, 151, 168, 169, 152,
- 168, 169, 168, 169, 156, 159, 161, 164, 168, 169,
- 161, 164, 168, 169, 154, 168, 169, 164, 168, 169,
- 16526, 143, 164, 168, 169, 144, 164, 168, 169, 145,
- 164, 168, 169, 146, 164, 168, 169, 164, 168, 169,
+ 47, 75, 172, 173, 75, 172, 173, 73, 75, 172,
+ 173, 30, 75, 172, 173, 75, 172, 173, 67, 75,
+ 172, 173, 1, 172, 173, 85, 172, 173, 85, 100,
+ 173, 84, 172, 173, 85, 170, 172, 173, 85, 169,
+ 172, 173, 104, 172, 173, 104, 170, 172, 173, 104,
+ 169, 172, 173, 157, 172, 173, 155, 172, 173, 156,
+ 172, 173, 172, 173, 160, 163, 165, 168, 172, 173,
+ 165, 168, 172, 173, 158, 172, 173, 168, 172, 173,
+ 16530, 147, 168, 172, 173, 148, 168, 172, 173, 149,
+ 168, 172, 173, 150, 168, 172, 173, 168, 172, 173,
- 168, 169, 147, 168, 169, 168, 169, 148, 168, 169,
- 149, 168, 169, 150, 168, 169, 164, 168, 169,16526,
- 143, 164, 168, 169, 145, 164, 168, 169, 147, 168,
- 169, 168, 169, 149, 168, 169, 168, 169, 168, 169,
- 119, 168, 169, 120, 168, 169, 168, 169, 109, 168,
- 169, 165, 168, 169, 110, 168, 169, 168, 169, 101,
- 164, 168, 169, 168, 169, 168, 169, 102, 168, 169,
- 103, 168, 169, 102, 168, 169, 168, 169, 99, 168,
- 169, 99, 168, 169, 99, 168, 169, 99, 168, 169,
- 99, 168, 169, 95, 168, 169, 96, 163, 157, 158,
+ 172, 173, 151, 172, 173, 172, 173, 152, 172, 173,
+ 153, 172, 173, 154, 172, 173, 168, 172, 173,16530,
+ 147, 168, 172, 173, 149, 168, 172, 173, 151, 172,
+ 173, 172, 173, 153, 172, 173, 172, 173, 172, 173,
+ 123, 172, 173, 124, 172, 173, 172, 173, 113, 172,
+ 173, 169, 172, 173, 114, 172, 173, 172, 173, 105,
+ 168, 172, 173, 172, 173, 172, 173, 106, 172, 173,
+ 107, 172, 173, 106, 172, 173, 172, 173, 103, 172,
+ 173, 103, 172, 173, 103, 172, 173, 103, 172, 173,
+ 103, 172, 173, 99, 172, 173, 100, 167, 161, 162,
- 160, 82, 84, 85, 83, 141, 140, 141, 159, 161,
- 164, 161, 164, 164, 156, 159, 161, 164, 156, 159,
- 161, 164, 91, 92, 90, 162, 78, 73, 71, 71,
- 5, 71, 71, 71, 8, 71, 9, 71, 11, 71,
- 12, 71, 13, 71, 71, 15, 71, 71, 71, 71,
- 71, 23, 71, 71, 71, 71, 71, 71, 71, 71,
- 71, 35, 71, 37, 71, 71, 40, 71, 71, 20,
- 71, 42, 71, 71, 71, 44, 71, 71, 46, 71,
- 71, 71, 71, 71, 71, 71, 71, 59, 71, 71,
- 71, 71, 58, 71, 71, 71, 66, 71, 67, 71,
+ 164, 86, 88, 89, 87, 145, 144, 145, 163, 165,
+ 168, 165, 168, 168, 160, 163, 165, 168, 160, 163,
+ 165, 168, 95, 96, 94, 166, 82, 77, 75, 75,
+ 5, 75, 75, 75, 8, 75, 9, 75, 11, 75,
+ 12, 75, 13, 75, 75, 15, 75, 75, 75, 75,
+ 75, 75, 24, 75, 75, 75, 75, 75, 75, 75,
+ 75, 75, 36, 75, 38, 75, 75, 41, 75, 75,
+ 21, 75, 43, 75, 75, 75, 75, 48, 75, 75,
+ 50, 75, 75, 75, 75, 75, 75, 75, 75, 63,
+ 75, 75, 75, 75, 62, 75, 75, 75, 70, 75,
- 71, 71, 81, 81, 96, 100, 156, 159, 161, 164,
- 8334, 139, 164, 129, 139, 164, 139, 130, 139, 164,
- 131, 139, 164, 132, 139, 133, 139, 136, 139, 139,
- 162, 133, 139, 136, 139, 107, 112, 114, 115, 116,
- 108, 106, 111, 113, 104, 105, 167, 99, 99, 99,
- 95, 141, 140, 141, 159, 161, 164, 161, 164, 164,
- 156, 159, 161, 164, 93, 94, 74, 98, 71, 71,
- 71, 71, 71, 71, 71, 71, 71, 71, 19, 71,
- 22, 71, 71, 24, 71, 71, 71, 71, 71, 71,
- 71, 71, 71, 71, 71, 71, 41, 71, 71, 71,
+ 71, 75, 75, 75, 85, 85, 100, 104, 160, 163,
+ 165, 168, 8338, 143, 168, 133, 143, 168, 143, 134,
+ 143, 168, 135, 143, 168, 136, 143, 137, 143, 140,
+ 143, 143, 166, 137, 143, 140, 143, 111, 116, 118,
+ 119, 120, 112, 110, 115, 117, 108, 109, 171, 103,
+ 103, 103, 99, 145, 144, 145, 163, 165, 168, 165,
+ 168, 168, 160, 163, 165, 168, 97, 98, 78, 102,
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
+ 75, 19, 75, 23, 75, 75, 25, 75, 75, 75,
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 42,
- 71, 71, 48, 71, 71, 50, 71, 51, 71, 71,
- 71, 56, 71, 71, 71, 62, 71, 61, 71, 71,
- 71, 71, 71, 71, 71, 71, 71, 71, 71, 139,
- 164, 139, 134, 139, 135, 139, 137, 139, 138, 139,
- 117, 118, 159, 161, 164, 161, 164, 164, 156, 159,
- 161, 164, 76, 71, 71, 71, 7, 71, 71, 71,
- 71, 71, 71, 71, 71, 18, 71, 71, 71, 71,
- 71, 27, 71, 71, 29, 71, 30, 71, 31, 71,
- 32, 71, 33, 71, 71, 71, 39, 71, 71, 71,
- 43, 71, 45, 71, 71, 71, 49, 71, 71, 71,
+ 75, 75, 75, 75, 75, 75, 75, 52, 75, 75,
+ 54, 75, 55, 75, 75, 75, 60, 75, 75, 75,
+ 66, 75, 65, 75, 75, 75, 75, 75, 75, 75,
+ 75, 75, 75, 75, 143, 168, 143, 138, 143, 139,
+ 143, 141, 143, 142, 143, 121, 122, 163, 165, 168,
+ 165, 168, 168, 160, 163, 165, 168, 80, 75, 75,
+ 75, 7, 75, 75, 75, 75, 75, 75, 20, 75,
+ 75, 75, 18, 75, 75, 75, 75, 75, 75, 28,
+ 75, 75, 30, 75, 31, 75, 32, 75, 33, 75,
+ 34, 75, 75, 75, 40, 75, 75, 75, 75, 75,
- 71, 71, 71, 71, 71, 71, 57, 71, 71, 71,
- 71, 71, 63, 71, 64, 71, 71, 71, 71, 71,
- 71, 71, 139, 164, 139, 159, 161, 164, 161, 164,
- 164, 156, 159, 161, 164, 77, 71, 71, 71, 8,
- 71, 71, 10, 71, 11, 71, 71, 71, 71, 71,
- 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
- 71, 71, 47, 71, 50, 71, 71, 71, 53, 71,
- 71, 71, 71, 71, 71, 71, 60, 71, 71, 71,
- 71, 66, 71, 71, 67, 71, 69, 71, 71, 125,
- 159, 161, 164, 161, 164, 164, 156, 159, 161, 164,
+ 45, 75, 75, 47, 75, 49, 75, 75, 75, 53,
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 61,
+ 75, 75, 75, 75, 75, 67, 75, 68, 75, 75,
+ 75, 75, 75, 75, 75, 143, 168, 143, 163, 165,
+ 168, 165, 168, 168, 160, 163, 165, 168, 81, 75,
+ 75, 75, 8, 75, 75, 10, 75, 11, 75, 75,
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
+ 75, 75, 75, 75, 75, 75, 75, 46, 75, 75,
+ 51, 75, 54, 75, 75, 75, 57, 75, 75, 75,
+ 75, 75, 75, 75, 64, 75, 75, 75, 75, 70,
- 75, 71, 6, 71, 71, 71, 71, 71, 71, 71,
- 22, 71, 25, 71, 24, 71, 71, 21, 71, 28,
- 71, 36, 71, 38, 71, 71, 71, 71, 71, 51,
- 71, 71, 54, 71, 71, 55, 71, 56, 71, 71,
- 59, 71, 71, 71, 68, 71, 71, 121, 128, 126,
- 159, 161, 164, 161, 164, 164, 156, 159, 161, 164,
- 71, 71, 71, 71, 71, 16, 71, 17, 71, 71,
- 71, 26, 71, 71, 71, 71, 71, 71, 71, 71,
- 71, 71, 70, 71, 127, 155, 159, 161, 164, 155,
- 161, 164, 155, 164, 155, 156, 159, 161, 164, 71,
+ 75, 75, 71, 75, 73, 75, 75, 129, 163, 165,
+ 168, 165, 168, 168, 160, 163, 165, 168, 79, 75,
+ 6, 75, 75, 75, 75, 75, 75, 75, 75, 23,
+ 75, 26, 75, 25, 75, 75, 22, 75, 29, 75,
+ 37, 75, 39, 75, 75, 75, 75, 75, 44, 75,
+ 75, 55, 75, 75, 58, 75, 75, 59, 75, 60,
+ 75, 75, 63, 75, 75, 75, 72, 75, 75, 125,
+ 132, 130, 163, 165, 168, 165, 168, 168, 160, 163,
+ 165, 168, 75, 75, 75, 75, 75, 16, 75, 17,
+ 75, 75, 75, 75, 27, 75, 75, 75, 75, 75,
- 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
- 71, 71, 71, 65, 71, 124, 159, 161, 164, 161,
- 164, 164, 156, 159, 161, 164, 71, 71, 71, 18,
- 71, 71, 71, 52, 71, 71, 71, 71, 71, 71,
- 123, 122, 9, 71, 71, 14, 71, 71, 71, 71,
- 71, 71, 71, 71
+ 75, 75, 75, 75, 75, 75, 75, 74, 75, 131,
+ 159, 163, 165, 168, 159, 165, 168, 159, 168, 159,
+ 160, 163, 165, 168, 75, 75, 75, 75, 75, 75,
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
+ 75, 75, 69, 75, 128, 163, 165, 168, 165, 168,
+ 168, 160, 163, 165, 168, 75, 75, 75, 18, 75,
+ 75, 75, 75, 75, 75, 56, 75, 75, 75, 75,
+ 75, 75, 127, 126, 9, 75, 75, 14, 75, 75,
+ 75, 75, 75, 75, 75, 75
} ;
-static yyconst flex_int16_t yy_accept[568] =
+static yyconst flex_int16_t yy_accept[596] =
{ 0,
1, 3, 5, 6, 7, 8, 9, 11, 13, 14,
15, 17, 19, 21, 23, 25, 27, 29, 31, 33,
@@ -502,49 +505,53 @@
415, 419, 423, 424, 425, 426, 427, 428, 428, 428,
429, 429, 429, 429, 430, 431, 433, 434, 435, 437,
439, 441, 443, 445, 446, 448, 449, 450, 451, 452,
- 454, 455, 456, 457, 458, 459, 460, 461, 462, 464,
- 466, 467, 469, 470, 472, 474, 475, 476, 478, 479,
+ 453, 455, 456, 457, 458, 459, 460, 461, 462, 463,
+ 465, 467, 468, 470, 471, 473, 475, 476, 477, 478,
- 481, 482, 483, 484, 485, 486, 487, 488, 490, 491,
- 492, 493, 495, 496, 497, 499, 501, 502, 503, 504,
- 506, 507, 511, 511, 512, 514, 517, 518, 521, 524,
- 526, 528, 530, 532, 534, 536, 537, 538, 539, 539,
- 539, 540, 541, 542, 543, 544, 545, 546, 547, 548,
- 549, 550, 551, 552, 553, 555, 558, 560, 561, 565,
- 566, 567, 567, 568, 568, 568, 569, 570, 571, 572,
- 573, 574, 575, 576, 577, 578, 579, 581, 583, 584,
- 586, 587, 588, 589, 590, 591, 592, 593, 594, 595,
- 596, 597, 599, 600, 601, 602, 603, 605, 606, 608,
+ 480, 481, 483, 484, 485, 486, 487, 488, 489, 490,
+ 492, 493, 494, 495, 497, 498, 499, 501, 503, 504,
+ 505, 506, 508, 509, 513, 513, 514, 516, 519, 520,
+ 523, 526, 528, 530, 532, 534, 536, 538, 539, 540,
+ 541, 541, 541, 542, 543, 544, 545, 546, 547, 548,
+ 549, 550, 551, 552, 553, 554, 555, 557, 560, 562,
+ 563, 567, 568, 569, 569, 570, 570, 570, 571, 572,
+ 573, 574, 575, 576, 577, 578, 579, 580, 581, 582,
+ 584, 586, 587, 589, 590, 591, 592, 593, 594, 595,
+ 596, 597, 598, 599, 600, 602, 603, 604, 605, 606,
- 610, 611, 612, 614, 615, 616, 618, 620, 621, 622,
- 623, 624, 625, 626, 627, 628, 629, 630, 630, 632,
- 633, 635, 637, 639, 641, 642, 643, 646, 648, 649,
- 653, 654, 654, 654, 655, 656, 657, 659, 660, 661,
- 662, 663, 664, 665, 666, 668, 669, 670, 671, 672,
- 674, 675, 677, 679, 681, 683, 685, 686, 687, 689,
- 690, 691, 693, 695, 696, 697, 699, 700, 701, 702,
- 703, 704, 705, 706, 707, 709, 710, 711, 712, 713,
- 715, 717, 718, 719, 720, 721, 722, 723, 723, 723,
- 723, 725, 726, 729, 731, 732, 736, 737, 737, 738,
+ 607, 608, 610, 611, 613, 615, 616, 617, 619, 620,
+ 621, 623, 625, 626, 627, 628, 629, 630, 631, 632,
+ 633, 634, 635, 635, 637, 638, 640, 642, 644, 646,
+ 647, 648, 651, 653, 654, 658, 659, 659, 659, 660,
+ 661, 662, 664, 665, 666, 667, 668, 669, 671, 672,
+ 673, 675, 676, 677, 678, 679, 680, 682, 683, 685,
+ 687, 689, 691, 693, 694, 695, 697, 698, 699, 700,
+ 701, 703, 704, 706, 708, 709, 710, 712, 713, 714,
+ 715, 716, 717, 718, 719, 720, 722, 723, 724, 725,
+ 726, 728, 730, 731, 732, 733, 734, 735, 736, 736,
- 739, 740, 742, 743, 745, 747, 748, 749, 750, 751,
- 752, 753, 754, 755, 756, 757, 758, 759, 760, 761,
- 762, 763, 765, 767, 768, 769, 771, 772, 773, 774,
- 775, 776, 777, 779, 780, 781, 782, 784, 785, 787,
- 789, 790, 790, 791, 791, 791, 791, 794, 796, 797,
- 801, 802, 803, 805, 806, 807, 808, 809, 810, 811,
- 813, 815, 817, 818, 820, 822, 824, 826, 827, 828,
- 829, 830, 832, 833, 835, 836, 838, 840, 841, 843,
- 844, 845, 847, 848, 848, 848, 849, 850, 851, 851,
- 854, 856, 857, 861, 862, 863, 864, 865, 866, 868,
+ 736, 736, 738, 739, 742, 744, 745, 749, 750, 750,
+ 751, 752, 753, 755, 756, 758, 760, 761, 762, 763,
+ 764, 765, 766, 767, 768, 769, 770, 771, 772, 773,
+ 774, 775, 776, 777, 778, 780, 781, 783, 785, 786,
+ 787, 789, 790, 791, 792, 793, 794, 795, 797, 798,
+ 799, 800, 802, 803, 805, 807, 808, 808, 809, 809,
+ 809, 809, 812, 814, 815, 819, 820, 821, 823, 824,
+ 825, 826, 827, 828, 829, 830, 832, 834, 836, 837,
+ 839, 841, 843, 845, 846, 847, 848, 849, 851, 852,
+ 854, 855, 857, 858, 860, 862, 863, 865, 866, 867,
- 870, 871, 872, 874, 875, 876, 877, 878, 879, 880,
- 881, 882, 883, 885, 885, 885, 886, 890, 893, 895,
- 900, 901, 902, 903, 904, 905, 906, 907, 908, 909,
- 910, 911, 912, 913, 914, 916, 917, 917, 920, 922,
- 923, 927, 928, 929, 930, 932, 933, 934, 936, 937,
- 938, 939, 940, 941, 942, 943, 945, 946, 948, 949,
- 950, 951, 952, 953, 954, 955, 955
+ 869, 870, 870, 870, 871, 872, 873, 873, 876, 878,
+ 879, 883, 884, 885, 886, 887, 888, 890, 892, 893,
+ 894, 895, 897, 898, 899, 900, 901, 902, 903, 904,
+ 905, 906, 907, 908, 910, 910, 910, 911, 915, 918,
+ 920, 925, 926, 927, 928, 929, 930, 931, 932, 933,
+ 934, 935, 936, 937, 938, 939, 940, 941, 942, 943,
+ 945, 946, 946, 949, 951, 952, 956, 957, 958, 959,
+ 961, 962, 963, 964, 965, 966, 968, 969, 970, 971,
+ 972, 973, 974, 975, 977, 978, 980, 981, 982, 983,
+ 984, 985, 986, 987, 987
+
} ;
static yyconst flex_int32_t yy_ec[256] =
@@ -590,147 +597,153 @@
11, 11, 11, 11, 11, 11, 11, 11, 1, 1
} ;
-static yyconst flex_int16_t yy_base[601] =
+static yyconst flex_int16_t yy_base[629] =
{ 0,
0, 0, 65, 0, 131, 0, 200, 205, 213, 218,
242, 0, 308, 0, 372, 0, 418, 464, 531, 0,
- 601, 671, 1387, 1388, 75, 1388, 1388, 0, 72, 74,
- 308, 1388, 415, 331, 355, 107, 1365, 1388, 1388, 0,
- 0, 1364, 0, 1388, 1388, 1343, 1334, 1325, 52, 1319,
- 1323, 1313, 0, 1388, 1388, 1388, 0, 171, 383, 310,
- 345, 20, 1326, 1320, 57, 178, 1328, 177, 404, 1327,
- 409, 1311, 192, 426, 55, 1317, 1328, 0, 1304, 0,
- 1388, 0, 100, 1388, 0, 0, 0, 0, 0, 1388,
- 1388, 1388, 486, 113, 1349, 1388, 740, 615, 628, 631,
+ 601, 671, 1419, 1420, 75, 1420, 1420, 0, 72, 74,
+ 308, 1420, 415, 331, 355, 107, 1397, 1420, 1420, 0,
+ 0, 1396, 0, 1420, 1420, 1375, 1366, 1357, 52, 1351,
+ 1355, 1345, 0, 1420, 1420, 1420, 0, 171, 383, 310,
+ 345, 20, 1358, 1352, 57, 178, 1360, 177, 406, 1359,
+ 410, 1343, 192, 445, 55, 1349, 1360, 0, 1336, 0,
+ 1420, 0, 100, 1420, 0, 0, 0, 0, 0, 1420,
+ 1420, 1420, 502, 113, 1381, 1420, 740, 447, 469, 615,
- 635, 685, 0, 1332, 171, 0, 1327, 0, 177, 699,
- 705, 1313, 249, 1300, 1341, 324, 1388, 1388, 487, 1340,
- 1339, 1338, 1292, 0, 193, 278, 1319, 1388, 1293, 0,
- 0, 305, 1337, 1336, 1335, 0, 354, 0, 328, 378,
- 500, 1388, 1388, 1388, 1388, 0, 405, 624, 694, 0,
- 450, 1334, 1388, 1388, 1388, 1388, 1388, 1310, 1304, 1388,
- 1295, 1301, 1344, 0, 1302, 0, 1286, 320, 1290, 1298,
- 1301, 0, 0, 1284, 0, 308, 1280, 419, 323, 0,
- 1287, 1297, 1288, 1285, 1276, 1283, 1280, 1279, 0, 0,
- 1267, 0, 1289, 0, 0, 1277, 1267, 0, 1264, 0,
+ 628, 631, 0, 1364, 171, 0, 1359, 0, 177, 685,
+ 699, 1345, 249, 1332, 1373, 324, 1420, 1420, 601, 1372,
+ 1371, 1370, 1324, 0, 193, 278, 1351, 1420, 1325, 0,
+ 0, 305, 1369, 1368, 1367, 0, 354, 0, 328, 378,
+ 500, 1420, 1420, 1420, 1420, 0, 405, 637, 649, 0,
+ 642, 1366, 1420, 1420, 1420, 1420, 1420, 1342, 1336, 1420,
+ 1327, 1333, 1376, 0, 1334, 0, 1318, 320, 1322, 1330,
+ 1333, 0, 0, 1316, 0, 1323, 308, 1311, 645, 323,
+ 0, 1318, 1328, 1319, 1316, 1307, 1314, 1311, 1310, 0,
+ 0, 1298, 0, 1320, 0, 0, 1308, 318, 1298, 0,
- 1285, 1276, 1280, 1274, 1278, 604, 1260, 1263, 1256, 64,
- 1274, 0, 281, 1262, 1275, 360, 1256, 1270, 0, 445,
- 0, 1295, 713, 1388, 805, 851, 731, 0, 0, 810,
- 827, 856, 885, 890, 907, 1388, 1388, 1388, 1285, 1275,
- 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 0, 0,
- 1292, 1291, 0, 0, 408, 705, 711, 0, 473, 1388,
- 1388, 1264, 1388, 1250, 1259, 1302, 1264, 1262, 1252, 1251,
- 407, 1259, 1238, 1239, 351, 1253, 0, 1251, 1254, 1245,
- 1252, 1237, 1249, 1231, 1238, 1234, 1232, 1227, 1231, 1242,
- 1239, 436, 1237, 1222, 1216, 1226, 0, 1219, 1228, 1222,
+ 1295, 0, 1316, 1307, 1311, 1305, 1309, 654, 1291, 1294,
+ 1287, 64, 1305, 0, 281, 1293, 1306, 360, 1287, 1301,
+ 0, 479, 0, 1326, 708, 1420, 805, 851, 717, 0,
+ 0, 734, 810, 840, 869, 874, 897, 1420, 1420, 1420,
+ 1316, 1306, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420,
+ 0, 0, 1323, 1322, 0, 0, 408, 706, 746, 0,
+ 621, 1420, 1420, 1295, 1420, 1281, 1290, 1333, 1295, 1293,
+ 1283, 1282, 449, 1290, 1269, 1270, 1270, 351, 1283, 1278,
+ 1280, 1283, 1274, 1281, 1266, 1278, 1260, 1267, 1263, 1261,
+ 1256, 1260, 1271, 1268, 684, 470, 1270, 1265, 1250, 1244,
- 1226, 871, 1214, 1228, 439, 0, 0, 1210, 1226, 1215,
- 1214, 1223, 1224, 1206, 1216, 1221, 1218, 1254, 958, 918,
- 929, 935, 952, 963, 1388, 1388, 746, 799, 0, 493,
- 1388, 1216, 1209, 1208, 1215, 1198, 0, 1212, 1205, 1204,
- 1208, 1206, 1210, 1209, 1200, 1189, 1204, 1203, 453, 0,
- 1194, 0, 0, 0, 0, 0, 1187, 1183, 1202, 1193,
- 1185, 0, 0, 1197, 1179, 0, 1174, 1179, 1177, 1175,
- 1188, 1172, 1186, 1173, 1189, 1183, 1179, 1186, 1179, 0,
- 0, 1181, 1178, 1167, 1163, 1161, 1161, 0, 1191, 641,
- 1200, 1195, 896, 976, 0, 794, 1388, 1147, 1150, 1138,
+ 1254, 0, 1247, 1256, 1250, 1254, 815, 1242, 1256, 405,
+ 0, 0, 1238, 1254, 1243, 1242, 1251, 1252, 1234, 1244,
+ 1249, 1246, 1282, 948, 902, 919, 925, 942, 953, 1420,
+ 1420, 799, 823, 0, 628, 1420, 1244, 1237, 1236, 1243,
+ 1226, 0, 1240, 1233, 1232, 1236, 1234, 0, 1238, 1237,
+ 1228, 1227, 1216, 1231, 1230, 437, 0, 1221, 0, 0,
+ 0, 0, 0, 1214, 1210, 1229, 1220, 1226, 1211, 1204,
+ 0, 1209, 0, 0, 1221, 1203, 0, 1198, 1203, 1201,
+ 1199, 1212, 1196, 1210, 1197, 1213, 1207, 1203, 1210, 1203,
+ 0, 0, 1205, 1202, 1194, 1194, 1196, 1201, 0, 1231,
- 1125, 0, 1140, 0, 0, 1122, 1125, 1120, 1114, 1127,
- 1123, 1123, 1113, 1104, 1116, 1115, 1113, 1105, 1100, 1079,
- 1083, 0, 0, 1066, 1041, 0, 1039, 1036, 1022, 1025,
- 1021, 1018, 0, 1019, 1004, 923, 0, 926, 0, 0,
- 910, 0, 955, 946, 945, 0, 981, 992, 0, 823,
- 1388, 912, 0, 906, 350, 895, 895, 892, 868, 875,
- 0, 0, 869, 0, 0, 0, 0, 848, 830, 836,
- 832, 0, 829, 0, 820, 0, 0, 821, 802, 817,
- 799, 0, 798, 830, 0, 1388, 1388, 1388, 818, 997,
- 1002, 0, 840, 772, 767, 735, 707, 707, 0, 0,
+ 794, 1240, 1239, 891, 914, 0, 886, 1420, 1194, 1197,
+ ...
[truncated message content] |