static void tabwin_handle_drag (GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *data, guint info, guint time, gpointer p) { const guchar *seldata = NULL; gchar *dfname; char tmp[MAXLEN]; int pos, skip = 5; if (data != NULL) { seldata = gtk_selection_data_get_data(data); } if (info != GRETL_FILENAME) { return; } /* ignore the wrong sort of data */ if (data == NULL || (dfname = (gchar *) seldata) == NULL || strlen(dfname) <= 5 || strncmp(dfname, "file:", 5)) { return; } if (strncmp(dfname, "file://", 7) == 0) skip = 7; #ifdef G_OS_WIN32 if (strncmp(dfname, "file:///", 8) == 0) skip = 8; #endif /* there may be multiple files: we ignore all but the first */ *tmp = 0; if ((pos = gretl_charpos('\r', dfname)) > 0 || (pos = gretl_charpos('\n', dfname) > 0)) { strncat(tmp, dfname + skip, pos - skip); } else { strcat(tmp, dfname + skip); } /* handle spaces and such */ unescape_url(tmp); #ifdef G_OS_WIN32 filename_to_win32(tryfile, tmp); #else strcpy(tryfile, tmp); #endif if (has_suffix(tryfile, ".inp")) { do_open_script(EDIT_SCRIPT); } }
NODE *obs_node (parser *p) { NODE *ret = NULL; char word[OBSLEN + 2] = {0}; const char *s = p->point - 1; int close; int special = 0; int t = -1; close = gretl_charpos(']', s); #if LDEBUG fprintf(stderr, "obs_node: s='%s', ch='%c', close=%d\n", s, (char) p->ch, close); #endif if (close == 0) { pprintf(p->prn, _("Empty observation []\n")); p->err = E_PARSE; } else if (close < 0) { pprintf(p->prn, _("Unmatched '%c'\n"), '['); p->err = E_PARSE; } else if (*s == '"' && close < OBSLEN + 2 && gretl_charpos('"', s+1) == close - 2) { /* quoted observation label? */ strncat(word, s, close); special = 1; } else if (might_be_date_string(s, close)) { strncat(word, s, close); special = 1; } if (special && !p->err) { t = get_t_from_obs_string(word, p->dset); if (t >= 0) { /* convert to user-style 1-based index */ t++; } } if (t > 0) { parser_advance(p, close - 1); lex(p); ret = newdbl(t); } else if (!p->err) { #if LDEBUG fprintf(stderr, "obs_node: first try failed, going for expr\n"); #endif lex(p); ret = expr(p); } return ret; }
static char *get_quoted_string (parser *p) { char *s = NULL; int n; /* look for a matching (non-escaped) double-quote */ n = double_quote_position(p->point); if (n < 0) { /* backward compatibility */ n = gretl_charpos('"', p->point); } if (n >= 0) { s = gretl_strndup(p->point, n); parser_advance(p, n + 1); } else { parser_print_input(p); pprintf(p->prn, _("Unmatched '%c'\n"), '"'); p->err = E_PARSE; } if (!p->err) { if (p->ch == '.' && *p->point == '$') { /* maybe quoted name of saved object followed by dollar variable? */ p->sym = OVAR; } else { p->sym = STR; } } return s; }