atarionline.pl Łata do xxd - Forum Atarum

Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

  • :
  • :

Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

    • 1: CommentAuthormono
    • CommentTime26 Aug 2011 zmieniony
     
    Zrobiłem małą łatkę do programu xxd pozwalającą na nałożenie maski na znaki ASCII pokazywane z prawej strony. Pozwala to na łatwe zorientowanie się w tekstach zapisanych w inverse video w plikach z Atari.
    xxd znajduje się w pakiecie vim-common (w ubuntu 8.04); dostarczany jest z vim więc pociągnąłem wersję 7.3 i tąż połatałem.
    A co zrobiłem? Dodałem parametr -m mask, którym podaje się maskę na znaki ASCII. Żeby pokazać znaczki zapisane w inverse wystarczy obciąć ostatni bit znaku - maska powinna być 0x7f, więc po:
    $ xxd -g 1 -m 0x7f Wizard.cmc | head

    naszym oczom powinna pokazać się sygnatura pliku CMC.
    Poniżej procedura nałożenia łaty i instalacji poprawionego programu u siebie:
    $ wget ftp://ftp.vim.org/pub/vim/unix/vim-7.3.tar.bz2
    $ tar jxf vim-7.3.tar.bz2
    $ cd vim73/src/xxd
    $ wget http ://mono.i-demo.pl/vim-7.3-xxd-1.10-atari.patch
    $ patch -p0 xxd.c vim-7.3-xxd-1.10-atari.patch
    $ make
    $ sudo install -s xxd $(which xxd || echo /usr/local/bin/)

    Edit: http z resztą ma być pisane łącznie (wstawiłem spację, bo inaczej engine forum zamieniał mi to na linka)
    Edit 2: Dodałem jeszcze switch -A do konwersji kodów wewnętrznych ANTICa na ATASCII.
    • 2:
       
      CommentAuthorjhusak
    • CommentTime26 Aug 2011 zmieniony
     
    Zacna inicjatywa, może być pomocne :) Chociaż myślę sobie, że można by prościej pisząc nowe narzędzie skryptowe (lub w C), które używa xxd wewnątrz i dokonuje translacji w locie, wtedy nie ma problemu przy aktualizacjach.
    • 3: CommentAuthormono
    • CommentTime26 Aug 2011 zmieniony
     
    Tak myślałem sobie też. I wykorzystać przetwarzanie potokowe. Można zrobić narzędzie w bashu. Takie mam do konwersji tekstów z ATASCII na PC i odwrotnie. Choć tu lepsza byłaby pewnie tablica do konwert. Albo innego iconv.

    Edit: A w ogóle to xxd można wyjąć z vima i kompilować samodzielnie zwykłym
    cc -o xxd xxd.c
    • 4:
       
      CommentAuthorjhusak
    • CommentTime27 Aug 2011 zmieniony
     
    Takie?
    export LC_ALL=C
    while [ "$1" ] ; do
    ! [ -f "$1.tmp" ] &&
    tr <"$1" "\233" "\n" >"$1.tmp" &&
    mv "$1" "$1~" &&
    mv "$1.tmp" "$1"
    shift
    done



    I na ATASCII

    export LC_ALL=C
    while [ "$1" ] ; do
    ! [ -f "$1.tmp" ] &&
    tr <"$1" "\n" "\233" | tr -d "\r" >"$1.tmp" &&
    mv "$1" "$1~" &&
    mv "$1.tmp" "$1"
    shift
    done
    • 5: CommentAuthormono
    • CommentTime27 Aug 2011 zmieniony
     
    Hehe. ATASCII to nie tylko EOL!
    Takie:
    #!/bin/bash
    CMD=$(basename $0)

    function toascii
    {
    DATA=$(cat | xxd -c 1 -g 1 | cut -f 2 -d " ")
    for d in $DATA
    do
    if [ "$d" != "9b" ]
    then
    D=$(printf "%02x" $((0x$d & 0x7f)))
    else
    D=$d
    fi
    echo -ne "\x$D"
    done
    }

    #\x1c strzalka w gore
    #\x1d strzalka w dol
    #\x1e strzalka w lewo
    #\x1f strzalka w prawo
    #\x08 trojkat w prawym dolnym rogu
    #\x88 trojkat w lewem gornym rogu
    ATARI=$(echo -ne "\x01\x03\x05\x0c\x0e\x0f\x13\x1a\x0b{\x18\`")
    UNIX=$(echo -ne "ąćęłńóśżźŁŻŹ" | iconv -t iso8859-2)
    case "${CMD}" in
    "fromatari")
    toascii | tr "${ATARI}" "${UNIX}" | atari2unix | iconv -f iso8859-2
    ;;
    "toatari")
    iconv -t iso8859-2 | unix2atari | tr "${UNIX}" "${ATARI}"
    ;;
    *)
    echo "Usage: fromatari|toatari"
    esac
    exit 0

    Konwerter nazwałem ataricvn.sh i dołączam do niego linki symboliczne fromatari i toatari.
    Nie jestem zadowolony z tego kodu, bo jest koszmarnie wolny. Twój sposób pobierania znaków jest ładniejszy. Pozwolisz, że skorzystam :)

    Edit: atari2unix i unix2atari to zwykłe tr konwertujące EOL.
    • 6:
       
      CommentAuthorjhusak
    • CommentTime27 Aug 2011 zmieniony
     
    Pozwolę, dlatego zamieściłem. A to, że ATASCII to nie tylko eol, to wiem, jednak tak mi wystarczało :)

    Ja do przetwarzania tekstów używam tylko w zasadzie: sed i awk, tr, ew. sort połączone bashem. W bashu staram się nie używać przetwarzania, bo kilkaset znaków na sekundę to niewiele.

    Jak opiszesz dwie tablice translacji, to jedno "tr" wystarczy :)