# botkalista/win-mikai architecture

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

- Interactive diagram: https://gitdiagram.com/botkalista/win-mikai
- Repository: https://github.com/botkalista/win-mikai

## Overview

win-mikai is a Windows command-line tool for checking a Mikai reader and reading or changing credit on a key. Its main workflow parses an action, uses the Mikai API to detect and initialize a reader/key, then reads credit or applies a dated add/set operation and writes changes back. The headers document additional key-management operations, but their implementations and internal call paths are not present in the sampled source, so they are not expanded here.

Main entry points: [`winmikai.cpp`](https://github.com/botkalista/win-mikai/blob/main/winmikai.cpp) (Action dispatch), [`include/mikai/mikai.h`](https://github.com/botkalista/win-mikai/blob/main/include/mikai/mikai.h) (Key API), [`include/mikai/mikai-reader.h`](https://github.com/botkalista/win-mikai/blob/main/include/mikai/mikai-reader.h) (Reader API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_cli["Command line"]
  node_cli["Action dispatch<br/>[winmikai.cpp]"]
  node_date["Date helper<br/>[winmikai.cpp]"]
end

subgraph group_workflow["Credit workflow"]
  node_init["Reader initialization<br/>[winmikai.cpp]"]
  node_write["Write helper<br/>[winmikai.cpp]"]
  node_creditread["Read credit<br/>[winmikai.cpp]"]
  node_creditadd["Add credit<br/>[winmikai.cpp]"]
  node_creditset["Set credit<br/>[winmikai.cpp]"]
end

subgraph group_api["Mikai API"]
  node_readerapi["Reader API<br/>[mikai-reader.h]"]
  node_keyapi["Key API<br/>[mikai.h]"]
end

node_user(("Operator"))
node_reader{{"Mikai reader"}}
node_key{{"Mikai key"}}

node_user -->|"invokes"| node_cli
node_cli -->|"checks readers"| node_readerapi
node_cli -->|"initializes for action"| node_init
node_init -->|"counts readers"| node_readerapi
node_init -->|"initializes key"| node_keyapi
node_readerapi -->|"accesses"| node_reader
node_keyapi -->|"accesses"| node_key
node_cli -->|"dispatches read"| node_creditread
node_creditread -->|"gets credit"| node_keyapi
node_cli -->|"dispatches add"| node_creditadd
node_creditadd -->|"gets date"| node_date
node_creditadd -->|"adds dated credit"| node_keyapi
node_cli -->|"dispatches set"| node_creditset
node_creditset -->|"gets date"| node_date
node_creditset -->|"sets dated credit"| node_keyapi
node_creditadd -->|"on success"| node_write
node_creditset -->|"on success"| node_write
node_write -->|"writes modified blocks"| node_readerapi

click node_cli "https://github.com/botkalista/win-mikai/blob/main/winmikai.cpp"
click node_date "https://github.com/botkalista/win-mikai/blob/main/winmikai.cpp"
click node_init "https://github.com/botkalista/win-mikai/blob/main/winmikai.cpp"
click node_write "https://github.com/botkalista/win-mikai/blob/main/winmikai.cpp"
click node_readerapi "https://github.com/botkalista/win-mikai/blob/main/include/mikai/mikai-reader.h"
click node_keyapi "https://github.com/botkalista/win-mikai/blob/main/include/mikai/mikai.h"
click node_creditread "https://github.com/botkalista/win-mikai/blob/main/winmikai.cpp"
click node_creditadd "https://github.com/botkalista/win-mikai/blob/main/winmikai.cpp"
click node_creditset "https://github.com/botkalista/win-mikai/blob/main/winmikai.cpp"

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_cli,node_date toneBlue
class node_init,node_write,node_creditread,node_creditadd,node_creditset toneAmber
class node_readerapi,node_keyapi toneMint
class node_user,node_reader,node_key toneIndigo
```

## Components

### Command line

- [Action dispatch](https://github.com/botkalista/win-mikai/blob/main/winmikai.cpp): `winmikai.cpp`
- [Date helper](https://github.com/botkalista/win-mikai/blob/main/winmikai.cpp): `winmikai.cpp`

### Credit workflow

- [Reader initialization](https://github.com/botkalista/win-mikai/blob/main/winmikai.cpp): `winmikai.cpp`
- [Write helper](https://github.com/botkalista/win-mikai/blob/main/winmikai.cpp): `winmikai.cpp`
- [Read credit](https://github.com/botkalista/win-mikai/blob/main/winmikai.cpp): `winmikai.cpp`
- [Add credit](https://github.com/botkalista/win-mikai/blob/main/winmikai.cpp): `winmikai.cpp`
- [Set credit](https://github.com/botkalista/win-mikai/blob/main/winmikai.cpp): `winmikai.cpp`

### Mikai API

- [Reader API](https://github.com/botkalista/win-mikai/blob/main/include/mikai/mikai-reader.h): `include/mikai/mikai-reader.h`
- [Key API](https://github.com/botkalista/win-mikai/blob/main/include/mikai/mikai.h): `include/mikai/mikai.h`

### Other components

- **Operator**
- **Mikai reader**
- **Mikai key**

## Connections

- Operator → Action dispatch: invokes
- Action dispatch → Reader API: checks readers
- Action dispatch → Reader initialization: initializes for action
- Reader initialization → Reader API: counts readers
- Reader initialization → Key API: initializes key
- Reader API → Mikai reader: accesses
- Key API → Mikai key: accesses
- Action dispatch → Read credit: dispatches read
- Read credit → Key API: gets credit
- Action dispatch → Add credit: dispatches add
- Add credit → Date helper: gets date
- Add credit → Key API: adds dated credit
- Action dispatch → Set credit: dispatches set
- Set credit → Date helper: gets date
- Set credit → Key API: sets dated credit
- Add credit → Write helper: on success
- Set credit → Write helper: on success
- Write helper → Reader API: writes modified blocks
