🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by ComRam Tue, 24 Nov 1992 00:58
Einzelnes Zeichen von VAX FORTRAN -> VAX C ?
#63
Author: ComRam
Date: Tue, 24 Nov 1992 00:58
124 lines
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