+ boolean prefix_found = FALSE;
+ boolean start_new_row = FALSE;
+
+ // level sketch element number prefixes (may be multi-byte characters)
+ char *prefix_list[] = { "`", "¸" };
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(prefix_list); i++)
+ {
+ char *prefix = prefix_list[i];
+
+ // check if string is large enough for prefix
+ if (strlen(ptr) < strlen(prefix))
+ {
+ stop = TRUE;
+
+ break;
+ }
+
+ // check if string starts with prefix
+ if (strPrefix(ptr, prefix))
+ {
+ ptr += strlen(prefix);
+
+ prefix_found = TRUE;
+
+ break;
+ }
+ }
+
+ // check if prefix found and followed by (at least) three digits
+ if (prefix_found &&
+ strlen(ptr) >= 3 &&
+ ptr[0] >= '0' && ptr[0] <= '9' &&
+ ptr[1] >= '0' && ptr[1] <= '9' &&
+ ptr[2] >= '0' && ptr[2] <= '9')
+ {
+ int element = ((ptr[0] - '0') * 100 +
+ (ptr[1] - '0') * 10 +
+ (ptr[2] - '0'));
+
+ ptr += 3;
+
+ // level sketch element number might consist of four digits
+ if (ptr[0] >= '0' && ptr[0] <= '9')
+ {
+ element = element * 10 + (ptr[0] - '0');
+ ptr++;
+ }
+
+ if (element >= NUM_FILE_ELEMENTS)
+ element = EL_UNKNOWN;
+
+ brush_buffer[x][y] = element;
+
+ brush_width = MAX(x + 1, brush_width);
+ brush_height = MAX(y + 1, brush_height);
+
+ x++;
+
+ if (x >= MAX_LEV_FIELDX)
+ start_new_row = TRUE;
+
+ allow_new_row = TRUE;
+ }
+ else