Newsgroup: it.comp.lang.visual-basic
Titolo: VB, GIF e PDF (conosci il C?)

chiedo un aiuto ai saggi:
sto scrivendo una classe in VB e 
VB.NET
che crea files in PDF (non e' nuova, eh?)
il grosso casino e' l'inserimento dei GIF
mentre i JPEG possono essere inseriti cosi'
come sono (ma non e' il formato adatto
per immagini piccole a 256 colori) per i GIF
e' tutto un casino (credo di aver capito che
sia dovuto al fatto che l'algoritmo di
compressione LZW e' sotto copyright ... mah!)
ho trovato una routine in C, ma non riesco a
capirne una parte: c'e' qualcuno che mi sa
dire come diavolo si traduce in vb o 
vb.net
questo? GRAZIE!
(in fondo allego la routine completa)
 j=pdf_pos;
 /* datin=getnext(tmp)+ (getnext(tmp)<<8) +(getnext(tmp)<<16); */
 datin = getnext(); datin += (getnext()<<8); datin += (getnext()<<16);
 while (outcount<incount)
    {tablang++;
     i=(datin>>posin)&((1<<codelang)-1);
     k=(posin+codelang)/8; posin=(posin+codelang)%8;
     while (k--) datin=(datin>>8)+(getnext()<<16);
     datout = datout + (i<<(posout-codelang+1));
     posout=posout-codelang;
     while (posout<16) {out_bbyte(datout>>16); outcount++;
                        datout=(datout&0xffff)<<8;
                        posout=posout+8;
                       }
     if ( i == 256 ) {tablang=257; codelang=9;}
     if ( i == 257 ) break;
     if (tablang == (1<<(codelang))) codelang++;
    }
 if (i!=257 || rest>0) ende(56,28);
 fclose(tmp);
 return(pdf_pos-j);
QUESTA E' LA ROUTINE COMPLETA:
int insert_gif(p) char *p;
{FILE *tmp; int i,j,k;
 int rest=0, codelang=9, tablang=257;
 int posin=0, posout=23, incount=0, outcount=0, datout=0, datin;
 int getnext()
     {if (rest<0) return 0;
      if (!rest) rest=getc(tmp);
      if (!rest) {rest--; return 0;}
      rest--; incount++;
      return (getc(tmp));
     }
 tmp = fopen(p,"rb");  if (tmp==NULL) ende(50,19);
 if (getc(tmp)!='G'||getc(tmp)!='I'||getc(tmp)!='F') ende(51,28);
 for (i=0;i<8;i++) j=getc(tmp); /* ignore version, screen width+height */
 if (! (j&128)) ende(52,28);   /* exit if no global color table */
 j= (1<<((j&7)+1));             /* length of global color table */
 out_dec(j-1); out_string(" (");
 getc(tmp); getc(tmp);  /* ignore background color and pixel ratio */
 for (i=0; i<3*j; i++)  /* copy global color table */
   {k=getc(tmp); if (k=='\\'||k==')'||k=='(') out_bbyte('\\');
out_bbyte(k);}
 out_string(")]>>\nstream\n");
 if (getc(tmp) != 0x2c) ende(53,28); /* only simple gif files with image
                                          immediate following global color
                                          table are supported */
 for (i=0; i<8; i++) getc(tmp);      /* ignore position and size */
 if (getc(tmp)&0xc0) ende(54,28);  /* no local color table or interlaced */
 if (getc(tmp) != 8) ende(55,28);  /* LZW inital code size must be 9
                                        -> only 256 color gif */
 j=pdf_pos;
 /* datin=getnext(tmp)+ (getnext(tmp)<<8) +(getnext(tmp)<<16); */
 datin = getnext(); datin += (getnext()<<8); datin += (getnext()<<16);
 while (outcount<incount)
    {tablang++;
     i=(datin>>posin)&((1<<codelang)-1);
     k=(posin+codelang)/8; posin=(posin+codelang)%8;
     while (k--) datin=(datin>>8)+(getnext()<<16);
     datout = datout + (i<<(posout-codelang+1));
     posout=posout-codelang;
     while (posout<16) {out_bbyte(datout>>16); outcount++;
                        datout=(datout&0xffff)<<8;
                        posout=posout+8;
                       }
     if ( i == 256 ) {tablang=257; codelang=9;}
     if ( i == 257 ) break;
     if (tablang == (1<<(codelang))) codelang++;
    }
 if (i!=257 || rest>0) ende(56,28);
 fclose(tmp);
 return(pdf_pos-j);
}

