📄 main.c
字号:
{"ttyModes", "TtyModes", XtRString, sizeof(char *), offset(tty_modes), XtRString, (caddr_t) NULL}, {"utmpInhibit", "UtmpInhibit", XtRBoolean, sizeof (Boolean), offset(utmpInhibit), XtRString, "false"}, {"sunFunctionKeys", "SunFunctionKeys", XtRBoolean, sizeof (Boolean), offset(sunFunctionKeys), XtRString, "false"}, {"waitForMap", "WaitForMap", XtRBoolean, sizeof (Boolean), offset(wait_for_map), XtRString, "false"}, {"useInsertMode", "UseInsertMode", XtRBoolean, sizeof (Boolean), offset(useInsertMode), XtRString, "false"},};#undef offsetstatic char *fallback_resources[] = { "XTerm*SimpleMenu*menuLabel.vertSpace: 100", "XTerm*SimpleMenu*HorizontalMargins: 16", "XTerm*SimpleMenu*Sme.height: 16", "XTerm*SimpleMenu*Cursor: left_ptr", "XTerm*mainMenu.Label: Main Options (no app-defaults)", "XTerm*vtMenu.Label: VT Options (no app-defaults)", "XTerm*fontMenu.Label: VT Fonts (no app-defaults)", "XTerm*tekMenu.Label: Tek Options (no app-defaults)", NULL};/* Command line options table. Only resources are entered here...there is a pass over the remaining options after XrmParseCommand is let loose. */static XrmOptionDescRec optionDescList[] = {{"-geometry", "*vt100.geometry",XrmoptionSepArg, (caddr_t) NULL},{"-132", "*c132", XrmoptionNoArg, (caddr_t) "on"},{"+132", "*c132", XrmoptionNoArg, (caddr_t) "off"},{"-ah", "*alwaysHighlight", XrmoptionNoArg, (caddr_t) "on"},{"+ah", "*alwaysHighlight", XrmoptionNoArg, (caddr_t) "off"},{"-b", "*internalBorder",XrmoptionSepArg, (caddr_t) NULL},{"-cb", "*cutToBeginningOfLine", XrmoptionNoArg, (caddr_t) "off"},{"+cb", "*cutToBeginningOfLine", XrmoptionNoArg, (caddr_t) "on"},{"-cc", "*charClass", XrmoptionSepArg, (caddr_t) NULL},{"-cn", "*cutNewline", XrmoptionNoArg, (caddr_t) "off"},{"+cn", "*cutNewline", XrmoptionNoArg, (caddr_t) "on"},{"-cr", "*cursorColor", XrmoptionSepArg, (caddr_t) NULL},{"-cu", "*curses", XrmoptionNoArg, (caddr_t) "on"},{"+cu", "*curses", XrmoptionNoArg, (caddr_t) "off"},{"-dc", "*dynamicColors",XrmoptionNoArg, (caddr_t) "off"},{"+dc", "*dynamicColors",XrmoptionNoArg, (caddr_t) "on"},{"-e", NULL, XrmoptionSkipLine, (caddr_t) NULL},{"-fb", "*boldFont", XrmoptionSepArg, (caddr_t) NULL},{"-j", "*jumpScroll", XrmoptionNoArg, (caddr_t) "on"},{"+j", "*jumpScroll", XrmoptionNoArg, (caddr_t) "off"},/* parse logging options anyway for compatibility */{"-l", "*logging", XrmoptionNoArg, (caddr_t) "on"},{"+l", "*logging", XrmoptionNoArg, (caddr_t) "off"},{"-lf", "*logFile", XrmoptionSepArg, (caddr_t) NULL},{"-ls", "*loginShell", XrmoptionNoArg, (caddr_t) "on"},{"+ls", "*loginShell", XrmoptionNoArg, (caddr_t) "off"},{"-mb", "*marginBell", XrmoptionNoArg, (caddr_t) "on"},{"+mb", "*marginBell", XrmoptionNoArg, (caddr_t) "off"},{"-mc", "*multiClickTime", XrmoptionSepArg, (caddr_t) NULL},{"-ms", "*pointerColor",XrmoptionSepArg, (caddr_t) NULL},{"-nb", "*nMarginBell", XrmoptionSepArg, (caddr_t) NULL},{"-rw", "*reverseWrap", XrmoptionNoArg, (caddr_t) "on"},{"+rw", "*reverseWrap", XrmoptionNoArg, (caddr_t) "off"},{"-aw", "*autoWrap", XrmoptionNoArg, (caddr_t) "on"},{"+aw", "*autoWrap", XrmoptionNoArg, (caddr_t) "off"},{"-s", "*multiScroll", XrmoptionNoArg, (caddr_t) "on"},{"+s", "*multiScroll", XrmoptionNoArg, (caddr_t) "off"},{"-sb", "*scrollBar", XrmoptionNoArg, (caddr_t) "on"},{"+sb", "*scrollBar", XrmoptionNoArg, (caddr_t) "off"},{"-sf", "*sunFunctionKeys", XrmoptionNoArg, (caddr_t) "on"},{"+sf", "*sunFunctionKeys", XrmoptionNoArg, (caddr_t) "off"},{"-si", "*scrollTtyOutput", XrmoptionNoArg, (caddr_t) "off"},{"+si", "*scrollTtyOutput", XrmoptionNoArg, (caddr_t) "on"},{"-sk", "*scrollKey", XrmoptionNoArg, (caddr_t) "on"},{"+sk", "*scrollKey", XrmoptionNoArg, (caddr_t) "off"},{"-sl", "*saveLines", XrmoptionSepArg, (caddr_t) NULL},{"-t", "*tekStartup", XrmoptionNoArg, (caddr_t) "on"},{"+t", "*tekStartup", XrmoptionNoArg, (caddr_t) "off"},{"-tm", "*ttyModes", XrmoptionSepArg, (caddr_t) NULL},{"-tn", "*termName", XrmoptionSepArg, (caddr_t) NULL},{"-ut", "*utmpInhibit", XrmoptionNoArg, (caddr_t) "on"},{"+ut", "*utmpInhibit", XrmoptionNoArg, (caddr_t) "off"},{"-im", "*useInsertMode", XrmoptionNoArg, (caddr_t) "on"},{"+im", "*useInsertMode", XrmoptionNoArg, (caddr_t) "off"},{"-vb", "*visualBell", XrmoptionNoArg, (caddr_t) "on"},{"+vb", "*visualBell", XrmoptionNoArg, (caddr_t) "off"},{"-wf", "*waitForMap", XrmoptionNoArg, (caddr_t) "on"},{"+wf", "*waitForMap", XrmoptionNoArg, (caddr_t) "off"},/* bogus old compatibility stuff for which there are standard XtAppInitialize options now */{"%", "*tekGeometry", XrmoptionStickyArg, (caddr_t) NULL},{"#", ".iconGeometry",XrmoptionStickyArg, (caddr_t) NULL},{"-T", "*title", XrmoptionSepArg, (caddr_t) NULL},{"-n", "*iconName", XrmoptionSepArg, (caddr_t) NULL},{"-r", "*reverseVideo",XrmoptionNoArg, (caddr_t) "on"},{"+r", "*reverseVideo",XrmoptionNoArg, (caddr_t) "off"},{"-rv", "*reverseVideo",XrmoptionNoArg, (caddr_t) "on"},{"+rv", "*reverseVideo",XrmoptionNoArg, (caddr_t) "off"},{"-w", ".borderWidth", XrmoptionSepArg, (caddr_t) NULL},};static struct _options { char *opt; char *desc;} options[] = {{ "-help", "print out this message" },{ "-display displayname", "X server to contact" },{ "-geometry geom", "size (in characters) and position" },{ "-/+rv", "turn on/off reverse video" },{ "-bg color", "background color" },{ "-fg color", "foreground color" },{ "-bd color", "border color" },{ "-bw number", "border width in pixels" },{ "-fn fontname", "normal text font" },{ "-iconic", "start iconic" },{ "-name string", "client instance, icon, and title strings" },{ "-title string", "title string" },{ "-xrm resourcestring", "additional resource specifications" },{ "-/+132", "turn on/off column switch inhibiting" },{ "-/+ah", "turn on/off always highlight" },{ "-b number", "internal border in pixels" },{ "-/+cb", "turn on/off cut-to-beginning-of-line inhibit" },{ "-cc classrange", "specify additional character classes" },{ "-/+cn", "turn on/off cut newline inhibit" },{ "-cr color", "text cursor color" },{ "-/+cu", "turn on/off curses emulation" },{ "-fb fontname", "bold text font" },{ "-/+im", "use insert mode for TERMCAP" },{ "-/+j", "turn on/off jump scroll" },#ifdef ALLOWLOGGING{ "-/+l", "turn on/off logging" },{ "-lf filename", "logging filename" },#else{ "-/+l", "turn on/off logging (not supported)" },{ "-lf filename", "logging filename (not supported)" },#endif{ "-/+ls", "turn on/off login shell" },{ "-/+mb", "turn on/off margin bell" },{ "-mc milliseconds", "multiclick time in milliseconds" },{ "-ms color", "pointer color" },{ "-nb number", "margin bell in characters from right end" },{ "-/+aw", "turn on/off auto wraparound" },{ "-/+rw", "turn on/off reverse wraparound" },{ "-/+s", "turn on/off multiscroll" },{ "-/+sb", "turn on/off scrollbar" },{ "-/+sf", "turn on/off Sun Function Key escape codes" },{ "-/+si", "turn on/off scroll-on-tty-output inhibit" },{ "-/+sk", "turn on/off scroll-on-keypress" },{ "-sl number", "number of scrolled lines to save" },{ "-/+t", "turn on/off Tek emulation window" },{ "-tm string", "terminal mode keywords and characters" },{ "-tn name", "TERM environment variable name" },#ifdef UTMP{ "-/+ut", "turn on/off utmp inhibit" },#else{ "-/+ut", "turn on/off utmp inhibit (not supported)" },#endif{ "-/+vb", "turn on/off visual bell" },{ "-/+wf", "turn on/off wait for map before command exec" },{ "-e command args ...", "command to execute" },{ "%geom", "Tek window geometry" },{ "#geom", "icon window geometry" },{ "-T string", "title name for window" },{ "-n string", "icon name for window" },#ifdef TIOCCONS{ "-C", "intercept console messages" },#else{ "-C", "intercept console messages (not supported)" },#endif{ "-Sxxd", "slave mode on \"ttyxx\", file descriptor \"d\"" },{ "-/+dc", "turn off/on dynamic color selection" },{ "-jobs", "manual job control" },{ "-version", "display version information" },{ NULL, NULL }};static char *message[] = {"Fonts must be fixed width and, if both normal and bold are specified, must","have the same size. If only a normal font is specified, it will be used for","both normal and bold text (by doing overstriking). The -e option, if given,","must be appear at the end of the command line, otherwise the user's default","shell will be started. Options that start with a plus sign (+) restore the","default.",NULL};static void Syntax (badOption) char *badOption;{ struct _options *opt; int col; fprintf (stderr, "%s: bad command line option \"%s\"\r\n\n", ProgramName, badOption); fprintf (stderr, "usage: %s", ProgramName); col = 8 + strlen(ProgramName); for (opt = options; opt->opt; opt++) { int len = 3 + strlen(opt->opt); /* space [ string ] */ if (col + len > 79) { fprintf (stderr, "\r\n "); /* 3 spaces */ col = 3; } fprintf (stderr, " [%s]", opt->opt); col += len; } fprintf (stderr, "\r\n\nType %s -help for a full description.\r\n\n", ProgramName); exit (1);}static void Help (){ struct _options *opt; char **cpp; fprintf (stderr, "usage:\n %s [-options ...] [-e command args]\n\n", ProgramName); fprintf (stderr, "where options include:\n"); for (opt = options; opt->opt; opt++) { fprintf (stderr, " %-28s %s\n", opt->opt, opt->desc); } putc ('\n', stderr); for (cpp = message; *cpp; cpp++) { fputs (*cpp, stderr); putc ('\n', stderr); } putc ('\n', stderr); exit (0);}#ifdef TIOCCONS/* ARGSUSED */static BooleanConvertConsoleSelection(w, selection, target, type, value, length, format) Widget w; Atom *selection, *target, *type; XtPointer *value; unsigned long *length; int *format;{#ifdef DEBUGGING fprintf(stderr, "entered ConvertConsoleSelection\n");#endif /* we don't save console output, so can't offer it */ return False;}#endif /* TIOCCONS */extern WidgetClass xtermWidgetClass;Arg ourTopLevelShellArgs[] = { { XtNallowShellResize, (XtArgVal) TRUE }, { XtNinput, (XtArgVal) TRUE },};int number_ourTopLevelShellArgs = 2; XtAppContext app_con;Widget toplevel;Bool waiting_for_initial_map;extern void do_hangup();/* * DeleteWindow(): Action proc to implement ICCCM delete_window. *//* ARGSUSED */voidDeleteWindow(w, event, params, num_params) Widget w; XEvent *event; String *params; Cardinal *num_params;{#ifdef DEBUGGING fprintf(stderr, "entered DeleteWindow\n");#endif if (w == toplevel) if (term->screen.Tshow) hide_vt_window(); else do_hangup(w); else if (term->screen.Vshow) hide_tek_window(); else do_hangup(w);}/* ARGSUSED */voidKeyboardMapping(w, event, params, num_params) Widget w; XEvent *event; String *params; Cardinal *num_params;{#ifdef DEBUGGING fprintf(stderr, "entered KeyboardMapping\n");#endif switch (event->type) { case MappingNotify: XRefreshKeyboardMapping(&event->xmapping); break; }#ifdef DEBUGGING fprintf(stderr, "left KeyboardMapping\n");#endif}XtActionsRec actionProcs[] = { "DeleteWindow", DeleteWindow, "KeyboardMapping", KeyboardMapping,};Atom wm_delete_window;#ifdef GAPING_SECURITY_HOLE int resetuid = 1; /* Reset uid when spawning? */#endifmain (argc, argv)int argc;char **argv;{ register TScreen *screen; register int pty; int Xsocket, mode; char *base_name(); int xerror(), xioerror(); int jobs=0; /* Automatic/manual job control. -- JLM */#ifdef DEBUGGING fprintf(stderr, "entered Main\n");#endif ProgramName = argv[0]; ttydev = (char *) malloc (strlen (TTYDEV) + 1); ptydev = (char *) malloc (strlen (PTYDEV) + 1); if (!ttydev || !ptydev) { fprintf (stderr, "%s: unable to allocate memory for ttydev or ptydev\n", ProgramName); exit (1); } strcpy (ttydev, TTYDEV); strcpy (ptydev, PTYDEV);#ifdef USE_SYSV_TERMIO /* Initialization is done here rather than above in order ** to prevent any assumptions about the order of the contents ** of the various terminal structures (which may change from ** implementation to implementation). */#if defined(macII) || defined(ATT) || defined(CRAY) d_tio.c_iflag = ICRNL|IXON; d_tio.c_oflag = OPOST|ONLCR|TAB3; d_tio.c_cflag = B9600|CS8|CREAD|PARENB|HUPCL; d_tio.c_lflag = ISIG|ICANON|ECHO|ECHOE|ECHOK;#ifndef USE_TERMIOS d_tio.c_line = 0;#endif d_tio.c_cc[VINTR] = CINTR; d_tio.c_cc[VQUIT] = CQUIT; d_tio.c_cc[VERASE] = CERASE; d_tio.c_cc[VKILL] = CKILL; d_tio.c_cc[VEOF] = CEOF; d_tio.c_cc[VEOL] = CNUL; d_tio.c_cc[VEOL2] = CNUL; d_tio.c_cc[VSWTCH] = CNUL;#ifdef USE_TERMIOS d_tio.c_cc[VSUSP] = CSUSP; d_tio.c_cc[VDSUSP] = CDSUSP; d_tio.c_cc[VREPRINT] = CNUL; d_tio.c_cc[VDISCARD] = CNUL; d_tio.c_cc[VWERASE] = CNUL; d_tio.c_cc[VLNEXT] = CNUL;#endif#ifdef TIOCSLTC d_ltc.t_suspc = CSUSP; /* t_suspc */ d_ltc.t_dsuspc = CDSUSP; /* t_dsuspc */ d_ltc.t_rprntc = 0; /* reserved...*/ d_ltc.t_flushc = 0; d_ltc.t_werasc = 0; d_ltc.t_lnextc = 0;#endif /* TIOCSLTC */#ifdef TIOCLSET d_lmode = 0;#endif /* TIOCLSET */#else /* else !macII */ d_tio.c_iflag = ICRNL|IXON; d_tio.c_oflag = OPOST|ONLCR#ifndef BSD_TERMIOS /* NetBSD doesn't have TAB3, uses OXTABS -- JLM */ |TAB3#else |OXTABS#endif ;#ifdef BAUD_0 d_tio.c_cflag = CS8|CREAD|PARENB|HUPCL;#else /* !BAUD_0 */ d_tio.c_cflag = B9600|CS8|CREAD|PARENB|HUPCL;#endif /* !BAUD_0 */ d_tio.c_lflag = ISIG|ICANON|ECHO|ECHOE|ECHOK;#ifndef BSD_TERMIOS /* NetBSD doesn't have c_line -- JLM */ d_tio.c_line = 0;#endif d_tio.c_cc[VINTR] = 0x7f; /* DEL */ d_tio.c_cc[VQUIT] = '\\' & 0x3f; /* '^\' */ d_tio.c_cc[VERASE] = '#'; /* '#' */ d_tio.c_cc[VKILL] = '@'; /* '@' */ d_tio.c_cc[VEOF] = 'D' & 0x3f; /* '^D' */ d_tio.c_cc[VEOL] = '@' & 0x3f; /* '^@' */#ifdef VSWTCH d_tio.c_cc[VSWTCH] = '@' & 0x3f; /* '^@' */#endif /* VSWTCH */ /* now, try to inherit tty settings */ { int i; for (i = 0; i <= 2; i++) { struct termio deftio; if (ioctl (i, TCGETA, &deftio) == 0) { d_tio.c_cc[VINTR] = deftio.c_cc[VINTR]; d_tio.c_cc[VQUIT] = deftio.c_cc[VQUIT]; d_tio.c_cc[VERASE] = deftio.c_cc[VERASE]; d_tio.c_cc[VKILL] = deftio.c_cc[VKILL]; d_tio.c_cc[VEOF] = deftio.c_cc[VEOF]; d_tio.c_cc[VEOL] = deftio.c_cc[VEOL];#ifdef VSWTCH d_tio.c_cc[VSWTCH] = deftio.c_cc[VSWTCH];#endif /* VSWTCH */ break; } } }#ifdef TIOCSLTC d_ltc.t_suspc = '\000'; /* t_suspc */ d_ltc.t_dsuspc = '\000'; /* t_dsuspc */ d_ltc.t_rprntc = '\377'; /* reserved...*/ d_ltc.t_flushc = '\377'; d_ltc.t_werasc = '\377'; d_ltc.t_lnextc = '\377';#endif /* TIOCSLTC */#ifdef USE_TERMIOS d_tio.c_cc[VSUSP] = '\000'; d_tio.c_cc[VDSUSP] = '\000'; d_tio.c_cc[VREPRINT] = '\377'; d_tio.c_cc[VDISCARD] = '\377'; d_tio.c_cc[VWERASE] = '\377'; d_tio.c_cc[VLNEXT] = '\377';#endif#ifdef TIOCLSET d_lmode = 0;#endif /* TIOCLSET */#endif /* macII */#endif /* USE_SYSV_TERMIO */ /* Init the Toolkit. */ toplevel = XtAppInitialize (&app_con, "XTerm", optionDescList, XtNumber(optionDescList), &argc, argv, fallback_resources, NULL, 0); XtGetApplicationResources(toplevel, (XtPointer) &resource, application_resources, XtNumber(application_resources), NULL, 0); waiting_for_initial_map = resource.wait_for_map; /* * ICCCM delete_window.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -