Thread View: de.comp.os.vms
1 messages
1 total messages
Started by ComRam
Tue, 24 Nov 1992 00:58
Einzelnes Zeichen von VAX FORTRAN -> VAX C ?
Author: 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.
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