diff options
Diffstat (limited to '')
-rw-r--r-- | debian/patches/400_w3m-img-freebsd.patch | 831 |
1 files changed, 0 insertions, 831 deletions
diff --git a/debian/patches/400_w3m-img-freebsd.patch b/debian/patches/400_w3m-img-freebsd.patch deleted file mode 100644 index b6f0677..0000000 --- a/debian/patches/400_w3m-img-freebsd.patch +++ /dev/null @@ -1,831 +0,0 @@ -Subject: Support FreeBSD framebuffer -Author: Yusuke Baba <babayaga1@y8.dion.ne.jp> -Origin: http://www.ac.auone-net.jp/~baba/w3m-img/index.html -Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=122673 - -diff --git a/acinclude.m4 b/acinclude.m4 -index ec91797..675cabe 100644 ---- a/acinclude.m4 -+++ b/acinclude.m4 -@@ -600,7 +600,7 @@ AC_DEFUN([AC_W3M_IMAGE], - if test x"$enable_image" = xyes; then - enable_image=x11 - case "`uname -s`" in -- Linux|linux|LINUX) -+ Linux|linux|LINUX|FreeBSD|freebsd|FREEBSD) - if test -c /dev/fb0; then - enable_image=x11,fb - fi;; -diff --git a/configure b/configure -index 4fdcd8e..2ba82d5 100755 ---- a/configure -+++ b/configure -@@ -6755,7 +6755,7 @@ $as_echo "$enable_image" >&6; } - if test x"$enable_image" = xyes; then - enable_image=x11 - case "`uname -s`" in -- Linux|linux|LINUX) -+ Linux|linux|LINUX|FreeBSD|freebsd|FREEBSD) - if test -c /dev/fb0; then - enable_image=x11,fb - fi;; -diff --git a/w3mimg/fb/fb.c b/w3mimg/fb/fb.c -index cd11128..7b6f23b 100644 ---- a/w3mimg/fb/fb.c -+++ b/w3mimg/fb/fb.c -@@ -12,12 +12,24 @@ - #include <errno.h> - #include <sys/ioctl.h> - #include <sys/mman.h> -+#if defined(__linux__) - #include <linux/fb.h> -+#elif defined(__FreeBSD__) -+#include <sys/fbio.h> -+#endif -+#if defined(__FreeBSD__) -+#include <sys/types.h> -+#include <machine/param.h> -+#endif - - #include "fb.h" - - #define FB_ENV "FRAMEBUFFER" -+#if defined(__linux__) - #define FB_DEFDEV "/dev/fb0" -+#elif defined(__FreeBSD__) -+#define FB_DEFDEV "/dev/ttyv0" -+#endif - - #define MONO_OFFSET_8BIT 0x40 - #define COLORS_MONO_8BIT 0x40 -@@ -38,22 +50,65 @@ - - #define IMAGE_SIZE_MAX 10000 - -+#if defined(__linux__) - static struct fb_cmap *fb_cmap_create(struct fb_fix_screeninfo *, - struct fb_var_screeninfo *); -+#elif defined(__FreeBSD__) -+static video_color_palette_t *fb_cmap_create(video_info_t *video_info, -+ video_adapter_info_t *video_adapter_info); -+#endif -+#if defined(__linux__) - static void fb_cmap_destroy(struct fb_cmap *cmap); -+#elif defined(__FreeBSD__) -+static void fb_cmap_destroy(video_color_palette_t *cmap); -+#endif -+#if defined(__linux__) - static int fb_fscrn_get(int fbfp, struct fb_fix_screeninfo *scinfo); -+#endif -+#if defined(__linux__) - static void *fb_mmap(int fbfp, struct fb_fix_screeninfo *scinfo); -+#elif defined(__FreeBSD__) -+static void *fb_mmap(int fbfp, video_adapter_info_t *video_adapter_info); -+#endif -+#if defined(__linux__) - static int fb_munmap(void *buf, struct fb_fix_screeninfo *scinfo); -+#elif defined(__FreeBSD__) -+static int fb_munmap(void *buf, video_adapter_info_t *video_adapter_info); -+#endif -+#if defined(__linux__) - static int fb_vscrn_get(int fbfp, struct fb_var_screeninfo *scinfo); -+#endif -+#if defined(__linux__) - static int fb_cmap_set(int fbfp, struct fb_cmap *cmap); -+#elif defined(__FreeBSD__) -+static int fb_cmap_set(int fbfp, video_color_palette_t *cmap); -+#endif -+#if defined(__linux__) - static int fb_cmap_get(int fbfp, struct fb_cmap *cmap); -+#elif defined(__FreeBSD__) -+static int fb_cmap_get(int fbfp, video_color_palette_t *cmap); -+#endif - static int fb_cmap_init(void); - static int fb_get_cmap_index(int r, int g, int b); - static unsigned long fb_get_packed_color(int r, int g, int b); -+#if defined(__FreeBSD__) -+static int fb_video_mode_get(int fbfp, int *video_mode); -+static int fb_video_info_get(int fbfp, video_info_t *video_info); -+static int fb_video_adapter_info_get(int fbfp, video_adapter_info_t *video_adapter_info); -+#endif - -+#if defined(__linux__) - static struct fb_fix_screeninfo fscinfo; - static struct fb_var_screeninfo vscinfo; -+#elif defined(__FreeBSD__) -+static video_info_t video_info; -+static video_adapter_info_t video_adapter_info; -+#endif -+#if defined(__linux__) - static struct fb_cmap *cmap = NULL, *cmap_org = NULL; -+#elif defined(__FreeBSD__) -+static video_color_palette_t *cmap = NULL, *cmap_org = NULL; -+#endif - static int is_open = FALSE; - static int fbfp = -1; - static size_t pixel_size = 0; -@@ -63,6 +118,9 @@ int - fb_open(void) - { - char *fbdev = { FB_DEFDEV }; -+#if defined(__FreeBSD__) -+ int video_mode; -+#endif - - if (is_open == TRUE) - return 1; -@@ -76,6 +134,7 @@ fb_open(void) - goto ERR_END; - } - -+#if defined(__linux__) - if (fb_fscrn_get(fbfp, &fscinfo)) { - goto ERR_END; - } -@@ -83,22 +142,67 @@ fb_open(void) - if (fb_vscrn_get(fbfp, &vscinfo)) { - goto ERR_END; - } -+#elif defined(__FreeBSD__) -+ if (fb_video_mode_get(fbfp, &video_mode)) { -+ goto ERR_END; -+ } -+ video_info.vi_mode = video_mode; -+ -+ if (fb_video_info_get(fbfp, &video_info)) { -+ goto ERR_END; -+ } - -+ if (fb_video_adapter_info_get(fbfp, &video_adapter_info)) { -+ goto ERR_END; -+ } -+ if (!(video_info.vi_flags & V_INFO_GRAPHICS) || -+ !(video_info.vi_flags & V_INFO_LINEAR)) { -+ goto ERR_END; -+ } -+#endif -+ -+#if defined(__linux__) - if ((cmap = fb_cmap_create(&fscinfo, &vscinfo)) == (struct fb_cmap *)-1) { - goto ERR_END; - } -+#elif defined(__FreeBSD__) -+ if ((cmap = fb_cmap_create(&video_info, &video_adapter_info)) == (video_color_palette_t *)-1) { -+ goto ERR_END; -+ } -+#endif - -+#if defined(__linux__) - if (!(buf = fb_mmap(fbfp, &fscinfo))) { - fprintf(stderr, "Can't allocate memory.\n"); - goto ERR_END; - } -+#elif defined(__FreeBSD__) -+ if (!(buf = fb_mmap(fbfp, &video_adapter_info))) { -+ fprintf(stderr, "Can't allocate memory.\n"); -+ goto ERR_END; -+ } -+#endif - -+#if defined(__linux__) - if (fscinfo.type != FB_TYPE_PACKED_PIXELS) { - fprintf(stderr, "This type of framebuffer is not supported.\n"); - goto ERR_END; - } -+#elif defined(__FreeBSD__) -+ if (!(video_info.vi_mem_model == V_INFO_MM_PACKED || -+ video_info.vi_mem_model == V_INFO_MM_DIRECT)) { -+ fprintf(stderr, "This type of framebuffer is not supported.\n"); -+ goto ERR_END; -+ } -+#endif - -+#if defined(__linux__) - if (fscinfo.visual == FB_VISUAL_PSEUDOCOLOR && vscinfo.bits_per_pixel == 8) { -+#elif defined(__FreeBSD__) -+ if (video_adapter_info.va_flags & V_ADP_PALETTE && -+ video_info.vi_mem_model == V_INFO_MM_PACKED && -+ video_info.vi_depth == 8) { -+#endif - if (fb_cmap_get(fbfp, cmap)) { - fprintf(stderr, "Can't get color map.\n"); - fb_cmap_destroy(cmap); -@@ -111,12 +215,20 @@ fb_open(void) - - pixel_size = 1; - } -+#if defined(__linux__) - else if ((fscinfo.visual == FB_VISUAL_TRUECOLOR || - fscinfo.visual == FB_VISUAL_DIRECTCOLOR) && - (vscinfo.bits_per_pixel == 15 || - vscinfo.bits_per_pixel == 16 || - vscinfo.bits_per_pixel == 24 || vscinfo.bits_per_pixel == 32)) { - pixel_size = (vscinfo.bits_per_pixel + 7) / CHAR_BIT; -+#elif defined(__FreeBSD__) -+ else if (video_info.vi_mem_model == V_INFO_MM_DIRECT && -+ (video_info.vi_depth == 15 || -+ video_info.vi_depth == 16 || -+ video_info.vi_depth == 24 || video_info.vi_depth == 32)) { -+ pixel_size = (video_info.vi_depth + 7) / CHAR_BIT; -+#endif - } - else { - fprintf(stderr, "This type of framebuffer is not supported.\n"); -@@ -147,7 +259,11 @@ fb_close(void) - cmap = NULL; - } - if (buf != NULL) { -+#if defined(__linux__) - fb_munmap(buf, &fscinfo); -+#elif defined(__FreeBSD__) -+ fb_munmap(buf, &video_adapter_info); -+#endif - buf = NULL; - } - -@@ -259,11 +375,19 @@ fb_image_draw(FB_IMAGE * image, int x, int y, int sx, int sy, int width, - if (y + height > fb_height()) - height = fb_height() - y; - -+#if defined(__linux__) - offset_fb = fscinfo.line_length * y + pixel_size * x; -+#elif defined(__FreeBSD__) -+ offset_fb = video_adapter_info.va_line_width * y + pixel_size * x; -+#endif - offset_img = image->rowstride * sy + pixel_size * sx; - for (i = 0; i < height; i++) { - memcpy(buf + offset_fb, image->data + offset_img, pixel_size * width); -+#if defined(__linux__) - offset_fb += fscinfo.line_length; -+#elif defined(__FreeBSD__) -+ offset_fb += video_adapter_info.va_line_width; -+#endif - offset_img += image->rowstride; - } - -@@ -336,7 +460,11 @@ fb_width(void) - if (is_open != TRUE) - return 0; - -+#if defined(__linux__) - return vscinfo.xres; -+#elif defined(__FreeBSD__) -+ return video_info.vi_width; -+#endif - } - - int -@@ -345,7 +473,11 @@ fb_height(void) - if (is_open != TRUE) - return 0; - -+#if defined(__linux__) - return vscinfo.yres; -+#elif defined(__FreeBSD__) -+ return video_info.vi_height; -+#endif - } - - int -@@ -369,7 +501,11 @@ fb_clear(int x, int y, int w, int h, int r, int g, int b) - h = fb_height() - y; - - if (tmp == NULL) { -+#if defined(__linux__) - tmp = malloc(fscinfo.line_length); -+#elif defined(__FreeBSD__) -+ tmp = malloc(video_adapter_info.va_line_width); -+#endif - if (tmp == NULL) - return 1; - } -@@ -384,10 +520,18 @@ fb_clear(int x, int y, int w, int h, int r, int g, int b) - gg = g; - bb = b; - } -+#if defined(__linux__) - offset_fb = fscinfo.line_length * y + pixel_size * x; -+#elif defined(__FreeBSD__) -+ offset_fb = video_adapter_info.va_line_width * y + pixel_size * x; -+#endif - for (i = 0; i < h; i++) { - memcpy(buf + offset_fb, tmp, pixel_size * w); -+#if defined(__linux__) - offset_fb += fscinfo.line_length; -+#elif defined(__FreeBSD__) -+ offset_fb += video_adapter_info.va_line_width; -+#endif - } - return 0; - } -@@ -400,11 +544,21 @@ fb_get_packed_color(int r, int g, int b) - return fb_get_cmap_index(r, g, b); - } - else { -+#if defined(__linux__) - return - ((r >> (CHAR_BIT - vscinfo.red.length)) << vscinfo.red.offset) + - ((g >> (CHAR_BIT - vscinfo.green.length)) << vscinfo.green. - offset) + - ((b >> (CHAR_BIT - vscinfo.blue.length)) << vscinfo.blue.offset); -+#elif defined(__FreeBSD__) -+ return -+ ((r >> (CHAR_BIT - video_info.vi_pixel_fsizes[0])) << -+ video_info.vi_pixel_fields[0]) + -+ ((g >> (CHAR_BIT - video_info.vi_pixel_fsizes[1])) << -+ video_info.vi_pixel_fields[1]) + -+ ((b >> (CHAR_BIT - video_info.vi_pixel_fsizes[2])) << -+ video_info.vi_pixel_fields[2]); -+#endif - } - } - -@@ -433,16 +587,31 @@ fb_cmap_init(void) - if (cmap == NULL) - return 1; - -+#if defined(__linux__) - if (cmap->len < COLOR_OFFSET_8BIT + COLORS_8BIT) { - fprintf(stderr, "Can't allocate enough color.\n"); - return 1; - } -+#elif defined(__FreeBSD__) -+ if (cmap->count < COLOR_OFFSET_8BIT + COLORS_8BIT) { -+ fprintf(stderr, "Can't allocate enough color.\n"); -+ return 1; -+ } -+#endif - - if (cmap_org == NULL) { -+#if defined(__linux__) - if ((cmap_org = - fb_cmap_create(&fscinfo, &vscinfo)) == (struct fb_cmap *)-1) { - return 1; - } -+#elif defined(__FreeBSD__) -+ if ((cmap_org = -+ fb_cmap_create(&video_info, &video_adapter_info)) == -+ (video_color_palette_t *)-1) { -+ return 1; -+ } -+#endif - - if (fb_cmap_get(fbfp, cmap_org)) { - fprintf(stderr, "Can't get color map.\n"); -@@ -452,8 +621,13 @@ fb_cmap_init(void) - } - } - -+#if defined(__linux__) - cmap->start = MONO_OFFSET_8BIT; - cmap->len = COLORS_8BIT + COLORS_MONO_8BIT; -+#elif defined(__FreeBSD__) -+ cmap->index = MONO_OFFSET_8BIT; -+ cmap->count = COLORS_8BIT + COLORS_MONO_8BIT; -+#endif - - for (lp = 0; lp < COLORS_MONO_8BIT; lp++) { - int c; -@@ -506,73 +680,213 @@ fb_cmap_init(void) - - #define LUT_MAX (256) - -+#if defined(__linux__) - static struct fb_cmap * - fb_cmap_create(struct fb_fix_screeninfo *fscinfo, - struct fb_var_screeninfo *vscinfo) -+#elif defined(__FreeBSD__) -+static video_color_palette_t * -+fb_cmap_create(video_info_t *video_info, -+ video_adapter_info_t *video_adapter_info) -+#endif - { -+#if defined(__linux__) - struct fb_cmap *cmap; -+#elif defined(__FreeBSD__) -+ video_color_palette_t *cmap; -+#endif - int cmaplen = LUT_MAX; - - /* check the existence of colormap */ -+#if defined(__linux__) - if (fscinfo->visual == FB_VISUAL_MONO01 || - fscinfo->visual == FB_VISUAL_MONO10 || - fscinfo->visual == FB_VISUAL_TRUECOLOR) - return NULL; -+#elif defined(__FreeBSD__) -+ if (!(video_adapter_info->va_flags & V_ADP_PALETTE)) -+ return NULL; -+#endif - -+#if defined(__linux__) - cmap = (struct fb_cmap *)malloc(sizeof(struct fb_cmap)); -+#elif defined(__FreeBSD__) -+ cmap = (video_color_palette_t *)malloc(sizeof(video_color_palette_t)); -+#endif - if (!cmap) { - perror("cmap malloc error\n"); -+#if defined(__linux__) - return (struct fb_cmap *)-1; -+#elif defined(__FreeBSD__) -+ return (video_color_palette_t *)-1; -+#endif - } -+#if defined(__linux__) - memset(cmap, 0, sizeof(struct fb_cmap)); -+#elif defined(__FreeBSD__) -+ memset(cmap, 0, sizeof(video_color_palette_t)); -+#endif -+ -+#if defined(__FreeBSD__) -+ if (video_info->vi_mem_model == V_INFO_MM_PACKED) { -+ cmap->red = (u_char *) malloc(sizeof(u_char) * cmaplen); -+ if (!cmap->red) { -+ perror("red lut malloc error\n"); -+ return (video_color_palette_t *)-1; -+ } -+ cmap->green = (u_char *) malloc(sizeof(u_char) * cmaplen); -+ if (!cmap->green) { -+ perror("green lut malloc error\n"); -+ free(cmap->red); -+ return (video_color_palette_t *)-1; -+ } -+ cmap->blue = (u_char *) malloc(sizeof(u_char) * cmaplen); -+ if (!cmap->blue) { -+ perror("blue lut malloc error\n"); -+ free(cmap->red); -+ free(cmap->green); -+ return (video_color_palette_t *)-1; -+ } -+ cmap->transparent = (u_char *) malloc(sizeof(u_char) * cmaplen); -+ if (!cmap->transparent) { -+ perror("transparent lut malloc error\n"); -+ free(cmap->red); -+ free(cmap->green); -+ free(cmap->blue); -+ return (video_color_palette_t *)-1; -+ } -+ cmap->count = cmaplen; -+ return cmap; -+ } -+#endif - - /* Allocates memory for a colormap */ -+#if defined(__linux__) - if (vscinfo->red.length) { - cmap->red = (__u16 *) malloc(sizeof(__u16) * cmaplen); -+#elif defined(__FreeBSD__) -+ if (video_info->vi_pixel_fsizes[0]) { -+ cmap->red = (u_char *) malloc(sizeof(u_char) * cmaplen); -+#endif - if (!cmap->red) { - perror("red lut malloc error\n"); -+#if defined(__linux__) - return (struct fb_cmap *)-1; -+#elif defined(__FreeBSD__) -+ return (video_color_palette_t *)-1; -+#endif - } - } -+#if defined(__linux__) - if (vscinfo->green.length) { - cmap->green = (__u16 *) malloc(sizeof(__u16) * cmaplen); -+#elif defined(__FreeBSD__) -+ if (video_info->vi_pixel_fsizes[1]) { -+ cmap->green = (u_char *) malloc(sizeof(u_char) * cmaplen); -+#endif - if (!cmap->green) { -+#if defined(__linux__) - if (vscinfo->red.length) - free(cmap->red); -+#elif defined(__FreeBSD__) -+ if (video_info->vi_pixel_fsizes[0]) -+ free(cmap->red); -+#endif - perror("green lut malloc error\n"); -+#if defined(__linux__) - return (struct fb_cmap *)-1; -+#elif defined(__FreeBSD__) -+ return (video_color_palette_t *)-1; -+#endif - } - } -+#if defined(__linux__) - if (vscinfo->blue.length) { - cmap->blue = (__u16 *) malloc(sizeof(__u16) * cmaplen); -+#elif defined(__FreeBSD__) -+ if (video_info->vi_pixel_fsizes[2]) { -+ cmap->blue = (u_char *) malloc(sizeof(u_char) * cmaplen); -+#endif - if (!cmap->blue) { -+#if defined(__linux__) - if (vscinfo->red.length) - free(cmap->red); -+#elif defined(__FreeBSD__) -+ if (video_info->vi_pixel_fsizes[0]) -+ free(cmap->red); -+#endif -+#if defined(__linux__) - if (vscinfo->green.length) - free(cmap->green); -+#elif defined(__FreeBSD__) -+ if (video_info->vi_pixel_fsizes[1]) -+ free(cmap->green); -+#endif - perror("blue lut malloc error\n"); -+#if defined(__linux__) - return (struct fb_cmap *)-1; -+#elif defined(__FreeBSD__) -+ return (video_color_palette_t *)-1; -+#endif - } - } -+#if defined(__linux__) - if (vscinfo->transp.length) { - cmap->transp = (__u16 *) malloc(sizeof(__u16) * cmaplen); -+#elif defined(__FreeBSD__) -+ if (video_info->vi_pixel_fsizes[3]) { -+ cmap->transparent = (u_char *) malloc(sizeof(u_char) * cmaplen); -+#endif -+#if defined(__linux__) - if (!cmap->transp) { -+#elif defined(__FreeBSD__) -+ if (!cmap->transparent) { -+#endif -+#if defined(__linux__) - if (vscinfo->red.length) - free(cmap->red); -+#elif defined(__FreeBSD__) -+ if (video_info->vi_pixel_fsizes[0]) -+ free(cmap->red); -+#endif -+#if defined(__linux__) - if (vscinfo->green.length) - free(cmap->green); -+#elif defined(__FreeBSD__) -+ if (video_info->vi_pixel_fsizes[1]) -+ free(cmap->green); -+#endif -+#if defined(__linux__) - if (vscinfo->blue.length) - free(cmap->blue); - perror("transp lut malloc error\n"); -+#elif defined(__FreeBSD__) -+ if (video_info->vi_pixel_fsizes[2]) -+ free(cmap->blue); -+ perror("transparent lut malloc error\n"); -+#endif -+#if defined(__linux__) - return (struct fb_cmap *)-1; -+#elif defined(__FreeBSD__) -+ return (video_color_palette_t *)-1; -+#endif - } - } -+#if defined(__linux__) - cmap->len = cmaplen; -+#elif defined(__FreeBSD__) -+ cmap->count = cmaplen; -+#endif - return cmap; - } - -+#if defined(__linux__) - static void - fb_cmap_destroy(struct fb_cmap *cmap) -+#elif defined(__FreeBSD__) -+static void -+fb_cmap_destroy(video_color_palette_t *cmap) -+#endif - { - if (cmap->red) - free(cmap->red); -@@ -580,28 +894,57 @@ fb_cmap_destroy(struct fb_cmap *cmap) - free(cmap->green); - if (cmap->blue) - free(cmap->blue); -+#if defined(__linux__) - if (cmap->transp) - free(cmap->transp); -+#elif defined(__FreeBSD__) -+ if (cmap->transparent) -+ free(cmap->transparent); -+#endif - free(cmap); - } - -+#if defined(__linux__) - static int - fb_cmap_get(int fbfp, struct fb_cmap *cmap) -+#elif defined(__FreeBSD__) -+static int -+fb_cmap_get(int fbfp, video_color_palette_t *cmap) -+#endif - { -+#if defined(__linux__) - if (ioctl(fbfp, FBIOGETCMAP, cmap)) { - perror("ioctl FBIOGETCMAP error\n"); - return -1; - } -+#elif defined(__FreeBSD__) -+ if (ioctl(fbfp, FBIO_GETPALETTE, cmap) == -1) { -+ perror("ioctl FBIO_GETPALETTE error\n"); -+ return -1; -+ } -+#endif - return 0; - } - -+#if defined(__linux__) - static int - fb_cmap_set(int fbfp, struct fb_cmap *cmap) -+#elif defined(__FreeBSD__) -+static int -+fb_cmap_set(int fbfp, video_color_palette_t *cmap) -+#endif - { -+#if defined(__linux__) - if (ioctl(fbfp, FBIOPUTCMAP, cmap)) { - perror("ioctl FBIOPUTCMAP error\n"); - return -1; - } -+#elif defined(__FreeBSD__) -+ if (ioctl(fbfp, FBIO_SETPALETTE, cmap) == -1) { -+ perror("ioctl FBIO_SETPALETTE error\n"); -+ return -1; -+ } -+#endif - return 0; - } - -@@ -612,10 +955,16 @@ fb_cmap_set(int fbfp, struct fb_cmap *cmap) - * fb_munmap() deletes the mappings - */ - -+#if defined(__linux__) - static void * - fb_mmap(int fbfp, struct fb_fix_screeninfo *scinfo) -+#elif defined(__FreeBSD__) -+static void * -+fb_mmap(int fbfp, video_adapter_info_t *video_adapter_info) -+#endif - { - void *buf; -+#if defined(__linux__) - if ((buf = (unsigned char *) - mmap(NULL, scinfo->smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fbfp, - (off_t) 0)) -@@ -623,13 +972,41 @@ fb_mmap(int fbfp, struct fb_fix_screeninfo *scinfo) - perror("mmap error"); - return NULL; - } -+#elif defined(__FreeBSD__) -+ size_t mmap_offset; -+ size_t mmap_length; -+ mmap_offset = (size_t)(video_adapter_info->va_window) & (PAGE_MASK); -+ mmap_length = (size_t)(video_adapter_info->va_window_size + -+ mmap_offset + PAGE_MASK) & (~PAGE_MASK); -+ if ((buf = (unsigned char *) -+ mmap(NULL, mmap_length, PROT_READ | PROT_WRITE, MAP_SHARED, fbfp, -+ (off_t) 0)) -+ == MAP_FAILED) { -+ perror("mmap error"); -+ return NULL; -+ } -+#endif - return buf; - } - -+#if defined(__linux__) - static int - fb_munmap(void *buf, struct fb_fix_screeninfo *scinfo) -+#elif defined(__FreeBSD__) -+static int -+fb_munmap(void *buf, video_adapter_info_t *video_adapter_info) -+#endif - { -+#if defined(__linux__) - return munmap(buf, scinfo->smem_len); -+#elif defined(__FreeBSD__) -+ size_t mmap_offset; -+ size_t mmap_length; -+ mmap_offset = (size_t)(video_adapter_info->va_window) & (PAGE_MASK); -+ mmap_length = (size_t)(video_adapter_info->va_window_size + -+ mmap_offset + PAGE_MASK) & (~PAGE_MASK); -+ return munmap((void *)((u_long)buf & (~PAGE_MASK)), mmap_length); -+#endif - } - - /* -@@ -637,6 +1014,7 @@ fb_munmap(void *buf, struct fb_fix_screeninfo *scinfo) - * - * fb_fscrn_get() get information - */ -+#if defined(__linux__) - static int - fb_fscrn_get(int fbfp, struct fb_fix_screeninfo *scinfo) - { -@@ -646,12 +1024,14 @@ fb_fscrn_get(int fbfp, struct fb_fix_screeninfo *scinfo) - } - return 0; - } -+#endif - - /* - * (struct fb_var_screeninfo) device independent variable information - * - * fb_vscrn_get() get information - */ -+#if defined(__linux__) - static int - fb_vscrn_get(int fbfp, struct fb_var_screeninfo *scinfo) - { -@@ -661,3 +1041,41 @@ fb_vscrn_get(int fbfp, struct fb_var_screeninfo *scinfo) - } - return 0; - } -+#endif -+ -+#if defined(__FreeBSD__) -+static int -+fb_video_mode_get(int fbfp, int *video_mode) -+{ -+ if (ioctl(fbfp, FBIO_GETMODE, video_mode) == -1) { -+ perror("ioctl FBIO_GETMODE error\n"); -+ return -1; -+ } -+ return 0; -+} -+#endif -+ -+#if defined(__FreeBSD__) -+static int -+fb_video_info_get(int fbfp, video_info_t *video_info) -+{ -+ if (ioctl(fbfp, FBIO_MODEINFO, video_info) == -1) { -+ perror("ioctl FBIO_MODEINFO error\n"); -+ return -1; -+ } -+ return 0; -+} -+#endif -+ -+#if defined(__FreeBSD__) -+static int -+fb_video_adapter_info_get(int fbfp, video_adapter_info_t *video_adapter_info) -+{ -+ if (ioctl(fbfp, FBIO_ADPINFO, video_adapter_info) == -1) { -+ perror("ioctl FBIO_ADPINFO error\n"); -+ return -1; -+ } -+ return 0; -+} -+#endif -+ -diff --git a/w3mimg/fb/fb.h b/w3mimg/fb/fb.h -index 1138bb0..5d86454 100644 ---- a/w3mimg/fb/fb.h -+++ b/w3mimg/fb/fb.h -@@ -1,7 +1,11 @@ - /* $Id: fb.h,v 1.7 2003/07/07 15:48:17 ukai Exp $ */ - #ifndef fb_header - #define fb_header -+#if defined(__linux__) - #include <linux/fb.h> -+#elif defined(__FreeBSD__) -+#include <sys/fbio.h> -+#endif - - typedef struct { - int num; -diff --git a/w3mimg/fb/fb_w3mimg.c b/w3mimg/fb/fb_w3mimg.c -index d3ae5a9..fb323f5 100644 ---- a/w3mimg/fb/fb_w3mimg.c -+++ b/w3mimg/fb/fb_w3mimg.c -@@ -153,10 +153,15 @@ check_tty_console(char *tty) - return 0; - if (strncmp(tty, "/dev/", 5) == 0) - tty += 5; -+#if defined(__linux__) - if (strncmp(tty, "tty", 3) == 0 && isdigit(*(tty + 3))) - return 1; - if (strncmp(tty, "vc/", 3) == 0 && isdigit(*(tty + 3))) - return 1; -+#elif defined(__FreeBSD__) -+ if (strncmp(tty, "ttyv", 4) == 0 && isxdigit(*(tty + 4))) -+ return 1; -+#endif - return 0; - } - #else -@@ -172,7 +177,9 @@ w3mimg_fbopen() - return NULL; - memset(wop, 0, sizeof(w3mimg_op)); - -- if (!check_tty_console(getenv("W3M_TTY")) && strcmp("jfbterm", getenv("TERM")) != 0) { -+ if (!check_tty_console(getenv("W3M_TTY")) && -+ strcmp("jfbterm", getenv("TERM")) != 0 && -+ strncmp("jfbterm-", getenv("TERM"), 8) != 0) { - fprintf(stderr, "w3mimgdisplay/fb: tty is not console\n"); - goto error; - } |