~toastal/klossi
Showing details for patch ab5a6072378f6cc1331089efefedc26c543d4dbf.
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 -