home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1988 / 06_07 / link / fortran.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1988-04-05  |  2.8 KB  |  78 lines

  1. (* ------------------------------------------------------ *)
  2. (*                     FORTRAN.PAS                        *)
  3. (*  Das Unterprogramm dient dazu, ein Unterprogramm, das  *)
  4. (*  in FORTRAN geschrieben wurde, in ein Pascal-Programm  *)
  5. (*  einzubinden. Zuvor muß jedoch mit MAKECALL eine EXE-  *)
  6. (*  Datei erzeugt worden sein.                            *)
  7. (*  (c) 1988 by Jörg Stein & PASCAL International         *)
  8. (* ------------------------------------------------------ *)
  9. UNIT FORTRAN;
  10.  
  11. INTERFACE
  12.  
  13. USES Dos;
  14.  
  15. TYPE Typen          = ARRAY[1..10] OF STRING[2];
  16.      Pointer_Array  = ARRAY[1..10] OF POINTER;
  17.  
  18. PROCEDURE Call_Fortran_Subroutine(Name: STRING;
  19.                       (* Name des FORTRAN-Unterprogramms *)
  20.                                  Anzahl_x: INTEGER;
  21.                  (* Anzahl der zu übergebenden Parameter *)
  22.                                  Typ: Typen;
  23.                          (* Typbezeichnung der Parameter *)
  24.                                  VAR x: Pointer_Array);
  25.                                (* Adressen der Parameter *)
  26. IMPLEMENTATION
  27.  
  28. PROCEDURE Call_Fortran_Subroutine;
  29. CONST
  30.     Profort_Path = 'C:\FORTRAN\';
  31. VAR f            : TEXT;
  32.     j            : INTEGER;
  33.     ch           : CHAR;
  34.     IPtr         : ^Integer;
  35.     RPtr         : ^Real;
  36.     LPtr         : ^Boolean;
  37. BEGIN
  38.   (* Die temporäre Datei TEMPIN dient der Übergabe von    *)
  39.   (* Parametern zwischen Pascal- und FORTRAN-Programmen.  *)
  40.   (* Sie sollte zweckmäßigerweise auf einer RAM-Disk      *)
  41.   (* (hier: D) angelegt werden.                           *)
  42.   Assign(f,'D:TEMPIN');
  43.   ReWrite(f);
  44.   WriteLn(f,Anzahl_x);
  45.   FOR j := 1 TO Anzahl_x DO WriteLn(f,'''',Typ[j]:2,'''');
  46.   FOR j := 1 TO Anzahl_x DO BEGIN
  47.     IF (Typ[j]='I2') OR (Typ[j]='I4') THEN BEGIN
  48.       IPtr := x[j]; WriteLn(f,IPtr^); END;
  49.     IF (Typ[j]='R4') OR (Typ[j]='R8') THEN BEGIN
  50.       RPtr := x[j]; WriteLn(f,RPtr^); END;
  51.     IF (Typ[j]='L4') THEN BEGIN
  52.       LPtr := x[j]; WriteLn(f,LPtr^); END;
  53.   END;
  54.   Close(f);
  55.   (* Aufruf des durch MAKECALL eingebundenen FORTRAN-    *)
  56.   (* Unterprogrammes. Achtung! Um den folgenden Befehl   *)
  57.   (* ausführen zu können, muß das Hauptprogramm eine     *)
  58.   (* M-Option enthalten!                                 *)
  59.   Exec('C'+Name+'.EXE','');
  60.   (* Lesen der eventuell modifizierten Parameter         *)
  61.   Assign(f,'D:TEMPOUT');
  62.   ReSet(f);
  63.   FOR j := 1 TO Anzahl_x DO BEGIN
  64.     IF (Typ[j] = 'I2') OR (Typ[j] = 'I4') THEN BEGIN
  65.       IPtr := x[j]; ReadLn(f,IPtr^); END;
  66.     IF (Typ[j] = 'R4') OR (Typ[j] = 'R8') THEN BEGIN
  67.       RPtr := x[j]; ReadLn(f,RPtr^); END;
  68.     IF (Typ[j] = 'L4') THEN BEGIN
  69.       LPtr := x[j]; ReadLn(f,ch);
  70.       IF UpCase(ch) = 'T' THEN LPtr^ := TRUE
  71.       ELSE LPtr^ := FALSE;
  72.     END;
  73.   END;
  74.   Close(f);
  75. END;
  76.  
  77. END.
  78.