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:
shatty
2003-08-09 11:32:51 +00:00
parent e70f15f55a
commit 3890b0b694
2 changed files with 111 additions and 34 deletions
+4
View File
@@ -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
+107 -34
View File
@@ -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;
} }