Newsgroup: it.comp.software.newsreader
Titolo: [slrn] Faces

Visto che adesso vanno di moda le faces ho modificato lo script per le x-faces
per vedere anche le altre.
Ho fatto così, in modo brutale e grossolano:
--8<-- CUT HERE --8<-- 
% showFace.sl - Mettimi nella dir dove tieni le macro e aggiungi 
% interpret /path/delle/macro/showFace.sl 
% al tuo slrnrc
% Mostra le Faces con slrn
% Premi <ESC>F per vederle
define show_Face() 
{
   variable buf;
   save_current_article("/tmp/art_Face");
   variable header_file, Face_file;
   variable fp, Face_fp;
   variable line;
 
   fp = fopen ("/tmp/art_Face", "r");
   if (fp == NULL)
     return;
   while (-1 != fgets (&line, fp))
     {
        if (is_substr(line, "Face:" ))
          {
            Face_fp = fopen("/tmp/hdr_Face", "w");
            if (Face_fp == NULL)
              return;
            () = fputs(line, Face_fp);
            () = fputs("\n", Face_fp);
            () = fclose(Face_fp);
                               % Modifica il path dove hai
			       % installato viewFace 
() = system ("cat /tmp/hdr_Face|/home/kbs/bin/viewFace|rm -f /tmp/hdr_Face");
            break;
          }
     }
   () = system ("rm -f /tmp/art_Face");
}
definekey ("show_Face", "\eF", "article");
--8<-- CUT HERE --8<-- 
Ho poi fatto lo script viewFace per vederle con xv:
--8<-- CUT HERE --8<-- 
#!/bin/sh
tmpfile=Face.tmp
tmppng=Face.png
viewer=xv
cat - > $tmpfile
grep -i "^Face: " $tmpfile | \
sed "s/Face: /begin-base64 644 $tmppng\n/" > $tmpfile; \ 
echo "====" >> $tmpfile; \
uudecode $tmpfile
$viewer $tmppng
rm $tmpfile
rm $tmppng
--8<-- CUT HERE --8<-- 
Il tutto è poco elegante, ma funzionale.
Have fun ;^)
ciao
-- 
BOFH Excuse #70:
nesting roaches shorted out the ether cable
k|b|s ~> mailto `echo ti.gulgb@sbk|'rev'`

 Il tutto č poco elegante, ma funzionale.
/Domanda/: in caso di "doppia" header funziona?
Ciao.
-- 
 /   _ _ | Xnews e la documentazione in italiano
