[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Adding wide support to the Ada binding?
From: |
Patrick |
Subject: |
Re: Adding wide support to the Ada binding? |
Date: |
Sat, 19 Aug 2017 22:40:56 -0400 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Icedove/38.8.0 |
Hi Thomas
Thanks for answering my post !
Since I wrote it, I found out something and I am very happy about it.
As I was saying, I worked very hard to learn Ada in 2012 and I basically
failed.
I now know why and I now hate Interfaces.C and the -fdump-ada-spec GCC
switch, they ruined my Ada experience.
If we have Interfaces.C.int it is not compatible with a regular Ada
integer. The hated library and tool above forces everyone to cast back
and forth when in fact the regular built in Ada types are already
compatible with C. In almost all cases Interfaces.C does nothing but get
in the way.
I learned this from a long time Ada programmer on #ada on freenode but
no one seems to use this, everyone is using Interfaces.C and
-fdump-ada-spec dumps Interfaces.C code and it dump a massive amount of it.
If you are interested, I posted to the Ada list here:
https://groups.google.com/forum/#!topic/comp.lang.ada/aXe3VJ3Q30c
My thread is dying. I am not sure if this is because no one cares or no
one knows.
Please look at the current Ada ncurses binding, just like the other Ada
bindings it recreates structs as records and then creates a pointer of
that record's type. Meanwhile the members of that record/struct are not
supposed to be accessed by the user, they should use the API.
There is no reason to create records within records within records. A
pointer of the record's/struct's type can be created without recreating
the record.
Please see this simple code. I am well on my way to being able to build
a ncurses Ada binding without Interfaces.C.
-------------------------------------------------------------------
terminal_app.adb
with ncurses_glue ;
with ada.strings.fixed ;
procedure terminal_app is
package ng renames ncurses_glue ;
package sf renames ada.strings.fixed ;
stdscr : access ng.WINDOW ;
ret : integer ;
str : string := "test 㐴 " & ASCII.NUL ;
ch : character ;
begin
stdscr := ng.initscr_plus ;
ret := ng.addstr(str) ;
ret := ng.refresh ;
ch := ng.getch ;
ret := ng.endwin ;
end terminal_app ;
-------------------------------------------------------------------
ncurses_glue.ads
package ncurses_glue is
type null_record is null record ;
type WINDOW is access null_record ;
function initscr_plus
return Access WINDOW;
pragma Import (C, initscr_plus, "initscr_plus");
function addstr (arg1 : string)
return integer ;
pragma Import (C, addstr, "addstr");
function refresh
return integer;
pragma Import (C, refresh, "refresh") ;
function getch
return character ;
pragma Import (C, getch, "getch") ;
function endwin
return integer;
pragma Import (C, endwin, "endwin") ;
end ncurses_glue ;
-------------------------------------------------------------------
ncurses_c_glue.c
#include <ncursesw/ncurses.h>
#include <locale.h>
void * initscr_plus() {
setlocale(LC_CTYPE,"");
initscr() ;
return stdscr ;
}
-------------------------------------------------------------------
unicode already works!
It's easy to read, the C API could serve as documentation and with your
new thread safe support, people could write code that blocks as usual
for user input but also has tasks writing data to the screen at the same
time.
Think of the possibilities, people could have stock information, sixel
graphics or braille graphs plotting away as live graphs or text, while
also blocking for user input !
I hope to bind most if not all of ncurses over the next few weeks. I
actually want to use it with GnuCOBOL. This is my favourite language. It
has an nucrses toolkit built right in. I have been given an experimental
branch to add more ncurses functionality, hopefully my changes will be
accepted.
If you would like, I can send all the Ada stuff to you to evaluate ? I
can also send a build file for the samples I just posted, if you would
like or if anyone watching this thread wants it?
There is no pressure to include anything in your great project, you
could just see if you like it.
I am so happy. It was a punishing defeat to leave Ada after investing a
year with it. Now I feel like I have that year back. I am going to have
lots of fun blending C, Ada and COBOL
Have a great night-Patrick