(* *****************************************************************
** File    : java.PAS
** Created : 19.06.99
** Author  : 
**
** Macro for FoldMaster
**
** **************************************************************-**)
PROGRAM java;

(*{{{  Variablen *)
{ Variablen }
var  java_instpath  : string;

     TransferString : String;
     ErrorFile      : String;
     ErrorMessage   : String;
     ErrorPosition  : Integer;
     ErrorLine      : Integer;
     Line           : Integer;
(*}}}*)

(*{{{  procedure TxJavaCompile(s:string);*)
{ folgendes Macro analysiert die Ausgabe des JAVA- Compilers
  dieser gibt Fehlermeldungen in mehreren Zeilen aus. Die
  erste Zeile enthaehlt die fehlerhafte Datei und den
  Fehlertext. Die zweite Zeile enthaelt eine Kopie der
  fehlerhaften Quelltextzeile. Die dritte Zeile letztlich
  gibt durch das Zeichen  ^ an an welcher Position der Fehler
  ist.
}
procedure TxJavaCompile(s:string);
var space : Integer;
    code  : Integer;
begin
   if (pos('Note:', s) > 0) then begin
      { es handelt sich um eine Warnung mit Text in einer Zeile }
      space    := pos(#32, s); TransferString := '';
      if (space > 0) THEN begin
         Inc(space);
         swrite(TransferString, copy(s, space, length(s)-space));
      end;
      MessageAddMessage('JAVACompile', '', TransferString, 0,0);
      Line := 0;
   end else if (Line = 0) then begin
      { DateiName :Zeile: Meldung}
      space := pos(':',s);
      if (space > 0) then begin
         ErrorFile := copy(s, 1, space-1);
         delete(s,1,space);   Val(s,ErrorLine,code);
         space := pos(':',s);
         if (space > 0) then begin
            { FehlerMeldung kopieren }
            ErrorMessage := copy(s, space+1, 255);
         end;
         Line := 1;
      end;
   end else if (Line = 1) then begin
      Line := 2;
   end else if (Line = 2) then begin
      space := pos('^',s); TransferString := '';
      if (space > 0) then begin
         swrite(TransferString,
                FileNameGetNameExt(ErrorFile),
                '(', ErrorLine, ',', space, '):',
                ErrorMessage);
         MessageAddMessage('JAVACompile',
                       ErrorFile, TransferString,
                       ErrorLine, space);
      end;
      Line := 0;
   end;
end;
(*}}}*)

(*{{{  insert_local_variables*)
{ insert_local_variables
  fuegt die notwendigen Variablen an der aktuellen
  Cursorposition in die Projektdatei ein
}
procedure insert_local_variables;
begin
   StartOfLine;
   InsertText    ('folgende Variable stellt die Kommandozeile '); NewLine;
   InsertText    ('für den JAVA- Compiler dar. Weitere Optionen ');NewLine;
   InsertText    ('können hier angegeben werden. '); NewLine;
   InsertVariable('JAVAC_OPT',  '$NAMEEXT($MODNAME)');
end;
(*}}}*)

(*{{{  tool_define_java_compile*)
{ tool_define_java_compile
  Definiert den JAVA- Compiler
}
procedure tool_define_java_compile;
var exepath : string;
begin
   exepath := '';
   swrite(exepath, java_instpath, '\bin\javac.exe');
   ToolDefine       ('JAVACompile', exepath, '', '$(JAVAC_OPT)');
   ToolDefineType   ('JAVACompile', '.java', '.class', 'JAVA', 2);
   ToolDefineMode   ('JAVACompile', 'java/txjavacompile', 3);
   ToolDefineConnect('JAVACompile', '', 0);
   ToolDefineOptions('JAVACompile', 0, 0);
end;
(*}}}*)
(*{{{  tool_define_java_run*)
{ tool_define_java_run
  definiert ein Tool um ein JAVA Programm auszufuehren
  Dieses Tool kann ueber das Kontextmenue
  fuer jede Klasse aufgerufen werden
}
procedure tool_define_java_run;
var exepath : string;
begin
   exepath := '';
   swrite(exepath, java_instpath, '\bin\java.exe');
   ToolDefine       ('JAVARun', exepath, '', '$NAME($MODNAME)');
   ToolDefineType   ('JAVARun', '.java', '', 'JAVA', 3);
   ToolDefineMode   ('JAVARun', '', 2);
   ToolDefineConnect('JAVARun', '', 0);
   ToolDefineOptions('JAVARun', 0, 0);
end;
(*}}}*)
(*{{{  tool_define_java_applet*)
{ tool_define_java_applet
  Definiert ein Tool um ein JAVA- Programm als Applet
  auszufuehren. Dazu ist eine gleichnamige HTML Datei notwendig
}
procedure tool_define_java_applet;
var exepath : string;
begin
   exepath := '';
   swrite(exepath, java_instpath, '\bin\appletviewer.exe');
   ToolDefine       ('JAVAApplet', exepath, '', '$NAME($MODNAME).html');
   ToolDefineType   ('JAVAApplet', '.java', '', 'JAVA', 3);
   ToolDefineMode   ('JAVAApplet', '', 2);
   ToolDefineConnect('JAVAApplet', '', 0);
   ToolDefineOptions('JAVAApplet', 0, 0);
end;
(*}}}*)

(*{{{  set_env*)
{ set_env
  Setzt alle notwendigen Umgebungsvariablen
  Standard Klassenpfad :
  .;[bin]\..\classes;[bin]\..\lib\classes.zip
}
procedure set_env;
var value : string;
begin
   value := '';
   swrite(value, '.;',
          { an dieser Stelle evtl. weitere eigene Pfade einfuegen }
          java_instpath, '\classes;',
          java_instpath, '\lib\classes.zip');
   SetEnvValue('CLASSPATH', value);
   writeln('JAVA- Klassenverzeichnis gesetzt auf:', value);
end;
(*}}}*)

BEGIN
   (*{{{  Installationspfad einrichten*)
   { pruefen ob variable JAVA_INSTPATH vorhanden ist wenn nicht,
     dann danach suchen lassen }
   java_instpath := GetVarValue('JAVA_INSTPATH');
   if (java_instpath = '') then begin
      { Nach Pfad suchen }
      Beep;
      if (DirectoryInput ('Installationspfad für JAVA', java_instpath)) then begin
         SetGlobalVar('JAVA_INSTPATH', java_instpath);
      end;
   end;
   (*}}}*)

   { ----------------------------------------------------- }
   { Umgebung einrichten }
   { ----------------------------------------------------- }
   set_env;

   { ----------------------------------------------------- }
   { Tools definieren }
   { ----------------------------------------------------- }
   if (NOT ToolAvail('JAVACompile')) then tool_define_java_compile;
   if (NOT ToolAvail('JAVARun'))     then tool_define_java_run;
   if (NOT ToolAvail('JAVAApplet'))  then tool_define_java_applet;

   { ----------------------------------------------------- }
   { Funktionen in das Menue eintragen }
   { ----------------------------------------------------- }
   MacroMenuAdd ('insert_local_variables');

END.

