void KdParseMouse (char *arg) { char save[1024]; char delim; KdMouseInfo *mi; int i; mi = KdMouseInfoAdd (); if (!mi) return; mi->name = 0; mi->prot = 0; mi->emulateMiddleButton = kdEmulateMiddleButton; mi->transformCoordinates = !kdRawPointerCoordinates; mi->nbutton = 3; for (i = 0; i < KD_MAX_BUTTON; i++) mi->map[i] = i + 1; if (!arg) return; if (strlen (arg) >= sizeof (save)) return; arg = KdParseFindNext (arg, ",", save, &delim); if (!save[0]) return; mi->name = KdSaveString (save); if (delim != ',') return; arg = KdParseFindNext (arg, ",", save, &delim); if (!save[0]) return; if ('1' <= save[0] && save[0] <= '0' + KD_MAX_BUTTON && save[1] == '\0') { mi->nbutton = save[0] - '0'; if (mi->nbutton > KD_MAX_BUTTON) { UseMsg (); return; } } if (!delim != ',') return; arg = KdParseFindNext (arg, ",", save, &delim); if (save[0]) mi->prot = KdSaveString (save); while (delim == ',') { arg = KdParseFindNext (arg, ",", save, &delim); if (save[0] == '{') { char *s = save + 1; i = 0; while (*s && *s != '}') { if ('1' <= *s && *s <= '0' + mi->nbutton) mi->map[i] = *s - '0'; else UseMsg (); s++; } } else if (!strcmp (save, "2button")) mi->emulateMiddleButton = TRUE; else if (!strcmp (save, "3button")) mi->emulateMiddleButton = FALSE; else if (!strcmp (save, "rawcoord")) mi->transformCoordinates = FALSE; else if (!strcmp (save, "transform")) mi->transformCoordinates = TRUE; else UseMsg (); } }
void KdParseScreen(KdScreenInfo * screen, const char *arg) { char delim; char save[1024]; int i; int pixels, mm; screen->dumb = kdDumbDriver; screen->softCursor = kdSoftCursor; screen->origin = kdOrigin; screen->randr = RR_Rotate_0; screen->x = 0; screen->y = 0; screen->width = 0; screen->height = 0; screen->width_mm = 0; screen->height_mm = 0; screen->subpixel_order = kdSubpixelOrder; screen->rate = 0; screen->fb.depth = 0; if (!arg) return; if (strlen(arg) >= sizeof(save)) return; for (i = 0; i < 2; i++) { arg = KdParseFindNext(arg, "x/+@XY", save, &delim); if (!save[0]) return; pixels = atoi(save); mm = 0; if (delim == '/') { arg = KdParseFindNext(arg, "x+@XY", save, &delim); if (!save[0]) return; mm = atoi(save); } if (i == 0) { screen->width = pixels; screen->width_mm = mm; } else { screen->height = pixels; screen->height_mm = mm; } if (delim != 'x' && delim != '+' && delim != '@' && delim != 'X' && delim != 'Y' && (delim != '\0' || i == 0)) return; } kdOrigin.x += screen->width; kdOrigin.y = 0; kdDumbDriver = FALSE; kdSoftCursor = FALSE; kdSubpixelOrder = SubPixelUnknown; if (delim == '+') { arg = KdParseFindNext(arg, "+@xXY", save, &delim); if (save[0]) screen->x = atoi(save); } if (delim == '+') { arg = KdParseFindNext(arg, "@xXY", save, &delim); if (save[0]) screen->y = atoi(save); } if (delim == '@') { arg = KdParseFindNext(arg, "xXY", save, &delim); if (save[0]) { int rotate = atoi(save); if (rotate < 45) screen->randr = RR_Rotate_0; else if (rotate < 135) screen->randr = RR_Rotate_90; else if (rotate < 225) screen->randr = RR_Rotate_180; else if (rotate < 315) screen->randr = RR_Rotate_270; else screen->randr = RR_Rotate_0; } } if (delim == 'X') { arg = KdParseFindNext(arg, "xY", save, &delim); screen->randr |= RR_Reflect_X; } if (delim == 'Y') { arg = KdParseFindNext(arg, "xY", save, &delim); screen->randr |= RR_Reflect_Y; } arg = KdParseFindNext(arg, "x/,", save, &delim); if (save[0]) { screen->fb.depth = atoi(save); if (delim == '/') { arg = KdParseFindNext(arg, "x,", save, &delim); if (save[0]) screen->fb.bitsPerPixel = atoi(save); } else screen->fb.bitsPerPixel = 0; } if (delim == 'x') { arg = KdParseFindNext(arg, "x", save, &delim); if (save[0]) screen->rate = atoi(save); } }
void KdParseScreen (KdScreenInfo *screen, char *arg) { char *bpp; char delim; char save[1024]; int fb; int i; int pixels, mm; screen->dumb = kdDumbDriver; screen->softCursor = kdSoftCursor; screen->origin = kdOrigin; screen->rotation = 0; screen->width = 0; screen->height = 0; screen->width_mm = 0; screen->height_mm = 0; screen->rate = 0; for (fb = 0; fb < KD_MAX_FB; fb++) screen->fb[fb].depth = 0; if (!arg) return; if (strlen (arg) >= sizeof (save)) return; for (i = 0; i < 2; i++) { arg = KdParseFindNext (arg, "x/@", save, &delim); if (!save[0]) return; pixels = atoi(save); mm = 0; if (delim == '/') { arg = KdParseFindNext (arg, "x@", save, &delim); if (!save[0]) return; mm = atoi(save); } if (i == 0) { screen->width = pixels; screen->width_mm = mm; } else { screen->height = pixels; screen->height_mm = mm; } if (delim != 'x' && delim != '@') return; } kdOrigin.x += screen->width; kdOrigin.y = 0; kdDumbDriver = FALSE; kdSoftCursor = FALSE; if (delim == '@') { arg = KdParseFindNext (arg, "x", save, &delim); if (save[0]) { screen->rotation = atoi (save); if (screen->rotation < 45) screen->rotation = 0; else if (screen->rotation < 135) screen->rotation = 90; else if (screen->rotation < 225) screen->rotation = 180; else if (screen->rotation < 315) screen->rotation = 270; else screen->rotation = 0; } } fb = 0; while (fb < KD_MAX_FB) { arg = KdParseFindNext (arg, "x/,", save, &delim); if (!save[0]) break; screen->fb[fb].depth = atoi(save); if (delim == '/') { arg = KdParseFindNext (arg, "x,", save, &delim); if (!save[0]) break; screen->fb[fb].bitsPerPixel = atoi (save); } else screen->fb[fb].bitsPerPixel = 0; if (delim != ',') break; fb++; } if (delim == 'x') { arg = KdParseFindNext (arg, "x", save, &delim); if (save[0]) screen->rate = atoi(save); } }