Unify - Ein vereinigter Dateimanager für GP2X


SirDzstic

Member
Joined
Nov 14, 2005
Messages
187
Hallo

Ich habe gestern nen kleinen Dateimanager geschrieben.
Im gegensatz zum mitgelieferten kann man ihm sagen,
wie Dateien mit selbstdefinierten Endungen zu behandeln
sind.
Dafür benutzt er eine Konfigurationsdatei, in der in jeder
Zeile eine Dateiendung und der dazu gehörende Interpreter
steht. Zum Beispiel so:
sh /bin/sh
txt /usr/bin/less

Ich habe es leider nicht geschafft, ihn mit meiner SDL für
ARM zu linken, deshalb gebe ich euch mal den Source;
ich hoffe einer von euch bekommt es hin.

Um es zu kompilieren, müsst ihr meinem configurescript
sagen, für welche Plattform es den Makefile erzeugen soll.
TARGET=i386 ./configure
TARGET=arm ./configure

Dann make && make install. Installiert wird es in ./inst,
also braucht man keine rootrechte zum installieren und
es wird auch nicht ins System eingegriffen.

ftp://ftp.berlios.de/pub/gb4gp2x/unify-0.0.3.tar.gz
 
First off, sorry for writing in English, I can read German just fine (so just answer 'auf Deutsch') but I don't trust my writing skills.

The link-order is sensitive; I got it to link changing LINKSDL and the lline that uses it as follows (also had to hack around with the paths, but that's probably just my problem..) :

luteijn@dollar:~/devel/gp2x/unify-0.0.3$ diff Makefile Mykefile
Code:
0a1,2
>
>
2,5c4,8
< SDLCONFIG=    arm-unknown-linux-gnu-sdl-config
< LDFLAGS=      -static
< CC=                   arm-unknown-linux-gnu-gcc
< STRIP=                arm-unknown-linux-gnu-strip
---
> SDLCONFIG=    /opt/local/gp2x/bin/arm-open2x-linux-sdl-config
> LDFLAGS=      -static -L/opt/local/gp2x/lib
> CC=           /opt/local/gp2x/bin/arm-linux-gcc
>
> STRIP=                /opt/local/gp2x/bin/arm-linux-strip
8c11
< LINKSDL=      `$(SDLCONFIG) --libs`  -lSDL -lSDL_ttf
---
> LINKSDL=      `$(SDLCONFIG) --libs`  $(LDFLAGS) -lSDLmain -lSDL_ttf -lfreetype -lz -lm -lSDL
13c16
< HEADER=               include
---
> HEADER=               /opt/local/gp2x/include  -I include -I /opt/local/gp2x/include/SDL
25c28
<       $(CC) $(CFLAGS) $(SDLFLAGS) $(LINKSDL) $(LDFLAGS) -o $@ $^
---
>       $(CC) $(CFLAGS) $(SDLFLAGS) -o $@ $^ $(LINKSDL)

as you can see I shifted the place of the libraries around and also added some libs. SDL_ttf needs freetype which needs libz and libm (just for the ceil() function, probably can save some space by linking just that function to it?)

Probably you'll also want to rename the binary to unify.gpe at the end of the build process.


Copied unify (as unify.gpe) to SD card, added the 2 files from the res/ directory (font, config) and it worked right away. Don't forget to add

SDL_ShowCursor(0);

right after calling SDL_Init, to get rid of the spurious mouse cursor.

And add

chdir("/usr/gp2x");
execl("/usr/gp2x/gp2xmenu", "/usr/gp2x/gp2xmenu", NULL);

before exiting, or it will get the GP2X stuck...

I solved similar issues when working on this: http://luteijn.xs4all.nl/html/wumpus/
(the code is half reused from an version using libsvga I worked on in 1999, and needs cleaning up, esp the tile drawing, but the Makefile might be interesting.)

Pieter
 
Thank you very much for having a look at it.
I'll change the things you mentioned and update the tarball as soon as it works.

Nice to hear that my program actually runs :)
 
Es wäre ohnehin mal an der Zeit, das komplette gp2xmenu zu ersetzen. Bis auf den Movieplayer und den Launcher kann das Ding eigentlich nichts (richtig).
 
Sehr fein, sehr fein.
Jetzt kann ich das gp2xmenu loswerden :)

Hab ein paar Vorschläge für das ganze:

1. In ZIP-Dateien nach Endungen suchen.
z.B. für Emulatoren: Die Roms sind meist alle ZIP, aber wenn der Manager in der Datei nach eigentlichen Rom-Endung sucht, könnte man ihn trotzdem gleich richtig verknüpfen.

2. Bookmarks (so dass ich z.B. durch Auswählen von "Spiele" direkt in das richtige Verzeichnis komme)

3. Unterstützen der MoviePlayer und der Grafikviewer Commandlines?
Dann könnte man ja AVIs direkt mit dem entsprechenden Player verknüpfen :)

Soo, das ist mir mal so eingefallen. Weiter so, gefällt mir schon seeehr gut :) Danke dafür!
 
Auf die Idee mit dem Suchen innerhalb von Archiven bin ich noch nicht gekommen.
Klingt nach einer guten Idee, da muss ich mich aber noch einarbeiten;
wird also nicht allzu schnell kommen.

Die anderen Vorschläge kann ich sicher früher berücksichtigen.
 
SirDzstic said:
Auf die Idee mit dem Suchen innerhalb von Archiven bin ich noch nicht gekommen.
Klingt nach einer guten Idee, da muss ich mich aber noch einarbeiten;
wird also nicht allzu schnell kommen.

Nachdem es für Linux bestimmt genug ZIP-Sources gibt, dürfte es nicht ganz so schwer sein - macht doch fast jedes Programm schon, oder nicht?
 
Some Suggestions:

