diff options
author | Pascal Rigaux <pixel@mandriva.com> | 2005-02-25 09:30:33 +0000 |
---|---|---|
committer | Pascal Rigaux <pixel@mandriva.com> | 2005-02-25 09:30:33 +0000 |
commit | 59b3868214a40e1cacf62c5f097d228310cd9eeb (patch) | |
tree | 06167d5246f5a1f93806a7e730f313af1e2b69fd /vbe.c | |
parent | 8c463e6886ec1c4d9b337a1922cd52df5d7f9120 (diff) | |
download | monitor-edid-59b3868214a40e1cacf62c5f097d228310cd9eeb.tar monitor-edid-59b3868214a40e1cacf62c5f097d228310cd9eeb.tar.gz monitor-edid-59b3868214a40e1cacf62c5f097d228310cd9eeb.tar.bz2 monitor-edid-59b3868214a40e1cacf62c5f097d228310cd9eeb.tar.xz monitor-edid-59b3868214a40e1cacf62c5f097d228310cd9eeb.zip |
- get rid of compile time DEBUG using runtime variable "verbose" instead
=> allow accessing memory size as ddcxinfos used to do
- struct vbe_info really is unused, dropping it
- simplify canon_str (it doesn't malloc anymore)
- new function get_str() to factorize code
Diffstat (limited to 'vbe.c')
-rw-r--r-- | vbe.c | 102 |
1 files changed, 30 insertions, 72 deletions
@@ -23,29 +23,17 @@ #include <stdarg.h> -/* used by libint10 */ +/* also used by libint10 */ void log_err(char *format, ...) { - va_list args; - va_start(args, format); - vfprintf(stderr, format, args); - va_end(args); + if (verbose) { + va_list args; + va_start(args, format); + vfprintf(stderr, format, args); + va_end(args); + } } -#ifdef DEBUG -/* Record returned by int 0x10, function 0x4f, subfunction 0x00. */ -struct vbe_info { - unsigned int version; - unsigned int oem_version; - unsigned int memory_size; - char *oem_name; - char *vendor_name; - char *product_name; - char *product_revision; - unsigned int modes; - unsigned int mode_list[0x100]; -}; - /* * Create a 'canonical' version, i.e. no spaces at start and end. * @@ -54,22 +42,16 @@ struct vbe_info { */ static char *canon_str(char *s, int len) { - char *m2, *m1, *m0 = malloc(len + 1); - int i; + char *start, *end; - for(m1 = m0, i = 0; i < len; i++) { - if(m1 == m0 && s[i] <= ' ') continue; - *m1++ = s[i]; - } - *m1 = 0; - while(m1 > m0 && m1[-1] <= ' ') { - *--m1 = 0; - } + for (start = s; start < s + len; start++) if (start[0] > ' ') break; - m2 = strdup(m0); - free(m0); + for (end = &s[len - 1]; end >= start; end--) { + if (end[0] > ' ') break; + end[0] = 0; + } - return m2; + return start; } static unsigned segofs2addr(unsigned char *segofs) @@ -101,7 +83,12 @@ static unsigned get_data(unsigned char *buf, unsigned buf_size, unsigned addr) return len; } -#endif + +static char *get_str(unsigned char *buf, unsigned buf_size, char *v) +{ + int len = get_data(buf, buf_size, segofs2addr(v)); + return canon_str(buf, len); +} #define GET_WORD(ADDR, OFS) ((ADDR)[OFS] + ((ADDR)[(OFS) + 1] << 8)) @@ -121,53 +108,26 @@ int vbe_check_vbe_info(void) /* Get VBE block */ i = CallInt10(&ax, &bx, &cx, v, sizeof(v), cpuemu) & 0xffff; if (i != 0x4f) { -#ifdef DEBUG log_err("VBE: Error (0x4f00): 0x%04x\n", i); -#endif return 0; } -#ifdef DEBUG { - int l, u; unsigned char tmp[1024]; - struct vbe_info vbe; /* Parse VBE block */ - vbe.version = GET_WORD(v, 0x04); - vbe.oem_version = GET_WORD(v, 0x14); - vbe.memory_size = GET_WORD(v, 0x12) << 16; + int version = GET_WORD(v, 0x04); + int oem_version = GET_WORD(v, 0x14); + int memory_size = GET_WORD(v, 0x12) << 16; log_err("version = %u.%u, oem version = %u.%u\n", - vbe.version >> 8, vbe.version & 0xff, vbe.oem_version >> 8, vbe.oem_version & 0xff); - log_err("memory = %uk\n", vbe.memory_size >> 10); - - l = get_data(tmp, sizeof tmp, u = segofs2addr(v + 0x06)); - vbe.oem_name = canon_str(tmp, l); - log_err("oem name [0x%05x] = \"%s\"\n", u, vbe.oem_name); - - l = get_data(tmp, sizeof tmp, u = segofs2addr(v + 0x16)); - vbe.vendor_name = canon_str(tmp, l); - log_err("vendor name [0x%05x] = \"%s\"\n", u, vbe.vendor_name); - - l = get_data(tmp, sizeof tmp, u = segofs2addr(v + 0x1a)); - vbe.product_name = canon_str(tmp, l); - log_err("product name [0x%05x] = \"%s\"\n", u, vbe.product_name); - - l = get_data(tmp, sizeof tmp, u = segofs2addr(v + 0x1e)); - vbe.product_revision = canon_str(tmp, l); - log_err("product revision [0x%05x] = \"%s\"\n", u, vbe.product_revision); - - l = get_data(tmp, sizeof tmp, u = segofs2addr(v + 0x0e)) >> 1; - for(i = vbe.modes = 0; i < l && i < sizeof vbe.mode_list / sizeof *vbe.mode_list; i++) { - u = GET_WORD(tmp, 2 * i); - if(u != 0xffff) - vbe.mode_list[vbe.modes++] = u; - else - break; - } - log_err("%u video modes\n", vbe.modes); + version >> 8, version & 0xff, oem_version >> 8, oem_version & 0xff); + log_err("memory = %uk\n", memory_size >> 10); + + log_err("oem name = %s\n", get_str(tmp, sizeof tmp, v + 0x06)); + log_err("vendor name = %s\n", get_str(tmp, sizeof tmp, v + 0x16)); + log_err("product name = %s\n", get_str(tmp, sizeof tmp, v + 0x1a)); + log_err("product revision = %s\n", get_str(tmp, sizeof tmp, v + 0x1e)); } -#endif return 1; } @@ -185,9 +145,7 @@ int vbe_get_edid_info(char *edid) /* Get EDID block */ i = CallInt10(&ax, &bx, &cx, edid, 256, cpuemu) & 0xffff; if (i != 0x4f) { -#ifdef DEBUG log_err("EDID: Error (0x4f15): 0x%04x\n", i); -#endif return 0; } |