home *** CD-ROM | disk | FTP | other *** search
/ Amiga ACS 1998 #6 / amigaacscoverdisc1998-061998.iso / games / descent / source / lib / ui.h < prev    next >
Text File  |  1998-06-08  |  14KB  |  450 lines

  1. /*
  2. THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
  3. SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
  4. END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
  5. ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
  6. IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
  7. SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
  8. FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
  9. CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
  10. AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  
  11. COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
  12. */
  13. /*
  14.  * $Source: f:/miner/source/ui/rcs/ui.h $
  15.  * $Revision: 1.11 $
  16.  * $Author: john $
  17.  * $Date: 1994/11/18 23:07:33 $
  18.  *
  19.  * Header file for user interface
  20.  *
  21.  * $Log: ui.h $
  22.  * Revision 1.11  1994/11/18  23:07:33  john
  23.  * Changed a bunch of shorts to ints.
  24.  * 
  25.  * Revision 1.10  1994/05/14  17:44:36  matt
  26.  * Added extern.
  27.  * 
  28.  * Revision 1.9  1994/05/14  17:20:33  matt
  29.  * Added externs
  30.  * 
  31.  * Revision 1.8  1994/02/01  13:29:56  john
  32.  * *** empty log message ***
  33.  * 
  34.  * Revision 1.7  1994/01/10  16:25:03  john
  35.  * Fixed bug in 800x600 mode with restoring
  36.  * bogus font.
  37.  * 
  38.  * Revision 1.6  1993/12/10  14:22:30  john
  39.  * Made buttons have up to 2 keys/functions.
  40.  * 
  41.  * Revision 1.5  1993/12/07  12:30:11  john
  42.  * new version.
  43.  * 
  44.  * Revision 1.4  1993/10/26  13:46:15  john
  45.  * *** empty log message ***
  46.  * 
  47.  * Revision 1.3  1993/10/07  11:23:30  john
  48.  * *** empty log message ***
  49.  * 
  50.  * Revision 1.2  1993/10/05  17:31:15  john
  51.  * *** empty log message ***
  52.  * 
  53.  * Revision 1.1  1993/09/20  10:36:36  john
  54.  * Initial revision
  55.  * 
  56.  *
  57.  */
  58.  
  59. #ifndef _UI_H
  60. #define _UI_H
  61.  
  62. typedef struct {
  63.     char    description[100];
  64.     char     * buttontext[17];
  65.     int    numkeys;
  66.     short keycode[100];
  67.     int     function_number[100];
  68. } UI_KEYPAD;
  69.  
  70. typedef struct
  71. {
  72.     unsigned int frame;
  73.     int type;
  74.     int data;
  75. } UI_EVENT;
  76.  
  77. #define BASE_GADGET             \
  78.     short           kind;       \
  79.     struct _gadget  * prev;     \
  80.     struct _gadget  * next;     \
  81.     struct _gadget  * when_tab;  \
  82.     struct _gadget  * when_btab; \
  83.     struct _gadget  * when_up;    \
  84.     struct _gadget  * when_down;   \
  85.     struct _gadget  * when_left;   \
  86.     struct _gadget  * when_right;  \
  87.     struct _gadget  * parent;    \
  88.     int             status;     \
  89.     int             oldstatus;  \
  90.     grs_canvas *    canvas;     \
  91.     int             hotkey;     \
  92.     short           x1,y1,x2,y2;
  93.  
  94.  
  95. typedef struct _gadget {
  96.     BASE_GADGET
  97.     unsigned char rsvd[256];
  98. } UI_GADGET;
  99.  
  100.  
  101. typedef struct  {
  102.     BASE_GADGET
  103.     int         trap_key;
  104.     int      (*user_function)(void);
  105. } UI_GADGET_KEYTRAP;
  106.  
  107. typedef struct  {
  108.     BASE_GADGET
  109.     short           width, height;
  110.     short           b1_held_down;
  111.     short           b1_clicked;
  112.     short           b1_double_clicked;
  113.     short           b1_dragging;
  114.     short           b1_drag_x1, b1_drag_y1;
  115.     short           b1_drag_x2, b1_drag_y2;
  116.     short           b1_done_dragging;
  117.     int             keypress;
  118.     short           mouse_onme;
  119.     short           mouse_x, mouse_y;
  120.     grs_bitmap *    bitmap;
  121. } UI_GADGET_USERBOX;
  122.  
  123. typedef struct  {
  124.     BASE_GADGET
  125.     short           width, height;
  126.     char            * text;
  127.     short           position;
  128.     short           oldposition;
  129.     short           pressed;
  130.     int               (*user_function)(void);
  131.     int               (*user_function1)(void);
  132.     int                 hotkey1;
  133.     int                 dim_if_no_function;
  134. } UI_GADGET_BUTTON;
  135.  
  136.  
  137. typedef struct  {
  138.     BASE_GADGET
  139.     short           width, height;
  140.     char            * text;
  141.     short           length;
  142.     short           slength;
  143.     short           position;
  144.     short           oldposition;
  145.     short           pressed;
  146.     short           first_time;
  147. } UI_GADGET_INPUTBOX;
  148.  
  149. typedef struct  {
  150.     BASE_GADGET
  151.     short           width, height;
  152.     char            * text;
  153.     short           position;
  154.     short           oldposition;
  155.     short           pressed;
  156.     short           group;
  157.     short           flag;
  158. } UI_GADGET_RADIO;
  159.  
  160.  
  161. typedef struct  {
  162.     BASE_GADGET
  163.     char                  *text;
  164.     short             width, height;
  165.     byte            flag;
  166.     byte            pressed;
  167.     byte            position;
  168.     byte            oldposition;
  169.     int             trap_key;
  170.     int              (*user_function)(void);
  171. } UI_GADGET_ICON;
  172.  
  173.  
  174. typedef struct  {
  175.     BASE_GADGET
  176.     short           width, height;
  177.    char            * text;
  178.     short           position;
  179.     short           oldposition;
  180.     short           pressed;
  181.     short           group;
  182.     short           flag;
  183. } UI_GADGET_CHECKBOX;
  184.  
  185.  
  186. typedef struct  {
  187.     BASE_GADGET
  188.     short           horz;
  189.     short           width, height;
  190.     int             start;
  191.     int             stop;
  192.     int             position;
  193.     int             window_size;
  194.     int             fake_length;
  195.     int             fake_position;
  196.     int             fake_size;
  197.     UI_GADGET_BUTTON * up_button;
  198.     UI_GADGET_BUTTON * down_button;
  199.     unsigned int    last_scrolled;
  200.     short           drag_x, drag_y;
  201.     int             drag_starting;
  202.     int             dragging;
  203.     int             moved;
  204. } UI_GADGET_SCROLLBAR;
  205.  
  206. typedef struct  {
  207.     BASE_GADGET
  208.     short           width, height;
  209.     char            * list;
  210.     int             text_width;
  211.     int             num_items;
  212.     int             num_items_displayed;
  213.     int             first_item;
  214.     int             old_first_item;
  215.     int             current_item;
  216.     int             selected_item;
  217.     int             old_current_item;
  218.     unsigned int    last_scrolled;
  219.     int             dragging;
  220.     int             textheight;
  221.     UI_GADGET_SCROLLBAR * scrollbar;
  222.     int             moved;
  223. } UI_GADGET_LISTBOX;
  224.  
  225. typedef struct _ui_window {
  226.     short           x, y;
  227.     short           width, height;
  228.     short           text_x, text_y;
  229.     grs_canvas *    canvas;
  230.     grs_canvas *    oldcanvas;
  231.     grs_bitmap *    background;
  232.     UI_GADGET *     gadget;
  233.     UI_GADGET *     keyboard_focus_gadget;
  234.     struct _ui_window * next;
  235.     struct _ui_window * prev;
  236. } UI_WINDOW;
  237.  
  238. typedef struct  {
  239.     short           new_dx, new_dy;
  240.     short           new_buttons;
  241.     short           x, y;
  242.     short           dx, dy;
  243.     short           hidden;
  244.     short           backwards;
  245.     short           b1_status;
  246.     short           b1_last_status;
  247.     short           b2_status;
  248.     short           b2_last_status;
  249.     short           b3_status;
  250.     short           b3_last_status;
  251.     short           bg_x, bg_y;
  252.     short           bg_saved;
  253.     grs_bitmap *    background;
  254.     grs_bitmap *    pointer;
  255.     unsigned int    time_lastpressed;
  256.     short           moved;
  257. } UI_MOUSE;
  258.  
  259. #define BUTTON_PRESSED          1
  260. #define BUTTON_RELEASED         2
  261. #define BUTTON_JUST_PRESSED     4
  262. #define BUTTON_JUST_RELEASED    8
  263. #define BUTTON_DOUBLE_CLICKED   16
  264.  
  265. #define B1_PRESSED          (Mouse.b1_status & BUTTON_PRESSED)
  266. #define B1_RELEASED         (Mouse.b1_status & BUTTON_RELEASED)
  267. #define B1_JUST_PRESSED     (Mouse.b1_status & BUTTON_JUST_PRESSED)
  268. #define B1_JUST_RELEASED    (Mouse.b1_status & BUTTON_JUST_RELEASED)
  269. #define B1_DOUBLE_CLICKED   (Mouse.b1_status & BUTTON_DOUBLE_CLICKED)
  270.  
  271. extern grs_font * ui_small_font;
  272.  
  273. extern UI_MOUSE Mouse;
  274. extern UI_WINDOW * CurWindow;
  275. extern UI_WINDOW * FirstWindow;
  276. extern UI_WINDOW * LastWindow;
  277.  
  278. extern unsigned char CBLACK,CGREY,CWHITE,CBRIGHT,CRED;
  279. extern UI_GADGET * selected_gadget;
  280. extern int last_keypress;
  281.  
  282. extern void Hline(short x1, short x2, short y );
  283. extern void Vline(short y1, short y2, short x );
  284. extern void ui_string_centered( short x, short y, char * s );
  285. extern void ui_draw_box_out( short x1, short y1, short x2, short y2 );
  286. extern void ui_draw_box_in( short x1, short y1, short x2, short y2 );
  287. extern void ui_draw_line_in( short x1, short y1, short x2, short y2 );
  288.  
  289.  
  290. void ui_init();
  291. void ui_close();
  292. int MessageBox( short x, short y, int NumButtons, char * text, ... );
  293. void ui_string_centered( short x, short y, char * s );
  294. int PopupMenu( int NumItems, char * text[] );
  295.  
  296. extern void ui_mouse_init();
  297. extern grs_bitmap * ui_mouse_set_pointer( grs_bitmap * new );
  298.  
  299. extern void ui_mouse_process();
  300. extern void ui_mouse_hide();
  301. extern void ui_mouse_show();
  302.  
  303. #define WIN_BORDER 1
  304. #define WIN_FILLED 2
  305. #define WIN_SAVE_BG 4
  306. #define WIN_DIALOG (4+2+1)
  307.  
  308. extern UI_WINDOW * ui_open_window( short x, short y, short w, short h, int flags );
  309. extern void ui_close_window( UI_WINDOW * wnd );
  310.  
  311. extern UI_GADGET * ui_gadget_add( UI_WINDOW * wnd, short kind, short x1, short y1, short x2, short y2 );
  312. extern UI_GADGET_BUTTON * ui_add_gadget_button( UI_WINDOW * wnd, short x, short y, short w, short h, char * text, int (*function_to_call)(void) );
  313. extern void ui_gadget_delete_all( UI_WINDOW * wnd );
  314. extern void ui_window_do_gadgets( UI_WINDOW * wnd );
  315. extern void ui_draw_button( UI_GADGET_BUTTON * button );
  316.  
  317. extern int ui_mouse_on_gadget( UI_GADGET * gadget );
  318.  
  319. extern void ui_button_do( UI_GADGET_BUTTON * button, int keypress );
  320.  
  321. extern void ui_listbox_do( UI_GADGET_LISTBOX * listbox, int keypress );
  322. extern void ui_draw_listbox( UI_GADGET_LISTBOX * listbox );
  323. extern UI_GADGET_LISTBOX * ui_add_gadget_listbox( UI_WINDOW * wnd, short x, short y, short w, short h, short numitems, char * list, int text_width );
  324.  
  325. extern void ui_mega_process();
  326.  
  327. extern void ui_get_button_size( char * text, int * width, int * height );
  328.  
  329. extern UI_GADGET_SCROLLBAR * ui_add_gadget_scrollbar( UI_WINDOW * wnd, short x, short y, short w, short h, int start, int stop, int position, int window_size  );
  330. extern void ui_scrollbar_do( UI_GADGET_SCROLLBAR * scrollbar, int keypress );
  331. extern void ui_draw_scrollbar( UI_GADGET_SCROLLBAR * scrollbar );
  332.  
  333.  
  334. extern void ui_wprintf( UI_WINDOW * wnd, char * format, ... );
  335. extern void ui_wprintf_at( UI_WINDOW * wnd, short x, short y, char * format, ... );
  336.  
  337. extern void ui_draw_radio( UI_GADGET_RADIO * radio );
  338. extern UI_GADGET_RADIO * ui_add_gadget_radio( UI_WINDOW * wnd, short x, short y, short w, short h, short group, char * text );
  339. extern void ui_radio_do( UI_GADGET_RADIO * radio, int keypress );
  340.  
  341. extern void ui_draw_checkbox( UI_GADGET_CHECKBOX * checkbox );
  342. extern UI_GADGET_CHECKBOX * ui_add_gadget_checkbox( UI_WINDOW * wnd, short x, short y, short w, short h, short group, char * text );
  343. extern void ui_checkbox_do( UI_GADGET_CHECKBOX * checkbox, int keypress );
  344.  
  345. extern UI_GADGET * ui_gadget_get_prev( UI_GADGET * gadget );
  346. extern UI_GADGET * ui_gadget_get_next( UI_GADGET * gadget );
  347. extern void ui_gadget_calc_keys( UI_WINDOW * wnd);
  348.  
  349. extern void ui_listbox_change( UI_WINDOW * wnd, UI_GADGET_LISTBOX * listbox, short numitems, char * list, int text_width );
  350.  
  351.  
  352. extern void ui_draw_inputbox( UI_GADGET_INPUTBOX * inputbox );
  353. extern UI_GADGET_INPUTBOX * ui_add_gadget_inputbox( UI_WINDOW * wnd, short x, short y, short w, short h, char * text );
  354. extern void ui_inputbox_do( UI_GADGET_INPUTBOX * inputbox, int keypress );
  355.  
  356.  
  357. extern void ui_userbox_do( UI_GADGET_USERBOX * userbox, int keypress );
  358. extern UI_GADGET_USERBOX * ui_add_gadget_userbox( UI_WINDOW * wnd, short x, short y, short w, short h );
  359. extern void ui_draw_userbox( UI_GADGET_USERBOX * userbox );
  360.  
  361.  
  362. extern int MenuX( int x, int y, int NumButtons, char * text[] );
  363.  
  364. // Changes to a drive if valid.. 1=A, 2=B, etc
  365. // If flag, then changes to it.
  366. // Returns 0 if not-valid, 1 if valid.
  367. int file_chdrive( int DriveNum, int flag );
  368.  
  369. // Changes to directory in dir.  Even drive is changed.
  370. // Returns 1 if failed.
  371. //  0 = Changed ok.
  372. //  1 = Invalid disk drive.
  373. //  2 = Invalid directory.
  374.  
  375. int file_chdir( char * dir );
  376.  
  377. int file_getdirlist( int MaxNum, char list[][13] );
  378. int file_getfilelist( int MaxNum, char list[][13], char * filespec );
  379. int ui_get_filename( char * filename, char * Filespec, char * message  );
  380.  
  381.  
  382. void * ui_malloc( int size );
  383. void ui_free( void * buffer );
  384.  
  385. UI_GADGET_KEYTRAP * ui_add_gadget_keytrap( UI_WINDOW * wnd, int key_to_trap, int (*function_to_call)(void)  );
  386. void ui_keytrap_do( UI_GADGET_KEYTRAP * keytrap, int keypress );
  387.  
  388. void ui_mouse_close();
  389.  
  390. #define UI_RECORD_MOUSE     1
  391. #define UI_RECORD_KEYS      2
  392. #define UI_STATUS_NORMAL    0
  393. #define UI_STATUS_RECORDING 1
  394. #define UI_STATUS_PLAYING   2
  395. #define UI_STATUS_FASTPLAY  3
  396.  
  397. int ui_record_events( int NumberOfEvents, UI_EVENT * buffer, int Flags );
  398. int ui_play_events_realtime( int NumberOfEvents, UI_EVENT * buffer );
  399. int ui_play_events_fast( int NumberOfEvents, UI_EVENT * buffer );
  400. int ui_recorder_status();
  401. void ui_set_playback_speed( int speed );
  402.  
  403. extern unsigned int ui_number_of_events;
  404. extern unsigned int ui_event_counter;
  405.  
  406.  
  407. int ui_get_file( char * filename, char * Filespec  );
  408.  
  409. int MessageBoxN( short xc, short yc, int NumButtons, char * text, char * Button[] );
  410.  
  411. void ui_draw_icon( UI_GADGET_ICON * icon );
  412. void ui_icon_do( UI_GADGET_ICON * icon, int keypress );
  413. UI_GADGET_ICON * ui_add_gadget_icon( UI_WINDOW * wnd, char * text, short x, short y, short w, short h, int k,int (*f)(void) );
  414.  
  415. int GetKeyCode(char * text);
  416. int DecodeKeyText( char * text );
  417. void GetKeyDescription( char * text, int keypress );
  418.  
  419. extern void menubar_init(char * filename );
  420. extern void menubar_do( int keypress );
  421. extern void menubar_close();
  422. extern void menubar_hide();
  423. extern void menubar_show();
  424.  
  425. void ui_pad_init();
  426. void ui_pad_close();
  427. void ui_pad_activate( UI_WINDOW * wnd, int x, int y );
  428. void ui_pad_deactivate();
  429. void ui_pad_goto(int n);
  430. void ui_pad_goto_next();
  431. void ui_pad_goto_prev();
  432. void ui_pad_read( int n, char * filename );
  433. int ui_pad_get_current();
  434.  
  435. void ui_barbox_open( char * text, int length );
  436. int ui_barbox_update( int position );
  437. void ui_barbox_close();
  438.  
  439. void ui_reset_idle_seconds(void);
  440. int ui_get_idle_seconds(void);
  441.  
  442. extern char filename_list[300][13];
  443. extern char directory_list[100][13];
  444.  
  445. extern int ui_button_any_drawn;
  446.  
  447. #endif
  448.  
  449. 
  450.