struct/buf.c: Add functions for serializing and deserializing `kludge64'. master
authorMark Wooding <mdw@distorted.org.uk>
Tue, 9 May 2023 20:08:21 +0000 (21:08 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Tue, 9 May 2023 20:08:21 +0000 (21:08 +0100)
Not sure how these got missed.

struct/buf.c
struct/buf.h

index bd16ec7..11b1425 100644 (file)
@@ -187,6 +187,34 @@ int buf_putbyte(buf *b, int ch)
   }
 DOUINTCONV(BUF_GETU_)
 
+/* --- @buf_getk64{,l,b}@ --- *
+ *
+ * Arguments:  @buf *b@ = pointer to a buffer block
+ *             @kludge64 *w@ = where to put the word
+ *
+ * Returns:    Zero if OK, or nonzero if there wasn't a word there.
+ *
+ * Use:                Gets a word of appropriate size and order from a buffer.
+ */
+
+int buf_getk64(buf *b, kludge64 *w)
+{
+  if (BENSURE(b, 8)) return (-1);
+  LOAD64_(*w, b->p); BSTEP(b, 8); return (0);
+}
+
+int buf_getk64l(buf *b, kludge64 *w)
+{
+  if (BENSURE(b, 8)) return (-1);
+  LOAD64_L_(*w, b->p); BSTEP(b, 8); return (0);
+}
+
+int buf_getk64b(buf *b, kludge64 *w)
+{
+  if (BENSURE(b, 8)) return (-1);
+  LOAD64_B_(*w, b->p); BSTEP(b, 8); return (0);
+}
+
 /* --- @buf_putu{8,{16,24,32,64}{,l,b}}@ --- *
  *
  * Arguments:  @buf *b@ = pointer to a buffer block
@@ -207,6 +235,34 @@ DOUINTCONV(BUF_GETU_)
   }
 DOUINTCONV(BUF_PUTU_)
 
+/* --- @buf_putk64{,l,b}@ --- *
+ *
+ * Arguments:  @buf *b@ = pointer to a buffer block
+ *             @kludge64 w@ = word to write
+ *
+ * Returns:    Zero if OK, or nonzero if there wasn't enough space
+ *
+ * Use:                Gets a word of appropriate size and order from a buffer.
+ */
+
+int buf_putk64(buf *b, kludge64 w)
+{
+  if (BENSURE(b, 8)) return (-1);
+  STORE64_(b->p, w); BSTEP(b, 8); return (0);
+}
+
+int buf_putk64l(buf *b, kludge64 w)
+{
+  if (BENSURE(b, 8)) return (-1);
+  STORE64_L_(b->p, w); BSTEP(b, 8); return (0);
+}
+
+int buf_putk64b(buf *b, kludge64 w)
+{
+  if (BENSURE(b, 8)) return (-1);
+  STORE64_B_(b->p, w); BSTEP(b, 8); return (0);
+}
+
 /* --- @findz@ --- *
  *
  * Arguments:  @buf *b@ = pointer to a buffer block
index a3585b4..97dbd10 100644 (file)
@@ -199,6 +199,20 @@ extern int buf_putbyte(buf */*b*/, int /*ch*/);
   extern int buf_getu##w(buf */*b*/, uint##n */*w*/);
 DOUINTCONV(BUF_DECL_GETU_)
 
+/* --- @buf_getk64{,l,b}@ --- *
+ *
+ * Arguments:  @buf *b@ = pointer to a buffer block
+ *             @kludge64 *w@ = where to put the word
+ *
+ * Returns:    Zero if OK, or nonzero if there wasn't a word there.
+ *
+ * Use:                Gets a word of appropriate size and order from a buffer.
+ */
+
+extern int buf_getk64(buf */*b*/, kludge64 */*w*/);
+extern int buf_getk64l(buf */*b*/, kludge64 */*w*/);
+extern int buf_getk64b(buf */*b*/, kludge64 */*w*/);
+
 /* --- @buf_putu{8,{16,24,32,64}{,l,b}}@ --- *
  *
  * Arguments:  @buf *b@ = pointer to a buffer block
@@ -213,6 +227,20 @@ DOUINTCONV(BUF_DECL_GETU_)
   extern int buf_putu##w(buf */*b*/, uint##n /*w*/);
 DOUINTCONV(BUF_DECL_PUTU_)
 
+/* --- @buf_putk64{,l,b}@ --- *
+ *
+ * Arguments:  @buf *b@ = pointer to a buffer block
+ *             @kludge64 w@ = word to write
+ *
+ * Returns:    Zero if OK, or nonzero if there wasn't enough space
+ *
+ * Use:                Gets a word of appropriate size and order from a buffer.
+ */
+
+extern int buf_putk64(buf */*b*/, kludge64 /*w*/);
+extern int buf_putk64l(buf */*b*/, kludge64 /*w*/);
+extern int buf_putk64b(buf */*b*/, kludge64 /*w*/);
+
 /* --- @buf_getmem{8,{16,24,32,64}{,l,b},z} --- *
  *
  * Arguments:  @buf *b@ = pointer to a buffer block