Thread View: de.comp.os.vms
2 messages
2 total messages
Started by ComRam
Tue, 17 Nov 1992 21:21
FORTRAN CHARACTER*(*) -> globale C Variable
Author: ComRam
Date: Tue, 17 Nov 1992 21:21
Date: Tue, 17 Nov 1992 21:21
24 lines
1680 bytes
1680 bytes
Ich hab hier ein ziemliches Problem. Ich soll fuer ein Programm eine Routine schreiben, welche folgendes leistet: Ein Fortran String unbekannter Laenge wird von einem C-Routine als globale Variable uebernommen. Gleichzeitig wird noch ein einzelnes Zeichen als Argument an die C-Rout. uebergeben. Ich weiss, dass das mit der globalen Variable furchtbar kompliziert ist. Es soll aber anscheinend so sein. Kann mir da jemand helfen ? Noch mal das ganze in Kurzfassung: FORTRAN C CHARAKTER*(*) fname ---> globale Variable char *fname[] CHARAKTER*1 d ---> Argument void rout(char *d) Hilfe per E-Mail oder Follow-Up ... also quasi egal wie. ------------------------------------------------------------------------------- ComRam (in real life : Frank Kargl) Student Consultant for VMS-Programming Internet : COMRAM@RZ.UNI-ULM.DE University of Ulm Germany DECnet(Belwue): 50186::KARGL All statements posted above are Bitnet : KARGL@DULRUU51.BITNET my personal oppinion ONLY ! ------------------------------------------------------------------------------- Use the SOURCE, Luke! I feel a great disturbance in the SOURCE.
Re: FORTRAN CHARACTER*(*) -> globale C Variable
Author: Sepp Huber, CERN -4439,-6712
Date: Thu, 19 Nov 1992 19:32
Date: Thu, 19 Nov 1992 19:32
43 lines
2729 bytes
2729 bytes
In article <1992Nov17.212109.22789@wega.rz.uni-ulm.de>, KARGL@rzmain.rz.uni-ulm.de (ComRam) writes...
>Ich hab hier ein ziemliches Problem. Ich soll fuer ein Programm eine
>Routine schreiben, welche folgendes leistet:
>Ein Fortran String unbekannter Laenge wird von einem C-Routine als globale
>Variable uebernommen. Gleichzeitig wird noch ein einzelnes Zeichen als
>Argument an die C-Rout. uebergeben.
>Ich weiss, dass das mit der globalen Variable furchtbar kompliziert ist. Es
>soll aber anscheinend so sein. Kann mir da jemand helfen ?
>
>Noch mal das ganze in Kurzfassung:
>
>FORTRAN C
>CHARAKTER*(*) fname ---> globale Variable char *fname[]
>CHARAKTER*1 d ---> Argument void rout(char *d)
>
Da dies in os.vms steht, die loesung in VAX-C und VAX-Fortran, mit VMS Linker
(linker ? ja, weil dinge wie globals variable nicht einfach nur von den
compilern abhaengen!)
Das einfache ist das single character argument:
in Fortran: CALL ROUT(%REF(D))
Das globale character array:
grundsaetzlich erzeugt jede globale variable in VAX-C eine PSECT mit dem namen
der variablen. In Fortran entspricht dem ein named COMMON, whaehrend der
variablen name nur lokale bedeutung hat.
Im beispiel also:
Character*48 fname
Common /FNAME/fname
Abgesehen von formalen dingen, sollte man bei fortran/c mischung bedenken, dass
C ja in wirklichkeit keine variablen vom typ character kennt, sondern nur
arrays of bytes, deren ende durch eine null markiert ist. Wenn die C routinen
also auf die fortran character variablen string manipulation machen (strcat,
strcpy etc.), dann muss sichergestellt werden, dass eine null auf den letzten
signifikanten character folgt! Fortran tut nichts dergleichen.
Einfacher patch: in fortran die dimension immer maximum+1, dann vor uebergabe
an C: fname(LEN(fname):LEN(fname))=char(0)
-
Joseph "Sepp" Huber | At present in CERN, phone -4439/-6712
Max-Planck-Institut Physik | Internet: huber@vxcern.cern.ch
Munich, Germany | HEPnet: VXCERN::HUBER
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads