# wjmmph/calculator architecture

> Architecture diagram of the GitHub repository wjmmph/calculator, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/wjmmph/calculator
- Repository: https://github.com/wjmmph/calculator

## Overview

CAlculator v1.04 combines an interactive arithmetic calculator with a password-protected document vault. The main loop dispatches calculator input and vault states; users can create or unlock a vault, then read, append, export, or delete its contents, with music controls in settings. The graph reflects the supplied tree and sampled source; vault menu/read modules are represented at their enclosing directory because their implementations were not sampled.

Main entry points: [`CAlculator v1.04/main.py`](https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/main.py) (State dispatcher), [`CAlculator v1.04/state.py`](https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/state.py) (Shared state), [`CAlculator v1.04/SECURE_VAULT/VaultManager.py`](https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/SECURE_VAULT/VaultManager.py) (Vault manager), [`CAlculator v1.04/GAME/result.py`](https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/GAME/result.py) (Calculation result)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application flow"]
  node_main["State dispatcher<br/>[main.py]"]
  node_state["Shared state<br/>[state.py]"]
end

subgraph group_calc["Calculator"]
  node_first["First number<br/>[first.py]"]
  node_operator["Operator input<br/>[calc_operator.py]"]
  node_second["Second number<br/>[second.py]"]
  node_result["Calculation result<br/>[result.py]"]
  node_choice["Continue choice<br/>[choice.py]"]
  node_exit["Exit handler<br/>[exit.py]"]
end

subgraph group_vault["Secure vault"]
  node_vault_init["Vault initialization<br/>[initialization.py]"]
  node_vault_menu["Vault menu<br/>[SECURE_VAULT]"]
  node_vault_write["Append data<br/>[write_new.py]"]
  node_vault_read["Read data<br/>[SECURE_VAULT]"]
  node_vault_settings["Vault settings<br/>[settings.py]"]
  node_vault_manager["Vault manager<br/>[VaultManager.py]"]
  node_vault_file[("Encrypted vault")]
end

subgraph group_media["Music playback"]
  node_music["Music player<br/>[initialization.py]"]
  node_audio["Audio asset"]
end

node_user(("User"))
node_libraries["Crypto and document libraries"]
node_pygame["Pygame audio"]
node_network(("Internet"))

node_user -->|"interacts"| node_main
node_main -->|"reads state"| node_state
node_main -->|"dispatches"| node_first
node_main -->|"dispatches"| node_operator
node_main -->|"dispatches"| node_second
node_main -->|"dispatches"| node_result
node_main -->|"dispatches"| node_choice
node_main -->|"dispatches"| node_exit
node_main -->|"dispatches"| node_vault_init
node_main -->|"dispatches"| node_vault_menu
node_main -->|"dispatches"| node_vault_write
node_main -->|"dispatches"| node_vault_read
node_main -->|"dispatches"| node_vault_settings
node_first -->|"updates"| node_state
node_operator -->|"updates"| node_state
node_second -->|"updates"| node_state
node_result -->|"updates"| node_state
node_result -->|"reads operands"| node_first
node_result -->|"reads operator"| node_operator
node_result -->|"reads operand"| node_second
node_choice -->|"updates"| node_state
node_vault_init -->|"creates or authenticates"| node_vault_manager
node_vault_init -->|"updates"| node_state
node_vault_write -->|"decrypts vault"| node_vault_manager
node_vault_write -->|"rewrites"| node_vault_file
node_vault_read -->|"reads contents"| node_vault_manager
node_vault_settings -->|"exports or deletes"| node_vault_manager
node_vault_settings -->|"controls playback"| node_music
node_vault_settings -->|"updates"| node_state
node_vault_manager -->|"encrypts and decrypts"| node_vault_file
node_vault_manager -->|"uses crypto and DOCX"| node_libraries
node_music -->|"loads"| node_audio
node_music -->|"controls audio"| node_pygame
node_music -.->|"downloads missing track"| node_network

click node_main "https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/main.py"
click node_state "https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/state.py"
click node_first "https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/GAME/first.py"
click node_operator "https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/GAME/calc_operator.py"
click node_second "https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/GAME/second.py"
click node_result "https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/GAME/result.py"
click node_choice "https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/GAME/choice.py"
click node_exit "https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/GAME/exit.py"
click node_vault_init "https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/SECURE_VAULT/initialization.py"
click node_vault_menu "https://github.com/wjmmph/calculator/tree/main/CAlculator%20v1.04/SECURE_VAULT"
click node_vault_write "https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/SECURE_VAULT/write_new.py"
click node_vault_read "https://github.com/wjmmph/calculator/tree/main/CAlculator%20v1.04/SECURE_VAULT"
click node_vault_settings "https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/SECURE_VAULT/settings.py"
click node_vault_manager "https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/SECURE_VAULT/VaultManager.py"
click node_music "https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/SECURE_VAULT/initialization.py"
click node_audio "https://github.com/wjmmph/calculator/blob/main/ASSETS/Where_Winds_Meets.mp3"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_state,node_user toneBlue
class node_first,node_operator,node_second,node_result,node_choice,node_exit toneAmber
class node_vault_init,node_vault_menu,node_vault_write,node_vault_read,node_vault_settings,node_vault_manager,node_vault_file toneMint
class node_music,node_audio toneRose
class node_libraries,node_pygame,node_network toneIndigo
```

## Components

### Application flow

- [State dispatcher](https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/main.py): `CAlculator v1.04/main.py`
- [Shared state](https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/state.py): `CAlculator v1.04/state.py`

### Calculator

- [First number](https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/GAME/first.py): `CAlculator v1.04/GAME/first.py`
- [Operator input](https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/GAME/calc_operator.py): `CAlculator v1.04/GAME/calc_operator.py`
- [Second number](https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/GAME/second.py): `CAlculator v1.04/GAME/second.py`
- [Calculation result](https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/GAME/result.py): `CAlculator v1.04/GAME/result.py`
- [Continue choice](https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/GAME/choice.py): `CAlculator v1.04/GAME/choice.py`
- [Exit handler](https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/GAME/exit.py): `CAlculator v1.04/GAME/exit.py`

### Secure vault

- [Vault initialization](https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/SECURE_VAULT/initialization.py): `CAlculator v1.04/SECURE_VAULT/initialization.py`
- [Vault menu](https://github.com/wjmmph/calculator/tree/main/CAlculator%20v1.04/SECURE_VAULT): `CAlculator v1.04/SECURE_VAULT`
- [Append data](https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/SECURE_VAULT/write_new.py): `CAlculator v1.04/SECURE_VAULT/write_new.py`
- [Read data](https://github.com/wjmmph/calculator/tree/main/CAlculator%20v1.04/SECURE_VAULT): `CAlculator v1.04/SECURE_VAULT`
- [Vault settings](https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/SECURE_VAULT/settings.py): `CAlculator v1.04/SECURE_VAULT/settings.py`
- [Vault manager](https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/SECURE_VAULT/VaultManager.py): `CAlculator v1.04/SECURE_VAULT/VaultManager.py`
- **Encrypted vault**

### Music playback

- [Music player](https://github.com/wjmmph/calculator/blob/main/CAlculator%20v1.04/SECURE_VAULT/initialization.py): `CAlculator v1.04/SECURE_VAULT/initialization.py`
- [Audio asset](https://github.com/wjmmph/calculator/blob/main/ASSETS/Where_Winds_Meets.mp3): `ASSETS/Where_Winds_Meets.mp3`

### Other components

- **User**
- **Crypto and document libraries**
- **Pygame audio**
- **Internet**

## Connections

- User → State dispatcher: interacts
- State dispatcher → Shared state: reads state
- State dispatcher → First number: dispatches
- State dispatcher → Operator input: dispatches
- State dispatcher → Second number: dispatches
- State dispatcher → Calculation result: dispatches
- State dispatcher → Continue choice: dispatches
- State dispatcher → Exit handler: dispatches
- State dispatcher → Vault initialization: dispatches
- State dispatcher → Vault menu: dispatches
- State dispatcher → Append data: dispatches
- State dispatcher → Read data: dispatches
- State dispatcher → Vault settings: dispatches
- First number → Shared state: updates
- Operator input → Shared state: updates
- Second number → Shared state: updates
- Calculation result → Shared state: updates
- Calculation result → First number: reads operands
- Calculation result → Operator input: reads operator
- Calculation result → Second number: reads operand
- Continue choice → Shared state: updates
- Vault initialization → Vault manager: creates or authenticates
- Vault initialization → Shared state: updates
- Append data → Vault manager: decrypts vault
- Append data → Encrypted vault: rewrites
- Read data → Vault manager: reads contents
- Vault settings → Vault manager: exports or deletes
- Vault settings → Music player: controls playback
- Vault settings → Shared state: updates
- Vault manager → Encrypted vault: encrypts and decrypts
- Vault manager → Crypto and document libraries: uses crypto and DOCX
- Music player → Audio asset: loads
- Music player → Pygame audio: controls audio
- Music player → Internet: downloads missing track
