Autor Wątek: Prosta animacja ascii ?  (Przeczytany 6205 razy)

Offline _user

  • Użytkownik

# Maj 15, 2015, 17:53:45
Ok juz znalazlem na wikipedii.
Ale to \r dziala tylko jesli chce animowac jedna linie a co z tym moim "obrazkiem" ? on ma pare linii tekstu, jak wrocic do pierwszej zeby w tym samym miejscu wyswietlic znowu cos na pare linii ?
« Ostatnia zmiana: Maj 15, 2015, 17:58:54 wysłana przez _user »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Kos

  • Użytkownik
    • kos.gd

# Maj 15, 2015, 18:05:52
Tutaj masz trochę info.

Wiesz że kiedyś zbanowali lmgtfy na Stacku? :)

W zasadzie zbanowali nie tylko to. Moderacja jest tam całkiem aktywna i wprowadzają też inne filtry na popularne zjawiska kulturowe.

Offline _user

  • Użytkownik

# Maj 15, 2015, 18:11:40
imgtfy powinien byc zbanowany razem z google - wszedzie ;d

Okej ale jesli ktos bedzie wiedzial jak moge zanimowac ten moj pierwszy kod gdzie output sklada sie z paru linii a nie jednej to byloby niezle

Offline Xirdus

  • Moderator

# Maj 15, 2015, 18:41:28
Ok juz znalazlem na wikipedii.
Ale to \r dziala tylko jesli chce animowac jedna linie a co z tym moim "obrazkiem" ? on ma pare linii tekstu, jak wrocic do pierwszej zeby w tym samym miejscu wyswietlic znowu cos na pare linii ?
Ogólnie z \r jest sporo problemów i zachowanie jest dość nieprzewidywalne, podobnie jak z \b. Raz działa, raz nie. Dlatego polecam albo czyszczenie ekranu, albo w ostateczności ANSI Escape Codes. A jeśli ma się narodzić z tego coś konkretnego, to załadować klątwy.

Wiesz że kiedyś zbanowali lmgtfy na Stacku? :)
Bo ludzie nie umieją z LMGTFY korzystać - trzeba to robić, kiedy pierwszy wynik bezpośrednio prowadzi do odpowiedzi na pytanie, a dany wątek nie ma szans przebić się na szczyt. SO ma bardzo duży PageRank, więc jest to tam problematyczne - ale za to Warsztat nigdy chyba nie wypozycjonuje się wyżej jak Wikipedia, a w szczególności artykuły zatytułowane identycznie jak wyszukiwana fraza.

imgtfy powinien byc zbanowany razem z google - wszedzie ;d
Jak nie chcesz tych linków dostawać to musisz nauczyć się szukać samemu ;)

Offline _user

  • Użytkownik

# Maj 15, 2015, 18:52:25
No dobrze ale te 0x0D z ascii escape codes tez nie zalatwia sprawy bo tez cofa o jedna linie a co zrobic jak chce cofnac o pare linii ? wtedy tylko klątwy mi zostaja ?
« Ostatnia zmiana: Maj 15, 2015, 18:54:01 wysłana przez _user »

Offline Xirdus

  • Moderator

# Maj 15, 2015, 19:04:25
Nie wiem skąd ty wziąłeś to 0x0D, ale istnieje 9 różnych escape code'ów działających w różny sposób, każdy przyjmujący jakieś argumenty, które nadają się to przesuwania kursora po ekranie, oraz dwa które czyszczą terminal. Ciebie zapewne interesują kody H oraz J.

Offline _user

  • Użytkownik

# Maj 15, 2015, 19:18:19
czyli sa takie escape kody ktore moga cofnac kursor o pare linii tak ?

Offline Xirdus

  • Moderator

# Maj 15, 2015, 19:20:11
Wszystko masz podane w tym artykule.

Offline _user

  • Użytkownik

