Hello World

Discussion of chess software programming and technical issues.

Moderators: hgm, Rebel, chrisw

User avatar
hgm
Posts: 27811
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Hello World

Post by hgm »

Does anyone happen to know an example of a "Hello World" program in plain C that speaks the sentence using the Windows SAPI?
User avatar
JuLieN
Posts: 2949
Joined: Mon May 05, 2008 12:16 pm
Location: Bordeaux (France)
Full name: Julien Marcel

Re: Hello World

Post by JuLieN »

Here it is (Windows in all its concision...) :

Code: Select all

/*

  WINHELLO.C
  ==========
  (c) Paul Griffiths 1999
  Email: mail@paulgriffiths.net

  "Hello, world!", Win32 style.

*/

#include <windows.h>

LRESULT CALLBACK WndProc&#40;HWND, UINT, WPARAM, LPARAM&#41;;


/*  WinMain&#40;), our entry point  */

int WINAPI WinMain&#40;HINSTANCE hInstance, HINSTANCE hPrevInstance,
		   LPSTR szCmdLine, int iCmdShow&#41; &#123;
    static char szAppName&#91;&#93; = "winhello";
    HWND        hwnd;
    MSG         msg;
    WNDCLASSEX  wndclass;


    /*  Fill in WNDCLASSEX struct members  */

    wndclass.cbSize         = sizeof&#40;wndclass&#41;;
    wndclass.style          = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc    = WndProc;
    wndclass.cbClsExtra     = 0;
    wndclass.cbWndExtra     = 0;
    wndclass.hInstance      = hInstance;
    wndclass.hIcon          = LoadIcon&#40;NULL, IDI_APPLICATION&#41;;
    wndclass.hIconSm        = LoadIcon&#40;NULL, IDI_APPLICATION&#41;;
    wndclass.hCursor        = LoadCursor&#40;NULL, IDC_ARROW&#41;;
    wndclass.hbrBackground  = &#40;HBRUSH&#41; GetStockObject&#40;WHITE_BRUSH&#41;;
    wndclass.lpszClassName  = szAppName;
    wndclass.lpszMenuName   = NULL;

    
    /*  Register a new window class with Windows  */

    RegisterClassEx&#40;&wndclass&#41;;


    /*  Create a window based on our new class  */

    hwnd = CreateWindow&#40;szAppName, "Hello, world!",
			WS_OVERLAPPEDWINDOW,
			CW_USEDEFAULT, CW_USEDEFAULT,
			CW_USEDEFAULT, CW_USEDEFAULT,
			NULL, NULL, hInstance, NULL&#41;;


    /*  Show and update our window  */

    ShowWindow&#40;hwnd, iCmdShow&#41;;
    UpdateWindow&#40;hwnd&#41;;


    /*  Retrieve and process messages until we get WM_QUIT  */

    while ( GetMessage&#40;&msg, NULL, 0, 0&#41; ) &#123;
	TranslateMessage&#40;&msg&#41;;    /*  for certain keyboard messages  */
	DispatchMessage&#40;&msg&#41;;     /*  send message to WndProc        */
    &#125; 


    /*  Exit with status specified in WM_QUIT message  */

    return msg.wParam;
&#125;


/*  Window procedure  */

LRESULT CALLBACK WndProc&#40;HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam&#41; &#123;
    PAINTSTRUCT ps;
    HDC         hdc;

    
    /*  Switch according to what type of message we have received  */

    switch ( iMsg ) &#123;
    case WM_PAINT&#58;

	/*  We receive WM_PAINT every time window is updated  */

	hdc = BeginPaint&#40;hwnd, &ps&#41;;
	TextOut&#40;hdc, 100, 100, "Hello, world!", 13&#41;;
	EndPaint&#40;hwnd, &ps&#41;;
	return 0;

    case WM_DESTROY&#58;

	/*  Window has been destroyed, so exit cleanly  */

	PostQuitMessage&#40;0&#41;;
	return 0;
    &#125;


    /*  Send any messages we don't handle to default window procedure  */
    
    return DefWindowProc&#40;hwnd, iMsg, wParam, lParam&#41;;
&#125;
Source: http://www.paulgriffiths.net/program/c/winhello.php
"The only good bug is a dead bug." (Don Dailey)
[Blog: http://tinyurl.com/predateur ] [Facebook: http://tinyurl.com/fbpredateur ] [MacEngines: http://tinyurl.com/macengines ]
User avatar
hgm
Posts: 27811
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: Hello World

Post by hgm »

This does not speak, does it? It only prints.
User avatar
JuLieN
Posts: 2949
Joined: Mon May 05, 2008 12:16 pm
Location: Bordeaux (France)
Full name: Julien Marcel

Re: Hello World

Post by JuLieN »

hgm wrote:This does not speak, does it? It only prints.
Oh, sorry, I thought that was a figure of speech, when you wrote "speaks"...

But I guess you probably yet saw Microsoft's SAPI tutorial ?
http://msdn.microsoft.com/en-us/library ... s.85).aspx

It's all C++ though...
"The only good bug is a dead bug." (Don Dailey)
[Blog: http://tinyurl.com/predateur ] [Facebook: http://tinyurl.com/fbpredateur ] [MacEngines: http://tinyurl.com/macengines ]
User avatar
hgm
Posts: 27811
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: Hello World

Post by hgm »

Indeed, that is the problem. I would need an example how to make it work from a C program. (In particular, WinBoard for the visually impaired...)
User avatar
JuLieN
Posts: 2949
Joined: Mon May 05, 2008 12:16 pm
Location: Bordeaux (France)
Full name: Julien Marcel

Re: Hello World

Post by JuLieN »

hgm wrote:Indeed, that is the problem. I would need an example how to make it work from a C program. (In particular, WinBoard for the visually impaired...)
That explains where the Winboard users come from! ^^

(Sorry, H.G., I had to make the joke! :oops: )
"The only good bug is a dead bug." (Don Dailey)
[Blog: http://tinyurl.com/predateur ] [Facebook: http://tinyurl.com/fbpredateur ] [MacEngines: http://tinyurl.com/macengines ]
Sven
Posts: 4052
Joined: Thu May 15, 2008 9:57 pm
Location: Berlin, Germany
Full name: Sven Schüle

Re: Hello World

Post by Sven »

hgm wrote:Indeed, that is the problem. I would need an example how to make it work from a C program. (In particular, WinBoard for the visually impaired...)
Try the bottom of this article. I have not installed the SAPI SDK so I could not compile it. But it looks plausible. You need to remove the "::" qualifiers, define COBJMACROS, change the calls "pVoice->..." into "ISpVoice_...", and hope for the best :-)

Be sure to fix the syntax error near the end of the line containing "CoCreateInstance". Also watch out for necessary #include-s.

Sven
Sven
Posts: 4052
Joined: Thu May 15, 2008 9:57 pm
Location: Berlin, Germany
Full name: Sven Schüle

Re: Hello World

Post by Sven »

JuLieN wrote:
hgm wrote:This does not speak, does it? It only prints.
Oh, sorry, I thought that was a figure of speech, when you wrote "speaks"...

But I guess you probably yet saw Microsoft's SAPI tutorial ?
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

It's all C++ though...
Link fixed.
Pierre Bokma
Posts: 31
Joined: Tue Dec 07, 2010 11:19 pm
Location: Holland

Re: Hello World

Post by Pierre Bokma »

I am not sure if this is what you mean but Petzold Programming for windows 95 has an example of a speaking program in chapter 1.

Let me know please if you are interested then i go look it up for you.

groeten
Pierre
rjgibert
Posts: 317
Joined: Mon Jun 26, 2006 9:44 am

Re: Hello World

Post by rjgibert »

You can execute C++ code from a c program:
http://dsc.sun.com/solaris/articles/mix ... cpp_from_c

Here there is a SAPI hello world program in C++:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Or if as want to do things directly, this thread is about using SAPI 5.3 in c:
http://cboard.cprogramming.com/c-progra ... api-c.html

or you could use a TTS written for c:
http://www.speech.cs.cmu.edu/flite/index.html

Good luck!

EDIT: The 2nd and 3rd links appear to duplicate links already provided in this thread so you may find clicking on them to be redundant. FYI