diff Meerwald-dir/coord.c @ 24:9f20bce6184e v0.7

move directories, support netpbm 11
author Peter Meerwald-Stadler <pmeerw@pmeerw.net>
date Fri, 20 Dec 2024 13:08:59 +0100
parents Meerwald/coord.c@f83ef905a63d
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Meerwald-dir/coord.c	Fri Dec 20 13:08:59 2024 +0100
@@ -0,0 +1,75 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include "coord.h"
+
+struct coords *alloc_coords(int n) {
+  struct coords *c;
+
+  if ((c = malloc(sizeof(struct coords))) != NULL)
+    init_coords(c, n);
+#ifdef DEBUG
+  else
+    fprintf(stderr, "alloc_coords(): malloc failed\n");
+#endif
+
+  return c;
+}
+
+void free_coords(struct coords *c) {
+
+#ifdef DEBUG
+  if (!c)
+    fprintf(stderr, "free_coords(): got NULL pointer\n");
+#endif
+
+  free(c->values);
+  free(c);
+}
+
+int init_coords(struct coords *c, int n) {
+
+#ifdef DEBUG
+  if (!c)
+    fprintf(stderr, "init_coords(): got NULL poiner\n");
+
+  if (n <= 0)
+    fprintf(stderr, "init_coords(): n out of range\n");
+#endif
+
+  c->count = 0;
+  c->max = n;
+
+  if ((c->values = malloc(n * sizeof(struct coord))) != NULL)
+    return 0;
+  else
+    return -1;
+}
+
+int add_coord(struct coords *c, int x, int y) {
+  struct coord *v;
+  int n;
+
+#ifdef DEBUG
+  if (!c)
+    fprintf(stderr, "add_coord(): got NULL pointer\n");
+
+  if (c->count >= c->max)
+    fprintf(stderr, "add_coord(): maximum reached\n");
+#endif
+
+  v = c->values;
+
+  for (n = 0; n < c->count; v++, n++)
+    if (v->x == x && v->y == y) break;
+
+  if (n == c->count) {
+    v->x = x;
+    v->y = y;
+    c->count++;
+    return 0;
+  }
+  else
+    return -1;
+}
+
+

Repositories maintained by Peter Meerwald, pmeerw@pmeerw.net.