Skip to content

Commit d48421c

Browse files
committed
SDL: added mobile export command
1 parent 022d42a commit d48421c

File tree

5 files changed

+78
-4
lines changed

5 files changed

+78
-4
lines changed

ChangeLog

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
2016-02-11
2+
Added export to mobile command (SDL)
3+
14
2015-12-05
25
Implemented loading recent files via ALT+1 .. ALT+9
36
Fix potential editor crash with empty support widget

src/platform/android/Makefile.am

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ test: ant-build-test
1717
(cd ../../../ide/android && \
1818
adb -a logcat -c && \
1919
adb -a shell am start net.sourceforge.smallbasic/net.sourceforge.smallbasic.MainActivity && \
20-
adb -a logcat)
20+
adb -a logcat DEBUG:I smallbasic:I AndroidRuntime:E *:S)
2121

2222
clean-ant:
2323
(cd ../../../ide/android && ant -quiet clean)

src/platform/sdl/editor.cpp

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515

1616
using namespace strlib;
1717

18+
String g_exportAddr;
19+
String g_exportToken;
20+
1821
void onlineHelp(Runtime *runtime, TextEditInput *widget) {
1922
char path[100];
2023
const char *nodeId = widget->getNodeId();
@@ -60,6 +63,26 @@ void showRecentFiles(TextEditHelpWidget *helpWidget, String &loadPath) {
6063
helpWidget->setText(fileList);
6164
}
6265

66+
void exportBuffer(AnsiWidget *out, const char *text, String &dest, String &token) {
67+
int handle = 1;
68+
char buffer[PATH_MAX];
69+
70+
sprintf(buffer, "SOCL:%s\n", dest.c_str());
71+
if (dev_fopen(handle, buffer, DEV_FILE_OUTPUT)) {
72+
sprintf(buffer, "# %s\n", token.c_str());
73+
dev_fwrite(handle, (byte *)buffer, strlen(buffer));
74+
if (!dev_fwrite(handle, (byte *)text, strlen(text))) {
75+
sprintf(buffer, "Failed to write: %s", dest.c_str());
76+
} else {
77+
sprintf(buffer, "Exported file to %s", dest.c_str());
78+
}
79+
} else {
80+
sprintf(buffer, "Failed to open: %s", dest.c_str());
81+
}
82+
out->setStatus(buffer);
83+
dev_fclose(handle);
84+
}
85+
6386
void System::editSource(String &loadPath) {
6487
logEntered();
6588

@@ -73,6 +96,9 @@ void System::editSource(String &loadPath) {
7396
TextEditInput *widget = editWidget;
7497
String dirtyFile;
7598
String cleanFile;
99+
enum InputMode {
100+
kInit, kExportAddr, kExportToken
101+
} inputMode = kInit;
76102

77103
setupStatus(dirtyFile, cleanFile, loadPath);
78104
_modifiedTime = getModifiedTime();
@@ -124,7 +150,6 @@ void System::editSource(String &loadPath) {
124150
}
125151

126152
switch (event.key) {
127-
case SB_KEY_F(3):
128153
case SB_KEY_F(8):
129154
case SB_KEY_F(10):
130155
case SB_KEY_F(11):
@@ -168,6 +193,16 @@ void System::editSource(String &loadPath) {
168193
redraw = false;
169194
onlineHelp((Runtime *)this, editWidget);
170195
break;
196+
case SB_KEY_F(3):
197+
if (editWidget->getTextLength()) {
198+
saveFile(editWidget, loadPath);
199+
_output->setStatus("Export to mobile SmallBASIC. Enter <IP>:<Port>");
200+
widget = helpWidget;
201+
helpWidget->createLineEdit(g_exportAddr);
202+
helpWidget->show();
203+
inputMode = kExportAddr;
204+
}
205+
break;
171206
case SB_KEY_F(5):
172207
saveFile(editWidget, loadPath);
173208
_output->setStatus("Debug. F6=Step, F7=Continue, Esc=Close");
@@ -269,6 +304,27 @@ void System::editSource(String &loadPath) {
269304
if (helpWidget->replaceMode()) {
270305
_output->setStatus("Replace string with. Esc=Close");
271306
dirty = editWidget->isDirty();
307+
} else if (helpWidget->lineEditMode() && helpWidget->getTextLength()) {
308+
switch (inputMode) {
309+
case kExportAddr:
310+
g_exportAddr = helpWidget->getText();
311+
inputMode = kExportToken;
312+
helpWidget->createLineEdit(g_exportToken);
313+
_output->setStatus("Enter token. Esc=Close");
314+
break;
315+
case kExportToken:
316+
_output->setStatus("Sending ...");
317+
_output->redraw();
318+
g_exportToken = helpWidget->getText();
319+
inputMode = kInit;
320+
widget = editWidget;
321+
exportBuffer(_output, editWidget->getText(), g_exportAddr, g_exportToken);
322+
helpWidget->hide();
323+
break;
324+
default:
325+
break;
326+
}
327+
redraw = true;
272328
} else if (helpWidget->closeOnEnter() && helpWidget->isVisible()) {
273329
if (helpWidget->replaceDoneMode()) {
274330
_output->setStatus(dirtyFile);

src/ui/textedit.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ const char *helpText =
108108
"TAB indent line\n"
109109
"F1,A-h keyword help\n"
110110
"F2 online help\n"
111+
"F3 export\n"
111112
"F5 debug\n"
112113
"F9, C-r run\n";
113114

@@ -1528,7 +1529,6 @@ bool TextEditHelpWidget::closeOnEnter() const {
15281529

15291530
bool TextEditHelpWidget::edit(int key, int screenWidth, int charWidth) {
15301531
bool result = false;
1531-
15321532
switch (_mode) {
15331533
case kSearch:
15341534
result = TextEditInput::edit(key, screenWidth, charWidth);
@@ -1558,6 +1558,11 @@ bool TextEditHelpWidget::edit(int key, int screenWidth, int charWidth) {
15581558
_editor->gotoLine(_buf._buffer);
15591559
}
15601560
break;
1561+
case kLineEdit:
1562+
if (key != SB_KEY_ENTER) {
1563+
result = TextEditInput::edit(key, screenWidth, charWidth);
1564+
}
1565+
break;
15611566
default:
15621567
switch (key) {
15631568
case STB_TEXTEDIT_K_LEFT:
@@ -1690,6 +1695,13 @@ void TextEditHelpWidget::createHelp() {
16901695
_buf.append(helpText, strlen(helpText));
16911696
}
16921697

1698+
void TextEditHelpWidget::createLineEdit(const char *value) {
1699+
reset(kLineEdit);
1700+
if (value && value[0]) {
1701+
_buf.append(value, strlen(value));
1702+
}
1703+
}
1704+
16931705
void TextEditHelpWidget::createKeywordIndex() {
16941706
char *keyword = _editor->getWordBeforeCursor();
16951707
reset(kHelpKeyword);

src/ui/textedit.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,13 +181,15 @@ struct TextEditHelpWidget : public TextEditInput {
181181
kReplace,
182182
kReplaceDone,
183183
kGotoLine,
184-
kMessage
184+
kMessage,
185+
kLineEdit
185186
};
186187

187188
void clicked(int x, int y, bool pressed);
188189
void createCompletionHelp();
189190
void createGotoLine();
190191
void createHelp();
192+
void createLineEdit(const char *value);
191193
void createKeywordIndex();
192194
void createMessage() { reset(kMessage); }
193195
void createOutline();
@@ -198,6 +200,7 @@ struct TextEditHelpWidget : public TextEditInput {
198200
void resize(int w, int h) { _x = w - _width; _height = h; }
199201
void reset(HelpMode mode);
200202
bool closeOnEnter() const;
203+
bool lineEditMode() const { return _mode == kLineEdit; }
201204
bool messageMode() const { return _mode == kMessage; }
202205
bool replaceMode() const { return _mode == kReplace; }
203206
bool replaceDoneMode() const { return _mode == kReplaceDone; }

0 commit comments

Comments
 (0)