home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / datafiles / text / c_manual / devices / narratordevice / example2.c < prev    next >
C/C++ Source or Header  |  1995-02-27  |  5KB  |  164 lines

  1. /***********************************************************/
  2. /*                                                         */
  3. /* Amiga C Encyclopedia (ACE) V3.0      Amiga C Club (ACC) */
  4. /* -------------------------------      ------------------ */
  5. /*                                                         */
  6. /* Book:    ACM Devices                 Amiga C Club       */
  7. /* Chapter: Narrator Device             Tulevagen 22       */
  8. /* File:    Example2.c                  181 41  LIDINGO    */
  9. /* Author:  Anders Bjerin               SWEDEN             */
  10. /* Date:    92-04-26                                       */
  11. /* Version: 1.00                                           */
  12. /*                                                         */
  13. /*   Copyright 1992, Anders Bjerin - Amiga C Club (ACC)    */
  14. /*                                                         */
  15. /* Registered members may use this program freely in their */
  16. /*     own commercial/noncommercial programs/articles.     */
  17. /*                                                         */
  18. /***********************************************************/
  19.  
  20. /* This example demonstrates how you can use a while   */
  21. /* loop to translate parts of a string until the whole */
  22. /* string has been translated.                         */
  23.  
  24.  
  25.  
  26. /* Declares the datatypes like STRPTR etc: */
  27. #include <exec/types.h>
  28.  
  29.  
  30.  
  31. /* Size of the phonetic string buffer. (This buffer */
  32. /* is very small and the phonetic string will most  */
  33. /* certainly not fit in it.)                        */
  34. #define PHONETIC_BUFFER_SIZE 30
  35.  
  36.  
  37.  
  38. /* Pointer to the translator library: */
  39. struct Library *TranslatorBase;
  40.  
  41.  
  42.  
  43. /* Declare our functions: */
  44. void main();
  45. void clean_up( STRPTR text );
  46.  
  47.  
  48.  
  49. void main()
  50. {
  51.   /* If all characters could be translated and stored */
  52.   /* in the phonetic string this variable will be set */
  53.   /* to zero. On the other hand, if some words could  */
  54.   /* not be translated since they did not fit in the  */
  55.   /* phonetic string this variable will contain a     */
  56.   /* negative value on how many characters actually   */
  57.   /* were translated.                                 */
  58.   int char_translated;
  59.   
  60.   /* This variable contsins the current position */
  61.   /* in the string which is translated:          */
  62.   int current_position;
  63.    
  64.   /* The original string: */
  65.   char *original_string =
  66.     "Dear honourable C programmer, do you like the new version of this manual? ";
  67.   
  68.   /* The phonetic string: */
  69.   char phonetic_string[ PHONETIC_BUFFER_SIZE ];
  70.  
  71.  
  72.  
  73.   /* Open the translator library: */
  74.   TranslatorBase = (struct Library *)
  75.     OpenLibrary( "translator.library", 0 );
  76.  
  77.   /* Have we successfully opened the library? */
  78.   if( !TranslatorBase )
  79.     clean_up( "Could not open the translator library!" );
  80.  
  81.  
  82.  
  83.   /* Show the user the original string: */
  84.   printf( "Original string:\n  %s\n", original_string );
  85.   printf( "Phonetic string:\n" );
  86.  
  87.  
  88.  
  89.   /* Start with the first character in the original string: */
  90.   current_position = 0;
  91.   
  92.   /* Translate (parts of) our string into phonetics: */
  93.   char_translated =
  94.     Translate( original_string,
  95.                strlen( original_string ),
  96.                phonetic_string,
  97.                PHONETIC_BUFFER_SIZE );
  98.  
  99.   /* Print the translated part: */
  100.   printf( "  %s\n", phonetic_string );
  101.  
  102.  
  103.  
  104.   /* As long as Translate() does not return zero we stay */
  105.   /* in this while loop and continues to translate the   */
  106.   /* original string into phonetics:                     */
  107.   while( char_translated )
  108.   {
  109.     /* Increase the current position in the original string:  */
  110.     /* (Remember that "char_translated" variable is negative, */
  111.     /* and we must therefore use the "-=" operator and not    */
  112.     /* the "+=" to increase the currrent position.[-- = +])   */
  113.     current_position -= char_translated;
  114.  
  115.     /* Translate the following part our string into phonetics: */
  116.     /* (Note that when we put brackets after a string we we    */
  117.     /* get the character at the specified position, but since  */
  118.     /* we want the address of that position we also have to    */
  119.     /* put the pointer "&" sign infront of the string.)        */
  120.     char_translated =
  121.       Translate( &original_string[ current_position],
  122.                  strlen( &original_string[ current_position] ),
  123.                  phonetic_string,
  124.                  PHONETIC_BUFFER_SIZE );
  125.  
  126.     /* Print the translated part: */
  127.     printf( "  %s\n", phonetic_string );
  128.   }
  129.  
  130.   /* The complete string has now been translated: */
  131.   printf( "All words have now been translated!\n" );
  132.  
  133.  
  134.  
  135.   /* Clean up and quit: */
  136.   clean_up( "The End!" );
  137. }
  138.  
  139.  
  140.  
  141. /* Close and return everything that has been */
  142. /* opened and allocated before we quit:      */
  143.  
  144. void clean_up( STRPTR text )
  145. {
  146.   /* Close the translator library: */
  147.   if( TranslatorBase )
  148.     CloseLibrary( TranslatorBase );
  149.  
  150.   /* Remember that you must ALWAYS close the libraries you have   */
  151.   /* opened. This is especially important when you are using the  */
  152.   /* translator library since it is rather large and is loaded    */
  153.   /* into memory when opened. If you forget to close this library */
  154.   /* you will waste a lot of memory which only can be recovered   */
  155.   /* when the user turns off the computer.                        */ 
  156.  
  157.   /* Print the last message: */
  158.   printf( "%s\n", text );
  159.  
  160.   /* Quit: */
  161.   exit( 0 );
  162. }
  163.  
  164.