1

Temat: konwerter nazw LFN na 8+3

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

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

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

2

Odp: konwerter nazw LFN na 8+3

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

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

3

Odp: konwerter nazw LFN na 8+3

mono napisał/a:

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

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

ADRES: pin@atari.pl - konto zlikwidowane. Aktualny adres: pin(at)atari8.info

4

Odp: konwerter nazw LFN na 8+3

wersja pod winde nazywa sie dir /x

przechodze na tumiwisizm

5

Odp: konwerter nazw LFN na 8+3

@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

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

6

Odp: konwerter nazw LFN na 8+3

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

ADRES: pin@atari.pl - konto zlikwidowane. Aktualny adres: pin(at)atari8.info

7

Odp: konwerter nazw LFN na 8+3

no to patrz post candle'a

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

8

Odp: konwerter nazw LFN na 8+3

@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)

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

9

Odp: konwerter nazw LFN na 8+3

...Do ununiecia ....

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

10

Odp: konwerter nazw LFN na 8+3

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

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

11

Odp: konwerter nazw LFN na 8+3

@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'

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

12

Odp: konwerter nazw LFN na 8+3

Dzięki.

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

13

Odp: konwerter nazw LFN na 8+3

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

Odp: konwerter nazw LFN na 8+3

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

Odp: konwerter nazw LFN na 8+3

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

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

16

Odp: konwerter nazw LFN na 8+3

@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

Odp: konwerter nazw LFN na 8+3

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

Odp: konwerter nazw LFN na 8+3

dziękuję BAŁDZO ;)-

ADRES: pin@atari.pl - konto zlikwidowane. Aktualny adres: pin(at)atari8.info

19

Odp: konwerter nazw LFN na 8+3

@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

Odp: konwerter nazw LFN na 8+3

@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

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

21

Odp: konwerter nazw LFN na 8+3

Racja. Dodane :) Dzięki za pomoc.

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