diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-11-11 04:03:14 +0100 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-11-11 04:03:14 +0100 |
commit | 46316ece115c100a8146303957a3bec07a1d2dde (patch) | |
tree | 9486c8e0a2b623a7db36af8840cfce5a489e2b90 /qbuffers.cpp | |
parent | d6593762d97bf44f3a398dc4fae714a9e20a24b2 (diff) | |
download | sciteco-46316ece115c100a8146303957a3bec07a1d2dde.tar.gz |
Q-Register table and EQx command
Diffstat (limited to 'qbuffers.cpp')
-rw-r--r-- | qbuffers.cpp | 49 |
1 files changed, 47 insertions, 2 deletions
diff --git a/qbuffers.cpp b/qbuffers.cpp index d9eba9f..c907330 100644 --- a/qbuffers.cpp +++ b/qbuffers.cpp @@ -16,10 +16,34 @@ #include "qbuffers.h" namespace States { - StateFile file; + StateFile file; + StateEQCommand eqcommand; } Ring ring; +QRegisterTable qregisters; + +void +QRegisterTable::initialize(void) +{ + /* general purpose registers */ + for (gchar q = 'A'; q <= 'Z'; q++) + initialize_register((gchar []){q, '\0'}); + for (gchar q = '0'; q <= '9'; q++) + initialize_register((gchar []){q, '\0'}); +} + +void +QRegisterTable::edit(QRegister *reg) +{ + if (current) + current->dot = editor_msg(SCI_GETCURRENTPOS); + + reg->edit(); + + ring.current = NULL; + current = reg; +} bool Buffer::load(const gchar *filename) @@ -106,6 +130,7 @@ Ring::edit(const gchar *filename) } } + qregisters.current = NULL; current = buffer; return new_in_ring; @@ -139,7 +164,10 @@ Ring::~Ring() void StateFile::do_edit(const gchar *filename) { - ring.undo_edit(); + if (ring.current) + ring.undo_edit(); + else /* qregisters.current != NULL */ + qregisters.undo_edit(); if (ring.edit(filename)) ring.undo_close(); } @@ -203,3 +231,20 @@ StateFile::done(const gchar *str) return &States::start; } + +/* + * TODO: expect filename to read into Q-register + */ +State * +StateEQCommand::got_register(QRegister *reg) +{ + BEGIN_EXEC(&States::start); + + if (ring.current) + ring.undo_edit(); + else /* qregisters.current != NULL */ + qregisters.undo_edit(); + qregisters.edit(reg); + + return &States::start; +} |