GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - OUIsolutions/SilverChain: a unified import model for C

This repository was archived by the owner on Sep 18, 2026. It is now read-only.
BranchesTags
Open more actions menu

Latest commit

 

History

207 Commits
207 Commits

Folders and files

NameName
Last commit message
Last commit date
.vscode
.vscode
 
 
build
build
 
 
src
src
 
 
.gitignore
.gitignore
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 

Repository files navigation

šŸ”— SilverChain

GitHub release (latest by date) GitHub GitHub Repo stars C Platform

A Universal Import Model for C that makes organizing your code SUPER EASY! ✨

No more messy includes! Organize your C project like a pro! šŸš€

šŸŽ¬ Watch the Video Explanation


šŸŽÆ What is SilverChain? (Super Simple Explanation!)

Imagine your C project is like a messy room with clothes scattered everywhere. šŸ 

SilverChain is like a magic organizer that:

  1. Sorts your clothes by type (shirts, pants, socks) šŸ“¦
  2. Puts them in the right drawers (dependencies, functions, types) šŸ—‚ļø
  3. Makes everything easy to find ✨

šŸ“š In Programming Terms:

If you have a C project with scattered files like:

  • math_functions.c, string_helpers.c, file_io.c
  • constants.h, types.h, globals.h
  • Headers and implementations all mixed up šŸ˜µā€šŸ’«

SilverChain organizes ALL of these by TAGS in a logical order! šŸŽ‰

šŸ¤” Why is this AMAZING for beginners?

āœ… SUPER EASY to Understand Your Project

  • Before: "Where is this function defined? Which file has the constants?"
  • After: "Everything is organized by logical tags - dependencies first, then types, then functions!" šŸš€

āœ… NO More Include Hell

  • Before: Endless #include statements and dependency nightmares 😰
  • After: SilverChain handles all includes automatically in the right order! ✨

āœ… Perfect for Learning

  • See your project structure clearly
  • Understand how different parts connect
  • No mysterious "where does this come from?" moments

āœ… Builds Like Magic

  • Automatic dependency resolution
  • No complex build systems needed
  • Just organize by tags and compile!

šŸ“„ Download & Installation (Choose Your Adventure!)

🚨 Total Beginner? Start with the "šŸŽ® Super Easy Download" section below!

šŸŽ® Super Easy Download (No Compilation Needed!)

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!

šŸš€ Super Quick Installation (Copy & Paste!)

🐧 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

šŸ§‘ā€šŸ’» Advanced Downloads (For Developers)

šŸ“ 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

šŸƒā€ā™‚ļø Quick Start Guide (For Total Beginners!)

Don't panic! This is easier than making instant noodles! šŸœ

šŸŽ¬ Step 1: Your First SilverChain Project (The Basics)

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:

  1. šŸ” Look at your my_project folder
  2. šŸ·ļø Find all files with dependencies. in their names
  3. šŸ·ļø Then find all files with functions. in their names
  4. šŸ“ Create an organized imports folder with everything!

šŸŽ¬ Step 2: Real-World Example (Let's Do This Together!)

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;
}

šŸŽ¬ Step 3: Test It Yourself!

Create a simple test project:

  1. Create the folder structure:
mkdir test_silverchain
mkdir test_silverchain/src
cd test_silverchain
  1. Create dependencies.system.h:
#include <stdio.h>
#include <string.h>
  1. Create types.person.h:
#ifndef PERSON_TYPES_H
#define PERSON_TYPES_H
typedef struct {
    char name[50];
    int age;
} Person;
#endif
  1. 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
  1. 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;
}
  1. Run SilverChain:
../SilverChain --src src --tags dependencies types functions
  1. 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!


āš™ļø Command-Line Options (All the Cool Features!)

šŸŽÆ Beginner Tip: Start with just --src and --tags. Learn the other options later!

šŸ”„ Essential Options (You NEED These!)

šŸ·ļø 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

šŸŽ›ļø Useful Options (Make Your Life Easier!)

