Newbie Question--Inputing Data
Matt Ward

Hi there,
I'm new to these forums and Allegro itself.
I am creating a program in which I am using Allegro to graph basic math functions. I am accomplishing this by a simple loop of putpixel()'s in which I step the x value up each loop. My y value for putpixel() is obtained through the formula y=(a+(x*b)+(x*x*c)+(x*x*x*d)+(x*x*x*x*e)) where a, b, c, d, and e are doubles. I would really like to allow the user to enter values for these doubles so that they can choose the shape of the graph, but I can't seem to figure out how to that. I know the C++ reserved word cin does not work in Allegro. Is there something similar that I could use in Allegro? I have looked through a bunch of tutorials and FAQ's and I haven't found anything. Could someone either show me what command I should use or point me in the right direction.
Thanks,
Matt

spork222

You'd have to use either key[KEY_whatever] or readkey() (most likely readkey) to obtain user input key by key then take that data and use it for something. Sorry I can't help more than that; I haven't actually done this myself, just how to do it.:'(

Matt Ward

Looking at both key[] and readkey(), it appears they both only accept input from one key. If I wanted to type a number like 1.34 (or any other double), wouldn't it just accept the first key pressed? Is there a way to tie multiple "pressings"? (excuse my non-C++ jargon )

Another thought, in my college C++ class, we learned to import data from other programs using #include <fstream>. Although that doesn't work, is there away for Allegro to access data from other programs?

Thanks Again!
Matt

LennyLen
Quote:

If I wanted to type a number like 1.34 (or any other double), wouldn't it just accept the first key pressed? Is there a way to tie multiple "pressings"?

Read the input key by key and save it in a buffer. Then when the user has hit ENTER (or whtever you want to use to terminate input), convert the contents of the buffer to a numeric format.

miran

Or use the Allegro GUI routines, most notably

Matt Ward said:

...import data from other programs using #include <fstream>. Although that doesn't work...

What's not working with fstream? Using it in your code concurrently with Allegro, or fstream "doesn't work at all"?

 1 #include 2 #include 3 4 using namespace std; 5 6 int main(void) 7 { 8 int input; 9 int result; 10 11 // ifstream means input from file 12 ifstream fin; 13 // ostream means output to file 14 ofstream fout; 15 16 fin.open("input_file.txt"); 17 fout.open("output_file.txt"); 18 19 // Grab data until the end of file (EOF) is reached 20 fin >> input; 21 while (!fin.eof()) 22 { 23 if (input < 100) 24 result = input + 100; 25 else 26 result = input; 27 28 fout << result; 29 fin >> input; 30 } 31 fin.close(); 32 fout.close(); 33 34 return 0; 35 }

Dorianin

...but i just spent 15 minutes looking through my dev files and i think it may be deleted.(check,oh gods, check before delete!)...

someone here should know it, since i got it from the code gallery, although the link seems to be broken...

..there was a couple of lines of hexidecimal magic, to take the actual ascii value of the keypress and put it into a string, inside a loop that went till enter.

...try the code gallery, theres only 3 files there...you should recognize the one...:)

Three Harris

I am not sure but I think this is the snipit you want.

 1 #include 2 3 #define BUFFERSIZE 128 4 #define WHITE makecol(255, 255, 255) 5 #define BLACK makecol(0,0,0) 6 7 int main() 8 { 9 /* typical Allegro initialization */ 10 allegro_init(); 11 install_keyboard(); 12 set_gfx_mode(GFX_AUTODETECT_WINDOWED,640,480,0,0); 13 14 char edittext[BUFFERSIZE]; 15 int caret = 0; 16 BITMAP *buffer = create_bitmap(200,20); 17 //clean out string 18 int i; 19 for(i=0;i = '\0'; 21 //text loop 22 do { 23 if(keypressed()) { 24 int newkey = readkey(); 25 char ASCII = newkey & 0xff; 26 char scancode = newkey >> 8; 27 /* a character key was pressed; add it to the string */ 28 if(ASCII >= 32 && ASCII <= 126) { 29 if(caret < BUFFERSIZE - 1) { 30 edittext[caret] = ASCII; 31 caret++; 32 edittext[caret] = '\0'; 33 } 34 } 35 else if(scancode == KEY_BACKSPACE) { 36 if (caret > 0) caret--; 37 edittext[caret] = '\0'; 38 } 39 } 40 /* all drawing goes here */ 41 clear_to_color(buffer,WHITE); 42 textout_ex(buffer,font,edittext,5,(buffer->h / 2) - 4,BLACK,-1); 43 vline(buffer,(caret*8) + 6,(buffer->h / 2) - 6,(buffer->h / 2) + 5,BLACK); 44 vline(buffer,(caret*8) + 7,(buffer->h / 2) - 6,(buffer->h / 2) + 5,BLACK); 45 blit(buffer,screen,0,0,25,15,300,200); 46 } while(!key[KEY_ENTER]); 47 48 destroy_bitmap(buffer); 49 allegro_exit(); 50 return 0; 51 } 52 END_OF_MAIN();

Neil Walker

Why code when the allegro wiki is there for you

http://awiki.tomasu.org/bin/view/Main/TextInputC

there's a c++ version as well.

Three Harris
Quote:

Why code

That is basicly identical code.

 But I didn't have that link so thanks.