- if path is very long, replace the middle part with /.../ so /lib/modules/2.4.25.kernel/drivers/usb/gadget is no longer cut off after ..usb/ (or scroll the top line around to show the extra characters(

- In the first column, display some small icons, like the build-in explorer. Config could be extended e.g. like this

txt /mnt/sd/unify/icons/txt.bmp /usr/bin/less
zip /mnt/sd/unify/icons/zip.bmp /mnt/sd/unify/scripts/ziphandler.gpu
<directory> /mnt/sd/unify/icons/dir.bmp

- don't display the '.' link

- option to toggle display of dotfiles/filesize/directories etc.

- filter/sort options.

Pieter


P.S. ED's idea to look inside files might be better implemented by using an external script, to keep unify itself smaller? (that's what ziphandler.gpu above refers to, but I thought I'd point it out explicitly ;) )
 
Ich habe die ganzen Tarballs mal in ein eigenes Verzeichnis auf dem FTP-Server geschoben.
UND:
....
Eine neue Revision hochgeladen (diesmal mit rudimentärem Theme-support)
unify-0.0.7.png

Source
Binary

€:
Morgen werde ich mich daran setzen, die vielen Ideen umzusetzen.
Wer lust hat, darf auch Ideen in Form von Sourcecode beisteuern ;)
 
hacked around a little in your 0.0.6 source. More ideas:
Code:
luteijn@dollar:~/devel/gp2x/unify-0.0.6$ diff src/ ../unify-0.0.6-hacked/src
diff src/fs.c ../unify-0.0.6-hacked/src/fs.c
49a50
>               sRuleInfo->cIcn[iRule] = (char*)malloc(512);
52c53
<               i = fscanf(fConfFile, "%s %s",
---
>               i = fscanf(fConfFile, "%s %s %s",
53a55
>                       sRuleInfo->cIcn[iRule],
54a57,66
>               sRuleInfo->cExt[iRule] = (char*)realloc(
>                       sRuleInfo->cExt[iRule],
>                       strlen(sRuleInfo->cExt[iRule])+1);
>               sRuleInfo->cIcn[iRule] = (char*)realloc(
>                       sRuleInfo->cIcn[iRule],
>                       strlen(sRuleInfo->cIcn[iRule])+1);
>               sRuleInfo->cApp[iRule] = (char*)realloc(
>                       sRuleInfo->cApp[iRule],
>                       strlen(sRuleInfo->cApp[iRule])+1);
>
65c77
<       char *cApp=(char*)malloc(NAMLEN);
---
>       // char *cApp=(char*)malloc(NAMLEN);
diff src/main.c ../unify-0.0.6-hacked/src/main.c
158c158
< int iInitInfo(INFO *sInfo) {
---
> void iInitInfo(INFO *sInfo) {

or, in plain words, as the diff is probably of little use since you're also working on the source and it has changed significantly:

- store path to icon in sRuleInfo struct (and by extension, not shown:
+ use this info to display little icons, e.g. 8x8 pixels, between cursor arrow and filenames
)
- free up unused memory (and by extension, but not in the code above:
+ make sure the fscanf doesn't overflow the 511 characters of buffer available by changing the format string to include a maximum field width
+ increase the initial memory used in the malloc, as any overkill will be freed up when the realloc happens
+ warn when hitting one of the built-in limits; not likely to happen in normal use at the moment, but might in the future.
)
- get rid of unused variable (already done in v0.0.7, ;) )
- quick-fix non-void fuction without return (already done in v0.0.7, actually better as my hack broke your naming convention.)

And some more ideas:
- rm/mv etc functions;
- Change the conf format to something else than just one line for everything with whitespace as separators, to get a little more flexibility. (I guess the current format is probably just a quick fix anyway)

e.g.
# ignoring blank lines and those starting with #,!,/ etc. (comments)
pattern \.[gG][iI][fF]$
icon /mnt/sd/unify/icons/pic.bmp
action {
call /usr/local/bin/gifview.gpe -resize 320x240 -f %1
}

pattern ^DCIM....\.JPG
icon /mnt/sd/unify/icons/cam.bmp
action {
call /usr/local/bin/rotate --90 -in %1 -out %1.rotated.GIF
call /usr/local/bin/jpgview.gpe %1
call /bin/rm %1.rotated.GIF
}



pattern \.gp[eu]$
icon /mnt/sd/unify/icons/exe.bmp
action {
execute %1
}
 
Thank you very much :>

I did some work on the config parser based on your
ideas. No regular expressions yet, but I think it's still
an improvement.
theme default.thm
ext gpe {
icon exec.bmp
call *
}
ext gpu {
icon exec.bmp
call *
}
ext txt {
icon text.bmp
call /usr/gp2x/EBookViewer
}

As you can see, it looks a lot like you suggested :>
I'll post the result as soon as I think it's showable

€: Oh, I didn't mention it can also handle rules like
ext c { icon asdf call ghjk }
or
ext c { call ghjk icon asdf }

so the user has a little more freedom
 
hmm der movieplayer unterstützt glaube ich keine commandline beim audioplayer weis ich es nicht.
 
beware of spaces in filenames (eventually someone will use them, even though it's generally a stupid idea) that can confuse your parser. That's why I like the 'rest of the line is the argument' kind of syntax.

When I was playing around with the bash shell over serial/usb link I think I noticed that it will start programs with themselves as argument on the commandline. Probably not what it should do.


I tried to imply a difference between exec and call: exec replaces the current process, while call would return to unify when the external program finishes.

P.
 
I guess the new changes justify an increase in the minor revision number,
as unify now actually manages files :>

New: Copy and move files
1. Select the file, by pressing "Select"
2. Switch to the destination directory
3. A to copy; B to move the file there.
New: Status bar
New: Beautiful theme by me :)
unify-0.1.0.png


Don't forget to complain about everything that sucks about the new revision.

As always:
Source
Binary

n.b.: My rechargeables said "goodbye" just as i wanted to test the new
binary. Maybe it works, though :)

€:
luteijn I didn't forget you; I was just too lazy to implement your suggestions. :(
 
Das Interesse scheint ja stark nachgelassen zu haben.
Dennoch: Revision 0.1.1

Neu: Themes haben eigene Verzeichnisse
Neu: Icons vor Dateinamen
Neu: "." und ".." werden ausgeblendet
Neu: Löschen von Dateien (Datei auswählen, cursor nicht bewegen, X drücken)
Neu: Das SDL-Fenster hat einen Namen ("GP2X Executive")
Anders: Scrollen jetzt auf den Volume+/- Tasten

Screenshot:
unify-0.1.1.png


Source
Binary

Der mitgelieferte mplayer segfaultet leider und ist deshalb nicht zu
gebrauchen. Die mitgelieferten Viewer und Player mögen anscheinend
keine Kommandozeilenparameter. Beides schlecht. Für Alternativen
wäre ich sehr offen, weil das Projekt jetzt einen Teil seines Sinns verloren
hat :(
 
Das Interesse scheint ja stark nachgelassen zu haben.

In keinster Weise :) Nur weiter so!

Das ist schonmal der erste Schritt auf dem Weg zu einer besseren Community-Firmware.
 
Back
Top