allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc) (09/24/89)
Posting-number: Volume 8, Issue 59 Submitted-by: net@tub.UUCP (Oliver Laumann) Archive-name: elk/part11 [Let this be a lesson to submitters: this was submitted as uuencoded, compressed files. I lost the source information while unpacking it; this is the best approximation I could come up with. ++bsa] #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 11 (of 14)." # Contents: lib/xlib/type.c lib/xlib/error.c lib/xlib/text.c # lib/xlib/font.c lib/xlib/pixmap.c lib/xlib/objects.c # lib/xlib/colormap.c lib/xlib/cursor.c lib/xlib/key.c # lib/xaw/label.d # Wrapped by net@tub on Sun Sep 17 17:32:36 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f lib/xlib/type.c -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"lib/xlib/type.c\" else echo shar: Extracting \"lib/xlib/type.c\" \(26200 characters\) sed "s/^X//" >lib/xlib/type.c <<'END_OF_lib/xlib/type.c' X#include "xlib.h" X Xstatic Object Set_Attr_Slots; Xstatic Object Conf_Slots; Xstatic Object GC_Slots; Xstatic Object Geometry_Slots; Xstatic Object Win_Attr_Slots; Xstatic Object Font_Info_Slots; Xstatic Object Char_Info_Slots; Xstatic Object Wm_Hints_Slots; Xstatic Object Size_Hints_Slots; Xstatic Object Icon_Size_Slots; X XXSetWindowAttributes SWA; XRECORD Set_Attr_Rec[] = { X { (char *)&SWA.background_pixmap, "background-pixmap", T_PIXMAP, X 0, CWBackPixmap }, X { (char *)&SWA.background_pixel, "background-pixel", T_PIXEL, X 0, CWBackPixel }, X { (char *)&SWA.border_pixmap, "border-pixmap", T_PIXMAP, X 0, CWBorderPixmap }, X { (char *)&SWA.border_pixel, "border-pixel", T_PIXEL, X 0, CWBorderPixel }, X { (char *)&SWA.bit_gravity, "bit-gravity", T_SYM, X Bit_Grav_Syms, CWBitGravity }, X { (char *)&SWA.win_gravity, "gravity", T_SYM, X Grav_Syms, CWWinGravity }, X { (char *)&SWA.backing_store, "backing-store", T_SYM, X Backing_Store_Syms, CWBackingStore }, X { (char *)&SWA.backing_planes, "backing-planes", T_PIXEL, X 0, CWBackingPlanes }, X { (char *)&SWA.backing_pixel, "backing-pixel", T_PIXEL, X 0, CWBackingPixel }, X { (char *)&SWA.save_under, "save-under", T_BOOL, X 0, CWSaveUnder }, X { (char *)&SWA.event_mask, "event-mask", T_MASK, X Event_Syms, CWEventMask }, X { (char *)&SWA.do_not_propagate_mask, "do-not-propagate-mask", T_MASK, X Event_Syms, CWDontPropagate }, X { (char *)&SWA.override_redirect, "override-redirect", T_BOOL, X 0, CWOverrideRedirect }, X { (char *)&SWA.colormap, "colormap", T_COLORMAP, X 0, CWColormap }, X { (char *)&SWA.cursor, "cursor", T_CURSOR, X 0, CWCursor }, X { 0, 0, T_NONE, 0, 0 } X}; Xint Set_Attr_Size = sizeof Set_Attr_Rec / sizeof (RECORD); X XXWindowChanges WC; XRECORD Conf_Rec[] = { X { (char *)&WC.x, "x", T_INT, 0, CWX }, X { (char *)&WC.y, "y", T_INT, 0, CWY }, X { (char *)&WC.width, "width", T_INT, 0, CWWidth }, X { (char *)&WC.height, "height", T_INT, 0, CWHeight }, X { (char *)&WC.border_width, "border-width", T_INT, 0, CWBorderWidth }, X { (char *)&WC.sibling, "sibling", T_WINDOW, 0, CWSibling }, X { (char *)&WC.stack_mode, "stack-mode", T_SYM, Stack_Mode_Syms, X CWStackMode }, X { 0, 0, T_NONE, 0, 0 } X}; Xint Conf_Size = sizeof Conf_Rec / sizeof (RECORD); X XXGCValues GCV; XRECORD GC_Rec[] = { X { (char *)&GCV.function, "function", T_SYM, X Func_Syms, GCFunction }, X { (char *)&GCV.plane_mask, "plane-mask", T_PIXEL, X 0, GCPlaneMask }, X { (char *)&GCV.foreground, "foreground", T_PIXEL, X 0, GCForeground }, X { (char *)&GCV.background, "background", T_PIXEL, X 0, GCBackground }, X { (char *)&GCV.line_width, "line-width", T_INT, X 0, GCLineWidth }, X { (char *)&GCV.line_style, "line-style", T_SYM, X Line_Style_Syms, GCLineStyle }, X { (char *)&GCV.cap_style, "cap-style", T_SYM, X Cap_Style_Syms, GCCapStyle }, X { (char *)&GCV.join_style, "join-style", T_SYM, X Join_Style_Syms, GCJoinStyle }, X { (char *)&GCV.fill_style, "fill-style", T_SYM, X Fill_Style_Syms, GCFillStyle }, X { (char *)&GCV.fill_rule, "fill-rule", T_SYM, X Fill_Rule_Syms, GCFillRule }, X { (char *)&GCV.arc_mode, "arc-mode", T_SYM, X Arc_Mode_Syms, GCArcMode }, X { (char *)&GCV.tile, "tile", T_PIXMAP, X 0, GCTile }, X { (char *)&GCV.stipple, "stipple", T_PIXMAP, X 0, GCStipple }, X { (char *)&GCV.ts_x_origin, "ts-x", T_INT, X 0, GCTileStipXOrigin }, X { (char *)&GCV.ts_y_origin, "ts-y", T_INT, X 0, GCTileStipYOrigin }, X { (char *)&GCV.font, "font", T_FONT, X 0, GCFont }, X { (char *)&GCV.subwindow_mode, "subwindow-mode", T_SYM, X Subwin_Mode_Syms, GCSubwindowMode }, X { (char *)&GCV.graphics_exposures, "exposures", T_BOOL, X 0, GCGraphicsExposures }, X { (char *)&GCV.clip_x_origin, "clip-x", T_INT, X 0, GCClipXOrigin }, X { (char *)&GCV.clip_y_origin, "clip-y", T_INT, X 0, GCClipYOrigin }, X { (char *)&GCV.clip_mask, "clip-mask", T_PIXMAP, X 0, GCClipMask }, X { (char *)&GCV.dash_offset, "dash-offset", T_INT, X 0, GCDashOffset }, X { (char *)&GCV.dashes, "dashes", T_INT, X 0, GCDashList }, X {0, 0, T_NONE, 0, 0 } X}; Xint GC_Size = sizeof GC_Rec / sizeof (RECORD); X XGEOMETRY GEO; XRECORD Geometry_Rec[] = { X { (char *)&GEO.root, "root", T_WINDOW, 0, 0 }, X { (char *)&GEO.x, "x", T_INT, 0, 0 }, X { (char *)&GEO.y, "y", T_INT, 0, 0 }, X { (char *)&GEO.width, "width", T_INT, 0, 0 }, X { (char *)&GEO.height, "height", T_INT, 0, 0 }, X { (char *)&GEO.border_width, "border-width", T_INT, 0, 0 }, X { (char *)&GEO.depth, "depth", T_INT, 0, 0 }, X {0, 0, T_NONE, 0, 0 } X}; Xint Geometry_Size = sizeof Geometry_Rec / sizeof (RECORD); X XXWindowAttributes WA; XRECORD Win_Attr_Rec[] = { X { (char *)&WA.x, "x", T_INT, X 0, 0 }, X { (char *)&WA.y, "y", T_INT, X 0, 0 }, X { (char *)&WA.width, "width", T_INT, X 0, 0 }, X { (char *)&WA.height, "height", T_INT, X 0, 0 }, X { (char *)&WA.border_width, "border-width", T_INT, X 0, 0 }, X { (char *)&WA.depth, "depth", T_INT, X 0, 0 }, X { (char *)&WA.visual, "visual", T_NONE, X 0, 0 }, X { (char *)&WA.root, "root", T_WINDOW, X 0, 0 }, X { (char *)&WA.class, "class", T_SYM, X Class_Syms, 0 }, X { (char *)&WA.bit_gravity, "bit-gravity", T_SYM, X Bit_Grav_Syms, 0 }, X { (char *)&WA.win_gravity, "gravity", T_SYM, X Grav_Syms, 0 }, X { (char *)&WA.backing_store, "backing-store", T_SYM, X Backing_Store_Syms, 0 }, X { (char *)&WA.backing_planes, "backing-planes", T_PIXEL, X 0, 0 }, X { (char *)&WA.backing_pixel, "backing-pixel", T_PIXEL, X 0, 0 }, X { (char *)&WA.save_under, "save-under", T_BOOL, X 0, 0 }, X { (char *)&WA.colormap , "colormap", T_COLORMAP, X 0, 0 }, X { (char *)&WA.map_installed, "map-installed", T_BOOL, X 0, 0 }, X { (char *)&WA.map_state, "map-state", T_SYM, X Map_State_Syms, 0 }, X { (char *)&WA.all_event_masks, "all-event-masks", T_MASK, X Event_Syms, 0 }, X { (char *)&WA.your_event_mask, "your-event-mask", T_MASK, X Event_Syms, 0 }, X { (char *)&WA.do_not_propagate_mask, "do-not-propagate-mask", T_MASK, X Event_Syms, 0 }, X { (char *)&WA.override_redirect, "override-redirect", T_BOOL, X 0, 0 }, X { (char *)&WA.screen, "screen", T_NONE, X 0, 0 }, X {0, 0, T_NONE, 0, 0 } X}; Xint Win_Attr_Size = sizeof Win_Attr_Rec / sizeof (RECORD); X XXFontStruct FI; XRECORD Font_Info_Rec[] = { X { (char *)&FI.direction, "direction", T_SYM, X Direction_Syms, 0 }, X { (char *)&FI.min_char_or_byte2, "min-byte2", T_INT, X 0, 0 }, X { (char *)&FI.max_char_or_byte2, "max-byte2", T_INT, X 0, 0 }, X { (char *)&FI.min_byte1, "min-byte1", T_INT, X 0, 0 }, X { (char *)&FI.max_byte1, "max-byte1", T_INT, X 0, 0 }, X { (char *)&FI.all_chars_exist, "all-chars-exist?", T_BOOL, X 0, 0 }, X { (char *)&FI.default_char, "default-char", T_INT, X 0, 0 }, X { (char *)&FI.ascent, "ascent", T_INT, X 0, 0 }, X { (char *)&FI.descent, "descent", T_INT, X 0, 0 }, X {0, 0, T_NONE, 0, 0 } X}; Xint Font_Info_Size = sizeof Font_Info_Rec / sizeof (RECORD); X XXCharStruct CI; XRECORD Char_Info_Rec[] = { X { (char *)&CI.lbearing, "lbearing", T_SHORT, 0, 0 }, X { (char *)&CI.rbearing, "rbearing", T_SHORT, 0, 0 }, X { (char *)&CI.width, "width", T_SHORT, 0, 0 }, X { (char *)&CI.ascent, "ascent", T_SHORT, 0, 0 }, X { (char *)&CI.descent, "descent", T_SHORT, 0, 0 }, X { (char *)&CI.attributes, "attributes", T_SHORT, 0, 0 }, X {0, 0, T_NONE, 0, 0 } X}; Xint Char_Info_Size = sizeof Char_Info_Rec / sizeof (RECORD); X XXWMHints WMH; XRECORD Wm_Hints_Rec[] = { X { (char *)&WMH.input, "input?", T_BOOL, X 0, InputHint }, X { (char *)&WMH.initial_state, "initial-state", T_SYM, X Initial_State_Syms, StateHint }, X { (char *)&WMH.icon_pixmap, "icon-pixmap", T_PIXMAP, X 0, IconPixmapHint }, X { (char *)&WMH.icon_window, "icon-window", T_WINDOW, X 0, IconWindowHint }, X { (char *)&WMH.icon_x, "icon-x", T_INT, X 0, IconPositionHint }, X { (char *)&WMH.icon_y, "icon-y", T_INT, X 0, IconPositionHint }, X { (char *)&WMH.icon_mask, "icon-mask", T_PIXMAP, X 0, IconMaskHint }, X { (char *)&WMH.window_group, "window-group", T_WINDOW, X 0, WindowGroupHint }, X {0, 0, T_NONE, 0, 0 } X}; Xint Wm_Hints_Size = sizeof Wm_Hints_Rec / sizeof (RECORD); X XXSizeHints SZH; XRECORD Size_Hints_Rec[] = { X { (char *)&SZH.x, "x", T_INT, 0, USPosition }, X { (char *)&SZH.y, "y", T_INT, 0, USPosition }, X { (char *)&SZH.width, "width", T_INT, 0, USSize }, X { (char *)&SZH.height, "height", T_INT, 0, USSize }, X { (char *)&SZH.x, "x", T_INT, 0, PPosition }, X { (char *)&SZH.y, "y", T_INT, 0, PPosition }, X { (char *)&SZH.width, "width", T_INT, 0, PSize }, X { (char *)&SZH.height, "height", T_INT, 0, PSize }, X { (char *)&SZH.min_width, "min-width", T_INT, 0, PMinSize }, X { (char *)&SZH.min_height, "min-height", T_INT, 0, PMinSize }, X { (char *)&SZH.max_width, "max-width", T_INT, 0, PMaxSize }, X { (char *)&SZH.max_height, "max-height", T_INT, 0, PMaxSize }, X { (char *)&SZH.width_inc, "width-inc", T_INT, 0, PResizeInc }, X { (char *)&SZH.height_inc, "height-inc", T_INT, 0, PResizeInc }, X { (char *)&SZH.min_aspect.x, "min-aspect-x", T_INT, 0, PAspect }, X { (char *)&SZH.min_aspect.y, "min-aspect-y", T_INT, 0, PAspect }, X { (char *)&SZH.max_aspect.x, "max-aspect-x", T_INT, 0, PAspect }, X { (char *)&SZH.max_aspect.y, "max-aspect-y", T_INT, 0, PAspect }, X {0, 0, T_NONE, 0, 0 } X}; Xint Size_Hints_Size = sizeof Size_Hints_Rec / sizeof (RECORD); X XXIconSize ISZ; XRECORD Icon_Size_Rec[] = { X { (char *)&ISZ.min_width, "min-width", T_INT, 0, 0 }, X { (char *)&ISZ.min_height, "min-height", T_INT, 0, 0 }, X { (char *)&ISZ.max_width, "max-width", T_INT, 0, 0 }, X { (char *)&ISZ.max_height, "max-height", T_INT, 0, 0 }, X { (char *)&ISZ.width_inc, "width-inc", T_INT, 0, 0 }, X { (char *)&ISZ.height_inc, "height-inc", T_INT, 0, 0 }, X {0, 0, T_NONE, 0, 0 } X}; Xint Icon_Size_Size = sizeof Icon_Size_Rec / sizeof (RECORD); X Xunsigned long Vector_To_Record (v, len, sym, rp) Object v, sym; X register RECORD *rp; { X register Object *p; X unsigned long mask = 0; X X Check_Type (v, T_Vector); X p = VECTOR(v)->data; X if (VECTOR(v)->size != len && !EQ(p[0], sym)) X Primitive_Error ("invalid argument"); X for ( ; rp->slot; rp++) { X ++p; X if (rp->type == T_NONE || Nullp (*p)) X continue; X switch (rp->type) { X case T_INT: X *(int *)rp->slot = Get_Integer (*p); break; X case T_SHORT: X *(short *)rp->slot = Get_Integer (*p); break; X case T_LONG: X break; X case T_ULONG: X break; X case T_PIXEL: X *(unsigned long *)rp->slot = Get_Pixel (*p); break; X case T_PIXMAP: X *(Pixmap *)rp->slot = Get_Pixmap (*p); break; X case T_BOOL: X Check_Type (*p, T_Boolean); X *(Bool *)rp->slot = (Bool)(FIXNUM(*p)); X break; X case T_FONT: X *(Font *)rp->slot = Get_Font (*p); X break; X case T_COLORMAP: X *(Colormap *)rp->slot = Get_Colormap (*p); break; X case T_CURSOR: X *(Cursor *)rp->slot = Get_Cursor (*p); X break; X case T_WINDOW: X break; X case T_MASK: X *(unsigned long *)rp->slot = Symbols_To_Bits (*p, 1, rp->syms); X break; X case T_SYM: X *(unsigned long *)rp->slot = Symbols_To_Bits (*p, 0, rp->syms); X break; X } X mask |= rp->mask; X } X return mask; X} X XObject Record_To_Vector (rp, len, sym, dpy, flags) Object sym; X register RECORD *rp; Display *dpy; unsigned long flags; { X register i; X Object v, x; X GC_Node2; X X v = Null; X GC_Link2 (sym, v); X v = Make_Vector (len, Null); X VECTOR(v)->data[0] = sym; X for (i = 1; rp->slot; i++, rp++) { X if (rp->type == T_NONE) X continue; X if (rp->mask && !(flags & rp->mask)) X continue; X x = Null; X switch (rp->type) { X case T_INT: X x = Make_Fixnum (*(int *)rp->slot); break; X case T_SHORT: X x = Make_Fixnum (*(short *)rp->slot); break; X case T_LONG: X break; X case T_ULONG: X break; X case T_PIXEL: X x = Make_Pixel (*(unsigned long *)rp->slot); break; X case T_PIXMAP: X break; X case T_BOOL: X x = *(Bool *)rp->slot ? True : False; break; X case T_COLORMAP: X x = Make_Colormap (0, dpy, *(Colormap *)rp->slot); break; X case T_WINDOW: X x = Make_Window (0, dpy, *(Window *)rp->slot); break; X case T_MASK: X x = Bits_To_Symbols (*(unsigned long *)rp->slot, 1, rp->syms); X break; X case T_SYM: X x = Bits_To_Symbols (*(unsigned long *)rp->slot, 0, rp->syms); X break; X } X VECTOR(v)->data[i] = x; X } X GC_Unlink; X return v; X} X XSYMDESCR Func_Syms[] = { X { "clear", GXclear }, X { "and", GXand }, X { "and-reverse", GXandReverse }, X { "copy", GXcopy }, X { "and-inverted", GXandInverted }, X { "no-op", GXnoop }, X { "xor", GXxor }, X { "or", GXor }, X { "nor", GXnor }, X { "equiv", GXequiv }, X { "invert", GXinvert }, X { "or-reverse", GXorReverse }, X { "copy-inverted", GXcopyInverted }, X { "or-inverted", GXorInverted }, X { "nand", GXnand }, X { "set", GXset }, X { 0, 0 } X}; X XSYMDESCR Bit_Grav_Syms[] = { X { "forget", ForgetGravity }, X { "north-west", NorthWestGravity }, X { "north", NorthGravity }, X { "north-east", NorthEastGravity }, X { "west", WestGravity }, X { "center", CenterGravity }, X { "east", EastGravity }, X { "south-west", SouthWestGravity }, X { "south", SouthGravity }, X { "south-east", SouthEastGravity }, X { "static", StaticGravity }, X { 0, 0 } X}; X XSYMDESCR Grav_Syms[] = { X { "unmap", UnmapGravity }, X { "north-west", NorthWestGravity }, X { "north", NorthGravity }, X { "north-east", NorthEastGravity }, X { "west", WestGravity }, X { "center", CenterGravity }, X { "east", EastGravity }, X { "south-west", SouthWestGravity }, X { "south", SouthGravity }, X { "south-east", SouthEastGravity }, X { "static", StaticGravity }, X { 0, 0 } X}; X XSYMDESCR Backing_Store_Syms[] = { X { "not-useful", NotUseful }, X { "when-mapped", WhenMapped }, X { "always", Always }, X { 0, 0 } X}; X XSYMDESCR Stack_Mode_Syms[] = { X { "above", Above }, X { "below", Below }, X { "top-if", TopIf }, X { "bottom-if", BottomIf }, X { "opposite", Opposite }, X { 0, 0 } X}; X XSYMDESCR Line_Style_Syms[] = { X { "solid", LineSolid }, X { "dash", LineOnOffDash }, X { "double-dash", LineDoubleDash }, X { 0, 0 } X}; X XSYMDESCR Cap_Style_Syms[] = { X { "not-last", CapNotLast }, X { "butt", CapButt }, X { "round", CapRound }, X { "projecting", CapProjecting }, X { 0, 0 } X}; X XSYMDESCR Join_Style_Syms[] = { X { "miter", JoinMiter }, X { "round", JoinRound }, X { "bevel", JoinBevel }, X { 0, 0 } X}; X XSYMDESCR Fill_Style_Syms[] = { X { "solid", FillSolid }, X { "tiled", FillTiled }, X { "stippled", FillStippled }, X { "opaque-stippled", FillOpaqueStippled }, X { 0, 0 } X}; X XSYMDESCR Fill_Rule_Syms[] = { X { "even-odd", EvenOddRule }, X { "winding", WindingRule }, X { 0, 0 } X}; X XSYMDESCR Arc_Mode_Syms[] = { X { "chord", ArcChord }, X { "pie-slice", ArcPieSlice }, X { 0, 0 } X}; X XSYMDESCR Subwin_Mode_Syms[] = { X { "clip-by-children", ClipByChildren }, X { "include-inferiors", IncludeInferiors }, X { 0, 0 } X}; X XSYMDESCR Class_Syms[] = { X { "input-output", InputOutput }, X { "input-only", InputOnly }, X { 0, 0 } X}; X XSYMDESCR Map_State_Syms[] = { X { "unmapped", IsUnmapped }, X { "unviewable", IsUnviewable }, X { "viewable", IsViewable }, X { 0, 0 } X}; X XSYMDESCR State_Syms[] = { X { "shift", ShiftMask }, X { "lock", LockMask }, X { "control", ControlMask }, X { "mod1", Mod1Mask }, X { "mod2", Mod2Mask }, X { "mod3", Mod3Mask }, X { "mod4", Mod4Mask }, X { "mod5", Mod5Mask }, X { "button1", Button1Mask }, X { "button2", Button2Mask }, X { "button3", Button3Mask }, X { "button4", Button4Mask }, X { "button5", Button5Mask }, X { "any-modifier", AnyModifier }, X { 0, 0 } X}; X XSYMDESCR Button_Syms[] = { X { "any-button", AnyButton }, X { "button1", Button1 }, X { "button2", Button2 }, X { "button3", Button3 }, X { "button4", Button4 }, X { "button5", Button5 }, X { 0, 0 } X}; X XSYMDESCR Cross_Mode_Syms[] = { X { "normal", NotifyNormal }, X { "grab", NotifyGrab }, X { "ungrab", NotifyUngrab }, X { 0, 0 } X}; X XSYMDESCR Cross_Detail_Syms[] = { X { "ancestor", NotifyAncestor }, X { "virtual", NotifyVirtual }, X { "inferior", NotifyInferior }, X { "nonlinear", NotifyNonlinear }, X { "nonlinear-virtual", NotifyNonlinearVirtual }, X { 0, 0 } X}; X XSYMDESCR Focus_Detail_Syms[] = { X { "ancestor", NotifyAncestor }, X { "virtual", NotifyVirtual }, X { "inferior", NotifyInferior }, X { "nonlinear", NotifyNonlinear }, X { "nonlinear-virtual", NotifyNonlinearVirtual }, X { "pointer", NotifyPointer }, X { "pointer-root", NotifyPointerRoot }, X { "none", NotifyDetailNone }, X { 0, 0 } X}; X XSYMDESCR Visibility_Syms[] = { X { "unobscured", VisibilityUnobscured }, X { "partially-obscured", VisibilityPartiallyObscured }, X { "fully-obscured", VisibilityFullyObscured }, X { 0, 0 } X}; X XSYMDESCR Place_Syms[] = { X { "top", PlaceOnTop }, X { "bottom", PlaceOnBottom }, X { 0, 0 } X}; X XSYMDESCR Prop_Syms[] = { X { "new-value", PropertyNewValue }, X { "deleted", PropertyDelete }, X { 0, 0 } X}; X XSYMDESCR Mapping_Syms[] = { X { "modifier", MappingModifier }, X { "keyboard", MappingKeyboard }, X { "pointer", MappingPointer }, X { 0, 0 } X}; X XSYMDESCR Direction_Syms[] = { X { "left-to-right", FontLeftToRight }, X { "right-to-left", FontRightToLeft }, X { 0, 0 } X}; X XSYMDESCR Polyshape_Syms[] = { X { "complex", Complex }, X { "non-convex", Nonconvex }, X { "convex", Convex }, X { 0, 0 } X}; X XSYMDESCR Propmode_Syms[] = { X { "replace", PropModeReplace }, X { "prepend", PropModePrepend }, X { "append", PropModeAppend }, X { 0, 0 } X}; X XSYMDESCR Grabstatus_Syms[] = { X { "success", Success }, X { "not-viewable", GrabNotViewable }, X { "already-grabbed", AlreadyGrabbed }, X { "frozen", GrabFrozen }, X { "invalid-time", GrabInvalidTime }, X { 0, 0 } X}; X XSYMDESCR Bitmapstatus_Syms[] = { X { "success", BitmapSuccess }, X { "open-failed", BitmapOpenFailed }, X { "file-invalid", BitmapFileInvalid }, X { "no-memory", BitmapNoMemory }, X { 0, 0 } X}; X XSYMDESCR Allow_Events_Syms[] = { X { "async-pointer", AsyncPointer }, X { "sync-pointer", SyncPointer }, X { "replay-pointer", ReplayPointer }, X { "async-keyboard", AsyncKeyboard }, X { "sync-keyboard", SyncKeyboard }, X { "replay-keyboard", ReplayKeyboard }, X { "async-both", AsyncBoth }, X { "sync-both", SyncBoth }, X { 0, 0 } X}; X XSYMDESCR Revert_Syms[] = { X { "none", RevertToNone }, X { "pointer-root", RevertToPointerRoot }, X { "parent", RevertToParent }, X { 0, 0 } X}; X XSYMDESCR Shape_Syms[] = { X { "cursor", CursorShape }, X { "tile", TileShape }, X { "stipple", StippleShape }, X { 0, 0 } X}; X XSYMDESCR Initial_State_Syms[] = { X { "dont-care", DontCareState }, X { "normal", NormalState }, X { "zoom", ZoomState }, X { "iconic", IconicState }, X { "inactive", InactiveState }, X { 0, 0 } X}; X XSYMDESCR Event_Syms[] = { X { "key-press", KeyPressMask }, X { "key-release", KeyReleaseMask }, X { "button-press", ButtonPressMask }, X { "button-release", ButtonReleaseMask }, X { "enter-window", EnterWindowMask }, X { "leave-window", LeaveWindowMask }, X { "pointer-motion", PointerMotionMask }, X { "pointer-motion-hint", PointerMotionHintMask }, X { "button-1-motion", Button1MotionMask }, X { "button-2-motion", Button2MotionMask }, X { "button-3-motion", Button3MotionMask }, X { "button-4-motion", Button4MotionMask }, X { "button-5-motion", Button5MotionMask }, X { "button-motion", ButtonMotionMask }, X { "keymap-state", KeymapStateMask }, X { "exposure", ExposureMask }, X { "visibility-change", VisibilityChangeMask }, X { "structure-notify", StructureNotifyMask }, X { "resize-redirect", ResizeRedirectMask }, X { "substructure-notify", SubstructureNotifyMask }, X { "substructure-redirect", SubstructureRedirectMask }, X { "focus-change", FocusChangeMask }, X { "property-change", PropertyChangeMask }, X { "colormap-change", ColormapChangeMask }, X { "owner-grab-button", OwnerGrabButtonMask }, X { "all-events", ~0 }, X { 0, 0 } X}; X XSYMDESCR Error_Syms[] = { X { "bad-request", BadRequest }, X { "bad-value", BadValue }, X { "bad-window", BadWindow }, X { "bad-pixmap", BadPixmap }, X { "bad-atom", BadAtom }, X { "bad-cursor", BadCursor }, X { "bad-font", BadFont }, X { "bad-match", BadMatch }, X { "bad-drawable", BadDrawable }, X { "bad-access", BadAccess }, X { "bad-alloc", BadAlloc }, X { "bad-color", BadColor }, X { "bad-gcontext", BadGC }, X { "bad-id-choice", BadIDChoice }, X { "bad-name", BadName }, X { "bad-length", BadLength }, X { "bad-implementation", BadImplementation }, X { 0, 0 } X}; X Xstatic Init_Record (rec, size, name, var) RECORD *rec; char *name; X Object *var; { X Object list, tail, cell; X register i; X char buf[128]; X GC_Node2; X X GC_Link2 (list, tail); X for (list = tail = Null, i = 1; i < size; tail = cell, i++, rec++) { X cell = Intern (rec->name); X cell = Cons (cell, Make_Fixnum (i)); X cell = Cons (cell, Null); X if (Nullp (list)) X list = cell; X else X P_Setcdr (tail, cell); X } X sprintf (buf, "%s-slots", name); X Define_Variable (var, buf, list); X GC_Unlink; X} X Xinit_xlib_type () { X Init_Record (Set_Attr_Rec, Set_Attr_Size, "set-window-attributes", X &Set_Attr_Slots); X Init_Record (Conf_Rec, Conf_Size, "window-configuration", &Conf_Slots); X Init_Record (GC_Rec, GC_Size, "gcontext", &GC_Slots); X Init_Record (Geometry_Rec, Geometry_Size, "geometry", &Geometry_Slots); X Init_Record (Win_Attr_Rec, Win_Attr_Size, "get-window-attributes", X &Win_Attr_Slots); X Init_Record (Font_Info_Rec, Font_Info_Size, "font-info", &Font_Info_Slots); X Init_Record (Char_Info_Rec, Char_Info_Size, "char-info", &Char_Info_Slots); X Init_Record (Wm_Hints_Rec, Wm_Hints_Size, "wm-hints", &Wm_Hints_Slots); X Init_Record (Size_Hints_Rec, Size_Hints_Size, "size-hints", X &Size_Hints_Slots); X Init_Record (Icon_Size_Rec, Icon_Size_Size, "icon-size", &Icon_Size_Slots); X} END_OF_lib/xlib/type.c if test 26200 -ne `wc -c <lib/xlib/type.c`; then echo shar: \"lib/xlib/type.c\" unpacked with wrong size! fi # end of overwriting check fi if test -f lib/xlib/error.c -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"lib/xlib/error.c\" else echo shar: Extracting \"lib/xlib/error.c\" \(2477 characters\) sed "s/^X//" >lib/xlib/error.c <<'END_OF_lib/xlib/error.c' X#include "xlib.h" X Xstatic Object V_X_Error_Handler, V_X_Fatal_Error_Handler; X Xextern int _XIOError(); /* Default error handlers of the Xlib */ Xextern int _XDefaultError(); X Xstatic X_Fatal_Error (d) Display *d; { X Object args, fun; X GC_Node; X X Reset_IO (0); X args = Make_Display (0, d); X GC_Link (args); X args = Cons (args, Null); X GC_Unlink; X fun = Val (V_X_Fatal_Error_Handler); X if (TYPE(fun) == T_Compound) X (void)Funcall (fun, args, 0); X _XIOError (d); X Reset (); /* In case the default handler doesn't exit() */ X /*NOTREACHED*/ X} X Xstatic X_Error (d, ep) Display *d; XErrorEvent *ep; { X Object args, a, fun; X GC_Node; X X Reset_IO (0); X args = Make_Unsigned ((unsigned)ep->resourceid); X GC_Link (args); X args = Cons (args, Null); X a = Make_Integer (ep->minor_code); X args = Cons (a, args); X a = Make_Integer (ep->request_code); X args = Cons (a, args); X a = Bits_To_Symbols ((unsigned long)ep->error_code, 0, Error_Syms); X if (Nullp (a)) X a = Make_Integer (ep->error_code); X args = Cons (a, args); X a = Make_Integer (ep->serial); X args = Cons (a, args); X a = Make_Display (0, ep->display); X args = Cons (a, args); X GC_Unlink; X fun = Val (V_X_Error_Handler); X if (TYPE(fun) == T_Compound) X (void)Funcall (fun, args, 0); X else X _XDefaultError (d, ep); X} X Xstatic X_After_Function (d) Display *d; { X Object args; X GC_Node; X X args = Make_Display (0, d); X GC_Link (args); X args = Cons (args, Null); X GC_Unlink; X (void)Funcall (DISPLAY(Car (args))->after, args, 0); X} X Xstatic Object P_Set_After_Function (d, f) Object d, f; { X Object old; X X Check_Type (d, T_Display); X if (EQ(f, False)) { X (void)XSetAfterFunction (DISPLAY(d)->dpy, (int (*)())0); X } else { X Check_Procedure (f); X (void)XSetAfterFunction (DISPLAY(d)->dpy, X_After_Function); X } X old = DISPLAY(d)->after; X DISPLAY(d)->after = f; X return old; X} X Xstatic Object P_After_Function (d) Object d; { X Check_Type (d, T_Display); X return DISPLAY(d)->after; X} X Xinit_xlib_error () { X Define_Variable (&V_X_Fatal_Error_Handler, "x-fatal-error-handler", Null); X Define_Variable (&V_X_Error_Handler, "x-error-handler", Null); X XSetIOErrorHandler (X_Fatal_Error); X XSetErrorHandler (X_Error); X Define_Primitive (P_Set_After_Function, "set-after-function!", 2, 2, EVAL); X Define_Primitive (P_After_Function, "after-function", 1, 1, EVAL); X} END_OF_lib/xlib/error.c if test 2477 -ne `wc -c <lib/xlib/error.c`; then echo shar: \"lib/xlib/error.c\" unpacked with wrong size! fi # end of overwriting check fi if test -f lib/xlib/text.c -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"lib/xlib/text.c\" else echo shar: Extracting \"lib/xlib/text.c\" \(4729 characters\) sed "s/^X//" >lib/xlib/text.c <<'END_OF_lib/xlib/text.c' X#include "xlib.h" X Xextern XDrawText(), XDrawText16(); X Xstatic Object Sym_1_Byte, Sym_2_Byte; X Xstatic Two_Byte (format) Object format; { X Check_Type (format, T_Symbol); X if (EQ(format, Sym_1_Byte)) X return 0; X else if (EQ(format, Sym_2_Byte)) X return 1; X Primitive_Error ("index format must be '1-byte or '2-byte"); X /*NOTREACHED*/ X} X Xstatic Get_1_Byte_Char (x) Object x; { X register c = Get_Integer (x); X if (c < 0 || c > 255) X Range_Error (x); X return c; X} X Xstatic Get_2_Byte_Char (x) Object x; { X register c = Get_Integer (x); X if (c < 0 || c > 65535) X Range_Error (x); X return c; X} X X/* Calculation of text widths and extents should not be done using X * the Xlib functions. For instance, the values returned by X * XTextExtents() are only shorts and can therefore overflow for X * long strings. X */ X Xstatic Object P_Text_Width (font, t, f) Object font, t, f; { X return Internal_Text_Metrics (font, t, f, 1); X} X Xstatic Object P_Text_Extents (font, t, f) Object font, t, f; { X return Internal_Text_Metrics (font, t, f, 0); X} X Xstatic Object Internal_Text_Metrics (font, t, f, width) Object font, t, f; { X char *s; X XChar2b *s2; X XFontStruct *info; X Object *data; X register i, n; X int dir, fasc, fdesc; X X Check_Type (font, T_Font); X info = FONT(font)->info; X Check_Type (t, T_Vector); X n = VECTOR(t)->size; X data = VECTOR(t)->data; X if (Two_Byte (f)) { X s2 = (XChar2b *)alloca (n * sizeof (XChar2b)); X for (i = 0; i < n; i++) { X register c = Get_2_Byte_Char (data[i]); X s2[i].byte1 = (c >> 8) & 0xff; X s2[i].byte2 = c & 0xff; X } X if (width) X i = XTextWidth16 (info, s2, n); X else X XTextExtents16 (info, s2, n, &dir, &fasc, &fdesc, &CI); X } else { X s = alloca (n); X for (i = 0; i < n; i++) X s[i] = Get_1_Byte_Char (data[i]); X if (width) X i = XTextWidth (info, s, n); X else X XTextExtents (info, s, n, &dir, &fasc, &fdesc, &CI); X } X return width ? Make_Integer (i) : Record_To_Vector (Char_Info_Rec, X Char_Info_Size, Sym_Char_Info, FONT(font)->dpy, ~0L); X} X Xstatic Object P_Draw_Image_Text (d, gc, x, y, t, f) Object d, gc, x, y, t, f; { X Display *dpy; X Drawable dr = Get_Drawable (d, &dpy); X Object *data; X register i, n; X char *s; X XChar2b *s2; X X Check_Type (gc, T_Gc); X Check_Type (t, T_Vector); X n = VECTOR(t)->size; X data = VECTOR(t)->data; X if (Two_Byte (f)) { X s2 = (XChar2b *)alloca (n * sizeof (XChar2b)); X for (i = 0; i < n; i++) { X register c = Get_2_Byte_Char (data[i]); X s2[i].byte1 = (c >> 8) & 0xff; X s2[i].byte2 = c & 0xff; X } X XDrawImageString16 (dpy, dr, GCONTEXT(gc)->gc, Get_Integer (x), X Get_Integer (y), s2, n); X } else { X s = alloca (n); X for (i = 0; i < n; i++) X s[i] = Get_1_Byte_Char (data[i]); X XDrawImageString (dpy, dr, GCONTEXT(gc)->gc, Get_Integer (x), X Get_Integer (y), s, n); X } X return Void; X} X Xstatic Object P_Draw_Poly_Text (d, gc, x, y, t, f) Object d, gc, x, y, t, f; { X Display *dpy; X Drawable dr = Get_Drawable (d, &dpy); X Object *data; X register i, n, j, k; X int twobyte, nitems; X XTextItem *items; X int (*func)(); X X Check_Type (gc, T_Gc); X twobyte = Two_Byte (f); X func = twobyte ? XDrawText16 : XDrawText; X Check_Type (t, T_Vector); X if ((n = VECTOR(t)->size) == 0) X return Void; X for (data = VECTOR(t)->data, i = 0, nitems = 1; i < n; i++) X if (TYPE(data[i]) == T_Font) nitems++; X items = (XTextItem *)alloca (nitems * sizeof (XTextItem)); X items[0].delta = 0; X items[0].font = None; X for (j = k = i = 0; i <= n; i++) { X if (i == n || TYPE(data[i]) == T_Font) { X items[j].nchars = i-k; X if (twobyte) { X register XChar2b *p; X p = ((XTextItem16 *)items)[j].chars = (XChar2b *)alloca X ((i-k) * sizeof (XChar2b)); X for ( ; k < i; k++, p++) { X register c = Get_2_Byte_Char (data[k]); X p->byte1 = (c >> 8) & 0xff; X p->byte2 = c & 0xff; X } X } else { X register char *p; X p = items[j].chars = alloca (i-k); X for ( ; k < i; k++) X *p++ = Get_1_Byte_Char (data[k]); X } X k++; X j++; X if (i < n) { X items[j].delta = 0; X Open_Font_Maybe (data[i]); X items[j].font = FONT(data[i])->id; X } X } X } X (*func)(dpy, dr, GCONTEXT(gc)->gc, Get_Integer (x), Get_Integer (y), X items, nitems); X return Void; X} X Xinit_xlib_text () { X Define_Symbol (&Sym_1_Byte, "1-byte"); X Define_Symbol (&Sym_2_Byte, "2-byte"); X Define_Primitive (P_Text_Width, "text-width", 3, 3, EVAL); X Define_Primitive (P_Text_Extents, "text-extents", 3, 3, EVAL); X Define_Primitive (P_Draw_Image_Text, "draw-image-text", 6, 6, EVAL); X Define_Primitive (P_Draw_Poly_Text, "draw-poly-text", 6, 6, EVAL); X} END_OF_lib/xlib/text.c if test 4729 -ne `wc -c <lib/xlib/text.c`; then echo shar: \"lib/xlib/text.c\" unpacked with wrong size! fi # end of overwriting check fi if test -f lib/xlib/font.c -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"lib/xlib/font.c\" else echo shar: Extracting \"lib/xlib/font.c\" \(7580 characters\) sed "s/^X//" >lib/xlib/font.c <<'END_OF_lib/xlib/font.c' X#include "xlib.h" X XObject Sym_Char_Info; Xstatic Object Sym_Font_Info; X XGeneric_Predicate (Font); X Xstatic Font_Equal (x, y) Object x, y; { X Font id1 = FONT(x)->id, id2 = FONT(y)->id; X if (id1 && id2) X return (id1 == id2 && FONT(x)->dpy == FONT(y)->dpy) ? True : False; X else X return False; X} X XGeneric_Print (Font, "#[font %u]", FONT(x)->id ? FONT(x)->id : POINTER(x)); X Xstatic Font_Visit (fp, f) Object *fp; int (*f)(); { X (*f)(&FONT(*fp)->name); X} X XGeneric_Get_Display (Font, FONT); X XObject Make_Font (dpy, name, id, info) Display *dpy; Object name; X Font id; XFontStruct *info; { X register char *p; X Object f; X GC_Node; X X GC_Link (name); X p = Get_Bytes (sizeof (struct S_Font)); X SET (f, T_Font, (struct S_Font *)p); X FONT(f)->dpy = dpy; X FONT(f)->name = name; X FONT(f)->id = id; X FONT(f)->info = info; X if (id) X Register_Object (f, (GENERIC)dpy, P_Close_Font, 0); X GC_Unlink; X return f; X} X XFont Get_Font (f) Object f; { X Check_Type (f, T_Font); X Open_Font_Maybe (f); X return FONT(f)->id; X} X Xstatic XFontStruct *Internal_Open_Font (d, name) Display *d; Object name; { X register char *s; X XFontStruct *p; X X Make_C_String (name, s); X Disable_Interrupts; X if ((p = XLoadQueryFont (d, s)) == 0) X Primitive_Error ("cannot open font: ~s", name); X Enable_Interrupts; X return p; X} X Xstatic Object P_Open_Font (d, name) Object d, name; { X XFontStruct *p; X X Check_Type (d, T_Display) X p = Internal_Open_Font (DISPLAY(d)->dpy, name); X return Make_Font (DISPLAY(d)->dpy, name, p->fid, p); X} X XOpen_Font_Maybe (f) Object f; { X Object name = FONT(f)->name; X XFontStruct *p; X X if (!Truep (name)) X Primitive_Error ("invalid font"); X if (FONT(f)->id == 0) { X p = Internal_Open_Font (FONT(f)->dpy, name); X FONT(f)->id = p->fid; X FONT(f)->info = p; X Register_Object (f, (GENERIC)(FONT(f)->dpy), P_Close_Font, 0); X } X} X XObject P_Close_Font (f) Object f; { X Check_Type (f, T_Font); X if (FONT(f)->id) X XUnloadFont (FONT(f)->dpy, FONT(f)->id); X FONT(f)->id = 0; X Deregister_Object (f); X return Void; X} X Xstatic Object P_Font_Name (f) Object f; { X Check_Type (f, T_Font); X return FONT(f)->name; X} X Xstatic Object P_Gcontext_Font (g) Object g; { X register struct S_Gc *p; X register XFontStruct *info; X X Check_Type (g, T_Gc); X p = GCONTEXT(g); X Disable_Interrupts; X info = XQueryFont (p->dpy, XGContextFromGC (p->gc)); X Enable_Interrupts; X return Make_Font (p->dpy, False, (Font)0, info); X} X Xstatic Object P_List_Font_Names (d, pat) Object d, pat; { X return Internal_List_Fonts (d, pat, 0); X} X Xstatic Object P_List_Fonts (d, pat) Object d, pat; { X return Internal_List_Fonts (d, pat, 1); X} X Xstatic Object Internal_List_Fonts (d, pat, with_info) Object d, pat; { X char *s, **ret; X int n; X XFontStruct *iret; X register i; X Object f, v; X Display *dpy; X GC_Node2; X X Check_Type (d, T_Display); X dpy = DISPLAY(d)->dpy; X Make_C_String (pat, s); X Disable_Interrupts; X if (with_info) X ret = XListFontsWithInfo (dpy, s, 65535, &n, &iret); X else X ret = XListFonts (dpy, s, 65535, &n); X Enable_Interrupts; X v = Make_Vector (n, Null); X f = Null; X GC_Link2 (f, v); X for (i = 0; i < n; i++) { X f = Make_String (ret[i], strlen (ret[i])); X if (with_info) X f = Make_Font (dpy, f, (Font)0, &iret[i]); X VECTOR(v)->data[i] = f; X } X GC_Unlink; X if (with_info) X XFreeFontInfo (ret, (XFontStruct *)0, 0); X else X XFreeFontNames (ret); X return v; X} X Xstatic Object P_Font_Info (f) Object f; { X Check_Type (f, T_Font); X FI = *FONT(f)->info; X return Record_To_Vector (Font_Info_Rec, Font_Info_Size, X Sym_Font_Info, FONT(f)->dpy, ~0L); X} X Xstatic Object P_Char_Info (f, index) Object f, index; { X register t = TYPE(index); X register unsigned i; X register XCharStruct *cp; X register XFontStruct *p; X char *msg = "argument must be integer, character, 'min, or 'max"; X X Check_Type (f, T_Font); X Open_Font_Maybe (f); X p = FONT(f)->info; X cp = &p->max_bounds; X if (t == T_Symbol) { X if (EQ(index, Intern ("min"))) X cp = &p->min_bounds; X else if (!EQ(index, Intern ("max"))) X Primitive_Error (msg); X } else { X if (t == T_Character) X i = CHAR(index); X else if (t == T_Fixnum || t == T_Bignum) X i = (unsigned)Get_Integer (index); X else X Primitive_Error (msg); X if (!p->min_byte1 && !p->max_byte1) { X if (i < p->min_char_or_byte2 || i > p->max_char_or_byte2) X Range_Error (index); X i -= p->min_char_or_byte2; X } else { X register unsigned b1 = i & 0xff, b2 = (i >> 8) & 0xff; X if (b1 < p->min_byte1 || b1 > p->max_byte1 || X b2 < p->min_char_or_byte2 || b2 > p->max_char_or_byte2) X Range_Error (index); X b1 -= p->min_byte1; X b2 -= p->min_char_or_byte2; X i = b1 * (p->max_char_or_byte2 - p->min_char_or_byte2 + 1) + b2; X } X if (p->per_char) X cp = p->per_char + i; X } X CI = *cp; X return Record_To_Vector (Char_Info_Rec, Char_Info_Size, X Sym_Char_Info, FONT(f)->dpy, ~0L); X} X Xstatic Object P_Font_Properties (f) Object f; { X register i, n; X Object v, a, val, x; X GC_Node4; X X Check_Type (f, T_Font); X n = FONT(f)->info->n_properties; X v = Make_Vector (n, Null); X a = val = Null; X GC_Link4 (v, a, val, f); X for (i = 0; i < n; i++) { X register XFontProp *p = FONT(f)->info->properties+i; X a = Make_Atom (p->name); X val = Make_Unsigned ((unsigned)p->card32); X x = Cons (a, val); X VECTOR(v)->data[i] = x; X } X GC_Unlink; X return v; X} X Xstatic Object P_Font_Path (d) Object d; { X Object v; X int i, n; X char **ret; X GC_Node; X X Check_Type (d, T_Display); X Disable_Interrupts; X ret = XGetFontPath (DISPLAY(d)->dpy, &n); X Enable_Interrupts; X v = Make_Vector (n, Null); X GC_Link (v); X for (i = 0; i < n; i++) { X Object x = Make_String (ret[i], strlen (ret[i])); X VECTOR(v)->data[i] = x; X } X GC_Unlink; X XFreeFontPath (ret); X return P_Vector_To_List (v); X} X Xstatic Object P_Set_Font_Path (d, p) Object d, p; { X register char **path; X register i, n; X Object c; X X Check_Type (d, T_Display); X Check_List (p); X n = Internal_Length (p); X path = (char **)alloca (n * sizeof (char *)); X for (i = 0; i < n; i++, p = Cdr (p)) { X c = Car (p); X Make_C_String (c, path[i]); X } X XSetFontPath (DISPLAY(d)->dpy, path, n); X return Void; X} X Xinit_xlib_font () { X Define_Symbol (&Sym_Font_Info, "font-info"); X Define_Symbol (&Sym_Char_Info, "char-info"); X T_Font = Define_Type (0, "font", NOFUNC, sizeof (struct S_Font), X Font_Equal, Font_Equal, Font_Print, Font_Visit); X Define_Primitive (P_Fontp, "font?", 1, 1, EVAL); X Define_Primitive (P_Font_Display, "font-display", 1, 1, EVAL); X Define_Primitive (P_Open_Font, "open-font", 2, 2, EVAL); X Define_Primitive (P_Close_Font, "close-font", 1, 1, EVAL); X Define_Primitive (P_Font_Name, "font-name", 1, 1, EVAL); X Define_Primitive (P_Gcontext_Font, "gcontext-font", 1, 1, EVAL); X Define_Primitive (P_List_Font_Names, "list-font-names", 2, 2, EVAL); X Define_Primitive (P_List_Fonts, "list-fonts", 2, 2, EVAL); X Define_Primitive (P_Font_Info, "font-info", 1, 1, EVAL); X Define_Primitive (P_Char_Info, "char-info", 2, 2, EVAL); X Define_Primitive (P_Font_Properties, "font-properties", 1, 1, EVAL); X Define_Primitive (P_Font_Path, "font-path", 1, 1, EVAL); X Define_Primitive (P_Set_Font_Path, "set-font-path!", 2, 2, EVAL); X} END_OF_lib/xlib/font.c if test 7580 -ne `wc -c <lib/xlib/font.c`; then echo shar: \"lib/xlib/font.c\" unpacked with wrong size! fi # end of overwriting check fi if test -f lib/xlib/pixmap.c -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"lib/xlib/pixmap.c\" else echo shar: Extracting \"lib/xlib/pixmap.c\" \(2690 characters\) sed "s/^X//" >lib/xlib/pixmap.c <<'END_OF_lib/xlib/pixmap.c' X#include "xlib.h" X XGeneric_Predicate (Pixmap); X XGeneric_Equal_Dpy (Pixmap, PIXMAP, pm); X XGeneric_Print (Pixmap, "#[pixmap %u]", PIXMAP(x)->pm); X XGeneric_Get_Display (Pixmap, PIXMAP); X XObject Make_Pixmap (dpy, pix) Display *dpy; Pixmap pix; { X register char *p; X Object pm; X X if (pix == None) X return Sym_None; X pm = Find_Object (T_Pixmap, (GENERIC)dpy, Match_X_Obj, pix); X if (Nullp (pm)) { X p = Get_Bytes (sizeof (struct S_Pixmap)); X SET (pm, T_Pixmap, (struct S_Pixmap *)p); X PIXMAP(pm)->tag = Null; X PIXMAP(pm)->pm = pix; X PIXMAP(pm)->dpy = dpy; X PIXMAP(pm)->free = 0; X Register_Object (pm, (GENERIC)dpy, P_Free_Pixmap, 0); X } X return pm; X} X XPixmap Get_Pixmap (p) Object p; { X Check_Type (p, T_Pixmap); X return PIXMAP(p)->pm; X} X XObject P_Free_Pixmap (p) Object p; { X Check_Type (p, T_Pixmap); X if (!PIXMAP(p)->free) X XFreePixmap (PIXMAP(p)->dpy, PIXMAP(p)->pm); X Deregister_Object (p); X PIXMAP(p)->free = 1; X return Void; X} X Xstatic Object P_Create_Pixmap (d, w, h, depth) Object d, w, h, depth; { X Display *dpy; X Drawable dr = Get_Drawable (d, &dpy); X X return Make_Pixmap (dpy, XCreatePixmap (dpy, dr, Get_Integer (w), X Get_Integer (h), Get_Integer (depth))); X} X Xstatic Object P_Create_Bitmap_Data (win, data, pw, ph) X Object win, data, pw, ph; { X register w, h; X X Check_Type (win, T_Window); X Check_Type (data, T_String); X w = Get_Integer (pw); X h = Get_Integer (ph); X if (w * h > 8 * STRING(data)->size) X Primitive_Error ("bitmap too small"); X return Make_Pixmap (WINDOW(win)->dpy, X XCreateBitmapFromData (WINDOW(win)->dpy, WINDOW(win)->win, X STRING(data)->data, w, h)); X} X Xstatic Object P_Write_Bitmap_File (argc, argv) Object *argv; { X Object file; X Pixmap pm; X char *s; X int xhot = -1, yhot = -1; X X file = argv[0]; X Make_C_String (file, s); X pm = Get_Pixmap (argv[1]); X if (argc == 5) X Primitive_Error ("both x-hot and y-hot must be specified"); X if (argc == 6) { X xhot = Get_Integer (argv[4]); X yhot = Get_Integer (argv[5]); X } X return Bits_To_Symbols ((unsigned long)XWriteBitmapFile X (PIXMAP(argv[1])->dpy, s, pm, X Get_Integer (argv[2]), Get_Integer (argv[3]), xhot, yhot), X 0, Bitmapstatus_Syms); X} X Xinit_xlib_pixmap () { X Generic_Define (Pixmap, "pixmap", "pixmap?"); X Define_Primitive (P_Pixmap_Display,"pixmap-display", 1, 1, EVAL); X Define_Primitive (P_Free_Pixmap, "free-pixmap", 1, 1, EVAL); X Define_Primitive (P_Create_Pixmap, "create-pixmap", 4, 4, EVAL); X Define_Primitive (P_Create_Bitmap_Data, "create-bitmap-from-data", X 4, 4, EVAL); X Define_Primitive (P_Write_Bitmap_File, "write-bitmap-file", X 4, 6, VARARGS); X} END_OF_lib/xlib/pixmap.c if test 2690 -ne `wc -c <lib/xlib/pixmap.c`; then echo shar: \"lib/xlib/pixmap.c\" unpacked with wrong size! fi # end of overwriting check fi if test -f lib/xlib/objects.c -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"lib/xlib/objects.c\" else echo shar: Extracting \"lib/xlib/objects.c\" \(1359 characters\) sed "s/^X//" >lib/xlib/objects.c <<'END_OF_lib/xlib/objects.c' X#include <varargs.h> X X#include "xlib.h" X XObject Sym_None; X XMatch_X_Obj (x, v) Object x; va_list v; { X register type = TYPE(x); X X if (type == T_Display) { X return 1; X } else if (type == T_Gc) { X return va_arg (v, GC) == GCONTEXT(x)->gc; X } else if (type == T_Pixel) { X return va_arg (v, unsigned long) == PIXEL(x)->pix; X } else if (type == T_Pixmap) { X return va_arg (v, Pixmap) == PIXMAP(x)->pm; X } else if (type == T_Window) { X return va_arg (v, Window) == WINDOW(x)->win; X } else if (type == T_Font) { X return va_arg (v, Font) == FONT(x)->id; X } else if (type == T_Colormap) { X return va_arg (v, Colormap) == COLORMAP(x)->cm; X } else if (type == T_Color) { X return va_arg (v, unsigned int) == COLOR(x)->c.red X && va_arg (v, unsigned int) == COLOR(x)->c.green X && va_arg (v, unsigned int) == COLOR(x)->c.blue; X } else if (type == T_Cursor) { X return va_arg (v, Cursor) == CURSOR(x)->cursor; X } else if (type == T_Atom) { X return va_arg (v, Atom) == ATOM(x)->atom; X } else Panic ("Match_X_Obj"); X return 0; X} X XObject P_Window_Unique_Id (w) Object w; { X register id; X X Check_Type (w, T_Window); X id = Unique_Id (w); X return id > 0 ? Make_Fixnum (id) : False; X} X Xinit_xlib_objects () { X Define_Symbol (&Sym_None, "none"); X Define_Primitive (P_Window_Unique_Id, "window-unique-id", 1, 1, EVAL); X} END_OF_lib/xlib/objects.c if test 1359 -ne `wc -c <lib/xlib/objects.c`; then echo shar: \"lib/xlib/objects.c\" unpacked with wrong size! fi # end of overwriting check fi if test -f lib/xlib/colormap.c -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"lib/xlib/colormap.c\" else echo shar: Extracting \"lib/xlib/colormap.c\" \(1302 characters\) sed "s/^X//" >lib/xlib/colormap.c <<'END_OF_lib/xlib/colormap.c' X#include "xlib.h" X XGeneric_Predicate (Colormap); X XGeneric_Equal_Dpy (Colormap, COLORMAP, cm); X XGeneric_Print (Colormap, "#[colormap %u]", COLORMAP(x)->cm); X XGeneric_Get_Display (Colormap, COLORMAP); X XObject Make_Colormap (finalize, dpy, cmap) Display *dpy; Colormap cmap; { X register char *p; X Object cm; X X if (cmap == None) X return Sym_None; X cm = Find_Object (T_Colormap, (GENERIC)dpy, Match_X_Obj, cmap); X if (Nullp (cm)) { X p = Get_Bytes (sizeof (struct S_Colormap)); X SET (cm, T_Colormap, (struct S_Colormap *)p); X COLORMAP(cm)->tag = Null; X COLORMAP(cm)->cm = cmap; X COLORMAP(cm)->dpy = dpy; X COLORMAP(cm)->free = 0; X Register_Object (cm, (GENERIC)dpy, finalize ? P_Free_Colormap : X (PFO)0, 0); X } X return cm; X} X XColormap Get_Colormap (c) Object c; { X Check_Type (c, T_Colormap); X return COLORMAP(c)->cm; X} X XObject P_Free_Colormap (c) Object c; { X Check_Type (c, T_Colormap); X if (!COLORMAP(c)->free) X XFreeColormap (COLORMAP(c)->dpy, COLORMAP(c)->cm); X Deregister_Object (c); X COLORMAP(c)->free = 1; X return Void; X} X Xinit_xlib_colormap () { X Generic_Define (Colormap, "colormap", "colormap?"); X Define_Primitive (P_Colormap_Display, "colormap-display", 1, 1, EVAL); X Define_Primitive (P_Free_Colormap, "free-colormap", 1, 1, EVAL); X} END_OF_lib/xlib/colormap.c if test 1302 -ne `wc -c <lib/xlib/colormap.c`; then echo shar: \"lib/xlib/colormap.c\" unpacked with wrong size! fi # end of overwriting check fi if test -f lib/xlib/cursor.c -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"lib/xlib/cursor.c\" else echo shar: Extracting \"lib/xlib/cursor.c\" \(2422 characters\) sed "s/^X//" >lib/xlib/cursor.c <<'END_OF_lib/xlib/cursor.c' X#include "xlib.h" X XGeneric_Predicate (Cursor); X XGeneric_Equal_Dpy (Cursor, CURSOR, cursor); X XGeneric_Print (Cursor, "#[cursor %u]", CURSOR(x)->cursor); X XGeneric_Get_Display (Cursor, CURSOR); X XObject Make_Cursor (dpy, cursor) Display *dpy; Cursor cursor; { X register char *p; X Object c; X X if (cursor == None) X return Sym_None; X c = Find_Object (T_Cursor, (GENERIC)dpy, Match_X_Obj, cursor); X if (Nullp (c)) { X p = Get_Bytes (sizeof (struct S_Cursor)); X SET (c, T_Cursor, (struct S_Cursor *)p); X CURSOR(c)->tag = Null; X CURSOR(c)->cursor = cursor; X CURSOR(c)->dpy = dpy; X CURSOR(c)->free = 0; X Register_Object (c, (GENERIC)dpy, P_Free_Cursor, 0); X } X return c; X} X XCursor Get_Cursor (c) Object c; { X if (EQ(c, Sym_None)) X return None; X Check_Type (c, T_Cursor); X return CURSOR(c)->cursor; X} X XObject P_Free_Cursor (c) Object c; { X Check_Type (c, T_Cursor); X if (!CURSOR(c)->free) X XFreeCursor (CURSOR(c)->dpy, CURSOR(c)->cursor); X Deregister_Object (c); X CURSOR(c)->free = 1; X return Void; X} X Xstatic Object P_Create_Cursor (srcp, maskp, x, y, f, b) X Object srcp, maskp, x, y, f, b; { X Pixmap sp = Get_Pixmap (srcp), mp; X Display *d = PIXMAP(srcp)->dpy; X X mp = EQ(maskp, Sym_None) ? None : Get_Pixmap (maskp); X return Make_Cursor (d, XCreatePixmapCursor (d, sp, mp, X Get_Color (f), Get_Color (b), Get_Integer (x), Get_Integer (y))); X} X Xstatic Object P_Create_Glyph_Cursor (srcf, srcc, maskf, maskc, f, b) X Object srcf, srcc, maskf, maskc, f, b; { X Font sf = Get_Font (srcf), mf; X Display *d = FONT(srcf)->dpy; X X mf = EQ(maskf, Sym_None) ? None : Get_Font (maskf); X return Make_Cursor (d, XCreateGlyphCursor (d, sf, mf, X Get_Integer (srcc), mf == None ? 0 : Get_Integer (maskc), X Get_Color (f), Get_Color (b))); X} X Xstatic Object P_Recolor_Cursor (c, f, b) Object c, f, b; { X Check_Type (c, T_Cursor); X XRecolorCursor (CURSOR(c)->dpy, CURSOR(c)->cursor, Get_Color (f), X Get_Color (b)); X return Void; X} X Xinit_xlib_cursor () { X Generic_Define (Cursor, "cursor", "cursor?"); X Define_Primitive (P_Cursor_Display, "cursor-display", 1, 1, EVAL); X Define_Primitive (P_Free_Cursor, "free-cursor", 1, 1, EVAL); X Define_Primitive (P_Create_Cursor, "create-cursor", 6, 6, EVAL); X Define_Primitive (P_Create_Glyph_Cursor, "create-glyph-cursor", X 6, 6, EVAL); X Define_Primitive (P_Recolor_Cursor, "recolor-cursor", 3, 3, EVAL); X} END_OF_lib/xlib/cursor.c if test 2422 -ne `wc -c <lib/xlib/cursor.c`; then echo shar: \"lib/xlib/cursor.c\" unpacked with wrong size! fi # end of overwriting check fi if test -f lib/xlib/key.c -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"lib/xlib/key.c\" else echo shar: Extracting \"lib/xlib/key.c\" \(2714 characters\) sed "s/^X//" >lib/xlib/key.c <<'END_OF_lib/xlib/key.c' X#include "xlib.h" X Xstatic Object P_Display_Min_Keycode (d) Object d; { X Check_Type (d, T_Display); X return Make_Integer (DISPLAY(d)->dpy->min_keycode); X} X Xstatic Object P_Display_Max_Keycode (d) Object d; { X Check_Type (d, T_Display); X return Make_Integer (DISPLAY(d)->dpy->max_keycode); X} X Xstatic Object P_Display_Keysyms_Per_Keycode (d) Object d; { X Check_Type (d, T_Display); X /* Force initialization: */ X Disable_Interrupts; X (void)XKeycodeToKeysym (DISPLAY(d)->dpy, DISPLAY(d)->dpy->min_keycode, 0); X Enable_Interrupts; X return Make_Integer (DISPLAY(d)->dpy->keysyms_per_keycode); X} X Xstatic Object P_String_To_Keysym (s) Object s; { X register char *str; X KeySym k; X X Make_C_String (s, str); X k = XStringToKeysym (str); X return k == NoSymbol ? False : Make_Unsigned ((unsigned)k); X} X Xstatic Object P_Keysym_To_String (k) Object k; { X register char *s; X X s = XKeysymToString (Get_Integer (k)); X return s ? Make_String (s, strlen (s)) : False; X} X Xstatic Object P_Keycode_To_Keysym (d, k, index) Object d, k, index; { X Object ret; X X Check_Type (d, T_Display); X Disable_Interrupts; X ret = Make_Integer (XKeycodeToKeysym (DISPLAY(d)->dpy, Get_Integer (k), X Get_Integer (index))); X Enable_Interrupts; X return ret; X} X Xstatic Object P_Keysym_To_Keycode (d, k) Object d, k; { X Object ret; X X Check_Type (d, T_Display); X Disable_Interrupts; X ret = Make_Integer (XKeysymToKeycode (DISPLAY(d)->dpy, Get_Integer (k))); X Enable_Interrupts; X return ret; X} X Xstatic Object P_Lookup_String (d, k, mask) Object d, k, mask; { X XKeyEvent e; X char buf[1024]; X register len; X KeySym keysym_return; X XComposeStatus status_return; X X Check_Type (d, T_Display); X e.display = DISPLAY(d)->dpy; X e.keycode = Get_Integer (k); X e.state = Symbols_To_Bits (mask, 1, State_Syms); X Disable_Interrupts; X len = XLookupString (&e, buf, 1024, &keysym_return, &status_return); X Enable_Interrupts; X return Make_String (buf, len); X} X Xinit_xlib_key () { X Define_Primitive (P_Display_Min_Keycode, "display-min-keycode", X 1, 1, EVAL); X Define_Primitive (P_Display_Max_Keycode, "display-max-keycode", X 1, 1, EVAL); X Define_Primitive (P_Display_Keysyms_Per_Keycode, X "display-keysyms-per-keycode", 1, 1, EVAL); X Define_Primitive (P_String_To_Keysym, "string->keysym", 1, 1, EVAL); X Define_Primitive (P_Keysym_To_String, "keysym->string", 1, 1, EVAL); X Define_Primitive (P_Keycode_To_Keysym, "keycode->keysym", 3, 3, EVAL); X Define_Primitive (P_Keysym_To_Keycode, "keysym->keycode", 2, 2, EVAL); X Define_Primitive (P_Lookup_String, "lookup-string", 3, 3, EVAL); X} END_OF_lib/xlib/key.c if test 2714 -ne `wc -c <lib/xlib/key.c`; then echo shar: \"lib/xlib/key.c\" unpacked with wrong size! fi # end of overwriting check fi if test -f lib/xaw/label.d -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"lib/xaw/label.d\" else echo shar: Extracting \"lib/xaw/label.d\" \(104 characters\) sed "s/^X//" >lib/xaw/label.d <<'END_OF_lib/xaw/label.d' X;;; -*-Scheme-*- X X(define-widget-type 'label "Label.h") X X(define-widget-class 'label 'labelWidgetClass) END_OF_lib/xaw/label.d if test 104 -ne `wc -c <lib/xaw/label.d`; then echo shar: \"lib/xaw/label.d\" unpacked with wrong size! fi # end of overwriting check fi echo shar: End of archive 11 \(of 14\). cp /dev/null ark11isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 14 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0