5 kx
5 kx /**********************************************************************
5 kx
5 kx Copyright 2019 Andrey V.Kosteltsev
5 kx
9 kx Licensed under the Radix cross Linux License, Version 1.0 .
5 kx you may not use this file except in compliance with the License.
5 kx You may obtain a copy of the License at
5 kx
9 kx https://radix-linux.su/licenses/LICENSE-1.0-en_US.txt
5 kx
5 kx Unless required by applicable law or agreed to in writing, software
5 kx distributed under the License is distributed on an "AS IS" BASIS,
5 kx WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
5 kx implied.
5 kx
5 kx **********************************************************************/
5 kx
5 kx #include <stdlib.h>
5 kx #include <stdio.h>
5 kx #include <linux/limits.h>
5 kx #include <strings.h> /* index(3) */
5 kx
5 kx #include <dialog.h>
5 kx #include <dlg_colors.h>
5 kx #include <dlg_keys.h>
5 kx
5 kx #include <msglog.h>
5 kx #include <wrapper.h>
5 kx
5 kx /*************************************************
5 kx Ruler: 68 characters + 2 spaces left and right:
5 kx
5 kx | ----handy-ruler----------------------------------------------------- | */
5 kx
5 kx int info_box( const char *title, const char *message, int height, int sleep, int clear_screen )
5 kx {
5 kx int status = 0;
5 kx
5 kx FILE *in = stdin, *out = stdout;
5 kx
5 kx bzero( (void *)&dialog_vars, sizeof(DIALOG_VARS) );
5 kx
5 kx init_dialog( in, out );
5 kx
5 kx dialog_vars.colors = 1;
5 kx dialog_vars.backtitle = "\\Z7Radix\\Zn \\Z1cross\\Zn \\Z7Linux\\Zn";
5 kx if( clear_screen ) dialog_vars.dlg_clear_screen = 1;
5 kx dialog_vars.sleep_secs = sleep;
5 kx
5 kx dlg_put_backtitle();
5 kx
5 kx status = dialog_msgbox( title, message, height, 74, 0 );
5 kx
5 kx if( dialog_vars.sleep_secs )
5 kx (void)napms(dialog_vars.sleep_secs * 1000);
5 kx
5 kx if( dialog_vars.dlg_clear_screen )
5 kx {
5 kx dlg_clear();
5 kx (void)refresh();
5 kx }
5 kx end_dialog();
5 kx
5 kx return status;
5 kx }
5 kx
5 kx int info_pkg_box( const char *title, const char *pkgname, const char *pkgver, const char *priority,
5 kx const char *message, int height, int sleep, int clear_screen )
5 kx {
5 kx int status = 0;
5 kx
5 kx char *tmp = NULL;
5 kx
5 kx FILE *in = stdin, *out = stdout;
5 kx
5 kx bzero( (void *)&dialog_vars, sizeof(DIALOG_VARS) );
5 kx
5 kx tmp = (char *)malloc( (size_t)PATH_MAX );
5 kx if( !tmp ) { FATAL_ERROR( "Cannot allocate memory" ); }
5 kx bzero( (void *)tmp, PATH_MAX );
5 kx
5 kx init_dialog( in, out );
5 kx
5 kx dialog_vars.colors = 1;
5 kx dialog_vars.backtitle = "\\Z7Radix\\Zn \\Z1cross\\Zn \\Z7Linux\\Zn";
5 kx if( clear_screen ) dialog_vars.dlg_clear_screen = 1;
5 kx dialog_vars.sleep_secs = sleep;
5 kx
5 kx dlg_put_backtitle();
5 kx
5 kx if( pkgver )
5 kx (void)sprintf( &tmp[0], " %s \\Z1%s-%s\\Zn ", title, pkgname, pkgver );
5 kx else
5 kx (void)sprintf( &tmp[0], " %s \\Z1%s\\Zn ",title, pkgname );
5 kx
5 kx if( priority )
5 kx {
5 kx (void)strcat( &tmp[0], "[" );
5 kx (void)strcat( &tmp[0], priority );
5 kx (void)strcat( &tmp[0], "] " );
5 kx }
5 kx status = dialog_msgbox( (const char *)&tmp[0], message, height, 74, 0 );
5 kx
5 kx free( tmp );
5 kx
5 kx if( dialog_vars.sleep_secs )
5 kx (void)napms(dialog_vars.sleep_secs * 1000);
5 kx
5 kx if( dialog_vars.dlg_clear_screen )
5 kx {
5 kx dlg_clear();
5 kx (void)refresh();
5 kx }
5 kx end_dialog();
5 kx
5 kx return status;
5 kx }
5 kx
5 kx int ask_install_box( const char *title, const char *pkgname, const char *pkgver, const char *priority,
5 kx const char *message, int height, int sleep, int clear_screen )
5 kx {
5 kx int status = 0;
5 kx
5 kx char *tmp = NULL;
5 kx
5 kx FILE *in = stdin, *out = stdout;
5 kx
5 kx bzero( (void *)&dialog_vars, sizeof(DIALOG_VARS) );
5 kx
5 kx tmp = (char *)malloc( (size_t)PATH_MAX );
5 kx if( !tmp ) { FATAL_ERROR( "Cannot allocate memory" ); }
5 kx bzero( (void *)tmp, PATH_MAX );
5 kx
5 kx init_dialog( in, out );
5 kx
5 kx dialog_vars.colors = 1;
5 kx dialog_vars.backtitle = "\\Z7Radix\\Zn \\Z1cross\\Zn \\Z7Linux\\Zn";
5 kx if( clear_screen ) dialog_vars.dlg_clear_screen = 1;
5 kx dialog_vars.sleep_secs = sleep;
5 kx
5 kx dialog_vars.yes_label = "Install";
5 kx dialog_vars.no_label = "Cancel";
5 kx
5 kx dlg_put_backtitle();
5 kx
5 kx (void)sprintf( &tmp[0],
5 kx " %s \\Z1%s-%s\\Zn [%s] ",
5 kx title, pkgname, pkgver, priority );
5 kx status = dialog_yesno( (const char *)&tmp[0], message, height, 74 );
5 kx
5 kx free( tmp );
5 kx
5 kx if( dialog_vars.sleep_secs )
5 kx (void)napms(dialog_vars.sleep_secs * 1000);
5 kx
5 kx if( dialog_vars.dlg_clear_screen )
5 kx {
5 kx dlg_clear();
5 kx (void)refresh();
5 kx }
5 kx end_dialog();
5 kx
5 kx return status;
5 kx }
5 kx
5 kx int ask_remove_box( const char *title, const char *pkgname, const char *pkgver,
5 kx const char *message, int height, int sleep, int clear_screen )
5 kx {
5 kx int status = 0;
5 kx
5 kx char *tmp = NULL;
5 kx
5 kx FILE *in = stdin, *out = stdout;
5 kx
5 kx bzero( (void *)&dialog_vars, sizeof(DIALOG_VARS) );
5 kx
5 kx tmp = (char *)malloc( (size_t)PATH_MAX );
5 kx if( !tmp ) { FATAL_ERROR( "Cannot allocate memory" ); }
5 kx bzero( (void *)tmp, PATH_MAX );
5 kx
5 kx init_dialog( in, out );
5 kx
5 kx dialog_vars.colors = 1;
5 kx dialog_vars.backtitle = "\\Z7Radix\\Zn \\Z1cross\\Zn \\Z7Linux\\Zn";
5 kx if( clear_screen ) dialog_vars.dlg_clear_screen = 1;
5 kx dialog_vars.sleep_secs = sleep;
5 kx
5 kx dialog_vars.yes_label = "Remove";
5 kx dialog_vars.no_label = "Cancel";
5 kx
5 kx dlg_put_backtitle();
5 kx
5 kx (void)sprintf( &tmp[0],
5 kx " %s \\Z1%s-%s\\Zn ",
5 kx title, pkgname, pkgver );
5 kx status = dialog_yesno( (const char *)&tmp[0], message, height, 74 );
5 kx
5 kx free( tmp );
5 kx
5 kx if( dialog_vars.sleep_secs )
5 kx (void)napms(dialog_vars.sleep_secs * 1000);
5 kx
5 kx if( dialog_vars.dlg_clear_screen )
5 kx {
5 kx dlg_clear();
5 kx (void)refresh();
5 kx }
5 kx end_dialog();
5 kx
5 kx return status;
5 kx }
5 kx
5 kx int ask_reinstall_box( const char *title, const char *pkgname, const char *pkgver,
5 kx const char *message, int height, int sleep, int clear_screen )
5 kx {
5 kx int status = 0;
5 kx
5 kx char *tmp = NULL;
5 kx
5 kx FILE *in = stdin, *out = stdout;
5 kx
5 kx bzero( (void *)&dialog_vars, sizeof(DIALOG_VARS) );
5 kx
5 kx tmp = (char *)malloc( (size_t)PATH_MAX );
5 kx if( !tmp ) { FATAL_ERROR( "Cannot allocate memory" ); }
5 kx bzero( (void *)tmp, PATH_MAX );
5 kx
5 kx init_dialog( in, out );
5 kx
5 kx dialog_vars.colors = 1;
5 kx dialog_vars.backtitle = "\\Z7Radix\\Zn \\Z1cross\\Zn \\Z7Linux\\Zn";
5 kx if( clear_screen ) dialog_vars.dlg_clear_screen = 1;
5 kx dialog_vars.sleep_secs = sleep;
5 kx
5 kx dialog_vars.yes_label = "Re-install";
5 kx dialog_vars.no_label = "Cancel";
5 kx
5 kx dlg_put_backtitle();
5 kx
5 kx (void)sprintf( &tmp[0],
5 kx " %s \\Z1%s-%s\\Zn ",
5 kx title, pkgname, pkgver );
5 kx status = dialog_yesno( (const char *)&tmp[0], message, height, 74 );
5 kx
5 kx free( tmp );
5 kx
5 kx if( dialog_vars.sleep_secs )
5 kx (void)napms(dialog_vars.sleep_secs * 1000);
5 kx
5 kx if( dialog_vars.dlg_clear_screen )
5 kx {
5 kx dlg_clear();
5 kx (void)refresh();
5 kx }
5 kx end_dialog();
5 kx
5 kx return status;
5 kx }
5 kx
5 kx int ask_update_box( const char *title, const char *pkgname, const char *pkgver, const char *priority,
5 kx const char *message, int height, int sleep, int clear_screen )
5 kx {
5 kx int status = 0;
5 kx
5 kx char *tmp = NULL;
5 kx
5 kx FILE *in = stdin, *out = stdout;
5 kx
5 kx bzero( (void *)&dialog_vars, sizeof(DIALOG_VARS) );
5 kx
5 kx tmp = (char *)malloc( (size_t)PATH_MAX );
5 kx if( !tmp ) { FATAL_ERROR( "Cannot allocate memory" ); }
5 kx bzero( (void *)tmp, PATH_MAX );
5 kx
5 kx init_dialog( in, out );
5 kx
5 kx dialog_vars.colors = 1;
5 kx dialog_vars.backtitle = "\\Z7Radix\\Zn \\Z1cross\\Zn \\Z7Linux\\Zn";
5 kx if( clear_screen ) dialog_vars.dlg_clear_screen = 1;
5 kx dialog_vars.sleep_secs = sleep;
5 kx
5 kx dialog_vars.yes_label = "Update";
5 kx dialog_vars.no_label = "Cancel";
5 kx
5 kx dlg_put_backtitle();
5 kx
5 kx (void)sprintf( &tmp[0],
5 kx " %s \\Z1%s-%s\\Zn [%s] ",
5 kx title, pkgname, pkgver, priority );
5 kx status = dialog_yesno( (const char *)&tmp[0], message, height, 74 );
5 kx
5 kx free( tmp );
5 kx
5 kx if( dialog_vars.sleep_secs )
5 kx (void)napms(dialog_vars.sleep_secs * 1000);
5 kx
5 kx if( dialog_vars.dlg_clear_screen )
5 kx {
5 kx dlg_clear();
5 kx (void)refresh();
5 kx }
5 kx end_dialog();
5 kx
5 kx return status;
5 kx }
5 kx
5 kx int select_packages_box( DIALOG_LISTITEM *items, int items_num, int sleep, int clear_screen )
5 kx {
5 kx int status = 0;
5 kx
5 kx int current = 0;
5 kx const char *states = " *";
5 kx FILE *in = stdin, *out = stdout;
5 kx
5 kx bzero( (void *)&dialog_vars, sizeof(DIALOG_VARS) );
5 kx
5 kx init_dialog( in, out );
5 kx
5 kx dialog_vars.colors = 1;
5 kx dialog_vars.column_separator = " ";
5 kx dialog_vars.backtitle = "\\Z7Radix\\Zn \\Z1cross\\Zn \\Z7Linux\\Zn";
5 kx if( clear_screen ) dialog_vars.dlg_clear_screen = 1;
5 kx dialog_vars.sleep_secs = sleep;
5 kx
5 kx dialog_vars.yes_label = "Install";
5 kx dialog_vars.no_label = "Cancel";
5 kx
5 kx dlg_put_backtitle();
5 kx
5 kx status = dlg_checklist( " \\Z0SELECT PACKAGES TO INSTALL\\Zn ",
5 kx "\n"
5 kx " Please confirm the packages you wish to install. Use the UP/DOWN\n"
5 kx " keys to scroll through the list, and the SPACE key to deselect any\n"
5 kx " items you don't want to install.\n"
5 kx "\n"
5 kx " Press ENTER when you are done.\n",
5 kx 19, 74 /* min 73 */, 7, items_num, items, states, 1, ¤t );
5 kx
5 kx if( dialog_vars.sleep_secs )
5 kx (void)napms(dialog_vars.sleep_secs * 1000);
5 kx
5 kx if( dialog_vars.dlg_clear_screen )
5 kx {
5 kx dlg_clear();
5 kx (void)refresh();
5 kx }
5 kx end_dialog();
5 kx
5 kx return status;
5 kx }
5 kx
5 kx
5 kx
5 kx void show_install_dlg_progress( int percent )
5 kx {
5 kx static void *gauge = NULL;
5 kx
5 kx
5 kx if( percent < 1 )
5 kx {
5 kx if( gauge ) return; /* only one instance of progress box */
5 kx
5 kx bzero( (void *)&dialog_vars, sizeof(DIALOG_VARS) );
5 kx
5 kx init_dialog( stdin, stdout );
5 kx
5 kx dialog_vars.colors = 1;
5 kx dialog_vars.backtitle = "\\Z7Radix\\Zn \\Z1cross\\Zn \\Z7Linux\\Zn";
5 kx dialog_vars.dlg_clear_screen = 0;
5 kx dialog_vars.sleep_secs = 0;
5 kx
5 kx dlg_put_backtitle();
5 kx gauge = dlg_allocate_gauge( " \\Z0INSTALL PACKAGES\\Zn ",
5 kx "\n"
5 kx " Please wait for install all specified packages:\n"
5 kx "\n\n", 8, 74, 0 );
5 kx }
5 kx
5 kx if( gauge )
5 kx dlg_update_gauge( gauge, percent );
5 kx
5 kx if( percent > 99 )
5 kx {
5 kx if( gauge )
5 kx {
5 kx dlg_free_gauge( gauge );
5 kx gauge = NULL;
5 kx
5 kx if( dialog_vars.sleep_secs )
5 kx (void)napms(dialog_vars.sleep_secs * 1000);
5 kx
5 kx if( dialog_vars.dlg_clear_screen )
5 kx {
5 kx dlg_clear();
5 kx (void)refresh();
5 kx }
5 kx end_dialog();
5 kx }
5 kx }
5 kx }