The R Project SVN R

Rev

Rev 63182 | Rev 63219 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 63182 Rev 63218
Line 40... Line 40...
40
#define WIN32_LEAN_AND_MEAN 1
40
#define WIN32_LEAN_AND_MEAN 1
41
#include <windows.h>
41
#include <windows.h>
42
#include "rui.h"
42
#include "rui.h"
43
#include "editor.h"
43
#include "editor.h"
44
 
44
 
-
 
45
/* from sysutils.c */
-
 
46
void reEnc2(const char *x, char *y, int ny,
-
 
47
	    cetype_t ce_in, cetype_t ce_out, int subst);
-
 
48
 
45
#define gettext GA_gettext
49
#define gettext GA_gettext
46
 
50
 
47
#define MCHECK(a) if (!(a)) {del(c); return NULL;}
51
#define MCHECK(a) if (!(a)) {del(c); return NULL;}
48
RECT *RgetMDIsize(void);
52
RECT *RgetMDIsize(void);
49
 
53
 
Line 100... Line 104...
100
{
104
{
101
    textbox t = getdata(c);
105
    textbox t = getdata(c);
102
    EditorData p = getdata(t);
106
    EditorData p = getdata(t);
103
    FILE *f;
107
    FILE *f;
104
    char *buffer = NULL, tmp[MAX_PATH+50];
108
    char *buffer = NULL, tmp[MAX_PATH+50];
105
    const char *sname;
109
    const char *sname, tname[MAX_PATH+1];
106
    long num = 1, bufsize;
110
    long num = 1, bufsize;
107
    const void *vmax = vmaxget();
-
 
108
 
111
 
109
    if(enc == CE_UTF8) {
112
    if(enc == CE_UTF8) {
110
	wchar_t wname[MAX_PATH+1];
113
	wchar_t wname[MAX_PATH+1];
111
	Rf_utf8towcs(wname, name, MAX_PATH+1);
114
	Rf_utf8towcs(wname, name, MAX_PATH+1);
112
	f = R_wfopen(wname, L"r");
115
	f = R_wfopen(wname, L"r");
113
	sname = reEnc(name, CE_UTF8, CE_NATIVE, 3);
116
	reEnc2(name, tname, MAX_PATH+1, CE_UTF8, CE_NATIVE, 3);
-
 
117
	sname = tname;
114
    } else {
118
    } else {
115
	f = R_fopen(name, "r");
119
	f = R_fopen(name, "r");
116
	sname = name;
120
	sname = name;
117
    }
121
    }
118
    if (f == NULL) {
122
    if (f == NULL) {
Line 140... Line 144...
140
    setlimittext(t, 2 * strlen(buffer));
144
    setlimittext(t, 2 * strlen(buffer));
141
    settext(t, buffer);
145
    settext(t, buffer);
142
    gsetmodified(t, 0);
146
    gsetmodified(t, 0);
143
    free(buffer);
147
    free(buffer);
144
    fclose(f);
148
    fclose(f);
145
    vmaxset(vmax);
-
 
146
}
149
}
147
 
150
 
148
static void editor_save_file(editor c, const char *name, int enc)
151
static void editor_save_file(editor c, const char *name, int enc)
149
{
152
{
150
    textbox t = getdata(c);
153
    textbox t = getdata(c);
151
    FILE *f;
154
    FILE *f;
152
    char buf[MAX_PATH+30];
155
    char buf[MAX_PATH+30];
153
    const char *sname;
156
    const char *sname, tname[MAX_PATH+1];
154
 
157
 
155
    if (name == NULL)
158
    if (name == NULL)
156
	return;
159
	return;
157
    else {
160
    else {
158
	const void *vmax = vmaxget();
-
 
159
	if(enc == CE_UTF8) {
161
	if(enc == CE_UTF8) {
160
	    wchar_t wname[MAX_PATH+1];
162
	    wchar_t wname[MAX_PATH+1];
161
	    Rf_utf8towcs(wname, name, MAX_PATH+1);
163
	    Rf_utf8towcs(wname, name, MAX_PATH+1);
162
	    sname = reEnc(name, CE_UTF8, CE_NATIVE, 3);
164
	    reEnc2(name, tname, MAX_PATH+1, CE_UTF8, CE_NATIVE, 3);
-
 
165
	    sname = tname;
163
	    f = R_wfopen(wname, L"w");
166
	    f = R_wfopen(wname, L"w");
164
	} else {
167
	} else {
165
	    sname = name;
168
	    sname = name;
166
	    f = R_fopen(sname, "w");
169
	    f = R_fopen(sname, "w");
167
	}
170
	}
Line 170... Line 173...
170
	    askok(buf);
173
	    askok(buf);
171
	    return;
174
	    return;
172
	}
175
	}
173
	fprintf(f, "%s", gettext(t));
176
	fprintf(f, "%s", gettext(t));
174
	fclose(f);
177
	fclose(f);
175
	vmaxset(vmax);
-
 
176
    }
178
    }
177
}
179
}
178
 
