/* set by user: */
char *desc;
int fd;
+ FILE *logcopy;
int limit; /* 0 means obc_init will set a default */
OutBufferError *error;
/* set/used by obc_..., oprintf, etc., only */
}
static void addlink(OutBufferChain *ch, OutBuffer *ob) {
+ if (ch->logcopy) {
+ size_t r;
+ r= fwrite(ob->m,1,ob->l,ch->logcopy);
+ if (r!=ob->l) {
+ assert(ferror(ch->logcopy));
+ ch->error(ch,"write log",strerror(errno));
+ }
+ }
if (!ch->obs.head)
events->on_fd(events, ch->fd, OOP_WRITE, writeable, ch);
LIST_LINK_TAIL(ch->obs, ob);
int picio_send_noise= 1;
static const char *device= "/dev/ttya0";
+static const char *logcopy_fn= "realtime.log";
/*---------- general event handling ----------*/
case 's': device= arg; break;
case 'p': persist_fn= arg; break;
case 'v': picio_send_noise= atoi(arg); break;
+ case 'L': logcopy_fn= arg; break;
case 'S': simulate= arg; break;
default: badusage("unknown option");
}
cmdi.out.error= obc_error;
cmdi.doline= command_doline;
- persist_entrails_interpret();
- records_parse(argv);
-
if (!simulate) {
sys_events= oop_sys_new(); if (!sys_events) diee("oop_sys_new");
events= oop_sys_source(sys_events); massert(events);
+ if (logcopy_fn[0] && strcmp(logcopy_fn,"-")) {
+ cmdi.out.logcopy= fopen(logcopy_fn,"w");
+ if (!cmdi.out.logcopy) diee("open log copy %s",logcopy_fn);
+ }
+
cmdin_new(&cmdi, 0);
serial_open(device);
sys_events= 0;
}
+ persist_entrails_interpret();
+ records_parse(argv);
sta_startup();
if (!simulate) oop_sys_run(sys_events);
/*---------- core ----------*/
void sim_initialise(void) {
+ cmdi.out.logcopy= 0;
obc_init_core(&cmdi.out);
serial_fd= open("/dev/null",O_WRONLY);
if (serial_fd<0) diee("open /dev/null for dummy serial");