--- lex.c	2004-05-07 03:34:25.000000000 +0000
+++ /ETMSUsers4/lduening/tmp/lex.c	2004-05-18 14:12:37.000000000 +0000
@@ -494,6 +494,8 @@
    , { "virtual",        L_VIRTUAL       }
    , { "void",           L_VOID          }
    , { "while",          L_WHILE         }
+   , { "by",             L_BY            }
+   , { "extern",         L_EXTERN        }
    };
 
 /*-------------------------------------------------------------------------*/
--- prolang.y	2004-05-01 04:04:23.000000000 +0000
+++ /ETMSUsers4/lduening/tmp/prolang.y	2004-05-18 14:12:33.000000000 +0000
@@ -5152,6 +5152,8 @@
 %token L_VIRTUAL
 %token L_VOID
 %token L_WHILE
+%token L_BY
+%token L_EXTERN
 
 /* Textbook solution to the 'dangling else' shift/reduce conflict.
  */
@@ -5525,6 +5527,32 @@
 #endif /* USE_NEW_INLINES */
       }
 
+    | L_EXTERN type optional_star L_IDENTIFIER
+    
+      {
+          $2.typeflags |= $3;
+#ifdef USE_NEW_INLINES
+          def_function_typecheck($2, $4, MY_FALSE);
+#else /* USE_NEW_INLINES */
+          def_function_typecheck($2, $4);
+#endif /* USE_NEW_INLINES */
+      }
+
+      '(' argument ')'
+
+      {
+#ifdef USE_NEW_INLINES
+          def_function_prototype($7, MY_FALSE);
+#else /* USE_NEW_INLINES */
+          def_function_prototype($7);
+#endif /* USE_NEW_INLINES */
+      }
+
+      L_BY string_constant ';'
+
+      {
+      }
+      
     | type name_list ';' /* Variable definition */
       {
           if ($1.typeflags == 0)
