rem Este ejemplo muestra el funcionamiento del algoritmo rem CCITT Fax4 , a partir de este documento: rem www.gwg.nga.mil/ntb/baseline/docs/188_196/196n1.pdf rem con Google: "data organization of a two" ... dimensionally ... rem El documento tiene un par de pequeños errores en la última página rem Este ejemplo se limita a lo que aparece en esa página, rem pero puede ser ampliado con las tablas y datos que completan rem el algoritmo. Se supone que están bien, pero además se pueden rem encotrar en koders y otras webs, como libtiff. rem codificado para Liberty Basic. Colgado aquí el 11-11-2007 mainwin 25 20 dim bla$(65),neg$(65) eol$="00000000001" WindowWidth = 50 WindowHeight = 110 button #ctrl.exit, "Exit", [fuera], UL, 10, 10 open "control" for window as #ctrl restore [white] for i=0 to 16: read a$: bla$(i)=a$: next restore [black] for i=0 to 16: read a$: neg$(i)=a$: next restore [verti] for i=0 to 6: read a$: vert$(i)=a$: next hm$="001": pass$="0001" restore [100] read ref$, cod$ b=instr(cod$,"1"): if b=0 then enc$="1" else enc$="" 'primera n=1:l=len(cod$) [rehm] scan enc$=enc$+hm$: print hm$;" hm" b=instr(cod$,"1",n): i=b-n: enc$=enc$+bla$(i): print bla$(i);" ";i;"b" n=instr(cod$,"0",b): i=n-b if i<0 then i=i+l+1 enc$=enc$+neg$(i): print neg$(i);" ";i;"n" ' ;" n=";n if n<>0 then goto [rehm] a0=0 [segu] scan print "----segu---" ref$=cod$: read cod$ [mas] j=j+1: if j>8 then [fuera] if a1>l or a2>l then [eol] if a0=0 then same$=left$(cod$,1) else same$=mid$(cod$,a0,1) if a0=0 then same$="0" if same$="0" then opp$="1" else opp$="0" print same$;" ";opp$ a1=instr(cod$,opp$,a0):if a1=0 then a1=l+1 a2=instr(cod$,same$,a1):if a2=0 then a2=l+1 cha$=mid$(cod$,a0,1):if a0=0 then cha$="0" if cha$="0" then ocha$="1" else ocha$="0" b1=instr(ref$,ocha$,a0+1) cha$=mid$(ref$,b1,1): if a0=0 then print "cero" if cha$="1" then b2=instr(ref$,"0",b1): goto [deb2] print "busco 1" b2=instr(ref$,"1",b1) [deb2] if b2=0 then b2=l+1 print "c";a0;" c";a1;" c";a2;" r";b1;" r";b2;" ";cha$;" ";ocha$ if b2>=a1 then [nopass] ' pass mode enc$=enc$+pass$: a0=b2 print pass$;" pass": goto [mas] [nopass] v=b1-a1+3 if v<0 then [horiz] if v<7 then [vert] [horiz] print "horiz" n=a0: enc$=enc$+hm$: print hm$;" hm";" b=";b;" n=";n b=instr(cod$,"1",n): if b=0 then b=25 i=b-n: enc$=enc$+bla$(i): print bla$(i);" ";i;"b" n=instr(cod$,"0",b): i=n-b if i<0 then i=i+l+1 enc$=enc$+neg$(i): print neg$(i);" ";i;"n" ' ;" n=";n a0=a2 print "-----" goto [mas] [vert] if v<0 then print " v<0": goto [fuera] enc$=enc$+vert$(v): print vert$(v);" v";v-3 a0=a1: print "a1=";a1,mid$(cod$,a1,1) goto [mas] [eol] enc$=enc$+eol$+eol$+eol$: l=len(enc$):t=8*(int(l/8)-1): print l,t enc$=left$(enc$,t): print enc$ [fuera] close #ctrl end [100] data "000000000000000000000000" data "011001100011000000001111" data "010000000111000111100000" data "000000000000000000000000" [white] data "00110101" data "000111" data "0111" data "1000" data "1011" data "1100" data "1110" data "1111" data "10011" data "10100" data "00111" data "01000" data "001000" data "000011" data "110100" data "110101" data "101010" [black] data "0000110111" data "010" data "11" data "10" data "011" data "0011" data "0010" data "00011" data "000101" data "000100" data "0000100" data "0000101" data "0000111" data "00000100" data "00000111" data "00001100 0" data "00000101 11" [verti] data "0000011" data "000011" data "011" data "1" data "010" data "000010" data "0000010"