( (/( (/ | 
http://web.lacasadialice.it/alanford/

 /Domanda/: in caso di "doppia" header funziona?
No, l'ho fatto alla svelta per provare. Appena ho tempo vedo di mettere il
tutto in ordine.
ciao
-- 
BOFH Excuse #50:
Change in Earth's rotational speed


 /Domanda/: in caso di "doppia" header funziona?
se potrebbe fa', sarebbe necessario invertire l'ordine e magari fonderle
con un montage -geometry 48x48 face[12].png face.png
-- 
c.s.i. - tabula rasa elettrificata/m'importa 'na sega

 % interpret /path/delle/macro/showFace.sl 
[zac]
problemi: eventuali xface interferiscono (ma potresti usare una regex +
`string_match'); le face su piů linee ti danno merda.


 con un montage -geometry 48x48 face[12].png face.png
Hai provato a modificarlo?
-- 
BOFH Excuse #380:
Operators killed when huge stack of backup tapes fell over.


 `string_match'); le face su più linee ti danno merda.
Non sono uno scripter professionista... ;^)
-- 
BOFH Excuse #416:
We're out of slots on the server


> provato a modificarlo?
ne ho fatto un altro
--8<---------------cut here---------------start------------->8---
define show_Face() 
{
  save_current_article("art_face");
 
  variable fp, f_name;
  variable base, text;
  variable c = 2, i = 0;
 
  fp = fopen ("art_face", "r");
  if (fp == NULL)
    return -1;
  text = fgetslines (fp);
  if (text == NULL)
    return -1;
  () = fclose(fp);
  while ((text[i] != "\n") and (c > 0))
    {
      if (string_match(text[i], "^Face: ", 1))
	{
	  f_name = "hdr_face" + string(c);
	  fp = fopen(f_name + ".b64", "w");
	  if (fp == NULL)
	    return;
	  c--;
	  () = fputs("begin-base64 644 " + f_name + ".png\n", fp);
	  (base, ) = strreplace(strtrim(text[i], " \n"), "Face: ", "", 1);
	  i++;
	  while (strncmp(text[i], " ", 1) == 0)
	    {
	      base = base + strtrim(text[i], " \n");
	      i++;
	    }
	  () = fputs(base, fp);
	  () = fputs("\n====", fp);
	  () = fclose(fp);
	}
      else i++;
    }
  () = system("/home/pilosu/view_face.sh");
}
definekey("show_Face", "\eF", "article");
--8<---------------cut here---------------end--------------->8---
qui è il solo script ad essere platform dependent; nel caso di linux,
avendo il pacchetto imagemagick....
--8<---------------cut here---------------start------------->8---
#!/bin/sh
[ -f hdr_face2.b64 ] && {
    uudecode hdr_face[12].b64
    montage -geometry 48x48 hdr_face[12].png h_face.png
    display h_face.png
    rm -f art_face hdr_face[12].* h_face.png
}
--8<---------------cut here---------------end--------------->8---
-- 
the chemical brothers - surrender/music: response

 separatamente.
Sì, diciamo che per ora non è una delle cose prioritarie, ma rimane
comunque interessante :)


 Ma penso sia solo un problema di Winzip.
 
http://gnuwin32.sourceforge.net/packages/sharutils.htm
-- 
lost tribe - soulfish/it's not what it is

     <news:mesnews.7aec7d43....@s2.mail.invalid>
lo vedo senza problemi, non so da cosa dipenda. ma davvero non hai
installato le sharutils?
***
nuova versione della macro,
--8<---------------cut here---------------start------------->8---
define face_p ()
{
  variable face;
  face = extract_displayed_article_header ("Face");
  if (face != "") message ("Article's got FACE header(s)");
}
() = register_hook ("read_article_hook", "face_p");
define load_article_header (file)
{
  variable buf, fp, root, tail;
  variable list_type = struct { text, next };
 
  root = NULL;
 
  fp = fopen(file, "r");
  if (fp == NULL)
    return -1;
  while ((-1 != fgets (&buf, fp) and (buf != "\n")))
    {
      if (root == NULL)
	{
	  root = @list_type;
	  tail = root;
	}
      else
	{
	  tail.next = @list_type;
	  tail = tail.next;
	}
      tail.text = buf;
      tail.next = NULL;
    }
  () = fclose (fp);
  return root;
}
define show_Face() 
{
  save_current_article("art_face");
 
  variable fp, f_name, st;
  variable base;
  variable c = 2, i = 0;
  st = load_article_header("art_face");
  while ((st != NULL) and (c > 0))
    {
      if (string_match(st.text, "^Face: ", 1))
	{
	  f_name = "hdr_face" + string(c);
	  fp = fopen(f_name + ".b64", "w");
	  if (fp == NULL)
	    return;
	  c--;
	  () = fputs("begin-base64 644 " + f_name + ".png\n", fp);
	  (base, ) = strreplace(st.text, "Face: ", "", 1);
	  base = strtrim(base, " \n");
	  st = st.next;
	  while ((st != NULL) and (strncmp(st.text, " ", 1) == 0))
	    {
	      base = base + strtrim(st.text, " \n");
	      st = st.next;
	    }
	  () = fputs(base, fp);
	  () = fputs("\n====\n", fp);
	  () = fclose(fp);
	}
      else st = st.next;
    }
  () = system("/home/pilosu/view_face.sh &");
}
definekey("show_Face", "\eF", "article");
--8<---------------cut here---------------end--------------->8---
 
X-No-Archive: No
-- 
the clash - combat rock/05 - red angel dragnet

 --8<---------------cut here
Stessa cosa.
Facendo qualche esperimento in più (ho notato che neanche UUDeview lo
vede), ho provato a togliere qualche "=" dall'ultima riga, ed ecco che
come per magia il Winzip lo vede (con due o tre uguali, mentre con uno
o con quattro no).
Il programmino di *Alien321* funziona sempre (ovviamente solo sulla
stringa, non sul file).
Ciao (ma non stare ad impazzire, fa lo stesso...)
P.S. ho migliorato l'X-Face


 P.S. ho migliorato l'X-Face
è migliore dell'originale! 10x
-- 
moby - play/07 - bodyrock

 articolo su un vettore, quando va analizzato il solo header.
Sono ignorantissimo di vettori, ma il file `art_face' me lo ha fatto
lo stesso :)
Ciao.


 lo stesso :)
«caricare» in memoria. il file deve esserci.
-- 
the clash - combat rock/07 - overpowered by funk

 ho ri-riscritto la macro, ora è molto simile a quella di *k|b|s* (lol).
Cosa vuol dire quel LOL? Metti il dito nella piaga della mia capacità di
scripting? ;^) Hai ragione...
ciao
-- 
BOFH Excuse #300:
Digital Manipulator exceeding velocity parameters


 Hai ragione...
allora gioiamo a metà.
-- 
massimo zamboni - sorella sconfitta/santa maria elettrica