Radix cross Linux package tools

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

3 Commits   0 Branches   2 Tags
11c606a6 (kx 2023-04-11 01:18:34 +0300   1) 
11c606a6 (kx 2023-04-11 01:18:34 +0300   2) /**********************************************************************
11c606a6 (kx 2023-04-11 01:18:34 +0300   3) 
11c606a6 (kx 2023-04-11 01:18:34 +0300   4)   Copyright 2019 Andrey V.Kosteltsev
11c606a6 (kx 2023-04-11 01:18:34 +0300   5) 
11c606a6 (kx 2023-04-11 01:18:34 +0300   6)   Licensed under the Radix.pro License, Version 1.0 (the "License");
11c606a6 (kx 2023-04-11 01:18:34 +0300   7)   you may not use this file  except  in compliance with the License.
11c606a6 (kx 2023-04-11 01:18:34 +0300   8)   You may obtain a copy of the License at
11c606a6 (kx 2023-04-11 01:18:34 +0300   9) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  10)      https://radix.pro/licenses/LICENSE-1.0-en_US.txt
11c606a6 (kx 2023-04-11 01:18:34 +0300  11) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  12)   Unless required by applicable law or agreed to in writing, software
11c606a6 (kx 2023-04-11 01:18:34 +0300  13)   distributed under the License is distributed on an "AS IS" BASIS,
11c606a6 (kx 2023-04-11 01:18:34 +0300  14)   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
11c606a6 (kx 2023-04-11 01:18:34 +0300  15)   implied.
11c606a6 (kx 2023-04-11 01:18:34 +0300  16) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  17)  **********************************************************************/
11c606a6 (kx 2023-04-11 01:18:34 +0300  18) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  19) #include <stdlib.h>
11c606a6 (kx 2023-04-11 01:18:34 +0300  20) #include <stdio.h>
11c606a6 (kx 2023-04-11 01:18:34 +0300  21) #include <linux/limits.h>
11c606a6 (kx 2023-04-11 01:18:34 +0300  22) #include <strings.h>  /* index(3)    */
11c606a6 (kx 2023-04-11 01:18:34 +0300  23) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  24) #include <dialog.h>
11c606a6 (kx 2023-04-11 01:18:34 +0300  25) #include <dlg_colors.h>
11c606a6 (kx 2023-04-11 01:18:34 +0300  26) #include <dlg_keys.h>
11c606a6 (kx 2023-04-11 01:18:34 +0300  27) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  28) #include <msglog.h>
11c606a6 (kx 2023-04-11 01:18:34 +0300  29) #include <wrapper.h>
11c606a6 (kx 2023-04-11 01:18:34 +0300  30) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  31)   /*************************************************
11c606a6 (kx 2023-04-11 01:18:34 +0300  32)     Ruler: 68 characters + 2 spaces left and right:
11c606a6 (kx 2023-04-11 01:18:34 +0300  33) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  34)                            | ----handy-ruler----------------------------------------------------- | */
11c606a6 (kx 2023-04-11 01:18:34 +0300  35) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  36) int info_box( const char *title, const char *message, int height, int sleep, int clear_screen )
11c606a6 (kx 2023-04-11 01:18:34 +0300  37) {
11c606a6 (kx 2023-04-11 01:18:34 +0300  38)   int status = 0;
11c606a6 (kx 2023-04-11 01:18:34 +0300  39) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  40)   FILE *in = stdin, *out = stdout;
11c606a6 (kx 2023-04-11 01:18:34 +0300  41) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  42)   bzero( (void *)&dialog_vars, sizeof(DIALOG_VARS) );
11c606a6 (kx 2023-04-11 01:18:34 +0300  43) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  44)   init_dialog( in, out );
11c606a6 (kx 2023-04-11 01:18:34 +0300  45) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  46)   dialog_vars.colors = 1;
11c606a6 (kx 2023-04-11 01:18:34 +0300  47)   dialog_vars.backtitle = "\\Z7Radix\\Zn \\Z1cross\\Zn \\Z7Linux\\Zn";
11c606a6 (kx 2023-04-11 01:18:34 +0300  48)   if( clear_screen ) dialog_vars.dlg_clear_screen = 1;
11c606a6 (kx 2023-04-11 01:18:34 +0300  49)   dialog_vars.sleep_secs = sleep;
11c606a6 (kx 2023-04-11 01:18:34 +0300  50) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  51)   dlg_put_backtitle();
11c606a6 (kx 2023-04-11 01:18:34 +0300  52) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  53)   status = dialog_msgbox( title, message, height, 74, 0 );
11c606a6 (kx 2023-04-11 01:18:34 +0300  54) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  55)   if( dialog_vars.sleep_secs )
11c606a6 (kx 2023-04-11 01:18:34 +0300  56)     (void)napms(dialog_vars.sleep_secs * 1000);
11c606a6 (kx 2023-04-11 01:18:34 +0300  57) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  58)   if( dialog_vars.dlg_clear_screen )
11c606a6 (kx 2023-04-11 01:18:34 +0300  59)   {
11c606a6 (kx 2023-04-11 01:18:34 +0300  60)     dlg_clear();
11c606a6 (kx 2023-04-11 01:18:34 +0300  61)     (void)refresh();
11c606a6 (kx 2023-04-11 01:18:34 +0300  62)   }
11c606a6 (kx 2023-04-11 01:18:34 +0300  63)   end_dialog();
11c606a6 (kx 2023-04-11 01:18:34 +0300  64) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  65)   return status;
11c606a6 (kx 2023-04-11 01:18:34 +0300  66) }
11c606a6 (kx 2023-04-11 01:18:34 +0300  67) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  68) int info_pkg_box( const char *title, const char *pkgname, const char *pkgver, const char *priority,
11c606a6 (kx 2023-04-11 01:18:34 +0300  69)                   const char *message, int height, int sleep, int clear_screen )
11c606a6 (kx 2023-04-11 01:18:34 +0300  70) {
11c606a6 (kx 2023-04-11 01:18:34 +0300  71)   int status = 0;
11c606a6 (kx 2023-04-11 01:18:34 +0300  72) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  73)   char *tmp = NULL;
11c606a6 (kx 2023-04-11 01:18:34 +0300  74) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  75)   FILE *in = stdin, *out = stdout;
11c606a6 (kx 2023-04-11 01:18:34 +0300  76) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  77)   bzero( (void *)&dialog_vars, sizeof(DIALOG_VARS) );
11c606a6 (kx 2023-04-11 01:18:34 +0300  78) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  79)   tmp = (char *)malloc( (size_t)PATH_MAX );
11c606a6 (kx 2023-04-11 01:18:34 +0300  80)   if( !tmp ) { FATAL_ERROR( "Cannot allocate memory" ); }
11c606a6 (kx 2023-04-11 01:18:34 +0300  81)   bzero( (void *)tmp, PATH_MAX );
11c606a6 (kx 2023-04-11 01:18:34 +0300  82) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  83)   init_dialog( in, out );
11c606a6 (kx 2023-04-11 01:18:34 +0300  84) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  85)   dialog_vars.colors = 1;
11c606a6 (kx 2023-04-11 01:18:34 +0300  86)   dialog_vars.backtitle = "\\Z7Radix\\Zn \\Z1cross\\Zn \\Z7Linux\\Zn";
11c606a6 (kx 2023-04-11 01:18:34 +0300  87)   if( clear_screen ) dialog_vars.dlg_clear_screen = 1;
11c606a6 (kx 2023-04-11 01:18:34 +0300  88)   dialog_vars.sleep_secs = sleep;
11c606a6 (kx 2023-04-11 01:18:34 +0300  89) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  90)   dlg_put_backtitle();
11c606a6 (kx 2023-04-11 01:18:34 +0300  91) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  92)   if( pkgver )
11c606a6 (kx 2023-04-11 01:18:34 +0300  93)     (void)sprintf( &tmp[0], " %s \\Z1%s-%s\\Zn ", title, pkgname, pkgver );
11c606a6 (kx 2023-04-11 01:18:34 +0300  94)   else
11c606a6 (kx 2023-04-11 01:18:34 +0300  95)     (void)sprintf( &tmp[0], " %s \\Z1%s\\Zn ",title, pkgname );
11c606a6 (kx 2023-04-11 01:18:34 +0300  96) 
11c606a6 (kx 2023-04-11 01:18:34 +0300  97)   if( priority )
11c606a6 (kx 2023-04-11 01:18:34 +0300  98)   {
11c606a6 (kx 2023-04-11 01:18:34 +0300  99)     (void)strcat( &tmp[0], "[" );
11c606a6 (kx 2023-04-11 01:18:34 +0300 100)     (void)strcat( &tmp[0], priority );
11c606a6 (kx 2023-04-11 01:18:34 +0300 101)     (void)strcat( &tmp[0], "] " );
11c606a6 (kx 2023-04-11 01:18:34 +0300 102)   }
11c606a6 (kx 2023-04-11 01:18:34 +0300 103)   status = dialog_msgbox( (const char *)&tmp[0], message, height, 74, 0 );
11c606a6 (kx 2023-04-11 01:18:34 +0300 104) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 105)   free( tmp );
11c606a6 (kx 2023-04-11 01:18:34 +0300 106) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 107)   if( dialog_vars.sleep_secs )
11c606a6 (kx 2023-04-11 01:18:34 +0300 108)     (void)napms(dialog_vars.sleep_secs * 1000);
11c606a6 (kx 2023-04-11 01:18:34 +0300 109) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 110)   if( dialog_vars.dlg_clear_screen )
11c606a6 (kx 2023-04-11 01:18:34 +0300 111)   {
11c606a6 (kx 2023-04-11 01:18:34 +0300 112)     dlg_clear();
11c606a6 (kx 2023-04-11 01:18:34 +0300 113)     (void)refresh();
11c606a6 (kx 2023-04-11 01:18:34 +0300 114)   }
11c606a6 (kx 2023-04-11 01:18:34 +0300 115)   end_dialog();
11c606a6 (kx 2023-04-11 01:18:34 +0300 116) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 117)   return status;
11c606a6 (kx 2023-04-11 01:18:34 +0300 118) }
11c606a6 (kx 2023-04-11 01:18:34 +0300 119) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 120) int ask_install_box( const char *title, const char *pkgname, const char *pkgver, const char *priority,
11c606a6 (kx 2023-04-11 01:18:34 +0300 121)                      const char *message, int height, int sleep, int clear_screen )
11c606a6 (kx 2023-04-11 01:18:34 +0300 122) {
11c606a6 (kx 2023-04-11 01:18:34 +0300 123)   int status = 0;
11c606a6 (kx 2023-04-11 01:18:34 +0300 124) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 125)   char *tmp = NULL;
11c606a6 (kx 2023-04-11 01:18:34 +0300 126) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 127)   FILE *in = stdin, *out = stdout;
11c606a6 (kx 2023-04-11 01:18:34 +0300 128) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 129)   bzero( (void *)&dialog_vars, sizeof(DIALOG_VARS) );
11c606a6 (kx 2023-04-11 01:18:34 +0300 130) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 131)   tmp = (char *)malloc( (size_t)PATH_MAX );
11c606a6 (kx 2023-04-11 01:18:34 +0300 132)   if( !tmp ) { FATAL_ERROR( "Cannot allocate memory" ); }
11c606a6 (kx 2023-04-11 01:18:34 +0300 133)   bzero( (void *)tmp, PATH_MAX );
11c606a6 (kx 2023-04-11 01:18:34 +0300 134) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 135)   init_dialog( in, out );
11c606a6 (kx 2023-04-11 01:18:34 +0300 136) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 137)   dialog_vars.colors = 1;
11c606a6 (kx 2023-04-11 01:18:34 +0300 138)   dialog_vars.backtitle = "\\Z7Radix\\Zn \\Z1cross\\Zn \\Z7Linux\\Zn";
11c606a6 (kx 2023-04-11 01:18:34 +0300 139)   if( clear_screen ) dialog_vars.dlg_clear_screen = 1;
11c606a6 (kx 2023-04-11 01:18:34 +0300 140)   dialog_vars.sleep_secs = sleep;
11c606a6 (kx 2023-04-11 01:18:34 +0300 141) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 142)   dialog_vars.yes_label = "Install";
11c606a6 (kx 2023-04-11 01:18:34 +0300 143)   dialog_vars.no_label  = "Cancel";
11c606a6 (kx 2023-04-11 01:18:34 +0300 144) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 145)   dlg_put_backtitle();
11c606a6 (kx 2023-04-11 01:18:34 +0300 146) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 147)   (void)sprintf( &tmp[0],
11c606a6 (kx 2023-04-11 01:18:34 +0300 148)                  " %s \\Z1%s-%s\\Zn [%s] ",
11c606a6 (kx 2023-04-11 01:18:34 +0300 149)                  title, pkgname, pkgver, priority );
11c606a6 (kx 2023-04-11 01:18:34 +0300 150)   status = dialog_yesno( (const char *)&tmp[0], message, height, 74 );
11c606a6 (kx 2023-04-11 01:18:34 +0300 151) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 152)   free( tmp );
11c606a6 (kx 2023-04-11 01:18:34 +0300 153) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 154)   if( dialog_vars.sleep_secs )
11c606a6 (kx 2023-04-11 01:18:34 +0300 155)     (void)napms(dialog_vars.sleep_secs * 1000);
11c606a6 (kx 2023-04-11 01:18:34 +0300 156) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 157)   if( dialog_vars.dlg_clear_screen )
11c606a6 (kx 2023-04-11 01:18:34 +0300 158)   {
11c606a6 (kx 2023-04-11 01:18:34 +0300 159)     dlg_clear();
11c606a6 (kx 2023-04-11 01:18:34 +0300 160)     (void)refresh();
11c606a6 (kx 2023-04-11 01:18:34 +0300 161)   }
11c606a6 (kx 2023-04-11 01:18:34 +0300 162)   end_dialog();
11c606a6 (kx 2023-04-11 01:18:34 +0300 163) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 164)   return status;
11c606a6 (kx 2023-04-11 01:18:34 +0300 165) }
11c606a6 (kx 2023-04-11 01:18:34 +0300 166) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 167) int ask_remove_box( const char *title, const char *pkgname, const char *pkgver,
11c606a6 (kx 2023-04-11 01:18:34 +0300 168)                     const char *message, int height, int sleep, int clear_screen )
11c606a6 (kx 2023-04-11 01:18:34 +0300 169) {
11c606a6 (kx 2023-04-11 01:18:34 +0300 170)   int status = 0;
11c606a6 (kx 2023-04-11 01:18:34 +0300 171) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 172)   char *tmp = NULL;
11c606a6 (kx 2023-04-11 01:18:34 +0300 173) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 174)   FILE *in = stdin, *out = stdout;
11c606a6 (kx 2023-04-11 01:18:34 +0300 175) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 176)   bzero( (void *)&dialog_vars, sizeof(DIALOG_VARS) );
11c606a6 (kx 2023-04-11 01:18:34 +0300 177) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 178)   tmp = (char *)malloc( (size_t)PATH_MAX );
11c606a6 (kx 2023-04-11 01:18:34 +0300 179)   if( !tmp ) { FATAL_ERROR( "Cannot allocate memory" ); }
11c606a6 (kx 2023-04-11 01:18:34 +0300 180)   bzero( (void *)tmp, PATH_MAX );
11c606a6 (kx 2023-04-11 01:18:34 +0300 181) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 182)   init_dialog( in, out );
11c606a6 (kx 2023-04-11 01:18:34 +0300 183) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 184)   dialog_vars.colors = 1;
11c606a6 (kx 2023-04-11 01:18:34 +0300 185)   dialog_vars.backtitle = "\\Z7Radix\\Zn \\Z1cross\\Zn \\Z7Linux\\Zn";
11c606a6 (kx 2023-04-11 01:18:34 +0300 186)   if( clear_screen ) dialog_vars.dlg_clear_screen = 1;
11c606a6 (kx 2023-04-11 01:18:34 +0300 187)   dialog_vars.sleep_secs = sleep;
11c606a6 (kx 2023-04-11 01:18:34 +0300 188) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 189)   dialog_vars.yes_label = "Remove";
11c606a6 (kx 2023-04-11 01:18:34 +0300 190)   dialog_vars.no_label  = "Cancel";
11c606a6 (kx 2023-04-11 01:18:34 +0300 191) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 192)   dlg_put_backtitle();
11c606a6 (kx 2023-04-11 01:18:34 +0300 193) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 194)   (void)sprintf( &tmp[0],
11c606a6 (kx 2023-04-11 01:18:34 +0300 195)                  " %s \\Z1%s-%s\\Zn ",
11c606a6 (kx 2023-04-11 01:18:34 +0300 196)                  title, pkgname, pkgver );
11c606a6 (kx 2023-04-11 01:18:34 +0300 197)   status = dialog_yesno( (const char *)&tmp[0], message, height, 74 );
11c606a6 (kx 2023-04-11 01:18:34 +0300 198) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 199)   free( tmp );
11c606a6 (kx 2023-04-11 01:18:34 +0300 200) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 201)   if( dialog_vars.sleep_secs )
11c606a6 (kx 2023-04-11 01:18:34 +0300 202)     (void)napms(dialog_vars.sleep_secs * 1000);
11c606a6 (kx 2023-04-11 01:18:34 +0300 203) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 204)   if( dialog_vars.dlg_clear_screen )
11c606a6 (kx 2023-04-11 01:18:34 +0300 205)   {
11c606a6 (kx 2023-04-11 01:18:34 +0300 206)     dlg_clear();
11c606a6 (kx 2023-04-11 01:18:34 +0300 207)     (void)refresh();
11c606a6 (kx 2023-04-11 01:18:34 +0300 208)   }
11c606a6 (kx 2023-04-11 01:18:34 +0300 209)   end_dialog();
11c606a6 (kx 2023-04-11 01:18:34 +0300 210) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 211)   return status;
11c606a6 (kx 2023-04-11 01:18:34 +0300 212) }
11c606a6 (kx 2023-04-11 01:18:34 +0300 213) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 214) int ask_reinstall_box( const char *title, const char *pkgname, const char *pkgver,
11c606a6 (kx 2023-04-11 01:18:34 +0300 215)                        const char *message, int height, int sleep, int clear_screen )
11c606a6 (kx 2023-04-11 01:18:34 +0300 216) {
11c606a6 (kx 2023-04-11 01:18:34 +0300 217)   int status = 0;
11c606a6 (kx 2023-04-11 01:18:34 +0300 218) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 219)   char *tmp = NULL;
11c606a6 (kx 2023-04-11 01:18:34 +0300 220) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 221)   FILE *in = stdin, *out = stdout;
11c606a6 (kx 2023-04-11 01:18:34 +0300 222) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 223)   bzero( (void *)&dialog_vars, sizeof(DIALOG_VARS) );
11c606a6 (kx 2023-04-11 01:18:34 +0300 224) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 225)   tmp = (char *)malloc( (size_t)PATH_MAX );
11c606a6 (kx 2023-04-11 01:18:34 +0300 226)   if( !tmp ) { FATAL_ERROR( "Cannot allocate memory" ); }
11c606a6 (kx 2023-04-11 01:18:34 +0300 227)   bzero( (void *)tmp, PATH_MAX );
11c606a6 (kx 2023-04-11 01:18:34 +0300 228) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 229)   init_dialog( in, out );
11c606a6 (kx 2023-04-11 01:18:34 +0300 230) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 231)   dialog_vars.colors = 1;
11c606a6 (kx 2023-04-11 01:18:34 +0300 232)   dialog_vars.backtitle = "\\Z7Radix\\Zn \\Z1cross\\Zn \\Z7Linux\\Zn";
11c606a6 (kx 2023-04-11 01:18:34 +0300 233)   if( clear_screen ) dialog_vars.dlg_clear_screen = 1;
11c606a6 (kx 2023-04-11 01:18:34 +0300 234)   dialog_vars.sleep_secs = sleep;
11c606a6 (kx 2023-04-11 01:18:34 +0300 235) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 236)   dialog_vars.yes_label = "Re-install";
11c606a6 (kx 2023-04-11 01:18:34 +0300 237)   dialog_vars.no_label  = "Cancel";
11c606a6 (kx 2023-04-11 01:18:34 +0300 238) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 239)   dlg_put_backtitle();
11c606a6 (kx 2023-04-11 01:18:34 +0300 240) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 241)   (void)sprintf( &tmp[0],
11c606a6 (kx 2023-04-11 01:18:34 +0300 242)                  " %s \\Z1%s-%s\\Zn ",
11c606a6 (kx 2023-04-11 01:18:34 +0300 243)                  title, pkgname, pkgver );
11c606a6 (kx 2023-04-11 01:18:34 +0300 244)   status = dialog_yesno( (const char *)&tmp[0], message, height, 74 );
11c606a6 (kx 2023-04-11 01:18:34 +0300 245) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 246)   free( tmp );
11c606a6 (kx 2023-04-11 01:18:34 +0300 247) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 248)   if( dialog_vars.sleep_secs )
11c606a6 (kx 2023-04-11 01:18:34 +0300 249)     (void)napms(dialog_vars.sleep_secs * 1000);
11c606a6 (kx 2023-04-11 01:18:34 +0300 250) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 251)   if( dialog_vars.dlg_clear_screen )
11c606a6 (kx 2023-04-11 01:18:34 +0300 252)   {
11c606a6 (kx 2023-04-11 01:18:34 +0300 253)     dlg_clear();
11c606a6 (kx 2023-04-11 01:18:34 +0300 254)     (void)refresh();
11c606a6 (kx 2023-04-11 01:18:34 +0300 255)   }
11c606a6 (kx 2023-04-11 01:18:34 +0300 256)   end_dialog();
11c606a6 (kx 2023-04-11 01:18:34 +0300 257) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 258)   return status;
11c606a6 (kx 2023-04-11 01:18:34 +0300 259) }
11c606a6 (kx 2023-04-11 01:18:34 +0300 260) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 261) int ask_update_box( const char *title, const char *pkgname, const char *pkgver, const char *priority,
11c606a6 (kx 2023-04-11 01:18:34 +0300 262)                     const char *message, int height, int sleep, int clear_screen )
11c606a6 (kx 2023-04-11 01:18:34 +0300 263) {
11c606a6 (kx 2023-04-11 01:18:34 +0300 264)   int status = 0;
11c606a6 (kx 2023-04-11 01:18:34 +0300 265) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 266)   char *tmp = NULL;
11c606a6 (kx 2023-04-11 01:18:34 +0300 267) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 268)   FILE *in = stdin, *out = stdout;
11c606a6 (kx 2023-04-11 01:18:34 +0300 269) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 270)   bzero( (void *)&dialog_vars, sizeof(DIALOG_VARS) );
11c606a6 (kx 2023-04-11 01:18:34 +0300 271) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 272)   tmp = (char *)malloc( (size_t)PATH_MAX );
11c606a6 (kx 2023-04-11 01:18:34 +0300 273)   if( !tmp ) { FATAL_ERROR( "Cannot allocate memory" ); }
11c606a6 (kx 2023-04-11 01:18:34 +0300 274)   bzero( (void *)tmp, PATH_MAX );
11c606a6 (kx 2023-04-11 01:18:34 +0300 275) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 276)   init_dialog( in, out );
11c606a6 (kx 2023-04-11 01:18:34 +0300 277) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 278)   dialog_vars.colors = 1;
11c606a6 (kx 2023-04-11 01:18:34 +0300 279)   dialog_vars.backtitle = "\\Z7Radix\\Zn \\Z1cross\\Zn \\Z7Linux\\Zn";
11c606a6 (kx 2023-04-11 01:18:34 +0300 280)   if( clear_screen ) dialog_vars.dlg_clear_screen = 1;
11c606a6 (kx 2023-04-11 01:18:34 +0300 281)   dialog_vars.sleep_secs = sleep;
11c606a6 (kx 2023-04-11 01:18:34 +0300 282) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 283)   dialog_vars.yes_label = "Update";
11c606a6 (kx 2023-04-11 01:18:34 +0300 284)   dialog_vars.no_label  = "Cancel";
11c606a6 (kx 2023-04-11 01:18:34 +0300 285) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 286)   dlg_put_backtitle();
11c606a6 (kx 2023-04-11 01:18:34 +0300 287) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 288)   (void)sprintf( &tmp[0],
11c606a6 (kx 2023-04-11 01:18:34 +0300 289)                  " %s \\Z1%s-%s\\Zn [%s] ",
11c606a6 (kx 2023-04-11 01:18:34 +0300 290)                  title, pkgname, pkgver, priority );
11c606a6 (kx 2023-04-11 01:18:34 +0300 291)   status = dialog_yesno( (const char *)&tmp[0], message, height, 74 );
11c606a6 (kx 2023-04-11 01:18:34 +0300 292) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 293)   free( tmp );
11c606a6 (kx 2023-04-11 01:18:34 +0300 294) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 295)   if( dialog_vars.sleep_secs )
11c606a6 (kx 2023-04-11 01:18:34 +0300 296)     (void)napms(dialog_vars.sleep_secs * 1000);
11c606a6 (kx 2023-04-11 01:18:34 +0300 297) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 298)   if( dialog_vars.dlg_clear_screen )
11c606a6 (kx 2023-04-11 01:18:34 +0300 299)   {
11c606a6 (kx 2023-04-11 01:18:34 +0300 300)     dlg_clear();
11c606a6 (kx 2023-04-11 01:18:34 +0300 301)     (void)refresh();
11c606a6 (kx 2023-04-11 01:18:34 +0300 302)   }
11c606a6 (kx 2023-04-11 01:18:34 +0300 303)   end_dialog();
11c606a6 (kx 2023-04-11 01:18:34 +0300 304) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 305)   return status;
11c606a6 (kx 2023-04-11 01:18:34 +0300 306) }
11c606a6 (kx 2023-04-11 01:18:34 +0300 307) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 308) int select_packages_box( DIALOG_LISTITEM *items, int items_num, int sleep, int clear_screen )
11c606a6 (kx 2023-04-11 01:18:34 +0300 309) {
11c606a6 (kx 2023-04-11 01:18:34 +0300 310)   int status  = 0;
11c606a6 (kx 2023-04-11 01:18:34 +0300 311) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 312)   int current = 0;
11c606a6 (kx 2023-04-11 01:18:34 +0300 313)   const char *states = " *";
11c606a6 (kx 2023-04-11 01:18:34 +0300 314)   FILE *in = stdin, *out = stdout;
11c606a6 (kx 2023-04-11 01:18:34 +0300 315) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 316)   bzero( (void *)&dialog_vars, sizeof(DIALOG_VARS) );
11c606a6 (kx 2023-04-11 01:18:34 +0300 317) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 318)   init_dialog( in, out );
11c606a6 (kx 2023-04-11 01:18:34 +0300 319) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 320)   dialog_vars.colors = 1;
11c606a6 (kx 2023-04-11 01:18:34 +0300 321)   dialog_vars.column_separator = " ";
11c606a6 (kx 2023-04-11 01:18:34 +0300 322)   dialog_vars.backtitle = "\\Z7Radix\\Zn \\Z1cross\\Zn \\Z7Linux\\Zn";
11c606a6 (kx 2023-04-11 01:18:34 +0300 323)   if( clear_screen ) dialog_vars.dlg_clear_screen = 1;
11c606a6 (kx 2023-04-11 01:18:34 +0300 324)   dialog_vars.sleep_secs = sleep;
11c606a6 (kx 2023-04-11 01:18:34 +0300 325) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 326)   dialog_vars.yes_label = "Install";
11c606a6 (kx 2023-04-11 01:18:34 +0300 327)   dialog_vars.no_label  = "Cancel";
11c606a6 (kx 2023-04-11 01:18:34 +0300 328) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 329)   dlg_put_backtitle();
11c606a6 (kx 2023-04-11 01:18:34 +0300 330) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 331)   status = dlg_checklist( " \\Z0SELECT PACKAGES TO INSTALL\\Zn ",
11c606a6 (kx 2023-04-11 01:18:34 +0300 332)                           "\n"
11c606a6 (kx 2023-04-11 01:18:34 +0300 333)                           " Please confirm the packages  you wish to install.  Use the UP/DOWN\n"
11c606a6 (kx 2023-04-11 01:18:34 +0300 334)                           " keys to scroll through the list, and the SPACE key to deselect any\n"
11c606a6 (kx 2023-04-11 01:18:34 +0300 335)                           " items you don't want to install.\n"
11c606a6 (kx 2023-04-11 01:18:34 +0300 336)                           "\n"
11c606a6 (kx 2023-04-11 01:18:34 +0300 337)                           " Press ENTER when you are done.\n",
11c606a6 (kx 2023-04-11 01:18:34 +0300 338)                           19, 74 /* min 73 */, 7, items_num, items, states, 1, &current );
11c606a6 (kx 2023-04-11 01:18:34 +0300 339) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 340)   if( dialog_vars.sleep_secs )
11c606a6 (kx 2023-04-11 01:18:34 +0300 341)     (void)napms(dialog_vars.sleep_secs * 1000);
11c606a6 (kx 2023-04-11 01:18:34 +0300 342) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 343)   if( dialog_vars.dlg_clear_screen )
11c606a6 (kx 2023-04-11 01:18:34 +0300 344)   {
11c606a6 (kx 2023-04-11 01:18:34 +0300 345)     dlg_clear();
11c606a6 (kx 2023-04-11 01:18:34 +0300 346)     (void)refresh();
11c606a6 (kx 2023-04-11 01:18:34 +0300 347)   }
11c606a6 (kx 2023-04-11 01:18:34 +0300 348)   end_dialog();
11c606a6 (kx 2023-04-11 01:18:34 +0300 349) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 350)   return status;
11c606a6 (kx 2023-04-11 01:18:34 +0300 351) }
11c606a6 (kx 2023-04-11 01:18:34 +0300 352) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 353) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 354) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 355) void show_install_dlg_progress( int percent )
11c606a6 (kx 2023-04-11 01:18:34 +0300 356) {
11c606a6 (kx 2023-04-11 01:18:34 +0300 357)   static void *gauge = NULL;
11c606a6 (kx 2023-04-11 01:18:34 +0300 358) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 359) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 360)   if( percent < 1 )
11c606a6 (kx 2023-04-11 01:18:34 +0300 361)   {
11c606a6 (kx 2023-04-11 01:18:34 +0300 362)     if( gauge ) return; /* only one instance of progress box */
11c606a6 (kx 2023-04-11 01:18:34 +0300 363) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 364)     bzero( (void *)&dialog_vars, sizeof(DIALOG_VARS) );
11c606a6 (kx 2023-04-11 01:18:34 +0300 365) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 366)     init_dialog( stdin, stdout );
11c606a6 (kx 2023-04-11 01:18:34 +0300 367) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 368)     dialog_vars.colors = 1;
11c606a6 (kx 2023-04-11 01:18:34 +0300 369)     dialog_vars.backtitle = "\\Z7Radix\\Zn \\Z1cross\\Zn \\Z7Linux\\Zn";
11c606a6 (kx 2023-04-11 01:18:34 +0300 370)     dialog_vars.dlg_clear_screen = 0;
11c606a6 (kx 2023-04-11 01:18:34 +0300 371)     dialog_vars.sleep_secs = 0;
11c606a6 (kx 2023-04-11 01:18:34 +0300 372) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 373)     dlg_put_backtitle();
11c606a6 (kx 2023-04-11 01:18:34 +0300 374)     gauge = dlg_allocate_gauge( " \\Z0INSTALL PACKAGES\\Zn ",
11c606a6 (kx 2023-04-11 01:18:34 +0300 375)                                 "\n"
11c606a6 (kx 2023-04-11 01:18:34 +0300 376)                                 "  Please wait for install all specified packages:\n"
11c606a6 (kx 2023-04-11 01:18:34 +0300 377)                                 "\n\n", 8, 74, 0 );
11c606a6 (kx 2023-04-11 01:18:34 +0300 378)   }
11c606a6 (kx 2023-04-11 01:18:34 +0300 379) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 380)   if( gauge )
11c606a6 (kx 2023-04-11 01:18:34 +0300 381)     dlg_update_gauge( gauge, percent );
11c606a6 (kx 2023-04-11 01:18:34 +0300 382) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 383)   if( percent > 99 )
11c606a6 (kx 2023-04-11 01:18:34 +0300 384)   {
11c606a6 (kx 2023-04-11 01:18:34 +0300 385)     if( gauge )
11c606a6 (kx 2023-04-11 01:18:34 +0300 386)     {
11c606a6 (kx 2023-04-11 01:18:34 +0300 387)       dlg_free_gauge( gauge );
11c606a6 (kx 2023-04-11 01:18:34 +0300 388)       gauge = NULL;
11c606a6 (kx 2023-04-11 01:18:34 +0300 389) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 390)       if( dialog_vars.sleep_secs )
11c606a6 (kx 2023-04-11 01:18:34 +0300 391)         (void)napms(dialog_vars.sleep_secs * 1000);
11c606a6 (kx 2023-04-11 01:18:34 +0300 392) 
11c606a6 (kx 2023-04-11 01:18:34 +0300 393)       if( dialog_vars.dlg_clear_screen )
11c606a6 (kx 2023-04-11 01:18:34 +0300 394)       {
11c606a6 (kx 2023-04-11 01:18:34 +0300 395)         dlg_clear();
11c606a6 (kx 2023-04-11 01:18:34 +0300 396)         (void)refresh();
11c606a6 (kx 2023-04-11 01:18:34 +0300 397)       }
11c606a6 (kx 2023-04-11 01:18:34 +0300 398)       end_dialog();
11c606a6 (kx 2023-04-11 01:18:34 +0300 399)     }
11c606a6 (kx 2023-04-11 01:18:34 +0300 400)   }
11c606a6 (kx 2023-04-11 01:18:34 +0300 401) }