]> git.llucax.com Git - z.facultad/75.06/jacu.git/commitdiff
Se completa el decoder de ZG.
authorLeandro Lucarella <llucax@gmail.com>
Mon, 21 Jun 2004 21:07:57 +0000 (21:07 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Mon, 21 Jun 2004 21:07:57 +0000 (21:07 +0000)
src/zerogrouping/Makefile
src/zerogrouping/unzg.c [new file with mode: 0644]
src/zerogrouping/zerogrouping.c
src/zerogrouping/zerogrouping.h

index a96115382cfa57625c19096bdf50516e6de0dbfb..191cfc2eebc2cab1ddd0aec7bb533cc100e724eb 100644 (file)
 # Autores: Leandro Lucarella <llucare@fi.uba.ar>
 #----------------------------------------------------------------------------
 #
-# $Id: bufford.c 624 2004-05-30 20:18:04Z llucare $
+# $Id$
 #
 
-TARGETS=zg
+TARGETS=zg unzg
 COMMON=zerogrouping.o
 SRCS=zerogrouping.c zg.c
 
@@ -35,7 +35,7 @@ all: $(TARGETS)
 
 zg: $(COMMON) zg.o
 
-#unvol: $(COMMON) unvol.o
+unzg: $(COMMON) unzg.o
 
 depend:
        makedepend -- $(CFLAGS) -- $(SRCS)
diff --git a/src/zerogrouping/unzg.c b/src/zerogrouping/unzg.c
new file mode 100644 (file)
index 0000000..74a32eb
--- /dev/null
@@ -0,0 +1,52 @@
+/* vim: set noexpandtab tabstop=4 shiftwidth=4 wrap:
+ *----------------------------------------------------------------------------
+ *                                  jacu
+ *----------------------------------------------------------------------------
+ * This file is part of jacu.
+ *
+ * jacu is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * jacu is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with jacu; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA  02111-1307  USA
+ *----------------------------------------------------------------------------
+ * Creado:  lun jun 21 18:08:25 ART 2004
+ * Autores: Leandro Lucarella <llucare@fi.uba.ar>
+ *----------------------------------------------------------------------------
+ *
+ * $Id$
+ *
+ */
+
+#include "zerogrouping.h"
+#include <stdlib.h>
+#include <stdio.h>
+
+/** \file
+ *
+ * Prueba de desagrupador de ceros.
+ *
+ */
+
+int main()
+{
+       size_t len;
+       char buff[256];
+       int c;
+       ZG zg;
+       zg_init(&zg);
+       while ((c = getchar()) != EOF)
+       {
+               if ((len = zg_ungroup(&zg, buff, c))) fwrite(buff, 1, len, stdout);
+       }
+       return 0;
+}
+
index 0251725fceeef5f07ca963fd84685ecb820bace6..531045378375a580d84c445cc463983775190365 100644 (file)
@@ -47,7 +47,7 @@ void zg_init(ZG* zg)
  * devuelve la cantidad de bytes escritos en dst. */
 size_t zg_group(ZG* zg, char *dst, char src)
 {
-       if (src == '\0')
+       if (src == 0)
        {
                if (zg->in_zero)
                {
@@ -58,7 +58,7 @@ size_t zg_group(ZG* zg, char *dst, char src)
                {
                        zg->in_zero = 1; /* entramos en serie de ceros */
                        zg->count = 0; /* reiniciamos contador de ceros */
-                       *dst = '\0'; /* devuelvo el cero */
+                       *dst = 0; /* devuelvo el cero */
                        return 1; /* indico que hay un caracter */
                }
        }
@@ -67,7 +67,7 @@ size_t zg_group(ZG* zg, char *dst, char src)
                size_t ret = 1;
                if (zg->in_zero)
                {
-                       zg->in_zero = 0; /* saldo de serie de ceros */
+                       zg->in_zero = 0; /* salgo de serie de ceros */
                        *dst = zg->count; /* devuelvo cantidad de ceros */
                        dst++; /* me muevo al siguiente caracter */
                        ret++; /* indico que hay un caracter más */
@@ -76,9 +76,40 @@ size_t zg_group(ZG* zg, char *dst, char src)
                return ret; /* indico la cantidad de caracteres devueltos */
        }
 }
-/*
-size_t zg_ungroup(char* dst, char *src, size_t size)
+
+/** FIXME
+ * dst debe tener reservado al menos 256 bytes, src es el caracter a desencodear
+ * y se devuelven la cantidad de bytes desencodeados en dst. */
+size_t zg_ungroup(ZG* zg, char *dst, char src)
 {
-       return 0;
+       if (src == 0)
+       {
+               if (zg->in_zero) /* eran 2 ceros seguidos (1 cero orig. expandido) */
+               {
+                       zg->in_zero = 0; /* saldo de serie de ceros */
+                       return 0; /* indico que no hay nada */
+               }
+               else /* empieza serie de ceros */
+               {
+                       zg->in_zero = 1; /* entramos en serie de ceros */
+                       *dst = 0; /* devuelvo el cero */
+                       return 1; /* indico que hay un caracter */
+               }
+       }
+       else /* no es un cero */
+       {
+               if (zg->in_zero) /* era una serie de ceros comprimida */
+               {
+                       char ret = src;
+                       zg->in_zero = 0; /* salgo de serie de ceros */
+                       while (src--) dst[src] = 0; /* devuelve src cantidad de ceros */
+                       return ret; /* indica que se devolvieron src cantidad de ceros */
+               }
+               else
+               {
+                       *dst = src; /* devuelvo el caracter */
+                       return 1; /* indico que se devolvió un caracter */
+               }
+       }
 }
-*/
+
index 750da9aed2ff6ea6115a4a0e4336a29dd9e9c758..b1b9a2eedad7bf8babcd7e2b6b6ba87242bc2e4d 100644 (file)
@@ -54,8 +54,8 @@ void zg_init(ZG* zg);
  * cantidad. FIXME */
 size_t zg_group(ZG* zg, char *dst, char src);
 
-/** Vuelve al original. FIXME * /
-size_t zg_ungroup(char *buffer, size_t size);
-*/
+/** Vuelve al original. FIXME */
+size_t zg_ungroup(ZG* zg, char *dst, char src);
+
 #endif /* _JACU_ZG_H_ */