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;
#endiffunctions.math.h:
#ifndef MATH_FUNCTIONS_H
#define MATH_FUNCTIONS_H
double add(double a, double b);
double subtract(double a, double b);
#endiffunctions.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_programExpected 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_definitiondependenciesโ 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 functionsdependenciescan 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 functionsSilverChain 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_silverchainPerfect 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! โจ