Article View: de.comp.os.vms
Article #63Einzelnes Zeichen von VAX FORTRAN -> VAX C ?
From: ComRam
Date: Tue, 24 Nov 1992 00:58
Date: Tue, 24 Nov 1992 00:58
124 lines
3691 bytes
3691 bytes
Ich hab hier ein kleines Problem. Ich moechte von nachstehendem FORTRAN
Programm ein einzelnes Zeichenh (in dele) dem C Programm uebergeben. Wieso
geht das nicht in der nachstehend gezeigten Art und Weise ? Eigentlich
sollte da doch ein Fixed-Length Descriptor uebergeben werden.
--------------- schnippeln Sie hier ---------------------------------------
PROGRAM CREATEFIL
IMPLICIT NONE
* Creating a file and then using a C routine to delete it.
INTEGER dummy,err
CHARACTER*80 fname
CHARACTER*1 dele
EXTERNAL schliesse_file
fname = 'test.dat'
dele = 'D'
OPEN(10,STATUS='NEW',FILE=fname)
WRITE(10,*) 'Test'
CLOSE (10)
CALL oeffne_file (fname,0,err)
CALL schliesse_file(dele,err)
STOP
END
----------------------------------------------------------------------
und nun der C Teil
----------------------------------------------------------------------
#include ssdef
#include descrip
#include stdio
FILE *eingabe;
char *filename;
void oeffne_file (struct dsc$descriptor_s *fn, int *mode,int *err)
/* Oeffnen eines Files <fn> */
{
short status;
filename = fn->dsc$a_pointer;
filename[fn->dsc$w_length] = '\0';
fn->dsc$w_length = strlen(filename);
printf("Filename : %s",filename);
if (*mode == 0)
eingabe = fopen(filename,"r");
else
eingabe = fopen(filename,"rb");
if (eingabe==NULL)
err = 1;
else
err = 0;
}
int lies_zeichen (void)
/* Einlesen eines einzelnen Zeichens aus <fn> */
{
int dummy;
if (eingabe==NULL)
return -1;
else
return fgetc(eingabe);
}
void schliesse_file (struct dsc$descriptor_s *mode,int *err)
/* Schliessen eines Files + evtl loeschen von <fn> */
{
short status;
char *modetext;
$DESCRIPTOR (dfn,filename);
modetext = mode->dsc$a_pointer;
modetext[mode->dsc$w_length] = '\0';
mode->dsc$w_length = strlen(modetext);
status = fclose (eingabe);
if (status==0)
*err = 0;
else
{ *err = 1; goto end; }
if (modetext[1]=='D')
{
status = LIB$DELETE_FILE(dfn);
if (status != SS$_NORMAL)
printf("SCRDMP: error deleting %s\n",filename);
end:;
}
}
---------------------------------------------------------------------------
Das Problem entsteht wie zu sehen bei der Uebergabe von FORTRAN dele an C
mode in schliesse_file. Kurioserweise funktioniert die identische Uebergabe
des filenamens an oeffne_file tadellos.
Antworten per E-Mail oder wie auch immer und danke im Voraus.
Ciao ...
-------------------------------------------------------------------------------
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.
Technical Details
Message-ID:
<1992Nov24.005829.25343@wega.rz.uni-ulm.de>Path:
arc1-ca.pugleaf.net!sparky!uunet!zaphod.mps.ohio-state.edu!sol.ctr.columbia.edu!ira.uka.de!math.fu-berlin.de!news.belwue.de!news.uni-ulm.de!newsShow Full Headers
Complete Article Headers
Newsgroups: de.comp.os.vms Path: arc1-ca.pugleaf.net!sparky!uunet!zaphod.mps.ohio-state.edu!sol.ctr.columbia.edu!ira.uka.de!math.fu-berlin.de!news.belwue.de!news.uni-ulm.de!news From: KARGL@rzmain.rz.uni-ulm.de (ComRam) Subject: Einzelnes Zeichen von VAX FORTRAN -> VAX C ? Message-ID: <1992Nov24.005829.25343@wega.rz.uni-ulm.de> Sender: news@wega.rz.uni-ulm.de (News Net) Organization: Chaos Computer Club Ulm Date: Tue, 24 Nov 1992 00:58:29 GMT X-News-Reader: VMS NEWS 1.24 Lines: 124