From: SID1::"SANDRE@clamart.wireline.slb.com" "Gr\igoire Sandr\i /SRPC-Clamart: (33 1" 4537 2892) 12-JUL-1995 12:35:03.97 To: sid1::"pmoreau@clamart.wireline.slb.com" CC: sid1::"SANDRE@clamart.wireline.slb.com" Subj: Une tres vilaine verrue au XSCREENSAVER v1.24-1 Patrick, J'ai ose ! Malgre une connaissance proche du zero de la programmation X, j'ai ose modifier Xscreensaver.c pour lui eviter les messages envoye de façon "intempestive ?" par le fileview et ses freres. En fait, je supposse que comme l'indique une note au sujet de la V1.24 le screen saver supporte mal d'avoir des messages qu'il n'a pas provoques. Or, si tu le lances comme une application "vue$*" et que tu recopie, sans honte, par exemple vue$clock.com cela peut donner un fichier appli du genre ci-dessous: ------------------------------------------------------------------------------- $! Copyright (c) 1988 Digital Equipment Corporation. All rights reserved. $! $! Command procedure to executive the screensaver $! $ set verify $ vue$suppress_output_popup $! $! See if we should skip the dialog box $! $ vue$get_symbol vue$show_hidden_dialogs $ vue$read show_hidden_dialogs $ $ if show_hidden_dialogs then goto select_qualifiers $ vue$get_qualifiers $ goto do_saver $ $select_qualifiers: $ vue$popup_qualifiers $ $do_saver: $ $ vue$read vue$command $ $ 'vue$command $ $ set default gs_login:[xscreensaver.XSCREENSAVER-1_24_1] $ show display $ @setup.com $ xscreensaver $ $ vue$check_verb_loop $ vue$read loop $ if "''loop'" .eqs. "TRUE" then goto select_qualifiers ------------------------------------------------------------------------------- (Gs_login n'a rien a voir avec les fantomes traitant du Postscript mais avec mes initiales) Avec cette procedure tu fais un choix dans le menu "applications" en validant les "..." puisque cela devrait marcher. Apres, tu lance ton ton choix de screen saver et tu te precipites vers "Work in progress" suivi d'un click sur le bouton "show output". Et la tu obtiens rapidement ce qui est dit dans la note avec 100% de cpu utilise (sur ma VS3000-76/SPX). De plus, si tu fais un "Hold Output" trop long, tu figes toutes tes fenetres tant que tu n'a pas tuee le process du Xscreens. Alors, j'ai ose un hack assez affreux (j'avais la flemme de verifier si les bons include etait la alors j'ai teste char par char) Pour eviter les messages "VUE_QUANTUM_MESSAGE", j'ai teste les quatres premieres lettres et renvoye False. Du coup, l'output est beaucoup plus calme, et en mode verbose, il donne quelque chose de ce type: XSCREENSAVER: ## unrecognised screensaver ClientMessage PRIMARY received XSCREENSAVER: ## unrecognised ClientMessage type INTEGER received XSCREENSAVER: ## unrecognised screensaver ClientMessage SECONDARY received XSCREENSAVER: ## unrecognised ClientMessage type INTEGER received XSCREENSAVER: ## unrecognised screensaver ClientMessage PRIMARY received XSCREENSAVER: VUE_ ClientMessage ignored: VUE_QUANTUM_MESSAGE . XSCREENSAVER: ## unrecognised ClientMessage type INTEGER received XSCREENSAVER: ## unrecognised screensaver ClientMessage SECONDARY received XSCREENSAVER: ## unrecognised ClientMessage type INTEGER received XSCREENSAVER: ## unrecognised screensaver ClientMessage PRIMARY received XSCREENSAVER: ## unrecognised ClientMessage type INTEGER received XSCREENSAVER: ## unrecognised screensaver ClientMessage SECONDARY received Le hack de la procedure "handle_clientmessage" dans xscreensaver.c ci-dessous compile uniquement si VMS est defini: ------------------------------------------------------------------------------- Bool handle_clientmessage (event, until_idle_p) XEvent *event; Bool until_idle_p; { Atom type; if (event->xclient.message_type != XA_SCREENSAVER) { char *str; str = XGetAtomName (dpy, event->xclient.message_type); #ifdef VMS if (str) { if (str[0] == 'V' && str[1] == 'U' && str[2] == 'E' && str[3] == '_') { if (verbose_p) printf ("%s: VUE_ ClientMessage ignored: %s .\n", progname, str); return False; } } #endif fprintf (stderr, "%s: %sunrecognised ClientMessage type %s received\n", progname, (verbose_p ? "## " : ""), (str ? str : "(null)")); if (str) XFree (str); } if (event->xclient.format != 32) ------------------------------------------------------------------------------- Je ne doutes pas que tu trouves beaucoup mieux et surtout plus general. Je suis interesse, ne serait-ce que pour montrer qu'avec l'antiquite de VMS, j'ai meme un screensaver qui change de demo, de recuperer un fix d'un niveau un peu plus eleve ! Pour info, à ftp.cs.wisc.edu /pub/ghost/aladdin il existe une version 3.33 de GS (pas moi !) qui fonctionne bien. Merci pour tes portages. Grégoire Sandré SRPC-Clamart Voice : (33) 1 4537 2892 Etudes et Production Schlumberger Fax : (33) 1 4631 3820 26 rue de la Cavee Email : sandre@clamart.wireline.slb.com 92140 Clamart ( gsandre@slb.com ) France