diff --git a/README.md b/README.md index 6900745..79ce0ec 100644 --- a/README.md +++ b/README.md @@ -426,7 +426,7 @@ make clean ## ❤️ 致谢 感谢各个镜像站提供的优质免费镜像服务 -1. [source.h](./include/source.h) 包含了通用的镜像站信息 +1. [mirror.c](./src/framework/mirror.c) 包含了通用的镜像站信息 2. 各个recipe内部定义的专用镜像站 另外特别感谢以下组织或项目: diff --git a/src/chsrc-main.c b/src/chsrc-main.c index 22bc045..e4487d1 100644 --- a/src/chsrc-main.c +++ b/src/chsrc-main.c @@ -30,7 +30,7 @@ #define Chsrc_Maintain_URL "https://github.com/RubyMetric/chsrc" #define Chsrc_Maintain_URL2 "https://gitee.com/RubyMetric/chsrc" -#include "chsrc-framework.h" +#include "framework/core.c" #include "recipe/lang/Ruby.c" diff --git a/src/chsrc-framework.h b/src/framework/core.c similarity index 99% rename from src/chsrc-framework.h rename to src/framework/core.c index 05df5cf..247988f 100644 --- a/src/chsrc-framework.h +++ b/src/framework/core.c @@ -1,7 +1,7 @@ /** ------------------------------------------------------------ * SPDX-License-Identifier: GPL-3.0-or-later * ------------------------------------------------------------- - * File Name : chsrc-framework.h + * File Name : core.h * File Authors : Aoran Zeng * | Heng Guo <2085471348@qq.com> * Contributors : Peng Gao @@ -14,8 +14,8 @@ * ------------------------------------------------------------*/ #include "xy.h" -#include "source.h" -// #include +#include "struct.h" +#include "mirror.c" #define App_Name "chsrc" diff --git a/include/source.h b/src/framework/mirror.c similarity index 67% rename from include/source.h rename to src/framework/mirror.c index 05cca76..89483cf 100644 --- a/include/source.h +++ b/src/framework/mirror.c @@ -1,6 +1,7 @@ /** ------------------------------------------------------------ * SPDX-License-Identifier: GPL-3.0-or-later * ------------------------------------------------------------- + * File Name : mirror.c * File Authors : Aoran Zeng * | Heng Guo <2085471348@qq.com> * Contributors : Shengwei Chen <414685209@qq.com> @@ -8,39 +9,14 @@ * Created On : <2023-08-29> * Last Modified : <2024-11-21> * - * 通用镜像站与换源信息 + * 通用镜像站 * ------------------------------------------------------------*/ -typedef struct SpeedMeasureInfo_t -{ - bool skip; /* 是否默认跳过 */ - const char *skip_reason_CN; /* 跳过的原因(中文)*/ - const char *skip_reason_EN; /* 跳过的原因(英文)*/ - const char *url; /* 测速链接 */ -} -SpeedMeasureInfo; - -#define SKIP true -#define NotSkip false -#define ToFill NULL -#define NA NULL - -typedef struct MirrorSite_t -{ - const char *code; /* 用于用户指定镜像站 */ - const char *abbr; /* 需要使用镜像站的英文名时,用这个代替,因为大部分镜像站没有提供正式的英文名 */ - const char *name; /* 镜像站中文名 */ - const char *site; /* 镜像站首页 */ - SpeedMeasureInfo smi; -} -MirrorSite; - #define Big_File_ubuntu "/24.04/ubuntu-24.04.1-desktop-amd64.iso" // 5.8 GB #define Big_File_ctan "/systems/texlive/Images/texlive.iso" // 4.8 GB #define Big_File_archlinux "/iso/latest/archlinux-x86_64.iso" // 800 MB #define Big_File_deepin "/20.9/deepin-desktop-community-20.9-amd64.iso" // 4 GB - /** * 教育网镜像 * @@ -208,76 +184,3 @@ UserDefine = { "user", "用户自定义", "用户自定义", NULL, {SKIP, "用户自定义源不测速", "SKIP for user-defined source", NULL} }; - - -typedef struct SourceInfo_t -{ - const MirrorSite *mirror; - const char *url; -} -SourceInfo; - -#define def_sources_n(t) const size_t t##_sources_n = xy_arylen(t##_sources) - -enum Capability -{ - CanNot, - FullyCan, - PartiallyCan -}; - - -/* Target Feature Info */ -typedef struct FeatInfo_t -{ - bool can_get; - bool can_reset; /* 有的reset不是暂时没有实现,而是现在的实现根本就无法重置 */ - - bool can_english; - - bool can_user_define; /* 用户自定义换源URL */ - - enum Capability cap_locally; - char *cap_locally_explain; - - char *note; -} -FeatInfo; - - -/* Target Info */ -typedef struct TargetInfo_t -{ - void (*getfn) (char *option); - void (*setfn) (char *option); - void (*resetfn) (char *option); - - FeatInfo (*featfn) (char *option); - - SourceInfo *sources; - size_t sources_n; -} -TargetInfo; - - -#define def_target_inner_s(t) NULL, t##_setsrc, NULL, NULL -#define def_target_inner_sr(t) NULL, t##_setsrc, t##_resetsrc, NULL -#define def_target_inner_sf(t) NULL, t##_setsrc, NULL, t##_feat -#define def_target_inner_srf(t) NULL, t##_setsrc, t##_resetsrc, t##_feat -#define def_target_inner_gs(t) t##_getsrc, t##_setsrc, NULL, NULL -#define def_target_inner_gsr(t) t##_getsrc, t##_setsrc, t##_resetsrc, NULL -#define def_target_inner_gsf(t) t##_getsrc, t##_setsrc, NULL, t##_feat -#define def_target_inner_gsrf(t) t##_getsrc, t##_setsrc, t##_resetsrc, t##_feat - -#define def_target_sourcesn(t) t##_sources, t##_sources_n - -// 大部分target还不支持reset,所以暂时先默认设置为NULL来过渡 -#define def_target(t) TargetInfo t##_target = {def_target_inner_gs(t),def_target_sourcesn(t)} -#define def_target_s(t) TargetInfo t##_target = {def_target_inner_s(t),def_target_sourcesn(t)} -#define def_target_sr(t) TargetInfo t##_target = {def_target_inner_sr(t),def_target_sourcesn(t)} -#define def_target_sf(t) TargetInfo t##_target = {def_target_inner_sf(t),def_target_sourcesn(t)} -#define def_target_srf(t) TargetInfo t##_target = {def_target_inner_srf(t),def_target_sourcesn(t)} -#define def_target_gs(t) TargetInfo t##_target = {def_target_inner_gs(t),def_target_sourcesn(t)} -#define def_target_gsr(t) TargetInfo t##_target = {def_target_inner_gsr(t),def_target_sourcesn(t)} -#define def_target_gsf(t) TargetInfo t##_target = {def_target_inner_gsf(t),def_target_sourcesn(t)} -#define def_target_gsrf(t) TargetInfo t##_target = {def_target_inner_gsrf(t),def_target_sourcesn(t)} diff --git a/src/framework/struct.h b/src/framework/struct.h new file mode 100644 index 0000000..4befd0c --- /dev/null +++ b/src/framework/struct.h @@ -0,0 +1,110 @@ +/** ------------------------------------------------------------ + * SPDX-License-Identifier: GPL-3.0-or-later + * ------------------------------------------------------------- + * File Name : struct.h + * File Authors : Aoran Zeng + * | Heng Guo <2085471348@qq.com> + * Contributors : Shengwei Chen <414685209@qq.com> + * | + * Created On : <2023-08-29> + * Last Modified : <2024-11-21> + * + * chsrc struct + * ------------------------------------------------------------*/ + +typedef struct SpeedMeasureInfo_t +{ + bool skip; /* 是否默认跳过 */ + const char *skip_reason_CN; /* 跳过的原因(中文)*/ + const char *skip_reason_EN; /* 跳过的原因(英文)*/ + const char *url; /* 测速链接 */ +} +SpeedMeasureInfo; + +#define SKIP true +#define NotSkip false +#define ToFill NULL +#define NA NULL + +typedef struct MirrorSite_t +{ + const char *code; /* 用于用户指定镜像站 */ + const char *abbr; /* 需要使用镜像站的英文名时,用这个代替,因为大部分镜像站没有提供正式的英文名 */ + const char *name; /* 镜像站中文名 */ + const char *site; /* 镜像站首页 */ + SpeedMeasureInfo smi; +} +MirrorSite; + + +typedef struct SourceInfo_t +{ + const MirrorSite *mirror; + const char *url; +} +SourceInfo; + +#define def_sources_n(t) const size_t t##_sources_n = xy_arylen(t##_sources) + +enum Capability +{ + CanNot, + FullyCan, + PartiallyCan +}; + + +/* Target Feature Info */ +typedef struct FeatInfo_t +{ + bool can_get; + bool can_reset; /* 有的reset不是暂时没有实现,而是现在的实现根本就无法重置 */ + + bool can_english; + + bool can_user_define; /* 用户自定义换源URL */ + + enum Capability cap_locally; + char *cap_locally_explain; + + char *note; +} +FeatInfo; + + +/* Target Info */ +typedef struct TargetInfo_t +{ + void (*getfn) (char *option); + void (*setfn) (char *option); + void (*resetfn) (char *option); + + FeatInfo (*featfn) (char *option); + + SourceInfo *sources; + size_t sources_n; +} +TargetInfo; + + +#define def_target_inner_s(t) NULL, t##_setsrc, NULL, NULL +#define def_target_inner_sr(t) NULL, t##_setsrc, t##_resetsrc, NULL +#define def_target_inner_sf(t) NULL, t##_setsrc, NULL, t##_feat +#define def_target_inner_srf(t) NULL, t##_setsrc, t##_resetsrc, t##_feat +#define def_target_inner_gs(t) t##_getsrc, t##_setsrc, NULL, NULL +#define def_target_inner_gsr(t) t##_getsrc, t##_setsrc, t##_resetsrc, NULL +#define def_target_inner_gsf(t) t##_getsrc, t##_setsrc, NULL, t##_feat +#define def_target_inner_gsrf(t) t##_getsrc, t##_setsrc, t##_resetsrc, t##_feat + +#define def_target_sourcesn(t) t##_sources, t##_sources_n + +// 大部分target还不支持reset,所以暂时先默认设置为NULL来过渡 +#define def_target(t) TargetInfo t##_target = {def_target_inner_gs(t),def_target_sourcesn(t)} +#define def_target_s(t) TargetInfo t##_target = {def_target_inner_s(t),def_target_sourcesn(t)} +#define def_target_sr(t) TargetInfo t##_target = {def_target_inner_sr(t),def_target_sourcesn(t)} +#define def_target_sf(t) TargetInfo t##_target = {def_target_inner_sf(t),def_target_sourcesn(t)} +#define def_target_srf(t) TargetInfo t##_target = {def_target_inner_srf(t),def_target_sourcesn(t)} +#define def_target_gs(t) TargetInfo t##_target = {def_target_inner_gs(t),def_target_sourcesn(t)} +#define def_target_gsr(t) TargetInfo t##_target = {def_target_inner_gsr(t),def_target_sourcesn(t)} +#define def_target_gsf(t) TargetInfo t##_target = {def_target_inner_gsf(t),def_target_sourcesn(t)} +#define def_target_gsrf(t) TargetInfo t##_target = {def_target_inner_gsrf(t),def_target_sourcesn(t)}