📄 svgawin.c
字号:
}/*****************************************************************************/void ui_screenblt(uint8 opcode, int x, int y, int cx, int cy, int srcx, int srcy){ int i; int j; uint8* temp; if (x == srcx && y == srcy) return; if (warp_coords(&x, &y, &cx, &cy, &srcx, &srcy)) { if (contains_mouse(x, y, cx, cy) || contains_mouse(srcx, srcy, cx, cy)) draw_cursor_under(mousex, mousey); if (opcode == 0xc) /* copy */ accel_screen_copy(x, y, cx, cy, srcx, srcy); else { temp = (uint8*)xmalloc(cx * cy * g_server_Bpp); for (i = 0; i < cy; i++) for (j = 0; j < cx; j++) set_pixel2(j, i, get_pixel(srcx + j, srcy + i), temp, cx, g_server_bpp); for (i = 0; i < cy; i++) for (j = 0; j < cx; j++) set_pixel(x + j, y + i, get_pixel2(j, i, temp, cx, g_server_bpp), opcode); xfree(temp); } cache_rect(x, y, cx, cy, False); draw_cache_rects(); // draw them all so screen is not jumpy }}/*****************************************************************************/void ui_patblt(uint8 opcode, int x, int y, int cx, int cy, BRUSH * brush, int bgcolour, int fgcolour){ int i; int j; uint8 ipattern[8]; if (warp_coords(&x, &y, &cx, &cy, NULL, NULL)) { if (contains_mouse(x, y, cx, cy)) draw_cursor_under(mousex, mousey); switch (brush->style) { case 0: fill_rect(x, y, cx, cy, fgcolour, opcode); break; case 3: for (i = 0; i < 8; i++) ipattern[i] = ~brush->pattern[7 - i]; for (i = 0; i < cy; i++) for (j = 0; j < cx; j++) if (is_pixel_on(ipattern, (x + j + brush->xorigin) % 8, (y + i + brush->yorigin) % 8, 8, 1)) set_pixel(x + j, y + i, fgcolour, opcode); else set_pixel(x + j, y + i, bgcolour, opcode); break; } cache_rect(x, y, cx, cy, False); }}/*****************************************************************************/void ui_destblt(uint8 opcode, int x, int y, int cx, int cy){ if (warp_coords(&x, &y, &cx, &cy, NULL, NULL)) { if (contains_mouse(x, y, cx, cy)) draw_cursor_under(mousex, mousey); fill_rect(x, y, cx, cy, -1, opcode); cache_rect(x, y, cx, cy, False); }}/*****************************************************************************/void ui_move_pointer(int x, int y){}/*****************************************************************************/void ui_set_null_cursor(void){ draw_cursor_under(mousex, mousey); mousex = mousex - mcursor.x; mousey = mousey - mcursor.y; memset(&mcursor, 0, sizeof(mcursor)); memset(mcursor.andmask, 255, sizeof(mcursor.andmask)); memset(mcursor.xormask, 0, sizeof(mcursor.xormask)); draw_cursor();}/*****************************************************************************/void ui_paint_bitmap(int x, int y, int cx, int cy, int width, int height, uint8* data){ if (warp_coords(&x, &y, &cx, &cy, NULL, NULL)) { if (contains_mouse(x, y, cx, cy)) draw_cursor_under(mousex, mousey); accel_draw_box(x, y, cx, cy, data, width * g_server_Bpp); cache_rect(x, y, cx, cy, False); }}/*****************************************************************************/void* ui_create_cursor(unsigned int x, unsigned int y, int width, int height, uint8* andmask, uint8* xormask){ tcursor* c; int i; int j; c = (tcursor*)xmalloc(sizeof(tcursor)); memset(c, 0, sizeof(tcursor)); c->w = width; c->h = height; c->x = x; c->y = y; for (i = 0; i < 32; i++) { for (j = 0; j < 32; j++) { if (is_pixel_on(andmask, j, i, 32, 1)) set_pixel_on(c->andmask, j, 31 - i, 32, 8, 255); if (is_pixel_on(xormask, j, i, 32, 24)) set_pixel_on(c->xormask, j, 31 - i, 32, 8, 255); } } return (void*)c;}/*****************************************************************************/void ui_destroy_cursor(void* cursor){ if (cursor != NULL) xfree(cursor);}/*****************************************************************************/void ui_set_cursor(void* cursor){ int x; int y; int ox; int oy; ox = mousex; oy = mousey; x = mousex + mcursor.x; y = mousey + mcursor.y; memcpy(&mcursor, cursor, sizeof(tcursor)); mousex = x - mcursor.x; mousey = y - mcursor.y; draw_cursor_under(ox, oy); draw_cursor();}/*****************************************************************************/uint16 ui_get_numlock_state(unsigned int state){ return 0;}/*****************************************************************************/unsigned int read_keyboard_state(void){ return 0;}/*****************************************************************************/void ui_resize_window(void){}/*****************************************************************************/void ui_begin_update(void){}/*****************************************************************************/void ui_end_update(void){ draw_cache_rects(); draw_cursor();}/*****************************************************************************/void ui_polygon(uint8 opcode, uint8 fillmode, POINT * point, int npoints, BRUSH * brush, int bgcolour, int fgcolour){}/*****************************************************************************/void ui_polyline(uint8 opcode, POINT * points, int npoints, PEN * pen){}/*****************************************************************************/void ui_ellipse(uint8 opcode, uint8 fillmode, int x, int y, int cx, int cy, BRUSH * brush, int bgcolour, int fgcolour){}/*****************************************************************************/void generate_random(uint8* random){ memcpy(random, "12345678901234567890123456789012", 32);}/*****************************************************************************/void save_licence(uint8* data, int length){}/*****************************************************************************/int load_licence(uint8** data){ return 0;}/*****************************************************************************/void* xrealloc(void* in_val, int size){ return realloc(in_val, size);}/*****************************************************************************/void* xmalloc(int size){ return malloc(size);}/*****************************************************************************/void xfree(void* in_val){ free(in_val);}/*****************************************************************************/void warning(char* format, ...){ va_list ap; fprintf(stderr, "WARNING: "); va_start(ap, format); vfprintf(stderr, format, ap); va_end(ap);}/*****************************************************************************/void unimpl(char* format, ...){ va_list ap; fprintf(stderr, "NOT IMPLEMENTED: "); va_start(ap, format); vfprintf(stderr, format, ap); va_end(ap);}/*****************************************************************************/void error(char* format, ...){ va_list ap; fprintf(stderr, "ERROR: "); va_start(ap, format); vfprintf(stderr, format, ap); va_end(ap);}BOOL rd_pstcache_mkdir(void){ return 0;}/*****************************************************************************/int rd_open_file(char *filename){ return 0;}/*****************************************************************************/void rd_close_file(int fd){ return;}/*****************************************************************************/int rd_read_file(int fd, void *ptr, int len){ return 0;}/*****************************************************************************/int rd_write_file(int fd, void* ptr, int len){ return 0;}/*****************************************************************************/int rd_lseek_file(int fd, int offset){ return 0;}/*****************************************************************************/BOOL rd_lock_file(int fd, int start, int len){ return False;}/*****************************************************************************/void get_username_and_hostname(void){ char fullhostname[64]; char* p; struct passwd* pw; STRNCPY(g_username, "unknown", sizeof(g_username)); STRNCPY(g_hostname, "unknown", sizeof(g_hostname)); pw = getpwuid(getuid()); if (pw != NULL && pw->pw_name != NULL) { STRNCPY(g_username, pw->pw_name, sizeof(g_username)); } if (gethostname(fullhostname, sizeof(fullhostname)) != -1) { p = strchr(fullhostname, '.'); if (p != NULL) *p = 0; STRNCPY(g_hostname, fullhostname, sizeof(g_hostname)); }}/*****************************************************************************/void out_params(void){ fprintf(stderr, "rdesktop: A Remote Desktop Protocol client.\n"); fprintf(stderr, "Version " VERSION ". Copyright (C) 1999-2003 Matt Chapman.\n"); fprintf(stderr, "See http://www.rdesktop.org/ for more information.\n\n"); fprintf(stderr, "Usage: svgardesktop [options] server\n"); fprintf(stderr, " -g: desktop geometry (WxH)\n"); fprintf(stderr, " -4: use RDP version 4\n"); fprintf(stderr, " -5: use RDP version 5 (default)\n"); fprintf(stderr, " -t: tcp port\n"); fprintf(stderr, " -u: user name\n"); fprintf(stderr, " -n: client hostname\n"); fprintf(stderr, " -d: disable accel funcs\n"); fprintf(stderr, " -a: connection colour depth\n"); fprintf(stderr, " -l: low memory\n"); fprintf(stderr, "\n");}/* produce a hex dump */void hexdump(uint8* p, uint32 len){ uint8* line; int i; int thisline; int offset; line = p; offset = 0; while (offset < len) { printf("%04x ", offset); thisline = len - offset; if (thisline > 16) thisline = 16; for (i = 0; i < thisline; i++) printf("%02x ", line[i]); for (; i < 16; i++) printf(" "); for (i = 0; i < thisline; i++) printf("%c", (line[i] >= 0x20 && line[i] < 0x7f) ? line[i] : '.'); printf("\n"); offset += thisline; line += thisline; }}/*****************************************************************************/int parse_parameters(int in_argc, char** in_argv){ int i; char* p; if (in_argc <= 1) { out_params(); return 0; } g_argc = in_argc; g_argv = in_argv; for (i = 1; i < in_argc; i++) { strcpy(g_servername, in_argv[i]); if (strcmp(in_argv[i], "-g") == 0) { g_width = strtol(in_argv[i + 1], &p, 10); if (g_width <= 0) { error("invalid geometry\n"); return 0; } if (*p == 'x') g_height = strtol(p + 1, NULL, 10); if (g_height <= 0) { error("invalid geometry\n"); return 0; } g_width = (g_width + 3) & ~3; } else if (strcmp(in_argv[i], "-4") == 0) g_use_rdp5 = 0; else if (strcmp(in_argv[i], "-5") == 0) g_use_rdp5 = 1; else if (strcmp(in_argv[i], "-t") == 0) g_tcp_port_rdp = strtol(in_argv[i + 1], &p, 10); else if (strcmp(in_argv[i], "-h") == 0) { out_params(); return 0; } else if (strcmp(in_argv[i], "-n") == 0) { STRNCPY(g_hostname, in_argv[i + 1], sizeof(g_hostname)); } else if (strcmp(in_argv[i], "-u") == 0) { STRNCPY(g_username, in_argv[i + 1], sizeof(g_username)); } else if (strcmp(in_argv[i], "-d") == 0) { use_accel = 0; } else if (strcmp(in_argv[i], "-a") == 0) { g_server_bpp = strtol(in_argv[i + 1], NULL, 10); if (g_server_bpp != 8 && g_server_bpp != 16) { error("invalid server bpp\n"); return 0; } g_server_Bpp = (g_server_bpp + 7) / 8; } else if (strcmp(in_argv[i], "-l") == 0) g_save_mem = 1; } return 1;}/*****************************************************************************/int main(int in_argc, char** in_argv){ get_username_and_hostname(); if (!parse_parameters(in_argc, in_argv)) return 0; if (!ui_init()) return 1; if (!ui_create_window()) return 1; ui_main_loop(); ui_destroy_window(); ui_deinit(); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -