1
0
mirror of https://github.com/wfjm/w11.git synced 2026-01-27 04:42:13 +00:00

default disk scheme now parametrized via rlw

This commit is contained in:
Walter F.J. Mueller
2017-04-02 20:21:09 +02:00
parent 3de030a0dd
commit d333d6b356
4 changed files with 78 additions and 21 deletions

View File

@@ -1,4 +1,4 @@
// $Id: Rw11VirtDisk.cpp 864 2017-04-02 13:20:18Z mueller $
// $Id: Rw11VirtDisk.cpp 867 2017-04-02 18:16:33Z mueller $
//
// Copyright 2013-2017 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
//
@@ -13,6 +13,7 @@
//
// Revision History:
// Date Rev Version Comment
// 2017-04-02 866 1.2 add default scheme handling
// 2017-04-02 864 1.1 add Rw11VirtDiskOver
// 2013-03-03 494 1.0 Initial version
// 2013-02-13 488 0.1 First draft
@@ -20,13 +21,14 @@
/*!
\file
\version $Id: Rw11VirtDisk.cpp 864 2017-04-02 13:20:18Z mueller $
\version $Id: Rw11VirtDisk.cpp 867 2017-04-02 18:16:33Z mueller $
\brief Implemenation of Rw11VirtDisk.
*/
#include <memory>
#include "librtools/RosFill.hpp"
#include "librtools/RparseUrl.hpp"
#include "librtools/Rexception.hpp"
#include "Rw11VirtDiskFile.hpp"
#include "Rw11VirtDiskOver.hpp"
@@ -42,6 +44,11 @@ using namespace std;
// all method definitions in namespace Retro
namespace Retro {
//------------------------------------------+-----------------------------------
// static definitions
std::string Rw11VirtDisk::sDefaultScheme("file");
//------------------------------------------+-----------------------------------
//! Default constructor
@@ -65,10 +72,24 @@ Rw11VirtDisk::~Rw11VirtDisk()
//------------------------------------------+-----------------------------------
//! FIXME_docs
void Rw11VirtDisk::Dump(std::ostream& os, int ind, const char* text) const
{
RosFill bl(ind);
os << bl << (text?text:"--") << "Rw11VirtDisk @ " << this << endl;
os << bl << " fBlkSize: " << fBlkSize << endl;
os << bl << " fNBlock: " << fNBlock << endl;
Rw11Virt::Dump(os, ind, " ^");
return;
}
//------------------------------------------+-----------------------------------
//! FIXME_docs
Rw11VirtDisk* Rw11VirtDisk::New(const std::string& url, Rw11Unit* punit,
RerrMsg& emsg)
{
string scheme = RparseUrl::FindScheme(url, "file");
string scheme = RparseUrl::FindScheme(url, sDefaultScheme);
unique_ptr<Rw11VirtDisk> p;
if (scheme == "file") { // scheme -> file:
@@ -90,16 +111,21 @@ Rw11VirtDisk* Rw11VirtDisk::New(const std::string& url, Rw11Unit* punit,
//------------------------------------------+-----------------------------------
//! FIXME_docs
void Rw11VirtDisk::Dump(std::ostream& os, int ind, const char* text) const
const std::string& Rw11VirtDisk::DefaultScheme()
{
RosFill bl(ind);
os << bl << (text?text:"--") << "Rw11VirtDisk @ " << this << endl;
return sDefaultScheme;
}
//------------------------------------------+-----------------------------------
//! FIXME_docs
os << bl << " fBlkSize: " << fBlkSize << endl;
os << bl << " fNBlock: " << fNBlock << endl;
Rw11Virt::Dump(os, ind, " ^");
void Rw11VirtDisk::SetDefaultScheme(const std::string& scheme)
{
if (scheme != "file" && scheme != "over")
throw Rexception("Rw11VirtDisk::SetDefaultScheme",
"only 'file' or 'over' allowed");
sDefaultScheme = scheme;
return;
}
} // end namespace Retro

View File

@@ -1,4 +1,4 @@
// $Id: Rw11VirtDisk.hpp 864 2017-04-02 13:20:18Z mueller $
// $Id: Rw11VirtDisk.hpp 867 2017-04-02 18:16:33Z mueller $
//
// Copyright 2013-2017 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
//
@@ -13,6 +13,7 @@
//
// Revision History:
// Date Rev Version Comment
// 2017-04-02 866 1.1 add default scheme handling
// 2013-03-03 494 1.0 Initial version
// 2013-02-13 488 0.1 First draft
// ---------------------------------------------------------------------------
@@ -20,13 +21,15 @@
/*!
\file
\version $Id: Rw11VirtDisk.hpp 864 2017-04-02 13:20:18Z mueller $
\version $Id: Rw11VirtDisk.hpp 867 2017-04-02 18:16:33Z mueller $
\brief Declaration of class Rw11VirtDisk.
*/
#ifndef included_Retro_Rw11VirtDisk
#define included_Retro_Rw11VirtDisk 1
#include <string>
#include "Rw11Virt.hpp"
namespace Retro {
@@ -50,6 +53,9 @@ namespace Retro {
static Rw11VirtDisk* New(const std::string& url, Rw11Unit* punit,
RerrMsg& emsg);
static const std::string& DefaultScheme();
static void SetDefaultScheme(const std::string& scheme);
// statistics counter indices
enum stats {
kStatNVDRead = Rw11Virt::kDimStat,
@@ -62,6 +68,9 @@ namespace Retro {
protected:
size_t fBlkSize; //<! block size in byte
size_t fNBlock; //<! disk size in blocks
protected:
static std::string sDefaultScheme; //<! default scheme
};
} // end namespace Retro

View File

@@ -1,6 +1,6 @@
// $Id: RtclRw11.cpp 858 2017-03-05 17:41:37Z mueller $
// $Id: RtclRw11.cpp 867 2017-04-02 18:16:33Z mueller $
//
// Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
// Copyright 2013-2017 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
//
// This program is free software; you may redistribute and/or modify it under
// the terms of the GNU General Public License as published by the Free
@@ -13,6 +13,7 @@
//
// Revision History:
// Date Rev Version Comment
// 2017-04-02 866 1.0.2 add M_set; handle default disk scheme
// 2015-03-28 660 1.0.1 add M_get
// 2014-12-25 621 1.1 adopt to 4k word ibus window
// 2013-03-06 495 1.0 Initial version
@@ -21,7 +22,7 @@
/*!
\file
\version $Id: RtclRw11.cpp 858 2017-03-05 17:41:37Z mueller $
\version $Id: RtclRw11.cpp 867 2017-04-02 18:16:33Z mueller $
\brief Implemenation of class RtclRw11.
*/
@@ -38,6 +39,7 @@
#include "RtclRw11CpuW11a.hpp"
#include "librw11/Rw11Cpu.hpp"
#include "librw11/Rw11Cntl.hpp"
#include "librw11/Rw11VirtDisk.hpp"
#include "RtclRw11.hpp"
@@ -57,16 +59,22 @@ namespace Retro {
RtclRw11::RtclRw11(Tcl_Interp* interp, const char* name)
: RtclProxyOwned<Rw11>("Rw11", interp, name, new Rw11()),
fspServ(),
fGets()
fGets(),
fSets()
{
AddMeth("get", boost::bind(&RtclRw11::M_get, this, _1));
AddMeth("set", boost::bind(&RtclRw11::M_set, this, _1));
AddMeth("start", boost::bind(&RtclRw11::M_start, this, _1));
AddMeth("dump", boost::bind(&RtclRw11::M_dump, this, _1));
AddMeth("$default", boost::bind(&RtclRw11::M_default, this, _1));
Rw11* pobj = &Obj();
fGets.Add<bool> ("started",boost::bind(&Rw11::IsStarted, pobj));
fGets.Add<bool> ("started",boost::bind(&Rw11::IsStarted, pobj));
fGets.Add<const string&> ("diskscheme",
boost::bind(&Rw11VirtDisk::DefaultScheme));
fSets.Add<const string&> ("diskscheme",
boost::bind(&Rw11VirtDisk::SetDefaultScheme, _1));
}
//------------------------------------------+-----------------------------------
@@ -132,6 +140,16 @@ int RtclRw11::M_get(RtclArgs& args)
//------------------------------------------+-----------------------------------
//! FIXME_docs
int RtclRw11::M_set(RtclArgs& args)
{
// synchronize with server thread
boost::lock_guard<RlinkConnect> lock(Obj().Connect());
return fSets.M_set(args);
}
//------------------------------------------+-----------------------------------
//! FIXME_docs
int RtclRw11::M_start(RtclArgs& args)
{
if (!args.AllDone()) return kERR;

View File

@@ -1,6 +1,6 @@
// $Id: RtclRw11.hpp 660 2015-03-29 22:10:16Z mueller $
// $Id: RtclRw11.hpp 867 2017-04-02 18:16:33Z mueller $
//
// Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
// Copyright 2013-2017 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
//
// This program is free software; you may redistribute and/or modify it under
// the terms of the GNU General Public License as published by the Free
@@ -13,6 +13,7 @@
//
// Revision History:
// Date Rev Version Comment
// 2017-04-02 866 1.0.2 add M_set
// 2015-03-28 660 1.0.1 add M_get
// 2013-03-06 495 1.0 Initial version
// 2013-01-27 478 0.1 First draft
@@ -20,7 +21,7 @@
/*!
\file
\version $Id: RtclRw11.hpp 660 2015-03-29 22:10:16Z mueller $
\version $Id: RtclRw11.hpp 867 2017-04-02 18:16:33Z mueller $
\brief Declaration of class RtclRw11.
*/
@@ -34,6 +35,7 @@
#include "librtcltools/RtclProxyOwned.hpp"
#include "librtcltools/RtclGetList.hpp"
#include "librtcltools/RtclSetList.hpp"
#include "librlink/RlinkServer.hpp"
#include "librw11/Rw11.hpp"
@@ -49,6 +51,7 @@ namespace Retro {
protected:
int M_get(RtclArgs& args);
int M_set(RtclArgs& args);
int M_start(RtclArgs& args);
int M_dump(RtclArgs& args);
int M_default(RtclArgs& args);
@@ -56,6 +59,7 @@ namespace Retro {
protected:
boost::shared_ptr<RlinkServer> fspServ;
RtclGetList fGets;
RtclSetList fSets;
};
} // end namespace Retro