diff -Naur _ngi-3c/Makefile _ngi-3d/Makefile
--- _ngi-3c/Makefile	2026-02-23 12:29:12.144072517 +0100
+++ _ngi-3d/Makefile	2026-02-23 12:29:16.243072389 +0100
@@ -1,3 +1,4 @@
+all: ngi ntrf test ntiv strt
 ngi:
 	$(MAKE) -C _ngi/
 ntrf:
@@ -6,8 +7,11 @@
 	$(MAKE) -C _test/
 ntiv:
 	$(MAKE) -C _ntiv/
+strt:
+	$(MAKE) -C _strt/
 clean:
 	$(MAKE) -C _ngi/ clean
 	$(MAKE) -C _ntrf/ clean
 	$(MAKE) -C _test/ clean
 	$(MAKE) -C _ntiv/ clean
+	$(MAKE) -C _strt/ clean
diff -Naur _ngi-3c/_ngi/Makefile _ngi-3d/_ngi/Makefile
--- _ngi-3c/_ngi/Makefile	2026-02-23 12:29:12.273072513 +0100
+++ _ngi-3d/_ngi/Makefile	2026-02-23 12:29:16.474072382 +0100
@@ -5,7 +5,7 @@
 libngi2.so: pool.o
 	gcc -shared -o $@ $<
 
-pool.o: pool.c pool.h
+pool.o: pool.c pool.h strate.h
 	gcc -fPIC -c $<
 
 #pool:
diff -Naur _ngi-3c/_ngi/pool.c _ngi-3d/_ngi/pool.c
--- _ngi-3c/_ngi/pool.c	2026-02-23 12:29:12.291072513 +0100
+++ _ngi-3d/_ngi/pool.c	2026-02-23 12:29:16.500072381 +0100
@@ -5,7 +5,66 @@
 int _strade[120*80];
 int _pool_a[253];
 int _pool_0[253*3];
+#include "strate.h"
 int _n = 0;
+int
+strt_size()
+{ int d;
+  for (d=0;d<320;d++) {
+    if (_strt[d] == '1') { break; }
+  }
+  return d;
+}
+void
+strt_draw()
+{ int a, b, e, d;
+  if (_strt[_strt_0[0]]=='r') {
+   int c;
+   a = _strt[_strt_0[0]+1];
+   b = _strt[_strt_0[0]+2];
+   e = _strt[_strt_0[0]+3];
+   d = _strt[_strt_0[0]+4];
+   c = _strt[_strt_0[0]+5];
+    { int _a, _b;
+      for (_a=a;_a<a+e; _a++) {
+        for (_b=b;_b<b+d; _b++) {
+          int p = _ab(_a, _b);
+          fill_pool_d(c, p);
+        }
+      }
+    }
+  }
+}
+void
+strt_rect(int d, int prm, int a, int b, int c, int d_, int c_)
+{ _strt[_strt_0[d]]='r';
+  _strt[_strt_0[d]+1]=a;
+  _strt[_strt_0[d]+2]=b;
+  _strt[_strt_0[d]+3]=c;
+  _strt[_strt_0[d]+4]=d_;
+  _strt[_strt_0[d]+5]=c_;
+}
+int
+strt_1()
+{ int d, n; n=0;
+  for (d=0;d<58;d++) { if (_strt_0[d] != -1) {n++;} else break; }
+  return n ;
+}
+void
+strt_0()
+{ int d, n, prv;
+  for (n=0;n<58;n++) {_strt_0[n]=-1;}
+  prv=0; n=0;
+  _strt_0[n]=0;n++;
+  for (d=0;d<358;d++) {
+    if (_strt[d] == '1') { break; }
+    if (_strt[d] == '0') { prv=1; } else
+    if (prv==1) {_strt_0[n]=d; prv=0; n++;}
+  }
+  //for (d=0;d<n;d++) {
+  //  printf("# %d\n", _strt_0[d]);
+  //}
+}
 void
 fill_pool_0()
 { int d;
@@ -17,12 +76,10 @@
 }
 void
 fill_pool_d(int c, int d)
