home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* MAKECALL.PAS *)
- (* Das Programm erzeugt für ein beliebiges FORTRAN-Unter- *)
- (* programm "xyz" ein ausführbares Programm "Cxyz.EXE", *)
- (* das die benötigten Parameter aus einer temporären Da- *)
- (* tei TEMPIN lieset und in TEMPOUT die Ergebnisse *)
- (* schreibt. Das Programm kann von DOS oder mit Exec auf- *)
- (* gerufen werden. *)
- (* (c) 1988 by Jörg Stein & PASCAL International *)
- (* ------------------------------------------------------ *)
- PROGRAM MakeCall;
- {$M 3072,0,3072} (* Die Option reserviert Speicherplatz *)
- (* für FORTRAN-Compiler und den Linker *)
- USES Dos;
-
- CONST DOS_Path = 'C:\SYS\';
- Profort_Path = 'C:\FORTRAN\';
- Profort_Lib = 'C:\FORTRAN\LIB\PROFORT';
-
- VAR i,j : INTEGER;
- InFile, OutFile : TEXT;
- SubName, Zeile,
- Param, Syntax,
- Objects, Library: STRING;
-
- BEGIN
- IF ParamCount = 0 THEN BEGIN
- WriteLn('Kein Parameter übergeben'); Exit;
- END;
- Syntax := ParamStr(1);
- (* In den Syntax-String wird nach jedem Parameter die in *)
- (* Klammern stehende Nummer des betreffenden Parameters *)
- (* eingefügt. dadurch entsteht die von Cxyz.EXE benötigte *)
- (* Syntax. *)
- i := -3; j := 49;
- REPEAT
- i := Pos(',',Copy(Syntax,i+4,Length(Syntax)-i-3));
- IF i>0 THEN Syntax := Copy(Syntax,1,i-1)+'('+Chr(j)+')'
- +Copy(Syntax,i,Length(Syntax)-(i-1))
- ELSE Syntax := Copy(Syntax,1,Length(Syntax)-1)+'('+
- Chr(j)+'))';
- j := j + 1;
- UNTIL i = 0;
- (* Unterprogramm-Namen feststellen *)
- SubName := Copy(Syntax,1,Pos('(',Syntax)-1);
- (* Liste der benötigten OBJ und LIB-Dateien erstellen *)
- Objects := 'C'+SubName; Library := Profort_Lib;
- FOR i := 2 TO ParamCount DO
- IF Copy(ParamStr(i),1,2) = '/O' THEN
- Objects := Objects+'+'+Copy(ParamStr(i),3,
- Length(ParamStr(i))-2);
- IF Copy(ParamStr(i),1,2) = '/L' THEN
- Library := Copy(ParamStr(i),3,Length(ParamStr(i))-2)
- +'+'+Library;
- (* Modifizieren der FORTRAN-Source des aufrufenden *)
- (* Programms und abspeichern des aktuellen aufru- *)
- (* fenden Programms in Cxyz.FOR *)
- Assign(InFile,Profort_Path+'CALLER.FOR'); ReSet(InFile);
- Assign(OutFile,'C'+SubName+'.FOR'); ReWrite(OutFile);
- FOR i := 1 TO 21 DO BEGIN
- ReadLn(InFile, Zeile); WriteLn(OutFile, Zeile);
- END;
- ReadLn(InFile); WriteLn(OutFile,' CALL '+Syntax);
- FOR i := 1 TO 12 DO BEGIN
- ReadLn(InFile, Zeile); WriteLn(OutFile, Zeile);
- END;
- Close(InFile); Close(OutFile);
- (* Aufruf des Professional-FORTRAN-Compilers *)
- Exec(Profort_Path+'PROFORT.EXE','C'+SubName);
- IF DosExitCode = 0 THEN BEGIN (* Compilation okay *)
- Exec(DOS_Path+'LINK.EXE',Objects+',,,'+Library);
- IF DosExitCode=0 THEN WriteLn('Aufrufprogramm erzeugt')
- ELSE WriteLn('Fehler beim Linken.'); END
- ELSE WriteLn('Fehler beim Compilieren');
- END.
-