Just code organization. The semantics are the same. I left intentionally global variables there, which will make sense on the next commit.
Signed-off-by: Tiago Vignatti <[email protected]> --- hw/vfb/InitOutput.c | 233 ++++++++++++++++++++++++++++++++------------------ 1 files changed, 149 insertions(+), 84 deletions(-) diff --git a/hw/vfb/InitOutput.c b/hw/vfb/InitOutput.c index e7dd1d9..75ba9a4 100644 --- a/hw/vfb/InitOutput.c +++ b/hw/vfb/InitOutput.c @@ -116,6 +116,15 @@ static char needswap = 0; static int lastScreen = -1; static Bool Render = TRUE; +static int vfbScreenNum; +static int vfbWidth; +static int vfbHeight; +static int vfbDepth; +static int vfbPixdepth; +static Pixel vfbBlackpix; +static Pixel vfbWhitePix; +static unsigned int vfbLinebias; + #define swapcopy16(_dst, _src) \ if (needswap) { CARD16 _s = _src; cpswaps(_s, _dst); } \ else _dst = _src; @@ -265,6 +274,141 @@ ddxUseMsg(void) #endif } +static int +vfbProcessScreen(void) +{ + if (vfbScreenNum < 0 || vfbScreenNum >= MAXSCREENS) + { + ErrorF("Invalid screen number %d\n", vfbScreenNum); + UseMsg(); + FatalError("Invalid screen number %d passed to -screen\n", + vfbScreenNum); + } + vfbScreens[vfbScreenNum].width = vfbWidth; + vfbScreens[vfbScreenNum].height = vfbHeight; + vfbScreens[vfbScreenNum].depth = vfbDepth; + + if (vfbScreenNum >= vfbNumScreens) + vfbNumScreens = vfbScreenNum + 1; + lastScreen = vfbScreenNum; + return 3; +} + +static int +vfbGetScreen(char *argv[], int i) +{ + vfbScreenNum = atoi(argv[i+1]); + + if (3 != sscanf(argv[i+2], "%dx%dx%d", &vfbWidth, &vfbHeight, &vfbDepth)) + { + ErrorF("Invalid screen configuration %s\n", argv[i+2]); + UseMsg(); + FatalError("Invalid screen configuration %s for -screen %d\n", + argv[i+2], vfbScreenNum); + } + + return vfbProcessScreen(); +} + +static int +vfbProcessPixdepths(void) +{ + vfbPixmapDepths[vfbPixdepth] = TRUE; + return 2; +} + +static int +vfbGetPixdepths(int argc, char *argv[], int i) +{ + while ((++i < argc) && (vfbPixdepth = atoi(argv[i])) != 0) + { + if (vfbPixdepth < 0 || vfbPixdepth > 32) + { + ErrorF("Invalid pixmap depth %d\n", vfbPixdepth); + UseMsg(); + FatalError("Invalid pixmap depth %d passed to -pixdepths\n", + vfbPixdepth); + } + return vfbProcessPixdepths(); + } + return 1; +} + +static int +vfbProcessBlackpixel(void) +{ + if (-1 == lastScreen) + { + int i; + for (i = 0; i < MAXSCREENS; i++) + { + vfbScreens[i].blackPixel = vfbBlackpix; + } + } + else + { + vfbScreens[lastScreen].blackPixel = vfbBlackpix; + } + return 2; +} + +static int +vfbGetBlackpixel(char *argv[], int i) +{ + vfbBlackpix = atoi(argv[++i]); + return vfbProcessBlackpixel(); +} + +static int +vfbProcessWhitepixel(void) +{ + if (-1 == lastScreen) + { + int i; + for (i = 0; i < MAXSCREENS; i++) + { + vfbScreens[i].whitePixel = vfbWhitePix; + } + } + else + { + vfbScreens[lastScreen].whitePixel = vfbWhitePix; + } + return 2; +} + +static int +vfbGetWhitepixel(char *argv[], int i) +{ + vfbWhitePix = atoi(argv[++i]); + return vfbProcessWhitepixel(); +} + +static int +vfbProcessLinebias(void) +{ + if (-1 == lastScreen) + { + int i; + for (i = 0; i < MAXSCREENS; i++) + { + vfbScreens[i].lineBias = vfbLinebias; + } + } + else + { + vfbScreens[lastScreen].lineBias = vfbLinebias; + } + return 2; +} + +static int +vfbGetLinebias(char *argv[], int i) +{ + vfbLinebias = atoi(argv[++i]); + return vfbProcessLinebias(); +} + int ddxProcessArgument(int argc, char *argv[], int i) { @@ -286,51 +430,14 @@ ddxProcessArgument(int argc, char *argv[], int i) if (strcmp (argv[i], "-screen") == 0) /* -screen n WxHxD */ { - int screenNum; CHECK_FOR_REQUIRED_ARGUMENTS(2); - screenNum = atoi(argv[i+1]); - if (screenNum < 0 || screenNum >= MAXSCREENS) - { - ErrorF("Invalid screen number %d\n", screenNum); - UseMsg(); - FatalError("Invalid screen number %d passed to -screen\n", - screenNum); - } - if (3 != sscanf(argv[i+2], "%dx%dx%d", - &vfbScreens[screenNum].width, - &vfbScreens[screenNum].height, - &vfbScreens[screenNum].depth)) - { - ErrorF("Invalid screen configuration %s\n", argv[i+2]); - UseMsg(); - FatalError("Invalid screen configuration %s for -screen %d\n", - argv[i+2], screenNum); - } - - if (screenNum >= vfbNumScreens) - vfbNumScreens = screenNum + 1; - lastScreen = screenNum; - return 3; + return vfbGetScreen(argv, i); } if (strcmp (argv[i], "-pixdepths") == 0) /* -pixdepths list-of-depth */ { - int depth, ret = 1; - CHECK_FOR_REQUIRED_ARGUMENTS(1); - while ((++i < argc) && (depth = atoi(argv[i])) != 0) - { - if (depth < 0 || depth > 32) - { - ErrorF("Invalid pixmap depth %d\n", depth); - UseMsg(); - FatalError("Invalid pixmap depth %d passed to -pixdepths\n", - depth); - } - vfbPixmapDepths[depth] = TRUE; - ret++; - } - return ret; + return vfbGetPixdepths(argc, argv, i); } if (strcmp (argv[i], "+render") == 0) /* +render */ @@ -350,62 +457,20 @@ ddxProcessArgument(int argc, char *argv[], int i) if (strcmp (argv[i], "-blackpixel") == 0) /* -blackpixel n */ { - Pixel pix; CHECK_FOR_REQUIRED_ARGUMENTS(1); - pix = atoi(argv[++i]); - if (-1 == lastScreen) - { - int i; - for (i = 0; i < MAXSCREENS; i++) - { - vfbScreens[i].blackPixel = pix; - } - } - else - { - vfbScreens[lastScreen].blackPixel = pix; - } - return 2; + return vfbGetBlackpixel(argv, i); } if (strcmp (argv[i], "-whitepixel") == 0) /* -whitepixel n */ { - Pixel pix; CHECK_FOR_REQUIRED_ARGUMENTS(1); - pix = atoi(argv[++i]); - if (-1 == lastScreen) - { - int i; - for (i = 0; i < MAXSCREENS; i++) - { - vfbScreens[i].whitePixel = pix; - } - } - else - { - vfbScreens[lastScreen].whitePixel = pix; - } - return 2; + return vfbGetWhitepixel(argv, i); } if (strcmp (argv[i], "-linebias") == 0) /* -linebias n */ { - unsigned int linebias; CHECK_FOR_REQUIRED_ARGUMENTS(1); - linebias = atoi(argv[++i]); - if (-1 == lastScreen) - { - int i; - for (i = 0; i < MAXSCREENS; i++) - { - vfbScreens[i].lineBias = linebias; - } - } - else - { - vfbScreens[lastScreen].lineBias = linebias; - } - return 2; + return vfbGetLinebias(argv, i); } #ifdef HAS_MMAP -- 1.6.0.4 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
