1 Ostatnio edytowany przez mono (2012-12-17 13:38:28)

Czołem.
W swej niezmierzonej dobroci postanowiłem dzisiaj podzielić się swoim wynalazkiem i ułatwić życie osobom, które przygotowywały sobie (lub zamierzają przygotować) miliony plików do zgrania do .atr'a.
Programik przeprowadza konwersję długiej nazwy pliku (LFN) na krótką dokładając w razie potrzeby n-cyfrowy sufiks. Wszystko to dzieje się w kontekście katalogu docelowego (domyślnie katalog bieżący), w którym sprawdzana jest obecność pliku o proponowanej krótkiej nazwie.
Sposób uruchomienia:

$ abbr [opcje] [[katalog_docelowy] plik_źródłowy]

gdzie opcje to:
* -u/-l - upper/lowercase nazwy docelowej
* -c zestaw - nazwa podpada pod wymogi wybranego zestawu, czyli "spartados", "ataridos" lub "mydos"
* -n ilość - nazwa ograniczona jest do ustalonej ilości znaków
* -x ilość - rozszerzenie ograniczone jest do ustalonej ilości znaków
* -s ilość - rozmiar sufiksa ustalony jest na podaną ilość cyfr
Jeśli nie poda się ograniczeń na rozmiar nazwy (-n), wtedy programik dokłada sufiks do nazwy pliku nie obcinając jej, wpp jej maksymalny rozmiar zostanie obcięty o podaną ilość cyfr generowanego sufiksu.
Jeśli nie wybierze się zestawu, nazwa nie będzie filtrowana na zgodność z wymogami DOSu (atarowskiego).
Dla uniknięcia niejednoznaczności z nazwami plików w katalogu docelowym zaleca się stosowanie przełączników -l lub -u.
UWAGA! Program nie tworzy żadnych plików, a jedynie proponuje nazwę docelową.
Jeśli program nie potrafi zaproponować nazwy poruszając się w zadanych ograniczeniach nie zwraca nic prócz kodu wyjścia 1 (jeśli znalazł wypisuje nazwę i zwraca kod wyjścia 0).

Aby np. Wsadzić do katalogu ~/ATARI wszystkie pliki z katalogu bieżącego, ustalić im nazwy 8+3 pisane wielkimi literami należy wykonać:

for f in *; do F=$(abbr -u -n 8 -x 3 ~/ATARI $f); if [ -n "$F" ]; then cp $f $F; fi; done

Program jest dostępny tutaj.

Tradycyjnie zapraszam do testowania i zgłaszania bugów i żądań.
P.S. Program jest atari8fs compatible :).

Edit: Aaaaaa. Jak to zainstalować:

$ wget http://mono.atari.pl/fuse/abbr-0.3.zip
$ unzip -d abbr-0.3 abbr-0.3.zip
$ cd abbr-0.3
$ make
$ sudo make install
hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

2

A wersja 0.4 akceptuje nazwę źródłową z całą ścieżką.

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

3

mono napisał/a:

zgłaszania bugów i żądań.

niestety. Wersja pod windę przewidywana jest może? ;)-

Kontakt: pin@usdk.pl

4

wersja pod winde nazywa sie dir /x

przechodze na tumiwisizm

5 Ostatnio edytowany przez Monsoft (2012-12-17 14:27:03)

@Pin: mozesz sciagnac sobie UnixUtils http://sourceforge.net/projects/unxutil … p/download
I sprobowac cos takiego:

for f in *; do F=$(echo $f| gawk '{ print substr($0,legth,8) length($0)  substr($0,match($0,".[a-z]+$"),4) }'); if [ -n "$F" ]; then cp $f $F; fi; done

A jak chcesz z conversja na duze litery to:

for f in *; do F=$(echo $f| gawk '{ print substr($0,legth,8) length($0)  substr($0,match($0,".[a-z]+$"),4) }')|tr "[a-z]" "[A-Z]"; if [ -n "$F" ]; then cp $f $F; fi; done

Moze nie jest to nawet w 50% to co napisal mono, ale robi cos podobnego

6

właśnie cel mojej kwestii był taki, by uniknąć wpisywania formuł zawierających treść połowy epopei Mickiewicza ;)-

Kontakt: pin@usdk.pl

7

no to patrz post candle'a

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

8 Ostatnio edytowany przez Monsoft (2012-12-18 10:48:51)

@Pin no to chyba pozostanie Ci to co podal Candle, chyba ze Mono sprobuje skompilowac abbr z wykorzystaniem mingw32 co wyprodukuje (win)dosowy exec.

