mirror of
https://github.com/gnustep/libs-ec.git
synced 2025-05-30 00:40:42 +00:00
Scripting improvements
This commit is contained in:
parent
e196b76373
commit
afb667be58
7 changed files with 189 additions and 29 deletions
12
ChangeLog
12
ChangeLog
|
@ -1,3 +1,15 @@
|
|||
2023-04-07 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* ECCL.h:
|
||||
* EcCommand.m:
|
||||
* EcConsole.m:
|
||||
* EcControl.m:
|
||||
* EcProcess.h:
|
||||
* EcProcess.m:
|
||||
Add display options 'mark' and 'prompt' to control output format to
|
||||
make it easier to perform pattern matching when using Console in a
|
||||
script.
|
||||
|
||||
2023-03-10 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* EcCommand.m:
|
||||
|
|
8
ECCL.h
8
ECCL.h
|
@ -122,7 +122,13 @@
|
|||
If the Control server actively refuses the login, the exit status
|
||||
is 11.<br />
|
||||
NB. Command line arguments take precedence over environment variables
|
||||
even if the command line aregument is an empty string.
|
||||
even if the command line aregument is an empty string.<br />
|
||||
A couple of extra variables alter the format of output as follows:<br />
|
||||
Mark (or the ConsoleMark environment variable) can be set to YES to
|
||||
specify that each message is marked with a consistent start and end
|
||||
saying where the message was from.<br />
|
||||
Prompt (or the ConsolePrompt environment variable) can be set to NO
|
||||
to suppress the normal prompt line at the end of each message.
|
||||
</section>
|
||||
|
||||
<section>
|
||||
|
|
|
@ -5255,7 +5255,7 @@ NSLog(@"Problem %@", localException);
|
|||
m = [NSString stringWithFormat: @"Unknown command - '%@'\n", wd];
|
||||
}
|
||||
|
||||
[self information: m from: t to: f type: LT_CONSOLE];
|
||||
[self reply: m to: f from: ecFullName()];
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -6109,6 +6109,8 @@ NSLog(@"Problem %@", localException);
|
|||
}
|
||||
else
|
||||
{
|
||||
NSLog(@"reply: %@ to: %@ from: %@ - discarded (no connection to Control)",
|
||||
msg, n, c);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
47
EcConsole.m
47
EcConsole.m
|
@ -583,7 +583,7 @@ static NSString *originalUserName = nil;
|
|||
}
|
||||
}
|
||||
|
||||
- (void) doLine:(NSString *)_line
|
||||
- (void) doLine: (NSString *)_line
|
||||
{
|
||||
NSAutoreleasePool *arp;
|
||||
NSMutableArray *words;
|
||||
|
@ -817,6 +817,9 @@ static NSString *originalUserName = nil;
|
|||
|
||||
if (user && pass)
|
||||
{
|
||||
BOOL mark = NO;
|
||||
BOOL prompt = YES;
|
||||
|
||||
interactive = NO;
|
||||
server = [NSConnection rootProxyForConnectionWithRegisteredName: name
|
||||
host: host
|
||||
|
@ -835,6 +838,7 @@ static NSString *originalUserName = nil;
|
|||
}
|
||||
[self cmdQuit: 10];
|
||||
DESTROY(self);
|
||||
return nil;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -863,6 +867,47 @@ static NSString *originalUserName = nil;
|
|||
}
|
||||
}
|
||||
|
||||
if ([defs objectForKey: @"Mark"])
|
||||
{
|
||||
mark = [defs boolForKey: @"Mark"];
|
||||
}
|
||||
else
|
||||
{
|
||||
if ([env objectForKey: @"ConsoleMark"])
|
||||
{
|
||||
mark = [[env objectForKey: @"ConsoleMark"] boolValue];
|
||||
}
|
||||
}
|
||||
|
||||
/* Tell the Control server to mark start and end of messages
|
||||
* if required.
|
||||
*/
|
||||
if (mark)
|
||||
{
|
||||
[self doCommand: [NSMutableArray arrayWithObjects:
|
||||
@"silent", @"set", @"display", @"mark", nil]];
|
||||
}
|
||||
|
||||
if ([defs objectForKey: @"Prompt"])
|
||||
{
|
||||
prompt = [defs boolForKey: @"Prompt"];
|
||||
}
|
||||
else
|
||||
{
|
||||
if ([env objectForKey: @"ConsolePrompt"])
|
||||
{
|
||||
prompt = [[env objectForKey: @"ConsolePrompt"] boolValue];
|
||||
}
|
||||
}
|
||||
|
||||
/* Tell the Control server not to prompt if necessary
|
||||
*/
|
||||
if (NO == prompt)
|
||||
{
|
||||
[self doCommand: [NSMutableArray arrayWithObjects:
|
||||
@"silent", @"unset", @"display", @"prompt", nil]];
|
||||
}
|
||||
|
||||
if (nil == (s = [defs stringForKey: @"Line"]))
|
||||
{
|
||||
s = [env objectForKey: @"ConsoleLine"];
|
||||
|
|
113
EcControl.m
113
EcControl.m
|
@ -204,6 +204,8 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
|
|||
BOOL errors;
|
||||
BOOL alerts;
|
||||
BOOL audits;
|
||||
BOOL mark;
|
||||
BOOL prompt;
|
||||
}
|
||||
- (id) initFor: (id)o
|
||||
name: (NSString*)n
|
||||
|
@ -215,15 +217,19 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
|
|||
- (BOOL) getAudits;
|
||||
- (BOOL) getErrors;
|
||||
- (BOOL) getGeneral;
|
||||
- (BOOL) getMark;
|
||||
- (BOOL) getPrompt;
|
||||
- (BOOL) getWarnings;
|
||||
- (NSString*) pass;
|
||||
- (NSString*) promptAfter: (NSString*)msg;
|
||||
- (NSString*) promptAfter: (NSString*)msg from: (NSString*)sender;
|
||||
- (void) setAlerts: (BOOL)flag;
|
||||
- (void) setAudits: (BOOL)flag;
|
||||
- (void) setConnectedHost: (NSString*)c;
|
||||
- (void) setConnectedServ: (NSString*)c;
|
||||
- (void) setErrors: (BOOL)flag;
|
||||
- (void) setGeneral: (BOOL)flag;
|
||||
- (void) setMark: (BOOL)flag;
|
||||
- (void) setPrompt: (BOOL)flag;
|
||||
- (void) setWarnings: (BOOL)flag;
|
||||
@end
|
||||
|
||||
|
@ -267,6 +273,16 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
|
|||
return general;
|
||||
}
|
||||
|
||||
- (BOOL) getMark
|
||||
{
|
||||
return mark;
|
||||
}
|
||||
|
||||
- (BOOL) getPrompt
|
||||
{
|
||||
return prompt;
|
||||
}
|
||||
|
||||
- (BOOL) getWarnings
|
||||
{
|
||||
return warnings;
|
||||
|
@ -288,6 +304,8 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
|
|||
alerts = YES;
|
||||
audits = NO;
|
||||
errors = YES;
|
||||
mark = NO;
|
||||
prompt = YES;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
@ -297,23 +315,40 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
|
|||
return pass;
|
||||
}
|
||||
|
||||
- (NSString*) promptAfter: (NSString*)msg
|
||||
- (NSString*) promptAfter: (NSString*)msg from: (NSString*)sender
|
||||
{
|
||||
if (chost && cserv)
|
||||
NSString *sMark = @"";
|
||||
NSString *eMark = @"";
|
||||
|
||||
if (sender && mark)
|
||||
{
|
||||
return [NSString stringWithFormat: @"%@\n%@:%@> ", msg, chost, cserv];
|
||||
sMark = [NSString stringWithFormat: @"[start message from %@]\n", sender];
|
||||
eMark = [NSString stringWithFormat: @"\n[end message from %@]", sender];
|
||||
}
|
||||
if (NO == prompt)
|
||||
{
|
||||
return [NSString stringWithFormat: @"%@%@%@",
|
||||
sMark, msg, eMark];
|
||||
}
|
||||
else if (chost && cserv)
|
||||
{
|
||||
return [NSString stringWithFormat: @"%@%@%@\n%@:%@> ",
|
||||
sMark, msg, eMark, chost, cserv];
|
||||
}
|
||||
else if (chost)
|
||||
{
|
||||
return [NSString stringWithFormat: @"%@\n%@:> ", msg, chost];
|
||||
return [NSString stringWithFormat: @"%@%@%@\n%@:> ",
|
||||
sMark, msg, eMark, chost];
|
||||
}
|
||||
else if (cserv)
|
||||
{
|
||||
return [NSString stringWithFormat: @"%@\n:%@> ", msg, cserv];
|
||||
return [NSString stringWithFormat: @"%@%@%@\n:%@> ",
|
||||
sMark, msg, eMark, cserv];
|
||||
}
|
||||
else
|
||||
{
|
||||
return [NSString stringWithFormat: @"%@\nControl> ", msg];
|
||||
return [NSString stringWithFormat: @"%@%@%@\nControl> ",
|
||||
sMark, msg, eMark];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -347,6 +382,16 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
|
|||
general = flag;
|
||||
}
|
||||
|
||||
- (void) setMark: (BOOL)flag
|
||||
{
|
||||
mark = (flag ? YES : NO);
|
||||
}
|
||||
|
||||
- (void) setPrompt: (BOOL)flag
|
||||
{
|
||||
prompt = (flag ? YES : NO);
|
||||
}
|
||||
|
||||
- (void) setWarnings: (BOOL)flag
|
||||
{
|
||||
warnings = flag;
|
||||
|
@ -519,7 +564,7 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
|
|||
|
||||
NS_DURING
|
||||
{
|
||||
[[c obj] information: [c promptAfter: desc]];
|
||||
[[c obj] information: [c promptAfter: desc from: nil]];
|
||||
}
|
||||
NS_HANDLER
|
||||
{
|
||||
|
@ -689,12 +734,19 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
|
|||
{
|
||||
NSMutableArray *cmd;
|
||||
ConsoleInfo *console;
|
||||
BOOL silent = NO;
|
||||
|
||||
cmd = [NSPropertyListSerialization
|
||||
propertyListWithData: dat
|
||||
options: NSPropertyListMutableContainers
|
||||
format: 0
|
||||
error: 0];
|
||||
if ([[cmd firstObject] isEqual: @"silent"])
|
||||
{
|
||||
silent = YES;
|
||||
[cmd removeObjectAtIndex: 0];
|
||||
}
|
||||
|
||||
console = (ConsoleInfo*)[self findIn: consoles byName: f];
|
||||
if (console == nil)
|
||||
{
|
||||
|
@ -1272,6 +1324,10 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
|
|||
@" displays alert (and critical severity alarm) messages.\n"
|
||||
@" set display audits\n"
|
||||
@" displays audit messages.\n"
|
||||
@" set display mark\n"
|
||||
@" marks start and end of messages.\n"
|
||||
@" set display prompt\n"
|
||||
@" outputs a prompt at the end of each message.\n"
|
||||
@"\n";
|
||||
}
|
||||
else if (comp(wd, @"Status") >= 0)
|
||||
|
@ -1326,6 +1382,8 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
|
|||
@" unset display errors\n"
|
||||
@" unset display alerts\n"
|
||||
@" unset display audits\n"
|
||||
@" unset display mark\n"
|
||||
@" unset display prompt\n"
|
||||
@"\n";
|
||||
}
|
||||
}
|
||||
|
@ -1533,10 +1591,12 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
|
|||
{
|
||||
m = [NSString stringWithFormat: @"display settings -\n"
|
||||
@"general: %d warnings: %d errors: %d alerts: %d"
|
||||
@" alerts: %d\n",
|
||||
@" audits: %d mark:%@ prompt:%@\n",
|
||||
[console getGeneral], [console getWarnings],
|
||||
[console getErrors], [console getAlerts],
|
||||
[console getAudits]];
|
||||
[console getAudits],
|
||||
([console getMark] ? @"yes" : @"no"),
|
||||
([console getPrompt] ? @"yes" : @"no")];
|
||||
}
|
||||
else if (comp(wd, @"alerts") >= 0)
|
||||
{
|
||||
|
@ -1554,6 +1614,14 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
|
|||
{
|
||||
[console setGeneral: YES];
|
||||
}
|
||||
else if (comp(wd, @"mark") >= 0)
|
||||
{
|
||||
[console setMark: YES];
|
||||
}
|
||||
else if (comp(wd, @"prompt") >= 0)
|
||||
{
|
||||
[console setPrompt: YES];
|
||||
}
|
||||
else if (comp(wd, @"warnings") >= 0)
|
||||
{
|
||||
[console setWarnings: YES];
|
||||
|
@ -1667,10 +1735,12 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
|
|||
{
|
||||
m = [NSString stringWithFormat: @"display settings -\n"
|
||||
@"general: %d warnings: %d errors: %d alerts: %d"
|
||||
@" audits: %d\n",
|
||||
@" audits: %d mark:%@ prompt:%@\n",
|
||||
[console getGeneral], [console getWarnings],
|
||||
[console getErrors], [console getAlerts],
|
||||
[console getAudits]];
|
||||
[console getAudits],
|
||||
([console getMark] ? @"yes" : @"no"),
|
||||
([console getPrompt] ? @"yes" : @"no")];
|
||||
}
|
||||
else if (comp(wd, @"alerts") >= 0)
|
||||
{
|
||||
|
@ -1688,6 +1758,14 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
|
|||
{
|
||||
[console setGeneral: NO];
|
||||
}
|
||||
else if (comp(wd, @"mark") >= 0)
|
||||
{
|
||||
[console setMark: NO];
|
||||
}
|
||||
else if (comp(wd, @"prompt") >= 0)
|
||||
{
|
||||
[console setPrompt: NO];
|
||||
}
|
||||
else if (comp(wd, @"warnings") >= 0)
|
||||
{
|
||||
[console setWarnings: NO];
|
||||
|
@ -1707,12 +1785,12 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
|
|||
m = [NSString stringWithFormat: @"Unknown command - '%@'\n", wd];
|
||||
}
|
||||
|
||||
if (m != nil)
|
||||
if (m != nil && NO == silent)
|
||||
{
|
||||
[self information: m
|
||||
type: LT_CONSOLE
|
||||
to: [console name]
|
||||
from: nil];
|
||||
from: ecFullName()];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1998,11 +2076,10 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
|
|||
|
||||
NS_DURING
|
||||
{
|
||||
/*
|
||||
* Finally - we send the message to the console along with
|
||||
* a prompt.
|
||||
/* Finally - we send the message to the console along with
|
||||
* a prompt.
|
||||
*/
|
||||
[[c obj] information: [c promptAfter: inf]];
|
||||
[[c obj] information: [c promptAfter: inf from: from]];
|
||||
}
|
||||
NS_HANDLER
|
||||
{
|
||||
|
|
15
EcProcess.h
15
EcProcess.h
|
@ -323,13 +323,14 @@ typedef enum {
|
|||
/*
|
||||
* Useful functions -
|
||||
*/
|
||||
extern void cmdSetHome(NSString *home);
|
||||
extern NSString* cmdDataDir();
|
||||
extern NSString* cmdLogsDir(NSString *date);
|
||||
extern NSString* cmdLogKey(EcLogType t);
|
||||
extern NSString* cmdLogName();
|
||||
extern NSString* cmdLogFormat(EcLogType t, NSString *fmt);
|
||||
extern void ecSetLogsSubdirectory(NSString *pathComponent);
|
||||
extern void cmdSetHome(NSString *home);
|
||||
extern NSString *cmdDataDir();
|
||||
extern NSString *cmdLogsDir(NSString *date);
|
||||
extern NSString *cmdLogKey(EcLogType t);
|
||||
extern NSString *cmdLogName();
|
||||
extern NSString *cmdLogFormat(EcLogType t, NSString *fmt);
|
||||
extern NSString *ecFullName();
|
||||
extern void ecSetLogsSubdirectory(NSString *pathComponent);
|
||||
|
||||
/** Return the native thread ID of the current thread, or NSNotFound if
|
||||
* that is not available.
|
||||
|
|
19
EcProcess.m
19
EcProcess.m
|
@ -888,6 +888,23 @@ ecHostName()
|
|||
return [name autorelease];
|
||||
}
|
||||
|
||||
static NSString *fullName = nil;
|
||||
NSString *
|
||||
ecFullName()
|
||||
{
|
||||
NSString *name;
|
||||
|
||||
[ecLock lock];
|
||||
if (nil == fullName)
|
||||
{
|
||||
fullName = [[NSString alloc] initWithFormat: @"%@:%@",
|
||||
ecHostName(), cmdLogName()];
|
||||
}
|
||||
name = [fullName retain];
|
||||
[ecLock unlock];
|
||||
return [name autorelease];
|
||||
}
|
||||
|
||||
static EcAlarmSeverity memAlarm = EcAlarmSeverityMajor;
|
||||
static NSString *memType = nil;
|
||||
static NSString *memUnit = @"KB";
|
||||
|
@ -4418,7 +4435,7 @@ NSLog(@"Ignored attempt to set timer interval to %g ... using 10.0", interval);
|
|||
{
|
||||
NS_DURING
|
||||
{
|
||||
[cmdServer reply: val to: name from: cmdLogName()];
|
||||
[cmdServer reply: val to: name from: ecFullName()];
|
||||
}
|
||||
NS_HANDLER
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue