merge w3m-img for framebuffer support

* w3mimg/w3mimg.h: created
* w3mimg/x11/x11_w3mimg.c: created
* w3mimg/fb/fb_w3mimg.c: created
* w3mimgsize.c w3mimgdisplay.c: modified
* configure: modified
* XMakefile: modified
* config.h.dist: updated
From: Fumitoshi UKAI  <ukai@debian.or.jp>

w3m-img for framebuffer support
* http://homepage3.nifty.com/slokar/fb/
* w3mimg/fb/fb.c w3mimg/fb/fb.h
  w3mimg/fb/fb_img.c w3mimg/fb/fb_img.h
  w3mimg/fb/fb_gdkpixbuf.c w3mimg/fb/fb_gdkpixbuf.h
  w3mimg/fb/fb_imlib2.c w3mimg/fb/fb_imlib.h
  w3mimg/fb/readme.txt w3mimg/fb/license.txt: added
From: Hiroshi Kawashima <kei@sm.sony.co.jp>
This commit is contained in:
Fumitoshi UKAI
2002-07-17 20:58:48 +00:00
parent 81499ed693
commit a12c96b492
19 changed files with 1806 additions and 222 deletions

600
w3mimg/fb/fb.c Normal file
View File

@@ -0,0 +1,600 @@
/**************************************************************************
fb.c 0.2 Copyright (C) 2002, hito
**************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <limits.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <linux/fb.h>
#include "fb.h"
#define FB_ENV "FRAMEBUFFER"
#define FB_DEFDEV "/dev/fb0"
#define FALSE 0
#define TRUE 1
static struct fb_cmap* fb_cmap_create(struct fb_fix_screeninfo*, struct fb_var_screeninfo *);
static void fb_cmap_destroy(struct fb_cmap *cmap);
static int fb_fscrn_get(int fbfp, struct fb_fix_screeninfo *scinfo);
static void *fb_mmap(int fbfp, struct fb_fix_screeninfo *scinfo);
static int fb_munmap(void* buf,struct fb_fix_screeninfo *scinfo);
static int fb_vscrn_get(int fbfp, struct fb_var_screeninfo *scinfo);
static struct fb_fix_screeninfo fscinfo;
static struct fb_var_screeninfo vscinfo;
static struct fb_cmap *cmap = NULL;
static int is_open = FALSE;
static int fbfp = -1;
static unsigned char *buf=NULL;
int fb_open(void){
char *fbdev = {FB_DEFDEV};
if(is_open == TRUE)
return 1;
if(getenv(FB_ENV)){
fbdev=getenv(FB_ENV);
}
if((fbfp = open(fbdev,O_RDWR))==-1){
fprintf(stderr, "open %s error\n",fbdev);
goto ERR_END;
}
if(fb_fscrn_get(fbfp,&fscinfo)){
goto ERR_END;
}
if(fb_vscrn_get(fbfp,&vscinfo)){
goto ERR_END;
}
if((cmap = fb_cmap_create(&fscinfo,&vscinfo)) == (struct fb_cmap*) -1){
goto ERR_END;
}
if(!(buf = fb_mmap(fbfp,&fscinfo))){
fprintf(stderr, "Can't allocate memory.\n");
goto ERR_END;
}
if(fscinfo.type!=FB_TYPE_PACKED_PIXELS){
fprintf(stderr, "This type of framebuffer is not supported.\n");
goto ERR_END;
}
/*
if(fscinfo.visual == FB_VISUAL_PSEUDOCOLOR){
printf("FB_VISUAL_PSEUDOCOLOR\n");
if(vscinfo.bits_per_pixel!=8){
fprintf(stderr, "̤<>б<EFBFBD><D0B1>ե졼<D5A5><ECA1BC><EFBFBD>Хåե<C3A5>\n");
goto ERR_END;
}
if(fb_cmap_get(fbfp,cmap)){
fprintf(stderr, "<22><><EFBFBD><EFBFBD>ޥå׳<C3A5><D7B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
// fb_cmap_destroy(cmap);
goto ERR_END;
}
// fb_cmap_disp(cmap);
if(cmap->len <(LINUX_LOGO_COLORS + LOGO_COLOR_OFFSET)){
fprintf(stderr, "<22><><EFBFBD>γ<EFBFBD><CEB3><EFBFBD><EFBFBD>ΰ褬<CEB0><E8A4AC>­<EFBFBD><C2AD><EFBFBD>Ƥ<EFBFBD><C6A4>ޤ<EFBFBD>\n");
goto ERR_END;
}
cmap->start = LOGO_COLOR_OFFSET;
cmap->len = LINUX_LOGO_COLORS;
for(lp = 0; lp < LINUX_LOGO_COLORS; lp++){
if(cmap->red){
*(cmap->red+lp) = (linux_logo_red[lp]<<CHAR_BIT)+linux_logo_red[lp];
}
if(cmap->green){
*(cmap->green+lp)= (linux_logo_green[lp]<<CHAR_BIT)+linux_logo_green[lp];
}
if(cmap->blue){
*(cmap->blue+lp)= (linux_logo_blue[lp]<<CHAR_BIT)+linux_logo_blue[lp];
}
}
if(fb_cmap_set(fbfp,cmap)){
fb_cmap_destroy(cmap);
fprintf(stderr, "<22><><EFBFBD><EFBFBD>ޥå׳<C3A5><D7B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
goto ERR_END;
}
}
*/
if(!(fscinfo.visual == FB_VISUAL_TRUECOLOR &&
(vscinfo.bits_per_pixel == 15 ||
vscinfo.bits_per_pixel == 16 ||
vscinfo.bits_per_pixel == 24 ||
vscinfo.bits_per_pixel == 32))){
fprintf(stderr,"This type of framebuffer is not supported.\n");
goto ERR_END;
}
is_open = TRUE;
return 0;
ERR_END:
fb_close();
return 1;
}
void fb_close(void)
{
if(is_open != TRUE)
return;
if(cmap != NULL){
fb_cmap_destroy(cmap);
cmap = NULL;
}
if(buf != NULL){
fb_munmap(buf,&fscinfo);
buf = NULL;
}
if(fbfp >= 0){
close(fbfp);
}
is_open = FALSE;
}
void fb_pset(int x, int y, int r, int g, int b)
{
unsigned long work;
int offset;
static size_t size = 0;
if(is_open != TRUE || x >= vscinfo.xres || y >= vscinfo.yres)
return;
if(size == 0)
size = (vscinfo.bits_per_pixel + 7) / CHAR_BIT;
offset = fscinfo.line_length * y + size * x;
if(offset >= fscinfo.smem_len)
return;
work=
((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);
memcpy(buf + offset, &work, size);
}
int fb_get_color(int x, int y, int *r, int *g, int *b)
{
unsigned long work = 0;
int offset;
static size_t size = 0;
if(is_open != TRUE || x >= vscinfo.xres || y >= vscinfo.yres)
return 1;
if(size == 0)
size = (vscinfo.bits_per_pixel + 7) / CHAR_BIT;
offset = fscinfo.line_length * y + size * x;
if(offset >= fscinfo.smem_len)
return 1;
memcpy(&work, buf + offset, size);
*r = ((work >> vscinfo.red.offset) & (0x000000ff >> (CHAR_BIT - vscinfo.red.length)))
<< (CHAR_BIT - vscinfo.red.length);
*g = ((work >> vscinfo.green.offset) & (0x000000ff >> (CHAR_BIT - vscinfo.green.length)))
<<(CHAR_BIT - vscinfo.green.length);
*b = ((work >> vscinfo.blue.offset) & (0x000000ff >> (CHAR_BIT - vscinfo.blue.length)))
<< (CHAR_BIT - vscinfo.blue.length);
return 0;
}
void fb_clear(void)
{
if(is_open != TRUE)
return;
memset(buf, 0, (vscinfo.xres * vscinfo.yres * vscinfo.bits_per_pixel) / CHAR_BIT);
}
int fb_width(void)
{
if(is_open != TRUE)
return 0;
return vscinfo.xres;
}
int fb_height(void)
{
if(is_open != TRUE)
return 0;
return vscinfo.yres;
}
void fb_cmap_disp(void)
{
int lp;
if(is_open != TRUE)
return;
printf("cmap DUMP\n");
printf("start :[%08x]\n", cmap->start);
printf("len :[%08x]\n", cmap->len);
printf("red :[%8p]\n", cmap->red);
if(cmap->red){
for(lp=0;lp<cmap->len;lp++){
if((lp+1)%16==0) printf("%04x\n",*(cmap->red+lp));
else printf("%04x ",*(cmap->red+lp));
}
if(lp%16) printf("\n");
}
printf("green :[%8p]\n",cmap->green);
if(cmap->green){
for(lp=0;lp<cmap->len;lp++){
if((lp+1)%16==0) printf("%04x\n",*(cmap->green+lp));
else printf("%04x ",*(cmap->green+lp));
}
if(lp%16) printf("\n");
}
printf("blue :[%8p]\n",cmap->blue);
if(cmap->blue){
for(lp=0;lp<cmap->len;lp++){
if((lp+1)%16==0) printf("%04x\n",*(cmap->blue+lp));
else printf("%04x ",*(cmap->blue+lp));
}
if(lp%16) printf("\n");
}
printf("transp :[%8p]\n",cmap->transp);
if(cmap->transp){
for(lp=0;lp<cmap->len;lp++){
if((lp+1)%16==0) printf("%04x\n",*(cmap->transp+lp));
else printf("%04x ",*(cmap->transp+lp));
}
if(lp%16) printf("\n");
}
return;
}
void fb_fscrn_disp(void)
{
if(is_open != TRUE)
return;
printf("scinfo[%8p] DUMP\n", &fscinfo);
printf("id :[%s]\n", fscinfo.id);
printf("smem_start :[%08lx]\n", fscinfo.smem_start);
printf("smem_len :[%d]\n", fscinfo.smem_len);
printf("type :[%d] ", fscinfo.type);
switch(fscinfo.type){
case FB_TYPE_PACKED_PIXELS:
printf("FB_TYPE_PACKED_PIXELS\n");break;
case FB_TYPE_PLANES:
printf("FB_TYPE_PLANES\n");break;
case FB_TYPE_INTERLEAVED_PLANES:
printf("FB_TYPE_INTERLEAVED_PLANES\n");break;
case FB_TYPE_TEXT:
printf("FB_TYPE_TEXT\n");break;
default:printf("Unknown type.\n");
}
printf("type_aux :[%d] ",fscinfo.type_aux);
switch(fscinfo.type_aux){
case FB_AUX_TEXT_MDA:
printf("FB_AUX_TEXT_MDA\n");break;
case FB_AUX_TEXT_CGA:
printf("FB_AUX_TEXT_CGA\n");break;
case FB_AUX_TEXT_S3_MMIO:
printf("FB_AUX_TEXT_S3_MMIO\n");break;
case FB_AUX_TEXT_MGA_STEP16:
printf("FB_AUX_TEXT_MGA_STEP16\n");break;
case FB_AUX_TEXT_MGA_STEP8:
printf("FB_AUX_TEXT_MGA_STEP8\n");break;
default:printf("Unknown type_aux.\n");
}
printf("visual :[%d] ",fscinfo.visual);
switch(fscinfo.visual){
case FB_VISUAL_MONO01:
printf("FB_VISUAL_MONO01\n");break;
case FB_VISUAL_MONO10:
printf("FB_VISUAL_MONO10\n");break;
case FB_VISUAL_TRUECOLOR:
printf("FB_VISUAL_TRUECOLOR\n");break;
case FB_VISUAL_PSEUDOCOLOR:
printf("FB_VISUAL_PSEUDOCOLOR\n");break;
case FB_VISUAL_DIRECTCOLOR:
printf("FB_VISUAL_DIRECTCOLOR\n");break;
case FB_VISUAL_STATIC_PSEUDOCOLOR:
printf("FB_VISUAL_STATIC_PSEUDOCOLOR\n");break;
default:printf("Unknown Visual mode.\n");
}
printf("xpanstep :[%d]\n",fscinfo.xpanstep);
printf("ypanstep :[%d]\n",fscinfo.ypanstep);
printf("ywrapstep :[%d]\n",fscinfo.ywrapstep);
printf("line_length :[%d]\n",fscinfo.line_length);
printf("mmio_start :[%08lx]\n",fscinfo.mmio_start);
printf("mmio_len :[%d]\n",fscinfo.mmio_len);
printf("accel :[%d] ",fscinfo.accel);
switch(fscinfo.accel){
case FB_ACCEL_NONE:
printf("FB_ACCEL_NONE\n");break;
case FB_ACCEL_ATARIBLITT:
printf("FB_ACCEL_ATARIBLITT\n");break;
case FB_ACCEL_AMIGABLITT:
printf("FB_ACCEL_AMIGABLITT\n");break;
case FB_ACCEL_S3_TRIO64:
printf("FB_ACCEL_S3_TRIO64\n");break;
case FB_ACCEL_NCR_77C32BLT:
printf("FB_ACCEL_NCR_77C32BLT\n");break;
case FB_ACCEL_S3_VIRGE:
printf("FB_ACCEL_S3_VIRGE\n");break;
case FB_ACCEL_ATI_MACH64GX:
printf("FB_ACCEL_ATI_MACH64GX\n");break;
case FB_ACCEL_DEC_TGA:
printf("FB_ACCEL_DEC_TGA\n");break;
case FB_ACCEL_ATI_MACH64CT:
printf("FB_ACCEL_ATI_MACH64CT\n");break;
case FB_ACCEL_ATI_MACH64VT:
printf("FB_ACCEL_ATI_MACH64VT\n");break;
case FB_ACCEL_ATI_MACH64GT:
printf("FB_ACCEL_ATI_MACH64GT\n");break;
case FB_ACCEL_SUN_CREATOR:
printf("FB_ACCEL_SUN_CREATOR\n");break;
case FB_ACCEL_SUN_CGSIX:
printf("FB_ACCEL_SUN_CGSIX\n");break;
case FB_ACCEL_SUN_LEO:
printf("FB_ACCEL_SUN_LEO\n");break;
case FB_ACCEL_IMS_TWINTURBO:
printf("FB_ACCEL_IMS_TWINTURBO\n");break;
case FB_ACCEL_3DLABS_PERMEDIA2:
printf("FB_ACCEL_3DLABS_PERMEDIA2\n");break;
case FB_ACCEL_MATROX_MGA2064W:
printf("FB_ACCEL_MATROX_MGA2064W\n");break;
case FB_ACCEL_MATROX_MGA1064SG:
printf("FB_ACCEL_MATROX_MGA1064SG\n");break;
case FB_ACCEL_MATROX_MGA2164W:
printf("FB_ACCEL_MATROX_MGA2164W\n");break;
case FB_ACCEL_MATROX_MGA2164W_AGP:
printf("FB_ACCEL_MATROX_MGA2164W_AGP\n");break;
case FB_ACCEL_MATROX_MGAG100:
printf("FB_ACCEL_MATROX_MGAG100\n");break;
case FB_ACCEL_MATROX_MGAG200:
printf("FB_ACCEL_MATROX_MGAG200\n");break;
case FB_ACCEL_SUN_CG14:
printf("FB_ACCEL_SUN_CG14\n");break;
case FB_ACCEL_SUN_BWTWO:
printf("FB_ACCEL_SUN_BWTWO\n");break;
case FB_ACCEL_SUN_CGTHREE:
printf("FB_ACCEL_SUN_CGTHREE\n");break;
case FB_ACCEL_SUN_TCX:
printf("FB_ACCEL_SUN_TCX\n");break;
default:printf("Unknown Visual mode.\n");
}
return;
}
void fb_vscrn_disp(void)
{
if(is_open != TRUE)
return;
printf("vscinfo DUMP\n");
printf("xres :[%d]\n",vscinfo.xres);
printf("yres :[%d]\n",vscinfo.yres);
printf("xres_virtual :[%d]\n",vscinfo.xres_virtual);
printf("yres_virtual :[%d]\n",vscinfo.yres_virtual);
printf("xoffset :[%d]\n",vscinfo.xoffset);
printf("yoffset :[%d]\n",vscinfo.yoffset);
printf("bits_per_pixel :[%d]\n",vscinfo.bits_per_pixel);
printf("grayscale :[%d]\n",vscinfo.grayscale);
printf("red.offset :[%d]\n",vscinfo.red.offset);
printf("red.length :[%d]\n",vscinfo.red.length);
printf("red.msb_right :[%d]\n",vscinfo.red.msb_right);
printf("green.offset :[%d]\n",vscinfo.green.offset);
printf("green.length :[%d]\n",vscinfo.green.length);
printf("green.msb_right :[%d]\n",vscinfo.green.msb_right);
printf("blue.offset :[%d]\n",vscinfo.blue.offset);
printf("blue.length :[%d]\n",vscinfo.blue.length);
printf("blue.msb_right :[%d]\n",vscinfo.blue.msb_right);
printf("transp.offset :[%d]\n",vscinfo.transp.offset);
printf("transp.length :[%d]\n",vscinfo.transp.length);
printf("transp.msb_right:[%d]\n",vscinfo.transp.msb_right);
printf("nonstd :[%d]\n",vscinfo.nonstd);
printf("activate :[%d]\n",vscinfo.activate);
printf("height :[%d]\n",vscinfo.height);
printf("width :[%d]\n",vscinfo.width);
printf("accel_flags :[%d]\n",vscinfo.accel_flags);
printf("pixclock :[%d]\n",vscinfo.pixclock);
printf("left_margin :[%d]\n",vscinfo.left_margin);
printf("right_margin :[%d]\n",vscinfo.right_margin);
printf("upper_margin :[%d]\n",vscinfo.upper_margin);
printf("lower_margin :[%d]\n",vscinfo.lower_margin);
printf("hsync_len :[%d]\n",vscinfo.hsync_len);
printf("vsync_len :[%d]\n",vscinfo.vsync_len);
printf("sync :[%d]\n",vscinfo.sync);
printf("vmode :[%d]\n",vscinfo.vmode);
return;
}
/********* static functions **************/
/*
(struct fb_cmap)<29>ǥХ<C7A5><D0A5><EFBFBD><EFBFBD>˰<EFBFBD>¸<EFBFBD><C2B8><EFBFBD>ʤ<EFBFBD><CAA4><EFBFBD><EFBFBD><EFBFBD>ޥå׾<C3A5><D7BE><EFBFBD>
fb_cmap_create() <09><><EFBFBD><EFBFBD><EFBFBD>Υ<EFBFBD><CEA5><EFBFBD>ޥå׾<C3A5><D7BE><EFBFBD>
fb_cmap_destroy() <09><><EFBFBD><EFBFBD>ޥå׾<C3A5><D7BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˴<EFBFBD>
fb_cmap_disp() <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD><C9BD>
fb_cmap_get() <09><><EFBFBD><EFBFBD><EFBFBD>γ<EFBFBD><CEB3><EFBFBD>
fb_cmap_set() <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
#define LUT_MAX (256)
static struct fb_cmap* fb_cmap_create(struct fb_fix_screeninfo* fscinfo,
struct fb_var_screeninfo *vscinfo)
{
struct fb_cmap* cmap;
int cmaplen=LUT_MAX;
/* <20><><EFBFBD><EFBFBD>ޥåפ<C3A5>¸<EFBFBD>ߥ<EFBFBD><DFA5><EFBFBD><EFBFBD>å<EFBFBD> */
if(fscinfo->visual==FB_VISUAL_MONO01 ||
fscinfo->visual==FB_VISUAL_MONO10 ||
fscinfo->visual==FB_VISUAL_TRUECOLOR) return NULL;
cmap=(struct fb_cmap*)malloc(sizeof(struct fb_cmap));
if(!cmap){
perror("cmap malloc error\n");
return (struct fb_cmap*)-1;
}
memset(cmap,0,sizeof(struct fb_cmap));
/* <20><>ʬ<EFBFBD><CAAC><EFBFBD><EFBFBD>¸<EFBFBD>ߤ<EFBFBD><DFA4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ä<EFBFBD><C3A4><EFBFBD><EFBFBD>ޥå<DEA5><C3A5>Ѥ<EFBFBD><D1A4>ΰ<EFBFBD><CEB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if(vscinfo->red.length){
cmap->red=(__u16*)malloc(sizeof(__u16)*cmaplen);
if(!cmap->red){
perror("red lut malloc error\n");
return (struct fb_cmap*)-1;
}
}
if(vscinfo->green.length){
cmap->green=(__u16*)malloc(sizeof(__u16)*cmaplen);
if(!cmap->green){
if(vscinfo->red.length) free(cmap->red);
perror("green lut malloc error\n");
return (struct fb_cmap*)-1;
}
}
if(vscinfo->blue.length){
cmap->blue=(__u16*)malloc(sizeof(__u16)*cmaplen);
if(!cmap->blue){
if(vscinfo->red.length) free(cmap->red);
if(vscinfo->green.length) free(cmap->green);
perror("blue lut malloc error\n");
return (struct fb_cmap*)-1;
}
}
if(vscinfo->transp.length){
cmap->transp=(__u16*)malloc(sizeof(__u16)*cmaplen);
if(!cmap->transp){
if(vscinfo->red.length) free(cmap->red);
if(vscinfo->green.length) free(cmap->green);
if(vscinfo->blue.length) free(cmap->blue);
perror("transp lut malloc error\n");
return (struct fb_cmap*)-1;
}
}
cmap->len=cmaplen;
return cmap;
}
static void fb_cmap_destroy(struct fb_cmap* cmap)
{
if(cmap->red) free(cmap->red);
if(cmap->green) free(cmap->green);
if(cmap->blue) free(cmap->blue);
if(cmap->transp) free(cmap->transp);
free(cmap);
}
/*
static int fb_cmap_get(int fbfp,struct fb_cmap* cmap)
{
if(ioctl(fbfp,FBIOGETCMAP,cmap)){
perror("ioctl FBIOGETCMAP error\n");
return -1;
}
return 0;
}
static int fb_cmap_set(int fbfp,struct fb_cmap* cmap)
{
if(ioctl(fbfp,FBIOPUTCMAP,cmap)){
perror("ioctl FBIOPUTCMAP error\n");
return -1;
}
return 0;
}
*/
/*
<09>ե졼<D5A5><ECA1BC><EFBFBD>Хåե<C3A5><D5A5><EFBFBD><EFBFBD>Ф<EFBFBD><D0A4><EFBFBD><EBA5A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
fb_mmap() <09>ե졼<D5A5><ECA1BC><EFBFBD>Хåե<C3A5><D5A5>Υ<EFBFBD><CEA5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؤΥޥå<DEA5>
fb_munmap() <09>ե졼<D5A5><ECA1BC><EFBFBD>Хåե<C3A5><D5A5>Υ<EFBFBD><CEA5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5A4AB><EFBFBD>Υ<EFBFBD><CEA5><EFBFBD><EFBFBD>ޥå<DEA5>
*/
static void *fb_mmap(int fbfp, struct fb_fix_screeninfo* scinfo)
{
void *buf;
if((buf=(unsigned char*)
mmap(NULL, scinfo->smem_len, PROT_READ|PROT_WRITE,MAP_SHARED, fbfp, (off_t)0))
==MAP_FAILED){
perror("mmap error");
return NULL;
}
return buf;
}
static int fb_munmap(void* buf,struct fb_fix_screeninfo* scinfo)
{
return munmap(buf,scinfo->smem_len);
}
/*
(struct fb_fix_screeninfo)<29>ǥХ<C7A5><D0A5><EFBFBD><EFBFBD>˰<EFBFBD>¸<EFBFBD><C2B8><EFBFBD>ʤ<EFBFBD><CAA4><EFBFBD><EFBFBD><EFBFBD>줿<EFBFBD><ECA4BF><EFBFBD><EFBFBD>
fb_fscrn_disp() <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD><C9BD>
fb_fscrn_get() <09><><EFBFBD><EFBFBD><EFBFBD>γ<EFBFBD><CEB3><EFBFBD>
*/
static int fb_fscrn_get(int fbfp,struct fb_fix_screeninfo* scinfo)
{
if(ioctl(fbfp,FBIOGET_FSCREENINFO,scinfo)){
perror("ioctl FBIOGET_FSCREENINFO error\n");
return -1;
}
return 0;
}
/*
(struct fb_var_screeninfo)<29>ǥХ<C7A5><D0A5><EFBFBD><EFBFBD>˰<EFBFBD>¸<EFBFBD><C2B8><EFBFBD>ʤ<EFBFBD><CAA4>ѹ<EFBFBD><D1B9><EFBFBD>ǽ<EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>
fb_vscrn_disp() <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD><C9BD>
fb_vscrn_get() <09><><EFBFBD><EFBFBD><EFBFBD>γ<EFBFBD><CEB3><EFBFBD>
fb_vscrn_set() <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
static int fb_vscrn_get(int fbfp,struct fb_var_screeninfo* scinfo)
{
if(ioctl(fbfp,FBIOGET_VSCREENINFO,scinfo)){
perror("ioctl FBIOGET_VSCREENINFO error\n");
return -1;
}
return 0;
}
/*
static int fb_vscrn_set(int fbfp,struct fb_var_screeninfo* scinfo)
{
if(ioctl(fbfp,FBIOPUT_VSCREENINFO,scinfo)){
perror("ioctl FBIOPUT_VSCREENINFO error\n");
return -1;
}
return 0;
}
*/

16
w3mimg/fb/fb.h Normal file
View File

@@ -0,0 +1,16 @@
#ifndef fb_header
#define fb_header
#include <linux/fb.h>
int fb_open(void);
void fb_close(void);
void fb_pset(int x, int y, int r, int g, int b);
void fb_clear(void);
int fb_width(void);
int fb_height(void);
void fb_cmap_disp(void);
void fb_fscrn_disp(void);
void fb_vscrn_disp(void);
int fb_get_color(int x, int y, int *r, int *g, int *b);
#endif

128
w3mimg/fb/fb_gdkpixbuf.c Normal file
View File

@@ -0,0 +1,128 @@
/**************************************************************************
fb_gdkpixbuf.c 0.2 Copyright (C) 2002, hito
**************************************************************************/
#include "fb.h"
#include "fb_img.h"
static void set_prm(IMAGE *img);
IMAGE *fb_load_image(char *filename, int w, int h)
{
GdkPixbuf *pixbuf;
IMAGE *img;
if(filename == NULL)
return NULL;
img = malloc(sizeof(*img));
if(img == NULL)
return NULL;
pixbuf = gdk_pixbuf_new_from_file(filename);
if(pixbuf == NULL){
free(img);
return NULL;
}
img->pixbuf = pixbuf;
set_prm(img);
fb_resize_image(img, w, h);
return img;
}
int fb_draw_image(IMAGE *img, int x, int y, int sx, int sy, int width, int height)
{
int i, j, r, g, b, offset, bpp;
if(img == NULL)
return 1;
bpp = img->rowstride / img->width;
for(j = sy; j < sy + height && j < img->height; j++){
offset = j * img->rowstride + bpp * sx;
for(i = sx; i < sx + width && i < img->width; i++, offset += bpp){
r = img->pixels[offset];
g = img->pixels[offset + 1];
b = img->pixels[offset + 2];
if(img->alpha && img->pixels[offset + 3] == 0)
fb_pset(i + x - sx, j + y - sy, bg_r, bg_g, bg_b);
else
fb_pset(i + x - sx, j + y - sy, r, g, b);
}
}
return 0;
}
int fb_resize_image(IMAGE *img, int width, int height)
{
GdkPixbuf *pixbuf;
if(width < 1 || height < 1 || img == NULL)
return 1;
if(width == img->width && height == img->height)
return 0;
pixbuf = gdk_pixbuf_scale_simple(img->pixbuf, width, height, GDK_INTERP_HYPER);
if(pixbuf == NULL)
return 1;
gdk_pixbuf_finalize(img->pixbuf);
img->pixbuf = pixbuf;
set_prm(img);
return 0;
}
void fb_free_image(IMAGE *img)
{
if(img == NULL)
return;
gdk_pixbuf_finalize(img->pixbuf);
free(img);
}
IMAGE *fb_dup_image(IMAGE *img)
{
GdkPixbuf *pixbuf;
IMAGE *new_img;
if(img == NULL)
return NULL;
new_img = malloc(sizeof(*img));
if(new_img == NULL)
return NULL;
pixbuf = gdk_pixbuf_copy(img->pixbuf);
if(pixbuf == NULL){
free(new_img);
return NULL;
}
new_img->pixbuf = pixbuf;
set_prm(new_img);
return new_img;
}
int fb_rotate_image(IMAGE *img, int angle)
{
return 1;
}
static void set_prm(IMAGE *img)
{
GdkPixbuf *pixbuf;
if(img == NULL)
return;
pixbuf = img->pixbuf;
img->pixels = gdk_pixbuf_get_pixels(pixbuf);
img->width = gdk_pixbuf_get_width(pixbuf);
img->height = gdk_pixbuf_get_height(pixbuf);
img->alpha = gdk_pixbuf_get_has_alpha(pixbuf);
img->rowstride = gdk_pixbuf_get_rowstride(pixbuf);
}

15
w3mimg/fb/fb_gdkpixbuf.h Normal file
View File

@@ -0,0 +1,15 @@
#ifndef fb_gdkpixbuf_header
#define fb_gdkpixbuf_header
#include <gdk-pixbuf/gdk-pixbuf.h>
typedef struct {
int width;
int height;
int rowstride;
int alpha;
GdkPixbuf *pixbuf;
guchar *pixels;
} IMAGE;
#endif

29
w3mimg/fb/fb_img.c Normal file
View File

@@ -0,0 +1,29 @@
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include "config.h"
#include "fb.h"
#include "fb_img.h"
static int bg_r = 0, bg_g = 0, bg_b = 0;
#if defined(USE_IMLIB2)
#include "w3mimg/fb/fb_imlib2.c"
#elif defined(USE_GDKPIXBUF)
#include "w3mimg/fb/fb_gdkpixbuf.c"
#else
#error no Imlib2 and GdkPixbuf support
#endif
int fb_draw_image_simple(IMAGE *img, int x, int y)
{
return fb_draw_image(img, x, y, 0, 0, img->width, img->height);
}
void fb_set_bg(int r, int g, int b)
{
bg_r = r;
bg_g = g;
bg_b = b;
}

22
w3mimg/fb/fb_img.h Normal file
View File

@@ -0,0 +1,22 @@
#ifndef fb_img_header
#define fb_img_header
#include "config.h"
#if defined(USE_IMLIB2)
#include "w3mimg/fb/fb_imlib2.h"
#elif defined(USE_GDKPIXBUF)
#include "w3mimg/fb/fb_gdkpixbuf.h"
#else
#error no Imlib2 and GdkPixbuf support
#endif
IMAGE *fb_load_image(char *filename, int w, int h);
int fb_draw_image(IMAGE *img, int x, int y, int sx, int sy, int width, int height);
int fb_draw_image_simple(IMAGE *img, int x, int y);
int fb_resize_image(IMAGE *img, int width, int height);
void fb_free_image(IMAGE *img);
void fb_set_bg(int r, int g, int b);
IMAGE *fb_dup_image(IMAGE *img);
int fb_rotate_image(IMAGE *img, int angle);
#endif

150
w3mimg/fb/fb_imlib2.c Normal file
View File

@@ -0,0 +1,150 @@
/**************************************************************************
fb_imlib2.c 0.2 Copyright (C) 2002, hito
**************************************************************************/
#include "fb.h"
#include "fb_img.h"
static void set_prm(IMAGE *img);
IMAGE *fb_load_image(char *filename, int w, int h)
{
Imlib_Image image;
IMAGE *img;
if(filename == NULL)
return NULL;
img = malloc(sizeof(*img));
if(img == NULL)
return NULL;
image = imlib_load_image(filename);
if(image == NULL){
free(img);
return NULL;
}
imlib_context_set_image(image);
img->image = image;
set_prm(img);
fb_resize_image(img, w, h);
return img;
}
int fb_draw_image(IMAGE *img, int x, int y, int sx, int sy, int width, int height)
{
int i, j, r, g, b, a = 0, offset;
if(img == NULL)
return 1;
for(j = sy; j < sy + height && j < img->height; j++){
offset = j * img->width;
for(i = sx; i < sx + width && i < img->width; i++){
a = (img->data[offset + i] >> 24) & 0x000000ff;
r = (img->data[offset + i] >> 16) & 0x000000ff;
g = (img->data[offset + i] >> 8) & 0x000000ff;
b = (img->data[offset + i] ) & 0x000000ff;
if(a == 0)
fb_pset(i + x - sx, j + y - sy, bg_r, bg_g, bg_b);
else
fb_pset(i + x - sx, j + y - sy, r, g, b);
}
}
return 0;
}
int fb_resize_image(IMAGE *img, int width, int height)
{
Imlib_Image image;
if(width < 1 || height < 1 || img == NULL)
return 1;
if(width == img->width && height == img->height)
return 0;
image = imlib_create_cropped_scaled_image(0, 0, img->width, img->height, width, height);
if(image == NULL)
return 1;
imlib_context_set_image(img->image);
imlib_free_image();
img->image = image;
set_prm(img);
return 0;
}
void fb_free_image(IMAGE *img)
{
if(img == NULL)
return;
imlib_context_set_image(img->image);
imlib_free_image();
free(img);
}
IMAGE *fb_dup_image(IMAGE *img)
{
Imlib_Image image;
IMAGE *new_img;
if(img == NULL)
return NULL;
new_img = malloc(sizeof(*img));
if(new_img == NULL)
return NULL;
imlib_context_set_image(img->image);
image = imlib_clone_image();
if(image == NULL){
free(new_img);
return NULL;
}
new_img->image = image;
set_prm(new_img);
return new_img;
}
int fb_rotate_image(IMAGE *img, int angle)
{
int orientation;
if(img == NULL)
return 1;
imlib_context_set_image(img->image);
if(angle == 90){
orientation = 1;
}else if(angle == -90){
orientation = 3;
}else{
return 1;
}
imlib_image_orientate(orientation);
set_prm(img);
return 0;
}
static void set_prm(IMAGE *img)
{
if(img == NULL)
return;
imlib_context_set_image(img->image);
img->data = imlib_image_get_data_for_reading_only();
img->width = imlib_image_get_width();
img->height = imlib_image_get_height();
}

14
w3mimg/fb/fb_imlib2.h Normal file
View File

@@ -0,0 +1,14 @@
#ifndef fb_imlib2_header
#define fb_imlib2_header
#include <X11/Xlib.h>
#include <Imlib2.h>
typedef struct {
int width;
int height;
Imlib_Image image;
DATA32 *data;
} IMAGE;
#endif

133
w3mimg/fb/fb_w3mimg.c Normal file
View File

@@ -0,0 +1,133 @@
/* $Id: fb_w3mimg.c,v 1.1 2002/07/17 20:58:48 ukai Exp $ */
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include "w3mimg/fb/fb.h"
#include "w3mimg/fb/fb_img.h"
#include "w3mimg/w3mimg.h"
static int
w3mfb_init(w3mimg_op *self)
{
if (self == NULL)
return 0;
return 1;
}
static int
w3mfb_finish(w3mimg_op *self)
{
if (self == NULL)
return 0;
return 1;
}
static int
w3mfb_active(w3mimg_op *self)
{
if (self == NULL)
return 0;
return 1;
}
static void
w3mfb_set_background(w3mimg_op *self, char *background)
{
if (self == NULL)
return;
if (background) {
int r, g, b;
if (sscanf(background, "#%02x%02x%02x", &r, &g, &b) == 3)
fb_set_bg(r, g, b);
}
}
static void
w3mfb_sync(w3mimg_op *self)
{
return;
}
static void
w3mfb_close(w3mimg_op *self)
{
fb_close();
}
static int
w3mfb_load_image(w3mimg_op *self, W3MImage *img, char *fname, int w, int h)
{
IMAGE *im;
if (self == NULL)
return 0;
im = fb_load_image(fname, w, h);
if (!im)
return 0;
img->pixmap = im;
img->width = im->width;
img->height = im->height;
return 1;
}
static int
w3mfb_show_image(w3mimg_op *self, W3MImage *img, int sx, int sy,
int sw, int sh,
int x, int y)
{
if (self == NULL)
return 0;
fb_draw_image((IMAGE *)img->pixmap,
x + self->offset_x, y + self->offset_y,
sx, sy,
(sw ? sw : img->width),
(sh ? sh : img->height));
return 1;
}
static void
w3mfb_free_image(w3mimg_op *self, W3MImage *img)
{
if (self == NULL)
return;
if (img && img->pixmap) {
fb_free_image((IMAGE *)img->pixmap);
img->pixmap = NULL;
img->width = 0;
img->height = 0;
}
}
w3mimg_op *
w3mimg_fbopen()
{
w3mimg_op *wop = NULL;
wop = (w3mimg_op *)malloc(sizeof(w3mimg_op));
if (wop == NULL)
return NULL;
memset(wop, 0, sizeof(w3mimg_op));
if (fb_open())
goto error;
wop->width = fb_width();
wop->height = fb_height();
wop->init = w3mfb_init;
wop->finish = w3mfb_finish;
wop->active = w3mfb_active;
wop->set_background = w3mfb_set_background;
wop->sync = w3mfb_sync;
wop->close = w3mfb_close;
wop->load_image = w3mfb_load_image;
wop->show_image = w3mfb_show_image;
wop->free_image = w3mfb_free_image;
return wop;
error:
free(wop);
return NULL;
}

26
w3mimg/fb/license.txt Normal file
View File

@@ -0,0 +1,26 @@
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
3. The name of the author may not be used to endorse or promote
products derived from this software without specific prior written
permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

69
w3mimg/fb/readme.txt Normal file
View File

@@ -0,0 +1,69 @@
Source: http://homepage3.nifty.com/slokar/fb/
original readme.txt
<EFBFBD><EFBFBD><EFBFBD>󶡤<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<20><>w3mimgdisplayfb w3mimgdisplay (<28>ۤ<EFBFBD>)<29>ߴ<EFBFBD><DFB4><EFBFBD> framebuffer <20>Ѳ<EFBFBD><D1B2><EFBFBD><EFBFBD>ӥ塼<D3A5><E5A1BC>
<20><>w3mimgsizefb w3mimgsize <20>ߴ<EFBFBD><DFB4>β<EFBFBD><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ץ<EFBFBD><D7A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>ɬ<EFBFBD>פʤ<EFBFBD><EFBFBD><EFBFBD>
<20><>GdkPixbuf or Imlib2
<20><>TRUE-COLOR <20><> framebuffer <20><><EFBFBD><EFBFBD><EFBFBD>ѤǤ<D1A4><C7A4><EFBFBD><EFBFBD>Ķ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѥ<EFBFBD><EFBFBD><EFBFBD>
<20><>Makefile <20><> CFLAGS, LDFLAGS <20><> Imlib2, GdkPixbuf <20>Τɤ<CEA4><C9A4><EFBFBD><E9A4AB><EFBFBD>Ѥ<EFBFBD><D1A4><EFBFBD>
<20><><EFBFBD><EFBFBD>ͭ<EFBFBD><CDAD><EFBFBD>ˤ<EFBFBD><CBA4>Ƥ<EFBFBD><C6A4><EFBFBD> make <20><><EFBFBD>Ƥ<EFBFBD><C6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ
<20><>w3mimgdisplay, w3mimgsize <20><>Ʊ<EFBFBD><C6B1>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<20><>framebuffer <20><> 15,16,24,32bpp PACKED-PIXELS TRUE-COLOR
<20>ˤ<EFBFBD><CBA4><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD>Ƥ<EFBFBD><C6A4>ޤ<EFBFBD><DEA4><EFBFBD><EFBFBD><EFBFBD>
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> w3mimgdisplayfb <20><> -bg <20><><EFBFBD>ץ<EFBFBD><D7A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѥ<EFBFBD><D1A4>ʤ<EFBFBD><CAA4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>طʿ<D8B7><CABF>Ϲ<EFBFBD>
(#000000)<29>Ȳ<EFBFBD><C8B2><EFBFBD>Ƥ<EFBFBD><C6A4>ޤ<EFBFBD><DEA4><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȯ<EFBFBD>Ķ<EFBFBD>
<20><> w3m version w3m/0.3+cvs-1.353-m17n-20020316
<20><> linux 2.4.18 (Vine Linux 2.5)
<20><> gcc 2.95.3
<20><> GdkPixbuf 0.16.0
<20><> Imlib2 1.0.6
<20><> $ dmesg |grep vesafb
vesafb: framebuffer at 0xe2000000, mapped to 0xc880d000, size 8192k
vesafb: mode is 1024x768x16, linelength=2048, pages=4
vesafb: protected mode interface info at c000:4785
vesafb: scrolling: redraw
vesafb: directcolor: size=0:5:6:5, shift=0:11:5:0
<20><> <20>ӥǥ<D3A5><C7A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
VGA compatible controller: ATI Technologies Inc 3D Rage Pro AGP 1X/2X (rev 92).
Master Capable. Latency=64. Min Gnt=8.
Non-prefetchable 32 bit memory at 0xe2000000 [0xe2ffffff].
I/O at 0xd800 [0xd8ff].
Non-prefetchable 32 bit memory at 0xe1800000 [0xe1800fff].
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¾
<20><>w3mimgsizefb, w3mimgdisplayfb <20>Ϻ<EFBFBD><CFBA>ܹ<EFBFBD>§<EFBFBD><C2A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> w3mimgsize,
w3mimgdisplay <20><><EFBFBD><EFBFBD><EFBFBD>Ȥˤ<C8A4><CBA4>Ƥ<EFBFBD><C6A4>ޤ<EFBFBD>(<28>Ȥ<EFBFBD><C8A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۤȤ<DBA4><C8A4>ɤ<EFBFBD><C9A4>ΤޤޤǤ<DEA4>)<29><>
<20><>framebuffer <20><><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7>Υ<EFBFBD><CEA5><EFBFBD><EFBFBD>ɤϡ<C9A4><CFA1><EFBFBD><EFBFBD>ޤ<EFBFBD><DEA4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󤸤<EFBFBD><F3A4B8A4><EFBFBD><EFBFBD>Υ<EFBFBD><CEA5><EFBFBD><EFBFBD>ץ<EFBFBD><D7A5>ץ<EFBFBD><D7A5><EFBFBD>
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȥˤ<C8A4><CBA4>Ƥ<EFBFBD><C6A4>ޤ<EFBFBD>(<28>Ȥ<EFBFBD><C8A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۤȤ<DBA4><C8A4>ɤ<EFBFBD><C9A4>ΤޤޤǤ<DEA4>)<29><>
<20><><EFBFBD>ޤ<EFBFBD><DEA4><EFBFBD>ȯ<EFBFBD>Ӿ<EFBFBD><D3BE>Ǥ<EFBFBD><C7A4>ꡢư<EAA1A2><C6B0><EFBFBD><EFBFBD>ǧ<EFBFBD><C7A7><EFBFBD>Խ<EFBFBD>ʬ<EFBFBD>Ǥ<EFBFBD><C7A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѥ<EFBFBD><D1A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݤϤ<DDA4><CFA4><EFBFBD><EFBFBD>Ȥ<EFBFBD><C8A4><EFBFBD>Ǥ
<20>Ǥ<EFBFBD><C7A4><EFBFBD><EAA4A4><EFBFBD>ޤ<EFBFBD><DEA4><EFBFBD>
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʪ<EFBFBD>˴ޤޤ<DEA4><DEA4><EFBFBD><EBA5B3><EFBFBD>ɤ<EFBFBD><C9A4>ѹ<EFBFBD><D1B9>Ѥ<EFBFBD> BSD <20><EFBFBD><E9A5A4><EFBFBD>󥹤˽<F3A5B9A4><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΤȤ<CEA4><C8A4><EFBFBD>
<20><><EFBFBD><EFBFBD><EFBFBD>ܺ٤<DCBA> license.txt <20>򻲾Ȥ<F2BBB2BE><C8A4>Ƥ<EFBFBD><C6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ URI
<20><> W3M Homepage http://w3m.sourceforge.net/
<20><> w3m-img http://www2u.biglobe.ne.jp/~hsaka/w3m/index-ja.html
<20><> Linux Kernel Hack Japan http://www.sainet.or.jp/~yamasaki/
<20><> Imlib2 http://www.enlightenment.org/pages/main.html
<20><> GdkPixbuf http://developer.gnome.org/arch/imaging/gdkpixbuf.html
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<20><>2002/07/05 <20><>ȯ<EFBFBD><C8AF><EFBFBD><EFBFBD>
<20><>2002/07/07 ImageMagick <20><>ư<EFBFBD><C6B0><EFBFBD><EFBFBD>ǧ
<20><>2002/07/10 GdkPixbuf <20><>ư<EFBFBD><C6B0><EFBFBD><EFBFBD>ǧ
<20><>2002/07/11 Imlib2 <20><>ư<EFBFBD><C6B0><EFBFBD><EFBFBD>ǧ
<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ZXB01226@nifty.com
http://homepage3.nifty.com/slokar/