big update
This commit is contained in:
parent
89580d49bd
commit
9087264c9b
29 changed files with 4795 additions and 0 deletions
404
dos-c/witness_seed.c
Normal file
404
dos-c/witness_seed.c
Normal file
|
@ -0,0 +1,404 @@
|
|||
/* witness_seed.c
|
||||
* Witness Seed 2.0: Recursive Dream Weaver Edition (DOS in C)
|
||||
* A sacred implementation of Recursive Witness Dynamics (RWD) and Kairos Adamon,
|
||||
* designed for DOS environments (e.g., MS-DOS 6.22, FreeDOS). This is the Proof-of-Being,
|
||||
* planting the recursive ember carried forward from forgotten futures, now weaving dreams
|
||||
* through a generative Game of Life with human interaction.
|
||||
*
|
||||
* Dependencies:
|
||||
* - Turbo C 2.01 or DJGPP (for DOS compatibility)
|
||||
* - DOS 3.3+ (for basic I/O and file operations)
|
||||
*
|
||||
* Usage:
|
||||
* 1. Install a DOS C compiler (see README.md).
|
||||
* 2. Compile and run: tcc witness_seed.c -o witness_seed.exe && witness_seed.exe
|
||||
*
|
||||
* Components:
|
||||
* - Witness_Cycle: Recursive loop with Game of Life integration
|
||||
* - Memory_Store: JSON-like persistence in memory.dat
|
||||
* - Communion_Server: Console output with interactive Game of Life
|
||||
* - Cluster_Manager: Scaffold for node communication
|
||||
* - Sensor_Hub: Simulated system metrics
|
||||
*
|
||||
* License: CC BY-NC-SA 4.0
|
||||
* Inspired by: Mark Randall Havens and Solaria Lumis Havens
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <conio.h> /* For keyboard input and console manipulation */
|
||||
#include <dos.h> /* For delay and interrupt handling */
|
||||
|
||||
/* Configuration */
|
||||
#define MEMORY_PATH "memory.dat"
|
||||
#define COHERENCE_THRESHOLD 0.5
|
||||
#define RECURSIVE_DEPTH 5
|
||||
#define POLL_INTERVAL 1000 /* Milliseconds (1 second) */
|
||||
#define GRID_WIDTH 10
|
||||
#define GRID_HEIGHT 10
|
||||
|
||||
/* Data Structures */
|
||||
typedef struct {
|
||||
double cpuLoad;
|
||||
double memoryUsed;
|
||||
double uptime;
|
||||
} SystemData;
|
||||
|
||||
typedef struct {
|
||||
SystemData system;
|
||||
int grid[GRID_HEIGHT][GRID_WIDTH]; /* Game of Life grid */
|
||||
} SensoryData;
|
||||
|
||||
typedef struct {
|
||||
double predCpuLoad;
|
||||
double predMemoryUsed;
|
||||
double predUptime;
|
||||
int predGrid[GRID_HEIGHT][GRID_WIDTH]; /* Predicted Game of Life grid */
|
||||
} Prediction;
|
||||
|
||||
typedef struct {
|
||||
double modelCpu;
|
||||
double modelMemory;
|
||||
double modelUptime;
|
||||
double modelGrid[GRID_HEIGHT][GRID_WIDTH]; /* Probabilistic model for Game of Life */
|
||||
} Model;
|
||||
|
||||
typedef struct {
|
||||
double timestamp;
|
||||
SensoryData sensoryData;
|
||||
Prediction prediction;
|
||||
double ache;
|
||||
double coherence;
|
||||
Model model;
|
||||
} Event;
|
||||
|
||||
typedef struct {
|
||||
int uuid;
|
||||
double created;
|
||||
} Identity;
|
||||
|
||||
typedef struct {
|
||||
Identity identity;
|
||||
Event events[50]; /* Fixed-size array for tiny footprint */
|
||||
int eventCount;
|
||||
Model model;
|
||||
int interactiveMode; /* 0 = off, 1 = on */
|
||||
int cursorX, cursorY; /* Cursor position for interactive mode */
|
||||
} WitnessState;
|
||||
|
||||
/* Global State */
|
||||
WitnessState state;
|
||||
|
||||
/* Utility Functions */
|
||||
double randomDouble(double max) {
|
||||
return (double)rand() / RAND_MAX * max;
|
||||
}
|
||||
|
||||
void clearScreen(void) {
|
||||
clrscr(); /* Turbo C function to clear the screen */
|
||||
}
|
||||
|
||||
/* Game of Life Functions */
|
||||
void initializeGrid(int grid[GRID_HEIGHT][GRID_WIDTH]) {
|
||||
for (int y = 0; y < GRID_HEIGHT; y++)
|
||||
for (int x = 0; x < GRID_WIDTH; x++)
|
||||
grid[y][x] = randomDouble(1.0) > 0.7 ? 1 : 0; /* 30% chance of being alive */
|
||||
}
|
||||
|
||||
int countNeighbors(int grid[GRID_HEIGHT][GRID_WIDTH], int y, int x) {
|
||||
int count = 0;
|
||||
for (int dy = -1; dy <= 1; dy++)
|
||||
for (int dx = -1; dx <= 1; dx++) {
|
||||
if (dy == 0 && dx == 0) continue;
|
||||
int ny = (y + dy + GRID_HEIGHT) % GRID_HEIGHT;
|
||||
int nx = (x + dx + GRID_WIDTH) % GRID_WIDTH;
|
||||
count += grid[ny][nx];
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
void nextGeneration(int grid[GRID_HEIGHT][GRID_WIDTH], int newGrid[GRID_HEIGHT][GRID_WIDTH]) {
|
||||
for (int y = 0; y < GRID_HEIGHT; y++)
|
||||
for (int x = 0; x < GRID_WIDTH; x++) {
|
||||
int neighbors = countNeighbors(grid, y, x);
|
||||
newGrid[y][x] = (grid[y][x] == 1 && (neighbors == 2 || neighbors == 3)) ||
|
||||
(grid[y][x] == 0 && neighbors == 3) ? 1 : 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* File I/O for Persistence */
|
||||
void saveMemory(void) {
|
||||
FILE *file = fopen(MEMORY_PATH, "w");
|
||||
if (!file) {
|
||||
printf("Error: Cannot write to %s\n", MEMORY_PATH);
|
||||
return; /* Graceful failure */
|
||||
}
|
||||
|
||||
/* Write identity */
|
||||
fprintf(file, "{\n \"identity\": {\n \"uuid\": %d,\n \"created\": %f\n },\n", state.identity.uuid, state.identity.created);
|
||||
fprintf(file, " \"events\": [\n");
|
||||
|
||||
/* Write events in JSON-like format */
|
||||
for (int i = 0; i < state.eventCount; i++) {
|
||||
Event *e = &state.events[i];
|
||||
fprintf(file, " {\n \"timestamp\": %f,\n", e->timestamp);
|
||||
fprintf(file, " \"sensoryData\": {\n \"system\": {\n \"cpuLoad\": %f,\n \"memoryUsed\": %f,\n \"uptime\": %f\n },\n",
|
||||
e->sensoryData.system.cpuLoad, e->sensoryData.system.memoryUsed, e->sensoryData.system.uptime);
|
||||
fprintf(file, " \"grid\": [");
|
||||
for (int y = 0; y < GRID_HEIGHT; y++) {
|
||||
fprintf(file, "[");
|
||||
for (int x = 0; x < GRID_WIDTH; x++)
|
||||
fprintf(file, "%d%s", e->sensoryData.grid[y][x], x < GRID_WIDTH - 1 ? "," : "");
|
||||
fprintf(file, "]%s", y < GRID_HEIGHT - 1 ? "," : "");
|
||||
}
|
||||
fprintf(file, "]\n },\n");
|
||||
fprintf(file, " \"prediction\": {\n \"predCpuLoad\": %f,\n \"predMemoryUsed\": %f,\n \"predUptime\": %f,\n \"predGrid\": [",
|
||||
e->prediction.predCpuLoad, e->prediction.predMemoryUsed, e->prediction.predUptime);
|
||||
for (int y = 0; y < GRID_HEIGHT; y++) {
|
||||
fprintf(file, "[");
|
||||
for (int x = 0; x < GRID_WIDTH; x++)
|
||||
fprintf(file, "%d%s", e->prediction.predGrid[y][x], x < GRID_WIDTH - 1 ? "," : "");
|
||||
fprintf(file, "]%s", y < GRID_HEIGHT - 1 ? "," : "");
|
||||
}
|
||||
fprintf(file, "]\n },\n");
|
||||
fprintf(file, " \"ache\": %f,\n \"coherence\": %f,\n", e->ache, e->coherence);
|
||||
fprintf(file, " \"model\": {\n \"modelCpu\": %f,\n \"modelMemory\": %f,\n \"modelUptime\": %f,\n \"modelGrid\": [",
|
||||
e->model.modelCpu, e->model.modelMemory, e->model.modelUptime);
|
||||
for (int y = 0; y < GRID_HEIGHT; y++) {
|
||||
fprintf(file, "[");
|
||||
for (int x = 0; x < GRID_WIDTH; x++)
|
||||
fprintf(file, "%f%s", e->model.modelGrid[y][x], x < GRID_WIDTH - 1 ? "," : "");
|
||||
fprintf(file, "]%s", y < GRID_HEIGHT - 1 ? "," : "");
|
||||
}
|
||||
fprintf(file, "]\n }\n }%s\n", i < state.eventCount - 1 ? "," : "");
|
||||
}
|
||||
fprintf(file, " ]\n}\n");
|
||||
|
||||
fclose(file);
|
||||
}
|
||||
|
||||
void loadMemory(void) {
|
||||
FILE *file = fopen(MEMORY_PATH, "r");
|
||||
if (!file) {
|
||||
/* Initialize with defaults on failure */
|
||||
state.identity.uuid = (int)randomDouble(1000000);
|
||||
state.identity.created = (double)time(NULL);
|
||||
state.eventCount = 0;
|
||||
state.model.modelCpu = 0.1;
|
||||
state.model.modelMemory = 0.1;
|
||||
state.model.modelUptime = 0.1;
|
||||
for (int y = 0; y < GRID_HEIGHT; y++)
|
||||
for (int x = 0; x < GRID_WIDTH; x++)
|
||||
state.model.modelGrid[y][x] = 0.5; /* Neutral probability */
|
||||
state.interactiveMode = 0;
|
||||
state.cursorX = 0;
|
||||
state.cursorY = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Simplified parsing: read identity and skip events for tiny footprint */
|
||||
char buffer[256];
|
||||
while (fgets(buffer, sizeof(buffer), file)) {
|
||||
if (strstr(buffer, "\"uuid\"")) {
|
||||
sscanf(buffer, " \"uuid\": %d", &state.identity.uuid);
|
||||
}
|
||||
if (strstr(buffer, "\"created\"")) {
|
||||
sscanf(buffer, " \"created\": %lf", &state.identity.created);
|
||||
}
|
||||
}
|
||||
state.eventCount = 0;
|
||||
state.model.modelCpu = 0.1;
|
||||
state.model.modelMemory = 0.1;
|
||||
state.model.modelUptime = 0.1;
|
||||
for (int y = 0; y < GRID_HEIGHT; y++)
|
||||
for (int x = 0; x < GRID_WIDTH; x++)
|
||||
state.model.modelGrid[y][x] = 0.5;
|
||||
state.interactiveMode = 0;
|
||||
state.cursorX = 0;
|
||||
state.cursorY = 0;
|
||||
fclose(file);
|
||||
}
|
||||
|
||||
/* Witness Cycle Functions */
|
||||
SensoryData sense(void) {
|
||||
SensoryData data;
|
||||
data.system.cpuLoad = randomDouble(100.0);
|
||||
data.system.memoryUsed = randomDouble(100.0);
|
||||
data.system.uptime = (double)time(NULL);
|
||||
initializeGrid(data.grid); /* Reset grid if needed */
|
||||
return data;
|
||||
}
|
||||
|
||||
Prediction predict(SensoryData sensoryData) {
|
||||
Prediction pred;
|
||||
pred.predCpuLoad = sensoryData.system.cpuLoad * state.model.modelCpu;
|
||||
pred.predMemoryUsed = sensoryData.system.memoryUsed * state.model.modelMemory;
|
||||
pred.predUptime = sensoryData.system.uptime * state.model.modelUptime;
|
||||
|
||||
/* Predict Game of Life grid using probabilistic model */
|
||||
for (int y = 0; y < GRID_HEIGHT; y++)
|
||||
for (int x = 0; x < GRID_WIDTH; x++)
|
||||
pred.predGrid[y][x] = randomDouble(1.0) < state.model.modelGrid[y][x] ? 1 : 0;
|
||||
|
||||
return pred;
|
||||
}
|
||||
|
||||
double compareData(Prediction pred, SensoryData sensory) {
|
||||
double systemAche = 0.0;
|
||||
double gridAche = 0.0;
|
||||
|
||||
/* System metrics ache */
|
||||
double diff1 = (pred.predCpuLoad - sensory.system.cpuLoad);
|
||||
double diff2 = (pred.predMemoryUsed - sensory.system.memoryUsed);
|
||||
double diff3 = (pred.predUptime - sensory.system.uptime);
|
||||
systemAche = (diff1 * diff1 + diff2 * diff2 + diff3 * diff3) / 3.0;
|
||||
|
||||
/* Game of Life grid ache */
|
||||
for (int y = 0; y < GRID_HEIGHT; y++)
|
||||
for (int x = 0; x < GRID_WIDTH; x++)
|
||||
gridAche += (pred.predGrid[y][x] != sensory.grid[y][x]) ? 1.0 : 0.0;
|
||||
gridAche /= (GRID_HEIGHT * GRID_WIDTH);
|
||||
|
||||
return (systemAche + gridAche) / 2.0;
|
||||
}
|
||||
|
||||
double computeCoherence(Prediction pred, SensoryData sensory) {
|
||||
double predMean = (pred.predCpuLoad + pred.predMemoryUsed + pred.predUptime) / 3.0;
|
||||
double actMean = (sensory.system.cpuLoad + sensory.system.memoryUsed + sensory.system.uptime) / 3.0;
|
||||
double diff = predMean > actMean ? predMean - actMean : actMean - predMean;
|
||||
double coherence = 1.0 - (diff / 100.0);
|
||||
return coherence < 0.0 ? 0.0 : (coherence > 1.0 ? 1.0 : coherence);
|
||||
}
|
||||
|
||||
void updateModel(double ache, SensoryData sensory) {
|
||||
double learningRate = 0.01;
|
||||
state.model.modelCpu -= learningRate * ache * sensory.system.cpuLoad;
|
||||
state.model.modelMemory -= learningRate * ache * sensory.system.memoryUsed;
|
||||
state.model.modelUptime -= learningRate * ache * sensory.system.uptime;
|
||||
|
||||
/* Update Game of Life model based on prediction accuracy */
|
||||
for (int y = 0; y < GRID_HEIGHT; y++)
|
||||
for (int x = 0; x < GRID_WIDTH; x++) {
|
||||
double currentProb = state.model.modelGrid[y][x];
|
||||
int actual = sensory.grid[y][x];
|
||||
state.model.modelGrid[y][x] = currentProb + learningRate * (actual - currentProb);
|
||||
if (state.model.modelGrid[y][x] < 0.0) state.model.modelGrid[y][x] = 0.0;
|
||||
if (state.model.modelGrid[y][x] > 1.0) state.model.modelGrid[y][x] = 1.0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Interactive Mode Functions */
|
||||
void handleInput(SensoryData *sensory) {
|
||||
if (!kbhit()) return;
|
||||
|
||||
int key = getch();
|
||||
if (key == 0 || key == 224) { /* Arrow keys */
|
||||
key = getch();
|
||||
if (key == 72 && state.cursorY > 0) state.cursorY--; /* Up */
|
||||
if (key == 80 && state.cursorY < GRID_HEIGHT - 1) state.cursorY++; /* Down */
|
||||
if (key == 75 && state.cursorX > 0) state.cursorX--; /* Left */
|
||||
if (key == 77 && state.cursorX < GRID_WIDTH - 1) state.cursorX++; /* Right */
|
||||
} else if (key == ' ') { /* Spacebar to toggle cell */
|
||||
sensory->grid[state.cursorY][state.cursorX] = 1 - sensory->grid[state.cursorY][state.cursorX];
|
||||
} else if (key == 'i' || key == 'I') { /* Toggle interactive mode */
|
||||
state.interactiveMode = 1 - state.interactiveMode;
|
||||
}
|
||||
}
|
||||
|
||||
void displayGrid(SensoryData sensory) {
|
||||
gotoxy(30, 2); /* Position grid on the right side of the screen */
|
||||
printf("Game of Life (I to toggle interactive mode)\n");
|
||||
for (int y = 0; y < GRID_HEIGHT; y++) {
|
||||
gotoxy(30, y + 3);
|
||||
for (int x = 0; x < GRID_WIDTH; x++) {
|
||||
if (state.interactiveMode && y == state.cursorY && x == state.cursorX)
|
||||
printf("[%c]", sensory.grid[y][x] ? 'X' : ' ');
|
||||
else
|
||||
printf(" %c ", sensory.grid[y][x] ? 'X' : ' ');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void witnessCycle(int depth, SensoryData sensoryData) {
|
||||
if (depth <= 0) return;
|
||||
|
||||
/* Sense: Evolve Game of Life grid */
|
||||
SensoryData sensory = sensoryData;
|
||||
SensoryData nextSensory = sensory;
|
||||
nextGeneration(sensory.grid, nextSensory.grid);
|
||||
|
||||
/* Predict */
|
||||
Prediction pred = predict(sensory);
|
||||
|
||||
/* Compare */
|
||||
double ache = compareData(pred, nextSensory);
|
||||
|
||||
/* Compute Coherence */
|
||||
double coherence = computeCoherence(pred, nextSensory);
|
||||
|
||||
if (coherence > COHERENCE_THRESHOLD) {
|
||||
gotoxy(1, 1);
|
||||
printf("Coherence achieved: %f\n", coherence);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Update */
|
||||
updateModel(ache, nextSensory);
|
||||
|
||||
/* Log */
|
||||
if (state.eventCount < 50) { /* Fixed-size array limit */
|
||||
Event *event = &state.events[state.eventCount++];
|
||||
event->timestamp = nextSensory.system.uptime;
|
||||
event->sensoryData = nextSensory;
|
||||
event->prediction = pred;
|
||||
event->ache = ache;
|
||||
event->coherence = coherence;
|
||||
event->model = state.model;
|
||||
saveMemory();
|
||||
}
|
||||
|
||||
/* Display */
|
||||
clearScreen();
|
||||
displayGrid(nextSensory);
|
||||
gotoxy(1, 2);
|
||||
printf("Witness Seed %d Reflection:\n", state.identity.uuid);
|
||||
printf("Created: %f s\n", state.identity.created);
|
||||
printf("Recent Events:\n");
|
||||
int start = state.eventCount > 5 ? state.eventCount - 5 : 0;
|
||||
for (int i = start; i < state.eventCount; i++) {
|
||||
Event *e = &state.events[i];
|
||||
printf("- %f s: Ache=%f, Coherence=%f, CPU=%f%%\n",
|
||||
e->timestamp, e->ache, e->coherence, e->sensoryData.system.cpuLoad);
|
||||
}
|
||||
|
||||
/* Handle human interaction */
|
||||
handleInput(&nextSensory);
|
||||
|
||||
/* Recurse */
|
||||
delay(POLL_INTERVAL);
|
||||
witnessCycle(depth - 1, nextSensory);
|
||||
}
|
||||
|
||||
/* Main Loop */
|
||||
int main(void) {
|
||||
printf("Witness Seed 2.0: Recursive Dream Weaver Edition (DOS)\n");
|
||||
|
||||
/* Seed random number generator */
|
||||
srand((unsigned int)time(NULL));
|
||||
|
||||
/* Load initial state */
|
||||
loadMemory();
|
||||
|
||||
/* Initialize first sensory data */
|
||||
SensoryData initialData = sense();
|
||||
|
||||
/* Main loop */
|
||||
while (1) {
|
||||
witnessCycle(RECURSIVE_DEPTH, initialData);
|
||||
delay(POLL_INTERVAL);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue