mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-15 11:20:03 +00:00
124 lines
1.8 KiB
C
124 lines
1.8 KiB
C
|
#include "sam.h"
|
||
|
|
||
|
List file;
|
||
|
ushort tag;
|
||
|
|
||
|
File *
|
||
|
newfile(void)
|
||
|
{
|
||
|
File *f;
|
||
|
|
||
|
f = fileopen();
|
||
|
inslist(&file, 0, (long)f);
|
||
|
f->tag = tag++;
|
||
|
if(downloaded)
|
||
|
outTs(Hnewname, f->tag);
|
||
|
/* already sorted; file name is "" */
|
||
|
return f;
|
||
|
}
|
||
|
|
||
|
int
|
||
|
whichmenu(File *f)
|
||
|
{
|
||
|
int i;
|
||
|
|
||
|
for(i=0; i<file.nused; i++)
|
||
|
if(file.filepptr[i]==f)
|
||
|
return i;
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
void
|
||
|
delfile(File *f)
|
||
|
{
|
||
|
int w = whichmenu(f);
|
||
|
|
||
|
if(w < 0) /* e.g. x/./D */
|
||
|
return;
|
||
|
if(downloaded)
|
||
|
outTs(Hdelname, f->tag);
|
||
|
dellist(&file, w);
|
||
|
fileclose(f);
|
||
|
}
|
||
|
|
||
|
void
|
||
|
fullname(String *name)
|
||
|
{
|
||
|
if(name->n > 0 && name->s[0]!='/' && name->s[0]!=0)
|
||
|
Strinsert(name, &curwd, (Posn)0);
|
||
|
}
|
||
|
|
||
|
void
|
||
|
fixname(String *name)
|
||
|
{
|
||
|
String *t;
|
||
|
char *s;
|
||
|
|
||
|
fullname(name);
|
||
|
s = Strtoc(name);
|
||
|
if(strlen(s) > 0)
|
||
|
s = cleanname(s);
|
||
|
t = tmpcstr(s);
|
||
|
Strduplstr(name, t);
|
||
|
free(s);
|
||
|
freetmpstr(t);
|
||
|
|
||
|
if(Strispre(&curwd, name))
|
||
|
Strdelete(name, 0, curwd.n);
|
||
|
}
|
||
|
|
||
|
void
|
||
|
sortname(File *f)
|
||
|
{
|
||
|
int i, cmp, w;
|
||
|
int dupwarned;
|
||
|
|
||
|
w = whichmenu(f);
|
||
|
dupwarned = FALSE;
|
||
|
dellist(&file, w);
|
||
|
if(f == cmd)
|
||
|
i = 0;
|
||
|
else{
|
||
|
for(i=0; i<file.nused; i++){
|
||
|
cmp = Strcmp(&f->name, &file.filepptr[i]->name);
|
||
|
if(cmp==0 && !dupwarned){
|
||
|
dupwarned = TRUE;
|
||
|
warn_S(Wdupname, &f->name);
|
||
|
}else if(cmp<0 && (i>0 || cmd==0))
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
inslist(&file, i, (long)f);
|
||
|
if(downloaded)
|
||
|
outTsS(Hmovname, f->tag, &f->name);
|
||
|
}
|
||
|
|
||
|
void
|
||
|
state(File *f, int cleandirty)
|
||
|
{
|
||
|
if(f == cmd)
|
||
|
return;
|
||
|
f->unread = FALSE;
|
||
|
if(downloaded && whichmenu(f)>=0){ /* else flist or menu */
|
||
|
if(f->mod && cleandirty!=Dirty)
|
||
|
outTs(Hclean, f->tag);
|
||
|
else if(!f->mod && cleandirty==Dirty)
|
||
|
outTs(Hdirty, f->tag);
|
||
|
}
|
||
|
if(cleandirty == Clean)
|
||
|
f->mod = FALSE;
|
||
|
else
|
||
|
f->mod = TRUE;
|
||
|
}
|
||
|
|
||
|
File *
|
||
|
lookfile(String *s)
|
||
|
{
|
||
|
int i;
|
||
|
|
||
|
for(i=0; i<file.nused; i++)
|
||
|
if(Strcmp(&file.filepptr[i]->name, s) == 0)
|
||
|
return file.filepptr[i];
|
||
|
return 0;
|
||
|
}
|