commit 235be506f858d91332e4d699dc05d92e68dd026c Author: HelloWorld <345980191@qq.com> Date: Sat Nov 29 20:12:10 2025 +0800 添加 demo diff --git a/demo b/demo new file mode 100644 index 0000000..54b168f --- /dev/null +++ b/demo @@ -0,0 +1,265 @@ +/* ------------------------------------------------------------------------------------------ */ +#include +#include +/* ------------------------------------------------------------------------------------------ */ +#define FAILED 1 +#define SUCCEED 0 +/* ------------------------------------------------------------------------------------------ */ +#define LOCATION_NUM 460 + +struct location { + __uint16_t width; + __uint16_t height; +}; + +struct location_table { + __uint16_t location_num; + struct location *location_table; +}; + + +#define STATION_NAME_NUM 124 + +struct station_name_table { + __uint8_t station_name_num; + __uint8_t **station_name_table; +}; + +#define LINE_NUM 6 + +struct station_id { + __uint16_t line_id: 3; + __uint16_t station_id: 6; + __uint16_t head_station_tag: 1; + __uint16_t tail_station_tag: 1; + __uint16_t transfer_station_tag: 1; + __uint16_t transfer_station_id: 4; +}; + +struct station { + struct station_id station_id; + __uint8_t station_name_id; + __uint32_t location_id; +}; + +struct station_table { + __uint8_t station_num; + struct station *station_table; +}; + +struct tstation { + struct station_id station_id; + __uint8_t near_tstation_num; + __uint8_t near_tstation_index[4]; + __uint8_t near_tstation_station_num[4]; +}; + +struct tstation_table { + __uint8_t tstation_num; + struct tstation *tstation_table; +}; + +/* ------------------------------------------------------------------------------------------ */ +__uint8_t init_location_table(struct location_table *location_table) { + + location_table -> location_num = LOCATION_NUM; + location_table -> location_table = (struct location *) malloc (sizeof(struct location) * LOCATION_NUM); + + /* ----- Open location.way file ----- */ + FILE *fp = NULL; + + /* ----- Read location.way ----- */ + if ((fp = fopen("../lib/location.way", "r")) == NULL) { + printf(" [ Console ]: Cannot open file location.way\n"); + return FAILED; + } + + __uint16_t tmp_width, tmp_height; + + for (__uint16_t location_table_index = 0; location_table_index < LOCATION_NUM; ++location_table_index) { + tmp_width = tmp_height = 0; + fgetc(fp); + for (__uint8_t width_ch_index = 0; width_ch_index < 5; ++width_ch_index) { + tmp_width = tmp_width * 10 + (fgetc(fp) - '0'); + } + fgetc(fp); + fgetc(fp); + fgetc(fp); + for (__uint8_t height_ch_index = 0; height_ch_index < 5; ++height_ch_index) { + tmp_height = tmp_height * 10 + (fgetc(fp) - '0'); + } + fgetc(fp); + fgetc(fp); + ((location_table -> location_table) + location_table_index) -> width = tmp_width; + ((location_table -> location_table) + location_table_index) -> height = tmp_height; + } + + fclose(fp); + + printf(" [ Console ]: Initialize location_table successfully\n"); + + return SUCCEED; +} + +__uint8_t init_station_name_table(struct station_name_table *station_name_table) { + + /* ----- Open station_name.way file ----- */ + FILE *fp = NULL; + + /* ----- Read station_name.way ----- */ + if ((fp = fopen("../lib/station_name.way", "r")) == NULL) { + printf(" [ Console ]: Cannot open file station_name.way\n"); + return FAILED; + } + + station_name_table -> station_name_num = STATION_NAME_NUM; + station_name_table -> station_name_table = (__uint8_t **) malloc (sizeof(__uint8_t *) * STATION_NAME_NUM); + + for (__uint8_t station_name_index1 = 0, station_name_index2, *station_name, station_name_len; station_name_index1 < STATION_NAME_NUM; ++station_name_index1) { + + fgetc(fp); + station_name_len = (fgetc(fp) - '0') * 10 + (fgetc(fp) - '0'); + fgetc(fp); + fgetc(fp); + fgetc(fp); + station_name = *((station_name_table -> station_name_table) + station_name_index1) = (__uint8_t *) malloc (sizeof(__uint8_t) * station_name_len); + for (station_name_index2 = 0; station_name_index2 < station_name_len; ++station_name_index2) { + *(station_name + station_name_index2) = fgetc(fp); + } + *(station_name + station_name_len - 1) = '\000'; + fgetc(fp); + } + + fclose(fp); + + printf(" [ Console ]: Initialize station_name_table successfully\n"); + + return SUCCEED; +} + +__uint8_t init_station_table(struct station_table *station_table) { + + /* ----- Open station_id.way file ----- */ + FILE *fp = NULL; + + /* ----- Read station_id.way ----- */ + if ((fp = fopen("../lib/station_id.way", "r")) == NULL) { + printf(" [ Console ]: Cannot open file station_id.way\n"); + return FAILED; + } + + + + + __uint8_t station_num; + + for (__uint8_t ch_index = 0; ch_index < 15; ++ch_index) fgetc(fp); + + station_num = station_table -> station_num = ((fgetc(fp) - '0') * 10) + (fgetc(fp) - '0'); + station_table -> station_table = (struct station *) malloc (sizeof(struct station) * station_num); + + fgetc(fp); + fgetc(fp); + + for (__uint8_t station_index = 0; station_index < station_num; ++station_index) { + + /* ----- line_id ----- */ + for (__uint8_t ch_index = 0; ch_index < 11; ++ch_index) fgetc(fp); + ((station_table -> station_table) + station_index) -> station_id.line_id = fgetc(fp) - '0'; + + /* ----- station_id ----- */ + for (__uint8_t ch_index = 0; ch_index < 16; ++ch_index) fgetc(fp); + ((station_table -> station_table) + station_index) -> station_id.station_id = (fgetc(fp) - '0') * 10 + (fgetc(fp) - '0'); + + /* ----- head_station_tag ----- */ + for (__uint8_t ch_index = 0; ch_index < 22; ++ch_index) fgetc(fp); + ((station_table -> station_table) + station_index) -> station_id.head_station_tag = (fgetc(fp) - '0'); + + /* ----- tail_station_tag ----- */ + for (__uint8_t ch_index = 0; ch_index < 22; ++ch_index) fgetc(fp); + ((station_table -> station_table) + station_index) -> station_id.tail_station_tag = (fgetc(fp) - '0'); + + /* ----- transfer_station_tag ----- */ + for (__uint8_t ch_index = 0; ch_index < 26; ++ch_index) fgetc(fp); + ((station_table -> station_table) + station_index) -> station_id.transfer_station_tag = (fgetc(fp) - '0'); + + /* ----- transfer_station_id ----- */ + for (__uint8_t ch_index = 0; ch_index < 25; ++ch_index) fgetc(fp); + ((station_table -> station_table) + station_index) -> station_id.transfer_station_id = (fgetc(fp) - '0') * 10 + (fgetc(fp) - '0'); + + /* ----- station_name_id ----- */ + for (__uint8_t ch_index = 0; ch_index < 21; ++ch_index) fgetc(fp); + ((station_table -> station_table) + station_index) -> station_name_id = (fgetc(fp) - '0') * 100 + (fgetc(fp) - '0') * 10 + (fgetc(fp) - '0'); + + /* ----- location_id ----- */ + for (__uint8_t ch_index = 0; ch_index < 17; ++ch_index) fgetc(fp); + ((station_table -> station_table) + station_index) -> location_id = (fgetc(fp) - '0') * 100 + (fgetc(fp) - '0') * 10 + (fgetc(fp) - '0'); + + fgetc(fp); + fgetc(fp); + } + + + + + + + + for (__uint8_t station_index = 0; station_index < station_num; ++station_index) { + + printf("line_id:%d,", ((station_table -> station_table) + station_index) -> station_id.line_id); + printf("station_id:%d,", ((station_table -> station_table) + station_index) -> station_id.station_id); + printf("head_station_tag:%d,", ((station_table -> station_table) + station_index) -> station_id.head_station_tag); + + /* ----- head_station_tag ----- */ + for (__uint8_t ch_index = 0; ch_index < 22; ++ch_index) fgetc(fp); + ((station_table -> station_table) + station_index) -> station_id.head_station_tag = (fgetc(fp) - '0'); + + /* ----- tail_station_tag ----- */ + for (__uint8_t ch_index = 0; ch_index < 22; ++ch_index) fgetc(fp); + ((station_table -> station_table) + station_index) -> station_id.tail_station_tag = (fgetc(fp) - '0'); + + /* ----- transfer_station_tag ----- */ + for (__uint8_t ch_index = 0; ch_index < 26; ++ch_index) fgetc(fp); + ((station_table -> station_table) + station_index) -> station_id.transfer_station_tag = (fgetc(fp) - '0'); + + /* ----- transfer_station_id ----- */ + for (__uint8_t ch_index = 0; ch_index < 25; ++ch_index) fgetc(fp); + ((station_table -> station_table) + station_index) -> station_id.transfer_station_id = (fgetc(fp) - '0') * 10 + (fgetc(fp) - '0'); + + /* ----- station_name_id ----- */ + for (__uint8_t ch_index = 0; ch_index < 21; ++ch_index) fgetc(fp); + ((station_table -> station_table) + station_index) -> station_name_id = (fgetc(fp) - '0') * 100 + (fgetc(fp) - '0') * 10 + (fgetc(fp) - '0'); + + /* ----- location_id ----- */ + for (__uint8_t ch_index = 0; ch_index < 17; ++ch_index) fgetc(fp); + ((station_table -> station_table) + station_index) -> location_id = (fgetc(fp) - '0') * 100 + (fgetc(fp) - '0') * 10 + (fgetc(fp) - '0'); + + fgetc(fp); + fgetc(fp); + } + + + + + + fclose(fp); + + return SUCCEED; +} + + +int main(int argc, char **argv) { + + struct location_table location_table; + struct station_name_table station_name_table; + struct station_table line_01_station_table; + + + init_location_table(&location_table); + init_station_name_table(&station_name_table); + init_station_table(&line_01_station_table); + + + return 0; +} \ No newline at end of file