Free Hero Mesh

Diff
Login
This is a mirror of the main repository for Free Hero Mesh. New tickets and changes will not be accepted at this mirror.

Differences From Artifact [398da2db3e]:

To Artifact [c464e5cfda]:


1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16
#if 0
gcc -s -O2 -o ~/bin/har -Wno-unused-result har.c
exit
#endif

/*
  Hamster archiver
  Public domain


  c = Create
  d = Delete
  l = Lowercase
  o = Extract to stdout
  r = Rename
  s = Safe
  t = List









>







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
      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]='_';
    }

    size=fgetc(stdin)<<16;
    size|=fgetc(stdin)<<24;
    size|=fgetc(stdin);
    size|=fgetc(stdin)<<8;






    if(argc<3) {
      o=1;
    } else {
      o=0;
      for(n=2;n<argc;n++) {
        if(!strcmp(name,argv[n])) {
          o=1;







>
|
|
|
|
>
>
>
>
>
>







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;
    } 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
        perror(name);
        fatal("Cannot open file for output");
      }
    } else {
      fp=stdout;
      if(!opt['o']) {
        fwrite(name,1,strlen(name)+1,stdout);


        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);
  }







>
>
|
>
>
>
>
|
|
|
>







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>>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);
  }
︙︙