Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Sostituire le librerie conio.h e dos.h

    Ho un scritto un programmino in c che mi comanda un dispositivo: il mio prof si è messo in testa che vuole farlo girare anche sotto Linux, dove però queste due librerie se non sbaglio non sono contemplate.

    Come posso risolvere il problema secondo voi? Esistono librerie alternative con funzioni simili in ambiente Linux? O sono nella m...a?

    Dovevo postare il messaggio sul forum di programmazione? O qualcuno mi sa rispondere anche qui?

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    75
    allora librerie come la conio.h in linux non hanno molto senso di esistere. la dos.h neppure c'è. Che funzioni devi usare di 'ste librerie?

  3. #3
    Guarda, ti allego direttamente il sorgente in c: guarda tu se riesci a darmi una mano.

    http://digilander.libero.it/PCCAN.C

  4. #4

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    75
    allora devi includere questi header (+ o -, qualk1 forse nn serve):
    #include <stdio.h>
    #include "stdlib.h"
    #include "stddef.h"
    #include <unistd.h>

    #include <asm/io.h>

    devi dichiarare ogni funzione di cui nn hai messo il tipo void che se no il compilatore nn te lo accetta
    invece di print_fold_status() { => void print_fold_status() {
    devi sostituire l'unica getch() con una getchar() o una fgetc vedi un po' tu, la getchar va bene. (man getchar)
    dei mettere il main in fondo o aggiungere le dichiarazioni delle funzioni all'inizio prima del main tipo così

    void caninit(void);
    void transmit(message *package);
    void receive(message *package);
    void help();
    void decode(message *rcvmessage, message *xmitmessage);
    void print_status();
    void print_fold_status();
    void readkey();
    main() { ...

    infine devi sostituire tutte le outp/inp con outb/inb e scambiare i parametri, cioè in standar C ISO si usa outb(valore, registro_di_memoria)
    es: outp(CONT_REG, 0x00); => outb(0x00. CONT_REG);

    se il prog deve esseere avviato ti ci vorrà un'apertura delle porte a basso livello con una roba del tipo ad esempio:
    if(ioperm(BASEADDR,7,1)!=0) //apre dalla 3F8 alla 3FE
    {
    error_buf=strerror(errno);
    fprintf(stderr,"\nioperm(0x3F8,7,1):"%s\"\n",error _buf);
    exit(1);
    }
    e per richiuderle alla fine una
    if(ioperm(BASEADDR,7,0)!=0);//chiude dalla 3F8 alla 3FE
    insomma c'è parecchia roba da sistemare, ma tutto quello che ti ho detto dovrebbe essere propio tutto.

  6. #6
    grazie dell'aiuto, ma a quanto pare c'è ancora qualcosa che non va:

    1) la funzione kbhit() non è presente in nessuno degli include indicati.

    2) alcune funzioni inb() e outb() vengono viste da Gcc come __inb() e __outb(), cioè ci mette due trattini davanti, mentre qualche outb() diventa addirittura __outbc() : penso sia una questione di caratteri non riconosciuti dal compilatore, qualcuno è capitato nella stessa situazione?

    Richiesta per i moderatori: probabilmente è da spostare nel forum della programmazione.

  7. #7
    ho risolto il problema dei trattini, ma le funzioni inb() e outb() continua a non riconoscerle:

    in effetti se faccio whereis asm/io.h mi dice che non è presente.. è possibile? Come faccio per metterlo nella directory include?

    Qualche buon'anima può darmi una mano?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.