@Mono
U mnie sie twoj program sie nie compiluje (ani wersja 0.3 ani 0.4) :(

ipelech@gucio ~/abbr-0.3 $ make
cc -lm -DVER=\"0.3\" -o abbr abbr.c
abbr.c: In function ‘split_to_name_and_extension’:
abbr.c:57:8: warning: incompatible implicit declaration of built-in function ‘rindex’ [enabled by default]
abbr.c: In function ‘extract_filename’:
abbr.c:83:2: warning: incompatible implicit declaration of built-in function ‘strcpy’ [enabled by default]
abbr.c: In function ‘conform_filenamepart’:
abbr.c:107:7: warning: incompatible implicit declaration of built-in function ‘index’ [enabled by default]
abbr.c: In function ‘main’:
abbr.c:208:4: warning: incompatible implicit declaration of built-in function ‘strcpy’ [enabled by default]
abbr.c:213:4: warning: incompatible implicit declaration of built-in function ‘strcpy’ [enabled by default]
abbr.c:244:9: warning: incompatible implicit declaration of built-in function ‘strlen’ [enabled by default]
/tmp/cca44cCt.o: In function `main':
abbr.c:(.text+0x7ae): undefined reference to `fmin'
abbr.c:(.text+0x7ec): undefined reference to `pow'
collect2: ld returned 1 exit status
make: *** [all] Error 1

System to 64 bitowy Linux Mint 13 Maya

Edit:
Aby u mnie sie dobrze kompilowalo dodalem kilka zeczy:

<abbr.c>
+#include <string.h>

<Makefile>
-CC=cc -lm
+CC=cc
+LINKER=-lm
-$(CC) $(CCOPTS) -o $(ABBR) $(ABBR).c
+$(CC) $(CCOPTS) -o $(ABBR) $(ABBR).c $(LINKER)

9 Ostatnio edytowany przez Monsoft (2012-12-18 10:25:42)

...Do ununiecia ....

10

@Monsoft: A co było? -lmath zamiast -lm?

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

11 Ostatnio edytowany przez Monsoft (2012-12-18 11:36:55)

@MONO:
Nie, bylo -lm i tak mialo byc bo inaczej to masz problem z linkerem
abbr.c:(.text+0x7ae): undefined reference to `fmin'
abbr.c:(.text+0x7ec): undefined reference to `pow'

12

Dzięki.

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

13

Probowalem skompilowac abbr aby dzialal pod windowsa uzywajac mingw32 i zmieniajac funkcje rindex and index na strrchr i strchr, ale niestety program nie dziala poprawnie pod winda (pod linuxem dziala poprawnie). 

ipelech@gucio ~/abbr-0.3 $ diff abbr.c abbr_win.c 
58c58
<     dot = rindex(fname, '.');
---
>     dot = strrchr(fname, '.');    
108c108
<         if (index(set, *src))
---
>         if (strchr(set, *src))

14

Spróbuj z cygwinem.

STYMulator JIL ST YM2149 mjuz:k @ gnu/linux
SIUP (SIo2Usb2Pc) - SIO2PC USB Edition
PIN ready logo
3M / InD: ... na kasetach były zabezpieczenia w postaci tzw. "mikropierdnięcie" ...

15 Ostatnio edytowany przez Monsoft (2012-12-18 16:04:59)

Ja nie mam problemu, bo ja uzywam linuxa + windowsa. Ja PIN'a chcialem skompilowac.

16

@Monsoft: Dzięki. Wygląda na to, że udało się to skompilować i działa poprawnie z strchr i strrchr (glibc pisze, że index i rindex to aliasy na te funkcje). Wersja skompilowana specjalnie dla Pinokia znajduje się tutaj.

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

17

Widze ze dziala OK. Robiles jakies wieksze poprawki w kodzie, bo jak ja zmienilem te funkcje to pod linuxem bylo dalej ok, ale pod windowsem nie skracalo nazwy plikow

18

dziękuję BAŁDZO ;)-

Kontakt: pin@usdk.pl

19

@Monsoft: Wprowadziłem poprawki, o których pisałeś, poza tym konfiguruję w Makefile separator dla katalogów ('/' *nixy, '\' Windows). Wszystko jest w wersji dostępnej na stronie (łącznie z zakomentowanymi opcjami dla Windowsa w Makefile).

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

20 Ostatnio edytowany przez Monsoft (2012-12-19 10:38:57)

@Mono: A widze dziala spoko.
Ja jeszcze bym lekko zmodyfikowal Makefile co by mozna bylo bez grzebania kompilowac dla windows'a i linux'a:

ipelech@gucio ~/Downloads/abbr-0.5org $ diff ../abbr-0.5/Makefile Makefile 
10,11c10,11
< CCWIN=i586-mingw32msvc-cc
< CCOPTSWIN=-DVER=\"$(VER)\" -DSEP="'\\\\'"
---
> #CC=i586-mingw32msvc-cc
> #CCOPTS=-DVER=\"$(VER)\" -DSEP="'\\\\'"
22,24d21
< 
< windows:
<     $(CCWIN) $(CCOPTSWIN) -o $(ABBR).exe $(ABBR).c $(LINKER)

I pozniej aby skompilowac pod windowsa wystarczy uruchomic:

# make windows

21

Racja. Dodane :) Dzięki za pomoc.

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje