Oznámení

Sbalit
Aktuálně žádná oznámení.

Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

Sbalit
X
 
  • Filtr
  • Čas
  • Zobrazit
Vymazat vše
new posts

    #31
    O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

    Včera jsem hledal nějaký hezky napsaný članek o Céčku. Neoslovilo mne nic. Byl jsem překvapen jak je toho na netu málo. Asi zde již více lidí sáhne po knize co jsem u Pythonu udělal tak jednou za rok (knihu nevlastním - nebyla nutnost). Celkem mne pobavil jeden názor, kde bylo napsáno, že programovací jazyk C nedoporučuje, že už má to nejlepší za sebou.



    Z knih tedy taky nic moc výběr. Jediná co mne zaujala je: Programovací jazyk C od autorů Briana W. Kernighana a Dennise M. Ritchieho. A Ken Thompson a Dennis Ritchie C vyvinuli.
    Amiga - PMD 85

    Komentovat


      #32
      O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

      hmm pokud vladnes anglictinou a chces se drzet amigy tak mozna



      a v cestine jeste ujde stara Ucebnice jazyka C od Pavla Herouta

      Komentovat


        #33
        O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

        No tahle učebnice má 2 díly a oba v současné době jsou před rozebráním. Tedy 1. díl je teď 6. vydání... . V práci jsem ji nazahlédl. Zítra na to kouknu. Jeden z dodavatelů tvrdí, že nám 2. díl posílalo v březnu - 2 kusy. Ale to už může být prodáno. Kouknu zítra, když tak objednám a porovnám ). Angličtinou nevládnu
        Amiga - PMD 85

        Komentovat


          #34
          O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

          Doporučuju kouknout taky do Amiga Review, kdysi se tam psalo o programování v Céčku. není to sice ideální, ale máš to v češtině a základy to vysvětlí dobře.
          Pegasos II (1266MHz), 2048MB RAM, Radeon 9250 (256MB), HDD 200GB, USB 2.0, ZIP250 USB, USB floppy, SB Live!, HP LaserJet 1100, AmigaOS 4.1 Final Edition

          Komentovat


            #35
            O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

            Díky, akorát si něco o Céčku studuji na netu
            Amiga - PMD 85

            Komentovat


              #36
              O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

              Autorem citovaného textu je ExiE Přejít na původní příspěvek
              ...a v cestine jeste ujde stara Ucebnice jazyka C od Pavla Herouta
              Díky za nasměrování, oba díly již mám doma. Dle mne lepší než Programovací jazyk C od autorů Briana W. Kernighana a Dennise M. Ritchieho.
              Amiga - PMD 85

              Komentovat


                #37
                O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

                AmigaPython:

                Tak jsem si dnes potřeboval ujasnit, kterou metodu měnění stavu proměnné (pokud máme danou proměnnou mezi hodně promennými) ze dvou možných použít. A postavil jsem proti sobě práci s NTICÍ a SEZNAMEM. Zde jsou oba krátké testovací skripty:

                Code:
                #SEZNAM
                a = time.time()
                b = ["1","2","3","4","5"]
                for f in range(380000):
                    b[2] = "7"
                a = time.time() - a
                print a
                
                #NTICE
                a = time.time()
                b = "1","2","3","4","5"
                for f in range(380000):
                    b = b[:2] + ("7",) + b[3:]
                a = time.time() - a
                print a
                Měnil jsem třetí prvek proměnné "b" několikrát po sobě. Na PC jsem to dal zopakovat 1 milión krát. Přibližné čas pro SEZNAM je 0,5 vteřiny a pro NTICI 1,5 vteřiny. Spustil jsem to pod Amiga OS3 a při 1 miliónu opakování mi to hodilo memory error . Tak jsem zjistil, že to zvládne zopakovat tak 390 tisíc krát, když mám nastaveno ve winUAE 10 MB RAM. Výsledek kopíroval ten na PC. Seznam mnohonásobně předběhl samotnou NTICI. SEZNAM cca 12 vteřin, NTICE cca 45 vteřin. Já jen, že v učebnicích je doporučované převádet, když to jde hned na NTICI. A já ji přikládal asi větší důležitost, než bych měl. Pokud chceme pouze úložiště nějakých proměnných, určitě volit NTICI, jinak jít na to pomocí udělátek samotnýho Pythonu a tím je SEZNAM a vymoženosti (oproti NTICI) s ním spojené.
                Amiga - PMD 85

                Komentovat


                  #38
                  O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

                  AmigaPython:

                  Jak na grafiku pod Amigou pro lamera jako jsem já. Samotný Python nemá pod Amigou dostupné knižnice jako Tkinter (GUI Pythonu), PyGame (knižnice na 2D hry). Pokud ale nepotřebujeme přes Python vykreslovat zrovna nějaké fotografie (i když i to je možné )), ale vystačíme si s jednoduchší grafikou, můžou nám na začátek postačit ESCAPE SEKVENCE a naeditování si vlastního fontu. Na nejjemnejší grafiku se dostaneme touhle možností, pokud použijeme nejmenší možnou velikost písma (5) a dané písmo bude proporcionální. Daný znak tedy může mít šířku 1 pixelu a jsme schopni za něj dát další znak o stejné šířce. Daný znak má výšku 5 pixelů. Tohle je strop ve velikosti "bodu" vůči samotné velikosti jednoho znaku. Lama jako já si ale již s tímhle může poradit. Jak? No přeci půjdeme na to "kladivem" jako obvykle . Nejdříve jsem si potřeboval odpovědět, kolik všech kombinací potřebuji na 5 pixelů, které mi tvoří jeden znak ve vertikálním směru. Naštěstí existují i zdatnější matematici jako já a dozvěděl jsem se že jde o vzorec pro variace s opakováním a to je 2 na pátou = 32. A to se ještě dá - Pokud si tedy nadefinujeme 32 znaků se všemi kombinacemi, jsme schopni se dostat na úroveň pixelové grafiky s omezením, že barvu znaku a její pozadí můžeme měnit jen v rozmezí samotných 5 pixelů, které tvoří jeden znak. Pokud je řeč o barvě, jsme schopni bez jakékoliv změny v systému měnit první 4 barvy, přičem 1. barva je barva samotného pozadí. ESCAPE SEKVENCE nám umožnují používat ale další 4 barvy. Tedy 1. barva pozadí + 7 barev. Pokud by jsme k nim ale chtěli přistupovat s tím, že si určíme barvu číslo 5 až 8, jejich indexi jsou 4 až 7 (první barva má index 0), musíme dát WB na 8 barev, aby nám jejich barevnost seděla s barevností, jakou jim určíme (co není zrovna štastné řešení - na programy a jednoduché hry nedoporučuji, na jednoduché animce a jiné šílenosti budiž ) ).

                  Nevýhodou takto zpracované pixelové grafiky je nepřístupnost samotného textu na který by prostor byl (zabraných je jen 32 pozic z 256 možných). Ani tak samotné pozice by nebyly problém - Pythonem můžeme měnit font v průběhu programu. Ale velikost textu 5 je pro čtení opravdu nepoužitelné . Pokud se zde začnem bavit o velikosti 8 použitou v systému dle již zmíněného vzorce zjistíme, že potřebujeme 256 znaků (místo 32 u velikosti 5) a na text by nám již nezbylo místo a pokud by jsme chtěli využít jiný font o velikosti 8, obrazovka se nám automaticky smaže (při každém načtení nového fontu). Jediným kompromisem mít text spolu s grafikou by bylo tedy použití poloviny počtu znaků samotného fontu. Takže 1 pixel by byl o velikosti 2 nad sebou a to by jsme měli znaků 64 - co je i tak masakr. 32 znaků pro jednoduchou grafiku je dle mně takový rozumnejší počet (člověk nebude mít po dokončení 1 obrazku sebevražedný sklony ).

                  Dle mých pár pokusů můžu říci, že pokud se bude jednat o menší objekty, mělo by jít tímhle stylem udělat i jednoduchá animace. Třeba nějaká jednoduchá hra. K jednoduché grafice již přístup je. Dá se tedy říci, že pokud se nějak vyřeší i test stisku klávesy. I když již nějaké návrhy jak na to asi i padly, ale já to odzkoušel a nějak se nepohl dál. Tak pak řeším věci, kterými nějak hnout lze a někdy se třeba k problému vrátím.

                  Co se týče logiky nadefinování znaků. Pro snadnější oriantaci jsem použil vždy hexadecimální hodnotu pozice v dané tabulce dle počtu bodů, co svítí. Takže 1x pro 1 bod, 2x pro 2 body až 5x pro 5 bodů. Ostatní pozice jsou nevyužity. V reálu to vypadá nasledovně:

                  Klikni pro plné zobrazení obrázku

