now parsing all arguments although the colors have not been resolved yet. Terminal seems to accept anything in /boot/beos/etc/rgb.txt. I wonder if there is an api for getting these values.
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4253 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -9,6 +9,10 @@
|
|||||||
|
|
||||||
const float TEXT_INSET = 3.0;
|
const float TEXT_INSET = 3.0;
|
||||||
|
|
||||||
|
// Application messages
|
||||||
|
|
||||||
|
const uint32 OPEN_TERMINAL ='OTRM';
|
||||||
|
|
||||||
// Messages for menu commands
|
// Messages for menu commands
|
||||||
|
|
||||||
// Terminal
|
// Terminal
|
||||||
|
|||||||
@@ -150,47 +150,120 @@ struct option options[] =
|
|||||||
void
|
void
|
||||||
TerminalApp::ArgvReceived(int32 argc, const char *argv[], const char * cwd)
|
TerminalApp::ArgvReceived(int32 argc, const char *argv[], const char * cwd)
|
||||||
{
|
{
|
||||||
if (argc <= 1) {
|
BMessage * terminal = new BMessage(OPEN_TERMINAL);
|
||||||
OpenTerminal();
|
if (argc > 1) {
|
||||||
} else if (argv[1][0] != '-') {
|
if (argv[1][0] == '-') {
|
||||||
argc--;
|
const char * execname = (argc >= 1 ? argv[0] : "");
|
||||||
printf("execvp(%ld,%s ...)\n",argc,argv[1]);
|
const char * title = 0;
|
||||||
OpenTerminal();
|
int indexptr = 0;
|
||||||
} else {
|
int ch;
|
||||||
const char * execname = (argc >= 1 ? argv[0] : "");
|
char * const * optargv = (char * const *)argv;
|
||||||
const char * title = 0;
|
while ((ch = getopt_long_only(argc, optargv, "hg:mp:t:", options, &indexptr)) != -1) {
|
||||||
int indexptr = 0;
|
switch (ch) {
|
||||||
int ch;
|
case 'h':
|
||||||
char * const * optargv = (char * const *)argv;
|
PrintUsage(execname);
|
||||||
while ((ch = getopt_long_only(argc, optargv, "g:hmp:t:", options, &indexptr)) != -1) {
|
delete terminal;
|
||||||
switch (ch) {
|
return;
|
||||||
case 'h':
|
break;
|
||||||
PrintUsage(execname);
|
case 'g':
|
||||||
return;
|
printf("geometry is %s = ",optarg);
|
||||||
break;
|
int m, n;
|
||||||
case 't':
|
if ((sscanf(optarg,"%ldx%ld%s",&m,&n) != 2) || (m < 0) || (n < 0)) {
|
||||||
title = optarg;
|
printf("??\n");
|
||||||
printf("title is %s\n", title);
|
printf("geometry must be of the format MxN where M and N are positive integers\n");
|
||||||
break;
|
delete terminal;
|
||||||
case ':':
|
return;
|
||||||
switch (optopt) {
|
}
|
||||||
|
printf("%ld,%ld\n",m,n);
|
||||||
|
terminal->AddInt32("columns",m);
|
||||||
|
terminal->AddInt32("rows",n);
|
||||||
|
break;
|
||||||
|
case 'm':
|
||||||
|
printf("pass meta through to shell\n");
|
||||||
|
terminal->AddBool("meta",true);
|
||||||
|
break;
|
||||||
case 't':
|
case 't':
|
||||||
printf("-t without title\n");
|
printf("title is %s\n",optarg);
|
||||||
|
terminal->AddString("title",optarg);
|
||||||
|
break;
|
||||||
|
case 'p': {
|
||||||
|
printf("prefs file is %s\n",optarg);
|
||||||
|
BPath pref;
|
||||||
|
if (optarg[0] == '/') {
|
||||||
|
pref.SetTo(optarg);
|
||||||
|
} else {
|
||||||
|
pref.SetTo(cwd,optarg);
|
||||||
|
}
|
||||||
|
entry_ref ref;
|
||||||
|
switch (get_ref_for_path(pref.Path(),&ref)) {
|
||||||
|
case B_OK:
|
||||||
|
break;
|
||||||
|
case B_ENTRY_NOT_FOUND:
|
||||||
|
printf("could not find entry for prefs file '%s'\n",optarg);
|
||||||
|
delete terminal;
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
case B_NO_MEMORY:
|
||||||
|
printf("not enough memory in get_ref_for_path\n");
|
||||||
|
delete terminal;
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("unknown error in get_ref_for_path\n");
|
||||||
|
delete terminal;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
terminal->AddRef("pref",&ref);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ':':
|
||||||
|
switch (optopt) {
|
||||||
|
case 't':
|
||||||
|
printf("-t option must be specified with a title\n");
|
||||||
|
delete terminal;
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("-%c missing argument\n", optopt);
|
||||||
|
delete terminal;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case '?':
|
||||||
|
delete terminal;
|
||||||
|
return;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printf("-%c missing argument\n", optopt);
|
switch (options[indexptr].val) {
|
||||||
|
case 1: // curbg
|
||||||
|
printf("curbg = %s\n",optarg);
|
||||||
|
break;
|
||||||
|
case 2: // curfg
|
||||||
|
printf("curfg = %s\n",optarg);
|
||||||
|
break;
|
||||||
|
case 3: // bg
|
||||||
|
printf("bg = %s\n",optarg);
|
||||||
|
break;
|
||||||
|
case 4: // fg
|
||||||
|
printf("fg = %s\n",optarg);
|
||||||
|
break;
|
||||||
|
case 5: // selbg
|
||||||
|
printf("selbg = %s\n",optarg);
|
||||||
|
break;
|
||||||
|
case 6: // selfg
|
||||||
|
printf("selfg = %s\n",optarg);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("invalid indexptr %ld\n",indexptr);
|
||||||
|
delete terminal;
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
case '?':
|
|
||||||
printf("unknown arg %c\n", optopt);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
printf("%s\n",argv[optind]);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
OpenTerminal();
|
printf("execvp(%ld,%s ...)\n",argc-optind,argv[optind]);
|
||||||
}
|
}
|
||||||
|
PostMessage(terminal);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user