180
 
179
static void editorsaveas(editor c)
181
static void editorsaveas(editor c)
180
{
182
{
Line 183... Line 185...
183
    wchar_t *wname;
185
    wchar_t *wname;
184
 
186
 
185
    setuserfilterW(L"R files (*.R)\0*.R\0S files (*.q, *.ssc, *.S)\0*.q;*.ssc;*.S\0All files (*.*)\0*.*\0\0");
187
    setuserfilterW(L"R files (*.R)\0*.R\0S files (*.q, *.ssc, *.S)\0*.q;*.ssc;*.S\0All files (*.*)\0*.*\0\0");
186
    wname = askfilesaveW(G_("Save script as"), "");
188
    wname = askfilesaveW(G_("Save script as"), "");
187
    if (wname) {
189
    if (wname) {
188
	const void *vmax = vmaxget();
-
 
189
	char name[4*MAX_PATH+1];
190
	char name[4*MAX_PATH+1];
190
	const char *tname;
-
 
191
	wcstoutf8(name, wname, MAX_PATH);
191
	wcstoutf8(name, wname, MAX_PATH);
192
	/* now check if it has an extension */
192
	/* now check if it has an extension */
193
	char *q = strchr(name, '.');
193
	char *q = strchr(name, '.');
194
	if(!q) strncat(name, ".R", 4*MAX_PATH);
194
	if(!q) strncat(name, ".R", 4*MAX_PATH);
195
	tname = reEnc(name, CE_UTF8, CE_NATIVE, 3);
-
 
196
	editor_save_file(c, name, CE_UTF8);
195
	editor_save_file(c, name, CE_UTF8);
197
	p->file = 1;
196
	p->file = 1;
198
	strncpy(p->filename, tname, MAX_PATH+1);
197
	reEnc2(name, p->filename, MAX_PATH+1, CE_UTF8, CE_NATIVE, 3);
199
	gsetmodified(t, 0);
198
	gsetmodified(t, 0);
200
	editor_set_title(c, tname);
199
	editor_set_title(c, tname);
201
	vmaxset(vmax);
-
 
202
    }
200
    }
203
    show(c);
201
    show(c);
204
}
202
}
205
 
203
 
206
static void menueditorsaveas(control m)
204
static void menueditorsaveas(control m)
Line 374... Line 372...
374
 
372
 
375
static void editoropen(const char *default_name)
373
static void editoropen(const char *default_name)
376
{
374
{
377
    wchar_t *wname;
375
    wchar_t *wname;
378
    char name[4*MAX_PATH];
376
    char name[4*MAX_PATH];
379
    const char* title;
377
    const char title[4*MAX_PATH];
380
 
378
 
381
    int i; textbox t; EditorData p;
379
    int i; textbox t; EditorData p;
382
    setuserfilterW(L"R files (*.R)\0*.R\0S files (*.q, *.ssc, *.S)\0*.q;*.ssc;*.S\0All files (*.*)\0*.*\0\0");
380
    setuserfilterW(L"R files (*.R)\0*.R\0S files (*.q, *.ssc, *.S)\0*.q;*.ssc;*.S\0All files (*.*)\0*.*\0\0");
383
    wname = askfilenameW(G_("Open script"), default_name); /* returns NULL if open dialog cancelled */
381
    wname = askfilenameW(G_("Open script"), default_name); /* returns NULL if open dialog cancelled */
384
    if (wname) {
382
    if (wname) {
385
	const void *vmax = vmaxget();
-
 
386
	wcstoutf8(name, wname, MAX_PATH);
383
	wcstoutf8(name, wname, MAX_PATH);
387
	/* check if file is already open in an editor. If so, close and open again */
384
	/* check if file is already open in an editor. If so, close and open again */
388
	for (i = 0; i < neditors; ++i) {
385
	for (i = 0; i < neditors; ++i) {
389
	    t = getdata(REditors[i]);
386
	    t = getdata(REditors[i]);
390
	    p = getdata(t);
387
	    p = getdata(t);
391
	    if (!strcmp (name, p->filename)) {
388
	    if (!strcmp (name, p->filename)) {
392
		editorclose(REditors[i]);
389
		editorclose(REditors[i]);
393
		break;
390
		break;
394
	    }
391
	    }
395
	}
392
	}
396
	title = reEnc(name, CE_UTF8, CE_NATIVE, 3);
393
	reEnc2(name, title, MAX_PATH+1, CE_UTF8, CE_NATIVE, 3);
397
	Rgui_Edit(name, CE_UTF8, title, 0);
394
	Rgui_Edit(name, CE_UTF8, title, 0);
398
	vmaxset(vmax);
-
 
399
    } else show(RConsole);
395
    } else show(RConsole);
400
}
396
}
401
 
397
 
402
void menueditoropen(control m)
398
void menueditoropen(control m)
403
{
399
{