@@ -164,7 +164,7 @@ iterate_aliases (const char *aliases, bool (*callback)(const char *alias, void *
164164
165165
166166/**
167- * 用于 cli_print_supported_targets_ 的回调函数,打印每个别名
167+ * 用于 cli_print_targets_for_menu 的回调函数,打印每个别名
168168 */
169169bool
170170callback_print_alias (const char * alias , void * user_data )
@@ -174,17 +174,18 @@ callback_print_alias (const char *alias, void *user_data)
174174}
175175
176176void
177- cli_print_supported_targets_ ( TargetRegisterInfo_t menu [], size_t size )
177+ callback_print_targets ( void * data )
178178{
179- for (int i = 0 ; i < size ; i ++ )
180- {
181- TargetRegisterInfo_t * entry = & menu [i ];
182-
183- // 使用通用的别名遍历函数打印所有别名
184- iterate_aliases (entry -> target -> aliases , callback_print_alias , NULL );
179+ Target_t * target = (Target_t * ) data ;
180+ // 使用通用的别名遍历函数打印所有别名
181+ iterate_aliases (target -> aliases , callback_print_alias , NULL );
182+ br (); // 每个target换行
183+ }
185184
186- br (); // 每个target换行
187- }
185+ void
186+ cli_print_targets_for_menu (XySeq_t * menu )
187+ {
188+ xy_seq_each (menu , callback_print_targets );
188189 br (); // 最后额外换行
189190}
190191
@@ -201,50 +202,51 @@ cli_print_supported_targets ()
201202 char * msg = ENGLISH ? "Programming Languages" : "编程语言" ;
202203 say (bdgreen (msg ));
203204 say ("-------------------------" );
204- cli_print_supported_targets_ ( chsrc_pl_menu , xy_arylen ( chsrc_pl_menu ) );
205+ cli_print_targets_for_menu ( ProgStore . pl );
205206 }
206207
207208 {
208209 char * msg = ENGLISH ? "Operating Systems" : "操作系统" ;
209210 say (bdgreen (msg ));
210211 say ("-------------------------" );
211- cli_print_supported_targets_ ( chsrc_os_menu , xy_arylen ( chsrc_os_menu ) );
212+ cli_print_targets_for_menu ( ProgStore . os );
212213 }
213214
214215 {
215216 char * msg = ENGLISH ? "Softwares" : "软件" ;
216217 say (bdgreen (msg ));
217218 say ("-------------------------" );
218- cli_print_supported_targets_ ( chsrc_wr_menu , xy_arylen ( chsrc_wr_menu ) );
219+ cli_print_targets_for_menu ( ProgStore . wr );
219220 }
220221}
221222
222223void
223- cli_print_supported_pl ()
224- {
225- char * msg = ENGLISH ? "Support following Programming Languages (same line indicates these targets are compatible)\n"
226- : "支持对以下编程语言生态换源 (同一行表示这几个目标兼容)\n" ;
227- say (bdgreen (msg ));
228-
229- cli_print_supported_targets_ (chsrc_pl_menu , xy_arylen (chsrc_pl_menu ));
230- }
231-
232- void
233- cli_print_supported_os ()
234- {
235- char * msg = ENGLISH ? "Support following Operating Systems (same line indicates these targets are compatible)\n"
236- : "支持对以下操作系统换源 (同一行表示这几个目标兼容)\n" ;
237- say (bdgreen (msg ));
238- cli_print_supported_targets_ (chsrc_os_menu , xy_arylen (chsrc_os_menu ));
239- }
240-
241- void
242- cli_print_supported_wr ()
224+ cli_print_menu (char * menu )
243225{
244- char * msg = ENGLISH ? "Support following Softwares (same line indicates these targets are compatible)\n"
245- : "支持对以下软件换源 (同一行表示这几个目标兼容)\n" ;
246- say (bdgreen (msg ));
247- cli_print_supported_targets_ (chsrc_wr_menu , xy_arylen (chsrc_wr_menu ));
226+ if (xy_streql (menu , "pl" ))
227+ {
228+ char * msg =
229+ ENGLISH ? "Support following Programming Languages (same line indicates these targets are compatible)\n"
230+ : "支持对以下编程语言生态换源 (同一行表示这几个目标兼容)\n" ;
231+ say (bdgreen (msg ));
232+ cli_print_targets_for_menu (ProgStore .pl );
233+ }
234+ else if (xy_streql (menu , "os" ))
235+ {
236+ char * msg =
237+ ENGLISH ? "Support following Operating Systems (same line indicates these targets are compatible)\n"
238+ : "支持对以下操作系统换源 (同一行表示这几个目标兼容)\n" ;
239+ say (bdgreen (msg ));
240+ cli_print_targets_for_menu (ProgStore .os );
241+ }
242+ else if (xy_streql (menu , "wr" ))
243+ {
244+ char * msg =
245+ ENGLISH ? "Support following Softwares (same line indicates these targets are compatible)\n"
246+ : "支持对以下软件换源 (同一行表示这几个目标兼容)\n" ;
247+ say (bdgreen (msg ));
248+ cli_print_targets_for_menu (ProgStore .wr );
249+ }
248250}
249251
250252
@@ -464,15 +466,16 @@ callback_match_alias (const char *alias, void *user_data)
464466 * @brief 用于 iterate_menu() 的回调函数
465467 */
466468bool
467- callback_find_target (void * data )
469+ callback_is_one_of_target_aliases (void * data , void * input )
468470{
469- target = (Target_t * ) data ;
470- if (iterate_aliases (target -> aliases , callback_match_alias , ( void * ) input ))
471+ Target_t * target = (Target_t * ) data ;
472+ if (iterate_aliases (target -> aliases , callback_match_alias , input ))
471473 {
472- target -> prelude ();
473-
474+ target -> preludefn ();
474475 return true;
475476 }
477+ else
478+ return false;
476479}
477480
478481/**
@@ -486,9 +489,9 @@ callback_find_target (void *data)
486489 * @return 匹配到则返回true,未匹配到则返回false
487490 */
488491bool
489- iterate_menu (XySeq_t * menu , const char * input , Target_t * * target )
492+ iterate_menu (XySeq_t * menu , const char * input , Target_t * * target )
490493{
491- Target_t * t = xy_seq_find (menu , callback_find_target );
494+ Target_t * t = xy_seq_find (menu , callback_is_one_of_target_aliases , ( void * ) input );
492495
493496 if (t )
494497 {
@@ -754,25 +757,39 @@ main (int argc, char const *argv[])
754757 else
755758 {
756759 target = argv [cli_arg_Target_pos ];
757- if (xy_streql (target , "mirrors" ) || xy_streql (target , "mirror" ))
760+ if ( xy_streql (target , "mirrors" )
761+ || xy_streql (target , "mirror" ))
758762 {
759- cli_print_available_mirrors (); return Exit_OK ;
763+ cli_print_available_mirrors ();
764+ return Exit_OK ;
760765 }
761- else if (xy_streql (target , "targets" ) || xy_streql (target , "target" ))
766+
767+ else if ( xy_streql (target , "targets" )
768+ || xy_streql (target , "target" ))
762769 {
763- cli_print_supported_targets (); return Exit_OK ;
770+ cli_print_supported_targets ();
771+ return Exit_OK ;
764772 }
773+
765774 else if (xy_streql (target , "os" ))
766775 {
767- cli_print_supported_os (); return Exit_OK ;
776+ cli_print_menu ("os" );
777+ return Exit_OK ;
768778 }
769- else if (xy_streql (target , "lang" ) || xy_streql (target , "pl" ) || xy_streql (target , "language" ))
779+
780+ else if ( xy_streql (target , "lang" )
781+ || xy_streql (target , "pl" )
782+ || xy_streql (target , "language" ))
770783 {
771- cli_print_supported_pl (); return Exit_OK ;
784+ cli_print_menu ("pl" );
785+ return Exit_OK ;
772786 }
773- else if (xy_streql (target , "ware" ) || xy_streql (target , "software" ))
787+
788+ else if ( xy_streql (target , "ware" )
789+ || xy_streql (target , "software" ))
774790 {
775- cli_print_supported_wr (); return Exit_OK ;
791+ cli_print_menu ("wr" );
792+ return Exit_OK ;
776793 }
777794
778795 matched = get_target (target , TargetOp_List_Config , NULL );
0 commit comments