CCS Modul   SOFTWTEST_WERT
 
   $Id: softwtest_wert.C,v 1.5 2005/04/08 15:25:52 lehmann Exp $
   ---------------------------------------------------------------------
   Kurzbeschreibung: 	lesen/schreiben einer globalen Variablen
   ---------------------------------------------------------------------
   Projekt:		CCS
   Sourcefile:		softwtest_wert.C
   Autor:		RtW/TEF32-Juilfs (28.01.2004)
   Zielsystem:		Linux
   Sprache:		C++ 
   ---------------------------------------------------------------------
   Prototyp:
   void softwtest_wert(
	   ,shm_stringpointer   *zeilen_wert 
	   ,long index1
	   ,long anzahl)
   
   ---------------------------------------------------------------------
   Aufruf: im Vectorinterpreter
   
	 (*funktionen[modulnummer])
	    (Ssp_expand_zeile
	     ,Ssp_expand_wert
	     ,p_verwaltung->begin_modulblock
	     ,p_verwaltung->anzahl_modulparameter);

   ---------------------------------------------------------------------
   Funktionsbeschreibung:
   Über dieses Modul kann der Wert ausgewaehlter Variablen  gelesen bzw. 
   beschrieben werden.
   
   Beschreibung der Modulübergabeparameter:
1 PRUEFSCHRITT
   GAUDI Prüfschritt
   ------------------------------
2 POSITION
   PAV- Position
   ------------------------------
3 VARNAME
   Variablen Name erlaubt sind:
   Im Modus R
   G_ERROR_ABORT    	: Bei Abbruch des VI wird die Fehlernummer in die Variable gespeichert.
                          Sie wird im Ruestlauf zurueckgesetzt oder durch dieses Modul.
   G_ERROR_ABORT_ENABLE : Mit dem setzen der Variablen auf 0 kann verhindert werden, dass
                          der Vectorinterpreter sich bei einem Modulfehler beendet.
                          Im Ruestlauf wird dieser Variable auf True gesetzt.
   ANSTVAR_WERT         : Wert einer Anszeuervariablen zurueckgeben.
   
   Im Modus W
   G_ERROR_ABORT    	: dieser Wert wird automatisch auf 0 gesetzt.
   G_ERROR_ABORT_ENABLE : disable = 0; enable  != 0
   ------------------------------
4 PARA1
   zu dem Befehl VARNAM spwzifischer Parameter
   VARNAM = ANSTVAR_WERT :  Name der Ansteuervariablen
   ------------------------------
5 Para2
   zu dem Befehl VARNAM spwzifischer Parameter
   zurzeit nicht benoetigt
   ------------------------------
6 IO_MODE
   R = lesen  einer Variablen
   W = setzen einer Variablen
   ------------------------------
7 ERGEBNIS
   Wert der gelesen wurde (R Mode)
   Wert mit dem ein Variable belegt werden soll (W Mode)
   ------------------------------
8 FEHLERFLAG
   Fehlerflag 
   <userdoc>
   ---------------------------------------------------------------------

-- pragmas -----------------------------------------------------------
#pragma  COPYRIGHT "Robert Bosch GmbH Reutlingen, RtW/TEF72"
#pragma  VERSIONID "$Id: softwtest_wert.C,v 1.5 2005/04/08 15:25:52 lehmann Exp $"

-- defines -----------------------------------------------------------
#define HEADER "$Id: softwtest_wert.C,v 1.5 2005/04/08 15:25:52 lehmann Exp $" 
#define EXTERN extern	 Bei allen Subroutinen 

#define IND_PRUEFSCHRITT	1
#define IND_VARNAME		3
#define IND_PARA1		4
#define IND_PARA2		5
#define IND_MODE  		6
#define IND_WERT		7
#define IND_FEHLERFLAG		8
-- includes ----------------------------------------------------------
#include "shm_syscom.H"
#include <stdlib.h> 
#include <string.h>  
#include "libstr.H"  
#include "libccs.H"
#include "libtestmodul_pool.H"
#include "ccl_defines.H"         ccl_definition   PREINT              

-- external functions / variables ------------------------------------
extern int	G_Softwaretest_error_abort; 
extern bool	G_Softwaretest_error_abort_enable; 
-- global variables (nur im  "main" erlaubt) -------------------------
 -Begin---------------------------------------------------------------
   ---------------------------------------------------------------------
int softwtest_wert(shm_stringpointer *zeilen_wert
	   ,long index1
	   ,long anzahl)
{
   
//cout<<" softwtest_wert: "<<endl;
#ifdef LINUX
-- local variables --------------------------------------------------- 
   bool			bOk;   			// true = Ok
   double		dWert;			// double Wert
   long			ind;			// index 
   int			iWert;			// integer Wert
   int          	typ;   			// Variablen typ
   STRING		mode;			// Modus
   STRING		name;			// name der Variablen
   STRING		wert;			// Wert
   QString		strVarname;   		// Variablenname 
   QString		strWert;		// Wert
   Variablenverwaltung	*V_ADRESS;      	// Variablenadresse

   //------------------------------------------------------------------
   //------------------------------------------------------------------ 
   ind = index1 - 1;
   bOk = true;

   strVarname = (const char*)*zeilen_wert->ptr[ind+IND_VARNAME];
   V_ADRESS = (Variablenverwaltung *)zeilen_wert->ptr[ind+IND_WERT]; 

//cout<<"strVarname: "<<strVarname.latin1()<<" Mode: "<<(const char*)*zeilen_wert->ptr[ind+IND_MODE]<<" Wert: "<<(const char*)*zeilen_wert->ptr[ind+IND_WERT]<<endl;
   if (*zeilen_wert->ptr[ind+IND_MODE] == "R")
   {
      if (strVarname == "G_ERROR_ABORT")
      {
         typ   = VARMEM_TYP_INT;
         iWert = G_Softwaretest_error_abort;
      }
      else if (strVarname == "G_ERROR_ABORT_ENABLE")
      {
         typ   = VARMEM_TYP_INT;
         if (G_Softwaretest_error_abort_enable)
              iWert = 1;
         else iWert = 0;
      }
      else if (strVarname == "ANSTVAR_WERT")
      {
         long  	   iAnstvar;		// Index auf Ansteuervariable
	 STRING    anst_name;   	// Name

         anst_name = *zeilen_wert->ptr[ind+IND_PARA1];
         iAnstvar  = suche_ansteuerparameter(anst_name);
//cout<<"anst_name: "<<(char*)anst_name<<" iAnstvar: "<<iAnstvar<<endl;
         typ = VARMEM_TYP_STRING;
         if (iAnstvar >= 0)
            Ssp_pp_verwaltung->ansteuerblock[iAnstvar].get_wert(wert);
         else
            wert = "?????";
      }
      else
      {
         typ = -1; 
         bOk  = false;
	 error_message (ERR_ERROR_TTNR, HEADER,__LINE__,
            "illegal variable name: %s", strVarname.latin1());
      }
      if (typ == VARMEM_TYP_INT)
      {
         QString    strNum;
         STRING	    wert;
         
         wert  = strNum.setNum(iWert).latin1();
         V_ADRESS->put_wertTyp(wert, typ);
      }
      else if (typ == VARMEM_TYP_DOUBLE)
      {
         QString    strNum;
         STRING	    wert;
         
         wert  = strNum.setNum(dWert).latin1();
         V_ADRESS->put_wertTyp(wert, typ);
      }
      else if (typ == VARMEM_TYP_STRING)
      {
         V_ADRESS->put_wertTyp(wert, typ);
//cout<<"wert: " <<(char*)wert<<endl;        
      }
   }
   else if (*zeilen_wert->ptr[ind+IND_MODE] == "W")
   {
      V_ADRESS->get_wert(strWert);
      if (strVarname == "G_ERROR_ABORT")
      {
         G_Softwaretest_error_abort = 0;
      }
      else if (strVarname == "G_ERROR_ABORT_ENABLE")
      {
         iWert = strWert.toInt(&bOk);
//cout<<"G_ERROR_ABORT_ENABLE: "<<iWert<<" ok: "<<bOk<<endl;         
         G_Softwaretest_error_abort_enable = !bOk || (iWert != 0);
      }
      else
      {
         bOk = false;
	 error_message (ERR_ERROR_TTNR, HEADER,__LINE__,
            "variable can not be written or wrong name: %s", strVarname.latin1());
      }
   }
   else
   {
      bOk = false;
      error_message (ERR_ERROR_TTNR, HEADER,__LINE__,
         "illegal mode: %s", (const char*)*zeilen_wert->ptr[ind+IND_MODE] );
   }
   if (bOk)
      *zeilen_wert->ptr[ind + IND_FEHLERFLAG] = "0";
   else 
      *zeilen_wert->ptr[ind + IND_FEHLERFLAG] = "1";
#endif
   return 0;
}
 -End of file---------------------------------------------------------
   Historie:
   
   $Log: softwtest_wert.C,v $
   Revision 1.5  2005/04/08 15:25:52  lehmann
   _VI_5.2.7_R520000_TT42_RA_put_typ durch Methode put_wertTyp ersetzt

   Revision 1.4  2004/07/19 09:13:31  lehmann
   ra vi ANSTVAR_WERT eingefuehrt

   Revision 1.3  2004/07/08 10:05:40  lehmann
   ra Kommentarausgabe raus

   Revision 1.2  2004/03/24 08:57:22  lehmann
   ra char* nach const char* geaendert

   Revision 1.1  2004/02/05 12:55:43  lehmann
   ra vi Erstellung

   ---------------------------------------------------------------------