abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 03:33 | IT novinky

    Do prodeje jde tichá bezdrátová herní myš Logitech PRO X2 SUPERSTRIKE s analogovými spínači s haptickou odezvou (HITS, Haptic Inductive Trigger System). Cena je 4 459 Kč.

    Ladislav Hagara | Komentářů: 3
    7.2. 21:00 | Zajímavý projekt

    Microsoft na GitHubu zveřejnil zdrojový kód projektu LiteBox, jedná se o 'knihovní operační systém' (library OS) zaměřený na bezpečnost, využívající systémovou architekturu LVBS k ochraně jádra před útoky z uživatelského prostoru. LiteBox je napsán v Rustu a uvolněný pod licencí MIT. Projekt je teprve v rané fázi vývoje.

    NUKE GAZA! 🎆 | Komentářů: 1
    7.2. 16:11 | Zajímavý software

    BreezyBox je open-source shell a virtuální terminál pro populární jednočip ESP32. Nabízí základní unixové příkazy, sledování aktuálního pracovního adresáře (CWD), jednoduchý instalátor a spouštěč aplikací v podobě ELF binárních souborů, zabudovaný HTTP server nebo třeba ovládání WiFi - ukázka použití coby 'malého osobního počítače'. Ačkoliv je BreezyBox inspirovaný BusyBoxem, oproti němu má tento projekt několik externích závislostí, zejména na ESP-IDF SDK. BreezyBox je dostupný pod licencí MIT.

    NUKE GAZA! 🎆 | Komentářů: 0
    7.2. 16:00 | Humor

    Byl představen cross-assembler xa.sh, napsaný čistě v Bourne shell skriptu. Tento nástroj umožňuje zpracovávat assemblerový kód pro Intel 8080, přičemž je možné snadno přidat podporu i pro další architektury, například 6502 a 6809. Skript využívá pouze různé běžné unixové příkazy jako jsou awk, sed nebo printf. Skript si lze stáhnout z GitHubového repozitáře projektu.

    NUKE GAZA! 🎆 | Komentářů: 6
    6.2. 17:22 | IT novinky

    Byla představena nová verze modelu Claude Opus 4.6 od společnosti Anthropic. Jako demonstraci možností Anthropic využil 16 agentů Claude Opus 4.6 k vytvoření kompilátoru jazyka C, napsaného v programovacím jazyce Rust. Claude pracoval téměř autonomně, projekt trval zhruba dva týdny a náklady činily přibližně 20 000 dolarů. Výsledkem je fungující kompilátor o 100 000 řádcích kódu, jehož zdrojový kód je volně dostupný na GitHubu pod licencí Creative Commons.

    NUKE GAZA! 🎆 | Komentářů: 18
    6.2. 16:44 | Komunita

    Kultovní britský seriál The IT Crowd (Ajťáci) oslavil dvacáté výročí svého prvního vysílání. Sitcom o dvou sociálně nemotorných pracovnících a jejich nadřízené zaujal diváky svým humorem a ikonickými hláškami. Seriál, který debutoval v roce 2006, si i po dvou dekádách udržuje silnou fanouškovskou základnu a pravidelně se objevuje v seznamech nejlepších komedií své doby. Nedávné zatčení autora seriálu Grahama Linehana za hatecrime však vyvolává otázku, jestli by tento sitcom v současné Velké Británii vůbec vznikl.

    NUKE GAZA! 🎆 | Komentářů: 10
    6.2. 13:33 | IT novinky

    Společnost JetBrains oznámila, že počínaje verzí 2026.1 budou IDE založená na IntelliJ ve výchozím nastavení používat Wayland.

    Ladislav Hagara | Komentářů: 4
    6.2. 11:22 | IT novinky

    Společnost SpaceX amerického miliardáře Elona Muska podala žádost o vypuštění jednoho milionu satelitů na oběžnou dráhu kolem Země, odkud by pomohly zajistit provoz umělé inteligence (AI) a zároveň šetřily pozemské zdroje. Zatím se ale neví, kdy by se tak mělo stát. V žádosti Federální komisi pro spoje (FCC) se píše, že orbitální datová centra jsou nejúspornějším a energeticky nejúčinnějším způsobem, jak uspokojit rostoucí poptávku po

    … více »
    Ladislav Hagara | Komentářů: 28
    6.2. 11:11 | Nová verze

    Byla vydána nová verze 2.53.0 distribuovaného systému správy verzí Git. Přispělo 70 vývojářů, z toho 21 nových. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    6.2. 04:22 | Komunita

    Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 216. sraz, který proběhne v pátek 20. února od 18:00 v Red Hat Labu (místnost Q304) na Fakultě informačních technologií VUT v Brně na ulici Božetěchova 1/2. Tématem srazu bude komunitní komunikační síť MeshCore. Jindřich Skácel představí, co je to MeshCore, předvede nejrůznější klientské zařízení a ukáže, jak v praxi vypadá nasazení vlastního repeateru.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (19%)
     (6%)
     (0%)
     (10%)
     (26%)
     (3%)
     (4%)
     (2%)
     (12%)
     (29%)
    Celkem 809 hlasů
     Komentářů: 25, poslední 3.2. 19:50
    Rozcestník

    Interface mezi C++ a F77

    6.3.2008 10:35 | Přečteno: 1206× | Výběrový blog | poslední úprava: 10.6.2008 17:33

    Jednoduchy příklad interface mezi C++ a f77

    Minulý víkend jsem za po dlouhé době potřeboval udělat interface mezi kódem ve fortranu a kódem v C++. Jelikož jsem to již dlouho nedělal, chvíli mi trvalo, než jsem si vzpomněl, jak to udělat (neměl jsem přístup na net; při této příležitosti jsem si zas uvědomil, že bez netu jsem jako bez ruky :-( - tedy co se programování týče). Poté, co se mi to zadařilo, jsem se rozhodnul udělat si jednoduchý prográmek pro přístě, až zas budu bez netu a budu vzpomínat, jak se to dělá. Vše níže uvedené platí pro kompilátor gcc.

    Volání fortranovské rutiny z C++ je vcelku jednoduché, stačí funkci deklarovat jako externí, název je stejný jako ve fortranu, ale přídáme podtržítko. Případný parameter předáme pomocí jeho adresy:

    extern "C" {void vypisparam_(int* cislo);}
    ...
    vypisparam_(&mojeCislo);
    

    Obvykle ale potřebujeme víc. Velmi často je potřeba nějak přistupovat k proměnným ve fortranovských common blocích. Mějme následně definovaný common blok a jednoduchý fotranovský prográmek:
    test.inc:

           DOUBLE PRECISION dp1,dp2
           INTEGER int1
           COMMON/MYTEST/dp1,dp2,int1
    
    test.f:
          PROGRAM TEST
          INCLUDE 'test.inc'
          CALL NASTAV
          CALL VYPIS
          CALL VYPISPARAM(20)
          CALL VYPIS
          END
    
          SUBROUTINE NASTAV
          INCLUDE 'test.inc'
          PRINT*,'Rutina Nastav - nastavuji parametry'
          dp1 = 1.D0
          dp2 = 3.5D0
          int1 = 10
          END
    
          SUBROUTINE VYPIS
          INCLUDE 'test.inc'
          PRINT*,"Rutina Vypis:"
          PRINT*,'dp1 = ',dp1
          PRINT*,'dp2 = ',dp2
          PRINT*,'int1 = ',int1
          END
    
          SUBROUTINE VYPISPARAM(a)
          INCLUDE 'test.inc'
          INTEGER a
          dp1 = a
          dp2 = a
          int1 = a
          PRINT*,'Rutina VypisParam:'
          PRINT*,'a=',a
          END
    
    Common blok bude v C++ reprezentovat struktura. Proměnné v common bloku jsou uloženy v paměti za sebou. Inicializace tedy probíhá tak, že se ukazateli na strukturu v C++ předá adresa první proměnné common bloku z fortranu. Je proto nutné, aby proměnné ve struktuře byly stejného typu a ve stejném pořadí jako ve fortranu (pro vícerozměrná pole pak ješte je nutno dát pozor indexy). O vrácení adresy common bloku se nám postará jednoduchá fortranovská funkce:
          FUNCTION common_block_address(common_block_name)
          INCLUDE 'test.inc'
          CHARACTER*(*) common_block_name
          INTEGER common_block_address
          INTEGER aaadress
          IF(common_block_name.EQ.'MYTEST')THEN
             common_block_address = adress(dp1)
          ELSE
             PRINT*,'Neexistujici common block'
          ENDIF
          RETURN
          END
    
    Jednoduchý prográmek v C++, který volá rutiny fortranovského kódu a pracuje s proměnnými v common bloku, by mohl vypadat takto (v C++ by tedy bylo vhodnejší, abychom byli objektoví:-), vytvořit objekt, který by reprezentoval fortanovský kód):
    #include <iostream>
    
    double loc_dp1,loc_dp2;
    int loc_int1;
    
    
    struct MyTest_t{
      double dp1,dp2;
      int int1;
    };
    
    extern "C" {
      void nastav_();
      void vypis_();
      void vypisparam_(int* cislo);
    }
    
    extern "C" void* adress_(void* var){
      return var;
    }
    
    extern "C" void* common_block_address_(char*,int len);
    
    MyTest_t* fMyTest;
    void InitCommonBlock(){
      fMyTest = (MyTest_t*)common_block_address_("MYTEST",6);
    }
    
    void LocalParToFor(){
        fMyTest->dp1 = loc_dp1;
        fMyTest->dp2 = loc_dp2;
        fMyTest->int1 = loc_int1;
    }
    
    void ForToLocalPar(){
        loc_dp1 = fMyTest->dp1;
        loc_dp2 = fMyTest->dp2;
        loc_int1 = fMyTest->int1;
    }
    
    int main(){
      int aaa = 100;
      InitCommonBlock();
      nastav_();
      vypis_();
      ForToLocalPar();
      std::cout << "loc_dp1 je " << loc_dp1 << std::endl;
      std::cout << "loc_dp2 je " << loc_dp2 << std::endl;
      std::cout << "loc_int1 je " << loc_int1 << std::endl;
      vypisparam_(&aaa);
      loc_dp1 = 4.5;
      loc_dp2 = 8.3;
      loc_int1 = 15;
      LocalParToFor();
      vypis_();
      return 0;
    }
    
    Vše kompilujeme pomocí g++ a poté slikujeme dohromady společně s knihovnou gfortan, u mě např. takto:
    g++ common_block_address.o interface.o test.o -L/usr/lib/gcc/i386-redhat-linux/4.3.0/ -lgfortran        

    Hodnocení: 100 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    6.3.2008 11:14 anicka | blog: ze_zivota
    Rozbalit Rozbalit vše Re: Interface mezi C++ a F77
    Hezky clanek a pekne osklive dejavu. Staci nad clankem jen trochu privrit oci a predstavim si zdrojaky octave... :-)
    ^D
    6.3.2008 13:55 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
    Rozbalit Rozbalit vše Re: Interface mezi C++ a F77
    Sice nechapu co to dela ve vyberu, ale jinak dobry zapisek.
    Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.