home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 28 / amigaformatcd28.iso / -seriously_amiga- / misc / twged_scanner / source / c-include.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-04-27  |  3.4 KB  |  132 lines

  1. ;/* execute me to compile with SAS/C (note: CPU option has (nearly) no effect here!)
  2. ;SC C-include.c IGNORE 73 DEBUG=SYMBOLFLUSH STRINGMERGE NOSTKCHK LINK
  3. SC C-include.c IGNORE 73 OPT OPTTIME STRINGMERGE NOSTKCHK
  4. SLink FROM C-include.o TO C-include SC SD STRIPDEBUG NOICONS
  5. Delete C-include.(o|lnk) QUIET
  6. QUIT
  7. */
  8. /**************************************************************************
  9.  
  10. C-include.c  --  GoldED4-Scanner für C/C++ #include
  11.  
  12. AUTOR(EN):        Thies Wellpott
  13. ERSTELLUNG:       22.05.1997
  14. COPYRIGHT:        (c) 1997 Thies Wellpott
  15. BETRIEBSSYSTEM:   AmigaOS
  16. COMPILER:         SAS/C 6.58
  17.  
  18. BESCHREIBUNG:
  19.  
  20. Scanner für GoldED Version 4.
  21. Übergabeparameter:
  22. - ULONG len       Länge der aktuellen Textzeile
  23. - STRPTR *text    Zeiger auf aktuelle Textzeile
  24. - ULONG *line     Zeiger auf aktuelle Zeilennummer
  25. Rückgabewerte:
  26. - ULONG return    Länge des gescannten Textes oder 0 für keinen Text
  27. - STRPTR *text    Zeiger auf Text
  28.  
  29. Sucht #include. Das Schlüsselwort muß vollständig klein geschrieben sein
  30. (Def. von ANSI-C). Leerzeichen davor sind erlaubt.
  31. Angezeigt wird der Dateiname zwischen ".." und <..>.
  32.  
  33.  
  34. FEHLER/EINSCHRÄNKUNGEN:
  35.  
  36. - Kommentare sind nur am Ende der Zeile erlaubt
  37.  
  38.  
  39. ENTWICKLUNGSGESCHICHTE:
  40.  
  41. V1.000   22.05.1997   Thies Wellpott
  42. - erste Version
  43.  
  44. V1.001   15.04.1998   Thies Wellpott
  45. - allgemeine Scanner-Headerdatei verwendet
  46. - 68020 compiliert
  47.  
  48. **************************************************************************/
  49.  
  50. #include "twscanner.h"
  51.  
  52.  
  53.  
  54. ULONG __asm golded_scanner(register __d0 ULONG len, register __a0 STRPTR *text,
  55.       register __a1 ULONG *line)
  56. {
  57.    const char *version = "\0$VER: C-include 1.1 " __AMIGADATE__;
  58.    // hier unnötig:  Stringkonstante (in Code-Hunk) als Puffer mißbrauchen
  59. //   STRPTR puffer = "123456789012345678901234567890123456789012345678901234567890";
  60. //#define PUFFERLAENGE  60
  61.    STRPTR zeichen = *text;
  62.  
  63.    // führende Leerzeichen ignorieren
  64.    SKIPBLANKS(zeichen, len);
  65.  
  66.    // mind. "#include <a>"
  67.    if (len >= 12)
  68.    {
  69.       if ( STRCMP4(zeichen, '#', 'i', 'n', 'c') && STRCMP4(zeichen, 'l', 'u', 'd', 'e') && ISBLANK(*zeichen) )
  70.       {
  71.          zeichen++;
  72.          len -= 9;
  73.          SKIPBLANKS(zeichen, len);
  74.  
  75.          if ( (*zeichen == '"') || (*zeichen == '<') )
  76.          {
  77.             unsigned short laenge;        // braucht kein ULONG zu sein
  78.  
  79.             zeichen++;
  80.             len--;
  81.  
  82.             // Text direkt aus Zeile nehmen
  83.             *text = zeichen;
  84.             laenge = 0;
  85.             while ( len && (*zeichen != '"') && (*zeichen != '>') )
  86.             {
  87.                zeichen++;
  88.                laenge++;
  89.                len--;
  90.             } // while
  91.  
  92.             return laenge;
  93.          } // if ('"' || '<')
  94.       } // if ("#include")
  95.    } // if (len >= 12)
  96.  
  97.    return 0;
  98. } // golded_scanner()
  99.  
  100.  
  101. /**
  102. #include <string.h>
  103.  
  104. int main(int argc, char *argv[])
  105. {
  106.    char text[128], *erg, laenge;
  107.    
  108.    strcpy(text, " #include >asd<  q");
  109.    erg = text;
  110.    laenge = golded_scanner(strlen(text)-1, &erg, 0);
  111.    erg[laenge] = 0;
  112.  
  113.    strcpy(text, "#include \"dfgh/qwer.h\"q");
  114.    erg = text;
  115.    laenge = golded_scanner(strlen(text)-1, &erg, 0);
  116.    erg[laenge] = 0;
  117.  
  118.    strcpy(text, "   #include <asdf/qwer/yxcv.h>q");
  119.    erg = text;
  120.    laenge = golded_scanner(strlen(text)-1, &erg, 0);
  121.    erg[laenge] = 0;
  122.  
  123.    strcpy(text, "#include \"hallo>q");
  124.    erg = text;
  125.    laenge = golded_scanner(strlen(text)-1, &erg, 0);
  126.    erg[laenge] = 0;
  127.  
  128.    return 0;
  129. } // main()
  130. **/
  131.  
  132.