;/* execute me to compile with SAS/C (note: CPU option has (nearly) no effect here!)
;SC C-include.c IGNORE 73 DEBUG=SYMBOLFLUSH STRINGMERGE NOSTKCHK LINK
SC C-include.c IGNORE 73 OPT OPTTIME STRINGMERGE NOSTKCHK
SLink FROM C-include.o TO C-include SC SD STRIPDEBUG NOICONS
Delete C-include.(o|lnk) QUIET
QUIT
*/
/**************************************************************************

C-include.c  --  GoldED4-Scanner für C/C++ #include

AUTOR(EN):        Thies Wellpott
ERSTELLUNG:       22.05.1997
COPYRIGHT:        (c) 1997 Thies Wellpott
BETRIEBSSYSTEM:   AmigaOS
COMPILER:         SAS/C 6.58

BESCHREIBUNG:

Scanner für GoldED Version 4.
Übergabeparameter:
- ULONG len       Länge der aktuellen Textzeile
- STRPTR *text    Zeiger auf aktuelle Textzeile
- ULONG *line     Zeiger auf aktuelle Zeilennummer
Rückgabewerte:
- ULONG return    Länge des gescannten Textes oder 0 für keinen Text
- STRPTR *text    Zeiger auf Text

Sucht #include. Das Schlüsselwort muß vollständig klein geschrieben sein
(Def. von ANSI-C). Leerzeichen davor sind erlaubt.
Angezeigt wird der Dateiname zwischen ".." und <..>.


FEHLER/EINSCHRÄNKUNGEN:

- Kommentare sind nur am Ende der Zeile erlaubt


ENTWICKLUNGSGESCHICHTE:

V1.000   22.05.1997   Thies Wellpott
- erste Version

V1.001   15.04.1998   Thies Wellpott
- allgemeine Scanner-Headerdatei verwendet
- 68020 compiliert

**************************************************************************/

#include "twscanner.h"



ULONG __asm golded_scanner(register __d0 ULONG len, register __a0 STRPTR *text,
      register __a1 ULONG *line)
{
   const char *version = "\0$VER: C-include 1.1 " __AMIGADATE__;
   // hier unnötig:  Stringkonstante (in Code-Hunk) als Puffer mißbrauchen
//   STRPTR puffer = "123456789012345678901234567890123456789012345678901234567890";
//#define PUFFERLAENGE  60
   STRPTR zeichen = *text;

   // führende Leerzeichen ignorieren
   SKIPBLANKS(zeichen, len);

   // mind. "#include <a>"
   if (len >= 12)
   {
      if ( STRCMP4(zeichen, '#', 'i', 'n', 'c') && STRCMP4(zeichen, 'l', 'u', 'd', 'e') && ISBLANK(*zeichen) )
      {
         zeichen++;
         len -= 9;
         SKIPBLANKS(zeichen, len);

         if ( (*zeichen == '"') || (*zeichen == '<') )
         {
            unsigned short laenge;        // braucht kein ULONG zu sein

            zeichen++;
            len--;

            // Text direkt aus Zeile nehmen
            *text = zeichen;
            laenge = 0;
            while ( len && (*zeichen != '"') && (*zeichen != '>') )
            {
               zeichen++;
               laenge++;
               len--;
            } // while

            return laenge;
         } // if ('"' || '<')
      } // if ("#include")
   } // if (len >= 12)

   return 0;
} // golded_scanner()


/**
#include <string.h>

int main(int argc, char *argv[])
{
   char text[128], *erg, laenge;
   
   strcpy(text, " #include >asd<  q");
   erg = text;
   laenge = golded_scanner(strlen(text)-1, &erg, 0);
   erg[laenge] = 0;

   strcpy(text, "#include \"dfgh/qwer.h\"q");
   erg = text;
   laenge = golded_scanner(strlen(text)-1, &erg, 0);
   erg[laenge] = 0;

   strcpy(text, "   #include <asdf/qwer/yxcv.h>q");
   erg = text;
   laenge = golded_scanner(strlen(text)-1, &erg, 0);
   erg[laenge] = 0;

   strcpy(text, "#include \"hallo>q");
   erg = text;
   laenge = golded_scanner(strlen(text)-1, &erg, 0);
   erg[laenge] = 0;

   return 0;
} // main()
**/

