version 1.10, 2001/12/04 15:17:57
|
version 1.11, 2001/12/05 18:58:21
|
Line 283 void flush_delayed()
|
Line 283 void flush_delayed()
|
} |
} |
|
|
|
|
void send_to(int which, char *text, va_list ap) |
int current_dest=DEFAULT_DEST; |
|
void change_destination(int which_dest) |
|
{ |
|
if (which_dest < MAX_DEST) { |
|
current_dest = which_dest; |
|
} else { |
|
fprintf(stderr,"Tried to set destination above MAX_DEST: %d", which_dest); |
|
exit(1); |
|
} |
|
} |
|
|
|
void send_to(int which_dest, int which, char *text, va_list ap) |
{ |
{ |
if (delay) { |
if (delay) { |
append_message(&dyn_delayed,text,ap); |
append_message(&dyn_delayed,text,ap); |
} else { |
} else { |
if (num_streams) { |
if (num_streams[which_dest]) { |
if (which == ALL_STREAMS) { |
if (which == ALL_STREAMS) { |
int i; |
int i; |
for (i=0;i<num_streams;i++) { append_message(&streams[i],text,ap); } |
for (i=0;i<num_streams[which_dest];i++) { append_message(&streams[which_dest][i],text,ap); } |
} else { |
} else { |
append_message(&streams[which],text,ap); |
append_message(&streams[which_dest][which],text,ap); |
} |
} |
} else { |
} else { |
vprintf(text,ap); |
vprintf(text,ap); |
Line 308 void send(char *text,...)
|
Line 319 void send(char *text,...)
|
{ |
{ |
va_list ap; |
va_list ap; |
va_start(ap,text); |
va_start(ap,text); |
send_to(ALL_STREAMS,text,ap); |
send_to(current_dest,ALL_STREAMS,text,ap); |
} |
} |
|
|
void send_stream(int which, char *text,...) |
void send_stream(int which, char *text,...) |
{ |
{ |
va_list ap; |
va_list ap; |
va_start(ap,text); |
va_start(ap,text); |
send_to(which,text,ap); |
send_to(current_dest,which,text,ap); |
} |
} |
|
|
int num_streams=0; |
int num_streams[MAX_DEST]; |
struct dyn_string streams[MAX_STREAMS]; |
struct dyn_string streams[MAX_DEST][MAX_STREAMS]; |
void start_streams(int num) { |
void start_streams(int which_dest, int num) { |
int i; |
int i; |
for(i=0; i<num; i++) { dyn_init(&streams[i]); } |
for(i=0; i<num; i++) { dyn_init(&streams[which_dest][i]); } |
for(i=1; i<num; i++) { mode[i]=mode[0]; } |
for(i=1; i<num; i++) { beg_mode[which_dest][i]=mode[current_dest][0]; |
num_streams=num; |
mode[which_dest][i]=mode[current_dest][0]; } |
|
num_streams[which_dest]=num; |
|
current_dest = which_dest; |
} |
} |
|
|
void end_streams(int which) { |
void end_streams(int which_dest, int which) { |
int i; |
int i; |
fputs(streams[which].str,stdout); |
start_mode(beg_mode[which_dest][which],NULL); |
for(i=0; i<num_streams; i++) { dyn_free(&streams[which]); } |
fputs(streams[which_dest][which].str,stdout); |
num_streams=0; |
for(i=0; i<num_streams[which_dest]; i++) { dyn_free(&streams[which_dest][which]); } |
mode[0]=mode[which]; |
num_streams[which_dest]=0; |
|
mode[DEFAULT_DEST][0]=mode[which_dest][which]; |
|
start_mode(mode[DEFAULT_DEST][0],NULL); |
|
} |
|
|
|
int is_dest_empty(int which_dest) { |
|
int i,empty=1; |
|
|
|
if ( num_streams[which_dest] ) { |
|
for(i=0; i<num_streams[which_dest]; i++) { |
|
if (streams[which_dest][i].str != NULL) { empty=0; break; } |
|
} |
|
} else { |
|
if (streams[which_dest][0].str != NULL) { empty=0; } |
|
} |
|
return empty; |
} |
} |
|
|
int watch_mode[MAX_STREAMS]; |
int mode[MAX_DEST][MAX_STREAMS]; |
|
int watch_mode[MAX_DEST][MAX_STREAMS]; |
|
int beg_mode[MAX_DEST][MAX_STREAMS]; |
void end_mode() |
void end_mode() |
{ |
{ |
end_mode_stream(ALL_STREAMS); |
end_mode_stream(current_dest, ALL_STREAMS); |
} |
} |
|
|
void end_mode_stream(int which) |
void end_mode_stream(int which_dest, int which) |
{ |
{ |
if (num_streams) { |
if (num_streams[which_dest]) { |
if (which == ALL_STREAMS) { |
if (which == ALL_STREAMS) { |
int i; |
int i; |
for (i=0;i<num_streams;i++) { end_mode_stream(i); } |
for (i=0;i<num_streams[which_dest];i++) { end_mode_stream(which_dest,i); } |
return; |
return; |
} |
} |
} else { |
} else { |
which=0;/* if streams aren't active make sure which is correct */ |
which=0;/* if streams aren't active make sure which is correct */ |
} |
} |
switch (mode[which]) { |
switch (mode[which_dest][which]) { |
case MODE_COMMENT: send_stream(which,"</comment>\n"); break; |
case MODE_COMMENT: send_stream(which,"</comment>\n"); break; |
case MODE_BLOCK: send_stream(which,"</block>\n"); break; |
case MODE_BLOCK: send_stream(which,"</block>\n"); break; |
case MODE_SCRIPT: send_stream(which,"</script>\n"); break; |
case MODE_SCRIPT: send_stream(which,"</script>\n"); break; |
case MODE_OUTTEXT: send_stream(which,"<endouttext />\n"); break; |
case MODE_OUTTEXT: send_stream(which,"<endouttext />\n"); break; |
case MODE_ANSWER: send_stream(which,"\n"); break; |
case MODE_ANSWER: send_stream(which,"\n"); break; |
case MODE_HINT: send_stream(which,"<endouttext />\n</hintpart>\n</hintgroup>\n"); break; |
|
case MODE_IMPORT: send_stream(which,"</import>\n"); break; |
case MODE_IMPORT: send_stream(which,"</import>\n"); break; |
case MODE_NONE: break; |
case MODE_NONE: break; |
} |
} |
mode[which]=MODE_NONE; |
mode[which_dest][which]=MODE_NONE; |
watch_mode[which]=0; |
watch_mode[which_dest][which]=0; |
} |
} |
|
|
void start_mode(int newmode,char* args) |
void start_mode(int newmode,char* args) |
{ |
{ |
start_mode_stream(ALL_STREAMS,newmode,args); |
start_mode_stream(current_dest,ALL_STREAMS,newmode,args); |
} |
} |
|
|
void start_mode_stream(int which,int newmode,char* args) |
void start_mode_stream(int which_dest,int which,int newmode,char* args) |
{ |
{ |
if (num_streams) { |
if (num_streams[which_dest]) { |
if (which == ALL_STREAMS) { |
if (which == ALL_STREAMS) { |
int i; |
int i; |
for (i=0;i<num_streams;i++) { start_mode_stream(i,newmode,args); } |
for (i=0;i<num_streams[which_dest];i++) { start_mode_stream(which_dest,i,newmode,args); } |
return; |
return; |
} else { |
} else { |
if (newmode == mode[which]) return; |
if (newmode == mode[which_dest][which]) return; |
} |
} |
} else { |
} else { |
if (newmode == mode[0]) return; |
if (newmode == mode[which_dest][0]) return; |
which=0;/* if streams aren't active make sure which is correct */ |
which=0;/* if streams aren't active make sure which is correct */ |
} |
} |
end_mode_stream(which); |
end_mode_stream(which_dest,which); |
switch (newmode) { |
switch (newmode) { |
case MODE_COMMENT: send_stream(which,"<comment>\n"); break; |
case MODE_COMMENT: send_stream(which,"<comment>\n"); break; |
case MODE_BLOCK: send_stream(which,"<block %s>\n",args); break; |
case MODE_BLOCK: send_stream(which,"<block %s>\n",args); break; |
case MODE_SCRIPT: send_stream(which,"<script type=\"loncapa/perl\">\n"); break; |
case MODE_SCRIPT: send_stream(which,"<script type=\"loncapa/perl\">\n"); break; |
case MODE_OUTTEXT: send_stream(which,"<startouttext />\n"); break; |
case MODE_OUTTEXT: send_stream(which,"<startouttext />\n"); break; |
case MODE_ANSWER: send_stream(which,"\n"); break; |
case MODE_ANSWER: send_stream(which,"\n"); break; |
case MODE_HINT: send_stream(which,"<hintgroup>\n<hintpart on=\"default\">\n<startouttext />\n"); break; |
|
case MODE_IMPORT: send_stream(which,"<import>"); break; |
case MODE_IMPORT: send_stream(which,"<import>"); break; |
case MODE_NONE: break; |
case MODE_NONE: break; |
} |
} |
mode[which]=newmode; |
mode[which_dest][which]=newmode; |
} |
} |
|
|
int current_cache=-1; |
int current_cache=-1; |