home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / text / golded / data / tools / gedscan / guide.c < prev    next >
C/C++ Source or Header  |  1995-02-27  |  2KB  |  77 lines

  1. /* -----------------------------------------------------------------------------
  2.  
  3.   Example: scan handler looking for AmigaGuide nodes (DICE-C). Scan handlers are 
  4.   plain functions loadSeg'ed by GED: no standard C startup code and no library
  5.   calls.
  6.  
  7.   Exemple: gestionnaire de scan recherchant des nodes AmigaGuide (DICE-C).
  8.   Les gestionnaires de scan sont des fonctions plain (LoadSeg'ées par GED):
  9.   pas de code de départ C standard, pas d'appel bibliothèque.
  10.   
  11.   DICE C (-ms1 makes DICE compiler put string constants into code hunk):
  12.   
  13.   dcc guide.c -// -l0 -md -ms1 -mRR -o ram:Guides
  14.  
  15.   ------------------------------------------------------------------------------
  16. */
  17.  
  18. #include <exec/types.h>
  19.  
  20. #define UPPER(a) ((a) & 95)
  21.  
  22. ULONG
  23. ScanHandlerGuide(__D0 ULONG len, __A0 char **text)
  24. {
  25.     const char *version = "$VER: Guides 1.1 (21.7.94)";
  26.  
  27.     if (**text == '@') {
  28.  
  29.         if (len > 4) {
  30.  
  31.             UBYTE *next = *text + 1;
  32.  
  33.             if (UPPER(*next++) == 'N') {
  34.  
  35.                 if (UPPER(*next++) == 'O') {
  36.  
  37.                     if (UPPER(*next++) == 'D') {
  38.  
  39.                         if (UPPER(*next++) == 'E') {
  40.  
  41.                             UWORD letters = 0;
  42.  
  43.                             for (len -= 5; len; --len) {
  44.  
  45.                                 if (*next == '"') {
  46.  
  47.                                     for (*text = ++next, --len; len && (*next != '"'); ++next)
  48.                                         ++letters;
  49.  
  50.                                     return(letters);
  51.                                 }
  52.                                 else if (*next == ' ')
  53.  
  54.                                     next++;
  55.  
  56.                                 else {
  57.  
  58.                                     for (*text = next; len-- && (*next != ' ') && (*next != '"'); ++next)
  59.                                         ++letters;
  60.  
  61.                                     return(letters);
  62.                                 }
  63.                             }
  64.  
  65.                             *text = "(unnamed)";
  66.  
  67.                             return(9);
  68.                         }
  69.                     }
  70.                 }
  71.             }
  72.         }
  73.     }
  74.  
  75.     return(NULL);
  76. }
  77.