Browse Source

add string and token helpers

optixx 14 years ago
parent
commit
e7e5cfd126
5 changed files with 321 additions and 655 deletions
  1. 2 2
      avr/usbload/Makefile
  2. 107 0
      avr/usbload/shell.c
  3. 132 0
      avr/usbload/util.c
  4. 32 0
      avr/usbload/util.h
  5. 48 653
      quickdev16.tmproj

+ 2 - 2
avr/usbload/Makefile

@@ -33,13 +33,13 @@ ifeq ($(DEBUG),1)
     OBJECTS = usbdrv/usbdrv.o usbdrv/usbdrvasm.o usbdrv/oddebug.o \
                main.o usb_bulk.o uart.o fifo.o sram.o crc.o debug.o \
                dump.o timer.o watchdog.o rle.c loader.o info.o shared_memory.o \
-               pwm.o shell.o irq.o command.o testing.o
+               pwm.o util.o shell.o irq.o command.o testing.o
 else 
     LDFLAGS =-Wl,-u
     CFLAGS  =-Iusbdrv -I. -DDEBUG_LEVEL=0 -DNO_DEBUG -DNO_INFO
     OBJECTS = usbdrv/usbdrv.o usbdrv/usbdrvasm.o usbdrv/oddebug.o  main.o usb_bulk.o \
               uart.o fifo.o sram.o crc.o debug.o dump.o timer.o watchdog.o rle.c loader.o \
-              pwm.o shell.o info.o shared_memory.o command.o irq.o
+              pwm.o uril.o shell.o info.o shared_memory.o command.o irq.o
 endif
 
 COMPILE = avr-gcc -Wall -Os -DF_CPU=$(F_CPU) $(CFLAGS) -mmcu=$(DEVICE)

+ 107 - 0
avr/usbload/shell.c

@@ -33,6 +33,109 @@
  volatile uint8_t	recv_counter = 0;
  volatile uint8_t	cr = 0;
  
+ 
+ static char *token_ptr;
+
+ static char *get_token(void)
+ {
+ 	char *p = token_ptr;
+ 	while (*p == ' ')
+ 		p++;
+ 	if (*p == '\0')
+ 		return NULL;
+ 	token_ptr = p;
+ 	do {
+ 		token_ptr++;
+ 		if (*token_ptr == ' ') {
+ 			*token_ptr++ = '\0';
+ 			break;
+ 		}
+ 	} while (*token_ptr != '\0');
+ 	return p;
+ }
+
+ static int get_dec(int *decval)
+ {
+ 	const char *t;
+ 	t = get_token();
+ 	if (t != NULL) {
+ 		int x = Util_sscandec(t);
+ 		if (x < 0)
+ 			return FALSE;
+ 		*decval = x;
+ 		return TRUE;
+ 	}
+ 	return FALSE;
+ }
+
+ static int parse_hex(const char *s, UWORD *hexval)
+ {
+ 	int x = Util_sscanhex(s);
+ #ifdef MONITOR_HINTS
+ 	int y = find_label_value(s);
+ 	if (y >= 0) {
+ 		if (x < 0 || x > 0xffff || x == y) {
+ 			*hexval = (UWORD) y;
+ 			return TRUE;
+ 		}
+ 		/* s can be a hex number or a label name */
+ 		printf("%s is ambiguous. Use 0%X or %X instead.\n", s, x, y);
+ 		return FALSE;
+ 	}
+ #endif
+ 	if (x < 0 || x > 0xffff)
+ 		return FALSE;
+ 	*hexval = (UWORD) x;
+ 	return TRUE;
+ }
+
+ static int get_hex(UWORD *hexval)
+ {
+ 	const char *t;
+ 	t = get_token();
+ 	if (t != NULL)
+ 		return parse_hex(t, hexval);
+ 	return FALSE;
+ }
+
+ static int get_hex2(UWORD *hexval1, UWORD *hexval2)
+ {
+ 	return get_hex(hexval1) && get_hex(hexval2);
+ }
+
+ static int get_hex3(UWORD *hexval1, UWORD *hexval2, UWORD *hexval3)
+ {
+ 	return get_hex(hexval1) && get_hex(hexval2) && get_hex(hexval3);
+ }
+
+ static void get_uword(UWORD *val)
+ {
+ 	if (!get_hex(val))
+ 		printf("Invalid argument!\n");
+ }
+
+ static void get_ubyte(UBYTE *val)
+ {
+ 	UWORD uword;
+ 	if (!get_hex(&uword) || uword > 0xff)
+ 		printf("Invalid argument!\n");
+ 	else
+ 		*val = (UBYTE) uword;
+ }
+
+ static int get_bool(void)
+ {
+ 	const char *t;
+ 	t = get_token();
+ 	if (t != NULL) {
+ 		int result = Util_sscanbool(t);
+ 		if (result >= 0)
+ 			return result;
+ 	}
+ 	printf("Invalid argument (should be 0 or 1)!\n");
+ 	return -1;
+ } 
+ 
 ISR(USART0_RX_vect)		//	Interrupt for UART Byte received
 {
   UCSR0B &= (255 - (1<<RXCIE0));//	Interrupts disable for RxD
@@ -41,6 +144,7 @@ ISR(USART0_RX_vect)		//	Interrupt for UART Byte received
     cr=1;
     recv_buf[recv_counter]='\0';
     recv_counter=0;
+    uart_putc('\r');
     uart_putc('\n');
     uart_putc(':');
     uart_putc('>');
@@ -52,7 +156,10 @@ ISR(USART0_RX_vect)		//	Interrupt for UART Byte received
     cr = 1;				//	found a CR, so the application should do something
     recv_buf[++recv_counter]='\0';  // terminate string
     recv_counter = 0;
+    uart_putc('\r');
     uart_putc('\n');
+    uart_putc(':');
+    uart_putc('>');
   } else {
     // we accept backspace or delete
     if ((recv_buf[recv_counter] == 0x08 || recv_buf[recv_counter] == 0x7f) && recv_counter > 0) {

+ 132 - 0
avr/usbload/util.c

@@ -0,0 +1,132 @@
+/*
+ * =====================================================================================
+ *
+ * ________        .__        __    ________               ____  ________
+ * \_____  \  __ __|__| ____ |  | __\______ \   _______  _/_   |/  _____/
+ *  /  / \  \|  |  \  |/ ___\|  |/ / |    |  \_/ __ \  \/ /|   /   __  \
+ * /   \_/.  \  |  /  \  \___|    <  |    `   \  ___/\   / |   \  |__\  \
+ * \_____\ \_/____/|__|\___  >__|_ \/_______  /\___  >\_/  |___|\_____  /
+ *        \__>             \/     \/        \/     \/                 \/
+ *
+ *                                  www.optixx.org
+ *
+ *
+ *        Version:  1.0
+ *        Created:  07/21/2009 03:32:16 PM
+ *         Author:  david@optixx.org
+ *
+ * =====================================================================================
+ */
+ 
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+uint8_t *util_strupper(uint8_t *s)
+{
+	uint8_t *p;
+	for (p = s; *p != '\0'; p++)
+		if (*p >= 'a' && *p <= 'z')
+			*p += 'A' - 'a';
+	return s;
+}
+
+uint8_t *util_strlower(uint8_t *s)
+{
+	uint8_t *p;
+	for (p = s; *p != '\0'; p++)
+		if (*p >= 'A' && *p <= 'Z')
+			*p += 'a' - 'A';
+	return s;
+}
+
+void util_chomp(uint8_t *s)
+{
+	uint16_t len;
+
+	len = strlen((char*)s);
+	if (len >= 2 && s[len - 1] == '\n' && s[len - 2] == '\r')
+		s[len - 2] = '\0';
+	else if (len >= 1 && (s[len - 1] == '\n' || s[len - 1] == '\r'))
+		s[len - 1] = '\0';
+}
+
+void util_trim(uint8_t *s)
+{
+	uint8_t *p = s;
+	uint8_t *q;
+	/* skip leading whitespace */
+	while (*p == ' ' || *p == '\t' || *p == '\r' || *p == '\n')
+		p++;
+	/* now p points at the first non-whitespace uint8_tacter */
+
+	if (*p == '\0') {
+		/* only whitespace */
+		*s = '\0';
+		return;
+	}
+
+	q = s + strlen((char*)s);
+	/* skip trailing whitespace */
+	/* we have found p < q such that *p is non-whitespace,
+	   so this loop terminates with q >= p */
+	do
+		q--;
+	while (*q == ' ' || *q == '\t' || *q == '\r' || *q == '\n');
+
+	/* now q points at the last non-whitespace uint8_tacter */
+	/* cut off trailing whitespace */
+	*++q = '\0';
+
+	/* move to string */
+	memmove(s, p, q + 1 - p);
+}
+
+uint32_t util_sscandec(const uint8_t *s)
+{
+	uint32_t result;
+	if (*s == '\0')
+		return -1;
+	result = 0;
+	for (;;) {
+		if (*s >= '0' && *s <= '9')
+			result = 10 * result + *s - '0';
+		else if (*s == '\0')
+			return result;
+		else
+			return -1;
+		s++;
+	}
+}
+
+uint32_t util_sscanhex(const uint8_t *s)
+{
+	uint32_t result;
+	if (*s == '\0')
+		return -1;
+	result = 0;
+	for (;;) {
+		if (*s >= '0' && *s <= '9')
+			result = 16 * result + *s - '0';
+		else if (*s >= 'A' && *s <= 'F')
+			result = 16 * result + *s - 'A' + 10;
+		else if (*s >= 'a' && *s <= 'f')
+			result = 16 * result + *s - 'a' + 10;
+		else if (*s == '\0')
+			return result;
+		else
+			return -1;
+		s++;
+	}
+}
+
+uint8_t util_sscanbool(const uint8_t *s)
+{
+	if (*s == '0' && s[1] == '\0')
+		return 0;
+	if (*s == '1' && s[1] == '\0')
+		return 1;
+	return -1;
+}
+
+

+ 32 - 0
avr/usbload/util.h

@@ -0,0 +1,32 @@
+/*
+ * =====================================================================================
+ *
+ * ________        .__        __    ________               ____  ________
+ * \_____  \  __ __|__| ____ |  | __\______ \   _______  _/_   |/  _____/
+ *  /  / \  \|  |  \  |/ ___\|  |/ / |    |  \_/ __ \  \/ /|   /   __  \
+ * /   \_/.  \  |  /  \  \___|    <  |    `   \  ___/\   / |   \  |__\  \
+ * \_____\ \_/____/|__|\___  >__|_ \/_______  /\___  >\_/  |___|\_____  /
+ *        \__>             \/     \/        \/     \/                 \/
+ *
+ *                                  www.optixx.org
+ *
+ *
+ *        Version:  1.0
+ *        Created:  07/21/2009 03:32:16 PM
+ *         Author:  david@optixx.org
+ *
+ * =====================================================================================
+ */
+
+#ifndef __UTIL_H__
+#define __UTIL_H__
+
+ uint8_t *util_strupper(uint8_t *s);
+uint8_t *util_strlower(uint8_t *s);
+void util_chomp(uint8_t *s);
+void util_trim(uint8_t *s);
+uint32_t util_sscandec(const uint8_t *s);
+uint32_t util_sscanhex(const uint8_t *s);
+uint8_t util_sscanbool(const uint8_t *s);
+
+#endif

+ 48 - 653
quickdev16.tmproj

@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
 	<key>currentDocument</key>
-	<string>avr/usbload/sram.h</string>
+	<string>avr/usbload/util.c</string>
 	<key>documents</key>
 	<array>
 		<dict>
@@ -21,158 +21,28 @@
 	<integer>271</integer>
 	<key>metaData</key>
 	<dict>
-		<key>README</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>49</integer>
-				<key>line</key>
-				<integer>7</integer>
-			</dict>
-			<key>columnSelection</key>
-			<false/>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>0</integer>
-			<key>selectFrom</key>
-			<dict>
-				<key>column</key>
-				<integer>1</integer>
-				<key>line</key>
-				<integer>7</integer>
-			</dict>
-			<key>selectTo</key>
-			<dict>
-				<key>column</key>
-				<integer>49</integer>
-				<key>line</key>
-				<integer>7</integer>
-			</dict>
-		</dict>
-		<key>avr/bootloader/bootloader.c</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>0</integer>
-				<key>line</key>
-				<integer>31</integer>
-			</dict>
-			<key>columnSelection</key>
-			<false/>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>0</integer>
-			<key>selectFrom</key>
-			<dict>
-				<key>column</key>
-				<integer>0</integer>
-				<key>line</key>
-				<integer>30</integer>
-			</dict>
-			<key>selectTo</key>
-			<dict>
-				<key>column</key>
-				<integer>0</integer>
-				<key>line</key>
-				<integer>31</integer>
-			</dict>
-		</dict>
-		<key>avr/bootloader/bootloader.hex</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>0</integer>
-				<key>line</key>
-				<integer>0</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>0</integer>
-		</dict>
-		<key>avr/bootloader/config.h</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>0</integer>
-				<key>line</key>
-				<integer>22</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>0</integer>
-		</dict>
-		<key>avr/bootloader/interrupts.S</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>0</integer>
-				<key>line</key>
-				<integer>0</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>0</integer>
-		</dict>
-		<key>avr/bootloader/usbconfig.h</key>
+		<key>avr/usbload/main.c</key>
 		<dict>
 			<key>caret</key>
 			<dict>
 				<key>column</key>
-				<integer>39</integer>
+				<integer>42</integer>
 				<key>line</key>
-				<integer>50</integer>
+				<integer>252</integer>
 			</dict>
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
-			<integer>144</integer>
+			<integer>247</integer>
 		</dict>
-		<key>avr/usbload/checksize</key>
+		<key>avr/usbload/rle.h</key>
 		<dict>
 			<key>caret</key>
 			<dict>
 				<key>column</key>
 				<integer>0</integer>
 				<key>line</key>
-				<integer>12</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>0</integer>
-		</dict>
-		<key>avr/usbload/command.c</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
 				<integer>0</integer>
-				<key>line</key>
-				<integer>22</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>14</integer>
-		</dict>
-		<key>avr/usbload/command.h</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>16</integer>
-				<key>line</key>
-				<integer>25</integer>
 			</dict>
 			<key>columnSelection</key>
 			<false/>
@@ -183,268 +53,56 @@
 			<key>selectFrom</key>
 			<dict>
 				<key>column</key>
-				<integer>0</integer>
+				<integer>17</integer>
 				<key>line</key>
-				<integer>0</integer>
+				<integer>21</integer>
 			</dict>
 			<key>selectTo</key>
 			<dict>
 				<key>column</key>
 				<integer>0</integer>
 				<key>line</key>
-				<integer>29</integer>
-			</dict>
-		</dict>
-		<key>avr/usbload/config.h</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>38</integer>
-				<key>line</key>
-				<integer>46</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>0</integer>
-		</dict>
-		<key>avr/usbload/crc.c</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>20</integer>
-				<key>line</key>
-				<integer>81</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>41</integer>
-		</dict>
-		<key>avr/usbload/crc.h</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>26</integer>
-				<key>line</key>
-				<integer>6</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>0</integer>
-		</dict>
-		<key>avr/usbload/debug.c</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>31</integer>
-				<key>line</key>
-				<integer>39</integer>
+				<integer>0</integer>
 			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>0</integer>
 		</dict>
-		<key>avr/usbload/debug.h</key>
+		<key>avr/usbload/shell.c</key>
 		<dict>
 			<key>caret</key>
 			<dict>
 				<key>column</key>
 				<integer>0</integer>
 				<key>line</key>
-				<integer>33</integer>
+				<integer>74</integer>
 			</dict>
 			<key>columnSelection</key>
 			<false/>
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
-			<integer>0</integer>
+			<integer>80</integer>
 			<key>selectFrom</key>
 			<dict>
 				<key>column</key>
 				<integer>0</integer>
 				<key>line</key>
-				<integer>31</integer>
-			</dict>
-			<key>selectTo</key>
-			<dict>
-				<key>column</key>
-				<integer>0</integer>
-				<key>line</key>
-				<integer>33</integer>
-			</dict>
-		</dict>
-		<key>avr/usbload/dump.c</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>13</integer>
-				<key>line</key>
-				<integer>67</integer>
-			</dict>
-			<key>columnSelection</key>
-			<false/>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>31</integer>
-			<key>selectFrom</key>
-			<dict>
-				<key>column</key>
-				<integer>5</integer>
-				<key>line</key>
-				<integer>67</integer>
+				<integer>73</integer>
 			</dict>
 			<key>selectTo</key>
-			<dict>
-				<key>column</key>
-				<integer>16</integer>
-				<key>line</key>
-				<integer>67</integer>
-			</dict>
-		</dict>
-		<key>avr/usbload/dump.h</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>0</integer>
-				<key>line</key>
-				<integer>0</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>0</integer>
-		</dict>
-		<key>avr/usbload/fifo.c</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>17</integer>
-				<key>line</key>
-				<integer>22</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>0</integer>
-		</dict>
-		<key>avr/usbload/fifo.h</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>0</integer>
-				<key>line</key>
-				<integer>19</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>0</integer>
-		</dict>
-		<key>avr/usbload/info.c</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>4</integer>
-				<key>line</key>
-				<integer>33</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>0</integer>
-		</dict>
-		<key>avr/usbload/info.h</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>22</integer>
-				<key>line</key>
-				<integer>32</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>0</integer>
-		</dict>
-		<key>avr/usbload/irq.c</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>0</integer>
-				<key>line</key>
-				<integer>28</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>21</integer>
-		</dict>
-		<key>avr/usbload/irq.h</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>13</integer>
-				<key>line</key>
-				<integer>22</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>0</integer>
-		</dict>
-		<key>avr/usbload/loader.c</key>
-		<dict>
-			<key>caret</key>
 			<dict>
 				<key>column</key>
 				<integer>0</integer>
 				<key>line</key>
-				<integer>0</integer>
+				<integer>74</integer>
 			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>443</integer>
 		</dict>
-		<key>avr/usbload/loader.h</key>
+		<key>avr/usbload/shell.h</key>
 		<dict>
 			<key>caret</key>
 			<dict>
 				<key>column</key>
 				<integer>0</integer>
 				<key>line</key>
-				<integer>9</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>0</integer>
-		</dict>
-		<key>avr/usbload/main.c</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
 				<integer>0</integer>
-				<key>line</key>
-				<integer>30</integer>
 			</dict>
 			<key>columnSelection</key>
 			<false/>
@@ -457,157 +115,45 @@
 				<key>column</key>
 				<integer>0</integer>
 				<key>line</key>
-				<integer>29</integer>
+				<integer>19</integer>
 			</dict>
 			<key>selectTo</key>
-			<dict>
-				<key>column</key>
-				<integer>0</integer>
-				<key>line</key>
-				<integer>30</integer>
-			</dict>
-		</dict>
-		<key>avr/usbload/rle.h</key>
-		<dict>
-			<key>caret</key>
 			<dict>
 				<key>column</key>
 				<integer>0</integer>
 				<key>line</key>
 				<integer>0</integer>
 			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>0</integer>
-		</dict>
-		<key>avr/usbload/shared_memory.c</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>41</integer>
-				<key>line</key>
-				<integer>135</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>108</integer>
-		</dict>
-		<key>avr/usbload/shared_memory.h</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>50</integer>
-				<key>line</key>
-				<integer>50</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>22</integer>
 		</dict>
 		<key>avr/usbload/sram.c</key>
 		<dict>
 			<key>caret</key>
 			<dict>
 				<key>column</key>
-				<integer>24</integer>
-				<key>line</key>
-				<integer>34</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>141</integer>
-		</dict>
-		<key>avr/usbload/sram.h</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>66</integer>
-				<key>line</key>
-				<integer>154</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>132</integer>
-		</dict>
-		<key>avr/usbload/testing.c</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>0</integer>
-				<key>line</key>
-				<integer>106</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>25</integer>
-		</dict>
-		<key>avr/usbload/testing.h</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>0</integer>
-				<key>line</key>
-				<integer>0</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>0</integer>
-		</dict>
-		<key>avr/usbload/timer.c</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>41</integer>
+				<integer>22</integer>
 				<key>line</key>
-				<integer>61</integer>
+				<integer>287</integer>
 			</dict>
 			<key>columnSelection</key>
 			<false/>
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
-			<integer>28</integer>
+			<integer>206</integer>
 			<key>selectFrom</key>
 			<dict>
 				<key>column</key>
-				<integer>0</integer>
+				<integer>5</integer>
 				<key>line</key>
-				<integer>0</integer>
+				<integer>287</integer>
 			</dict>
 			<key>selectTo</key>
 			<dict>
 				<key>column</key>
-				<integer>0</integer>
-				<key>line</key>
-				<integer>94</integer>
-			</dict>
-		</dict>
-		<key>avr/usbload/timer.h</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>0</integer>
+				<integer>31</integer>
 				<key>line</key>
-				<integer>29</integer>
+				<integer>287</integer>
 			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>0</integer>
 		</dict>
 		<key>avr/usbload/uart.c</key>
 		<dict>
@@ -616,186 +162,70 @@
 				<key>column</key>
 				<integer>0</integer>
 				<key>line</key>
-				<integer>34</integer>
+				<integer>20</integer>
 			</dict>
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
-			<integer>44</integer>
+			<integer>26</integer>
 		</dict>
-		<key>avr/usbload/usb_bulk.c</key>
+		<key>avr/usbload/usb_bulk.h</key>
 		<dict>
 			<key>caret</key>
 			<dict>
 				<key>column</key>
 				<integer>0</integer>
 				<key>line</key>
-				<integer>74</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>40</integer>
-		</dict>
-		<key>avr/usbload/usbconfig.h</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>80</integer>
-				<key>line</key>
-				<integer>251</integer>
-			</dict>
-			<key>columnSelection</key>
-			<false/>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>231</integer>
-			<key>selectFrom</key>
-			<dict>
-				<key>column</key>
-				<integer>32</integer>
-				<key>line</key>
-				<integer>251</integer>
-			</dict>
-			<key>selectTo</key>
-			<dict>
-				<key>column</key>
-				<integer>80</integer>
-				<key>line</key>
-				<integer>251</integer>
-			</dict>
-		</dict>
-		<key>avr/usbload/watchdog.c</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
 				<integer>0</integer>
-				<key>line</key>
-				<integer>22</integer>
 			</dict>
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
 			<integer>0</integer>
 		</dict>
-		<key>avr/usbload/watchdog.h</key>
+		<key>avr/usbload/util.c</key>
 		<dict>
 			<key>caret</key>
 			<dict>
 				<key>column</key>
-				<integer>0</integer>
+				<integer>15</integer>
 				<key>line</key>
-				<integer>0</integer>
+				<integer>46</integer>
 			</dict>
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
-			<integer>0</integer>
+			<integer>14</integer>
 		</dict>
-		<key>poc/avr_sdcard/fat.c</key>
+		<key>avr/usbload/util.h</key>
 		<dict>
 			<key>caret</key>
 			<dict>
 				<key>column</key>
 				<integer>0</integer>
 				<key>line</key>
-				<integer>38</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>0</integer>
-		</dict>
-		<key>poc/avr_sdcard/fat.h</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>4</integer>
-				<key>line</key>
-				<integer>63</integer>
+				<integer>0</integer>
 			</dict>
 			<key>columnSelection</key>
 			<false/>
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
-			<integer>23</integer>
-			<key>selectFrom</key>
-			<dict>
-				<key>column</key>
-				<integer>1</integer>
-				<key>line</key>
-				<integer>63</integer>
-			</dict>
-			<key>selectTo</key>
-			<dict>
-				<key>column</key>
-				<integer>9</integer>
-				<key>line</key>
-				<integer>63</integer>
-			</dict>
-		</dict>
-		<key>poc/avr_sdcard/main.c</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>12</integer>
-				<key>line</key>
-				<integer>170</integer>
-			</dict>
-			<key>columnSelection</key>
-			<false/>
-			<key>firstVisibleColumn</key>
 			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>137</integer>
 			<key>selectFrom</key>
 			<dict>
 				<key>column</key>
-				<integer>1</integer>
+				<integer>3</integer>
 				<key>line</key>
-				<integer>170</integer>
+				<integer>18</integer>
 			</dict>
 			<key>selectTo</key>
-			<dict>
-				<key>column</key>
-				<integer>20</integer>
-				<key>line</key>
-				<integer>170</integer>
-			</dict>
-		</dict>
-		<key>poc/avr_sdcard/main.lst</key>
-		<dict>
-			<key>caret</key>
 			<dict>
 				<key>column</key>
 				<integer>0</integer>
 				<key>line</key>
 				<integer>0</integer>
 			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>0</integer>
-		</dict>
-		<key>poc/avr_usbload/sram.c</key>
-		<dict>
-			<key>caret</key>
-			<dict>
-				<key>column</key>
-				<integer>17</integer>
-				<key>line</key>
-				<integer>5</integer>
-			</dict>
-			<key>firstVisibleColumn</key>
-			<integer>0</integer>
-			<key>firstVisibleLine</key>
-			<integer>0</integer>
 		</dict>
 		<key>snes/banktest/LoadGraphics.asm</key>
 		<dict>
@@ -828,50 +258,15 @@
 	</dict>
 	<key>openDocuments</key>
 	<array>
-		<string>avr/usbload/testing.h</string>
-		<string>avr/usbload/testing.c</string>
-		<string>avr/usbload/timer.c</string>
-		<string>avr/usbload/irq.c</string>
-		<string>avr/bootloader/bootloader.hex</string>
-		<string>avr/usbload/irq.h</string>
-		<string>avr/usbload/timer.h</string>
+		<string>avr/usbload/sram.c</string>
+		<string>avr/usbload/main.c</string>
+		<string>avr/usbload/shell.c</string>
 		<string>avr/usbload/uart.c</string>
-		<string>avr/usbload/usb_bulk.c</string>
-		<string>avr/usbload/watchdog.c</string>
-		<string>avr/usbload/watchdog.h</string>
-		<string>poc/avr_sdcard/fat.c</string>
-		<string>poc/avr_sdcard/fat.h</string>
-		<string>poc/avr_sdcard/main.lst</string>
-		<string>avr/bootloader/config.h</string>
-		<string>avr/bootloader/bootloader.c</string>
-		<string>README</string>
-		<string>avr/bootloader/usbconfig.h</string>
-		<string>avr/usbload/debug.c</string>
-		<string>avr/usbload/dump.h</string>
-		<string>avr/usbload/crc.c</string>
-		<string>avr/usbload/command.h</string>
-		<string>avr/usbload/dump.c</string>
-		<string>avr/usbload/loader.h</string>
-		<string>avr/usbload/info.h</string>
-		<string>avr/usbload/loader.c</string>
-		<string>avr/usbload/fifo.c</string>
-		<string>avr/usbload/command.c</string>
-		<string>avr/usbload/debug.h</string>
+		<string>avr/usbload/util.c</string>
+		<string>avr/usbload/util.h</string>
+		<string>avr/usbload/usb_bulk.h</string>
 		<string>avr/usbload/rle.h</string>
-		<string>avr/usbload/config.h</string>
-		<string>poc/avr_sdcard/main.c</string>
-		<string>poc/avr_usbload/sram.c</string>
-		<string>avr/usbload/sram.h</string>
-		<string>avr/usbload/shared_memory.h</string>
-		<string>avr/usbload/checksize</string>
-		<string>avr/usbload/shared_memory.c</string>
-		<string>avr/bootloader/interrupts.S</string>
-		<string>avr/usbload/info.c</string>
-		<string>avr/usbload/fifo.h</string>
-		<string>avr/usbload/main.c</string>
-		<string>avr/usbload/sram.c</string>
-		<string>avr/usbload/usbconfig.h</string>
-		<string>avr/usbload/crc.h</string>
+		<string>avr/usbload/shell.h</string>
 	</array>
 	<key>showFileHierarchyDrawer</key>
 	<false/>
@@ -891,13 +286,6 @@
 					<true/>
 					<key>subItems</key>
 					<dict>
-						<key>bootloader</key>
-						<dict>
-							<key>isExpanded</key>
-							<true/>
-							<key>subItems</key>
-							<dict/>
-						</dict>
 						<key>usbload</key>
 						<dict>
 							<key>isExpanded</key>
@@ -907,6 +295,13 @@
 						</dict>
 					</dict>
 				</dict>
+				<key>scripts</key>
+				<dict>
+					<key>isExpanded</key>
+					<true/>
+					<key>subItems</key>
+					<dict/>
+				</dict>
 			</dict>
 		</dict>
 	</dict>