124 lines
3 KiB
C
124 lines
3 KiB
C
|
/***************************************************************************
|
||
|
* __________ __ ___.
|
||
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||
|
* \/ \/ \/ \/ \/
|
||
|
*
|
||
|
* Copyright (C) 2014 by Marcin Bukat
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or
|
||
|
* modify it under the terms of the GNU General Public License
|
||
|
* as published by the Free Software Foundation; either version 2
|
||
|
* of the License, or (at your option) any later version.
|
||
|
*
|
||
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||
|
* KIND, either express or implied.
|
||
|
*
|
||
|
****************************************************************************/
|
||
|
|
||
|
#include <stdint.h>
|
||
|
|
||
|
#define RKLD_MAGIC 0x4C44524B
|
||
|
#define RKRS_MAGIC 0x53524B52
|
||
|
#define RKST_MAGIC 0X53544B52
|
||
|
|
||
|
enum section_type_t {
|
||
|
ST_RKLD,
|
||
|
ST_RKRS,
|
||
|
ST_RKST
|
||
|
};
|
||
|
|
||
|
enum rkst_action_t {
|
||
|
act_null = 0,
|
||
|
act_mkdir = 1,
|
||
|
act_fcopy = 2,
|
||
|
act_fsoper = 3,
|
||
|
act_format = 4,
|
||
|
act_loader = 5,
|
||
|
|
||
|
act_dispbmp = 10,
|
||
|
act_dispstr = 11,
|
||
|
act_setfont = 12,
|
||
|
|
||
|
act_delay = 20,
|
||
|
|
||
|
act_system = 100,
|
||
|
act_uilogo = 100,
|
||
|
act_readme = 101,
|
||
|
act_copyright = 102,
|
||
|
act_select = 103,
|
||
|
act_restart = 104,
|
||
|
|
||
|
act_regkey = 120,
|
||
|
act_version = 121,
|
||
|
|
||
|
act_freplace = 130,
|
||
|
act_fpreplace = 131,
|
||
|
act_fsdel = 132,
|
||
|
|
||
|
act_space = 200,
|
||
|
|
||
|
act_addfile = 300,
|
||
|
|
||
|
act_setmem = 1000,
|
||
|
act_getmem = 1001,
|
||
|
};
|
||
|
|
||
|
struct section_header_t {
|
||
|
uint32_t size;
|
||
|
uint32_t magic;
|
||
|
uint32_t property;
|
||
|
uint32_t timestamp;
|
||
|
uint32_t allign;
|
||
|
uint32_t file_size;
|
||
|
uint16_t size_of_name_dir;
|
||
|
uint16_t size_of_id_dir;
|
||
|
uint16_t number_of_named_entries;
|
||
|
uint16_t number_of_id_entries;
|
||
|
uint32_t offset_of_named_entries;
|
||
|
uint32_t offset_of_id_entries;
|
||
|
} __attribute__((__packed__));
|
||
|
|
||
|
struct rkrs_named_t {
|
||
|
uint32_t size;
|
||
|
uint32_t type;
|
||
|
uint32_t data_offset;
|
||
|
uint32_t data_size;
|
||
|
uint32_t param[4];
|
||
|
} __attribute__((__packed__));
|
||
|
|
||
|
struct rkst_named_t {
|
||
|
uint32_t size;
|
||
|
uint32_t action;
|
||
|
uint32_t data_offset;
|
||
|
uint32_t data_size;
|
||
|
uint8_t name;
|
||
|
};
|
||
|
|
||
|
struct section_info_t {
|
||
|
char *header;
|
||
|
char *items;
|
||
|
};
|
||
|
|
||
|
struct rkw_info_t {
|
||
|
char *rkw;
|
||
|
long size;
|
||
|
struct section_info_t rkrs_info;
|
||
|
struct section_info_t rkst_info;
|
||
|
};
|
||
|
|
||
|
/* general functions */
|
||
|
struct rkw_info_t *rkw_slurp(char *filename);
|
||
|
void rkw_free(struct rkw_info_t *rkw_info);
|
||
|
|
||
|
/* info functions */
|
||
|
void rkrs_list_named_items(struct rkw_info_t *rkw_info);
|
||
|
void rkst_list_named_items(struct rkw_info_t *rkw_info);
|
||
|
|
||
|
/* extract functions */
|
||
|
void unpack_bootloader(struct rkw_info_t *rkw_info, char *prefix);
|
||
|
void unpack_rkst(struct rkw_info_t *rkw_info, char *prefix);
|
||
|
void unpack_addfile(struct rkw_info_t *rkw_info, char *prefix);
|