Avatar billede bundgas Nybegynder
08. februar 2005 - 14:15 Der er 4 kommentarer

Dos til win

Hej. Sidder og bikser med et program som skal konventeres fra dos overtil at kunne kører i win98. Pt fungerer den ved at bruge bios indstilerne til at arbejde med com portene. I win98 virker prgrammet ikke da den ikke bruger bios til at kommunikere. Nogen som kan hjælpe?
Avatar billede bertelbrander Novice
08. februar 2005 - 19:50 #1
Normalt åber man porten med CreateFile, og læser med ReadFile samt skriver med WriteFile.

Du kan se et simpelt eksempel her:
http://home20.inet.tele.dk/midgaard/snip/modem.html

Du skal dog være klar over at strenge timings krav kan være svære at imødekomme med den metode.
Avatar billede bundgas Nybegynder
09. februar 2005 - 07:20 #2
Ja det ved jeg godt men der ligger meget mere end bare det.

Eks

#include <bios.h>
#include <conio.h>
#include <stdio.h>
#include <time.h>

void prompt(void)        // Venter p† at S melder tilbage med -->
{
  do
  {
    status1 = bioscom(3, 0, COM1);
    if (status1 & DATA_READY)        // Svar fra S
    {
      if ((out1 = bioscom(2, 0, COM1) & 0x7F) != 0)
      {
    textcolor(RED);
    putch(out1);
    bioscom(1, out1, COM2);
      }
    }
  } while (out1 != '>');
}

void send(void)
{
  int a;
  bioscom(1, 0x5c, COM1);    // '\'
  bioscom(1, 0x20, COM1);    // ' '
  bioscom(1, 0x30, COM1);    // '0'
  bioscom(1, 0x0d, COM1);    // CR
  bioscom(1, 0x0a, COM1);    // LF
  prompt();

  bioscom(1, 0x4d, COM1);    // 'M'
  bioscom(1, 0x4f, COM1);    // 'O'
  bioscom(1, 0x56, COM1);    // 'V'
  bioscom(1, 0x45, COM1);    // 'E'
  for (a=1; a<6; a++)
  {
    bioscom(1, buf[a], COM1);
  }
  prompt();

  bioscom(1, 0x5c, COM1);    // '\'
  bioscom(1, 0x20, COM1);    // ' '
  bioscom(1, 0x32, COM1);    // '1'
  bioscom(1, 0x0d, COM1);    // CR
  bioscom(1, 0x0a, COM1);    // LF
  prompt();

  bioscom(1, 0x4d, COM1);    // 'M'
  bioscom(1, 0x4f, COM1);    // 'O'
  bioscom(1, 0x56, COM1);    // 'V'
  bioscom(1, 0x45, COM1);    // 'E'
  for(a=1; a<6; a++)
  {
    bioscom(1, buf[a], COM1);
  }
  prompt();
}


void main(void)
{

  clrscr();

  bioscom(0, SETTINGS1, COM1);
  bioscom(0, SETTINGS2, COM2);

  printf("\n... COM1 - COM2 Fylde ...\n");


  while (!DONE)
  {
    status1 = bioscom(3, 0, COM1);
    if (status1 & DATA_READY)        // Svar fra S
    {
      if ((out1 = bioscom(2, 0, COM1) & 0x7F) != 0)
      {
    textcolor(RED);
    putch(out1);
    bioscom(1, out1, COM2);
      }
    }

    if (kbhit())
    {
      if ((in1 = getch()) == '\x1B')
    DONE = TRUE;
      else
    bioscom(1, in1, COM1);        // sender p† COM1
    }


    status2 = bioscom(3, 0, COM2);

    if (status2 & DATA_READY)        // Svar fra X
      if ((out2 = bioscom(2, 0, COM2) & 0x7F) != 0) // hvis der er data
      {
    textcolor(GREEN);
    buf[i] = out2;            // saml data op i buffer

    if (out2 == 0x0A)        // Slut p† streng
    {
      if (buf[1] <= '9' && buf[1] >= '0')
      {
        send();            // SEND MOVE COMMAND til begge
      }
      else
      {
        for (t=0; t<=i; t++)    // Send hele bufferens indhold
        {
          putch(buf[t]);
          bioscom(1, buf[t], COM1);
        }
      }
      i = -1;
    }
    i++;
      }
  }
}
Avatar billede bertelbrander Novice
09. februar 2005 - 20:20 #3
Hvis du blot vil checke om der er karakterer der venter sætter du timeout til 0, så returnerer ReadFile med det samme, og fortæller hvor mange karakterer der venter. Se:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devio/base/setcommtimeouts.asp

Du kan sætte farven på skærmen med SetConsoleTextAttribute, først skal du have fat i en handle til stdout, det gøres med GetStdHandle.
Der er et eksempel her:
http://home20.inet.tele.dk/midgaard/snip/pacman.html
Der finder du også emulering af kbhit, clrscr osv.
Avatar billede bundgas Nybegynder
10. februar 2005 - 09:10 #4
Prøver lige at bikse lidt med det men på forhånd tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester