/* howcome 11/10/94 */ #include #include #include #include #include #include #include "HTUtils.h" /* WWW general purpose macros */ #include "tcp.h" #include "HTList.h" #include "HTAccess.h" #include "www.h" extern int debug; /*extern Doc *CurrentDoc;*/ extern char * CacheDir; extern char * Editor; extern char * Icon; /* #define ICON_URL "http://info.cern.ch/hypertext/WWW/Icons/Experimental/w3o1.gif"*/ #define ICON_URL "file://w3o1.gif" extern Display *display; extern int screen; extern int sbar_width; extern unsigned int win_width, win_height; extern int statusHeight; extern int ToolBarHeight; extern int depth; extern Pixmap icon_pixmap; Image *image = NULL; extern Window win; GC icon_gc; extern GC gc_fill, toolbar_gc; extern unsigned long windowColor; #define HARD_ICON_LENGTH 524 #define HARD_ICON_64 "R0lGODlhMgAjAIQAAP///92amvYiF+AGEHkDCIf3opuRimZmr3pxdlli0jUqrhi/cwljBoiRwzUwkTQzacKleICR5Dkl04WFhQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAyACMAAAX+ICCOZGmeaKqubOu+ZiDPcK0GQp4PBGH/I5ygR9ANgT+cTyQ8ImHCJaApfbp6JKoVKNNVt6xZ0wlujXPfMotYRKt/bfL7pX0V7viCKa8v8bUGBwcICQqGJwULiooMe4uNQQCJjEIDBggNBpqFDoYKjo9+i4xMQ5MLDDoICJqaDZ6woqOQIqekUZMMQqutmgewhp0ktqjDo8VNuTkPDggQzwYNEQkSwIe1x7TEpEWnqQTMzs8NEgnmChLpnsah2MfFAATePswKB60N0gmZrq+f7u22wfMm4kE9QwgEJYjArxcCByOINRJIiiAAgw46eUpXrpemh+wqMno3kVRBZhqKDXHc5xHBP4DFckmaNRPeRZSwViZoCTHiu1AUbWLMaM2QIAMQDCjoCZNmTZIkhqa0du/ZUlnZfEIdYRDlVGDODmTE+kjbT1oncRZVEJapVqdNbXKVuhbTWFDt3pos0TXj16W/3Ibc2xRtVKl+/YJEYcvwU7kmuvadvIKBZct7LmNeMUGywQlz3oQAADs= " /* Copyright (c) 1991 Bell Communications Research, Inc. (Bellcore) */ #if defined __QNX__ || (defined(sco) && !defined(sco_os5)) || defined(__NetBSD__) #define index strchr #else extern char *index(); #endif static char basis_64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /* janet: not used static char index_64[128] = { -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63, 52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1,-1,-1,-1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14, 15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1, -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40, 41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1 }; */ /* #define char64(char c) (((c) < 0 || (c) > 127) ? -1 : index_64[(c)]) */ int char64(char c) { char *s = (char *) index(basis_64, c); if (s) return(s - basis_64); return(-1); } void SetIconWin(Window aWin) { win = aWin; } void SetIconGC(GC aGC) { icon_gc = aGC; } void LoadIcon () { int i,ii; Block block; unsigned int width, height; GC drawGC; Pixmap pixmap; XImage *ximage; char *data; HTAnchor *a = NULL; Doc *d = NULL; if (Icon) { block.next = 0; /* fprintf(stderr,"LoadIcon sorry, cusomized icons temprarily disabled..\n");*/ a = libGetDocument(Icon, strlen(Icon), NULL, FALSE, TRUE, FALSE, FALSE, TRUE); } if (a && a->parent && a->parent->document) { d = (Doc *)a->parent->document; } if (d && d->content_buffer) { block.buffer = d->content_buffer; block.size = d->loaded_length; block.next = 0; } else { int c1, c2, c3, c4; char *b; char *buf; b = HARD_ICON_64; buf = (char *)malloc(HARD_ICON_LENGTH + 10); for (i=0, ii=0; i<176; i++) { /* janet 28/07/95: something's wrong here, */ c1 = char64(*b++); /* probably 177 should be 176(?), because then it loops 177 times */ c2 = char64(*b++); /* either that or *b is too short */ c3 = char64(*b++); c4 = char64(*b++); buf[ii++] = ((c1<<2) | ((c2&0x30)>>4)); buf[ii++] = (((c2&0XF) << 4) | ((c3&0x3C) >> 2)); buf[ii++] = (((c3&0x03) <<6) | c4); } block.buffer = buf; block.next = 0; block.size = 524; /* size of gif file */ } if (!block.buffer){ image = NULL; return; } image = (Image *)malloc(sizeof(Image)); image->url = NULL; image->npixels = 0; data = (char *)LoadGifImage(image, &block, depth); Free(block.buffer); width = image->width; height = image->height; if ((ximage = XCreateImage(display, DefaultVisual(display, screen), depth, ZPixmap, 0, data, width, height, (depth == 24 ? 32 : (depth == 16) ? 16 : 8), 0)) == 0) { fprintf(stderr,"LoadIcon: Failed to create image\n"); Free(data); Free(image); image = NULL; } /* howcome 22/2/95: do we need to set these?? */ ximage->byte_order = MSBFirst; ximage->bitmap_bit_order = BitmapBitOrder(display); if ((pixmap = XCreatePixmap(display, win, width, height, depth)) == 0) { fprintf(stderr,"LoadIcon: Failed to create pixmap\n"); Free(data); Free(image); image = NULL; XDestroyImage(ximage); } drawGC = XCreateGC(display, pixmap, 0, 0); XSetFunction(display, drawGC, GXcopy); XPutImage(display, pixmap, drawGC, ximage, 0, 0, 0, 0, width, height); XFreeGC(display, drawGC); XDestroyImage(ximage); image->pixmap = pixmap; image->width = width; image->height = height; image->next = NULL; icon_pixmap = pixmap; } void DisplayIcon () { XRectangle rect; int x, y; unsigned int w, h; if (!image) LoadIcon(); rect.x = x = win_width - ICON_WIDTH; rect.y = y = 0; rect.width = w = ICON_WIDTH; rect.height = h = ICON_HEIGHT; /* XSetClipRectangles(display, icon_gc, 0, 0, &rect, 1, Unsorted);*/ /* XSetClipRectangles(display, gc_fill, 0, 0, &rect, 1, Unsorted);*/ XSetForeground(display, toolbar_gc, windowColor); XSetClipRectangles(display, toolbar_gc, 0, 0, &rect, 1, Unsorted); XFillRectangle(display, win, toolbar_gc, x + 2, y + 2, ICON_WIDTH - 4, ICON_HEIGHT - 4); if (image) { XCopyArea(display, image->pixmap, win, icon_gc, 0, 0, image->width, image->height, x + (ICON_WIDTH - image->width) / 2, y + (ICON_HEIGHT - image->height) / 2); } DrawOutSet(win, icon_gc, x, y, w, h); }