Use a C switch to route one command into a scalar result.

Dispatcher Branch Panel

mode
dispatcher_branch_panel.c
Replay: real traced execution (multi-file project)
#include <stdio.h>

int main(void) {
    int mode = 1;
    const char *message = "unknown";
    int status = 0;

    switch (mode) {
    case 0:
        message = "handled:refresh";
        status = 1;
        break;
    case 1:
        message = "handled:status";
        status = 0;
        break;
    case 2:
        message = "handled:delete";
        status = 2;
        break;
    default:
        status = -1;
        break;
    }

    printf("mode=%d\n", mode);
    printf("status=%d\n", status);
    printf("%s\n", message);
    return 0;
}
#include <stdio.h>

int main(void) {
    int mode = 0;
    const char *message = "unknown";
    int status = 0;

    switch (mode) {
    case 0:
        message = "handled:refresh";
        status = 1;
        break;
    case 1:
        message = "handled:status";
        status = 0;
        break;
    case 2:
        message = "handled:delete";
        status = 2;
        break;
    default:
        status = -1;
        break;
    }

    printf("mode=%d\n", mode);
    printf("status=%d\n", status);
    printf("%s\n", message);
    return 0;
}
#include <stdio.h>

int main(void) {
    int mode = 2;
    const char *message = "unknown";
    int status = 0;

    switch (mode) {
    case 0:
        message = "handled:refresh";
        status = 1;
        break;
    case 1:
        message = "handled:status";
        status = 0;
        break;
    case 2:
        message = "handled:delete";
        status = 2;
        break;
    default:
        status = -1;
        break;
    }

    printf("mode=%d\n", mode);
    printf("status=%d\n", status);
    printf("%s\n", message);
    return 0;
}
  1. mode ← 1, message ← unknown, status ← 0

    3int main(void) {4    int mode→ 1 = 1; //@mode=0, 25    const char *message→ unknown = "unknown";6    int status→ 0 = 0;
  2. switch (mode)

    8switch (mode1) {9case 0:
  3. message ← handled:status

    12    break;13case 1:14    message→ handled:status = "handled:status";15    status = 0;
  4. status = 0;

    13case 1:14    message = "handled:status";15    status0 = 0;16    break;17case 2:
  5. printf("mode=%d ", mode);

    26    printf("mode=%d\n", mode1);27    printf("status=%d\n", status0);28    printf("%s\n", messagehandled:status);29    return 0;30}
    outputmode=1
    status=0
    handled:status
  1. mode ← 0, message ← unknown, status ← 0

    3int main(void) {4    int mode→ 0 = 0;5    const char *message→ unknown = "unknown";6    int status→ 0 = 0;
  2. switch (mode)

    8switch (mode0) {9case 0:
  3. message ← handled:refresh

    8switch (mode) {9case 0:10    message→ handled:refresh = "handled:refresh";11    status = 1;
  4. status ← 1

    9case 0:10    message = "handled:refresh";11    status→ 1 = 1;12    break;13case 1:
  5. printf("mode=%d ", mode);

    26    printf("mode=%d\n", mode0);27    printf("status=%d\n", status1);28    printf("%s\n", messagehandled:refresh);29    return 0;30}
    outputmode=0
    status=1
    handled:refresh
  1. mode ← 2, message ← unknown, status ← 0

    3int main(void) {4    int mode→ 2 = 2;5    const char *message→ unknown = "unknown";6    int status→ 0 = 0;
  2. switch (mode)

    8switch (mode2) {9case 0:
  3. message ← handled:delete

    16    break;17case 2:18    message→ handled:delete = "handled:delete";19    status = 2;
  4. status ← 2

    17case 2:18    message = "handled:delete";19    status→ 2 = 2;20    break;21default:
  5. printf("mode=%d ", mode);

    26    printf("mode=%d\n", mode2);27    printf("status=%d\n", status2);28    printf("%s\n", messagehandled:delete);29    return 0;30}
    outputmode=2
    status=2
    handled:delete
dispatcher A dispatcher turns a compact command code into one explicit branch of work.