# Maj 15, 2015, 19:41:04
z tego artykulu wnioskuje ze to powinno wygladac tak:
int main(void){
  char *wiatrak="\\|/-";
  int limit=strlen(wiatrak);
  int index=0;
  while(1){
    ESC[1D;
    printf("%c",wiatrak[index]);
    index++;
    index%=limit;
    sleep(1);
    fflush(stdout);
  }
  return 0;
}
ale jednak nie dziala... jak to sie powinno pisac ? nie moge rozkminic po tym co jest napisane na wiki

Offline Kos

  • Użytkownik
    • kos.gd

# Maj 15, 2015, 20:06:16
Z tego artykułu wnioskuję że:

Cytuj
The Win32 console does not support ANSI escape sequences at all.

(chyba że siedzisz na linuksie?)

Poza tym ESC[1D to nie jest składnia C, tylko to co musisz wyprintować (ESC oznacza bajt 0x1B).
« Ostatnia zmiana: Maj 15, 2015, 20:08:41 wysłana przez Kos »

Offline _user

  • Użytkownik

# Maj 15, 2015, 20:11:25
No w tym temacie bylo pare razy ze uzywam gnu/linuxa, zreszta widac po bibliotece jaka mam w include.
czytalem tez ten artykul https://en.wikipedia.org/wiki/Escape_Sequences_in_C i stad wlasnie mialem te 0x0D ktore podawalem jako argument do print f, ale to przesuwa tylko o jedna linie, nie wiem jak moge sobie wybrac zeby przesuwalo odrazu do 1 linii w ogole, albo o okreslona liczbe linii. ESC oznacza bajt 0x1B ale co jesli ma byc ESC[1D ? i czy wgl ma tak byc ? Skad wiedziec co wyprintowywac

https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_codes tu jest tabela jakas ale to znowu jakies CSI co tez nie wiem co to jest i ta tabele nawet rozumiem ale nie wiem jak to wyprintowac.
« Ostatnia zmiana: Maj 15, 2015, 20:18:45 wysłana przez _user »

Offline Xirdus

  • Moderator

# Maj 15, 2015, 20:22:50
ESC nie jest drukowalny, więc trzeba wypisać go heksadecymalnie. Ale reszta jest już drukowalna więc wpisujesz je normalnie - czyli cały string to będzie "\x1B[1D".

Offline _user

  • Użytkownik

# Maj 15, 2015, 20:29:06
a jak to wyprintowac ? Takie cos nie dziala - printf("%c\x1B[1D",wiatrak[index]);  -

Offline voytech

  • Użytkownik

# Maj 15, 2015, 22:04:44
tak sobie sprawdzam escape cody i zrobiłem coś takiego:
Kod: (c) [Zaznacz]
#include<stdio.h>
#include<unistd.h>

int main(void){
int index=0;
while(1){
printf("\e[1J\e[3;35HMenu \e[5;10H1) Menu 1 \e[7;10H2) Menu 2\e[20;1Hprompt>  ");
printf("\b%c","\\|/-"[index++&3]); //wiatrak
fflush(stdout);
sleep(1);
}
return 0;
}

"\e"  można zastąpić "\x1b"
"\e[1J" - czyści ekran
"\e[5;10H" - ustawia kursor w miejsce o współrzędnych 5,10 (line, column)


taki sam rezultat (bez wiatraka) w konsoli daje komenda:
$ echo "^[[1J^[[3;35HMenu ^[[5;4H 1) Menu 1 ^[[7;4H 2) Menu 2^[[20;1H>"

^[   <- to jest escape: CTRL-V + ESC

Offline _user

  • Użytkownik

# Maj 15, 2015, 22:17:02
Wow, niezle dzieki.

Ale co do tego:
taki sam rezultat (bez wiatraka) w konsoli daje komenda:
$ echo "^[[1J^[[3;35HMenu ^[[5;4H 1) Menu 1 ^[[7;4H 2) Menu 2^[[20;1H>"
Ja gdy podaje taka komende,output wyswietla mi dokladnie to samo, czyli:
^[[1J^[[3;35HMenu ^[[5;4H 1) Menu 1 ^[[7;4H 2) Menu 2^[[20;1H>

o to chodzilo, to ma wyswietlac terminal przy tej komendzie ?