.\"***************************************************************************
.\" Copyright (c) 2010-2011,2014 Free Software Foundation, Inc.              *
.\"                                                                          *
.\" Permission is hereby granted, free of charge, to any person obtaining a  *
.\" copy of this software and associated documentation files (the            *
.\" "Software"), to deal in the Software without restriction, including      *
.\" without limitation the rights to use, copy, modify, merge, publish,      *
.\" distribute, distribute with modifications, sublicense, and/or sell       *
.\" copies of the Software, and to permit persons to whom the Software is    *
.\" furnished to do so, subject to the following conditions:                 *
.\"                                                                          *
.\" The above copyright notice and this permission notice shall be included  *
.\" in all copies or substantial portions of the Software.                   *
.\"                                                                          *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
.\"                                                                          *
.\" Except as contained in this notice, the name(s) of the above copyright   *
.\" holders shall not be used in advertising or otherwise to promote the     *
.\" sale, use or other dealings in this Software without prior written       *
.\" authorization.                                                           *
.\"***************************************************************************
.\"
.\" $Id: MKada_config.in,v 1.8 2014/06/07 19:32:52 tom Exp $
.TH ADACURSES "1" "" "" "User Commands"
.SH NAME
adacurses\-config \- helper script for AdaCurses libraries
.SH SYNOPSIS
.B adacurses\-config
[\fIoptions\fR]
.SH DESCRIPTION
This is a shell script which simplifies configuring an application to use
the AdaCurses library binding to ncurses.
.SH OPTIONS
.TP
\fB\-\-cflags\fR
echos the gnat (Ada compiler) flags needed to compile with AdaCurses.
.TP
\fB\-\-libs\fR
echos the gnat libraries needed to link with AdaCurses.
.TP
\fB\-\-version\fR
echos the release+patchdate version of the ncurses libraries used
to configure and build AdaCurses.
.TP
\fB\-\-help\fR
prints a list of the \fBadacurses\-config\fP script's options.
.PP
If no options are given, \fBadacurses\-config\fP prints the combination
of 
\fB\-\-cflags\fR and
\fB\-\-libs\fR
that \fBgnatmake\fP expects (see example).
.SH EXAMPLE
.PP
For example, supposing that you want to compile the "Hello World!"
program for AdaCurses.
Make a file named "hello.adb":
.RS
.nf
.ft CW
with Terminal_Interface.Curses; use Terminal_Interface.Curses;

procedure Hello is

   Visibility : Cursor_Visibility := Invisible;
   done : Boolean := False;
   c : Key_Code;

begin

   Init_Screen;
   Set_Echo_Mode (False);

   Set_Cursor_Visibility (Visibility);
   Set_Timeout_Mode (Standard_Window, Non_Blocking, 0);

   Move_Cursor (Line => Lines / 2, Column => (Columns - 12) / 2);
   Add (Str => "Hello World!");

   while not done loop

      c := Get_Keystroke (Standard_Window);
      case c is
      when Character'Pos ('q') => done := True;
      when others => null;
      end case;

      Nap_Milli_Seconds (50);
   end loop;

   End_Windows;

end Hello;
.fi
.RE
.PP
Then, using
.RS
.ft CW
gnatmake `adacurses-config --cflags` hello -largs `adacurses-config --libs`
.ft
.RE
.PP
or (simpler):
.RS
.ft CW
gnatmake hello `adacurses-config`
.ft
.RE
.PP
you will compile and link the program.
.SH "SEE ALSO"
\fBcurses\fR(3X)
.PP
This describes \fBncurses\fR
version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@).
