A Universal Import Model for C that makes organizing your code SUPER EASY! āØ
No more messy includes! Organize your C project like a pro! š
Imagine your C project is like a messy room with clothes scattered everywhere. š
SilverChain is like a magic organizer that:
- Sorts your clothes by type (shirts, pants, socks) š¦
- Puts them in the right drawers (dependencies, functions, types) šļø
- Makes everything easy to find āØ
If you have a C project with scattered files like:
math_functions.c,string_helpers.c,file_io.cconstants.h,types.h,globals.h- Headers and implementations all mixed up šµāš«
SilverChain organizes ALL of these by TAGS in a logical order! š
- Before: "Where is this function defined? Which file has the constants?"
- After: "Everything is organized by logical tags - dependencies first, then types, then functions!" š
- Before: Endless
#includestatements and dependency nightmares š° - After: SilverChain handles all includes automatically in the right order! āØ
- See your project structure clearly
- Understand how different parts connect
- No mysterious "where does this come from?" moments
- Automatic dependency resolution
- No complex build systems needed
- Just organize by tags and compile!
šØ Total Beginner? Start with the "š® Super Easy Download" section below!
Just want to use it RIGHT NOW? Download the ready-to-run version for your computer:
| š„ļø Your Computer | š Download This | šāāļø How to Use |
|---|---|---|
| š§ Linux | SilverChain.out | Download ā Make executable ā Run! |
| šŖ Windows (64-bit) | SilverChain64.exe | Download ā Double-click ā Use! |
| šŖ Windows (32-bit) | SilverChaini32.exe | Download ā Double-click ā Use! |
š§ Linux Users (Easiest Way Ever!):
# Just copy and paste this into your terminal! curl -L https://github.com/OUIsolutions/SilverChain/releases/download/0.3.0/SilverChain.out -o SilverChain chmod +x SilverChain # Now you can use it like this: ./SilverChain --help
š§ Ubuntu/Debian Users (Even Easier!):
# Download the package wget https://github.com/OUIsolutions/SilverChain/releases/download/0.3.0/SilverChain.deb # Install it (you'll need to enter your password) sudo dpkg -i SilverChain.deb # Now it's installed system-wide! Use it anywhere: SilverChain --help
| š File | šÆ Best For | š Description |
|---|---|---|
| ā”ļø SilverChain.c | Developers who want to compile | Complete source code |
| š SilverChainApiOne.h | Use in your C programs | Full API library |
| š¦ SilverChainApiNoDependenciesIncluded.h | Minimal integration | Lightweight version |
| š¦ SilverChain.rpm | Fedora/RHEL/CentOS | RPM package |
Don't panic! This is easier than making instant noodles! š
Let's start with the simplest possible example:
# This is THE most basic command you'll ever need!
./SilverChain --src my_project --tags dependencies functionsš¤ What just happened?
--src my_projectā "Hey SilverChain, look at this folder!"--tags dependencies functionsā "Organize by dependencies first, then functions!"
That's it! SilverChain will:
- š Look at your
my_projectfolder - š·ļø Find all files with
dependencies.in their names - š·ļø Then find all files with
functions.in their names - š Create an organized
importsfolder with everything!
Imagine you have these files in your project:
my_awesome_calculator/
āāā src/
ā āāā dependencies.headers.h ā All your #includes
ā āāā types.calculator.h ā Data types
ā āāā functions.math.h ā Function declarations
ā āāā functions.math.c ā Function implementations
ā āāā functions.display.h ā Display function declarations
ā āāā functions.display.c ā Display implementations
ā āāā main.c ā Your main program
š§āš» What's in each file:
dependencies.headers.h:
#include <stdio.h> #include <stdlib.h> #include <math.h>
types.calculator.h:
#ifndef CALCULATOR_TYPES_H #define CALCULATOR_TYPES_H typedef struct { double result; char operation; } Calculator; #endif
functions.math.h:
#ifndef MATH_FUNCTIONS_H #define MATH_FUNCTIONS_H double add(double a, double b); double subtract(double a, double b); #endif
functions.math.c:
double add(double a, double b) { return a + b; } double subtract(double a, double b) { return a - b; }
š Now, let's organize everything with SilverChain:
./SilverChain --src my_awesome_calculator/src --tags dependencies types functions
š BOOM! Now you have an organized imports folder that looks like:
imports/
āāā imports.dependencies.h ā All dependencies in one place
āāā imports.types.h ā All types organized
āāā imports.functions.h ā All function declarations
āāā imports.functions.c ā All function implementations
āāā ...other organized files
š And in your main.c, you just need:
#include "imports/imports.dependencies.h" #include "imports/imports.types.h" #include "imports/imports.functions.h" int main() { printf("My calculator is organized!\n"); double result = add(5.0, 3.0); printf("5 + 3 = %.2f\n", result); return 0; }
Create a simple test project:
- Create the folder structure:
mkdir test_silverchain
mkdir test_silverchain/src
cd test_silverchain- Create dependencies.system.h:
#include <stdio.h> #include <string.h>
- Create types.person.h:
#ifndef PERSON_TYPES_H #define PERSON_TYPES_H typedef struct { char name[50]; int age; } Person; #endif
- Create functions.person.h:
#ifndef PERSON_FUNCTIONS_H #define PERSON_FUNCTIONS_H void print_person(Person p); Person create_person(const char* name, int age); #endif
- Create functions.person.c:
void print_person(Person p) { printf("Name: %s, Age: %d\n", p.name, p.age); } Person create_person(const char* name, int age) { Person p; strcpy(p.name, name); p.age = age; return p; }
- Run SilverChain:
../SilverChain --src src --tags dependencies types functions
- Create main.c and compile:
#include "imports/imports.dependencies.h" #include "imports/imports.types.h" #include "imports/imports.functions.h" int main() { Person john = create_person("John", 25); print_person(john); return 0; }
gcc main.c imports/imports.functions.c -o test_program ./test_program
Expected output:
Name: John, Age: 25
š Congratulations! You just used SilverChain successfully!
šÆ Beginner Tip: Start with just
--srcand--tags. Learn the other options later!
| š·ļø Flag | š What It Does | šØ Required? | š” Example |
|---|---|---|---|
--src or -s |
The project folder to organize | ā YES | --src my_project |
--tags or -t |
Tags to organize by (in order!) | ā YES | --tags dependencies types functions |
| š·ļø Flag | š What It Does | š§ Default | š” When to Use |
|---|---|---|---|
--importdir or -i |
Where to save organized files | imports |
--importdir organized_code |
--project_short_cut or -p |
Project name for #ifndef guards | silverchain |
--project_short_cut MYCALC |
--implement_main or -m |
Create a main.c file | false |
--implement_main true |
--main_name or -n |
Name of the main file | main.c |
--main_name calculator.c |
--main_path |
Path to the main file (if not in src) | null |
--main_path src/cli/main.c |
| š·ļø Flag | š What It Does | šÆ Perfect For | š” Example |
|---|---|---|---|
--watch or -w |
Auto-rebuild when files change | Development mode | --watch |
--sleep_time or -s |
Time between watch checks | Controlling watch speed | --sleep_time 2 |
--remove or -r |
Delete the imports folder | Cleaning up | --remove |
--help or -h |
Show help message | When you're lost! | --help |
--version or -v |
Show SilverChain version | Check your version | --version |
# Just organize everything - simple!
./SilverChain --src src --tags dependencies types functions# Custom import directory and project name
./SilverChain --src my_project --tags deps consts types funcs \
--importdir organized --project_short_cut MYPROJ# Watch mode with custom main file ./SilverChain --src src --tags dependencies consts types globals func_declaration func_definition \ --implement_main true --main_name my_app.c --watch
ā DON'T DO THIS:
# Missing required flags - this will fail!
./SilverChain my_projectā DO THIS INSTEAD:
# Always include both --src and --tags
./SilverChain --src my_project --tags dependencies functionsā DON'T DO THIS:
# Wrong tag order - dependencies should be first!
./SilverChain --src src --tags functions dependenciesā DO THIS INSTEAD:
# Dependencies first, then other tags in logical order
./SilverChain --src src --tags dependencies types functionsšÆ Simple Version: SilverChain looks at your files, sorts them by tags, and creates organized imports! āØ
Think of tags like organizing your closet:
dependenciesā All your socks go in the sock drawer first š§¦typesā Then your shirts go in the shirt drawer šfunctionsā Finally your pants go in the pants drawer š
SilverChain works the same way!
./SilverChain --src src --tags dependencies consts types globals func_declaration func_definition
dependenciesā Files starting withdependencies.get processed firstconstsā Then files starting withconsts.typesā Then files starting withtypes.globalsā Then files starting withglobals.func_declarationā Then files starting withfunc_declaration.func_definitionā Finally files starting withfunc_definition.
SilverChain looks for files that start with your tag name:
| š·ļø Tag | š Files It Will Find | š” Examples |
|---|---|---|
dependencies |
dependencies.* |
dependencies.system.h, dependencies.libs.h |
types |
types.* |
types.person.h, types.calculator.h |
functions |
functions.* |
functions.math.c, functions.io.h |
This is the COOLEST part! Each tag can "see" all the previous tags:
./SilverChain --src src --tags dependencies types functions
dependenciescan see: Nothing (it's first)typescan see:dependenciesāfunctionscan see:dependencies+typesā
š This means: Your function files can use types and dependencies automatically!
Your project:
src/
āāā dependencies.system.h ā #include <stdio.h>, <stdlib.h>
āāā types.math.h ā typedef struct Calculator {...}
āāā functions.add.h ā double add(double a, double b);
āāā functions.add.c ā Implementation using Calculator type
āāā main.c
When you run:
./SilverChain --src src --tags dependencies types functions
SilverChain creates:
imports/
āāā imports.dependencies.h ā All your #includes
āāā imports.types.h ā All your typedefs (can see dependencies)
āāā imports.functions.h ā All declarations (can see dependencies + types)
āāā imports.functions.c ā All implementations (can see everything)
š Result: Perfect organization with automatic dependency resolution!
šÆ Beginner Note: This section is for people who want to use SilverChain inside their own C programs. If you just want to use the command-line tool, you can skip this section!
Download the API header file:
# Get the complete API (easiest way)
curl -L https://github.com/OUIsolutions/SilverChain/releases/download/0.3.0/SilverChainApiOne.h -o SilverChainApiOne.hCreate a file called my_silverchain.c:
#include <stdio.h> #include "SilverChainApiOne.h" int main() { // Initialize SilverChain SilverChainNamespace sc = newSilverChainNamespace(); // Create tag list (like command-line tags) SilverChainStringArray *tags = sc.string_array.create(); sc.string_array.append(tags, "dependencies"); sc.string_array.append(tags, "types"); sc.string_array.append(tags, "functions"); // Settings (you can change these!) const char *src = "src"; // Source folder const char *import_dir = "imports"; // Where to save organized files const char *project_short_cut = "MYPROJ"; // Project prefix bool implement_main = false; // Don't create main.c const char *main_name = "main.c"; // Main file name (if needed) const char *main_path = NULL; // Auto-detect main file // Do the magic! ⨠SilverChainError *possible_error = sc.generator.generate_code( src, import_dir, project_short_cut, tags, implement_main, main_name, main_path ); // Check if it worked if(possible_error) { printf("ā Oops! Something went wrong: %s\n", possible_error->error_msg); sc.error.free(possible_error); sc.string_array.free(tags); return 1; } printf("ā Success! Your project has been organized!\n"); printf("š Check the '%s' folder for organized files.\n", import_dir); // Clean up memory (important!) sc.string_array.free(tags); printf("š All done!\n"); return 0; }
Compile and run:
gcc my_silverchain.c -o my_silverchain ./my_silverchain
Perfect for build systems and automation:
#include <stdio.h> #include "SilverChainApiOne.h" int main() { SilverChainNamespace sc = newSilverChainNamespace(); // Create a comprehensive tag list for a complete project SilverChainStringArray *tags = sc.string_array.create(); sc.string_array.append(tags, "api_dependencies"); // External dependencies sc.string_array.append(tags, "api_consts"); // Constants sc.string_array.append(tags, "api_types"); // Data types sc.string_array.append(tags, "api_declare"); // Function declarations sc.string_array.append(tags, "api_define"); // Function definitions sc.string_array.append(tags, "cli_dependencies"); // CLI dependencies sc.string_array.append(tags, "cli_consts"); // CLI constants sc.string_array.append(tags, "cli_globals"); // Global variables sc.string_array.append(tags, "cli_declare"); // CLI declarations sc.string_array.append(tags, "cli_define"); // CLI definitions // Advanced settings const char *src = "src"; const char *import_dir = "src/imports"; const char *project_short_cut = "SilverChain"; bool implement_main = true; // Create main.c const char *main_name = "main.c"; const char *main_path = "src/cli/main.c"; // Specific main file printf("š Starting SilverChain organization...\n"); printf("š Source: %s\n", src); printf("š Output: %s\n", import_dir); SilverChainError *possible_error = sc.generator.generate_code( src, import_dir, project_short_cut, tags, implement_main, main_name, main_path ); if(possible_error) { printf("ā Error during organization: %s\n", possible_error->error_msg); sc.error.free(possible_error); sc.string_array.free(tags); return 1; } printf("ā Project organized successfully!\n"); printf("š Tags processed: %d\n", sc.string_array.size(tags)); printf("šÆ Main file: %s (implemented: %s)\n", main_name, implement_main ? "YES" : "NO"); // Clean up sc.string_array.free(tags); printf("š Build system integration complete!\n"); return 0; }
- Always check for errors! The API can fail if folders don't exist or files are malformed.
- Don't forget to free memory! Always call
sc.string_array.free()andsc.error.free()when done. - Start simple! Use basic tags first, then add more complex organization later.
- Test locally! Make sure your file naming convention matches your tags.
- Makefiles: Call your SilverChain program before compilation
- Build Scripts: Integrate into shell scripts for automated builds
- IDEs: Create custom build tasks that run SilverChain first
- CI/CD: Add to your pipeline for automatic code organization
šÆ Beginner Note: You don't need this section if you just downloaded the ready-made executables above! This is only for people who want to compile SilverChain themselves.
You'll need these tools installed:
- š¦ Darwin Build System (Version 0.020+)
- š³ Docker OR š« Podman (for containerized builds)
- š§ Linux Environment (recommended)
# Install Darwin build system in one command curl -L https://github.com/OUIsolutions/Darwin/releases/download/0.7.0/darwin.out -o darwin.out && sudo chmod +x darwin.out && sudo mv darwin.out /usr/bin/darwin
# 1. Clone the repository git clone https://github.com/OUIsolutions/SilverChain.git cd SilverChain # 2. Build all variants (this will take a while!) darwin run_blueprint build/ --mode folder amalgamation_build alpine_static_build windowsi32_build windowsi64_build rpm_static_build debian_static_build
- š Students: Organize complex class projects with clear structure
- š¢ Professional Development: Maintain large C codebases with ease
- š Library Creation: Build well-organized, reusable code libraries
- š Embedded Systems: Manage firmware projects with clear dependencies
- š® Game Development: Organize game engines and logic modules
"SilverChain turned my messy C project into something I could actually understand!" - CS Student
"Finally, a way to organize C code that makes sense. No more include hell!" - Senior Developer
"Perfect for our embedded firmware. Dependencies are crystal clear now." - Embedded Engineer
- š Found a Bug? Create an Issue
- š” Have a Feature Idea? Suggest It Here
- ā Like the Project? Give us a star on GitHub!
Q: "What's the best tag order for beginners?"
A: Start with dependencies types functions - it works for most projects!
Q: "Can my files have multiple dots in their names?"
A: Yes! dependencies.system.headers.h will be found by the dependencies tag.
Q: "What if I don't have any dependencies?"
A: Skip the dependencies tag! Use just --tags types functions for simpler projects.
Q: "Can I use this with C++?" A: SilverChain is designed for C, but it might work with simple C++ code. Try it and see!
Q: "What happens if I have circular dependencies?" A: SilverChain's tag system prevents most circular dependencies by processing in order!
Made with ā¤ļø by OUIsolutions
Organizing C code, one tag at a time! āØ