⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xtel.c

📁 VT100终端程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	XResizeWindow (dpy, iconWindow, xpma.width, xpma.height);	XSetWindowBackgroundPixmap (dpy, iconWindow, icon);	XtVaSetValues (w, XtNiconWindow, iconWindow, NULL);    }}#endif /* NO_XPM */void Usage (){    fprintf (stderr, "Options disponibles:\n");    fprintf (stderr, "-ng\n\tForce le mode niveaux de gris\n");    fprintf (stderr, "-petit\n\tSelectionne la petite fonte\n");    fprintf (stderr, "-br\n\tValide le bouton pour raccrocher\n");    fprintf (stderr, "-service service_xtel\n\tSelectionne le nom TCP du service XTel\n");    fprintf (stderr, "-serveur serveur_xtel\n\tSelectionne le nom du serveur XTel\n");    fprintf (stderr, "-low\n\tPas de jolis boutons\n");    fprintf (stderr, "--exec-procedure, -e nom_procedure\n\tExecute une procedure\n");    fprintf (stderr, "-private\n\tForce une colormap privee\n");    exit (1);}static void execute_procedure (w, proc, pevent)Widget w;char *proc;XEvent *pevent;{    Boolean fc;    int i;    XtVaGetValues (w, XtNconnecte, &fc, NULL);    if (!(fc || flag_execution)) {	flag_execution = True;		/* Composition du service */	start_procedure ((i = get_proc_index(proc)));	init_xtel ();	connexion_service (procedures[i].service);    }}/* Affichage/effacement du telephone de connexion */void affiche_telephone (){#ifdef LOW_MEMORY    XDefineCursor (XtDisplay(ecran_minitel), XtWindow(ecran_minitel), teleph_cursor);#else    if (!rsc_xtel.lowMemory)	XtMapWidget (teleph);    XDefineCursor (XtDisplay(ecran_minitel), XtWindow(ecran_minitel), teleph_cursor);#endif}void efface_telephone (){#ifdef LOW_MEMORY    XUndefineCursor (XtDisplay(ecran_minitel), XtWindow(ecran_minitel));#else    if (!rsc_xtel.lowMemory)	XtUnmapWidget (teleph);    XUndefineCursor (XtDisplay(ecran_minitel), XtWindow(ecran_minitel));#endif}/* Creation du curseur */void create_teleph_cursor (top)Widget top;{    Pixmap shape, mask;    Display *dpy = XtDisplay(top);    shape = XCreatePixmapFromBitmapData (dpy, DefaultRootWindow(dpy), teleph_bits, teleph_width, teleph_height, 1, 0, 1);    mask = XCreatePixmapFromBitmapData (dpy, DefaultRootWindow(dpy), teleph_mask_bits, teleph_mask_width, teleph_mask_height, 1, 0, 1);    teleph_cursor = XCreatePixmapCursor (dpy, shape, mask, &black, &white, 0, 0);}/* * Programme principal */main(ac, av)int ac;char **av;{    unsigned char c;    static char l;    char buf[256];    struct passwd *pw;    struct stat statb;    Boolean flag_point_xtel = False;    XColor exact;    int i;    Widget topLevel;    if (prototype_xtel == 0) {	if (PATCHLEVEL != 0)	    printf ("XTEL %d.%d.%d, Emulateur MINITEL %s\n", version_xtel, revision_xtel, PATCHLEVEL, copyright_string);	else	    printf ("XTEL %d.%d, Emulateur MINITEL %s\n", version_xtel, revision_xtel, copyright_string);    }    else {	if (PATCHLEVEL != 0)	    printf ("XTEL %d.%d.%db%d [beta], Emulateur MINITEL %s\n", version_xtel, revision_xtel, PATCHLEVEL, prototype_xtel, copyright_string);	else	    printf ("XTEL %d.%db%d [beta], Emulateur MINITEL %s\n", version_xtel, revision_xtel, prototype_xtel, copyright_string);    }    taille_zone_enregistrement = 1000;    mode_emulation = MODE_VIDEOTEX;#ifdef NO_NETWORK    unaddr.sun_family = AF_UNIX;    strcpy (unaddr.sun_path, XTEL_UNIX_PATH);#endif /* NO_NETWORK */    /*     * Allocation de la zone d'enregistrement par defaut     */    if ((zone_enregistrement = malloc (taille_zone_enregistrement)) == NULL) {	perror ("malloc");	exit (1);    }    XtSetLanguageProc (NULL, NULL, NULL);    if ((topLevel = init_toolkit (&ac, av)) == NULL) {	fprintf (stderr, "Erreur initialisation Toolkit, dommage...\n");	exit (1);    }    XSetErrorHandler (xtel_X_error_handler);    /*     * Options annexes     */    i = 1;    while (i < ac) {	if (strcmp (av[i], "-e") * strcmp (av[i], "--exec-procedure") == 0)	    procedure_executee = av[++i];	else if (av[i][0] != '-') {	    strcpy (nom_fichier_charge, av[i]);	}	else	    Usage ();	i++;    }    sprintf (buf, "%s-%d.%d", xtel_basename(av[0]), version_xtel, revision_xtel);    XtVaSetValues (topLevel, XtNtitle, buf, XtNiconName, buf, NULL);    /*     * lecture des ressources specifiques     */    XtGetApplicationResources (topLevel, &rsc_xtel, ressources, XtNumber(ressources), NULL, 0);    /* Colormap */    if (rsc_xtel.privateColormap) {	current_cmap = XCopyColormapAndFree (XtDisplay(topLevel), DefaultColormapOfScreen (XtScreen (topLevel)));	XtVaSetValues (topLevel, XtNcolormap, current_cmap, NULL);    }    else	current_cmap = DefaultColormapOfScreen (XtScreen (topLevel));    /* Noir et blanc */    if (!XAllocNamedColor (XtDisplay(topLevel), current_cmap, "white", &white, &exact)) {	fprintf (stderr, "Erreur XAllocNamedColor white\n");    }    else	white_pixel = white.pixel;    if (!XAllocNamedColor (XtDisplay(topLevel), current_cmap, "black", &black, &exact)) {	fprintf (stderr, "Erreur XAllocNamedColor black\n");    }    else	black_pixel = black.pixel;    /*      * Lecture des services disponibles      */#ifdef NO_NETWORK    if ((socket_xteld = socket (AF_UNIX, SOCK_STREAM, 0))  < 0) {	perror ("socket");	exit (1);    }    if (connect (socket_xteld, (struct sockaddr *)&unaddr, sizeof(unaddr)) < 0) {	perror ("connect");	exit (1);    }#else    if ((socket_xteld = c_clientbyname(rsc_xtel.serveur, rsc_xtel.nomService)) < 0) {	fprintf (stderr, "Erreur de connexion au serveur XTEL...\n");	exit (1);    }#endif /* NO_NETWORK    /* Transmet le nom d'utilisateur */    if ((pw = getpwuid(getuid())) == NULL) {	perror ("getpwuid");	exit(1);    }    l = strlen (pw->pw_name);    write (socket_xteld, &l, 1);    write (socket_xteld, pw->pw_name, l);    nb_services = 0;    for(;;) {	write (socket_xteld, CHAINE_COMMANDE_SERVICE_SUIVANT, 1);	read (socket_xteld, &c, 1);	if (c == VALEUR_REPONSE_PLUS_DE_SERVICE)	    break;	else { /* transmet la longueur de la chaine */	    int l = c;	    if (l != 0) {		read (socket_xteld, buf, l);		buf[l] = 0;		definition_services[nb_services].nom_service = build_name (buf);		entree_compose[nb_services] = definition_services[nb_services].nom_service;		write (socket_xteld, CHAINE_COMMANDE_NOM_UUCP, 1);		read (socket_xteld, &c, 1);		l = c;		definition_services[nb_services].nom_uucp = (char *) calloc (1, l+1);		read (socket_xteld, definition_services[nb_services].nom_uucp, l);		definition_services[nb_services].nom_uucp[l] = 0;#ifdef DEBUG		printf ("%d %s %s\n", nb_services, definition_services[nb_services].nom_service ,definition_services[nb_services].nom_uucp);#endif		nb_services++;	    }	    else {#ifdef DEBUG		fprintf (stderr, "entree %d interdite\n", nb_services);#endif	    }	}    }    close (socket_xteld);    /*     * Procedures et protocoles     */    sprintf (buf, "%s/.xtel", getenv ("HOME"));    flag_point_xtel = (stat (buf, &statb) == 0);    /* Procedures */    /* Ouvre le fichier $HOME/.xtelproc */    if (flag_point_xtel)	sprintf (buf, "%s/.xtel/procedures", getenv ("HOME"));    else	sprintf (buf, "%s/.xtelproc", getenv ("HOME"));    nb_procedures = init_procedures (buf);    /* Verifie la procedure a executer si il y lieu */    if (procedure_executee && get_proc_index (procedure_executee) < 0) {	fprintf (stderr, "procedure %s inexistante :-(\n", procedure_executee);	exit (1);    }    /*     * Protocoles de telechargement     */    if (flag_point_xtel)	sprintf (buf, "%s/.xtel/protocols", getenv ("HOME"));    else	sprintf (buf, "%s/.xtelproto", getenv ("HOME"));    nb_protocoles = init_protocoles (buf, &protocoles[0]);    /*      * Initialisation des widgets      */    if ((ecran_minitel = init_widgets (topLevel)) == NULL) {	fprintf (stderr, "Erreur initialisation widgets\n");	exit (1);    }    /* Creation du curseur telephone */    create_teleph_cursor (topLevel);    /*     * Contruction de l'icone     */    XtVaGetValues(topLevel, XtNiconPixmap, &pixmap_icone, NULL);    if (pixmap_icone == None) {#ifdef NO_XPM	XtVaSetValues (topLevel, XtNiconPixmap, XCreateBitmapFromData(XtDisplay(topLevel), XtScreen(topLevel)->root,  xtel_bits, xtel_width, xtel_height), NULL);#else	SetIconImage (topLevel);#endif /* NO_XPM */    }    XtRealizeWidget(topLevel);    XtAddCallback (ecran_minitel, XtNmodeCallback, (XtCallbackProc)selection_mode_emulation, (XtPointer)"A");    XtAddCallback (ecran_minitel, XtNenregCallback, (XtCallbackProc)enregistre_caractere, (XtPointer)NULL);    init_xtel ();    XtAddEventHandler (topLevel, LeaveWindowMask, False, (XtEventHandler)sauve_l_ecran, NULL);    if (procedure_executee)	XtAddEventHandler (ecran_minitel, ExposureMask, False, (XtEventHandler)execute_procedure, (XtPointer)procedure_executee);    if (nom_fichier_charge[0]) {	if (!Charge ())	    debut_lecteur ();    }    /* attente evenements */    XtAppMainLoop (app_context); }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -