home *** CD-ROM | disk | FTP | other *** search
/ Fish 'n' More 2 / fishmore-publicdomainlibraryvol.ii1991xetec.iso / disks / disk430.lzh / SmartFields / Programs / coninput / c.c < prev    next >
C/C++ Source or Header  |  1991-01-11  |  4KB  |  160 lines

  1. /************************************************
  2. *  SMART FIELDS CONSOLE INPUT TEST PROGRAM v1.0
  3. *  © Copyright 1988 Timm Martin
  4. *  All Rights Reserved
  5. *************************************************/
  6.  
  7. #include <exec/io.h>
  8. #include <exec/memory.h>
  9. #include <exec/ports.h>
  10. #include <exec/types.h>
  11. #include <graphics/gfxbase.h>
  12. #include <intuition/intuition.h>
  13. #include <intuition/intuitionbase.h>
  14. #include <console/console.h>
  15. #include <console/functions.h>
  16. #include <toolkit/toolkit.h>
  17. #include <functions.h>
  18.  
  19. /************************
  20. *  INTUITION STRUCTURES
  21. *************************/
  22.  
  23. struct IntuitionBase *IntuitionBase = NULL;
  24. struct GfxBase       *GfxBase = NULL;
  25. struct Window        *win = NULL;
  26. struct RastPort      *rp;
  27.  
  28. struct ConsoleHeader console_header;
  29.  
  30. /**************
  31. *  TEXT ARRAY
  32. ***************/
  33.  
  34. char *keys1[] = {
  35.   "BACKSPACE", "DELETE", "ESCAPE", "HELP",
  36.   "RETURN", "SHIFT_TAB", "TAB", "ALT_ESCAPE"
  37. };
  38. char *keys2[] = {
  39.   "CURSOR_UP", "CURSOR_DOWN", "CURSOR_LEFT", "CURSOR_RIGHT"
  40. };
  41. char *keys3[] = {
  42.   "SHIFT_UP", "SHIFT_DOWN", "SHIFT_LEFT", "SHIFT_RIGHT"
  43. };
  44.  
  45. /************************
  46. *  NEW WINDOW STRUCTURE
  47. *************************/
  48.  
  49. struct NewWindow new_window = {
  50.   0, 0, 640, 25, 0, 1, CLOSEWINDOW, ACTIVATE | NOCAREREFRESH |
  51.   SIMPLE_REFRESH | WINDOWCLOSE | WINDOWDEPTH | WINDOWDRAG |
  52.   WINDOWSIZING, NULL, NULL,
  53.   (STRPTR)"SmartFields Console Input Test Program v1.0",
  54.   NULL, NULL, 50, 25, 640, 200, WBENCHSCREEN
  55. };
  56.  
  57. /********************
  58. *  GLOBAL VARIABLES
  59. *********************/
  60.  
  61. #define WAIT_FOR_INPUT Wait(1L<<console_header.ReadPort->mp_SigBit|1L<<win->UserPort->mp_SigBit)
  62. #define CONSOLE_INPUT  message=(struct Message *)GetMsg(console_header.ReadPort)
  63. #define WINDOW_INPUT   imessage=(struct IntuiMessage *)GetMsg(win->UserPort)
  64. UBYTE   con_buffer[CONSOLE_BUFFER_SIZE];
  65.  
  66. /**************************
  67. *  M A I N  P R O G R A M
  68. ***************************/
  69.  
  70. main()
  71. {
  72.   open_all();
  73.   get_inputs();
  74. }
  75.  
  76. /***************
  77. *  END PROGRAM
  78. ****************/
  79.  
  80. end_program( return_code )
  81.   int return_code;
  82. {
  83.   console_close( &console_header );
  84.  
  85.   if (win)           { ClearMenuStrip( win ); CloseWindow( win ); }
  86.   if (GfxBase)         CloseLibrary( GfxBase );
  87.   if (IntuitionBase)   CloseLibrary( IntuitionBase );
  88.  
  89.   exit( return_code );
  90. }
  91.  
  92. /**************
  93. *  GET INPUTS
  94. ***************/
  95.  
  96. get_inputs()
  97. {
  98.   struct  IntuiMessage *imessage;
  99.   int     key;
  100.   struct  Message *message;
  101.   struct  Field *where;
  102.  
  103.   FOREVER {
  104.     WAIT_FOR_INPUT;
  105.  
  106.     if (CONSOLE_INPUT) {
  107.       key = console_input( &console_header );
  108.         if ((key >= 0x20 && key <= 0x7e) || (key >= 0xa0 && key <= 0xff))
  109.           printf( "%03d 0x%2x %c\n", key, key, key );
  110.         else if (key > CON_CONTROL && key <= CON_CONTROL + 0xff)
  111.           printf( "CTRL-%c\n", key - CON_CONTROL );
  112.         else if (key >= CON_F1 && key <= CON_F10)
  113.           printf( "F%1d\n", key - CON_F );
  114.         else if (key >= CON_SHIFT_F1 && key <= CON_SHIFT_F10)
  115.           printf( "SHIFT_F%1d\n", key - CON_SHIFT_F );
  116.         else if (key >= CON_BACKSPACE && key <= CON_ALT_ESCAPE)
  117.           printf( "%s\n", keys1[key-CON_BACKSPACE] );
  118.         else if (key >= CON_CURSOR_UP && key <= CON_CURSOR_RIGHT)
  119.           printf( "%s\n", keys2[key-CON_CURSOR_UP] );
  120.         else if (key >= CON_SHIFT_UP && key <= CON_SHIFT_RIGHT)
  121.           printf( "%s\n", keys3[key-CON_SHIFT_UP] );
  122.         else if (!key)
  123.           printf( "CTRL-(hyphen)\n" );
  124.         else
  125.           printf( "UNRECOGNIZABLE CHARACTER\n" );
  126.     }   /* if keyboard input */
  127.  
  128.     while (WINDOW_INPUT) {
  129.       switch (imessage->Class) {
  130.         case CLOSEWINDOW:
  131.           end_program( 0 );
  132.           break;
  133.       } /* switch */
  134.       ReplyMsg( imessage );
  135.     } /* while window messages */
  136.   }   /* forever */
  137. }
  138.  
  139. /************
  140. *  OPEN ALL
  141. *************/
  142.  
  143. open_all()
  144. {
  145.   int error;
  146.  
  147.   if (!(IntuitionBase = (struct IntuitionBase *)
  148.         OpenLibrary( "intuition.library", LIBRARY_VERSION )))
  149.     end_program( 0x0100 );
  150.   if (!(GfxBase = (struct GfxBase *) OpenLibrary( "graphics.library", 0L )))
  151.     end_program( 0x0101 );
  152.  
  153.   if (!(win = OpenWindow( &new_window )))
  154.     end_program( 0x0102 );
  155.   rp = win->RPort;
  156.  
  157.   if (error = console_open( win, &console_header, con_buffer ))
  158.     end_program( error );
  159. }
  160.