chiark / gitweb /
does modexps, makes signatures, needs sane hexstring handling
authorian <ian>
Wed, 11 Sep 2002 01:58:36 +0000 (01:58 +0000)
committerian <ian>
Wed, 11 Sep 2002 01:58:36 +0000 (01:58 +0000)
base/chiark-tcl.h
base/hook.c
base/tables-examples.tct
hbytes/hbytes.h
hbytes/hook.c

index 23cad20..f482cc5 100644 (file)
@@ -15,6 +15,7 @@
  *
  *  hbytes range VALUE START SIZE                => substring (or error)
  *  hbytes overwrite VAR START VALUE
+ *  hbytes trimleft VALUE                        removes any leading 0 octets
  *  hbytes repeat VALUE COUNT                    => COUNT copies of VALUE
  *
  *  hbytes h2ulong HEX                           => ulong  (HEX len must be 4)
index f364978..0adb6b5 100644 (file)
@@ -210,6 +210,18 @@ int do_hbytes_overwrite(ClientData cd, Tcl_Interp *ip,
   return TCL_OK;
 }
 
+int do_hbytes_trimleft(ClientData cd, Tcl_Interp *ip, HBytes_Var v) {
+  const Byte *o, *p, *e;
+  o= p= hbytes_data(v.hb);
+  e= p + hbytes_len(v.hb);
+
+  while (p<e && !*p) p++;
+  if (p != o)
+    hbytes_unprepend(v.hb, p-o);
+
+  return TCL_OK;
+}
+
 int do_hbytes_repeat(ClientData cd, Tcl_Interp *ip,
                     HBytes_Value sub, int count, HBytes_Value *result) {
   int sub_l;
index f2146a5..d2e0038 100644 (file)
@@ -112,6 +112,8 @@ Table hbytes HBytes_SubCommand
                v       hbv
                start   int
                sub     hb
+       trimleft
+               v       hbv
        zeroes
                length  int
                =>      hb
index 23cad20..f482cc5 100644 (file)
@@ -15,6 +15,7 @@
  *
  *  hbytes range VALUE START SIZE                => substring (or error)
  *  hbytes overwrite VAR START VALUE
+ *  hbytes trimleft VALUE                        removes any leading 0 octets
  *  hbytes repeat VALUE COUNT                    => COUNT copies of VALUE
  *
  *  hbytes h2ulong HEX                           => ulong  (HEX len must be 4)
index f364978..0adb6b5 100644 (file)
@@ -210,6 +210,18 @@ int do_hbytes_overwrite(ClientData cd, Tcl_Interp *ip,
   return TCL_OK;
 }
 
+int do_hbytes_trimleft(ClientData cd, Tcl_Interp *ip, HBytes_Var v) {
+  const Byte *o, *p, *e;
+  o= p= hbytes_data(v.hb);
+  e= p + hbytes_len(v.hb);
+
+  while (p<e && !*p) p++;
+  if (p != o)
+    hbytes_unprepend(v.hb, p-o);
+
+  return TCL_OK;
+}
+
 int do_hbytes_repeat(ClientData cd, Tcl_Interp *ip,
                     HBytes_Value sub, int count, HBytes_Value *result) {
   int sub_l;