aboutsummaryrefslogtreecommitdiff
path: root/zebra.h
blob: 2f249397479162dffc1e35a393ab4f294e65bec6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#ifndef ZEBRA_H
#define ZEBRA_H

#include <stdio.h> /* for FILE */
#include <stdlib.h> /* for size_t */
#include <stdint.h> /* for uint8_t, etc. */

extern char zebra_err[256];

#define ZEBRA_SIG0 0x0123cdefUL
#define ZEBRA_SIG1 0x80708070UL
#define ZEBRA_SIG2 0x4321abcdUL
#define ZEBRA_SIG3 0x80618061UL

#define ZEBRA_BLOCK_SIZE_MASK 0x00ffffffUL
#define ZEBRA_EMERGENCY_STOP  0x80000000UL
#define ZEBRA_END_OF_RUN      0x20000000UL
#define ZEBRA_START_OF_RUN    0x40000000UL

typedef struct bank {
    uint32_t next;
    uint32_t up;
    uint32_t orig;
    uint32_t number;
    uint32_t name;
    uint32_t num_links;
    uint32_t num_structural_links;
    uint32_t num_data_words;
    uint32_t status;
    uint32_t *data;
} bank;

typedef struct zebraFile {
    FILE *f;
    size_t offset;
    size_t lr_size;
    uint8_t *buf;
    size_t buf_size;
} zebraFile;

zebraFile *zebra_open(const char *filename);
int read_next_physical_record(zebraFile *z);
int get_bytes(zebraFile *z, size_t size);
int read_next_logical_record(zebraFile *z);
int next_bank(zebraFile *z, bank *b);
void zebra_close(zebraFile *z);

#endif