Phasor 2.2.0
Stack VM based Programming Language
Loading...
Searching...
No Matches
clocf.phs
Go to the documentation of this file.
1include_stdsys();
2include_stdio();
3include_stdstr();
4include_stdtype();
5
6fn print_help() -> void {
7 var sb = sb_new();
8 sb_append(sb, "clocf - cloc formatter\n\n");
9 sb_append(sb, "Usage:\n");
10 sb_append(sb, " cloc [options] <path> | clocf # Process cloc output via pipe\n");
11 puts(sb_to_string(sb));
12 sb_free(sb);
13}
14
15fn main() -> int {
16 var argc = sys_argc();
17
18 if (argc > 1) {
19 var arg = sys_argv(1);
20 if (arg == "--help" || arg == "-h") {
21 print_help();
22 return 0;
23 }
24 }
25
26 var totalCode = 0;
27 var maxNameLen = 0;
28 var langCount = 0;
29
30 var dataStorage = sb_new();
31
32 while (true) {
33 var line = gets();
34 if (len(line) == 0) { break; }
35
36 if (starts_with(line, "github.com/AlDanial/cloc") || starts_with(line, "-") || starts_with(line, "Language") || starts_with(line, "SUM")) {
37 continue;
38 }
39
40 var codeStr = "";
41 var foundDigits = false;
42 var codeIdxStart = 0;
43
44 for (var i = len(line) - 1; i >= 0; i = i - 1) {
45 var c = char_at(line, i);
46 var isDigit = (c == "0" || c == "1" || c == "2" || c == "3" || c == "4" ||
47 c == "5" || c == "6" || c == "7" || c == "8" || c == "9");
48
49 if (isDigit) {
50 var tempSb = sb_new();
51 sb_append(tempSb, c);
52 sb_append(tempSb, codeStr);
53 codeStr = sb_free(tempSb);
54 foundDigits = true;
55 } else if (foundDigits) {
56 codeIdxStart = i;
57 break;
58 }
59 }
60
61 var namePart = "";
62 for (var j = 0; j < len(line); j = j + 1) {
63 var c = char_at(line, j);
64 if (c == " " && j > 0) {
65 if (char_at(line, j-1) != " ") {
66 namePart = substr(line, 0, j);
67 break;
68 }
69 }
70 }
71
72 if (len(codeStr) > 0 && len(namePart) > 0) {
73 var codeValue = to_int(codeStr);
74 totalCode = totalCode + codeValue;
75
76 if (len(namePart) > maxNameLen) {
77 maxNameLen = len(namePart);
78 }
79
80 sb_append(dataStorage, namePart);
81 sb_append(dataStorage, ":");
82 sb_append(dataStorage, codeStr);
83 sb_append(dataStorage, "\n");
84 langCount = langCount + 1;
85 }
86 }
87
88 if (totalCode == 0) {
89 puts_error("Error: No cloc data received via pipe.");
90 sb_free(dataStorage);
91 return 1;
92 }
93
94 var headerSb = sb_new();
95 sb_append(headerSb, "Total code lines: ");
96 sb_append(headerSb, to_string(to_int(totalCode)));
97 puts(sb_to_string(headerSb));
98 sb_free(headerSb);
99 puts("Language percentages:");
100
101 var rawResults = sb_free(dataStorage);
102 var currentPos = 0;
103
104 for (var k = 0; k < langCount; k = k + 1) {
105 var entry = "";
106 for (var m = currentPos; m < len(rawResults); m = m + 1) {
107 if (char_at(rawResults, m) == "\n") {
108 entry = substr(rawResults, currentPos, m - currentPos);
109 currentPos = m + 1;
110 break;
111 }
112 }
113
114 var splitIdx = 0;
115 for (var n = 0; n < len(entry); n = n + 1) {
116 if (char_at(entry, n) == ":") {
117 splitIdx = n;
118 break;
119 }
120 }
121
122 var lName = substr(entry, 0, splitIdx);
123 var lCode = to_int(substr(entry, splitIdx + 1));
124 var percent = (lCode * 100.0) / totalCode;
125
126 var lineSb = sb_new();
127 sb_append(lineSb, lName);
128
129 var padding = maxNameLen - len(lName);
130 for (var p = 0; p < padding; p = p + 1) {
131 sb_append(lineSb, " ");
132 }
133
134 sb_append(lineSb, " : ");
135 sb_append(lineSb, to_string(percent));
136 sb_append(lineSb, "% (");
137 sb_append(lineSb, to_string(lCode));
138 sb_append(lineSb, " lines)");
139
140 puts(sb_to_string(lineSb));
141 sb_free(lineSb);
142 }
143
144 return 0;
145}
146
147shutdown(main());