-{ _stride[d] = c;
-}
+{ _stride[d] = c; }
 void
 fill_pool_l(int c, int d)
-{ _strade[d] = c;
-}
+{ _strade[d] = c; }
 void
 default_c3(int *c)
 { _pool_0[0]   = c[0];
@@ -51,12 +108,10 @@
 }
 void
 min_pool_a(int d)
-{ _pool_a[d] = 1;
-}
+{ _pool_a[d] = 1; }
 void
 add_pool_a(int d)
-{ _pool_a[d] = 0;
-}
+{ _pool_a[d] = 0; }
 void
 fill_stride()
 { int d;
diff -Naur _ngi-3c/_ngi/strate.h _ngi-3d/_ngi/strate.h
--- _ngi-3c/_ngi/strate.h	1970-01-01 01:00:00.000000000 +0100
+++ _ngi-3d/_ngi/strate.h	2026-02-23 12:29:16.483072382 +0100
@@ -0,0 +1,28 @@
+#ifndef _STRTE_LIB_H_
+#define _STRTE_LIB_H_
+
+void
+strt_rect(int d, int prm, int a, int b, int c, int d_, int c_);
+
+void
+strt_draw();
+
+int
+strt_1();
+
+void
+strt_0();
+
+int
+strt_size();
+
+int _strt_0[58] ;
+char _strt[] = {
+  "...........0"
+  "...........0"
+  "...........0"
+  "...........0"
+  "...........1"
+};
+
+#endif /* _STRTE_LIB_H_ */
diff -Naur _ngi-3c/_ntiv/Makefile _ngi-3d/_ntiv/Makefile
--- _ngi-3c/_ntiv/Makefile	2026-02-23 12:29:12.678072501 +0100
+++ _ngi-3d/_ntiv/Makefile	2026-02-23 12:29:16.856072370 +0100
@@ -1,4 +1,5 @@
-all: ngi3.cma
+all: mod pbm
+mod: ngi3.cma
 pbm: test5.pbm test6.pbm
 #ngi3.mli: ngi3.ml
 #	ocamlc -i -I ../_ntrf/ $< > $@
diff -Naur _ngi-3c/_ntiv/ngi3.ml _ngi-3d/_ntiv/ngi3.ml
--- _ngi-3c/_ntiv/ngi3.ml	2026-02-23 12:29:12.621072502 +0100
+++ _ngi-3d/_ntiv/ngi3.ml	2026-02-23 12:29:16.839072370 +0100
@@ -29,7 +29,7 @@
   let arr = rect (a, b, d, e) and ar = ref [| |] in
   Array.iter (fun arr0 -> ar := Array.append arr0 !ar) arr;
   !ar
-let diag (a, b, d) =
+let diag1 (a, b, d) =
   let l = ref [] in
   for _d = 0 to pred d do
     for _b = 0 to pred _d do
diff -Naur _ngi-3c/_ntiv/ngi3.mli _ngi-3d/_ntiv/ngi3.mli
--- _ngi-3c/_ntiv/ngi3.mli	2026-02-23 12:29:12.641072502 +0100
+++ _ngi-3d/_ntiv/ngi3.mli	2026-02-23 12:29:16.865072370 +0100
@@ -1,7 +1,7 @@
 val add_c : int * int * int -> int
 val circ : int * int -> int -> (int * int) array
 val rect : int * int * int * int -> (int * int) array
-val diag : int * int * int -> (int * int) array
+val diag1 : int * int * int -> (int * int) array
 val diag2 : int * int * int -> (int * int) array
 val diag3 : int * int * int -> (int * int) array
 val diag4 : int * int * int -> (int * int) array
diff -Naur _ngi-3c/_ntiv/test5.ml _ngi-3d/_ntiv/test5.ml
--- _ngi-3c/_ntiv/test5.ml	2026-02-23 12:29:12.665072501 +0100
+++ _ngi-3d/_ntiv/test5.ml	2026-02-23 12:29:16.882072369 +0100
@@ -71,7 +71,7 @@
     let c4 = (0, 0, 255) in
     add_c3 (c4);
     let l = max_num () in
-    let ps = Ngi3.diag (72, 24, 10) in
+    let ps = Ngi3.diag1 (72, 24, 10) in
     Array.iter (fun (a, b) ->
       Printf.printf "# %d %d\n" a b;
     ) ps;
diff -Naur _ngi-3c/_ntiv/test6.ml _ngi-3d/_ntiv/test6.ml
--- _ngi-3c/_ntiv/test6.ml	2026-02-23 12:29:12.651072501 +0100
+++ _ngi-3d/_ntiv/test6.ml	2026-02-23 12:29:16.848072370 +0100
@@ -9,9 +9,9 @@
   let c0 = (255, 255, 0) in
   let l0 = Ngi3.add_c (c0) in
   begin
-    let ps = Ngi3.diag (20, 20, 20) in
+    let ps = Ngi3.diag1 (20, 20, 20) in
     fill_pool_n ps (l0);
-    let ps = Ngi3.diag (20, 40, 20) in
+    let ps = Ngi3.diag1 (20, 40, 20) in
     fill_pool_n ps (l0);
     let ps = Ngi3.diag2 (40+10, 40, 20) in
     fill_pool_n ps (l0);
@@ -32,9 +32,9 @@
   add_c3 (c0);
   begin
     let l = max_num () in
-    let ps = Ngi3.diag (20, 20, 20) in
+    let ps = Ngi3.diag1 (20, 20, 20) in
     fill_pool_n ps (l-1);
-    let ps = Ngi3.diag (20, 40, 20) in
+    let ps = Ngi3.diag1 (20, 40, 20) in
     fill_pool_n ps (l-1);
   end;
   dump_pool ();
diff -Naur _ngi-3c/_ntrf/ngi2.ml _ngi-3d/_ntrf/ngi2.ml
--- _ngi-3c/_ntrf/ngi2.ml	2026-02-23 12:29:12.518072506 +0100
+++ _ngi-3d/_ntrf/ngi2.ml	2026-02-23 12:29:16.762072373 +0100
@@ -1,4 +1,19 @@
 
+external strt_rect : int -> char -> (int * int * int * int) -> int -> unit
+  = "caml_strt_rect"
+
+external strt_draw : unit -> unit
+  = "caml_strt_draw"
+
+external strt_size : unit -> int
+  = "caml_strt_size"
+
+external strt_1 : unit -> int
+  = "caml_strt_1"
+
+external strt_0 : unit -> unit
+  = "caml_strt_0"
+
 external fill_pool_n : (int * int) array -> int -> unit
   = "caml_fill_pool_n"
 
diff -Naur _ngi-3c/_ntrf/ngi2.mli _ngi-3d/_ntrf/ngi2.mli
--- _ngi-3c/_ntrf/ngi2.mli	2026-02-23 12:29:12.491072506 +0100
+++ _ngi-3d/_ntrf/ngi2.mli	2026-02-23 12:29:16.738072374 +0100
@@ -1,4 +1,11 @@
 
+val strt_rect : int -> char -> (int * int * int * int) -> int -> unit
+val strt_draw : unit -> unit
+
+val strt_size : unit -> int
+val strt_1 : unit -> int
+val strt_0 : unit -> unit
+
 val fill_pool_n : (int * int) array -> int -> unit
 val fill_pool_m : (int * int) array -> int -> unit
 
diff -Naur _ngi-3c/_ntrf/ngi2_stub.c _ngi-3d/_ntrf/ngi2_stub.c
--- _ngi-3c/_ntrf/ngi2_stub.c	2026-02-23 12:29:12.505072506 +0100
+++ _ngi-3d/_ntrf/ngi2_stub.c	2026-02-23 12:29:16.774072372 +0100
@@ -4,53 +4,84 @@
 #include <caml/fail.h>
 #include <caml/memory.h>
 #include "pool.h"
+#include "strate.h"
+
+CAMLprim value
+caml_strt_draw(value caml_u)
+{ strt_draw();
+  return Val_unit;
+}
+
+CAMLprim value
+caml_strt_rect(value caml_d, value caml_prm, value caml_rect, value caml_c)
+{ int d = Int_val(caml_d);
+  int prm = Int_val(caml_prm);
+  int a, b, c, d_, c_;
+  c_ = Long_val(caml_c);
+  a =Int_val(Field(caml_rect,0));
+  b =Int_val(Field(caml_rect,1));
+  c =Int_val(Field(caml_rect,2));
+  d_=Int_val(Field(caml_rect,3));
+  strt_rect(d, prm, a, b, c, d_, c_);
+  return Val_unit;
+}
+
+CAMLprim value
+caml_strt_1(value caml_u)
+{ return Val_long(strt_1());
+}
+
+CAMLprim value
+caml_strt_0(value caml_u)
+{ strt_0();
+  return Val_unit;
+}
+
+CAMLprim value
+caml_strt_size(value caml_u)
+{ return Val_long(strt_size());
+}
 
 CAMLprim value
 caml_fill_pool_0(value caml_u)
-{
-  fill_pool_0();
+{ fill_pool_0();
   return Val_unit;
 }
 
 CAMLprim value
 caml_fill_pool_a(value caml_u)
-{
-  fill_pool_a();
+{ fill_pool_a();
   return Val_unit;
 }
 
 CAMLprim value
 caml_min_pool_a(value caml_d)
-{
-  min_pool_a(Int_val(caml_d));
+{ min_pool_a(Int_val(caml_d));
   return Val_unit;
 }
 
 CAMLprim value
 caml_add_pool_a(value caml_d)
-{
-  add_pool_a(Int_val(caml_d));
+{ add_pool_a(Int_val(caml_d));
   return Val_unit;
 }
 
 CAMLprim value
 caml_fill_stride(value caml_u)
-{
-  fill_stride();
+{ fill_stride();
   return Val_unit;
 }
 
 CAMLprim value
 caml_fill_pool_d(value caml_c, value caml_d)
-{
-  fill_pool_d(Int_val(caml_c), Int_val(caml_d));
+{ fill_pool_d(Int_val(caml_c), Int_val(caml_d));
   return Val_unit;
 }
 
 CAMLprim value
 caml_default_c3(value caml_c)
 {
-  int c[3];
+ int c[3];
   c[0]=Long_val(Field(caml_c,0));
   c[1]=Long_val(Field(caml_c,1));
   c[2]=Long_val(Field(caml_c,2));
diff -Naur _ngi-3c/_strt/Makefile _ngi-3d/_strt/Makefile
--- _ngi-3c/_strt/Makefile	1970-01-01 01:00:00.000000000 +0100
+++ _ngi-3d/_strt/Makefile	2026-02-23 12:29:16.267072388 +0100
@@ -0,0 +1,5 @@
+all: test7.pbm
+test7.pbm: test7.ml
+	\ocaml -I ../_ntrf/ ngi2.cma test7.ml > test7.pbm
+clean:
+	$(RM) test7.pbm
diff -Naur _ngi-3c/_strt/test7.ml _ngi-3d/_strt/test7.ml
--- _ngi-3c/_strt/test7.ml	1970-01-01 01:00:00.000000000 +0100
+++ _ngi-3d/_strt/test7.ml	2026-02-23 12:29:16.277072388 +0100
@@ -0,0 +1,20 @@
+open Ngi2
+let () =
+  fill_pool_0 ();
+  fill_pool_a ();
+  fill_stride ();
+  let c = (0, 0, 255) in
+  default_c3 (c);
+  let c = (255, 255, 0) in
+  Ngi2.add_c3 (c);
+  let l = max_num () in
+  Ngi2.strt_0 ();
+  (*
+  let d = Ngi2.strt_size () in
+  Printf.printf "## %d\n%!" d;
+  Printf.printf "#> %d\n%!" (Ngi2.strt_1 ());
+  *)
+  Ngi2.strt_rect 0 'c' (0, 0, 100, 78) (l-1);
+  Ngi2.strt_draw ();
+  Ngi2.dump_pool ();
+;;
