From 777765d4d6835167260165c6f78a298a16b4006e Mon Sep 17 00:00:00 2001 From: Thomas Cherryhomes Date: Sun, 27 Jan 2019 11:17:34 -0600 Subject: [PATCH] Massive set of changes. screen bring-up successful. B&W hangs for some reason, will investigate. Will now try to hook up i/ow --- main.c | 14 +- screen.c | 476 ++++---- screen.h | 38 +- splash.h | 3328 ++++++++++++++++++++++++++++++++++++++-------------- terminal.c | 6 +- 5 files changed, 2696 insertions(+), 1166 deletions(-) diff --git a/main.c b/main.c index a9450b9..cfaafa3 100755 --- a/main.c +++ b/main.c @@ -19,7 +19,7 @@ void main(void) /* touch_init(); */ /* help_init(); */ /* NoEcho=padT; */ - /* ShowPLATO(splash,sizeof(splash)); */ + ShowPLATO(splash,sizeof(splash)); /* NoEcho=padF; */ /* terminal_initial_position(); */ /* io_init(); */ @@ -29,11 +29,11 @@ void main(void) while (running==true) { screen_main(); - /* keyboard_main(); */ - /* io_main(); */ - /* touch_main(); */ + keyboard_main(); + io_main(); + touch_main(); } - /* io_done(); */ - /* touch_done(); */ - /* screen_done(); */ + io_done(); + touch_done(); + screen_done(); } diff --git a/screen.c b/screen.c index 0091422..72df19a 100644 --- a/screen.c +++ b/screen.c @@ -8,6 +8,7 @@ #include #include #include +#include #include "screen.h" #include "font.h" #include "protocol.h" @@ -16,8 +17,6 @@ #define true 1 #define false 0 #define FONTPTR(a) (a<<4) -#define X(x) (x) -#define Y(y) (y^0x1FF) char tmp[64]; int previousMode; @@ -27,27 +26,16 @@ padPt TTYLoc; padPt statusLoc={0,0}; unsigned char fontm23[2048]; extern padBool FastText; /* protocol.c */ -padRGB palette[16]; -unsigned long current_foreground=1; -unsigned long current_background=0; -padRGB current_foreground_rgb={255,255,255}; -padRGB current_background_rgb={0,0,0}; -int highest_color_index; -padRGB palette_help[16]; -padRGB palette_backup[16]; -unsigned long current_foreground_backup=1; -unsigned long current_background_backup=0; -padRGB current_foreground_rgb_backup={255,255,255}; -padRGB current_background_rgb_backup={0,0,0}; -int highest_color_index_backup; -unsigned char help_active=false; Rect screenRect; -BitMap globalBitmap; +Rect windowRect; +double verticalScaleFactor; WindowPtr win; EventRecord theEvent; unsigned char is_mono=true; SysEnvRec environment; Handle menuBar; +RGBColor current_foreground; +RGBColor current_background; /** * screen_init() - Set up the screen @@ -58,14 +46,46 @@ void screen_init(void) InitFonts(); InitWindows(); InitMenus(); + InitPalettes(); + current_foreground.red=255; + current_foreground.green=255; + current_foreground.blue=255; + current_background.red=0; + current_background.green=0; + current_background.blue=0; + SetMenuBar(GetNewMBar(128)); AppendResMenu(GetMenu(128),'DRVR'); DrawMenuBar(); screenRect=qd.screenBits.bounds; - SetRect(&screenRect,screenRect.left+5,screenRect.top+45,screenRect.left+517,screenRect.top+557); + windowRect.left=0; + windowRect.right=511; + /* Set window size depending on screen size. */ + if (screenRect.bottom < 468) + { + /* Mac Plus sized screen */ + windowRect.top=20; + windowRect.bottom=windowRect.top+320; + } + else if (screenRect.bottom < 532) + { + /* 640x480 screen */ + windowRect.top=20; + windowRect.bottom=windowRect.top+448; + } + else + { + /* Larger */ + windowRect.top=45; + windowRect.bottom=windowRect.top+512; + windowRect.left+=5; /* scooch the content area inward slightly. */ + } + + verticalScaleFactor=((double)windowRect.bottom-(double)windowRect.top)/(double)512.0; + if (SysEnvirons(1,&environment) == noErr) is_mono=!environment.hasColorQD; else @@ -73,15 +93,15 @@ void screen_init(void) if (is_mono==true) { - NewWindow(NULL, &screenRect, "\pPLATOTerm", true, 0, (WindowPtr)-1, false, 0); + win = NewWindow(NULL, &windowRect, "\pPLATOTerm", true, 0, (WindowPtr)-1, false, 0); } else { - NewCWindow(NULL, &screenRect, "\pColor PLATOTerm", true, 0, (WindowPtr)-1, false, 0); + win = NewCWindow(NULL, &windowRect, "\pColor PLATOTerm", true, 0, (WindowPtr)-1, false, 0); } SetPort(win); - screenRect=win->portRect; + } /** @@ -164,27 +184,22 @@ void screen_main(void) } /** - * screen_update_colors() - Set the terminal colors + * screen_scale_x(x) - Scale PLATO X coordinate to screen */ -void screen_update_colors(void) +short screen_scale_x(short x) { + return (x); } /** - * screen_clear_palette - Clear the palette + * screen_scale_y(y) - Scale PLATO Y coordinate to screen */ -void screen_clear_palette(void) +short screen_scale_y(short y) { - int i; - for (i=0;i<8;i++) - { - palette[i].red=0; - palette[i].green=0; - palette[i].blue=0; - } + y=y^0x1FF; + return round(y*verticalScaleFactor); } - /** * screen_wait(void) - Sleep for approx 16.67ms */ @@ -204,35 +219,19 @@ void screen_beep(void) */ void screen_clear(void) { + SetPort(win); + EraseRect(&win->portRect); } /** - * screen_color_matching(color) - return index of matching color, or a new index, - * if not found. + * screen_color_transform - Map PLATO color to + * QuickDraw color */ -unsigned char screen_color_matching(padRGB* theColor) +void screen_color_transform(padRGB* theColor, RGBColor* newColor) { - unsigned char i; - for (i=0;i<8;i++) - { - if (i>highest_color_index) - { - palette[i].red=theColor->red; - palette[i].green=theColor->green; - palette[i].blue=theColor->blue; - highest_color_index++; - return i; - } - else - { - if ((palette[i].red==theColor->red) && - (palette[i].green==theColor->green) && - (palette[i].blue==theColor->blue)) - { - return i; - } - } - } + newColor->red = (theColor->red << 8) | ((theColor->red & 0x80)? 0xFF : 0x00); + newColor->green = (theColor->green << 8) | ((theColor->green & 0x80)? 0xFF : 0x00); + newColor->blue = (theColor->blue << 8) | ((theColor->blue & 0x80)? 0xFF : 0x00); } /** @@ -240,11 +239,11 @@ unsigned char screen_color_matching(padRGB* theColor) */ void screen_foreground(padRGB* theColor) { - current_foreground_rgb.red=theColor->red; - current_foreground_rgb.green=theColor->green; - current_foreground_rgb.blue=theColor->blue; - current_foreground=screen_color_matching(theColor); - screen_update_colors(); + if (is_mono) + return; + screen_color_transform(theColor,¤t_foreground); + SetPort(win); + RGBForeColor(¤t_foreground); } /** @@ -252,22 +251,22 @@ void screen_foreground(padRGB* theColor) */ void screen_background(padRGB* theColor) { - current_background_rgb.red=theColor->red; - current_background_rgb.green=theColor->green; - current_background_rgb.blue=theColor->blue; - current_background=screen_color_matching(theColor); - screen_update_colors(); + if (is_mono) + return; + screen_color_transform(theColor,¤t_background); + SetPort(win); + RGBBackColor(¤t_background); } /** - * screen_current_color(void) - Set the current pen mode + * screen_current_mode(void) - Return current drawing mode */ -int screen_current_color(void) +short screen_current_mode(void) { - if (CurMode==ModeInverse || CurMode==ModeErase) - return current_background; + if ((CurMode == ModeWrite) || (CurMode == ModeRewrite)) + PenMode(patOr); else - return current_foreground; + PenMode(patBic); } /** @@ -275,6 +274,14 @@ int screen_current_color(void) */ void screen_block_draw(padPt* Coord1, padPt* Coord2) { + Rect tmpRect; + SetPort(win); + tmpRect.left=screen_scale_x(Coord1->x); + tmpRect.top=screen_scale_y(Coord1->y); + tmpRect.right=screen_scale_x(Coord2->x); + tmpRect.bottom=screen_scale_y(Coord2->y); + screen_current_mode(); + PaintRect(&tmpRect); } /** @@ -282,6 +289,10 @@ void screen_block_draw(padPt* Coord1, padPt* Coord2) */ void screen_dot_draw(padPt* Coord) { + SetPort(win); + MoveTo(screen_scale_x(Coord->x),screen_scale_y(Coord->y)); + screen_current_mode(); + Line(0,0); } /** @@ -289,6 +300,10 @@ void screen_dot_draw(padPt* Coord) */ void screen_line_draw(padPt* Coord1, padPt* Coord2) { + SetPort(win); + MoveTo(screen_scale_x(Coord1->x),screen_scale_y(Coord1->y)); + screen_current_mode(); + LineTo(screen_scale_x(Coord2->x),screen_scale_y(Coord2->y)); } /** @@ -311,8 +326,8 @@ void screen_char_draw(padPt* Coord, unsigned char* ch, unsigned char count) unsigned char FONT_SIZE_Y=16; unsigned short deltaX=1; unsigned short deltaY=1; - unsigned char mainColor=1; - unsigned char altColor=0; + RGBColor mainColor; + RGBColor altColor; unsigned char *p; unsigned char* curfont; @@ -335,27 +350,42 @@ void screen_char_draw(padPt* Coord, unsigned char* ch, unsigned char count) offset=32; break; } + + SetPort(win); if (CurMode==ModeRewrite) { - altColor=current_background; + altColor.red=current_background.red; + altColor.green=current_background.green; + altColor.blue=current_background.blue; } else if (CurMode==ModeInverse) { - altColor=current_foreground; + altColor.red=current_foreground.red; + altColor.green=current_foreground.green; + altColor.blue=current_foreground.blue; + } if (CurMode==ModeErase || CurMode==ModeInverse) - mainColor=current_background; + { + mainColor.red=current_background.red; + mainColor.green=current_background.green; + mainColor.blue=current_background.blue; + } else - mainColor=current_foreground; + { + mainColor.red=current_foreground.red; + mainColor.green=current_foreground.green; + mainColor.blue=current_foreground.blue; + } - x=X(Coord->x&0x1FF); + x=screen_scale_x(Coord->x&0x1FF); if (ModeBold) - y=Y((Coord->y)+30&0x1FF); + y=screen_scale_y((Coord->y)+30&0x1FF); else - y=Y((Coord->y)+15&0x1FF); + y=screen_scale_y((Coord->y)+15&0x1FF); if (FastText==padF) { @@ -379,7 +409,9 @@ void screen_char_draw(padPt* Coord, unsigned char* ch, unsigned char count) { if (b<0) /* check sign bit. */ { - /* pset(x,y,mainColor); */ + RGBForeColor(&mainColor); + MoveTo(x,y); + Line(0,0); } ++x; @@ -445,11 +477,15 @@ void screen_char_draw(padPt* Coord, unsigned char* ch, unsigned char count) { if (ModeBold) { - /* pset(*px+1,*py,mainColor); */ - /* pset(*px,*py+1,mainColor); */ - /* pset(*px+1,*py+1,mainColor); */ + RGBForeColor(&mainColor); + MoveTo(*px+1,*py); + Line(0,0); + MoveTo(*px,*py+1); + Line(0,0); + MoveTo(*px+1,*py+1); + Line(0,0); } - /* pset(*px,*py,mainColor); */ + MoveTo(*px,*py); } else { @@ -457,11 +493,12 @@ void screen_char_draw(padPt* Coord, unsigned char* ch, unsigned char count) { if (ModeBold) { - /* pset(*px+1,*py,altColor); */ - /* pset(*px,*py+1,altColor); */ - /* pset(*px+1,*py+1,altColor); */ + RGBForeColor(&altColor); + MoveTo(*px+1,*py); + MoveTo(*px,*py+1); + MoveTo(*px+1,*py+1); } - /* pset(*px,*py,altColor); */ + MoveTo(*px,*py); } } @@ -480,7 +517,7 @@ void screen_char_draw(padPt* Coord, unsigned char* ch, unsigned char count) } return; - + } /** @@ -525,190 +562,97 @@ void screen_tty_char(padByte theChar) } +/** + * is pixel set to specified color? + */ +unsigned char screen_is_pixel_color(int x, int y, RGBColor* color) +{ + RGBColor currentPixelColor; + GetCPixel(x,y,¤tPixelColor); + return ((currentPixelColor.red==color->red) && + (currentPixelColor.green==color->green) && + (currentPixelColor.blue==color->blue)); +} + +/** + * Are two pixel colors the same? + */ +unsigned char screen_pixel_colors_same(RGBColor* firstColor, RGBColor* secondColor) +{ + return ((firstColor->red==secondColor->red) && + (firstColor->green==secondColor->green) && + (firstColor->blue==secondColor->blue)); +} + /** * screen_paint - Called to paint at location. */ void screen_paint(padPt* Coord) { -} + static unsigned short xStack[512]; + static unsigned char yStack[512]; + int x=screen_scale_x(Coord->x); + int y=screen_scale_y(Coord->y); + unsigned char stackentry = 1; + unsigned short spanAbove, spanBelow; + RGBColor oldColor; + GetCPixel(x,y,&oldColor); -/** - * screen_clear_status(void) - * Clear status area - */ -void screen_clear_status(void) -{ -} - -/** - * screen_show_status(msg) - */ -void screen_show_status(unsigned char* msg) -{ - int previous_foreground=current_foreground; - int previous_background=current_background; - padPt coord={0,0}; - screen_clear_status(); - current_foreground=0; - current_background=1; - screen_char_draw(&coord,msg,strlen(msg)); - current_foreground=previous_foreground; - current_background=previous_background; -} - -/** - * screen_show_baud_rate - Show baud rate - */ -void screen_show_baud_rate(int baud) -{ - sprintf(tmp,"%d Baud",baud); - screen_show_status(tmp); -} - -/** - * screen_show_dial - Show dial in TTY mode - */ -void screen_show_dial(void) -{ -} - -/** - * screen_show_hang_up - Show hang-up message - */ -void screen_show_hang_up(void) -{ - screen_show_status("Hanging up..."); -} - -/** - * screen_show_dialing_status - Show dialing status. - */ -void screen_show_dialing_status(void) -{ - screen_show_status("Dialing..."); -} - -/** - * screen_help_save_palette(void) - Save initial help palette - * for future restore by screen_help_restore_palette(void) - */ -void screen_help_save_palette(void) -{ - int i; - for (i=0;i<16;i++) - { - palette_help[i].red=palette[i].red; - palette_help[i].green=palette[i].green; - palette_help[i].blue=palette[i].blue; - } -} - -/** - * screen_help_restore_palette(void) - Restore the help - * palette, because the help screen is visible. - */ -void screen_help_restore_palette(void) -{ - int i; - for (i=0;i<16;i++) - { - palette[i].red=palette_help[i].red; - palette[i].green=palette_help[i].green; - palette[i].blue=palette_help[i].blue; - } - screen_update_colors(); -} - -/** - * screen_save_palette(void) - Save current screen palette state - * for restore by screen_restore_palette(void) - */ -void screen_save_palette(void) -{ - int i; - - current_foreground_backup=current_foreground; - current_background_backup=current_background; - current_foreground_rgb_backup.red=current_foreground_rgb.red; - current_foreground_rgb_backup.green=current_foreground_rgb.green; - current_foreground_rgb_backup.blue=current_foreground_rgb.blue; - current_background_rgb_backup.red=current_background_rgb.red; - current_background_rgb_backup.green=current_background_rgb.green; - current_background_rgb_backup.blue=current_background_rgb.blue; - highest_color_index_backup=highest_color_index; + if ((oldColor.red == current_foreground.red) && + (oldColor.green == current_foreground.green) && + (oldColor.blue == current_foreground.blue)) + return; - for (i=0;i<16;i++) + do { - palette_backup[i].red=palette[i].red; - palette_backup[i].green=palette[i].green; - palette_backup[i].blue=palette[i].blue; + unsigned short startx; + while (x > 0 && screen_is_pixel_color(x-1,y,&oldColor)) + --x; + + spanAbove = spanBelow = false; + startx=x; + + while(screen_is_pixel_color(x,y,&oldColor)) + { + if (y < (512)) + { + RGBColor belowColor; + GetCPixel(x, y+1,&belowColor); + if (!spanBelow && screen_pixel_colors_same(&belowColor,&oldColor)) + { + xStack[stackentry] = x; + yStack[stackentry] = y+1; + ++stackentry; + spanBelow = true; + } + else if (spanBelow && !screen_pixel_colors_same(&belowColor,&oldColor)) + spanBelow = false; + } + + if (y > 0) + { + RGBColor aboveColor; + GetCPixel(x, y-1,&aboveColor); + if (!spanAbove && screen_pixel_colors_same(&aboveColor,&oldColor)) + { + xStack[stackentry] = x; + yStack[stackentry] = y-1; + ++stackentry; + spanAbove = true; + } + else if (spanAbove && !screen_pixel_colors_same(&aboveColor,&oldColor)) + spanAbove = false; + } + + ++x; + } + MoveTo(startx,y); + LineTo(x-1,y); + --stackentry; + x = xStack[stackentry]; + y = yStack[stackentry]; } - -} - -/** - * screen_restore_palette(void) - Restore current screen palette - * upon return from help screen. - */ -void screen_restore_palette(void) -{ - int i; - - current_foreground=current_foreground_backup; - current_background=current_background_backup; - current_foreground_rgb.red=current_foreground_rgb_backup.red; - current_foreground_rgb.green=current_foreground_rgb_backup.green; - current_foreground_rgb.blue=current_foreground_rgb_backup.blue; - current_background_rgb.red=current_background_rgb_backup.red; - current_background_rgb.green=current_background_rgb_backup.green; - current_background_rgb.blue=current_background_rgb_backup.blue; - highest_color_index=highest_color_index_backup; - - for (i=0;i<16;i++) - { - palette[i].red=palette_backup[i].red; - palette[i].green=palette_backup[i].green; - palette[i].blue=palette_backup[i].blue; - } - - screen_update_colors(); - -} - -/** - * screen_show_help - SHow help - */ -void screen_show_help(void) -{ -} - -/** - * screen_trace_status - Show trace status - */ -void screen_trace_status(const char* status) -{ - char tmp_status_msg[13]; - sprintf(tmp_status_msg,"TRACE: %s",status); - screen_show_status(tmp_status_msg); -} - -/** - * screen_help_mode_status(void) - * Put help mode status at bottom of help screen - */ -void screen_help_mode_status(void) -{ - screen_show_status("HELP Mode - Press any key to return to terminal."); -} - -/** - * screen_greeting(void) - * show initial greeting - */ -void screen_greeting(void) -{ - /* sprintf(tmp,"v1.0 Ready - %5d baud - Press HELP for keys.",config.baud); */ - screen_show_status(tmp); + while (stackentry); } /** diff --git a/screen.h b/screen.h index cdab83b..f7a6639 100755 --- a/screen.h +++ b/screen.h @@ -34,9 +34,14 @@ void screen_menu_command(long menu_command); void screen_main(void); /** - * screen_update_colors() - Set the terminal colors + * screen_scale_x(x) - Scale PLATO X coordinate to screen */ -void screen_update_colors(void); +short screen_scale_x(short x); + +/** + * screen_scale_y(y) - Scale PLATO Y coordinate to screen + */ +short screen_scale_y(short x); /** * screen_wait(void) - Sleep for approx 16.67ms @@ -58,6 +63,11 @@ void screen_clear_palette(void); */ void screen_clear(void); +/** + * screen_current_mode(void) - Return current drawing mode + */ +short screen_current_mode(void); + /** * screen_current_color(void) - Set the current pen mode */ @@ -134,30 +144,6 @@ void screen_show_dial(void); */ void screen_show_dialing_status(void); -/** - * screen_help_save_palette(void) - Save initial help palette - * for future restore by screen_help_restore_palette(void) - */ -void screen_help_save_palette(void); - -/** - * screen_help_restore_palette(void) - Restore the help - * palette, because the help screen is visible. - */ -void screen_help_restore_palette(void); - -/** - * screen_save_palette(void) - Save current screen palette state - * for restore by screen_restore_palette(void) - */ -void screen_save_palette(void); - -/** - * screen_restore_palette(void) - Restore current screen palette - * upon return from help screen. - */ -void screen_restore_palette(void); - /** * screen_show_help - SHow help */ diff --git a/splash.h b/splash.h index 39900cc..111b9f2 100755 --- a/splash.h +++ b/splash.h @@ -2,8 +2,8 @@ padByte splash[] = { - 0x1b, - 0x02, + 0x1b, + 0x02, 0x1b, 0x0c, 0x1b, @@ -36,7 +36,6 @@ padByte splash[] = 0x1d, 0xaf, 0xf0, -0xa0, 0xc0, 0x1b, 0x5a, @@ -63,16 +62,20 @@ padByte splash[] = 0x5a, 0x1b, 0xe1, -0xdb, -0x53, -0xcf, -0x7d, +0xc0, +0xc0, +0xc0, +0xc0, 0x1b, 0xe2, -0xcf, -0x7d, -0x53, -0xcf, +0xff, +0xff, +0xff, +0xff, +0xff, +0xff, +0xff, +0xff, 0x1b, 0xd1, 0xc0, @@ -844,6 +847,113 @@ padByte splash[] = 0x41, 0xc0, 0x1b, +0xe1, +0xc0, +0xc0, +0xc0, +0xc0, +0x1b, +0xe2, +0xc0, +0xc0, +0xc0, +0xc0, +0x1d, +0x7d, +0xa0, +0xd1, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0x2d, +0xf9, +0x22, +0x44, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0x2e, +0xe4, +0x24, +0xc0, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0xaf, +0xf3, +0xa5, +0xcf, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0x2d, +0xf6, +0x27, +0x4b, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0xaf, +0x74, +0xa9, +0xc9, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0x2e, +0xf6, +0xaa, +0xcf, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0x71, +0x2b, +0xd7, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0x2d, +0x78, +0x2e, +0xc6, +0x1b, +0x63, +0xc0, +0xc0, +0x1b, +0xe1, +0xc0, +0xc0, +0xc0, +0xc0, +0x1b, +0xe2, +0xff, +0xff, +0xff, +0xff, +0xff, +0xff, +0xff, +0xff, +0x1b, 0xd1, 0xc0, 0x50, @@ -873,898 +983,2391 @@ padByte splash[] = 0x4e, 0x1b, 0xca, -0x1d, -0x22, -0xfa, -0xa0, +0x1b, +0xd1, 0xc0, +0x50, +0xc0, +0x1d, +0x2b, +0xe8, +0xa0, +0xca, 0x1b, 0x5a, 0x1b, 0xe1, +0x44, +0x69, +0x4b, +0xd8, +0x1b, +0xe2, +0x44, +0x69, +0x4b, +0xd8, +0x1b, +0x12, +0x1d, +0x7b, +0x4e, +0x7b, +0x22, +0xd8, +0xfc, +0x59, +0x59, +0x7d, +0x5a, +0x5c, +0xff, +0xff, 0xdb, +0xac, +0x60, +0x59, +0xe1, +0x59, +0x63, +0xd7, +0xe4, +0x56, +0x65, +0xd4, +0x66, +0xd2, +0xe7, +0x50, +0x4e, +0xe8, +0x4b, +0xc9, +0xc6, +0xe7, +0xc3, +0xc0, +0x66, +0x21, +0xde, +0x65, +0xdb, +0xe4, +0xd8, +0x55, 0x53, -0xcf, +0x65, +0x50, +0x66, +0x4e, +0xe7, +0xcc, +0xc9, +0xe8, +0x47, +0xc6, +0xc3, +0xc0, +0xe7, +0xa0, +0xde, +0x66, +0xdb, +0xe4, +0xd8, +0x63, +0x55, +0xe1, +0x53, +0x60, +0xd2, +0x2b, +0xff, +0xff, +0xd1, +0x7d, +0x50, +0x7b, +0x4e, +0x1d, +0xac, +0xe7, +0x21, +0x53, +0xd4, +0x55, +0xd7, +0xe8, +0xd8, +0x5a, +0x69, +0xdb, +0x5c, +0x6a, +0xdd, +0xeb, +0xde, +0x6c, +0x5f, +0x6c, +0x22, +0xc0, +0xed, +0x41, +0xee, +0x42, +0x6f, +0xc3, +0xf0, +0xc3, +0x71, +0x44, +0xf3, +0xc5, +0xf5, +0xc6, +0x77, +0x47, +0xf9, +0x47, +0x7b, +0x47, +0x7e, +0x47, +0xff, +0xff, +0x47, +0xc6, +0x44, +0x7e, +0xc3, +0x7d, +0xc0, +0xfc, +0x21, +0xde, +0x7b, +0xdd, +0xfa, +0xdb, +0xf9, +0x5a, +0x78, +0x59, +0x77, +0xd8, +0xf6, +0xd8, +0xf5, +0xd7, +0x74, +0x56, +0xf3, +0x55, +0x72, +0x55, +0xf0, +0xd4, +0xee, +0x53, +0xeb, +0x53, +0x69, +0x53, +0xe7, +0x53, +0x1d, +0xf3, +0xdd, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0x60, +0xc0, +0x1b, +0x63, +0xc0, +0xc0, +0x1b, +0xe1, +0x66, +0x5c, +0x4b, +0xff, +0xff, +0x1b, +0xe2, +0x66, +0x5c, +0x4b, +0xff, +0xff, +0x1b, +0x12, +0x1d, +0x2b, +0x6f, +0x22, +0xd1, +0x6f, +0xa0, +0xca, +0xf0, +0xca, +0x71, +0x4b, +0xf3, +0x4b, +0xf5, +0xcc, +0x77, +0xcc, +0x78, +0x4d, +0xfa, +0x4d, +0x7b, +0x4e, +0x7b, +0x22, +0xd8, +0xfa, +0xd7, +0x56, +0xf9, +0x56, +0x78, +0x55, +0x77, +0xd4, +0xf6, +0xd4, +0xf5, +0x53, +0x74, +0x53, +0xf3, +0xd2, +0x71, +0xd2, +0xd1, +0xf0, +0xd1, +0x6f, +0xd1, +0x1d, +0xf3, +0x21, +0x55, +0x1b, +0x63, +0xc0, +0xc0, +0x1b, +0xe1, +0xde, +0x48, +0x48, 0x7d, 0x1b, 0xe2, -0xcf, +0xde, +0x48, +0x48, 0x7d, +0x1b, +0x12, +0x1d, +0xe2, +0x22, +0xd2, +0xe2, +0xa0, +0x4b, +0x63, +0x4b, +0xe4, +0xca, +0x65, +0xca, +0xe7, +0xca, +0xe8, +0xca, +0x6a, +0xca, +0xeb, +0xca, +0x6c, +0xca, +0xed, +0xca, +0x6f, +0xca, +0x6f, +0x22, +0xd1, +0xed, +0xd1, +0x6c, +0x50, +0x6a, +0x50, +0xe8, +0xd1, +0x66, +0xd1, +0x65, +0xd2, +0xe2, +0xd2, +0x1d, +0xe8, +0x21, 0x53, -0xcf, +0x1b, +0x63, +0xc0, +0xc0, +0x1b, +0xe1, +0x7d, +0x60, +0xc3, +0x78, +0x1b, +0xe2, +0x7d, +0x60, +0xc3, +0x78, 0x1b, 0x12, 0x1d, 0xaa, -0x69, +0xf6, 0x22, -0x4b, -0x2b, -0x66, -0xa3, -0x48, -0xaa, -0x69, -0x5a, -0x69, -0x22, -0x4b, -0x1d, -0xed, -0x56, -0x7d, -0xa3, -0xc6, -0xed, -0xd1, -0xed, -0x22, -0x56, -0x1d, -0x69, -0x24, -0xc0, -0xac, -0xe8, -0x22, -0xdb, -0xe8, -0x24, -0x4e, -0xaa, -0x69, -0xa5, -0xd2, -0x69, -0x24, -0xc0, -0x1d, -0xee, -0xc3, -0xac, -0xe4, -0xa3, -0x44, -0xe4, -0x24, -0xc9, -0xaa, -0xee, -0xa5, -0xc9, -0xee, -0x24, -0xc3, -0x1d, -0x2b, -0xeb, -0xa5, -0x44, -0xac, -0xe8, -0x24, -0x53, -0xe8, -0xa6, -0x41, -0x2b, -0xeb, -0xa5, -0x44, -0x1d, -0xf3, -0xc5, -0xac, -0xe4, -0x56, -0xe4, -0x24, -0x5c, -0x2b, -0xf3, -0xa5, -0xc5, -0x1d, -0xaa, -0xed, -0xa6, -0xcc, -0xee, -0xc6, -0x6f, -0xc3, -0x71, -0x41, -0xf3, -0xc0, -0x74, -0xa5, -0x5f, -0xf6, -0x5f, -0xf9, -0x5f, -0x2b, -0xfa, -0xa6, -0xc5, -0x7d, -0xc6, -0xff, -0xff, -0x47, -0xac, -0xe1, -0xc9, -0x63, -0xcc, -0xe4, -0xcf, -0x65, -0x53, -0x66, -0xd8, -0x66, -0x27, -0xca, -0x65, -0x4e, -0x63, -0xd1, -0xe1, -0x53, -0x2b, -0x7e, -0xd4, -0x78, -0xd4, -0xf3, -0x53, -0x4b, -0x78, -0x4b, -0xfa, -0xca, -0x7b, -0x48, -0x7b, -0xa6, -0xd7, -0x53, -0xf9, -0x50, -0x77, -0x4e, -0xf3, -0x4d, -0xee, -0xcc, -0x6f, -0xcf, -0xf0, -0xd4, -0xf0, -0x27, -0xc5, -0x6f, -0xca, -0xee, -0x4d, -0xeb, -0x50, -0x69, -0xd1, -0x65, -0xd1, -0x60, -0xd1, -0xaa, -0xfc, -0x50, -0x78, -0xcf, -0x74, -0x4d, -0xf0, -0xca, -0xee, -0x47, -0xed, -0xc3, -0xed, -0xa6, -0xcc, -0x1d, -0xf5, -0xdd, -0x4e, -0xf6, -0x4b, -0x77, -0xc9, -0xfa, -0xc9, -0x2b, -0xe2, -0xca, -0x66, -0xcc, -0xe7, -0xcf, -0xe8, -0x55, -0xe8, -0x27, -0x42, -0xe7, -0x44, -0x65, -0x47, -0x63, -0x47, -0xaa, -0xfc, -0xc6, -0xf9, -0xc5, -0xf6, -0x41, -0xf5, -0xa6, 0xde, -0x1d, -0x74, -0x28, -0x53, -0xc3, -0xf5, -0x27, -0x5f, 0xf6, -0xdd, -0x77, -0x5c, -0xf9, -0xdb, -0xfc, -0xdb, -0xff, -0xff, -0x5c, -0x2b, -0x63, -0xde, -0xe4, -0x5f, -0x65, -0x28, -0xc0, -0x66, -0xc3, -0x55, -0x65, -0x5a, -0xe2, -0x5c, -0xaa, -0xff, -0xff, -0x5c, -0x77, -0x5a, -0xf5, -0xd7, -0x74, -0x55, -0x53, -0x1d, -0x2b, -0xee, -0xd7, -0xca, -0xc5, -0x6f, -0xc3, -0x72, -0x42, -0x7b, -0xc3, -0x7d, -0xc6, -0x7e, -0x4b, -0xd8, -0xdb, -0x7d, -0xde, -0x7b, -0xa9, -0xc0, -0x78, -0xc0, -0x71, -0x28, -0xde, -0x6f, -0x5c, -0xee, -0xd8, -0x1d, -0xac, -0x66, -0xca, -0x5f, -0x65, -0xa9, -0xc3, -0xe4, -0xc6, -0xe1, -0x48, -0x60, -0xc9, -0x2b, -0x7e, -0xc9, -0xfa, -0xc9, -0x74, -0x48, -0x6f, -0xc6, -0x6a, -0x42, -0x65, -0xc5, -0xe1, -0xc5, -0xaa, -0xfc, -0xc5, -0xf5, -0xc3, -0x71, -0x41, -0x6f, -0x28, -0xde, -0xee, -0xdb, -0xed, -0xd7, -0x41, -0xed, -0x27, -0xdd, -0x6f, -0xd7, -0x72, -0xd4, -0xf5, -0x53, -0xfa, -0x53, -0x2b, -0x60, -0xd4, -0x65, -0x55, -0xe8, -0xd8, -0x6a, -0xdb, -0xed, -0x59, -0x71, -0xd8, -0x77, -0x59, -0x7d, -0xdb, -0xac, -0xe1, -0xde, -0xe4, -0x28, -0x41, -0x66, -0xc9, -0x1d, -0xaa, -0xed, -0xaa, -0xc5, -0xed, -0xa9, -0x59, -0xee, -0xd1, -0xf0, -0x4b, -0x74, -0xc9, -0xf9, -0xc9, -0x2b, -0x7b, -0xcf, -0xac, -0xe1, -0x53, -0x63, -0x56, -0xe4, -0x59, -0x65, -0xdd, -0x66, -0xaa, -0x44, -0xcf, -0x65, -0x55, -0xe4, -0xd8, -0xe2, -0x5a, -0x60, -0x5c, -0x2b, -0xfc, -0xdd, -0x78, -0xdd, -0x71, -0x5c, -0xaa, -0x74, -0x56, -0x72, -0xd4, -0xf0, -0xd2, -0xee, -0x4e, -0xed, -0xc9, -0xc5, -0x1d, -0xf5, -0xc3, -0xf5, -0xa9, -0xd7, -0xf6, -0x53, -0xf9, -0x50, -0xfc, -0x50, -0x2b, -0x77, -0x55, -0x7b, -0xd8, -0x7d, -0x5c, -0x7d, -0xaa, -0xcf, -0xfc, -0xd4, -0x77, -0x55, -0xaa, -0xfa, -0xcf, -0x77, -0x4d, -0xf6, -0x4b, -0xf5, -0x48, -0xc3, -0x1d, -0xf5, -0x2b, -0x59, -0x4b, -0xf6, -0x47, -0x78, -0xc5, -0xfa, -0x44, -0x2b, -0x66, -0xc6, -0xf9, -0x4b, -0x7b, -0x4d, -0xfc, -0x4e, -0x7d, -0xd1, -0x7d, -0xac, -0x44, -0xfa, -0xc9, -0xf3, -0xc9, -0xaa, -0xf9, -0x42, -0x77, -0xc0, -0xf6, -0x2b, -0x5f, -0xf5, -0x5c, -0x59, -0x1d, -0xed, -0xdd, -0x48, -0x6f, -0x41, -0x72, -0xaa, -0xdd, -0xf9, -0x5c, -0x2b, -0xf3, -0x2b, -0x41, -0xfa, -0xc3, -0xff, -0xff, -0xc6, -0xac, -0x63, -0xca, -0xe4, -0x4e, -0x65, -0xd4, -0x66, -0x56, -0x66, -0xac, -0x42, -0x65, -0xc9, -0xe4, -0x4b, -0xe1, -0xcf, -0x2b, -0x7d, -0xd1, -0x78, -0xd1, -0x74, -0xd1, -0x6c, -0xcf, -0xaa, -0x71, -0x48, -0x6f, -0x44, -0xee, -0xc0, -0xed, -0x2b, -0xdd, -0x1d, -0xed, -0x2d, -0xcc, -0xc0, -0xed, -0xac, -0x5a, -0x6f, -0x55, -0x71, -0xd2, -0xf5, -0x50, -0x78, -0x50, -0x7e, -0xd1, -0x2b, -0xfa, -0xd7, -0xac, -0x60, -0x5a, -0xe2, -0xdd, -0x63, -0x5f, -0x65, -0x2d, -0xc3, -0x66, -0xc9, -0x56, -0xe4, -0xde, -0x63, -0x2e, -0x41, -0x60, -0xc3, -0x2b, -0xff, -0xff, -0x44, -0xfc, -0xc5, -0xf9, -0xc5, -0x74, -0x44, -0xeb, -0xc3, -0xaa, -0xf3, -0x2d, -0x5c, -0x72, -0xdb, -0xf0, -0x59, -0xee, -0x55, -0xed, -0xd1, -0xcc, -0x1d, -0xf5, -0x4e, -0xc0, -0xf6, -0xac, -0xdb, -0x77, -0x59, -0x78, -0xd8, -0xfc, -0xd8, -0x2b, -0xf3, -0x5c, -0x78, -0xde, -0xfc, -0x2d, -0x41, -0x7d, -0x44, -0x1b, -0x59, -0x50, -0x41, -0xc0, -0xd8, -0xfc, -0xdb, -0xfa, -0x5c, -0x78, -0xdd, -0x72, -0x5c, -0xaa, -0x7b, -0xd7, -0x77, -0xd4, -0xf5, -0xd1, -0x4e, -0x1b, -0xe1, -0xdb, -0x53, -0xcf, -0x7d, -0x1b, -0xe2, -0xdb, -0x53, -0xcf, -0x7d, -0x1d, -0x2e, -0x74, 0xa0, -0xd4, -0x1b, -0x63, -0xc0, -0xc0, -0x1d, -0xf6, -0x22, -0x44, -0x1b, -0x63, -0xc0, -0xc0, -0x1d, -0x66, -0xa3, -0xd4, -0x1b, -0x63, -0xc0, -0xc0, -0x1d, -0x66, -0xa5, -0xd1, -0x1b, -0x63, -0xc0, -0xc0, -0x1d, -0x2d, -0xf6, -0x27, -0xcc, -0x1b, -0x63, -0xc0, -0xc0, -0x1d, -0x2e, -0x60, -0xa9, -0xc9, -0x1b, -0x63, -0xc0, -0xc0, -0x1d, -0xf5, -0xaa, -0xcf, -0x1b, -0x63, -0xc0, -0xc0, -0x1d, -0x72, -0x2b, -0x56, -0x1b, -0x63, -0xc0, -0xc0, -0x1d, -0x2d, +0x4e, 0x77, -0x2e, -0xc6, -0x1b, -0x63, -0xc0, -0xc0, -0x1d, -0xaa, -0x6c, -0x22, -0xd2, -0x1b, -0x63, -0xc0, -0xc0, -0x1d, -0x2b, -0xee, -0xa3, +0x4e, +0xf9, 0x4d, -0x1b, -0x63, -0xc0, -0xc0, -0x1d, -0xac, -0xe4, -0xa5, -0x59, -0x1b, -0x63, -0xc0, -0xc0, -0x1d, -0x60, -0x27, +0xfa, +0x4d, +0xfc, 0xcc, -0x1b, -0x63, -0xc0, -0xc0, -0x1d, -0x2b, 0x7d, -0xa9, -0x44, -0x1b, -0x63, -0xc0, -0xc0, -0x1d, -0xac, -0x60, -0xaa, -0xca, -0x1b, -0x63, -0xc0, -0xc0, -0x1d, -0xe2, +0xcc, +0xff, +0xff, +0x4b, 0x2b, -0xdd, -0x1b, -0x63, -0xc0, -0xc0, -0x1d, 0x60, -0x2d, -0xcf, +0x4b, +0xe2, +0x4b, +0xe2, +0x22, +0x53, +0xe1, +0x53, +0x60, +0xd4, +0xaa, +0xff, +0xff, +0x55, +0x7e, +0x56, +0x7d, +0x56, +0xfc, +0xd7, +0x7b, +0xd8, +0xfa, +0x59, +0xf9, +0x5a, +0x5c, +0x78, +0xdd, +0x77, +0xdd, +0x5f, +0xf6, +0xde, +0x1d, +0xfa, +0x21, +0xd4, 0x1b, 0x63, 0xc0, 0xc0, 0x1b, +0xe1, +0x56, +0xf6, +0x63, +0x65, +0x1b, +0xe2, +0x56, +0xf6, +0x63, +0x65, +0x1b, +0x12, +0x1d, +0x69, +0x22, +0xd7, +0x69, +0xa0, +0x55, +0x6a, +0xd4, +0x6c, +0x53, +0x53, +0xee, +0xd2, +0x6f, +0xd1, +0xf0, +0x50, +0x71, +0x50, +0x72, +0x50, +0xf3, +0xcf, +0xf5, +0x4e, +0xf6, +0x4e, +0xf6, +0x22, +0xde, +0x74, +0xdd, +0xf3, +0xdd, +0x72, +0xdd, +0x71, +0x5c, +0xf0, +0x5c, +0xdb, +0x6f, +0xdb, +0xee, +0x5a, +0xed, +0x59, +0x6c, +0x59, +0xeb, +0x59, +0x6a, +0xd8, +0x69, +0xd7, +0x1d, +0xf0, +0x41, +0x1b, 0x63, 0xc0, 0xc0, 0x1b, 0xe1, 0xdb, -0x53, -0xcf, -0x7d, +0x6f, +0xc9, +0xc0, 0x1b, 0xe2, +0xdb, +0x6f, +0xc9, +0xc0, +0x1b, +0x12, +0x1d, +0x69, +0xa0, +0x55, +0x69, +0x22, +0xd7, +0xe8, +0x56, +0xe7, +0x56, +0x66, +0x55, +0x65, +0xd4, +0xe4, +0x53, +0x63, +0x53, +0xd2, +0xe2, +0xd1, +0xe1, +0x50, +0x60, +0x50, 0xcf, +0xa9, +0xff, +0xff, +0x4e, +0x7e, +0x4d, +0x4d, 0x7d, +0x4b, +0xca, +0xfc, +0xc9, +0x47, +0xc6, +0xc5, +0x7d, +0x44, +0x42, +0x7e, +0xc0, +0xff, +0xff, +0x21, +0xde, +0xaa, +0x60, +0x5c, +0x5a, +0xd7, +0x55, +0x53, +0xd1, +0xa9, +0xff, +0xff, +0xcf, +0x7e, +0xcc, +0x7d, +0x4b, +0xfc, +0x48, +0xc6, +0xc3, +0x7d, +0xc0, +0x7e, +0xa0, +0xde, +0xff, +0xff, +0xdd, +0xaa, +0x60, +0xdb, +0xe2, +0x59, +0x63, +0xd8, +0x65, +0xd7, +0x66, +0x56, +0x69, +0x55, +0x1d, +0xe1, +0x22, +0xc6, +0x1b, +0x63, +0xc0, +0xc0, +0x1b, +0xe1, +0xc0, +0xc0, +0xc0, +0xc0, +0x1b, +0xe2, +0xff, +0xff, +0xff, +0xff, +0xff, +0xff, +0xff, +0xff, +0x1b, +0xd1, +0xc0, +0x50, +0xc0, +0x1d, +0x28, +0x78, +0xa3, +0x44, +0x1b, +0x5a, +0x1b, +0x12, +0x1d, +0xaa, +0xe4, +0x24, +0x56, +0x65, +0x56, +0xd7, +0xd8, +0xd8, +0x5a, +0x66, +0x5a, +0xe8, +0xdb, +0x6a, +0xdb, +0x2b, +0x6f, +0xdd, +0xf0, +0xdd, +0x71, +0xdd, +0x72, +0xdd, +0xf3, +0xdb, +0x5a, +0x59, +0xd8, +0xf5, +0xd8, +0x59, +0x59, +0xf5, +0xa5, +0x41, +0x42, +0xc3, +0x74, +0xc3, +0xaa, +0xf0, +0xcf, +0xcf, +0x6f, +0xcf, +0xf0, +0xcf, +0x71, +0x50, +0x2b, +0x74, +0xdb, +0xf5, +0x5c, +0x1b, +0x59, +0x50, +0x41, +0xc0, +0x5c, +0xf5, +0xa6, +0xc5, +0xc5, +0xc5, +0xc6, +0x74, +0xc6, +0xf3, +0xc5, +0x44, +0x42, +0x72, +0x41, +0x71, +0x41, +0xaa, +0xe8, +0x42, +0xe7, +0x42, +0x66, +0xc3, +0x44, +0x65, +0xc5, +0xc6, +0x47, +0xe4, +0x47, +0x47, +0x63, +0xc6, +0xc5, +0x44, +0x42, +0x63, +0xa5, +0xdd, +0xdb, +0x59, +0xd8, +0xd7, +0xe4, +0xd7, +0x65, +0xd7, +0x59, +0x66, +0xdb, +0xdb, +0xe7, +0x5c, +0xe8, +0x5c, +0x69, +0x5c, +0x2b, +0xed, +0x5c, +0xaa, +0x65, +0x4e, +0x4e, +0x4e, +0x4d, +0x66, +0x4d, +0x2b, +0x6c, +0xc0, +0xed, +0xc0, +0xc0, +0xed, +0x24, +0x5f, +0xaa, +0xe8, +0xde, +0xe7, +0xde, +0x66, +0xde, +0x5f, +0x65, +0x5f, +0x65, +0xa5, +0xc0, +0x42, +0xc3, +0xc3, +0xe4, +0xc3, +0x63, +0xc3, +0x42, +0x41, +0x63, +0x24, +0x5f, +0x5a, +0x59, +0xd8, +0xd7, +0xe4, +0x56, +0x1d, +0x28, +0x78, +0x56, +0x1b, +0x5a, +0x1d, +0xaa, +0x63, +0xa6, +0x4b, +0xe4, +0xca, +0x65, +0xc9, +0x66, +0xc9, +0xe8, +0xc9, +0x69, +0xc9, +0x6a, +0xc9, +0xeb, +0xca, +0xed, +0x4b, +0x6f, +0xcc, +0xf0, +0x4d, +0x71, +0xcf, +0x72, +0x50, +0xd1, +0xf3, +0xd2, +0x74, +0x53, +0xf5, +0x55, +0x55, +0xf6, +0xd7, +0x77, +0xd8, +0xd8, +0x78, +0x5a, +0x2b, +0xe1, +0x5a, +0x63, +0x59, +0xe4, +0x59, +0x65, +0xd8, +0x66, +0xd7, +0x56, +0x55, +0x65, +0x53, +0xd2, +0xe4, +0xd2, +0x63, +0xd1, +0xe2, +0x50, +0x60, +0xcf, +0xaa, +0x7e, +0x4e, +0x7d, +0x4e, +0xfc, +0x4d, +0x7b, +0xcc, +0xcc, +0x4b, +0xca, +0xfc, +0xc9, +0x7d, +0xc9, +0xc9, +0xff, +0xff, +0xca, +0x2b, +0x60, +0xca, +0xe1, +0x4b, +0x63, +0xcc, +0x4d, +0xe4, +0x4e, +0x65, +0xcf, +0x66, +0xd1, +0xe7, +0xd2, +0xd4, +0xe8, +0xd7, +0xe7, +0x5a, +0xdb, +0x66, +0xdd, +0xe4, +0xde, +0xde, +0xe2, +0xde, +0xaa, +0x6a, +0xde, +0xe8, +0x5f, +0xe7, +0x5f, +0x66, +0x5f, +0x65, +0x27, +0xc0, +0x41, +0x66, +0x42, +0xe7, +0xc3, +0xc3, +0xc3, +0x44, +0x66, +0x44, +0x65, +0x44, +0xc3, +0xe4, +0x42, +0x63, +0x41, +0xe2, +0xc0, +0xe2, +0xa6, +0x5f, +0xde, +0x5c, +0x63, +0xdb, +0xdb, +0x65, +0xdb, +0x66, +0x5a, +0xe7, +0x5a, +0x66, +0x59, +0x65, +0xd7, +0xe4, +0x55, +0x63, +0xd4, +0xe2, +0x53, +0xd2, +0xe1, +0x50, +0xcf, +0xe2, +0xcc, +0xcc, +0x63, +0x4b, +0x1d, +0xe7, +0xcf, +0xe8, +0x4e, +0x69, +0x4e, +0x6a, +0x4e, +0xeb, +0x4e, +0xed, +0xcf, +0x6f, +0x50, +0xd1, +0xf0, +0xd2, +0x71, +0xd2, +0x72, +0xd4, +0xf3, +0x55, +0x55, +0x74, +0x56, +0xd7, +0xf5, +0xd8, +0xd8, +0x59, +0x5a, +0xeb, +0x5a, +0x6a, +0x59, +0x69, +0x59, +0xe8, +0xd8, +0xe7, +0xd7, +0xd7, +0x66, +0x56, +0x65, +0x55, +0xd4, +0xd2, +0xd2, +0xd1, +0x50, +0x66, +0xcf, +0xe7, +0xcf, +0xcf, +0x1d, +0x28, +0x78, +0xa5, +0xd2, +0x1b, +0x5a, +0x1d, +0xaa, +0xf0, +0x27, +0xc6, +0x72, +0xc5, +0xf3, +0xc5, +0xf5, +0xc5, +0xf6, +0xc5, +0x77, +0xc5, +0x78, +0xc6, +0xfa, +0xc6, +0xfc, +0x47, +0x7d, +0x47, +0x7e, +0x48, +0xff, +0xff, +0x48, +0x2b, +0xe1, +0xc9, +0xe2, +0xca, +0x63, +0x4b, +0x65, +0x4d, +0x66, +0x4e, +0xcf, +0xe7, +0xd1, +0xd2, +0xd4, +0xd8, +0x5a, +0xdb, +0x66, +0xdd, +0x65, +0xdd, +0xe4, +0xde, +0x63, +0xde, +0x60, +0xde, +0xaa, +0xff, +0xff, +0xde, +0x7e, +0xdd, +0xdd, +0xff, +0xff, +0x5c, +0x2b, +0x60, +0xdb, +0xe1, +0x5a, +0x63, +0x5a, +0xe4, +0xd8, +0x65, +0xd7, +0x66, +0xd7, +0xd4, +0x53, +0x65, +0xd1, +0xe4, +0x50, +0xcf, +0x63, +0x4e, +0xe1, +0x4d, +0x60, +0xcc, +0xaa, +0x7e, +0xcc, +0x7d, +0x4b, +0x7b, +0x4b, +0xf9, +0x4b, +0xf3, +0x4b, +0x6f, +0x4b, +0xee, +0x4b, +0x6a, +0xcc, +0xe8, +0x4e, +0xe7, +0x4e, +0x66, +0x50, +0x65, +0xd2, +0x53, +0xe4, +0xd4, +0x56, +0xd8, +0x65, +0x59, +0x5a, +0x66, +0xdb, +0x5c, +0xe7, +0xdd, +0xe8, +0xdd, +0xde, +0xde, +0xde, +0xe7, +0x5f, +0xde, +0x66, +0xde, +0x65, +0xdd, +0xe4, +0x5c, +0x63, +0xdb, +0xe2, +0x5a, +0xd8, +0xd7, +0xe1, +0x55, +0x53, +0xe2, +0xd1, +0x50, +0xcf, +0x63, +0x4d, +0xe4, +0xcc, +0x65, +0x4b, +0x66, +0xca, +0xe7, +0xc9, +0x69, +0x48, +0xeb, +0x47, +0xed, +0xc6, +0xee, +0xc6, +0xf0, +0xc6, +0x1d, +0x2b, +0xf5, +0x28, +0x48, +0x1b, +0x5a, +0x1d, +0xaa, +0x63, +0x41, +0xe4, +0x41, +0x42, +0xc3, +0x65, +0x44, +0xc5, +0x66, +0xc6, +0xc6, +0x7e, +0xc6, +0xc6, +0xff, +0xff, +0xc6, +0x2b, +0x60, +0xc6, +0xc5, +0xe1, +0x44, +0xc3, +0xc3, +0x42, +0xe2, +0x42, +0xc3, +0xc3, +0x63, +0x44, +0xe4, +0xc6, +0x65, +0x47, +0x66, +0xc9, +0xe7, +0xc9, +0xca, +0xca, +0x4b, +0xaa, +0x4b, +0x66, +0x4b, +0x65, +0x4b, +0x4d, +0xe4, +0x4e, +0xcf, +0xcf, +0x63, +0xcf, +0xe2, +0xcf, +0x4e, +0x63, +0xcc, +0xc9, +0x47, +0xc6, +0xe2, +0xc3, +0x41, +0x1d, +0x2b, +0xf5, +0x48, +0xc9, +0xca, +0x74, +0xca, +0xf3, +0xca, +0x4b, +0x72, +0x4b, +0x71, +0x4b, +0xf0, +0x4b, +0x6f, +0x4b, +0xca, +0xee, +0xca, +0xed, +0xc9, +0x47, +0xee, +0xc6, +0x6f, +0xc6, +0xf0, +0xc6, +0x71, +0xc5, +0xf3, +0xc6, +0x74, +0xc6, +0xf5, +0x47, +0x47, +0x48, +0x1d, +0x28, +0x78, +0xa6, +0x5c, +0x1b, +0x5a, +0x1d, +0xaa, +0x63, +0x28, +0xcf, +0xcf, +0xe4, +0xcf, +0xcf, +0x65, +0x50, +0xd2, +0x66, +0x53, +0xe7, +0x53, +0xff, +0xff, +0x53, +0x2b, +0x60, +0x53, +0x53, +0xd2, +0xe1, +0xd2, +0xd1, +0x50, +0xe2, +0x50, +0x63, +0xd1, +0xd2, +0xd2, +0x53, +0xe4, +0x53, +0x65, +0xd4, +0x55, +0x66, +0x55, +0xe7, +0x56, +0xd7, +0xd7, +0xe2, +0xd7, +0xe1, +0xd7, +0xd8, +0xd8, +0xd8, +0xe2, +0x59, +0x63, +0x5a, +0xe4, +0xdb, +0x66, +0x5c, +0xe7, +0xde, +0xe7, +0xa9, +0x41, +0x44, +0xc6, +0x66, +0x47, +0xe4, +0xc9, +0x63, +0xca, +0xe1, +0x4b, +0x60, +0x4b, +0xaa, +0xff, +0xff, +0x4b, +0xfc, +0xcc, +0xe7, +0xcc, +0xcc, +0x66, +0xcc, +0x65, +0xcc, +0x4d, +0x4e, +0xcf, +0xe4, +0xcf, +0x50, +0x63, +0x50, +0xcf, +0xcf, +0x4d, +0x4b, +0xca, +0x48, +0x47, +0x44, +0xc3, +0xe4, +0xc3, +0x65, +0x44, +0xc6, +0xe7, +0x47, +0x7b, +0x47, +0x7e, +0x47, +0xff, +0xff, +0xc6, +0x2b, +0xe1, +0xc6, +0xe2, +0xc5, +0x63, +0xc3, +0xe4, +0x41, +0xe4, +0x28, +0x5f, +0x63, +0x5c, +0xe2, +0xdb, +0x60, +0x59, +0xaa, +0xff, +0xff, +0x59, +0x7e, +0xd8, +0xfc, +0xd8, +0x78, +0xd8, +0xe7, +0xd8, +0x66, +0xd8, +0x65, +0xd8, +0x59, +0x59, +0xdb, +0xe4, +0xdb, +0xdb, +0x63, +0x5c, +0x5c, +0xdb, +0x59, +0x55, 0x53, 0xcf, +0x1d, +0x28, +0x78, +0x27, +0xde, +0x1b, +0x5a, +0x1d, +0xaa, +0x6a, +0xa9, +0xd4, +0x2b, +0xe1, +0xd4, +0xe2, +0xd4, +0x63, +0xd4, +0xd4, +0xd4, +0x53, +0xd2, +0xd2, +0xe4, +0xd1, +0xd1, +0x65, +0xd2, +0x66, +0xd2, +0xe7, +0xd4, +0x69, +0x56, +0x6a, +0xd7, +0xeb, +0xd7, +0xed, +0xd8, +0xd8, +0x59, +0xee, +0x59, +0x59, +0x5a, +0xe7, +0x5a, +0x5a, +0x5a, +0x5a, +0x66, +0x5a, +0xdb, +0x66, +0xaa, +0x41, +0x41, +0x65, +0x41, +0xe4, +0x41, +0x63, +0x41, +0x41, +0x63, +0xa9, +0xdb, +0x5a, +0x5a, +0x5a, +0x59, +0xaa, +0x69, +0x59, +0xe8, +0x5a, +0x5a, +0x66, +0x5a, +0x65, +0xdb, +0x5c, +0xdd, +0xdd, +0xde, +0x5f, +0x66, +0xaa, +0xc0, +0xe7, +0x41, +0x42, +0x42, +0xc3, +0x66, +0xc3, +0xc3, +0x65, +0x42, +0xe4, +0x41, +0x41, +0x63, +0xc0, +0xe2, +0xa9, +0x5f, +0xdd, +0xe1, +0x5c, +0xdb, +0xe2, +0x59, +0xd8, +0x63, +0xd7, +0xe4, +0x56, +0x65, +0x56, +0x66, +0x55, +0xe7, +0x55, +0xe8, +0xd4, +0x69, +0xd4, +0x1d, +0x28, +0x78, +0x28, +0x50, +0x1b, +0x5a, +0x1d, +0xaa, +0x74, +0xaa, +0xc3, +0x77, +0xc3, +0xf9, +0x44, +0xfa, +0x44, +0x7d, +0xc5, +0x7e, +0xc5, +0xff, +0xff, +0xc6, +0x2b, +0xe1, +0x47, +0xe2, +0x48, +0x63, +0xc9, +0xe4, +0xc9, +0xca, +0x65, +0x4b, +0x66, +0xcc, +0x4d, +0xe7, +0x4e, +0xcf, +0xd1, +0x56, +0xd8, +0x66, +0x5a, +0x65, +0x5c, +0xe4, +0xdd, +0x63, +0xde, +0xe2, +0x5f, +0xe1, +0x2b, +0xc0, +0xaa, +0xff, +0xff, +0x41, +0x7e, +0x42, +0xfc, +0x42, +0xfa, +0xc3, +0x78, +0xc3, +0xf6, +0xc3, +0x72, +0xc3, +0x71, +0xc3, +0xed, +0x42, +0xeb, +0x42, +0xe8, +0xc0, +0x66, +0xaa, +0x5f, +0xe4, +0x5c, +0x63, +0xdb, +0xe2, +0xd8, +0xe1, +0xd4, +0xd1, +0xe2, +0xcf, +0x4d, +0x63, +0xcc, +0xe4, +0xca, +0x65, +0xc9, +0xe7, +0x47, +0x6a, +0xc6, +0x6c, +0x44, +0xf0, +0x44, +0x74, +0xc3, +0x1d, +0x72, +0xc9, +0x77, +0xc9, +0x7b, +0xc9, +0x7d, +0xc9, +0xc9, +0x2b, +0x60, +0xca, +0xe2, +0xcc, +0x63, +0xcc, +0xe4, +0x4e, +0x65, +0xcf, +0x66, +0x50, +0x53, +0x55, +0x65, +0xd7, +0xe4, +0xd8, +0x63, +0x5a, +0xe1, +0xdb, +0xaa, +0xff, +0xff, +0x5c, +0xfc, +0xdd, +0x78, +0xde, +0xf5, +0xde, +0x71, +0xde, +0xed, +0xdd, +0xeb, +0xdd, +0xe8, +0x5c, +0xe7, +0xdb, +0x65, +0x59, +0x63, +0xd7, +0x55, +0xd4, +0xd2, +0xd1, +0xe4, +0xcf, +0x65, +0x4d, +0xe8, +0x4b, +0xeb, +0xca, +0x6c, +0xc9, +0xee, +0xc9, +0x71, +0xc9, +0xc9, +0x1d, +0x28, +0x78, +0xa9, +0xd4, +0x1b, +0x5a, +0x1d, +0xaa, +0x65, +0x2b, +0x47, +0x6c, +0x47, +0xed, +0x47, +0xee, +0x48, +0xc9, +0xed, +0xc9, +0xc9, +0xe8, +0xca, +0x66, +0x4b, +0xe4, +0xcc, +0x63, +0x4e, +0xcf, +0xd1, +0xe4, +0xd4, +0x55, +0x65, +0x56, +0x66, +0xd7, +0xe7, +0xd7, +0x69, +0xd8, +0xeb, +0xd8, +0xee, +0xd7, +0x71, +0x55, +0x72, +0x53, +0x74, +0x50, +0xf6, +0xcc, +0x78, +0xca, +0xfa, +0xc9, +0xfc, +0x48, +0x7e, +0x48, +0x2b, +0xe1, +0xc9, +0x63, +0xca, +0x65, +0x4b, +0xe7, +0x4e, +0xd1, +0xd7, +0xd8, +0x59, +0x66, +0x5a, +0x65, +0x5a, +0x60, +0x5a, +0xaa, +0xff, +0xff, +0x5a, +0x5a, +0x59, +0x59, +0x59, +0x2b, +0x60, +0x59, +0xe1, +0xd8, +0xe2, +0xd8, +0xe4, +0xd7, +0x65, +0x55, +0x66, +0xd4, +0xd2, +0xd1, +0x50, +0x65, +0x4e, +0x63, +0x4d, +0xe1, +0x4d, +0xaa, +0xff, +0xff, +0x4d, +0x7d, +0x4d, +0x7b, +0xcf, +0xfa, +0xd1, +0x78, +0xd4, +0xf6, +0xd8, +0x72, +0xdb, +0x6f, +0x5c, +0x6a, +0x5c, +0x69, +0x5c, +0xe8, +0xdb, +0xe7, +0xdb, +0x65, +0x5a, +0xe4, +0xd8, +0x63, +0xd7, +0xe2, +0x55, +0xe1, +0x53, +0x4e, +0xe2, +0xcc, +0xca, +0x63, +0xc9, +0xe4, +0x48, +0x47, +0x65, +0x47, +0x1d, +0x28, +0x78, +0xaa, +0x4b, +0x1b, +0x5a, +0x1d, +0xaa, +0x63, +0x2b, +0xde, +0xe4, +0xde, +0xde, +0x65, +0x5f, +0x65, +0xac, +0xc0, +0x41, +0x41, +0x66, +0x42, +0xe7, +0x42, +0x2b, +0xf3, +0x42, +0x74, +0x42, +0xf5, +0x41, +0xf6, +0x41, +0x41, +0xf6, +0x2b, +0x5f, +0xde, +0xde, +0xde, +0x77, +0xde, +0xde, +0x5f, +0x78, +0xac, +0xc0, +0x41, +0x42, +0xf9, +0xc3, +0x44, +0xfa, +0xc5, +0xc5, +0xc6, +0x47, +0xe1, +0x47, +0x47, +0x47, +0x63, +0x48, +0xe4, +0xc9, +0x65, +0xca, +0x66, +0x4b, +0xe7, +0x4d, +0x4e, +0x50, +0xd2, +0xd4, +0x56, +0x65, +0xd7, +0xe4, +0xd8, +0x63, +0x5a, +0xe2, +0x5a, +0x60, +0xdb, +0xaa, +0x7e, +0xdb, +0x7d, +0xdb, +0xe8, +0xdb, +0xe7, +0xdb, +0x66, +0x5c, +0x65, +0xdd, +0xdd, +0xde, +0x5f, +0xe4, +0x5f, +0x5f, +0x63, +0x5f, +0x5f, +0xde, +0xdd, +0xd7, +0x56, +0x53, +0x53, +0xe4, +0x53, +0x53, +0x65, +0xd4, +0x55, +0x66, +0x56, +0x56, +0xe7, +0x56, +0x7b, +0x56, +0xfc, +0x56, +0x7d, +0x56, +0xff, +0xff, +0x56, +0x2b, +0xe1, +0x55, +0xe2, +0xd4, +0x63, +0x53, +0xe4, +0xd1, +0xcf, +0x63, +0xcc, +0xca, +0xe2, +0xc9, +0xe1, +0xc9, +0xaa, +0xff, +0xff, +0x48, +0xfc, +0x47, +0x7b, +0x47, +0xe7, +0x47, +0x47, +0x66, +0x47, +0x65, +0x48, +0xc9, +0xc9, +0xe4, +0xca, +0xca, +0x63, +0x4b, +0x4b, +0xca, +0xca, +0x47, +0xc5, +0x42, +0xc0, +0x63, +0x2b, +0x5f, +0xde, +0xde, +0x1b, +0xe1, +0xc0, +0xc0, +0xc0, +0xc0, +0x1b, +0xe2, +0xc0, +0xc0, +0xc0, +0xc0, +0x1d, +0x2b, +0x71, +0xa5, +0xc0, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0xaa, +0xf6, +0xa6, +0x5c, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0xf3, +0x27, +0x48, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0x2b, +0xe2, +0x5c, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0xaa, +0xe8, +0x28, +0xc9, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0x2b, +0xf0, +0xc9, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0xaa, +0x6c, +0x55, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0x2b, +0x65, +0xa9, +0x56, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0xaa, +0xf0, +0xaa, +0x47, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0xf3, +0x2b, +0xc0, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0x77, +0x50, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0xe7, +0xc9, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0x2b, +0x66, +0xd8, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0xaa, +0xe8, +0xac, +0xc5, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0x65, +0x59, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0x66, +0xa6, +0xcc, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0x72, +0xa9, +0xca, +0x1b, +0x63, +0xc0, +0xc0, +0x1d, +0x7e, +0xa6, +0xcc, +0x1b, +0x63, +0xc0, +0xc0, +0x1b, +0xe1, +0xc0, +0xc0, +0xc0, +0xc0, +0x1b, +0xe2, +0xff, +0xff, +0xff, +0xff, +0xff, +0xff, +0xff, +0xff, 0x1b, 0xd1, 0xc0, @@ -1934,7 +3537,6 @@ padByte splash[] = 0x50, 0x41, 0xc0, -0x1b, -0x03, + 0x1b, + 0x03 }; - diff --git a/terminal.c b/terminal.c index 7ae9ed2..8d66198 100755 --- a/terminal.c +++ b/terminal.c @@ -70,7 +70,8 @@ void terminal_init(void) void terminal_initial_position(void) { TTYLoc.x=0; - TTYLoc.y=239; } + TTYLoc.y=239; +} /** * terminal_set_tty(void) - Switch to TTY mode @@ -85,12 +86,10 @@ void terminal_set_tty(void) Reverse=padF; CurMem=M0; CurMode=ModeRewrite; - /* CurMode=ModeWrite; /\* For speed reasons. *\/ */ CharWide=8; CharHigh=16; TTYLoc.x = 0; TTYLoc.y = 495; - screen_show_status("TTY Mode"); } /** @@ -100,7 +99,6 @@ void terminal_set_plato(void) { TTY=false; screen_clear(); - screen_show_status("PLATO Mode"); } /**