2016-07-21 Fred Gleason <fredg@paravelsystems.com>

* Implemented '!' override character in rdclilogedit(1).
This commit is contained in:
Fred Gleason 2016-07-21 13:33:44 -04:00
parent deeadbf0e9
commit c388bda77b
3 changed files with 57 additions and 11 deletions

View File

@ -15340,3 +15340,5 @@
2016-07-21 Fred Gleason <fredg@paravelsystems.com> 2016-07-21 Fred Gleason <fredg@paravelsystems.com>
* Fixed a bug in 'utils/rdclilogedit/rdclilogedit.cpp' that caused * Fixed a bug in 'utils/rdclilogedit/rdclilogedit.cpp' that caused
large output listings to be truncated. large output listings to be truncated.
2016-07-21 Fred Gleason <fredg@paravelsystems.com>
* Implemented '!' override character in rdclilogedit(1).

View File

@ -42,6 +42,7 @@ MainObject::MainObject(QObject *parent)
{ {
edit_log=NULL; edit_log=NULL;
edit_log_event=NULL; edit_log_event=NULL;
edit_modified=false;
// //
// Read Command Options // Read Command Options
@ -155,6 +156,7 @@ void MainObject::Addcart(int line,unsigned cartnum)
edit_log_event->logLine(line)->setFadedownGain(-3000); edit_log_event->logLine(line)->setFadedownGain(-3000);
edit_log_event->logLine(line)->setCartNumber(cartnum); edit_log_event->logLine(line)->setCartNumber(cartnum);
edit_log_event->refresh(line); edit_log_event->refresh(line);
edit_modified=true;
} }
else { else {
fprintf(stderr,"addcart: insufficient privileges [Add Log Items]\n"); fprintf(stderr,"addcart: insufficient privileges [Add Log Items]\n");
@ -190,6 +192,7 @@ void MainObject::Load(const QString &logname)
if(edit_log->exists()) { if(edit_log->exists()) {
edit_log_event=new RDLogEvent(RDLog::tableName(logname)); edit_log_event=new RDLogEvent(RDLog::tableName(logname));
edit_log_event->load(); edit_log_event->load();
edit_modified=false;
} }
else { else {
fprintf(stderr,"log \"%s\" does not exist\n",(const char *)logname); fprintf(stderr,"log \"%s\" does not exist\n",(const char *)logname);
@ -212,6 +215,7 @@ void MainObject::List()
void MainObject::Remove(int line) void MainObject::Remove(int line)
{ {
edit_log_event->remove(line,1); edit_log_event->remove(line,1);
edit_modified=true;
} }
@ -221,6 +225,7 @@ void MainObject::Save()
edit_log_event->save(); edit_log_event->save();
edit_log-> edit_log->
setModifiedDatetime(QDateTime(QDate::currentDate(),QTime::currentTime())); setModifiedDatetime(QDateTime(QDate::currentDate(),QTime::currentTime()));
edit_modified=false;
} }
else { else {
fprintf(stderr,"save: insufficient privileges [Rearrange Log Items]\n"); fprintf(stderr,"save: insufficient privileges [Rearrange Log Items]\n");
@ -252,6 +257,7 @@ void MainObject::Saveas(const QString &logname)
edit_log_event->save(); edit_log_event->save();
delete edit_log; delete edit_log;
edit_log=log; edit_log=log;
edit_modified=false;
} }
else { else {
fprintf(stderr,"saveas: log already exists\n"); fprintf(stderr,"saveas: log already exists\n");
@ -273,6 +279,7 @@ void MainObject::Setcart(int line,unsigned cartnum)
(logline->type()==RDLogLine::Macro)) { (logline->type()==RDLogLine::Macro)) {
logline->setCartNumber(cartnum); logline->setCartNumber(cartnum);
edit_log_event->refresh(line); edit_log_event->refresh(line);
edit_modified=true;
} }
else { else {
fprintf(stderr,"setcart: incompatible event type\n"); fprintf(stderr,"setcart: incompatible event type\n");
@ -292,6 +299,7 @@ void MainObject::Settime(int line,RDLogLine::TimeType type,const QTime &time)
{ {
edit_log_event->logLine(line)->setTimeType(type); edit_log_event->logLine(line)->setTimeType(type);
edit_log_event->logLine(line)->setStartTime(RDLogLine::Logged,time); edit_log_event->logLine(line)->setStartTime(RDLogLine::Logged,time);
edit_modified=true;
} }
@ -299,6 +307,7 @@ void MainObject::Settrans(int line,RDLogLine::TransType type)
{ {
edit_log_event->logLine(line)->setTransType(type); edit_log_event->logLine(line)->setTransType(type);
edit_log_event->refresh(line); edit_log_event->refresh(line);
edit_modified=true;
} }
@ -312,24 +321,41 @@ void MainObject::Unload()
delete edit_log_event; delete edit_log_event;
edit_log_event=NULL; edit_log_event=NULL;
} }
edit_modified=false;
}
void MainObject::OverwriteError(const QString &cmd) const
{
fprintf(stderr,"%s: buffer not saved (append \"!\" to override)\n",
(const char *)cmd);
} }
void MainObject::Print(const QString &str) const void MainObject::Print(const QString &str) const
{ {
printf("%s",(const char *)str); printf("%s",(const char *)str);
usleep(10); usleep(100);
} }
void MainObject::DispatchCommand(const QString &cmd) void MainObject::DispatchCommand(QString cmd)
{ {
QStringList cmds=cmds.split(" ",cmd);
QString verb=cmds[0].lower();
bool processed=false; bool processed=false;
int line; int line;
QTime time; QTime time;
bool ok=false; bool ok=false;
bool overwrite=!edit_modified;
QStringList cmds;
QString verb;
cmd=cmd.stripWhiteSpace();
if(cmd.right(1)=="!") {
overwrite=true;
cmd=cmd.left(cmd.length()-1).stripWhiteSpace();
}
cmds=cmds.split(" ",cmd);
verb=cmds[0].lower();
// //
// No loaded log needed for these // No loaded log needed for these
@ -349,11 +375,16 @@ void MainObject::DispatchCommand(const QString &cmd)
} }
if(verb=="load") { if(verb=="load") {
if(cmds.size()==2) { if(overwrite) {
Load(cmds[1]); if(cmds.size()==2) {
Load(cmds[1]);
}
else {
fprintf(stderr,"load: invalid command arguments\n");
}
} }
else { else {
fprintf(stderr,"load: invalid command arguments\n"); OverwriteError("load");
} }
processed=true; processed=true;
} }
@ -523,7 +554,12 @@ void MainObject::DispatchCommand(const QString &cmd)
} }
if(verb=="unload") { if(verb=="unload") {
Unload(); if(overwrite) {
Unload();
}
else {
OverwriteError("unload");
}
processed=true; processed=true;
} }
} }
@ -623,7 +659,13 @@ void MainObject::PrintPrompt() const
Print("logedit> "); Print("logedit> ");
} }
else { else {
Print(QString().sprintf("logedit [%s]> ",(const char *)edit_log->name())); if(edit_modified) {
Print(QString().sprintf("logedit[%s*]> ",
(const char *)edit_log->name()));
}
else {
Print(QString().sprintf("logedit[%s]> ",(const char *)edit_log->name()));
}
} }
fflush(stdout); fflush(stdout);
} }

View File

@ -58,12 +58,14 @@ class MainObject : public QObject
void Settime(int line,RDLogLine::TimeType type,const QTime &time=QTime()); void Settime(int line,RDLogLine::TimeType type,const QTime &time=QTime());
void Settrans(int line,RDLogLine::TransType type); void Settrans(int line,RDLogLine::TransType type);
void Unload(); void Unload();
void OverwriteError(const QString &cmd) const;
void Print(const QString &str) const; void Print(const QString &str) const;
void DispatchCommand(const QString &cmd); void DispatchCommand(QString cmd);
QString ListLine(RDLogEvent *evt,int line) const; QString ListLine(RDLogEvent *evt,int line) const;
void PrintPrompt() const; void PrintPrompt() const;
QSocketNotifier *edit_input_notifier; QSocketNotifier *edit_input_notifier;
QString edit_accum; QString edit_accum;
bool edit_modified;
RDLog *edit_log; RDLog *edit_log;
RDLogEvent *edit_log_event; RDLogEvent *edit_log_event;
RDUser *edit_user; RDUser *edit_user;