]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - command_util.sh
command_util: Write array definition in header mode.
[paraslash.git] / command_util.sh
index 563ab1a25ebe80e6e7bd837fa5e613d8ba3e880c..abae4ec2b74c84e925c0297900c01c3dfb3c553a 100755 (executable)
@@ -10,6 +10,9 @@ read_header()
                ---)
                        break
                        ;;
+               BN:)
+                       base_name="$value"
+                       ;;
                OF:)
                        output_file="$value"
                        array_name=${value%command_list}cmds
@@ -198,42 +201,39 @@ make_proto()
        for source_file in $source_files; do
                match=$(grep "^\(__noreturn \)*int com_$name_txt(" $source_file | head -n 1 | sed -e 's/$/;/1')
                if test -n "$match"; then
-                       result="$result $match$CR"
+                       result="$result$match$CR"
                        break
                fi
        done
-       echo
 }
 
 make_array_member()
 {
-       local TAB='     '
+       local TAB='     ' CR='
+'
        local tmp
 
-       result="
-       {
-       .name = \"$name_txt\",
-       .handler = com_$name_txt,
-       "
+       result="{.name = \"$name_txt\", .handler = com_$name_txt, "
        if test -n "$perms_txt"; then
                result="$result .perms = $perms_txt,"
        fi
-       result="$result
-       .description = \"$desc_txt\",
-       .usage = \"$usage_txt\",
-       .help = "
+       result="$result.description = \"$desc_txt\", .usage = \"$usage_txt\", \\$CR .help = "
        tmp="$(printf "%s\n" "$help_txt" | sed -e 's/^/\"/g' -e 's/$/\\n\"/g' \
-               -e "s/$TAB/\\\t/g")"
-       result="$result $tmp },"
+               -e "s/$TAB/\\\t/g" -e's/$/\\/g')"
+       result="$result$tmp$CR}, \\$CR"
 }
 
 make_completion()
 {
-       result="  {.name = \"$name_txt\", .completer = ${name_txt}_completer}, \\"
+       local CR='
+'
+       result="  {.name = \"$name_txt\", .completer = ${name_txt}_completer}, \\$CR"
 }
 
 template_loop()
 {
+       local loop_result=
+
        local t_name="$name_txt"
        local t_perms="$perms_txt"
        local t_desc="$desc_txt"
@@ -253,9 +253,16 @@ template_loop()
                prototype=$(echo "$template_prototype" | $sed_cmd)
                result=
                $1
-               echo "$result"
+               loop_result="$loop_result$result"
        done
-
+       result="$loop_result"
+       # reset global variables
+       name_txt="$t_name"
+       perms_txt="$t_perms"
+       desc_txt="$t_desc"
+       usage_txt="$t_usage"
+       help_txt="$t_help"
+       source_files="$t_source_files"
 }
 
 com_c_file()
@@ -273,16 +280,20 @@ com_c_file()
                fi
                if test $template -eq 0; then
                        make_array_member
-                       echo "$result"
+                       printf "%s" "$result"
                        continue
                fi
                template_loop make_array_member
+               printf "%s" "$result"
        done
        echo '{.name = NULL}};'
 }
 
 com_header()
 {
+       local array_members CR='
+'
+
        echo "extern struct $array_type $array_name[];"
        while : ; do
                read_one_command
@@ -294,11 +305,18 @@ com_header()
                fi
                if test $template -eq 0; then
                        make_proto
-                       echo "$result"
+                       printf "%s" "$result"
+                       make_array_member
+                       array_members="$array_members$result"
                        continue
                fi
                template_loop make_proto
+               printf "%s" "$result"
+               template_loop make_array_member
+               array_members="$array_members$result"
        done
+       array_members="$array_members{.name = NULL} \\$CR"
+       echo "#define DEFINE_$(tr 'a-z' 'A-Z' <<< "$base_name")_CMD_ARRAY $array_members"
 }
 
 com_completion()
@@ -315,10 +333,11 @@ com_completion()
                fi
                if test $template -eq 0; then
                        make_completion
-                       echo "$result"
+                       printf "%s" "$result"
                        continue
                fi
                template_loop make_completion
+               printf "%s" "$result"
        done
        echo
 }