diff --git a/src/apps/bin/Jamfile b/src/apps/bin/Jamfile index e2f8716c03..c76dfa473b 100644 --- a/src/apps/bin/Jamfile +++ b/src/apps/bin/Jamfile @@ -11,6 +11,7 @@ StdBinCommands listattr.cpp lsindex.cpp modifiers.cpp + open.cpp quit.cpp setversion.cpp shutdown.cpp diff --git a/src/apps/bin/open.cpp b/src/apps/bin/open.cpp new file mode 100644 index 0000000000..c8127abf92 --- /dev/null +++ b/src/apps/bin/open.cpp @@ -0,0 +1,55 @@ +/* Launches an application/document from the shell +** +** Copyright 2003, Axel Dörfler, axeld@pinc-software.de. All rights reserved. +** Distributed under the terms of the OpenBeOS License. +*/ + +#include +#include +#include + +#include +#include +#include + + +int +main(int argc, char **argv) +{ + char *progName = argv[0]; + if (strrchr(progName, '/')) + progName = strrchr(progName, '/') + 1; + + if (argc < 2) + fprintf(stderr,"usage: %s ...\n", progName); + + BRoster roster; + + while (*++argv) { + status_t rc; + + BEntry entry(*argv); + if ((rc = entry.InitCheck()) == B_OK && entry.Exists()) { + entry_ref ref; + entry.GetRef(&ref); + + BMessenger tracker("application/x-vnd.Be-TRAK"); + if (tracker.IsValid()) { + BMessage message(B_REFS_RECEIVED); + message.AddRef("refs", &ref); + + tracker.SendMessage(&message); + } else + rc = roster.Launch(&ref); + } else if (!strncasecmp("application/", *argv, 12)) { + // maybe it's an application-mimetype? + rc = roster.Launch(*argv); + } else if (rc == B_OK) + rc = B_ENTRY_NOT_FOUND; + + if (rc != B_OK) + fprintf(stderr, "%s: \"%s\": %s\n", progName, *argv, strerror(rc)); + } + + return 0; +}