Avatar billede alex_sleiborg Nybegynder
20. oktober 2005 - 08:26 Der er 8 kommentarer og
1 løsning

Konsol program, hvor man kan fravælge ting

Jeg skal have lavet et lille konsol program i c++, som skal installere nogle forskellige ting på en linux maskine. Jeg vil gerne lave det sådan at der står en række programmer på en liste

program 1 ( )
program 2 ( )
program 3 (x)

i overstående er det program 3 der er valgt. Altså så man selv kan vælge hvad man vil have installeret. Jeg har aldrig prøvet og lave sådan noget før. Er der nogen der kender en tutorial, eller hvordan jeg skal gå igang
Avatar billede arne_v Ekspert
20. oktober 2005 - 16:39 #1
vil du bruge standard C/C++ IO eller curses ?
Avatar billede alex_sleiborg Nybegynder
24. oktober 2005 - 08:51 #2
Det ved jeg ikke. Aner ikke hvordan man laver det, kender du ikke en tutorial???

Eller et eller andet der kan sætte mig lidt igang
Avatar billede alex_sleiborg Nybegynder
03. november 2005 - 15:07 #3
Ingen der kan hjælpe mig lidt her?
Avatar billede bertelbrander Novice
03. november 2005 - 23:51 #5
Jeg har ikke en compiler med ncurses for tiden, men jeg har lavet et eksemel med windows funktioner.

#include <iostream>
#include <windows.h>

void GotoXY(int x, int y)
{
  HANDLE StdOut = GetStdHandle(STD_OUTPUT_HANDLE);
  COORD c;
  c.X = (short )x;
  c.Y = (short )y;
  SetConsoleCursorPosition(StdOut, c);
}

WORD GetChar()
{
  DWORD NumEventsRead;
  INPUT_RECORD InputRecord;
  HANDLE StdIn = GetStdHandle(STD_INPUT_HANDLE);

  while(1)
  {
      if(!ReadConsoleInput(StdIn, &InputRecord, 1, &NumEventsRead))
        return 0;
      if(InputRecord.EventType & KEY_EVENT && InputRecord.Event.KeyEvent.bKeyDown)
      {
        if(InputRecord.Event.KeyEvent.wVirtualKeyCode != VK_CONTROL &&
            InputRecord.Event.KeyEvent.wVirtualKeyCode != VK_MENU  &&
            InputRecord.Event.KeyEvent.wVirtualKeyCode != VK_SHIFT)
        {
            return InputRecord.Event.KeyEvent.wVirtualKeyCode;
        }
      }
  }
}

void ClearScreen()
{
  short i;
  HANDLE StdOut = GetStdHandle(STD_OUTPUT_HANDLE);
  CONSOLE_SCREEN_BUFFER_INFO ConsoleScreenBufferInfo;
  GetConsoleScreenBufferInfo(StdOut, &ConsoleScreenBufferInfo);
  SMALL_RECT Pos = ConsoleScreenBufferInfo.srWindow;

  DWORD D;

  for(i = Pos.Top; i <= Pos.Bottom; i++)
  {
      COORD C;
      C.X = Pos.Left;
      C.Y = i;
      FillConsoleOutputCharacter(StdOut, ' ', Pos.Right - Pos.Left, C, &D);
      FillConsoleOutputAttribute(StdOut, 0, Pos.Right - Pos.Left, C, &D);
  }
  GotoXY(0, 0);
}

struct MenuStruct
{
  const char *Title;
  const char *Program;
  bool On;
};

#define NUM_MENU 3
MenuStruct Menu[NUM_MENU] =
{
  {"Prog1", "Prog1.exe", true},
  {"Prog2", "Prog2.exe", true},
  {"Prog3", "Prog3.exe", true}
};

int main()
{
  int Key;
  do
  {
      ClearScreen();
      GotoXY(0, 0);
      for(int i = 0; i < NUM_MENU; i++)
      {
        std::cout << (i + 1) << " " << Menu[i].Title;
        if(Menu[i].On)
            std::cout << "(x)";
        else
            std::cout << "( )";
        std::cout << std::endl;
      }
      std::cout << "Hit 1 - " << NUM_MENU << " to toggle, Enter to continue";
      std::cout.flush();
      Key = GetChar();
      int t = Key - '1';
      if(t >= 0 && t < NUM_MENU)
        Menu[t].On ^= true;
  }
  while(Key != VK_RETURN);
  std::cout << std::endl;
  for(int k = 0; k < NUM_MENU; k++)
      if(Menu[k].On)
        std::cout << "Selected: " << Menu[k].Program << std::endl;
}

Du skal erstatte GotoXY, GetChar og ClearScreen med ncurses versioner.
Du kan måske få en idé til hvordan ved at kikke på:
http://home20.inet.tele.dk/midgaard/snip/cmenu.html
Avatar billede alex_sleiborg Nybegynder
15. november 2005 - 08:56 #6
Sorry. Jeg ikke lige har fået svaret før. Tak for eksemplerne, jeg finder nok ud ag noget nu. Smid et svar begge 2
Avatar billede arne_v Ekspert
15. november 2005 - 20:18 #7
ok
Avatar billede bertelbrander Novice
15. november 2005 - 23:31 #8
Jeg samler ikke på point.
Avatar billede alex_sleiborg Nybegynder
16. november 2005 - 08:17 #9
Har også lige købt en bog fra Wrox. "Beginning Linux Programmering" kan varmt anbefales hvis man er interesseret i og programmere til linux
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