~toastal/klossi

Showing details for patch ab5a6072378f6cc1331089efefedc26c543d4dbf.
2024-06-30 (Sun), 3:14 PM - toastal - ab5a6072378f6cc1331089efefedc26c543d4dbf

make endwin linear!

Summary of changes
3 files modified with 22 lines added and 9 lines removed
  • bin/klossi.dats with 2 added and 2 removed lines
  • lib/ncurses.dats with 13 added and 4 removed lines
  • lib/ncurses.sats with 7 added and 3 removed lines
diff -rN -u old-klossi/bin/klossi.dats new-klossi/bin/klossi.dats
--- old-klossi/bin/klossi.dats	2024-09-16 19:18:52.155792183 +0000
+++ new-klossi/bin/klossi.dats	2024-09-16 19:18:52.159792156 +0000
@@ -8,11 +8,11 @@
 dynload "lib/ncurses.dats"
 
 implement main0 (): void = {
-	var _ = $Ncurses.initscr()
+	var window = $Ncurses.initscr()
 	val () = $Ncurses.cbreak()
 	val () = $Ncurses.echo()
 	val () = $Ncurses.printw("Hello, world!")
 	val () = $Ncurses.refresh()
 	val _ = $Ncurses.getch()
-	val () = $Ncurses.endwin()
+	val () = $Ncurses.endwin(window)
 }
diff -rN -u old-klossi/lib/ncurses.dats new-klossi/lib/ncurses.dats
--- old-klossi/lib/ncurses.dats	2024-09-16 19:18:52.155792183 +0000
+++ new-klossi/lib/ncurses.dats	2024-09-16 19:18:52.159792156 +0000
@@ -22,11 +22,20 @@
 extern fn _initscr : () -> ptr = "mac#initscr"
 extern fn _endwin : () -> int = "mac#endwin"
 
-implement initscr (): ptr = _initscr()
+implement initscr(): window = let
+	val window = WINDOW (_)
+	val WINDOW (w) = window
+	val () = w := _initscr()
+	prval () = fold@ (window)
+in
+	window
+end
 
-implement endwin (): void =
+implement endwin (win): void = let
+	val ~WINDOW _ = win
+in
 	if _endwin() < 0 then $raise EndWinFailed()
-
+end
 
 (* curs_inopts ***************************************************************)
 exception CBreakFailed of bool
diff -rN -u old-klossi/lib/ncurses.sats new-klossi/lib/ncurses.sats
--- old-klossi/lib/ncurses.sats	2024-09-16 19:18:52.159792156 +0000
+++ new-klossi/lib/ncurses.sats	2024-09-16 19:18:52.159792156 +0000
@@ -6,8 +6,13 @@
 
 
 (* curs_initscr **************************************************************)
-fn initscr : () -> ptr
-fn endwin : () -> void
+absvtype window_vtype
+vtypedef window = window_vtype
+datavtype window = WINDOW of ptr
+assume window_vtype = window
+
+fn initscr : () -> window
+fn endwin : window -> void
 
 
 (* curs_inopts ***************************************************************)
@@ -23,4 +28,3 @@
 
 (* curs_refresh **************************************************************)
 fn refresh : () -> void
-