diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/logfdisp.c | 58 |
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 | } |
175 | end_loop: | ||
134 | close(fd); | 176 | close(fd); |
135 | } | 177 | } |
136 | return false; | 178 | return false; |