šŸ·ļø 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

šŸš€ Advanced Options (For Power Users!)

šŸ·ļø 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

🌟 Real-World Examples:

šŸ„‡ Beginner Example:

# Just organize everything - simple!
./SilverChain --src src --tags dependencies types functions

🄈 Intermediate Example:

# Custom import directory and project name
./SilverChain --src my_project --tags deps consts types funcs \
  --importdir organized --project_short_cut MYPROJ

šŸ„‰ Advanced Example:

# 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

🚨 Common Beginner Mistakes (And How to Avoid Them!)

āŒ 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

🧠 How SilverChain Works (The Magic Explained!)

šŸŽÆ Simple Version: SilverChain looks at your files, sorts them by tags, and creates organized imports! ✨

šŸ·ļø The Tag System (Super Important!)

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!

šŸ“‹ Tag Processing Order:

./SilverChain --src src --tags dependencies consts types globals func_declaration func_definition
  1. dependencies → Files starting with dependencies. get processed first
  2. consts → Then files starting with consts.
  3. types → Then files starting with types.
  4. globals → Then files starting with globals.
  5. func_declaration → Then files starting with func_declaration.
  6. func_definition → Finally files starting with func_definition.

šŸ” File Naming Convention (The Secret!)

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

šŸ‘€ Tag Vision (How Tags See Each Other)

This is the COOLEST part! Each tag can "see" all the previous tags:

./SilverChain --src src --tags dependencies types functions
  • dependencies can see: Nothing (it's first)
  • types can see: dependencies āœ…
  • functions can see: dependencies + types āœ…

🌟 This means: Your function files can use types and dependencies automatically!

šŸŽ¬ Step-by-Step Example:

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!


šŸ§‘ā€šŸ’» API Usage (For Programmers Who Want to Integrate!)

šŸŽÆ 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!

šŸš€ Quick Setup (Get the API Library)

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.h

šŸŽ¬ Simple Example (Your First API Program!)

Create 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

šŸŽ›ļø Advanced Example (With Custom Build Integration!)

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;
}

🚨 Important Notes for Beginners:

  1. Always check for errors! The API can fail if folders don't exist or files are malformed.
  2. Don't forget to free memory! Always call sc.string_array.free() and sc.error.free() when done.
  3. Start simple! Use basic tags first, then add more complex organization later.
  4. Test locally! Make sure your file naming convention matches your tags.

šŸ’” Integration Tips:

  • 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

šŸ”Ø Building from Scratch (For Advanced Users!)

šŸŽÆ 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.

šŸ“‹ Prerequisites (What You Need First)

You'll need these tools installed:

  1. šŸ¦„ Darwin Build System (Version 0.020+)
  2. 🐳 Docker OR šŸ«– Podman (for containerized builds)
  3. 🐧 Linux Environment (recommended)

šŸš€ One-Line Darwin Installation (Linux Only!)

# 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

šŸ“ Clone and Build

# 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

šŸŽ‰ Success Stories & Use Cases

🌟 Perfect For:

  • šŸŽ“ 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

šŸ’¬ What Users Say:

"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


šŸ†˜ Need Help? (We've Got You Covered!)

šŸ¤ Community Support

  • šŸ› Found a Bug? Create an Issue
  • šŸ’” Have a Feature Idea? Suggest It Here
  • ⭐ Like the Project? Give us a star on GitHub!

šŸ“š Common Questions

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!


🌟 Ready to Organize Your C Code Like a Pro?

ā¬‡ļø Download Now | ⭐ Star on GitHub | šŸ› Report Issues

Made with ā¤ļø by OUIsolutions

Organizing C code, one tag at a time! ✨

About

a unified import model for C

Topics

bundlerclanguagemake-alternative

Resources

Readme
MIT license
Activity
Custom properties

Stars

3 stars

Watchers

1 watching

Forks

0 forks
Report repository

Releases

Packages

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800Ɨ600. No cookies required.