1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
+
|
#if 0
gcc -s -O2 -o ~/bin/har -Wno-unused-result har.c
exit
#endif
/*
Hamster archiver
Public domain
b = Bunny
c = Create
d = Delete
l = Lowercase
o = Extract to stdout
r = Rename
s = Safe
t = List
|
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
|
if(!c) break;
if(n==254) fatal("Name too long: %s",name);
}
if(opt['s']) {
if(!n) name[1]=0,n=1;
if(d) name[n-1]='_';
}
if(opt['b']) {
size=fgetc(stdin)<<16;
size|=fgetc(stdin)<<24;
size|=fgetc(stdin);
size|=fgetc(stdin)<<8;
size=fgetc(stdin)<<16;
size|=fgetc(stdin)<<24;
size|=fgetc(stdin);
size|=fgetc(stdin)<<8;
} else {
size=fgetc(stdin)<<24;
size|=fgetc(stdin)<<16;
size|=fgetc(stdin)<<8;
size|=fgetc(stdin);
}
if(argc<3) {
o=1;
} else {
o=0;
for(n=2;n<argc;n++) {
if(!strcmp(name,argv[n])) {
o=1;
|
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
|
perror(name);
fatal("Cannot open file for output");
}
} else {
fp=stdout;
if(!opt['o']) {
fwrite(name,1,strlen(name)+1,stdout);
if(opt['b']) {
putchar(size>>24);
putchar(size>>16);
putchar(size>>24);
putchar(size);
putchar(size>>8);
putchar(size>>16);
putchar(size>>8);
putchar(size);
} else {
putchar(size>>16);
putchar(size>>24);
putchar(size);
putchar(size>>8);
}
}
}
while(size--) fputc(fgetc(in),fp);
if(opt['x']) fclose(fp);
} else {
while(size--) fgetc(in);
}
|