aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md147
1 files changed, 147 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..ca3e63d
--- /dev/null
+++ b/README.md
@@ -0,0 +1,147 @@
+# WMAP Parser for C
+
+A parser for `wmap` formatted Wardley Map files in ANSI C, with 68k and PPC mac support.
+
+## Features
+
+- **ANSI C Compatible**: Works with older compilers and hardware
+- **Complete Coverage**: Supports all `wmap` entities (components, dependencies, notes, stages, groups, inertia, evolution)
+
+## Quick Start
+
+```c
+#include <wmap_parser.h>
+
+int main() {
+ // Parse from file
+ wmap_map_t* map = wmap_parse_file("example.wmap");
+ if (!map) {
+ printf("Failed to parse file\n");
+ return 1;
+ }
+
+ // Access parsed data
+ printf("Components: %d\n", map->component_count);
+ printf("Dependencies: %d\n", map->dependency_count);
+
+ // Access individual components
+ for (int i = 0; i < map->component_count; i++) {
+ printf("Component: %s at (%.2f, %.2f)\n",
+ map->components[i].name,
+ map->components[i].x,
+ map->components[i].y);
+ }
+
+ // Clean up
+ wmap_map_free(map);
+ return 0;
+}
+```
+
+## Build Instructions
+
+### Library Build
+```bash
+make # Build release version -> ./build/release/
+make debug # Build debug version -> ./build/debug/
+make test # Test with example.wmap (uses current build)
+make benchmark # Performance benchmark (100 iterations default)
+make -e ITERATIONS=1000 benchmark # Custom iteration count
+```
+
+### Setting Configuration
+
+You can pass the CONFIGURATION environment variable to control which version
+is used. This applies to test and benchmark as well.
+```bash
+make -e CONFIGURATION=debug # Debug build via environment variable
+```
+
+### Development
+```bash
+make debug # Debug build with symbols
+make memtest # Memory leak testing (uses debug build)
+make clean # Remove all build artifacts (./build/ directory)
+make info # Show build configuration and available targets
+```
+
+## Data Structures
+
+```c
+typedef struct {
+ wmap_component_t components[WMAP_MAX_COMPONENTS];
+ wmap_dependency_t dependencies[WMAP_MAX_DEPENDENCIES];
+ wmap_note_t notes[WMAP_MAX_NOTES];
+ wmap_stage_data_t stages[WMAP_MAX_STAGES];
+ wmap_group_t groups[WMAP_MAX_GROUPS];
+ wmap_inertia_t inertias[WMAP_MAX_INERTIAS];
+ wmap_evolution_t evolutions[WMAP_MAX_EVOLUTIONS];
+
+ int component_count;
+ int dependency_count;
+ // ... other counts
+} wmap_map_t;
+```
+
+### Component Structure
+```c
+typedef struct {
+ char name[64]; // Component name
+ float x, y; // Position coordinates
+ wmap_shape_t shape; // Shape (NONE, X, SQUARE, TRIANGLE, CIRCLE)
+} wmap_component_t;
+```
+
+### Dependency Structure
+```c
+typedef struct {
+ char from[64]; // Source component name
+ char to[64]; // Target component name
+ int is_arrow; // 1 for ->, 0 for --
+} wmap_dependency_t;
+```
+
+## Memory Limits
+
+| Entity Type | Maximum Count |
+|-------------|---------------|
+| Components | 1024 |
+| Dependencies | 2048 |
+| Notes | 256 |
+| Groups | 128 |
+| Inertias | 256 |
+| Evolutions | 256 |
+| Name Length | 64 characters |
+| Text Length | 256 characters |
+
+## Performance
+
+- **Parsing Speed**: 32,000+ parses/second
+- **Memory Usage**: Fixed allocation, no dynamic memory during parsing
+- **File Size Limit**: 10MB maximum for safety
+- **Input Validation**: Automatic bounds checking and malformed input handling
+
+## API Reference
+
+### Core Functions
+
+```c
+// Parse from string
+wmap_map_t* wmap_parse_string(const char* input);
+
+// Parse from file
+wmap_map_t* wmap_parse_file(const char* filename);
+
+// Free parsed map
+void wmap_map_free(wmap_map_t* map);
+
+// Validate input size and format
+int wmap_validate_input(const char* input, size_t max_size);
+```
+
+### Error Handling
+
+- Functions return `NULL` on failure
+- Input validation prevents buffer overflows
+- Malformed lines are skipped, parsing continues
+- File size limits prevent excessive memory usage