home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2007 January, February, March & April
/
Chip-Cover-CD-2007-02.iso
/
boot
/
i386
/
root
/
usr
/
share
/
YaST2
/
modules
/
OSRFloppy.ycp
< prev
next >
Wrap
Text File
|
2006-11-29
|
7KB
|
309 lines
/**
* File:
* OSRFloppy.ycp
*
* Module:
* Read/Write files from floppy with dialog support.
*
* Summary:
* How to use OSRFloppy module:
* 1. OSRFloppy::Open( with ui support, count of files to read/wirte );
*
* 2. optional: OSRFloppy::NextStep(_(Copy the file .. ));
* WFM::Execute(.local.bash, "/bin/cp ... "); or
* OSRFloppy::ReadMap( .. ) or
* OSRFloppy::SaveMap( .. )
*
* 3. OSRFloppy::Close();
*
* Author:
* Johannes Buchhold <jbuch@suse.de>
*
* $Id: OSRFloppy.ycp 24138 2005-07-18 15:30:14Z jsuchome $
*/
{
module "OSRFloppy";
textdomain "repair";
import "StorageDevices";
import "Storage";
import "Report";
import "Label";
import "OSRModuleLoading";
/**
* Default mount point
*/
global string mount_point = "/media/floppy";
/**
* Default floppy device
*/
global string floppy_device = StorageDevices::FloppyDevice;
/**
* Supported file systems
*/
list<string> needed_fs_kernel_modules = ["fat", "vfat" ];
/**
* Only for internal use.
*/
boolean dialog_open = false;
boolean use_ui = true;
integer step = 0;
global boolean opened = false;
/**
* Reset the internal values.
*/
define void Reset(boolean local_use_ui)``{
use_ui = local_use_ui;
step = 0;
mount_point = "/media/floppy";
}
/**
* Check if a floppy device exists.
*/
define boolean CheckPresent()``{
if ( ! StorageDevices::FloppyPresent )
{
// error message
string message = _("
No floppy device was detected. Loading a
file from a removable device is not possible.
");
if ( use_ui ) {
Report::Error(message);
}
else {
y2error(message);
}
return false;
}
return true;
}
/**
* Load needed fs modules.
*/
define boolean LoadFsModules()``{
boolean error = false;
foreach (string module_name, needed_fs_kernel_modules, ``{
if ( !error ) {
if ( !OSRModuleLoading::Load (module_name,"","","",false, true ))
{
// error popup, %1 is name of kernel module (driver)
string message = sformat(_("
An error occurred while loading the %1 kernel
module. Mounting the floppy device is not possible.
System information cannot be read.
"), "");
if ( use_ui )
Report::Error(message);
else
y2error(message );
error = true;
}
}
});
return !error;
}
/**
* Check the mount point! If the mount point does not exist
* CheckMountPoint create it.
*/
define boolean CheckMountPoint()``{
string command = sformat("/usr/bin/test -d %1", mount_point );
if ( WFM::Execute(.local.bash, command) != 0 ) {
// error popup (%1 is mount point, e.g. /media/floppy)
string message = sformat (_("
The default floppy mount point %1
does not exist and cannot be created.
"), mount_point);
if ((integer) WFM::Execute (.local.bash, sformat("if /usr/bin/test -d %1; then /bin/mkdir %1; fi", "/media" )) == 0)
{
if ((integer) WFM::Execute (.local.bash, sformat("if /usr/bin/test -d %1; then /bin/mkdir %1; fi", "/media/floppy" )) == 0)
{
return true;
}
}
if ( use_ui )
Report::Error(message);
else
y2error(message);
return false;
}
return true;
}
/**
* Mount default floppy device
*/
define boolean Mount()``{
//WFM::Execute(.local.bash, "/bin/umount " + mount_point );
string mpoint = Storage::DeviceMounted( floppy_device );
if ( mpoint != "") {
y2milestone("Floppy is already mounted on %1", mpoint );
mount_point = mpoint;
return true;
}
if ( WFM::Execute(.local.bash, "/bin/mount " + floppy_device + " "+mount_point+ " -t auto" ) != 0 )
{
// error popup
string message = _("\nAn error occurred while mounting the floppy.");
if ( use_ui )
Report::Error(message);
else
y2error(message );
return false;
}
return true;
}
/**
* Unmount floppy device
*/
define boolean Umount()``{
if( Storage::DeviceMounted(floppy_device) == "")
return true;
if ((integer)WFM::Execute(.local.bash, "/bin/umount "+ mount_point) != 0)
{
// error popup
string message = _("An error occurred while unmounting the floppy.");
if ( use_ui )
Report::Error(message);
else
y2error(message );
return false;
}
return true;
}
/**
* Open the floppy dialog
*/
define boolean OpenFloppyDialog(string label, integer steps)``{
UI::OpenDialog (
`VBox(
`ProgressBar (`id(`progress), label, steps, 0),
`VSpacing(0.4),
`PushButton(`id(`cancel ) , Label::CancelButton() )
)
);
UI::SetFocus(`id(`cancel ));
dialog_open = true;
return true;
}
/**
* Change the text in the floppy dialog and increase the progress bar.
* If not dialog is opened, write the test to the YaST2 log file (y2log).
*/
global define void NextStep( string label ) ``{
y2milestone( label );
if ( dialog_open && use_ui ) {
step = step + 1;
UI::ChangeWidget(`id(`progress), `Value, step);
UI::ChangeWidget(`id(`progress), `Label, label );
}
else {
y2milestone( label );
}
}
/**
* Close the floppy dialog if the dialog is opened.
*/
define boolean CloseFloppyDialog()``{
if ( dialog_open ) {
if ( UI::CloseDialog() ) {
dialog_open = false;
return true;
}
y2error("Floppy Dialog could not be closed");
return false;
}
return true;
}
/**
* Open floppy for IO.
* Afterwards you must call OSRFloppy::Close().
*/
global define boolean Open(boolean use_ui, integer count_io_files )``{
if( opened ) {
y2error("Floppy is already opened. Please use
CloseFloppy(...) to close floppy device.");
return false;
}
opened = true;
Reset( use_ui );
//progress bar label
if ( use_ui ) OpenFloppyDialog( _("Checking floppy device..."), count_io_files + 4 );
if ( ! CheckPresent()) return false;
// label text
NextStep(_("Loading file system modules...") );
if ( ! LoadFsModules()) return false;
// label text
NextStep(_("Checking mount point..."));
if ( ! CheckMountPoint()) return false;
// label text
NextStep(_("Mounting floppy..."));
if ( ! Mount()) return false;
return true;
}
/**
* Close Floppy Dialog and unmount floppy device.
* You must call OSRFloppy::Open(.. ) before.
*/
global define boolean Close()``{
if( ! opened ) {
y2error("Floppy is not opend. Could not close floppy device.");
return false;
}
boolean error = false;
// label text
NextStep(_("Unmounting floppy..."));
if ( !Umount()) error = true;
if ( use_ui ) CloseFloppyDialog();
opened = false;
return ! error;
}
}//EOF