kategoria: ANSI C
[#1] [C, System] Własna konsolka do debugu, kod..
Cześć,
podzielę się kodem, który kiedyś tam skleciłem,
może Komuś się przyda, albo Ktoś poszukuje czegoś podobnego..

Kod tworzy nasza własną konsolkę systemową - okno - o podanych rozmiarach, pozycji i nazwie,
i umożliwia wypisanie jakiś informacji w formacie jak printf(""); Lub innymi słowy przekierowuje
standardowe wyjście z domyślego systemowego okna na nasze.

Dlaczego więc nie skorzystać po prostu z samego printf ? Ponieważ nie wiedziałem jak zmienić rozmiar,
pozycje itp domyślego okna wyjściowego stdout - które ma zafiksowane parametry chyba systemowo..
I domyśle okno tego typu jest po pierwsze szerokie na całay ekran i bardzo krótkie co uniemożliwia
wypisanie i przeczytanie wiekszej ilosci informacji

Jeśli Ktoś wie jak zmienić te domyślne parametry, standardowego okna wyjściowego, to poproszę o info OK
wtedy tworzenie tej konsolki nie bedzie potrzebne..

Przykładowy screenshot:



Plik nagłowkowy: SYS_console.h

#ifndef __SYS_CONSOLE_H__
#define __SYS_CONSOLE_H__

// ------------------------------------
// --- Public function declarations ---
// ------------------------------------
void    SYS_console__init(const char* _info);
void    SYS_console__write(char* _input, ...);
void    SYS_console__cleanup(void);

#endif



Plik źródłowy: SYS_console.c

#include "SYS_console.h"
#include <proto/dos.h>
#include <stdio.h>

// --------------------------------
// --- Private global variables ---
// --------------------------------

// Pointer to my output console.
static BPTR    console_ptr;

// -----------------------------------
// --- Public function definitions ---
// -----------------------------------
void SYS_console__init(const char* _info)
{
    console_ptr = Open(_info, MODE_NEWFILE);
}

void SYS_console__write(char* _input, ...)
{
    char output[256];
    memset(output, 0, sizeof(output));

    va_list args;   
    va_start(args, _input);
    vsprintf(output, _input, args);
    va_end(args);

   if (console_ptr)    Write(console_ptr, output, strlen(output));
   else                printf(output);
}

void SYS_console__cleanup()
{
    if (console_ptr) 
        Close(console_ptr);
}



Przykłąd użycia: main.c

#include "SYS_console.h"

#include <proto/dos.h>


#define CON_NAME		"MyConsole..."
#define CON_X0			"30/"
#define CON_Y0			"35/"
#define CON_WIDTH		"480/" 
#define CON_HEIGHT		"280/" 
#define CON_INIT_INFO	        "CON:" CON_X0 CON_Y0 CON_WIDTH CON_HEIGHT CON_NAME


int main(int _argc, char **_argv)
{
	// Init system console.
	SYS_console__init(CON_INIT_INFO);

	// Write out some info.
	SYS_console__write("\n\nHello World...\n\n");

	int foo = 123;
	float bar = 10.0f;

	SYS_console__write("Foo is: \t%d\nBar is: \t%f\n\n", foo, bar);

	// Wait.    	
	Delay(100);

	// Cleanup console.
	SYS_console__cleanup();

	return 0;
}
1
[#2] Re: [C, System] Własna konsolka do debugu, kod..

@mateusz_s, post #1

Dwie sugestie.

Po pierwsze mieszanie podsystemów I/O z API systemu i z biblioteki standardowej C często kończy się kłopotami, albo co najmniej dziwnymi objawami. Najczęściej spowodowanymi tym, że każdy z podsystemów ma swoje buforowanie.

Po drugie, po otwarciu własnej konsoli można przekierować systemowe standardowe wyjście (a jak trzeba to i wejście) na nią, wywołując SetOutput() z dos.library. Wtedy można jechać zwyczajnie systemowym Printf().
1
[#3] Re: [C, System] Własna konsolka do debugu, kod..

@Krashan, post #2

ale nie mieszam tutaj niczego,

jeśli udalo sie otworzyć MODE_NEWFILE za pomocą systemowego Open()
to używam systemowej komendy Write(), jeśli nie to uzywa po prostu prinf z domyślnym wyjsciem.

va_args uzywane jest do obsługi formatu wielu argumentów jak przy printf...
i utworzenia stringa..
[#4] Re: [C, System] Własna konsolka do debugu, kod..

@mateusz_s, post #3

W systemie jest Printf(), który możesz użyć i z domyślnym wyjściem i ze swoją konsolą, kod się upraszcza. Z drugiej strony to debug, który pewnie w całości wywalasz w wersji ostatecznej, więc nie ma co się nadmiernie nad tym kodem znęcać...
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem