Annotation of 43BSD/contrib/emacs/src/xfns.c, revision 1.1.1.1

1.1       root        1: /* Functions for the X window system.
                      2:    Copyright (C) 1985 Free Software Foundation.
                      3: 
                      4: This file is part of GNU Emacs.
                      5: 
                      6: GNU Emacs is distributed in the hope that it will be useful,
                      7: but WITHOUT ANY WARRANTY.  No author or distributor
                      8: accepts responsibility to anyone for the consequences of using it
                      9: or for whether it serves any particular purpose or works at all,
                     10: unless he says so in writing.  Refer to the GNU Emacs General Public
                     11: License for full details.
                     12: 
                     13: Everyone is granted permission to copy, modify and redistribute
                     14: GNU Emacs, but only under the conditions described in the
                     15: GNU Emacs General Public License.   A copy of this license is
                     16: supposed to have been given to you along with GNU Emacs so you
                     17: can know your rights and responsibilities.  It should be in a
                     18: file named COPYING.  Among other things, the copyright notice
                     19: and this notice must be preserved on all copies.  */
                     20: 
                     21: /* Written by Yakim Martillo; rearranged by Richard Stallman.  */
                     22: /* Color added by Robert Krawitz*/
                     23: 
                     24: /*#include <stdio.h>*/
                     25: #include "config.h"
                     26: #include "lisp.h"
                     27: #include "window.h"
                     28: #include "xterm.h"
                     29: #include "dispextern.h"
                     30: #include "termchar.h"
                     31: #include <signal.h>
                     32: #include "sink.h"
                     33: #include "sinkmask.h"
                     34: #include <sys/time.h>
                     35: #include <fcntl.h>
                     36: #include <setjmp.h>
                     37: 
                     38: #define abs(x) ((x < 0) ? ((x)) : (x))
                     39: #define sgn(x) ((x < 0) ? (-1) : (1))
                     40:   
                     41: #define CROSS_WIDTH 16
                     42: #define CROSS_HEIGHT 16
                     43: 
                     44: static short cross_bits[] =
                     45:   {
                     46:     0x0000, 0x0180, 0x0180, 0x0180,
                     47:     0x0180, 0x0180, 0x0180, 0x7ffe,
                     48:     0x7ffe, 0x0180, 0x0180, 0x0180,
                     49:     0x0180, 0x0180, 0x0180, 0x0000,
                     50:   };
                     51: 
                     52: static short gray_bits[] = {
                     53:     0xaaaa, 0x5555, 0xaaaa, 0x5555,
                     54:     0xaaaa, 0x5555, 0xaaaa, 0x5555,
                     55:     0xaaaa, 0x5555, 0xaaaa, 0x5555,
                     56:     0xaaaa, 0x5555, 0xaaaa, 0x5555};
                     57: 
                     58: #define CROSS_MASK_WIDTH 16
                     59: #define CROSS_MASK_HEIGHT 16
                     60: static short cross_mask_bits[] =
                     61:   {
                     62:     0x03c0, 0x03c0, 0x03c0, 0x03c0,
                     63:     0x03c0, 0x03c0, 0xffff, 0xffff,
                     64:     0xffff, 0xffff, 0x03c0, 0x03c0,
                     65:     0x03c0, 0x03c0, 0x03c0, 0x03c0,
                     66:   };
                     67: 
                     68: extern XREPBUFFER Xxrepbuffer;
                     69: 
                     70: /* Non-nil if Emacs is running with an X window for display.
                     71:    Nil if Emacs is run on an ordinary terminal.  */
                     72: 
                     73: Lisp_Object Vxterm;
                     74: 
                     75: Lisp_Object Vx_mouse_pos;
                     76: 
                     77: extern struct Lisp_Vector *MouseMap;
                     78: 
                     79: extern char *fore_color;
                     80: extern char *back_color;
                     81: extern char *brdr_color;
                     82: extern char *mous_color;
                     83: extern char *curs_color;
                     84: 
                     85: extern int fore;
                     86: extern int back;
                     87: extern int brdr;
                     88: extern int mous;
                     89: extern int curs;
                     90: 
                     91: /* Nonzero if x-set-window-edges has been called
                     92:    or x-rubber-band has been called.
                     93:    If it is zero when x-pop-up-window is called,
                     94:    x-rubber-band is called at that point.  */
                     95: 
                     96: int x_edges_specified;
                     97: 
                     98: check_xterm ()
                     99: {
                    100:   if (NULL (Vxterm))
                    101:     error ("Terminal does not understand X protocol.");
                    102: }
                    103: 
                    104: DEFUN ("x-pop-up-window", Fx_pop_up_window, Sx_pop_up_window, 0, 0, 0,
                    105:   "Make the X window appear on the screen.")
                    106:   ()
                    107: {
                    108:   check_xterm();
                    109:   XPopUpWindow();
                    110:   return Qnil;
                    111: }
                    112: 
                    113: DEFUN ("x-set-bell", Fx_set_bell, Sx_set_bell, 1, 1, "P",
                    114:   "For X window system, set audible vs visible bell.\n\
                    115: With non-nil argument (prefix arg), use visible bell; otherwise, audible bell.")
                    116:   (arg)
                    117:      Lisp_Object arg;
                    118: {
                    119:   check_xterm ();
                    120:   if (!NULL (arg))
                    121:     XSetFlash ();
                    122:   else
                    123:     XSetFeep ();
                    124:   return arg;
                    125: }
                    126: 
                    127: DEFUN ("x-flip-color", Fx_flip_color, Sx_flip_color, 0, 0, "",
                    128:   "Toggle the background and foreground colors (currently only black \n\
                    129: and white -- by default background is white -- Only effective at init")
                    130:   ()
                    131: {
                    132:   check_xterm ();
                    133:   XFlipColor ();
                    134:   return Qt;
                    135: }
                    136: 
                    137: DEFUN ("x-set-foreground-color", Fx_set_foreground_color,
                    138:        Sx_set_foreground_color, 1, 1, "sSet foregroud color:  ",
                    139:        "Set foreground (text) color to COLOR.")
                    140: (arg)
                    141: Lisp_Object arg;
                    142: {
                    143:     Color cdef;
                    144:     extern int PendingExposure;
                    145:     int (*func) ();
                    146:     extern Window XXwindow;
                    147:     extern FontInfo *fontinfo;
                    148:     char *save_color;
                    149:     save_color = fore_color;
                    150:     check_xterm ();
                    151:     CHECK_STRING (arg,1);
                    152:     fore_color = (char *) xmalloc (XSTRING (arg)->size + 1);
                    153:     func = signal (SIGIO, SIG_IGN);
                    154:     bcopy (XSTRING (arg)->data, fore_color, XSTRING (arg)->size + 1);
                    155:     if (fore_color && DisplayCells() > 2 &&
                    156:        XParseColor(fore_color, &cdef) && XGetHardwareColor(&cdef)) {
                    157:        fore = cdef.pixel;
                    158:     } else if (fore_color && strcmp(fore_color, "black") == 0) {
                    159:        fore = BlackPixel;
                    160:     } else if (fore_color && strcmp(fore_color, "white") == 0) {
                    161:        fore = WhitePixel;
                    162:     }
                    163:     else
                    164:       {
                    165:          fore_color = save_color;
                    166:       }
                    167: /*    XPixFill (XXwindow, 0, 0, screen_width * fontinfo->width,
                    168:              screen_height * fontinfo->height, back, ClipModeClipped,
                    169:              GXcopy, AllPlanes);*/
                    170:     Fredraw_display ();
                    171: /*    dumprectangle(0, 0, screen_height * fontinfo->height,
                    172:                  screen_width * fontinfo -> width);*/
                    173: /*    PendingExposure = 1;
                    174:       xfixscreen ();*/
                    175:     (void) signal (SIGIO, func);
                    176:     XFlush();
                    177:     return Qt;
                    178: }
                    179: 
                    180: DEFUN ("x-set-background-color", Fx_set_background_color,
                    181:        Sx_set_background_color, 1, 1, "sSet background color:  ",
                    182:        "Set background color to COLOR.")
                    183: (arg)
                    184: Lisp_Object arg;
                    185: {
                    186:     Color cdef;
                    187:     extern int PendingExposure;
                    188:     Pixmap temp;
                    189:     int (*func) ();
                    190:     char *save_color;
                    191:     extern Window XXwindow;
                    192:     check_xterm ();
                    193:     CHECK_STRING (arg,1);
                    194:     back_color = (char *) xmalloc (XSTRING (arg)->size + 1);
                    195:     bcopy (XSTRING (arg)->data, back_color, XSTRING (arg)->size + 1);
                    196:     func = signal (SIGIO, SIG_IGN);
                    197:     if (back_color && DisplayCells() > 2 &&
                    198:        XParseColor(back_color, &cdef) && XGetHardwareColor(&cdef)) {
                    199:        back = cdef.pixel;
                    200:     } else if (back_color && strcmp(back_color, "white") == 0) {
                    201:        back = WhitePixel;
                    202:     } else if (back_color && strcmp(back_color, "black") == 0) {
                    203:        back = BlackPixel;
                    204:     }
                    205:     else
                    206:       {
                    207:          back_color = save_color;
                    208:       }
                    209:     temp = XMakeTile(back);
                    210:     XChangeBackground (XXwindow, temp);
                    211: /*    XPixFill (XXwindow, 0, 0, screen_width * fontinfo->width,
                    212:              screen_height * fontinfo->height, back, ClipModeClipped,
                    213:              GXcopy, AllPlanes);*/
                    214:     (void) signal (SIGIO, func);
                    215:     Fredraw_display();
                    216: /*    dumprectangle(0, 0, screen_height * fontinfo->height,
                    217:                  screen_width * fontinfo -> width);*/
                    218: /*    PendingExposure = 1;
                    219:       xfixscreen ();*/
                    220:     XFlush();
                    221:     XFreePixmap (temp);
                    222:     return Qt;
                    223: }
                    224: 
                    225: DEFUN ("x-set-border-color", Fx_set_border_color, Sx_set_border_color, 1, 1,
                    226:        "sSet border color:  ",
                    227:        "Set border color to COLOR.")
                    228: (arg)
                    229: Lisp_Object arg;
                    230: {
                    231:     Color cdef;
                    232:     Pixmap temp;
                    233:     extern int XXborder;
                    234:     int (*func) ();
                    235:     extern Window XXwindow;
                    236:     check_xterm ();
                    237:     CHECK_STRING (arg,1);
                    238:     brdr_color= (char *) xmalloc (XSTRING (arg)->size + 1);
                    239:     bcopy (XSTRING (arg)->data, brdr_color, XSTRING (arg)->size + 1);
                    240:     func = signal (SIGIO, SIG_IGN);
                    241:     if (brdr_color && DisplayCells() > 2 &&
                    242:        XParseColor(brdr_color, &cdef) && XGetHardwareColor(&cdef))
                    243:       {
                    244:          temp = XMakeTile(cdef.pixel);
                    245:          brdr = cdef.pixel;
                    246:       }
                    247:     else if (brdr_color && strcmp(brdr_color, "black") == 0)
                    248:       {
                    249:          temp = BlackPixmap;
                    250:          brdr = BlackPixel;
                    251:       }
                    252:     else if (brdr_color && strcmp(brdr_color, "white") == 0)
                    253:       {
                    254:          temp = WhitePixmap;
                    255:          brdr = WhitePixel;
                    256:       }
                    257:     else
                    258:       {
                    259:          temp = XMakePixmap ((Bitmap) XStoreBitmap (16, 16, gray_bits),
                    260:                              BlackPixel, WhitePixel);
                    261:          brdr = BlackPixel;
                    262:          brdr_color = "gray";
                    263:       }
                    264:     if (XXborder)
                    265:       XChangeBorder (XXwindow, temp);
                    266:     (void) signal (SIGIO, func);
                    267:     XFreePixmap (temp);
                    268:     return Qt;
                    269: }
                    270: 
                    271: DEFUN ("x-set-cursor-color", Fx_set_cursor_color, Sx_set_cursor_color, 1, 1,
                    272:        "sSet text cursor color:  ",
                    273:        "Set text cursor color to COLOR.")
                    274: (arg)
                    275: Lisp_Object arg;
                    276: {
                    277:     Color cdef;
                    278:     extern Window XXwindow;
                    279:     int (*func) ();
                    280:     char *save_color;
                    281:     check_xterm ();
                    282:     CHECK_STRING (arg,1);
                    283:     curs_color = (char *) xmalloc (XSTRING (arg)->size + 1);
                    284:     func = signal (SIGIO, SIG_IGN);
                    285:     bcopy (XSTRING (arg)->data, curs_color, XSTRING (arg)->size + 1);
                    286:     if (curs_color && DisplayCells() > 2 &&
                    287:        XParseColor(curs_color, &cdef) && XGetHardwareColor(&cdef)) {
                    288:        curs = cdef.pixel;
                    289:     } else if (curs_color && strcmp(curs_color, "black") == 0) {
                    290:        curs = BlackPixel;
                    291:     } else if (curs_color && strcmp(curs_color, "white") == 0) {
                    292:        curs = WhitePixel;
                    293:     }
                    294:     else
                    295:       {
                    296:          curs_color = save_color;
                    297:       }
                    298:     (void) signal (SIGIO, func);
                    299:     CursorToggle();
                    300:     CursorToggle();
                    301:     return Qt;
                    302: }
                    303: 
                    304: DEFUN ("x-set-mouse-color", Fx_set_mouse_color, Sx_set_mouse_color, 1, 1,
                    305:        "sSet mouse cursor color:  ",
                    306:        "Set mouse cursor color to COLOR.")
                    307: (arg)
                    308: Lisp_Object arg;
                    309: {
                    310:     extern Cursor EmacsCursor;
                    311:     extern char MouseCursor[], MouseMask[];
                    312:     Cursor temp;
                    313:     int (*func) ();
                    314:     Color cdef;
                    315:     char *save_color;
                    316:     extern Window XXwindow;
                    317:     check_xterm ();
                    318:     CHECK_STRING (arg,1);
                    319:     mous_color = (char *) xmalloc (XSTRING (arg)->size + 1);
                    320:     func = signal (SIGIO, SIG_IGN);
                    321:     bcopy (XSTRING (arg)->data, mous_color, XSTRING (arg)->size + 1);
                    322:     if (mous_color && DisplayCells() > 2 &&
                    323:        XParseColor(mous_color, &cdef) && XGetHardwareColor(&cdef)) {
                    324:        mous = cdef.pixel;
                    325:     } else if (mous_color && strcmp(mous_color, "black") == 0) {
                    326:        mous = BlackPixel;
                    327:     } else if (mous_color && strcmp(mous_color, "white") == 0) {
                    328:        mous = WhitePixel;
                    329:     }
                    330:     else
                    331:       {
                    332:          mous_color = save_color;
                    333:       }
                    334:     temp = XCreateCursor(16, 16, MouseCursor, MouseMask, 0, 0,
                    335:                                mous, back, GXcopy);
                    336:     XDefineCursor (XXwindow, temp);
                    337:     XFreeCursor (EmacsCursor);
                    338:     (void) signal (SIGIO, func);
                    339:     bcopy(&temp, &EmacsCursor, sizeof(Cursor));
                    340:     return Qt;
                    341: }   
                    342: 
                    343: DEFUN ("x-color-p", Fx_color_p, Sx_color_p, 0, 0, "",
                    344:        "Returns t if the display is a color X terminal.")
                    345: ()
                    346: {
                    347:     check_xterm ();
                    348:     if (DisplayCells() > 2)
                    349:       return Qt;
                    350:     else
                    351:       return Qnil;
                    352: }
                    353:        
                    354: DEFUN ("x-get-foreground-color", Fx_get_foreground_color,
                    355:        Sx_get_foreground_color, 0, 0, "",
                    356:        "Returns the color of the foreground, as a string.")
                    357: ()
                    358: {
                    359:     Lisp_Object string;
                    360:     string = make_string(fore_color, strlen (fore_color));
                    361:     return string;
                    362: }
                    363: 
                    364: DEFUN ("x-get-background-color", Fx_get_background_color,
                    365:        Sx_get_background_color, 0, 0, "",
                    366:        "Returns the color of the background, as a string.")
                    367: ()
                    368: {
                    369:     Lisp_Object string;
                    370:     string = make_string(back_color, strlen (back_color));
                    371:     return string;
                    372: }
                    373: 
                    374: DEFUN ("x-get-border-color", Fx_get_border_color,
                    375:        Sx_get_border_color, 0, 0, "",
                    376:        "Returns the color of the border, as a string.")
                    377: ()
                    378: {
                    379:     Lisp_Object string;
                    380:     string = make_string(brdr_color, strlen (brdr_color));
                    381:     return string;
                    382: }
                    383: 
                    384: DEFUN ("x-get-cursor-color", Fx_get_cursor_color,
                    385:        Sx_get_cursor_color, 0, 0, "",
                    386:        "Returns the color of the cursor, as a string.")
                    387: ()
                    388: {
                    389:     Lisp_Object string;
                    390:     string = make_string(curs_color, strlen (curs_color));
                    391:     return string;
                    392: }
                    393: 
                    394: DEFUN ("x-get-mouse-color", Fx_get_mouse_color,
                    395:        Sx_get_mouse_color, 0, 0, "",
                    396:        "Returns the color of the mouse cursor, as a string.")
                    397: ()
                    398: {
                    399:     Lisp_Object string;
                    400:     string = make_string(mous_color, strlen (mous_color));
                    401:     return string;
                    402: }
                    403: 
                    404: DEFUN ("x-get-default", Fx_get_default, Sx_get_default, 1, 1,
                    405:        "sGet X default name:  ",
                    406:        "Get X default ATTRIBUTE from the system.  Returns nil if\n\
                    407: attribute does not exist.")
                    408: (arg)
                    409: Lisp_Object arg;
                    410: {
                    411:     char *default_name, *value;
                    412:     Lisp_Object return_string;
                    413:     extern char *malloc(), strcpy();
                    414:     check_xterm ();
                    415:     CHECK_STRING (arg,1);
                    416:     default_name = (char *) xmalloc (XSTRING (arg) -> size + 1);
                    417:     if (default_name == 0)
                    418:       {
                    419:          return Qnil;
                    420:       }
                    421:     else
                    422:       {
                    423:          bcopy (XSTRING (arg) -> data, default_name,
                    424:                 XSTRING (arg) -> size + 1);
                    425:          value = XGetDefault("emacs", default_name);
                    426:          if (value == 0)
                    427:            value = XGetDefault("", default_name);
                    428:          return make_string (value, value ? strlen (value) : 0);
                    429:       }
                    430: }    
                    431: 
                    432: DEFUN ("x-set-icon", Fx_set_icon, Sx_set_icon, 1, 1, "P",
                    433:   "Set type of icon used by X for Emacs's window.\n\
                    434: ARG non-nil means use kitchen-sink icon;\n\
                    435: nil means use generic window manager icon.")
                    436:   (arg)
                    437:      Lisp_Object arg;
                    438: {
                    439:   check_xterm ();
                    440:   if (NULL (arg))
                    441:     XTextIcon ();
                    442:   else
                    443:     XBitmapIcon ();
                    444:   return arg;
                    445: }
                    446: 
                    447: DEFUN ("x-set-font", Fx_set_font, Sx_set_font, 1, 1, "sFont Name: ",
                    448:       "At initialization sets the font to be used for the X window.")
                    449:   (arg)
                    450:      Lisp_Object arg;
                    451: {
                    452:   register char *newfontname;
                    453:   extern char *XXcurrentfont;
                    454:        
                    455:   CHECK_STRING (arg, 1);
                    456:   check_xterm ();
                    457: 
                    458:   newfontname = (char *) xmalloc (XSTRING (arg)->size + 1);
                    459:   bcopy (XSTRING (arg)->data, newfontname, XSTRING (arg)->size + 1);
                    460:   if (!XNewFont (newfontname))
                    461:     {
                    462:       free (XXcurrentfont);
                    463:       XXcurrentfont = newfontname;
                    464:       return Qt;
                    465:     }
                    466:   else
                    467:     {
                    468:       error ("Font %s is not defined", newfontname);
                    469:       free (newfontname);
                    470:     }
                    471: 
                    472:   return Qnil;
                    473: }
                    474: 
                    475: DEFUN ("x-set-window-edges", Fx_set_window_edges, Sx_set_window_edges, 4, 4,
                    476:   "nNumber of Columns: \nnNumber of Rows: \nnX Offset in Pixels: \n\
                    477: nY Offset in Pixels: ",
                    478:   "Sets X window size/position: size COLS by ROWS, positions XOFF and YOFF.\n\
                    479: To get \"minus zero\" for XOFF or YOFF, supply -1.")
                    480:   (cols, rows, xoffset, yoffset)
                    481:      Lisp_Object rows, cols, xoffset, yoffset;
                    482: {
                    483:   CHECK_NUMBER (rows, 1);
                    484:   CHECK_NUMBER (cols, 2);
                    485:   CHECK_NUMBER (xoffset, 3);
                    486:   CHECK_NUMBER (yoffset, 4);
                    487:   check_xterm ();
                    488: 
                    489:   x_edges_specified = 1;
                    490:   if (XINT (rows) != screen_width || XINT (cols) != screen_height) 
                    491:     {
                    492:       XSetWindowSize (XINT (rows), XINT (cols));
                    493:     }
                    494:   XSetOffset (XINT (xoffset), XINT (yoffset));
                    495:   XFlush ();
                    496:   return Qt;
                    497: }
                    498: 
                    499: DEFUN ("coordinates-in-window-p", Fcoordinates_in_window_p,
                    500:   Scoordinates_in_window_p, 2, 2,
                    501:   "xSpecify coordinate pair: \nXExpression which evals to window: ",
                    502:   "Return non-nil if POSITIONS (a list, (SCREEN-X SCREEN-Y)) is in WINDOW.\n\
                    503: Returned value is list of positions expressed\n\
                    504: relative to window upper left corner.")
                    505:   (coordinate, window)
                    506:      register Lisp_Object coordinate, window;
                    507: {
                    508:   register Lisp_Object xcoord, ycoord;
                    509:        
                    510:   if (!LISTP  (coordinate)) wrong_type_argument (Qlistp, coordinate);
                    511:   CHECK_WINDOW (window, 2);
                    512:   xcoord = Fcar (coordinate);
                    513:   ycoord = Fcar (Fcdr (coordinate));
                    514:   CHECK_NUMBER (xcoord, 0);
                    515:   CHECK_NUMBER (ycoord, 1);
                    516:   if ((XINT (xcoord) < XINT (XWINDOW (window)->left)) ||
                    517:       (XINT (xcoord) >= (XINT (XWINDOW (window)->left) +
                    518:                         XINT (XWINDOW (window)->width))))
                    519:     {
                    520:       return Qnil;
                    521:     } 
                    522:   XFASTINT (xcoord) -= XFASTINT (XWINDOW (window)->left);
                    523:   if (XINT (ycoord) == (screen_height - 1))
                    524:     return Qnil;
                    525:   if ((XINT (ycoord) < XINT (XWINDOW (window)->top)) ||
                    526:       (XINT (ycoord) >= (XINT (XWINDOW (window)->top) +
                    527:                         XINT (XWINDOW (window)->height)) - 1))
                    528:     {
                    529:       return Qnil;
                    530:     }
                    531:   XFASTINT (ycoord) -= XFASTINT (XWINDOW (window)->top);
                    532:   return (Fcons (xcoord, Fcons (ycoord, Qnil)));
                    533: }
                    534: 
                    535: DEFUN ("x-mouse-events", Fx_mouse_events, Sx_mouse_events, 0, 0, 0,
                    536:   "Return number of pending mouse events from X window system.")
                    537:   ()
                    538: {
                    539:   register Lisp_Object tem;
                    540:   register int windex, rindex, mindex;
                    541: 
                    542:   check_xterm ();
                    543:   windex = Xxrepbuffer.windex;
                    544:   rindex = Xxrepbuffer.rindex;
                    545:   mindex = Xxrepbuffer.mindex;
                    546: 
                    547:   if (windex >= rindex) 
                    548:     {
                    549:       XSET (tem, Lisp_Int, windex - rindex);
                    550:     }
                    551:   else
                    552:     {
                    553:       XSET (tem, Lisp_Int, mindex + 1 - (rindex - windex));
                    554:     }
                    555:   return tem;
                    556: }
                    557: 
                    558: DEFUN ("x-proc-mouse-event", Fx_proc_mouse_event, Sx_proc_mouse_event,
                    559:   0, 0, 0,
                    560:   "Pulls a mouse event out of the mouse event buffer and dispatches\n\
                    561: the appropriate function to act upon this event.")
                    562:   ()
                    563: {
                    564:   XButtonEvent xrep;
                    565:   extern FontInfo *fontinfo;
                    566:   register Lisp_Object Mouse_Cmd;
                    567:   register char com_letter;
                    568:   register char key_mask;
                    569:   register Lisp_Object tempx;
                    570:   register Lisp_Object tempy;
                    571:   extern Lisp_Object get_keyelt ();
                    572: 
                    573:   check_xterm ();
                    574:   if (unloadxrepbuffer (&xrep, &Xxrepbuffer) == 0) 
                    575:     {
                    576:       com_letter = xrep.detail & 3;
                    577:       key_mask = (xrep.detail >> 8) & 0xf0;
                    578:       com_letter |= key_mask;
                    579:       XSET (tempx, Lisp_Int, xrep.x/fontinfo->width);
                    580:       XSET (tempy, Lisp_Int, xrep.y/fontinfo->height);
                    581:       Vx_mouse_pos = Fcons (tempx, Fcons (tempy, Qnil));
                    582:       Mouse_Cmd = get_keyelt (access_keymap (MouseMap, com_letter));
                    583:       if (NULL (Mouse_Cmd)) 
                    584:        {
                    585:          Ding ();
                    586:          Vx_mouse_pos = Qnil;
                    587:        }
                    588:       else
                    589:        {
                    590:          return (call1 (Mouse_Cmd, Vx_mouse_pos));
                    591:        }
                    592:     }
                    593:   return Qnil;
                    594: }
                    595: 
                    596: DEFUN ("x-get-mouse-event", Fx_get_mouse_event, Sx_get_mouse_event,
                    597:   1, 1, 0,
                    598:   "Get next mouse event out of mouse event buffer (com-letter (x y)).\n\
                    599: ARG non-nil means return nil immediately if no pending event;\n\
                    600: otherwise, wait for an event.")
                    601:   (arg)
                    602:      Lisp_Object arg;
                    603: {
                    604:   XButtonEvent xrep;
                    605:   extern FontInfo *fontinfo;
                    606:   register Lisp_Object Mouse_Cmd;
                    607:   register char com_letter;
                    608:   register char key_mask;
                    609: 
                    610:   register Lisp_Object tempx;
                    611:   register Lisp_Object tempy;
                    612:   extern Lisp_Object get_keyelt ();
                    613: 
                    614:   check_xterm ();
                    615: 
                    616:   if (NULL (arg))
                    617:     while (Xxrepbuffer.windex == Xxrepbuffer.rindex);
                    618: /*** ??? Surely you don't mean to busy wait??? */
                    619:   if (unloadxrepbuffer (&xrep, &Xxrepbuffer) == 0) 
                    620:     {
                    621:       com_letter = *((char *)&xrep.detail);
                    622:       com_letter &= 3;
                    623:       key_mask = *((char *)&xrep.detail + 1);
                    624:       key_mask &= 0xf0;
                    625:       com_letter |= key_mask;
                    626:       XSET (tempx, Lisp_Int, xrep.x/fontinfo->width);
                    627:       XSET (tempy, Lisp_Int, xrep.y/fontinfo->height);
                    628:       Vx_mouse_pos = Fcons (tempx, Fcons (tempy, Qnil));
                    629:       return (Fcons (com_letter, Fcons (Vx_mouse_pos, Qnil)));
                    630:     }
                    631:   return Qnil;
                    632: }
                    633: 
                    634: DEFUN ("x-set-keyboard-enable", Fx_set_keyboard_enable,
                    635:   Sx_set_keyboard_enable, 1, 1, 0,
                    636:   "In the X window system, set the flag that permite keyboard input.\n\
                    637: Permit input if ARG is non-nil.")
                    638:   (arg)
                    639:      Lisp_Object arg;
                    640: {
                    641:   extern Window XXwindow;
                    642:   check_xterm ();
                    643: 
                    644:   XSelectInput (XXwindow,
                    645:                ExposeWindow | ButtonPressed | ExposeRegion | ExposeCopy
                    646:                | (!NULL (arg) ? KeyPressed : 0));
                    647:   return arg;
                    648: }
                    649: 
                    650: DEFUN ("x-set-mouse-inform-flag", Fx_set_mouse_inform_flag,
                    651:   Sx_set_mouse_inform_flag, 1, 1, 0,
                    652:   "Set inform-of-mouse-events flag in X window system on if ARG is non-nil.")
                    653:   (arg)
                    654:      Lisp_Object arg;
                    655: {
                    656:   extern int informflag;
                    657:   informflag = !NULL (arg);
                    658:   return arg;
                    659: }
                    660: 
                    661: DEFUN ("x-store-cut-buffer", Fx_store_cut_buffer, Sx_store_cut_buffer,
                    662:   1, 1, "sSend string to X:",
                    663:   "Store contents of STRING into the cut buffer of the X window system.")
                    664:   (string)
                    665:      register Lisp_Object string;
                    666: {
                    667:   CHECK_STRING (string, 1);
                    668:   check_xterm ();
                    669: 
                    670:   XStoreBytes (XSTRING (string)->data, XSTRING (string)->size);
                    671: 
                    672:   return Qnil;
                    673: }
                    674: 
                    675: DEFUN ("x-get-cut-buffer", Fx_get_cut_buffer, Sx_get_cut_buffer, 0, 0, 0,
                    676:   "Return contents of cut buffer of the X window system, as a string.")
                    677:   ()
                    678: {
                    679:   int len;
                    680:   register Lisp_Object string;
                    681:   register int (*func) ();
                    682:   register char *d;
                    683: 
                    684:   func = (int (*)()) (signal (SIGIO, SIG_IGN));
                    685:   d = XFetchBytes (&len);
                    686:   string = make_string (d, len);
                    687:   signal (SIGIO, func);
                    688:   return string;
                    689: }
                    690: 
                    691: DEFUN ("x-rubber-band", Fx_rubber_band, Sx_rubber_band, 0, 0, 0,
                    692:   "Ask user to specify Emacs window position and size with mouse.\n\
                    693: This is done automatically if the data has not been specified\n\
                    694: when Emacs needs the window to be displayed.")
                    695:   ()
                    696: {
                    697:   int x, y, width, height;
                    698:   extern int XXborder;
                    699:   extern int PendingExposure;
                    700:   extern char *default_window;
                    701:   register int (*handle) ();
                    702:   x_edges_specified = 1;
                    703: 
                    704:   check_xterm ();
                    705:   handle = signal (SIGIO, SIG_IGN);
                    706:   window_fetch (fontinfo->id, &x, &y, &width, &height, "", default_window,
                    707:                XXborder, "Gnuemacs");
                    708:   (void) signal (SIGIO, handle);
                    709:   XSetWindowSize (height, width);
                    710:   XSetOffset (x, y);
                    711:   XFlush();
                    712:   return Qnil;
                    713: }
                    714: 
                    715: DEFUN ("x-create-x-window", Fx_create_x_window, Sx_create_x_window,
                    716:        1, 1, 0,
                    717:        "Create window for gnuemacs from a valid GEOMETRY specification.")
                    718: (arg)
                    719: Lisp_Object arg;
                    720: {
                    721:   int x, y, width, height;
                    722:   extern int XXborder;
                    723:   extern int PendingExposure;
                    724:   char *geometry;
                    725:   register int (*handle) ();
                    726:   x_edges_specified = 1;
                    727: 
                    728:   check_xterm ();
                    729:   CHECK_STRING(arg, 1);
                    730:   geometry= (char *) xmalloc (XSTRING (arg)->size + 1);
                    731:   bcopy (XSTRING (arg)->data, geometry, XSTRING (arg)->size + 1);
                    732:   handle = signal (SIGIO, SIG_IGN);
                    733:   window_fetch (fontinfo->id, &x, &y, &width, &height, geometry,
                    734:                default_window, XXborder, "Gnuemacs");
                    735:   (void) signal (SIGIO, handle);
                    736:   XSetWindowSize (height, width);
                    737: /*  XSetWindowSize ((height - (2 * XXborder))/fontinfo -> height,
                    738:     (width - (2 * XXborder))/fontinfo -> width);*/
                    739:   XSetOffset (x, y);
                    740:   XMapWindow (XXwindow);
                    741:   XFlush();
                    742:   return Qnil;
                    743: }
                    744: 
                    745: DEFUN ("x-set-border-width", Fx_set_border_width, Sx_set_border_width,
                    746:   1, 1, 0,
                    747:   "Set width of border to WIDTH, in the X window system.\n\
                    748: Works only before the window has been mapped.")
                    749:   (borderwidth)
                    750:      register Lisp_Object borderwidth;
                    751: {
                    752:   extern int WindowMapped;
                    753:   extern int XXborder;
                    754:   WindowInfo WinInfo;
                    755:   extern Window XXwindow;
                    756:   extern FontInfo *fontinfo;
                    757:   extern Cursor EmacsCursor;
                    758:   extern char iconidentity[];
                    759:   register int (*func) ();
                    760:   extern int CurHL;
                    761:   Window tempwindow;
                    762:   extern int pixelwidth, pixelheight;
                    763:   register int temppixelwidth;
                    764:   register int temppixelheight;
                    765:   register int tempx;
                    766:   register int tempy;
                    767:   extern int XXxoffset, XXyoffset;
                    768:   extern int XXpid;
                    769:   Pixmap temp_brdr, temp_back;
                    770: 
                    771:   CHECK_NUMBER (borderwidth, 1);
                    772: 
                    773:   check_xterm ();
                    774:   
                    775:   if (XINT (borderwidth) < 0) XSETINT (borderwidth, 0);
                    776:   
                    777:   temppixelwidth = screen_width * fontinfo->width;
                    778:   temppixelheight = screen_height * fontinfo->height;
                    779:   func = signal (SIGIO, SIG_IGN);
                    780:   XQueryWindow (XXwindow, &WinInfo);
                    781:   tempx = WinInfo.x;
                    782:   tempy = WinInfo.y;
                    783:   if (strcmp (brdr_color, "gray") == 0)
                    784:     temp_brdr = XMakePixmap ((Bitmap) XStoreBitmap (16, 16, gray_bits),
                    785:                             BlackPixel, WhitePixel);
                    786:   else
                    787:     temp_brdr = XMakeTile(brdr);
                    788:   temp_back = XMakeTile(back);
                    789:   tempwindow = XCreateWindow (RootWindow,
                    790:                              tempx /* Absolute horizontal offset */,
                    791:                              tempy /* Absolute Vertical offset */,
                    792:                              temppixelwidth, temppixelheight,
                    793:                              XINT (borderwidth),
                    794:                              temp_brdr, temp_back);
                    795:   if (tempwindow) 
                    796:     {
                    797:       XDestroyWindow (XXwindow);
                    798:       XXwindow = tempwindow;
                    799:       pixelwidth = temppixelwidth;
                    800:       pixelheight = temppixelheight;
                    801:       XXborder = XINT (borderwidth);
                    802:       XSelectInput (XXwindow, NoEvent);
                    803:       XSetResizeHint (XXwindow, fontinfo->width * 10, fontinfo->height *5, 
                    804:                      fontinfo->width, fontinfo->height);
                    805:       XStoreName (XXwindow, &iconidentity[0]);
                    806:       XDefineCursor (XXwindow, EmacsCursor);
                    807:       XFreePixmap(temp_brdr);
                    808:       XFreePixmap(temp_back);
                    809:       (void)signal (SIGIO, func);
                    810:       if (QLength () > 0)
                    811:        {
                    812:          kill (XXpid, SIGIO);
                    813:        }
                    814:       if (WindowMapped)
                    815:        {
                    816:          XMapWindow (XXwindow);
                    817:          XSelectInput (XXwindow, KeyPressed | ExposeWindow |
                    818:                        ButtonPressed | ExposeRegion |
                    819:                          ExposeCopy);
                    820:          ++screen_garbaged;
                    821:          XFlush ();
                    822:        }
                    823:       return Qt;
                    824:     }
                    825:   else
                    826:     {
                    827:       (void) signal (SIGIO, func);
                    828:       if (QLength () > 0)
                    829:        {
                    830:          kill (XXpid, SIGIO);
                    831:        }
                    832:       message ("Could not recreate window.");
                    833:       return Qnil;
                    834:     }
                    835: }
                    836: 
                    837: jmp_buf dispenv;
                    838: Display *OldDisplay;
                    839: FontInfo *OldFontInfo;
                    840: Window OldWindow;
                    841: 
                    842: XRestoreDisplay ()
                    843: {
                    844:   longjmp (dispenv, "Unable to access display (probably)");
                    845: }
                    846: 
                    847: DEFUN ("x-change-display", Fx_change_display, Sx_change_display, 1, 1,
                    848:   "sNew display name: ", 
                    849:   "This function takes one argument, the display where you wish to\n\
                    850: continue your editing session.  Your current window will be unmapped and\n\
                    851: the current display will be closed.  The new X display will be opened and\n\
                    852: the rubber-band outline of the new window will appear on the new X display.\n\
                    853: This function does not look at your .Xdefaults file, so you should use the\n\
                    854: function x-new-display instead.")
                    855:   (new_display)
                    856:      register Lisp_Object new_display;
                    857: {
                    858:   extern Cursor EmacsCursor;
                    859:   Cursor OldEmacsCursor;
                    860:   register int (*sigfunc) (), (*pipefunc) ();
                    861:   register char *newdisplayname = 0;
                    862:   extern char iconidentity[];
                    863:   extern Display *XXdisplay;
                    864:   extern Window XXwindow;
                    865:   extern Window XXIconWindow;
                    866:   extern int IconWindow;
                    867:   extern Bitmap XXIconMask;
                    868:   extern int pixelwidth, pixelheight, XXborder, CurHL;
                    869:   extern FontInfo *fontinfo;
                    870:   extern int bitblt, CursorExists, VisibleX, VisibleY;
                    871:   extern WindowInfo rootwindowinfo;
                    872:   extern char MouseCursor[], MouseMask[];
                    873:   int old_fcntl_flags, old_fcntl_owner;
                    874:   int x, y, width, height;
                    875:   int temp_icon;
                    876:   Pixmap temp_brdr, temp_back;
                    877:   register char *XXerrorcode;
                    878:   extern int XXxoffset, XXyoffset;     
                    879: 
                    880:   CHECK_STRING (new_display, 1);
                    881:   check_xterm ();
                    882: 
                    883: /*  newdisplayname = xmalloc (XSTRING (new_display)->size + 1); */
                    884: /*  bcopy (XSTRING (new_display)->data, newdisplayname, */
                    885: /*      XSTRING (new_display)->size + 1);  */
                    886:   /* Since this was freed at the end, why not just use the original? */
                    887:   newdisplayname = (char *) XSTRING (new_display)->data;
                    888:   sigfunc = signal (SIGIO, SIG_IGN);
                    889:   XIOErrorHandler(XRestoreDisplay);
                    890:    if (XXerrorcode = (char *) setjmp (dispenv))
                    891:      {
                    892:  /*       free (&newdisplayname[0]); */
                    893:        if (fontinfo)
                    894:         XCloseFont (fontinfo);
                    895:        if (XXwindow)
                    896:         XDestroyWindow (XXwindow);
                    897:        if (XXdisplay)
                    898:         XCloseDisplay (XXdisplay);
                    899:        XXdisplay = OldDisplay;
                    900:        fontinfo = OldFontInfo;
                    901:        XXwindow = OldWindow;
                    902:        EmacsCursor = OldEmacsCursor;
                    903:        XIOErrorHandler (0);
                    904:        XSetDisplay (XXdisplay);
                    905:        (void)signal (SIGIO, sigfunc);
                    906:        if (QLength () > 0)
                    907:         {
                    908:           kill (XXpid, SIGIO);
                    909:         }
                    910:        error ("Display change problem: %s", XXerrorcode);
                    911:      }
                    912:    else
                    913:      {
                    914:        OldEmacsCursor = EmacsCursor;
                    915:        OldDisplay = XXdisplay;
                    916:        OldFontInfo = fontinfo;
                    917:        OldWindow = XXwindow;
                    918:        XXwindow = 0;
                    919:        fontinfo = 0;
                    920:        XXdisplay = 0;
                    921:      }
                    922:    XXdisplay = XOpenDisplay (newdisplayname);
                    923:    if (!XXdisplay)
                    924:      {
                    925:        longjmp (dispenv, "Probably nonexistant display");
                    926:      }
                    927:    XQueryWindow (RootWindow, &rootwindowinfo);
                    928:    fontinfo = XOpenFont (XXcurrentfont);
                    929:    if (!fontinfo)
                    930:      {
                    931:        longjmp (dispenv, "Bad font");
                    932:      }
                    933:    /* pixelwidth and pixelheight are correct*/
                    934:    XXwindow = XCreateWindow (RootWindow,
                    935:                             XXxoffset,
                    936:                             XXyoffset,
                    937:                             pixelwidth, pixelheight,
                    938:                             XXborder, BlackPixmap, WhitePixmap);
                    939:    if (!XXwindow)
                    940:      {
                    941:        longjmp (dispenv, "Could not create window");
                    942:      }
                    943:    fore = BlackPixel;
                    944:    back = WhitePixel;
                    945:    brdr = BlackPixel;
                    946:    mous = BlackPixel;
                    947:    curs = BlackPixel;
                    948: 
                    949:    fore_color = "black";
                    950:    back_color = "white";
                    951:    brdr_color = "black";
                    952:    mous_color = "black";
                    953:    curs_color = "black";
                    954: 
                    955:    XSelectInput (XXwindow, NoEvent);
                    956:    EmacsCursor = XCreateCursor (16, 16, MouseCursor, MouseMask,
                    957:                                0, 0, mous, back, GXcopy);
                    958:    XDefineCursor (XXwindow, EmacsCursor);
                    959: 
                    960:    XSetResizeHint (XXwindow, fontinfo->width * 10, fontinfo->height * 5, 
                    961:                  fontinfo->width, fontinfo->height);
                    962:    XStoreName (XXwindow, iconidentity);
                    963: /*  WindowMapped = 0;*/
                    964:   x_edges_specified = 0;
                    965:   bitblt = 0;
                    966:   CursorExists = 0;
                    967:   VisibleX = 0;
                    968:   VisibleY = 0;
                    969:   XSetDisplay (XXdisplay);
                    970: /*  XQueryWindow (RootWindow, &rootwindowinfo);*/
                    971: /*  if (WindowMapped)
                    972:     {*/
                    973:   WindowMapped = 0;
                    974:   XPopUpWindow ();
                    975: /*  }*/
                    976:   WindowMapped = 1;
                    977:   XXIconWindow = XCreateWindow (RootWindow, 0, 0, sink_width, sink_height,
                    978:                                2, WhitePixmap, BlackPixmap);
                    979:   XXIconMask = XStoreBitmap(sink_mask_width, sink_mask_height, sink_mask_bits);
                    980:   XSetDisplay (OldDisplay);
                    981:   XCloseFont (OldFontInfo);
                    982:   XFreeCursor (OldEmacsCursor);
                    983:   XDestroyWindow (OldWindow);
                    984:   XSetDisplay (XXdisplay);
                    985:   XCloseDisplay (OldDisplay);
                    986:   temp_icon = IconWindow;
                    987:   XBitmapIcon;
                    988:   XTextIcon;
                    989:   if (temp_icon)
                    990:     {
                    991:        IconWindow = 0;
                    992:        XBitmapIcon;
                    993:     }
                    994:   XErrorHandler (0);
                    995:   dup2 (dpyno (), 0);
                    996:   close (dpyno ());
                    997:   dpyno () = 0;                /* Looks a little strange? */
                    998:   /* check the def of the */
                    999:   /* macro, it is a genuine */
                   1000:   /* lvalue */
                   1001:   old_fcntl_flags = fcntl (0, F_GETFL, 0);
                   1002:   fcntl (0, F_SETFL, old_fcntl_flags | FASYNC);
                   1003:   old_fcntl_owner = fcntl (0, F_GETOWN, 0);
                   1004:   fcntl (0, F_SETOWN, getpid ());
                   1005:   (void)signal (SIGIO, sigfunc);
                   1006:   if (QLength () > 0)
                   1007:     {
                   1008:       kill (XXpid, SIGIO);
                   1009:     }
                   1010: /*  free (newdisplayname); */
                   1011: /*  x_edges_specified = 0;*/
                   1012:   ++screen_garbaged;
                   1013:   Fredraw_display();
                   1014:   return Qt;
                   1015: }
                   1016: 
                   1017: /*
                   1018:    Grabs mouse, outlines a window, etc.
                   1019:    if left button pressed, sizes a wd x hd window (in characters)
                   1020:    if right button pressed, sizes wd x what will fit window (in characters)
                   1021:    if middle button pressed, allows user to size window in font increments
                   1022:        (+ border * 2 for inner border);
                   1023:    While sizing, dimensions of window are displayed in upper left of root.
                   1024:    str is also displayed there.
                   1025:    In all cases, x and y are the desired coordinates for the upper lefthand
                   1026:        corner, *width = width desired, *height = height desired
                   1027:        (min for both is 1 font char).
                   1028: 
                   1029:        */
                   1030: /*
                   1031:   This routine is a total crock.  It makes a window using XCreateTerm
                   1032:   purely for return value, destroying the temporary window created in
                   1033:   the process.  If XCreateTerm were broken into smaller, more easily
                   1034:   digestible pieces, it would be useful.  As such, the constraints of
                   1035:   time, emacs, and X conventions force me into this crock. --rlk
                   1036:   */
                   1037: 
                   1038: window_fetch(font, x, y, width, height, geo, deflt, border, str)
                   1039: Font font;
                   1040: int *x, *y, *width, *height;
                   1041: char *geo, *deflt;
                   1042: int border;
                   1043: char *str;
                   1044: {
                   1045:   extern int WindowMapped;
                   1046:   extern int XXborder;
                   1047:   extern Window XXwindow;
                   1048:   extern FontInfo *fontinfo;
                   1049:   extern Cursor EmacsCursor;
                   1050:   OpaqueFrame frame;
                   1051:   extern char iconidentity[];
                   1052:   register int (*func) ();
                   1053:   Window tempwindow;
                   1054:   WindowInfo WinInfo;
                   1055:   extern int pixelwidth, pixelheight;
                   1056:   register int temppixelwidth;
                   1057:   register int temppixelheight;
                   1058:   extern int XXxoffset, XXyoffset;
                   1059:   extern int XXpid;
                   1060:   Pixmap temp_brdr, temp_back;
                   1061: 
                   1062:   func = signal (SIGIO, SIG_IGN);
                   1063:   temp_brdr = XMakeTile(brdr);
                   1064:   temp_back = XMakeTile(back);
                   1065:   frame.bdrwidth = border;
                   1066:   frame.border = XMakeTile (brdr);
                   1067:   frame.background = XMakeTile (back);
                   1068:   tempwindow = XCreateTerm(str, "emacs", geo, deflt, &frame, 10, 5, 0, 0,
                   1069:                           width, height, fontinfo, fontinfo->width,
                   1070:                           fontinfo->height);
                   1071:   if (tempwindow) 
                   1072:     {
                   1073:       XDestroyWindow (XXwindow);
                   1074:       XXwindow = tempwindow;
                   1075:       XSelectInput (XXwindow, NoEvent);
                   1076:       XSetResizeHint (XXwindow, fontinfo->width * 10, fontinfo->height *5, 
                   1077:                      fontinfo->width, fontinfo->height);
                   1078:       XStoreName (XXwindow, &iconidentity[0]);
                   1079:       XDefineCursor (XXwindow, EmacsCursor);
                   1080:       XQueryWindow (XXwindow, &WinInfo);
                   1081:       *x = WinInfo.x;
                   1082:       *y = WinInfo.y;
                   1083:       XFreePixmap(temp_brdr);
                   1084:       XFreePixmap(temp_back);
                   1085:       (void)signal (SIGIO, func);
                   1086:       if (QLength () > 0)
                   1087:        {
                   1088:          kill (XXpid, SIGIO);
                   1089:        }
                   1090:       if (WindowMapped)
                   1091:        {
                   1092:          XMapWindow (XXwindow);
                   1093:          XSelectInput (XXwindow, KeyPressed | ExposeWindow |
                   1094:                        ButtonPressed | ExposeRegion |
                   1095:                          ExposeCopy);
                   1096:          ++screen_garbaged;
                   1097:          XFlush ();
                   1098:        }
                   1099:       return Qt;
                   1100:     }
                   1101:   else
                   1102:     {
                   1103:       (void) signal (SIGIO, func);
                   1104:       if (QLength () > 0)
                   1105:        {
                   1106:          kill (XXpid, SIGIO);
                   1107:        }
                   1108:       message ("Could not recreate window.");
                   1109:       return Qnil;
                   1110:     }
                   1111: }
                   1112: 
                   1113: setxterm ()
                   1114: {
                   1115:   Vxterm = Qt;
                   1116: }
                   1117: 
                   1118: XRedrawDisplay()
                   1119: {
                   1120:     Fredraw_display();
                   1121: }
                   1122: 
                   1123: XAutoSave()
                   1124: {
                   1125:   Fdo_auto_save();
                   1126: }
                   1127: 
                   1128: 
                   1129: syms_of_xfns ()
                   1130: {
                   1131:   x_edges_specified = 0;
                   1132: 
                   1133:   DefLispVar("xterm", &Vxterm,
                   1134:             "True if using xterm, nil otherwise.");
                   1135:   Vxterm = Qnil;
                   1136:   DefLispVar("x-mouse-pos", &Vx_mouse_pos,
                   1137:      "Current x-y position of mouse by row, column as specified by font.");
                   1138:   Vx_mouse_pos = Qnil;
                   1139: 
                   1140:   defsubr (&Sx_pop_up_window);
                   1141:   defsubr (&Sx_set_bell);
                   1142:   defsubr (&Sx_flip_color);
                   1143:   defsubr (&Sx_set_icon);
                   1144:   defsubr (&Sx_set_font);
                   1145:   defsubr (&Sx_set_window_edges);
                   1146:   defsubr (&Scoordinates_in_window_p);
                   1147:   defsubr (&Sx_mouse_events);
                   1148:   defsubr (&Sx_proc_mouse_event);
                   1149:   defsubr (&Sx_get_mouse_event);
                   1150:   defsubr (&Sx_set_keyboard_enable);
                   1151:   defsubr (&Sx_set_mouse_inform_flag);
                   1152:   defsubr (&Sx_store_cut_buffer);
                   1153:   defsubr (&Sx_get_cut_buffer);
                   1154:   defsubr (&Sx_rubber_band);
                   1155:   defsubr (&Sx_create_x_window);
                   1156:   defsubr (&Sx_set_border_width);
                   1157:   defsubr (&Sx_change_display);
                   1158:   defsubr (&Sx_set_foreground_color);
                   1159:   defsubr (&Sx_set_background_color);
                   1160:   defsubr (&Sx_set_border_color);
                   1161:   defsubr (&Sx_set_cursor_color);
                   1162:   defsubr (&Sx_set_mouse_color);
                   1163:   defsubr (&Sx_get_foreground_color);
                   1164:   defsubr (&Sx_get_background_color);
                   1165:   defsubr (&Sx_get_border_color);
                   1166:   defsubr (&Sx_get_cursor_color);
                   1167:   defsubr (&Sx_get_mouse_color);
                   1168:   defsubr (&Sx_color_p);
                   1169:   defsubr (&Sx_get_default);
                   1170: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.