1515
1616using namespace strlib ;
1717
18+ String g_exportAddr;
19+ String g_exportToken;
20+
1821void 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+
6386void 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);
0 commit comments