Radix cross Linux Package Tools

Package Tools – is a set of utilities to create, install, and update RcL packages

8 Commits   0 Branches   2 Tags
     5         kx 
     5         kx /**********************************************************************
     5         kx 
     5         kx   Copyright 2019 Andrey V.Kosteltsev
     5         kx 
     5         kx   Licensed under the Radix.pro License, Version 1.0 (the "License");
     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 
     5         kx      https://radix.pro/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, &current );
     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 }