Annotation of GNUtools/emacs/etc/emacstool.c, revision 1.1

1.1     ! root        1: /* Copyright (C) 1986, 1988, 1990, 1991 Free Software Foundation, Inc.
        !             2: 
        !             3: This file is part of GNU Emacs.
        !             4: 
        !             5: GNU Emacs is free software; you can redistribute it and/or modify
        !             6: it under the terms of the GNU General Public License as published by
        !             7: the Free Software Foundation; either version 1, or (at your option)
        !             8: any later version.
        !             9: 
        !            10: GNU Emacs is distributed in the hope that it will be useful,
        !            11: but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !            13: GNU General Public License for more details.
        !            14: 
        !            15: You should have received a copy of the GNU General Public License
        !            16: along with GNU Emacs; see the file COPYING.  If not, write to
        !            17: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
        !            18: 
        !            19: /* For Emacs in SunView/Sun-Windows: (supported by Sun Unix v3.2 or greater)
        !            20:  * Insert a notifier filter-function to convert all useful input 
        !            21:  * to "key" sequences that emacs can understand.  See: Emacstool(1).
        !            22:  *
        !            23:  * Author: Jeff Peck, Sun Microsystems, Inc. <[email protected]>
        !            24:  *
        !            25:  * Original Idea: Ian Batten
        !            26:  * Updated 15-Mar-88, Jeff Peck: set IN_EMACSTOOL, TERM, TERMCAP
        !            27:  * Updated 10-Sep-88, Jeff Peck: add XVIEW and JLE support
        !            28:  * Updated  8-Oct-90, Jeff Peck: add Meta-bit for Xview
        !            29:  * Updated  6-Mar-91, Jeff Peck: Hack to detect -Wt invocation
        !            30:  *     [note, TTYSW limitation means you must Click-To-Type in Openwin]
        !            31:  *     [fixed in OW3 or use local/tty.o]
        !            32:  *     for better results, this should move to using TERMSW.
        !            33:  * Updated 30-Mar-91, Jeff Peck, et al: Enable using TERMSW (-DTTERM)
        !            34:  *     TERMSW understands point-to-type, even in OW2.
        !            35:  * Updated  5-Jun-91, Jeff Peck: Meta-key support fixed for OWv3
        !            36:  *                              Better event diagnostics for DEBUGEMACSTOOL
        !            37:  *
        !            38:  *     [note: xvetool should be started with the "-nw" flag for emacs!]
        !            39:  */
        !            40: 
        !            41: #ifdef XVIEW
        !            42: #include <xview/xview.h>
        !            43: #include <xview/panel.h>
        !            44: #include <xview/attr.h>
        !            45: #include <xview/tty.h>
        !            46: #include <xview/ttysw.h>               /* private defines */
        !            47: #include <xview/termsw.h>              /* -DTTERM */
        !            48: #include <xview/font.h>                        /* for testing */
        !            49: #else
        !            50: #include <suntool/sunview.h>
        !            51: #include <suntool/tty.h>
        !            52: #include <suntool/ttysw.h>
        !            53: #endif /* XVIEW */
        !            54: 
        !            55: #ifdef JLE
        !            56: # include <locale.h>
        !            57: #endif /* JLE */
        !            58: 
        !            59: #include <stdio.h>
        !            60: #include <sys/file.h>
        !            61: 
        !            62: #define BUFFER_SIZE 128                /* Size of all the buffers */
        !            63: 
        !            64: /* define WANT_CAPS_LOCK to make f-key T1 (aka F1) behave as CapsLock */
        !            65: #define WANT_CAPS_LOCK
        !            66: #ifdef WANT_CAPS_LOCK
        !            67: int caps_lock;         /* toggle indicater for f-key T1 caps lock */
        !            68: static char *Caps = "[CAPS] ";         /* Caps Lock prefix string */
        !            69: #define CAPS_LEN 7                     /* strlen (Caps) */
        !            70: #endif
        !            71: 
        !            72: static char *mouse_prefix = "\030\000";        /* C-x C-@ */
        !            73: static int   m_prefix_length = 2;       /* mouse_prefix length */
        !            74: 
        !            75: static char *key_prefix = "\030*";     /* C-x *   */
        !            76: static int   k_prefix_length = 2;       /* key_prefix length */
        !            77: 
        !            78: #ifdef JLE
        !            79: static char *emacs_name = "nemacs";    /* default run command */
        !            80: static char *title = "NEmacstool - ";  /* initial title */
        !            81: #else
        !            82: static char *emacs_name = "emacs";     /* default run command */
        !            83: static char *title = "Emacstool - ";   /* initial title */
        !            84: #endif /* JLE */
        !            85: 
        !            86: static char buffer[BUFFER_SIZE];       /* send to ttysw_input */
        !            87: static char *bold_name = 0;            /* for -bold option */
        !            88: 
        !            89: Frame frame;                            /* Base frame for system */
        !            90: 
        !            91: #ifndef TTERM
        !            92: #define SWTYPE TTY
        !            93: Tty tty_win;                           /* Where emacs is reading */
        !            94: #else
        !            95: #define SWTYPE TERMSW
        !            96: Termsw tty_win;                                /* Termsw does follow-mouse */
        !            97: #endif /* TTERM */
        !            98: 
        !            99: #ifdef XVIEW
        !           100: Xv_Window tty_view;                    /* Where the events are in Xview*/
        !           101: #else
        !           102: Tty tty_view;                          /* SunView place filler */
        !           103: #endif /* XVIEW */
        !           104: 
        !           105: int font_width, font_height;            /* For translating pixels to chars */
        !           106: int left_margin = 0;           /* default window -- frame offset */
        !           107: 
        !           108: int console_fd = 0;            /* for debugging: setenv DEBUGEMACSTOOL */
        !           109: FILE *console;                 /* for debugging: setenv DEBUGEMACSTOOL */
        !           110: 
        !           111: Icon frame_icon;
        !           112: /* make an icon_image for the default frame_icon */
        !           113: static short default_image[258] = 
        !           114: {
        !           115: #include <images/terminal.icon>
        !           116: };
        !           117: mpr_static(icon_image, 64, 64, 1, default_image);
        !           118: 
        !           119: /*
        !           120:  * Assign a value to a set of keys
        !           121:  */
        !           122: int
        !           123: button_value (event)
        !           124:      Event *event;
        !           125: {
        !           126:   int retval = 0;
        !           127:   /*
        !           128:    * Code up the current situation:
        !           129:    *
        !           130:    * 1 = MS_LEFT;
        !           131:    * 2 = MS_MIDDLE;
        !           132:    * 4 = MS_RIGHT;
        !           133:    * 8 = SHIFT;
        !           134:    * 16 = CONTROL;
        !           135:    * 32 = META;
        !           136:    * 64 = DOUBLE;
        !           137:    * 128 = UP;
        !           138:    */
        !           139: 
        !           140:   if (MS_LEFT   == (event_id (event))) retval = 1;
        !           141:   if (MS_MIDDLE == (event_id (event))) retval = 2;
        !           142:   if (MS_RIGHT  == (event_id (event))) retval = 4;
        !           143: 
        !           144:   if (event_shift_is_down (event)) retval += 8;
        !           145:   if (event_ctrl_is_down  (event)) retval += 16;
        !           146:   if (event_meta_is_down  (event)) retval += 32;
        !           147:   if (event_is_up         (event)) retval += 128;
        !           148:   return retval;
        !           149: }
        !           150: 
        !           151: /*
        !           152:  *  Variables to store the time of the previous mouse event that was
        !           153:  *  sent to emacs.
        !           154:  *
        !           155:  *  The theory is that to time double clicks while ignoreing UP buttons,
        !           156:  *  we must keep track of the accumulated time.
        !           157:  *
        !           158:  *  If someone writes a SUN-SET-INPUT-MASK for emacstool,
        !           159:  *  That could be used to selectively disable UP events, 
        !           160:  *  and then this cruft wouldn't be necessary.
        !           161:  */
        !           162: static long prev_event_sec = 0;
        !           163: static long prev_event_usec = 0;
        !           164: 
        !           165: /*
        !           166:  *  Give the time difference in milliseconds, where one second
        !           167:  *  is considered infinite.
        !           168:  */
        !           169: int
        !           170: time_delta (now_sec, now_usec, prev_sec, prev_usec)
        !           171:      long now_sec, now_usec, prev_sec, prev_usec;
        !           172: {
        !           173:   long sec_delta = now_sec - prev_sec;
        !           174:   long usec_delta = now_usec - prev_usec;
        !           175:   
        !           176:   if (usec_delta < 0) {                /* "borrow" a second */
        !           177:     usec_delta += 1000000;
        !           178:     --sec_delta;
        !           179:   }
        !           180:   
        !           181:   if (sec_delta >= 10) 
        !           182:     return (9999);             /* Infinity */
        !           183:   else
        !           184:     return ((sec_delta * 1000) + (usec_delta / 1000));
        !           185: }
        !           186: 
        !           187: 
        !           188: /*
        !           189:  * Filter function to translate selected input events for emacs
        !           190:  * Mouse button events become ^X^@(button x-col y-line time-delta) .
        !           191:  * Function keys: ESC-*{c}{lrt} l,r,t for Left, Right, Top; 
        !           192:  * {c} encodes the keynumber as a character [a-o]
        !           193:  */
        !           194: static Notify_value
        !           195: input_event_filter_function (window, event, arg, type)
        !           196: #ifdef XVIEW
        !           197:      Xv_Window window;
        !           198: #else /* not XVIEW */
        !           199:      Window window;
        !           200: #endif /* XVIEW */
        !           201:      Event *event;
        !           202:      Notify_arg arg;
        !           203:      Notify_event_type type;
        !           204: {
        !           205:   struct timeval time_stamp;
        !           206: 
        !           207:   /* if DEBUGEMACSTOOL is set, printout event information */
        !           208:   if (console_fd) {
        !           209:       fprintf(console, "Event: %s%s%c %d %d\n",
        !           210:              (event_ctrl_is_down(event) ? "C-" : "  "),
        !           211:              (event_meta_is_down(event) ? "M-" : "  "),
        !           212:              (((event_is_button    (event)) ? 'M' :
        !           213:                ((event_is_key_left  (event)) ? 'L' : 
        !           214:                 ((event_is_key_right (event)) ? 'R' : 
        !           215:                  ((event_is_key_top   (event)) ? 'T' :
        !           216:                   (((ASCII_FIRST <= event_id(event))
        !           217:                     && (event_id(event) <= ASCII_LAST)) ? 
        !           218:                    (((127 & event_id(event)) < 32) ?
        !           219:                     ((127 & event_id(event)) + 64) :
        !           220:                     ((127 & event_id(event)))) : '?')))))),
        !           221:              event_id(event),
        !           222:              event_action(event));
        !           223:   }
        !           224:   /* UP L1 is the STOP key */
        !           225:   if (event_id(event) == WIN_STOP) {
        !           226:       ttysw_input(tty_win, "\007\007\007\007\007\007\007", 7);
        !           227:       return NOTIFY_IGNORED;
        !           228:   }
        !           229: 
        !           230:   /* UP L5 & L7 is Expose & Open, let them pass to sunview */
        !           231:   if (event_id(event) == KEY_LEFT(5) || event_id(event) == KEY_LEFT(7)        !           232:       if (event_is_up (event)) 
        !           233:          return notify_next_event_func (window, event, arg, type);
        !           234:       else 
        !           235:          return NOTIFY_IGNORED;
        !           236: 
        !           237: 
        !           238:   { /* Do the mouse == button events */
        !           239:       if (event_is_button (event)) { /* do Mouse Button events */
        !           240:          time_stamp = event_time (event);
        !           241:          ttysw_input (tty_win, mouse_prefix, m_prefix_length);
        !           242:          sprintf (buffer, "(%d %d %d %d)\015", 
        !           243:                   button_value (event),
        !           244:                   (event_x (event) - left_margin) / font_width,
        !           245:                   event_y (event) / font_height,
        !           246:                   time_delta (time_stamp.tv_sec, time_stamp.tv_usec,
        !           247:                               prev_event_sec, prev_event_usec)
        !           248:                   );
        !           249:          ttysw_input (tty_win, buffer, strlen(buffer));
        !           250:          prev_event_sec = time_stamp.tv_sec;
        !           251:          prev_event_usec = time_stamp.tv_usec;
        !           252:          return NOTIFY_IGNORED; 
        !           253:       }
        !           254:   }
        !           255:   { /* Do the function key events */
        !           256:       int d;
        !           257:       char c = (char) 0;
        !           258:       if ((event_is_key_left  (event)) ?
        !           259:          ((d = event_id(event) - KEY_LEFT(1)   + 'a'), c='l') : 
        !           260:          ((event_is_key_right (event)) ?
        !           261:           ((d = event_id(event) - KEY_RIGHT(1) + 'a'), c='r') : 
        !           262:           ((event_is_key_top   (event)) ?
        !           263:            ((d = event_id(event) - KEY_TOP(1)  + 'a'), c='t') : 0))) {
        !           264:          if (event_is_up(event)) return NOTIFY_IGNORED;
        !           265:          if (event_shift_is_down (event)) c = c -  32;
        !           266:          /* this will give a non-{lrt} for unshifted keys */
        !           267:          if (event_ctrl_is_down  (event)) c = c -  64;
        !           268:          if (event_meta_is_down  (event)) c = c + 128;
        !           269: #ifdef WANT_CAPS_LOCK
        !           270:          /* set a toggle and relabel window so T1 can act like caps-lock */
        !           271:          if (event_id(event) == KEY_TOP(1)) {
        !           272:              /* make a frame label with and without CAPS */
        !           273:              strcpy (buffer, Caps); 
        !           274:              title = &buffer[CAPS_LEN];
        !           275:              strncpy (title, (char *)window_get (frame, FRAME_LABEL),
        !           276:                       BUFFER_SIZE - CAPS_LEN);
        !           277:              buffer[BUFFER_SIZE] = (char) 0;   
        !           278:              if (strncmp (title, Caps, CAPS_LEN) == 0)
        !           279:                  title += CAPS_LEN; /* already Caps */
        !           280:              caps_lock =  (caps_lock ? 0 : CAPS_LEN);
        !           281:              window_set(frame, FRAME_LABEL, (title -= caps_lock), 0);
        !           282:              return NOTIFY_IGNORED;
        !           283:          }
        !           284: #endif /* WANT_CAPS_LOCK */
        !           285:          ttysw_input (tty_win, key_prefix, k_prefix_length);
        !           286:          sprintf (buffer, "%c%c", d, c);
        !           287:          ttysw_input(tty_win, buffer, strlen(buffer));
        !           288: 
        !           289:          return NOTIFY_IGNORED;
        !           290:       }
        !           291:   }
        !           292: 
        !           293:   /* handle ascii keyboard events
        !           294:    * extract "event_is_ascii(event)" from the event_id, not the event_action
        !           295:    */
        !           296:   if ((ASCII_FIRST <= event_id(event)) && (event_id(event) <= ASCII_LAST)) {
        !           297:       /* ignore key-up events (button events have already been handled) */
        !           298:       if (event_is_up(event)) return NOTIFY_IGNORED;
        !           299: #ifdef WANT_CAPS_LOCK
        !           300:       /* shift alpha chars to upper case if toggle is set */
        !           301:       if ((caps_lock) && (event_id(event) >= 'a') && (event_id(event) <= 'z'))
        !           302:          event_set_id(event, (event_id(event) - 32));
        !           303: #endif /* WANT_CAPS_LOCK */
        !           304:       
        !           305: #ifndef NO_META_BIT
        !           306:       /* under Openwindows/X, the meta bit is not set in the key event,
        !           307:        * emacs expects this so we add it in here:
        !           308:        */
        !           309:       if (event_meta_is_down(event))
        !           310:          event_set_id(event, 128 | event_id(event));
        !           311: #endif /* NO_META_BIT */
        !           312:   }
        !           313:   return notify_next_event_func (window, event, arg, type);
        !           314: }
        !           315: 
        !           316: main (argc, argv)
        !           317:      int argc;
        !           318:      char **argv;
        !           319: {
        !           320:   int error_code;      /* Error codes */
        !           321:   
        !           322: #ifdef JLE
        !           323:   setlocale(LC_ALL, "");
        !           324: #endif /* JLE */
        !           325: 
        !           326:   if(getenv("DEBUGEMACSTOOL"))
        !           327:     console = fdopen (console_fd = open("/dev/console",O_WRONLY), "w");
        !           328: 
        !           329:   putenv("IN_EMACSTOOL=t");    /* notify subprocess that it is in emacstool */
        !           330: 
        !           331:   if (putenv("TERM=sun") != 0) /* TTY_WIN will be a TERM=sun window */
        !           332:     {fprintf (stderr, "%s: Could not set TERM=sun, using `%s'\n",
        !           333:             argv[0], (char *)getenv("TERM")) ;};
        !           334:   /*
        !           335:    * If TERMCAP starts with a slash, it is the pathname of the
        !           336:    * termcap file, not an entry extracted from it, so KEEP it!
        !           337:    * Otherwise, it may not relate to the new TERM, so Nuke-It.
        !           338:    * If there is no TERMCAP environment variable, don't make one.
        !           339:    */
        !           340:   {
        !           341:     char *termcap ;    /* Current TERMCAP value */
        !           342:     termcap = (char *)getenv("TERMCAP") ;
        !           343:     if (termcap && (*termcap != '/'))
        !           344:       {
        !           345:        if (putenv("TERMCAP=") != 0)
        !           346:          {fprintf (stderr, "%s: Could not clear TERMCAP\n", argv[0]) ;} ;
        !           347:       } ;
        !           348:   } ;
        !           349:   
        !           350:   /* find command to run as subprocess in window */
        !           351:   if (!(argv[0] = (char *)getenv("EMACSTOOL")))        /*  Set emacs command name */
        !           352:       argv[0] = emacs_name;                    
        !           353:   /* Emacstool recognizes two special args: -rc <file> and -bold <bold-name> */
        !           354:   for (argc = 1; argv[argc]; argc++)           /* Use last one on line */
        !           355:     {
        !           356:       if(!(strcmp ("-rc", argv[argc])))                /* Override if -rc given */
        !           357:        {int i = argc;
        !           358:         argv[argc--]=0;                /* kill the -rc argument */
        !           359:         if (argv[i+1]) {       /* move to argv[0] and squeeze the rest */
        !           360:           argv[0]=argv[i+1];
        !           361:           for (; argv[i+2]; (argv[i]=argv[i+2],argv[++i]=0));
        !           362:         }
        !           363:        }
        !           364: 
        !           365:       if (!(strcmp ("-bold", argv[argc]))) 
        !           366:          {int i = argc;
        !           367:           argv[argc--]=0;              /* kill the -bold argument */
        !           368:           if (argv[i+1]) {     /* move to bold_name and squeeze the rest */
        !           369:               bold_name = argv[i+1];
        !           370:               for (; argv[i+2]; (argv[i]=argv[i+2],argv[++i]=0));
        !           371:           }
        !           372:        }
        !           373:   };
        !           374: 
        !           375:   strcpy (buffer, title);
        !           376:   strncat (buffer, argv[0],             /* append run command name */
        !           377:           (BUFFER_SIZE - (strlen (buffer)) - (strlen (argv[0]))) - 1);
        !           378: 
        !           379:   error_code = interpose_on_window(argc,argv);
        !           380:   if (error_code != 0) {               /* Barf */
        !           381:       fprintf (stderr, "notify_interpose_event_func returns %d.\n", error_code);
        !           382:       exit (1);
        !           383:   }
        !           384: 
        !           385: #ifdef XVIEW
        !           386:   xv_main_loop (frame);                  /* And away we go */
        !           387: #else
        !           388:   window_main_loop (frame);
        !           389: #endif /* XVIEW */
        !           390: }
        !           391: 
        !           392: #ifdef XVIEW
        !           393: int interpose_on_window(argc,argv)
        !           394:     int argc;
        !           395:     char **argv;
        !           396: {
        !           397: #ifndef TTERM
        !           398: #ifdef FONT_WIDTH_ADJUST
        !           399:     int i, font_width_adjust = 1; /* hackery, and hueristics */
        !           400:     /* If -Wt is not supplied, OWv2 font defaults as lucidasans-12 (width=8)
        !           401:      * rather than the lucidasanstypewriter (width=7) actually used by ttysw.
        !           402:      * This hack attempts to workaround it.
        !           403:      */
        !           404:     for (i = 1; argv[i]; i++) {
        !           405:        if (!(strcmp ("-Wt", argv[i])) || !(strcmp ("-font", argv[i])))
        !           406:            {font_width_adjust = 0;
        !           407:             if (console_fd) fprintf(console, "-Wt = %d\n", font_width_adjust);
        !           408:             break;}
        !           409:     }
        !           410: #endif /* FONT_WIDTH_ADJUST */
        !           411: #endif /* not TTERM */
        !           412:     /* initialize Xview, and strip window args */
        !           413:     xv_init(XV_INIT_ARGC_PTR_ARGV, &argc, argv, 0);
        !           414: 
        !           415:     /* do this first, so arglist can override it */
        !           416:     frame_icon = icon_create (ICON_LABEL, "Emacstool",
        !           417:                              ICON_IMAGE, &icon_image,
        !           418:                              0);
        !           419: 
        !           420:     /* Build a frame to run in */
        !           421:     frame = xv_create ((Xv_Window)NULL, FRAME,
        !           422:                       FRAME_LABEL, buffer,
        !           423:                       FRAME_ICON, frame_icon,
        !           424:                       0);
        !           425: 
        !           426:     /* Create a tty with emacs in it */
        !           427:     tty_win = xv_create (frame, SWTYPE, WIN_IS_CLIENT_PANE,
        !           428:                         TTY_QUIT_ON_CHILD_DEATH, TRUE, 
        !           429:                         TTY_BOLDSTYLE, TTYSW_BOLD_INVERT,
        !           430:                         TTY_ARGV, argv, 
        !           431:                         0);
        !           432: 
        !           433:     if (bold_name) {
        !           434:        (void)xv_set(tty_win, TTY_BOLDSTYLE_NAME, bold_name, 0);
        !           435:     }
        !           436: 
        !           437:     {
        !           438:        Xv_font font;           /* declare temp font variable */
        !           439:        font = (Xv_font)xv_get (tty_win, XV_FONT);
        !           440:        font_height = (int)xv_get (font, FONT_DEFAULT_CHAR_HEIGHT);
        !           441:        font_width  = (int)xv_get (font, FONT_DEFAULT_CHAR_WIDTH);
        !           442:     }
        !           443:     if (console_fd) fprintf(console, "Width = %d\n", font_width);
        !           444: 
        !           445: #ifndef TTERM
        !           446: #ifdef FONT_WIDTH_ADJUST
        !           447:     font_width -= font_width_adjust; /* A guess! font cache bug in ttysw*/
        !           448: #endif /* FONT_WIDTH_ADJUST */
        !           449: #else
        !           450:     /* make the termsw act as a tty */
        !           451:     xv_set(tty_win, TERMSW_MODE, TTYSW_MODE_TYPE, 0);
        !           452:     /* termsw has variable offset depending on scrollbar size/location */
        !           453:     left_margin = (int)xv_get (tty_win, TEXTSW_LEFT_MARGIN);
        !           454: #endif /* TTERM */
        !           455: 
        !           456:     tty_view = (Xv_Window) xv_get (tty_win, OPENWIN_NTH_VIEW, 0);
        !           457:     xv_set(tty_view,
        !           458:           WIN_CONSUME_EVENTS, 
        !           459:           WIN_MOUSE_BUTTONS, WIN_UP_EVENTS,
        !           460:           ACTION_ADJUST, ACTION_MENU,
        !           461:           WIN_ASCII_EVENTS, 
        !           462:           WIN_LEFT_KEYS, WIN_TOP_KEYS, WIN_RIGHT_KEYS,
        !           463:           0,
        !           464:           0);
        !           465:     /* Interpose my event function */
        !           466:     return (int) notify_interpose_event_func 
        !           467:        (tty_view, input_event_filter_function, NOTIFY_SAFE);
        !           468: }
        !           469: #else /* not XVIEW */
        !           470: int interpose_on_window (argc, argv)
        !           471:  int argc;
        !           472:  char **argv;
        !           473: {
        !           474:     /* do this first, so arglist can override it */
        !           475:     frame_icon = icon_create (ICON_LABEL, "Emacstool",
        !           476:                              ICON_IMAGE, &icon_image,
        !           477:                              0);
        !           478: 
        !           479:     /* Build a frame to run in */
        !           480:     frame = window_create ((Window)NULL, FRAME,
        !           481:                           FRAME_LABEL, buffer,
        !           482:                           FRAME_ICON, frame_icon,
        !           483:                           FRAME_ARGC_PTR_ARGV, &argc, argv,
        !           484:                           0);
        !           485: 
        !           486:     /* Create a tty with emacs in it */
        !           487:     tty_win = window_create (frame, TTY, 
        !           488:                             TTY_QUIT_ON_CHILD_DEATH, TRUE, 
        !           489:                             TTY_BOLDSTYLE, TTYSW_BOLD_INVERT,
        !           490:                             TTY_ARGV, argv, 
        !           491:                             0);
        !           492: 
        !           493:     if (bold_name) {
        !           494:        (void)window_set(tty_win, TTY_BOLDSTYLE_NAME, bold_name, 0);
        !           495:     }
        !           496: 
        !           497:     /* ttysw uses pf_default, one must set WIN_FONT explicitly */
        !           498:                        window_set (tty_win, WIN_FONT, pf_default(), 0);
        !           499:     font_height = (int)window_get (tty_win, WIN_ROW_HEIGHT);
        !           500:     font_width  = (int)window_get (tty_win, WIN_COLUMN_WIDTH);
        !           501: 
        !           502:     tty_view = tty_win;
        !           503:     window_set(tty_view,
        !           504:               WIN_CONSUME_PICK_EVENTS, 
        !           505:               WIN_STOP,
        !           506:               WIN_MOUSE_BUTTONS, WIN_UP_EVENTS,
        !           507:               /* LOC_WINENTER, LOC_WINEXIT, LOC_MOVE, */
        !           508:               0,
        !           509:               WIN_CONSUME_KBD_EVENTS, 
        !           510:               WIN_STOP,
        !           511:               WIN_ASCII_EVENTS, 
        !           512:               WIN_LEFT_KEYS, WIN_TOP_KEYS, WIN_RIGHT_KEYS,
        !           513:               /* WIN_UP_ASCII_EVENTS, */
        !           514:               0,
        !           515:               0);
        !           516:     /* Interpose my event function */
        !           517:     return (int) notify_interpose_event_func 
        !           518:        (tty_view, input_event_filter_function, NOTIFY_SAFE);
        !           519: }
        !           520: #endif /* XVIEW */

unix.superglobalmegacorp.com

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