<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="it">
	<id>https://www.raspibo.org/wiki/index.php?action=history&amp;feed=atom&amp;title=Fridge.c</id>
	<title>Fridge.c - Cronologia</title>
	<link rel="self" type="application/atom+xml" href="https://www.raspibo.org/wiki/index.php?action=history&amp;feed=atom&amp;title=Fridge.c"/>
	<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Fridge.c&amp;action=history"/>
	<updated>2026-05-08T22:16:32Z</updated>
	<subtitle>Cronologia della pagina su questo sito</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Fridge.c&amp;diff=781&amp;oldid=prev</id>
		<title>Renzo: Creata pagina con '&lt;pre&gt; /*   fridge.g send text and images on a Fridge Magnet display  *     *   Copyright 2013 Renzo Davoli Bologna - Italy  *     * This program is free software: you can redi...'</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Fridge.c&amp;diff=781&amp;oldid=prev"/>
		<updated>2013-05-16T14:27:54Z</updated>

		<summary type="html">&lt;p&gt;Creata pagina con &amp;#039;&amp;lt;pre&amp;gt; /*   fridge.g send text and images on a Fridge Magnet display  *     *   Copyright 2013 Renzo Davoli Bologna - Italy  *     * This program is free software: you can redi...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nuova pagina&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
/*   fridge.g send text and images on a Fridge Magnet display&lt;br /&gt;
 *   &lt;br /&gt;
 *   Copyright 2013 Renzo Davoli Bologna - Italy&lt;br /&gt;
 *   &lt;br /&gt;
 * This program is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 * &lt;br /&gt;
 * This program is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 * see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/stat.h&amp;gt;&lt;br /&gt;
#include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
#include &amp;lt;termios.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;poll.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define DISPLAYNODE 1&lt;br /&gt;
/* baudrate settings are defined in &amp;lt;asm/termbits.h&amp;gt;, which is&lt;br /&gt;
   included by &amp;lt;termios.h&amp;gt; */&lt;br /&gt;