Jméno: demo5.jpg
Počet zobrazení: 1
Velikost: 53,0 KB
ID: 107442

                  Je jasné, že tohle není ideální způsob, jak přistupovat ke grafice, ale pokud je někdo lama jako já, tak je to lepší, než drátem do oka
                  Amiga - PMD 85

                  Komentovat


                    #39
                    O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

                    AmigaPython:

                    V minulém příspěvku jsem načal teorii, jak se dá relativně jednoduše přistupovat k jednoduchší grafice. Na začátek jen jedna oprava. 5 grafickích symbolů (5 znaků) z hexadecimální oblasti jejich pozic v samotné tabulce v oblasti 1x jsem přesunul do oblasti 7x. V 1x máme řídíci znaky naší Amigy a dané znaky i když jsou nadefinovány nám Python ani nezobrazí.

                    Nakreslíme si čtverec:

                    Code:
                    import os, sys
                    
                    os.system('SetFont Demo 5 PROP')             #1
                    sys.stdout.write("\f\033[10;171H")           #2
                    sys.stdout.write(250 * "\x70")               #3
                    sys.stdout.write("\033[34;171H")             #4
                    sys.stdout.write(250 * "\x74")               #5
                    
                    for f in range (10,35):                      #6
                        sys.stdout.write("\033[%s;170H\x50" % f) #7
                    
                    for f in range (10,35):                      #8
                        sys.stdout.write("\033[%s;421H\x50" % f) #9
                    A teď si jednotlivé řádky vysvětlíme. Nejdříve si naimportujeme potřebné knižnice pro práci. Tyhle knižnice jsou základní součastí Pythonu i toho pro Amigu . V 1. řádku si načteme náš nadefinovaný font, který jsme si uložili pod názvem "demo". Je to font o velikost 5 a je proporcionální. Ve 2. řádku smažeme obrazovku "\f" a přeneseme náš kurzor na pozici 10 řádku a jeho 171. bodu. Ve 3. řádku uděláme horní čáru složenou z 250 pixelů ze znaku, který je v tabulce na pozici "\x70". Stejným způsobem nakresléme i spodní čáru (řádek 4, 5). Jdeme na svislé čáry. Budeme tedy měnit pozici samotného řádku. Na řádku č.6 nám proměnná f nabyde hodnot 10 a 34 (čísla řádků). Na 7. řádku formátujeme řetezec pomocí "%" (modulo), kde na místě "%s" (string = řetězec) postupně zadáváme hodnoty v rozmezí "f" (10 až 34). Parametr 170 co je horizontální pozice znaku se nemění. Vykreslujeme znak o hodnotě "\x50". Stejným způsobem vykreslíme na řádku 8 a 9 i pravou svislou čáru čtverce. A čtverec je hotov! Jen podotknu, že raději používáme na zobrazení znaku metodu "sys.stdout.write". Metoda "print" mi při kreslení vodorovné čáry 1. pixel posouvala o jednu pozici mimo chtěnou souřadnici. Tohle vyřešilo použití samotného "sys.stdout.write".

                    Zde máme výsledek:

                    Klikni pro plné zobrazení obrázku

