summaryrefslogtreecommitdiff
path: root/apps/logfdisp.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/logfdisp.c')
-rw-r--r--apps/logfdisp.c58
1 files changed, 50 insertions, 8 deletions
diff --git a/apps/logfdisp.c b/apps/logfdisp.c
index bfe37bc3fb..d55b3ba773 100644
--- a/apps/logfdisp.c
+++ b/apps/logfdisp.c
@@ -62,8 +62,8 @@ bool logfdisplay(void)
62#endif 62#endif
63 :LCD_WIDTH)/w; 63 :LCD_WIDTH)/w;
64 64
65 if (columns > MAX_LOGF_ENTRY) 65 if (columns > MAX_LOGF_ENTRY+1)
66 columns = MAX_LOGF_ENTRY; 66 columns = MAX_LOGF_ENTRY+1;
67 67
68 if(!lines) 68 if(!lines)
69 return false; 69 return false;
@@ -83,7 +83,12 @@ bool logfdisplay(void)
83 } 83 }
84 84
85 memcpy(buffer, logfbuffer[index], columns); 85 memcpy(buffer, logfbuffer[index], columns);
86 buffer[columns]=0; 86 if (logfbuffer[index][MAX_LOGF_ENTRY] == LOGF_TERMINATE_CONTINUE_LINE)
87 buffer[columns-1] = '>';
88 else if (logfbuffer[index][MAX_LOGF_ENTRY] == LOGF_TERMINATE_MULTI_LINE)
89 buffer[columns-1] = '\0';
90 buffer[columns] = '\0';
91
87 lcd_puts(0, i, buffer); 92 lcd_puts(0, i, buffer);
88 } 93 }
89 lcd_update(); 94 lcd_update();
@@ -113,24 +118,61 @@ bool logfdump(void)
113 118
114 fd = open(ROCKBOX_DIR "/logf.txt", O_CREAT|O_WRONLY|O_TRUNC); 119 fd = open(ROCKBOX_DIR "/logf.txt", O_CREAT|O_WRONLY|O_TRUNC);
115 if(-1 != fd) { 120 if(-1 != fd) {
116 unsigned char buffer[MAX_LOGF_ENTRY +1]; 121 unsigned char buffer[MAX_LOGF_ONE_LINE_SIZE +1];
122 unsigned char *ptr;
117 int index = logfindex-1; 123 int index = logfindex-1;
118 int stop = logfindex; 124 int stop = logfindex;
125 int tindex;
126 bool dumpwrap = false;
127 bool multiline;
119 128
120 129 while(!dumpwrap || (index >= stop)) {
121 while(index != stop) {
122 if(index < 0) { 130 if(index < 0) {
123 if(logfwrap) 131 if(logfwrap)
132 {
124 index = MAX_LOGF_LINES-1; 133 index = MAX_LOGF_LINES-1;
134 dumpwrap = true;
135 }
125 else 136 else
126 break; /* done */ 137 break; /* done */
127 } 138 }
139
140 multiline = false;
141 if (logfbuffer[index][MAX_LOGF_ENTRY] == LOGF_TERMINATE_MULTI_LINE)
142 {
143 multiline = true;
144 do {
145 index--;
146 if(index < 0) {
147 if(logfwrap)
148 {
149 index = MAX_LOGF_LINES-1;
150 dumpwrap = true;
151 }
152 else
153 goto end_loop;
154 }
155 } while(logfbuffer[index][MAX_LOGF_ENTRY] == LOGF_TERMINATE_CONTINUE_LINE);
156 index++;
157 if (index >= MAX_LOGF_LINES)
158 index = 0;
159 }
160
161 tindex = index-1;
162 ptr = buffer;
163 do {
164 tindex++;
165 memcpy(ptr, logfbuffer[tindex], MAX_LOGF_ENTRY);
166 ptr += MAX_LOGF_ENTRY;
167 if (tindex >= MAX_LOGF_LINES)
168 tindex = 0;
169 } while(logfbuffer[tindex][MAX_LOGF_ENTRY] == LOGF_TERMINATE_CONTINUE_LINE);
170 *ptr = '\0';
128 171
129 memcpy(buffer, logfbuffer[index], MAX_LOGF_ENTRY);
130 buffer[MAX_LOGF_ENTRY]=0;
131 fdprintf(fd, "%s\n", buffer); 172 fdprintf(fd, "%s\n", buffer);
132 index--; 173 index--;
133 } 174 }
175end_loop:
134 close(fd); 176 close(fd);
135 } 177 }
136 return false; 178 return false;