#define BAUDRATE B57600            &lt;br /&gt;
#define _POSIX_SOURCE 1 /* POSIX compliant source */&lt;br /&gt;
&lt;br /&gt;
#define FALSE 0&lt;br /&gt;
#define TRUE 1&lt;br /&gt;
&lt;br /&gt;
const char font[][6] =&lt;br /&gt;
{&lt;br /&gt;
  {0x00,0x00,0x00,0x00,0x00,0x00}, // SPACE&lt;br /&gt;
&lt;br /&gt;
  {0x00,0x00,0x00,0x4F,0x00,0x00}, // !&lt;br /&gt;
  {0x00,0x00,0x07,0x00,0x07,0x00}, // &amp;quot;&lt;br /&gt;
  {0x00,0x14,0x7F,0x14,0x7F,0x14}, // #&lt;br /&gt;
  {0x00,0x24,0x2A,0x7F,0x2A,0x12}, // $&lt;br /&gt;
  {0x00,0x23,0x13,0x08,0x64,0x62}, // %&lt;br /&gt;
  {0x00,0x36,0x49,0x55,0x22,0x50}, // &amp;amp;&lt;br /&gt;
  {0x00,0x00,0x05,0x03,0x00,0x00}, // '&lt;br /&gt;
  {0x00,0x00,0x1C,0x22,0x41,0x00}, // (&lt;br /&gt;
  {0x00,0x00,0x41,0x22,0x1C,0x00}, // )&lt;br /&gt;
  {0x00,0x14,0x08,0x3E,0x08,0x14}, // *&lt;br /&gt;
  {0x00,0x08,0x08,0x3E,0x08,0x08}, // +&lt;br /&gt;
  {0x00,0x00,0x50,0x30,0x00,0x00}, // ,&lt;br /&gt;
  {0x00,0x08,0x08,0x08,0x08,0x08}, // -&lt;br /&gt;
  {0x00,0x00,0x60,0x60,0x00,0x00}, // .&lt;br /&gt;
  {0x00,0x20,0x10,0x08,0x04,0x02}, // /&lt;br /&gt;
&lt;br /&gt;
  {0x00,0x3E,0x51,0x49,0x45,0x3E}, // 0&lt;br /&gt;
  {0x00,0x00,0x42,0x7F,0x40,0x00}, // 1&lt;br /&gt;
  {0x00,0x42,0x61,0x51,0x49,0x46}, // 2&lt;br /&gt;
  {0x00,0x21,0x41,0x45,0x4B,0x31}, // 3&lt;br /&gt;
  {0x00,0x18,0x14,0x12,0x7F,0x10}, // 4&lt;br /&gt;
  {0x00,0x27,0x45,0x45,0x45,0x39}, // 5&lt;br /&gt;
  {0x00,0x3C,0x4A,0x49,0x49,0x30}, // 6&lt;br /&gt;
  {0x00,0x01,0x71,0x09,0x05,0x03}, // 7&lt;br /&gt;
  {0x00,0x36,0x49,0x49,0x49,0x36}, // 8&lt;br /&gt;
  {0x00,0x06,0x49,0x49,0x29,0x1E}, // 9&lt;br /&gt;
&lt;br /&gt;
  {0x00,0x36,0x36,0x00,0x00,0x00}, // :&lt;br /&gt;
  {0x00,0x56,0x36,0x00,0x00,0x00}, // ;&lt;br /&gt;
  {0x00,0x08,0x14,0x22,0x41,0x00}, // &amp;lt;&lt;br /&gt;
  {0x00,0x14,0x14,0x14,0x14,0x14}, // =&lt;br /&gt;
  {0x00,0x00,0x41,0x22,0x14,0x08}, // &amp;gt;&lt;br /&gt;
  {0x00,0x02,0x01,0x51,0x09,0x06}, // ?&lt;br /&gt;
  {0x00,0x30,0x49,0x79,0x41,0x3E}, // @&lt;br /&gt;
&lt;br /&gt;
  {0x00,0x7E,0x11,0x11,0x11,0x7E}, // A&lt;br /&gt;
  {0x00,0x7F,0x49,0x49,0x49,0x36}, // B&lt;br /&gt;
  {0x00,0x3E,0x41,0x41,0x41,0x22}, // C&lt;br /&gt;
  {0x00,0x7F,0x41,0x41,0x22,0x1C}, // D&lt;br /&gt;
  {0x00,0x7F,0x49,0x49,0x49,0x41}, // E&lt;br /&gt;
  {0x00,0x7F,0x09,0x09,0x09,0x01}, // F&lt;br /&gt;
  {0x00,0x3E,0x41,0x49,0x49,0x7A}, // G&lt;br /&gt;
  {0x00,0x7F,0x08,0x08,0x08,0x7F}, // H&lt;br /&gt;
  {0x00,0x00,0x41,0x7F,0x41,0x00}, // I&lt;br /&gt;
  {0x00,0x20,0x40,0x41,0x3F,0x01}, // J&lt;br /&gt;
  {0x00,0x7F,0x08,0x14,0x22,0x41}, // K&lt;br /&gt;
  {0x00,0x7F,0x40,0x40,0x40,0x40}, // L&lt;br /&gt;
  {0x00,0x7F,0x02,0x0C,0x02,0x7F}, // M&lt;br /&gt;
  {0x00,0x7F,0x04,0x08,0x10,0x7F}, // N&lt;br /&gt;
  {0x00,0x3E,0x41,0x41,0x41,0x3E}, // O&lt;br /&gt;
  {0x00,0x7F,0x09,0x09,0x09,0x06}, // P&lt;br /&gt;
  {0x00,0x3E,0x41,0x51,0x21,0x5E}, // Q&lt;br /&gt;
  {0x00,0x7F,0x09,0x19,0x29,0x46}, // R&lt;br /&gt;
  {0x00,0x46,0x49,0x49,0x49,0x31}, // S&lt;br /&gt;
  {0x00,0x01,0x01,0x7F,0x01,0x01}, // T&lt;br /&gt;
  {0x00,0x3F,0x40,0x40,0x40,0x3F}, // U&lt;br /&gt;
  {0x00,0x1F,0x20,0x40,0x20,0x1F}, // V&lt;br /&gt;
  {0x00,0x3F,0x40,0x30,0x40,0x3F}, // W&lt;br /&gt;
  {0x00,0x63,0x14,0x08,0x14,0x63}, // X&lt;br /&gt;
  {0x00,0x07,0x08,0x70,0x08,0x07}, // Y&lt;br /&gt;
  {0x00,0x61,0x51,0x49,0x45,0x43}, // Z&lt;br /&gt;
&lt;br /&gt;
  {0x00,0x00,0x7F,0x41,0x41,0x00}, // [&lt;br /&gt;
  {0x00,0x02,0x04,0x08,0x10,0x20}, // backslash&lt;br /&gt;
  {0x00,0x00,0x41,0x41,0x7F,0x00}, // ]&lt;br /&gt;
  {0x00,0x04,0x02,0x01,0x02,0x04}, // ^&lt;br /&gt;
  {0x00,0x40,0x40,0x40,0x40,0x40}, // _&lt;br /&gt;
  {0x00,0x00,0x01,0x02,0x04,0x00}, // `&lt;br /&gt;
&lt;br /&gt;
  {0x00,0x20,0x54,0x54,0x54,0x78}, // a&lt;br /&gt;
  {0x00,0x7F,0x50,0x48,0x48,0x30}, // b&lt;br /&gt;
  {0x00,0x38,0x44,0x44,0x44,0x20}, // c&lt;br /&gt;
  {0x00,0x38,0x44,0x44,0x48,0x7F}, // d&lt;br /&gt;
  {0x00,0x38,0x54,0x54,0x54,0x18}, // e&lt;br /&gt;
  {0x00,0x08,0x7E,0x09,0x01,0x02}, // f&lt;br /&gt;
  {0x00,0x0C,0x52,0x52,0x52,0x3E}, // g&lt;br /&gt;
  {0x00,0x7F,0x08,0x04,0x04,0x78}, // h&lt;br /&gt;
  {0x00,0x00,0x44,0x7D,0x40,0x00}, // i&lt;br /&gt;
  {0x00,0x20,0x40,0x44,0x3D,0x00}, // j&lt;br /&gt;
  {0x00,0x7F,0x10,0x28,0x44,0x00}, // k&lt;br /&gt;
  {0x00,0x00,0x41,0x7F,0x40,0x00}, // l&lt;br /&gt;
  {0x00,0x78,0x04,0x58,0x04,0x78}, // m&lt;br /&gt;
  {0x00,0x7C,0x08,0x04,0x04,0x78}, // n&lt;br /&gt;
  {0x00,0x38,0x44,0x44,0x44,0x38}, // o&lt;br /&gt;
  {0x00,0x7C,0x14,0x14,0x14,0x08}, // p&lt;br /&gt;
  {0x00,0x08,0x14,0x14,0x18,0x7C}, // q&lt;br /&gt;
  {0x00,0x7C,0x08,0x04,0x04,0x08}, // r&lt;br /&gt;
  {0x00,0x48,0x54,0x54,0x54,0x20}, // s&lt;br /&gt;
  {0x00,0x04,0x3F,0x44,0x40,0x20}, // t&lt;br /&gt;
  {0x00,0x3C,0x40,0x40,0x20,0x7C}, // u&lt;br /&gt;
  {0x00,0x1C,0x20,0x40,0x20,0x1C}, // v&lt;br /&gt;
  {0x00,0x3C,0x40,0x30,0x40,0x3C}, // w&lt;br /&gt;
  {0x00,0x44,0x28,0x10,0x28,0x44}, // x&lt;br /&gt;
  {0x00,0x0C,0x50,0x50,0x50,0x3C}, // y&lt;br /&gt;
  {0x00,0x44,0x64,0x54,0x4C,0x44}, // z&lt;br /&gt;
&lt;br /&gt;
  {0x00,0x00,0x08,0x36,0x41,0x00}, // {&lt;br /&gt;
  {0x00,0x00,0x00,0x7F,0x00,0x00}, // |&lt;br /&gt;
  {0x00,0x00,0x41,0x36,0x08,0x00}, // }&lt;br /&gt;
{0x00,0x0C,0x02,0x0C,0x10,0x0C}, // ~&lt;br /&gt;
&lt;br /&gt;
{0x00,0x00,0x00,0x00,0x00,0x00}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
unsigned char screen[176][33];&lt;br /&gt;
&lt;br /&gt;
void buildgraphic(void)&lt;br /&gt;
{&lt;br /&gt;
  static int status=0;&lt;br /&gt;
  unsigned char *s= &amp;amp;screen[0][0];&lt;br /&gt;
  unsigned char *base=s;&lt;br /&gt;
  int num=0;&lt;br /&gt;
  int c;&lt;br /&gt;
  while((c=getchar()) != EOF) {&lt;br /&gt;
    switch (status) {&lt;br /&gt;
      case 0:&lt;br /&gt;
        if (c=='{') status = 1;&lt;br /&gt;
        break;&lt;br /&gt;
      case 1:&lt;br /&gt;
        if (c=='0') { status = 8; break; }&lt;br /&gt;
        if (c&amp;gt;='1' &amp;amp;&amp;amp; c &amp;lt;= '9')&lt;br /&gt;
          status=10;&lt;br /&gt;
        else&lt;br /&gt;
          break;&lt;br /&gt;
      case 10:&lt;br /&gt;
        if (c&amp;gt;='0' &amp;amp;&amp;amp; c &amp;lt;= '9') num = (num * 10) | (c - '0');&lt;br /&gt;
        else if (c==',') {&lt;br /&gt;
          *(s++) = num; num=0; status=1;&lt;br /&gt;
          if (s - base &amp;gt;= 5808) return;&lt;br /&gt;
        }&lt;br /&gt;
        else if (c=='}') {&lt;br /&gt;
          *(s++) = num; num=0; status=1;&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
        break;&lt;br /&gt;
      case 8:&lt;br /&gt;
        if (c=='x') status = 16;&lt;br /&gt;
        else if (c&amp;gt;='0' &amp;amp;&amp;amp; c &amp;lt;= '7') num = (num &amp;lt;&amp;lt; 3) | (c - '0');&lt;br /&gt;
        else if (c==',') {&lt;br /&gt;
          *(s++) = num; num=0; status=1;&lt;br /&gt;
          if (s - base &amp;gt;= 5808) return;&lt;br /&gt;
        }&lt;br /&gt;
        else if (c=='}') {&lt;br /&gt;
          *(s++) = num; num=0; status=1;&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
        break;&lt;br /&gt;
      case 16:&lt;br /&gt;
        if (c&amp;gt;='0' &amp;amp;&amp;amp; c &amp;lt;= '9') num = (num &amp;lt;&amp;lt; 4) | (c - '0');&lt;br /&gt;
        else if (c&amp;gt;='a' &amp;amp;&amp;amp; c &amp;lt;= 'f') num = (num &amp;lt;&amp;lt; 4) | (c + 10 - 'a');&lt;br /&gt;
        else if (c&amp;gt;='A' &amp;amp;&amp;amp; c &amp;lt;= 'F') num = (num &amp;lt;&amp;lt; 4) | (c + 10 - 'A');&lt;br /&gt;
        else if (c==',') {&lt;br /&gt;
          *(s++) = num; num=0; status=1;&lt;br /&gt;
          if (s - base &amp;gt;= 5808) return;&lt;br /&gt;
        }&lt;br /&gt;
        else if (c=='}') {&lt;br /&gt;
          *(s++) = num; num=0; status=1;&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void buildscreen(void)&lt;br /&gt;
{&lt;br /&gt;
  int i;&lt;br /&gt;
  char buf[4096];&lt;br /&gt;
  for (i=0;i&amp;lt;22;i++) {&lt;br /&gt;
    int len;&lt;br /&gt;
    if (fgets(buf,4096,stdin) == NULL)&lt;br /&gt;
      return;&lt;br /&gt;
    if (buf[0] == '\n')&lt;br /&gt;
      return;&lt;br /&gt;
    len=strlen(buf);&lt;br /&gt;
    if (len&amp;gt;44) len=44;&lt;br /&gt;
    int j;&lt;br /&gt;
    for (j=0; j&amp;lt;len; j++) {&lt;br /&gt;
      int ch=buf[j];&lt;br /&gt;
      if (ch &amp;gt;= ' ' &amp;amp;&amp;amp; ch &amp;lt;= '~') {&lt;br /&gt;
        int k;&lt;br /&gt;
        ch-=' ';&lt;br /&gt;
        for (k=0; k&amp;lt;6; k++) {&lt;br /&gt;
          int h;&lt;br /&gt;
          for (h=0; h&amp;lt;8; h++) {&lt;br /&gt;
            int bit=((font[ch][k]&amp;amp;(1&amp;lt;&amp;lt;h))!=0);&lt;br /&gt;
            if (bit) {&lt;br /&gt;
              int posx=j*6+k;&lt;br /&gt;
              int posy=i*8+h;&lt;br /&gt;
              screen[posy][posx&amp;gt;&amp;gt;3]|= 1&amp;lt;&amp;lt;(posx&amp;amp;0x7);&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void sendit(int fd)&lt;br /&gt;
{&lt;br /&gt;
  char buf[4096];&lt;br /&gt;
  int i,res;&lt;br /&gt;
  for (i=0; i&amp;lt;176; i++) {&lt;br /&gt;
    int j;&lt;br /&gt;
    FILE *f=fmemopen(buf,sizeof(buf),&amp;quot;w&amp;quot;);&lt;br /&gt;
    fprintf(f,&amp;quot;%d,&amp;quot;,i);&lt;br /&gt;
    for (j=0; j&amp;lt;33; j++)&lt;br /&gt;
      fprintf(f,&amp;quot;%d,&amp;quot;,screen[i][j]);&lt;br /&gt;
    fprintf(f,&amp;quot;%ds\n&amp;quot;,DISPLAYNODE);&lt;br /&gt;
    fclose(f);&lt;br /&gt;
    write(fd,buf,strlen(buf));&lt;br /&gt;
    res = read(fd,buf,255);&lt;br /&gt;
    buf[res]=0;             /* set end of string, so we can printf */&lt;br /&gt;
    //printf(&amp;quot;:%s:%d\n&amp;quot;, buf, res);&lt;br /&gt;
    res = read(fd,buf,255);&lt;br /&gt;
    buf[res]=0;             /* set end of string, so we can printf */&lt;br /&gt;
    //printf(&amp;quot;:%s:%d\n&amp;quot;, buf, res);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char*argv[])&lt;br /&gt;
{&lt;br /&gt;
  int fd,c;&lt;br /&gt;
  struct termios oldtio,newtio;&lt;br /&gt;
  struct pollfd pfd[]={{0,POLLIN,0}};&lt;br /&gt;
&lt;br /&gt;
  if (argc &amp;gt; 2 &amp;amp;&amp;amp; argv[2][0] == 'g')&lt;br /&gt;
    buildgraphic();&lt;br /&gt;
  else&lt;br /&gt;
    buildscreen();&lt;br /&gt;
&lt;br /&gt;
  fd = open(argv[1], O_RDWR | O_NOCTTY );&lt;br /&gt;
  if (fd &amp;lt;0) {perror(argv[1]); exit(-1); }&lt;br /&gt;
&lt;br /&gt;
  pfd[0].fd=fd;&lt;br /&gt;
&lt;br /&gt;
  tcgetattr(fd,&amp;amp;oldtio);&lt;br /&gt;
  bzero(&amp;amp;newtio, sizeof(newtio));&lt;br /&gt;
  newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;&lt;br /&gt;
&lt;br /&gt;
  newtio.c_iflag = IGNPAR;&lt;br /&gt;
&lt;br /&gt;
  newtio.c_oflag = 0;&lt;br /&gt;
  newtio.c_lflag = ICANON;&lt;br /&gt;
  newtio.c_cc[VINTR]    = 0;     /* Ctrl-c */&lt;br /&gt;
  newtio.c_cc[VQUIT]    = 0;     /* Ctrl-\ */&lt;br /&gt;
  newtio.c_cc[VERASE]   = 0;     /* del */&lt;br /&gt;
  newtio.c_cc[VKILL]    = 0;     /* @ */&lt;br /&gt;
  newtio.c_cc[VEOF]     = 4;     /* Ctrl-d */&lt;br /&gt;
  newtio.c_cc[VTIME]    = 0;     /* inter-character timer unused */&lt;br /&gt;
  newtio.c_cc[VMIN]     = 1;     /* blocking read until 1 character arrives */&lt;br /&gt;
  newtio.c_cc[VSWTC]    = 0;     /* '\0' */&lt;br /&gt;
  newtio.c_cc[VSTART]   = 0;     /* Ctrl-q */&lt;br /&gt;
  newtio.c_cc[VSTOP]    = 0;     /* Ctrl-s */&lt;br /&gt;
  newtio.c_cc[VSUSP]    = 0;     /* Ctrl-z */&lt;br /&gt;
  newtio.c_cc[VEOL]     = 0;     /* '\0' */&lt;br /&gt;
  newtio.c_cc[VREPRINT] = 0;     /* Ctrl-r */&lt;br /&gt;
  newtio.c_cc[VDISCARD] = 0;     /* Ctrl-u */&lt;br /&gt;
  newtio.c_cc[VWERASE]  = 0;     /* Ctrl-w */&lt;br /&gt;
  newtio.c_cc[VLNEXT]   = 0;     /* Ctrl-v */&lt;br /&gt;
  newtio.c_cc[VEOL2]    = 0;     /* '\0' */&lt;br /&gt;
&lt;br /&gt;
  tcflush(fd, TCIFLUSH);&lt;br /&gt;
  tcsetattr(fd,TCSANOW,&amp;amp;newtio);&lt;br /&gt;
  sleep(1);&lt;br /&gt;
  sendit(fd);&lt;br /&gt;
  sleep(1);&lt;br /&gt;
  sendit(fd);&lt;br /&gt;
  /* restore the old port settings */&lt;br /&gt;
  tcsetattr(fd,TCSANOW,&amp;amp;oldtio);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
</feed>