Jméno: ctverec.jpg
Počet zobrazení: 1
Velikost: 7,8 KB
ID: 107443
                    Amiga - PMD 85

                    Komentovat


                      #40
                      O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

                      Teda, klobouk dolu. Tohle je přímo brutální způsob řešení. Neříkej mi ale, že AmigaPython neumí spouštět obyčejné AmigaOS funkce, jako je Draw, WritePixel, SetAPen a další, které nejsou takhle brutálně harakiri? Nehledě na to, že takhle jen těžku budeš přes grafiku překreslovat další a další grafiku, také jsi omezen barvama a spoustou dalších věcí. Já byl vždy zastáncem vlastních rutin (na vše si chci přijít sám), ale tohle je teda i na mě trochu moc

                      Komentovat


                        #41
                        O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

                        Autorem citovaného textu je MarK Přejít na původní příspěvek
                        Teda, klobouk dolu. Tohle je přímo brutální způsob řešení. Neříkej mi ale, že AmigaPython neumí spouštět obyčejné AmigaOS funkce, jako je Draw, WritePixel, SetAPen a další, které nejsou takhle brutálně harakiri? Nehledě na to, že takhle jen těžku budeš přes grafiku překreslovat další a další grafiku, také jsi omezen barvama a spoustou dalších věcí. Já byl vždy zastáncem vlastních rutin (na vše si chci přijít sám), ale tohle je teda i na mě trochu moc
                        Draw, WritePixel, SetAPen - v klasických příručkách jsem to nenašel. Tohle se tváří tedy jako nějaká dodatečná knihovna? A to by mohl být problém. Nadefinovat si takhle grafický objekt není až takový problém a tedy hýbat s ním si taky dovedu představit. Překreslování není problém. Můžu udat jakoukoliv pozici s přesností na 1 pixel a to co se vykreslí později nahradí to co tam původně bylo. S tím, že jsem omezen barvama a spousty dalších vecí, jó to jo . Ano máš pravdu, jak jsem psal, tohle není rozhodně standardní řešení .
                        Amiga - PMD 85

                        Komentovat


                          #42
                          O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

                          Myslím, že Tvůj problém spočívá v tom, že chceš programovat na Amize, ale nechceš k tomu využívat Amigistické možnosti. Amiga má hromady knihovem plných funkcí, jak pro práci se soubory, tak pro práci s okny a obrazovkami, tak i s grafikou, zvukem a vším, co je potřeba. Ale k tomu se musíš naučit používat AmigaOS knihovny. Problém samozřejmě nastává, když to chceš spustit na PC... ale předpokládám, že Tvé programy stejně fungují jen na Amigách, tak se toho neboj, a trochu víc zabředni do AmigaOS... Pro obrazovky a okna se používá intuition.library, pro grafiku graphics.library, atd atd atd atd.

                          Na mém webu najdeš kompletní autodocs všech knihoven: http://kuchinka.cz/guide/

                          Komentovat


                            #43
                            O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

                            OK, ale já zatím umím pracovat jen s knižnicami pro Python. Pokud vím, tak Pythonem nenačteš knižnicu pro Amigu. To by bylo vše moc snadné . Python není pro Amigu, já to tak beru. I to co dělám pro Amigu mne stále učí dělat věci lépe a lépe. Neplést si to se způsobem vykreslování, co jsem tady naznačil, na to to opravdu neplatí. Platí to však na to, co dané vykreslování bude "hnát...". Ale i tak se malinko seznamuji s Amigou. Před pár dny jsem ani nevědel, co je to proporcionální font a teď již se s ním můžu vesele hrát.

                            Chci udělat animaci, se kterou budu spokojen. Chci se pokusit ze sebe vydat to nejlepší, tak jak jsem to dělal doteď. Pokud s tím nebudu spokojen, nepude to ven a vezmu si poučení. Před pár dny, než jsem se začal zabývat tímhle způsobem zobrazování jsem dokončil 1 logiku pro vypisování textů. Není to nic světaborného, ale když jsem to poprvé uvidel a vše fungovalo jak má, tak jsem měl slzy v očích. Já vím, pořebuje to výkon, ale plynulost provedení dané myšlenky při tom výkonu je dokonalá. Bavim se zde o využití ESCAPE SEKVENCÍ bez kterých bych daného efektu v současné době nedosáhl - zkus číst mezi řádky .

                            Jdu dle svých možností a vědomostí, ostatní bude snad časem - to se ještě uvidí. A použiju svou oblíbenou větu. Třeba s programováním seknu zítra ).
                            Amiga - PMD 85

                            Komentovat


                              #44
                              O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

                              Moc hezka prace! Zkousel jsi rychlost na bezne nerozsirene A1200?

                              Libi se mi o to vic, ze sis mezitim sam doplnil jine chybejici casti skladanky, napr. ohledne umistovani znaku (pozice mezi 00-1F opravdu nejsou dobry napad nebo ty tradicni amigacke trable s paletou v ramci WB.

                              Doplnim nekolik informaci nebo pripominek:

                              - v systemech rady 3.x si muzes byt jist jen prvnimi ctyrmi barvami, ten zbytek se muze kdykoli zmenit; nelze spolehat na dalsi barvy dle Esc sekvenci
                              - pythonovska knihovna pro pristup ke standardnim funkcim AmigaOS neni; plati min. pro 3.x
                              - musi ten font nutne byt proporcionalni, pokud stejne potrebujes fixni sirku "znaku" (1 px)?

                              A na ten test klavesnice se uz konecne podivam, to se musi prokousnout. Mezitim hodne zdaru!
                              AmigaOS // AROS

                              Komentovat


                                #45
                                O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

                                Lisiak4, dnes som sa chvilku hral a napisal som ti jednoduchu ukazku - jednu z moznosti ako by mohlo vypadat vykreslenie stvorca v C pomocou funkcii z amiga kniznic.

                                stvorecF.zip

                                Code:
                                #include <proto/intuition.h>
                                #include <proto/graphics.h>
                                #include <proto/exec.h>
                                
                                #define rp window->RPort
                                
                                         struct Screen *screen=NULL;
                                         struct Window *window=NULL;
                                         struct IntuiMessage *message;
                                         ULONG class;
                                
                                         int sirka=320,vyska=256;
                                         int x,y,z;
                                
                                void main()
                                {
                                         //wb screen struktura je tu len koli zisteniu sirky a vysky obrazovky
                                         screen=(struct Screen *)OpenWorkBench();
                                         if(screen) {
                                         sirka=screen->Width;
                                         vyska=screen->Height;
                                         }
                                
                                         // otvorenie okna
                                         window=OpenWindowTags(NULL,
                                         WA_Left,         0,
                                         WA_Top,          0,
                                         WA_Width,        sirka,
                                         WA_Height,       vyska,
                                         WA_MinWidth,     64,
                                         WA_MinHeight,    64,
                                         WA_Title,        "Okno",
                                         WA_ScreenTitle,  "Stvorec - screen title pre nase okno",
                                         WA_SimpleRefresh,TRUE,
                                         WA_Flags,        WFLG_ACTIVATE|WFLG_RMBTRAP|WFLG_DRAGBAR|
                                                          WFLG_CLOSEGADGET|WFLG_DEPTHGADGET|WFLG_SIZEGADGET,
                                         WA_IDCMP,        IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
                                         TAG_DONE);
                                         if(!window) goto Koniec;
                                
                                
                                
                                Redraw:
                                         //velkost obsahu okna
                                         sirka=window->Width-window->BorderLeft-window->BorderRight;
                                         vyska=window->Height-window->BorderTop-window->BorderBottom;
                                
                                         //stred obsahu okna
                                         x=window->BorderLeft+sirka/2;
                                         y=window->BorderTop+vyska/2;
                                
                                         //velkost stvorca = polovicka kratsej strany okna
                                         if(x<y) z=x/2; else z=y/2;
                                
                                         //vymazanie obsahu okna
                                         EraseRect(rp,window->BorderLeft,window->BorderTop,sirka+window->BorderLeft-1,vyska+window->BorderTop-1);
                                
                                         //nastavenie farby
                                         SetAPen(rp,1);
                                
                                         //vykreslenie stvorca o velkosti "z" v strede okna
                                         Move(rp,x-z,y-z);
                                         Draw(rp,x+z,y-z);
                                         Draw(rp,x+z,y+z);
                                         Draw(rp,x-z,y+z);
                                         Draw(rp,x-z,y-z);
                                
                                
                                
                                Cyklus:
                                         //test IDCMP flagov, v nasom pripade REFRESH okna a CLOSE tlacitko
                                         if(message=(struct IntuiMessage *) GetMsg(window->UserPort)) {
                                         class=message->Class;
                                         ReplyMsg((struct Message *)message);
                                         switch(class) {
                                         case CLOSEWINDOW: goto Koniec; break;
                                         case REFRESHWINDOW: goto Redraw; break;
                                         }}
                                
                                         WaitPort(window->UserPort);       // pokial sa nic nedeje, da sa do sleep modu
                                         goto Cyklus;
                                
                                
                                
                                         //ukoncenie programu, zatvorenie okna
                                Koniec:
                                         if(window) CloseWindow(window);
                                }

                                mala uprava: pred "goto Cyklus;" som zabudol na jednu dolezitu vec a to "WaitPort(window->UserPort);". Bez tohto waitu sa to zbytocne cykly a brzdi to system (je to vidiet napr. pri otvoreni adresaru). Upravenu verziu som dal aj do archivu...
                                Naposledy upravil DJM; 01.01.2014, 11:09:37.
                                Amiga 1200T (E/Box)+BlizzardPPC 603p/363+060/66+BVision PPC+256MB+KS3.1+Cocolino+Lyra 2+Fast Ata MK-IV+320GB WD Blue 3200AAJB PATA HDD(PFS3)+dvdrw+dvd+cf2ide
                                Amiga 1200+BlizzardPPC 603e/210+040/25+128MB+KS3.1+CF4GB(PFS3)

                                Komentovat

                                Zpracovávám...
                                X