Phasor 2.2.0
Stack VM based Programming Language
Loading...
Searching...
No Matches
rm.phs
Go to the documentation of this file.
1// Port of 'rm' - remove files for GNU.
2// 'rm' file removal program for Phasor.
3// Copyright (C) 2026 Daniel McGuire.
4//
5// This program is free software: you can redistribute it and/or modify
6// it under the terms of the GNU General Public License as published by
7// the Free Software Foundation, either version 3 of the License, or
8// (at your option) any later version.
9//
10// This program is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU General Public License for more details.
14//
15// You should have received a copy of the GNU General Public License
16// along with this program. If not, see <https://www.gnu.org/licenses/>.
17
18include_stdio();
19include_stdfile();
20include_stdsys();
21
22fn show_help() -> void {
23 puts("Usage: rm [OPTION]... FILE...");
24 puts("Remove (unlink) the FILE(s).");
25 puts("");
26 puts("Options:");
27 puts(" -f, --force ignore nonexistent files");
28 puts(" --help display this help and exit");
29 puts(" --version output version information and exit");
30}
31
32fn show_version() -> void {
33 puts("rm (Phasor coreutils) 0.1");
34 puts("License GPLv3+: GNU GPL version 3 or later");
35 puts("This is free software: you are free to change and redistribute it.");
36 puts("There is NO WARRANTY, to the extent permitted by law.");
37}
38
39fn main() -> int {
40 var argc = sys_argc();
41 if (argc < 2) {
42 putf("Usage: %s FILE...", sys_argv(0)); puts("");
43 puts("Remove FILE(s).");
44 return 1;
45 }
46
47 var force = false;
48 var i = 1;
49
50 while (i < argc) {
51 var arg = sys_argv(i);
52
53 if (arg == "--") {
54 i = i + 1;
55 break;
56 }
57
58 if (arg == "-f" || arg == "--force") {
59 force = true;
60 i = i + 1;
61 continue;
62 }
63
64 if (arg == "--help") {
65 show_help();
66 return 0;
67 }
68
69 if (arg == "--version") {
70 show_version();
71 return 0;
72 }
73
74 if (arg.startsWith("-")) {
75 puts("rm: invalid option");
76 puts("Try 'rm --help' for more information.");
77 return 1;
78 }
79
80 break;
81 }
82
83 var error = false;
84 while (i < argc) {
85 var file = sys_argv(i);
86 if (!frm(file)) {
87 if (!force) {
88 puts("rm: cannot remove file");
89 error = true;
90 }
91 }
92 i = i + 1;
93 }
94
95 if (error) return 1;
96 return 0;
97}
98
99shutdown(main());