blob: 6898f5250a1439d2f527b3e6e2bdb4c7ca331e57 [file] [log] [blame]
/*
* R : A Computer Language for Statistical Data Analysis
* Copyright (C) 2008-10 R Core Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, a copy is available at
* https://www.R-project.org/Licenses/
*/
#include <windows.h>
#include <stdio.h>
#include <stdlib.h> /* for exit */
int main (int argc, char **argv)
{
int i, status = 0;
unsigned int ret;
char fn[2001];
if (argc < 2 || strcmp(argv[1], "--help") == 0) {
fprintf(stderr, "Usage: Rcmd open file [file ...]\n\n");
fprintf(stderr, " opens each file with the application given by\n");
fprintf(stderr, " the Windows file association (if any)\n");
exit(0);
}
for(i = 1; i < argc; i++) {
strncpy(fn, argv[i], 2000); fn[2000] = '\0';
for(char *p = fn; *p; p++) if(*p == '/') *p = '\\';
ret = (size_t) ShellExecute(NULL, "open", fn, NULL, ".", SW_SHOW);
if(ret <= 32) { /* an error condition */
status = 32 + ret;
if(ret == ERROR_FILE_NOT_FOUND || ret == ERROR_PATH_NOT_FOUND
|| ret == SE_ERR_FNF || ret == SE_ERR_PNF)
fprintf(stderr, "'%s' not found\n", argv[i]);
else if(ret == SE_ERR_ASSOCINCOMPLETE || ret == SE_ERR_NOASSOC)
fprintf(stderr,
"file association for '%s' not available or invalid\n",
argv[i]);
else if(ret == SE_ERR_ACCESSDENIED || ret == SE_ERR_SHARE)
fprintf(stderr, "access to '%s' denied\n", argv[i]);
else
fprintf(stderr, "problem in displaying '%s'\n", argv[i]);
}
}
exit(status);
}