753 lines
33 KiB
HTML
753 lines
33 KiB
HTML
<HTML>
|
|
<HEAD>
|
|
<TITLE>R_STROPERATE</TITLE>
|
|
<META NAME="Generator" CONTENT="KDOC ">
|
|
</HEAD>
|
|
<BODY bgcolor="#ffffff" text="#000000" link="#0000ff" vlink="#000099" alink= "#ffffff">
|
|
|
|
<table BORDER=0 COLS=1 WIDTH="100%" BGCOLOR="#FFFFCC" NOSAVE >
|
|
<tr ALIGN=CENTER VALIGN=CENTER NOSAVE>
|
|
<td NOSAVE><font face="Arial,Helvetica"><font size=+2></font></font>
|
|
<br><font face="Arial,Helvetica"><font size=+2>CCS Modul <b>R_STROPERATE</b></font></font>
|
|
<br> </td>
|
|
</tr>
|
|
</table>
|
|
<PRE>
|
|
Funktionsbeschreibung:
|
|
|
|
Beschreibung der Modulparameter:</pre><b><a name="param1">1</a> PRUEFSCHRITT</b><pre>
|
|
GAUDI-Pruefschritt
|
|
------------------------------</pre><b><a name="param2">2</a> POSITION</b><pre>
|
|
PAV-Position
|
|
------------------------------</pre><b><a name="param3">3</a> IN_FORMAT</b><pre>
|
|
Gibt an, welches Darstellungsformat der uebergebene
|
|
'INPUT_STRING' hat:
|
|
BIN - binaeres Zahlenformat:
|
|
Auswertung erfolgt als vorzeichenlose Zahl;
|
|
eine fuehrende '1' hat nicht die Bedeutung, dass
|
|
die Zahl als negative Zahl zu bewerten ist;
|
|
|
|
HEX - sedezimales Zahlenformat:
|
|
Auswertung erfolgt als vorzeichenlose Zahl;
|
|
ein in der Integer-Darstellung gesetztes hoechst-
|
|
wertiges Bit hat nicht die Bedeutung, dass die Zahl
|
|
als negative Zahl zu bewerten ist;
|
|
|
|
OKT - oktales Zahlenformat:
|
|
Auswertung erfolgt als vorzeichenlose Zahl;
|
|
ein in der Integer-Darstellung gesetztes hoechst-
|
|
wertiges Bit hat nicht die Bedeutung, dass die Zahl
|
|
als negative Zahl zu bewerten ist;
|
|
|
|
------------------------------</pre><b><a name="param4">4</a> INPUT_STRING1</b><pre>
|
|
konstanter String mit max. 14 Zeichen Laenge, der eine
|
|
Zahl in einer der zuvor aufgefuehrten Darstellungen repraesentiert
|
|
oder ein ueber eine '&'-Variable empfangener String gleichen
|
|
Inhalts (bestehend aus moeglicherweise mehr als 14 Zeichen,
|
|
z.Zt. maximal 80 Zeichen);
|
|
|
|
Ein leerer Input erzeugt eine Fehlermeldung!
|
|
|
|
------------------------------</pre><b><a name="param5">5</a> OPERATOR</b><pre>
|
|
Einer der folgenden binaeren Operatoren (s. Wahrheitstabelle):
|
|
AND: 0 & 0 = 0
|
|
0 & 1 = 0
|
|
1 & 0 = 0
|
|
1 & 1 = 1
|
|
|
|
OR: 0 | 0 = 0
|
|
0 | 1 = 1
|
|
1 | 0 = 1
|
|
1 | 1 = 1
|
|
|
|
XOR: 0 ^ 0 = 0
|
|
0 ^ 1 = 1
|
|
1 ^ 0 = 1
|
|
1 ^ 1 = 0
|
|
|
|
NAND: !(0 & 0) = 1
|
|
!(0 & 1) = 1
|
|
!(1 & 0) = 1
|
|
!(1 & 1) = 0
|
|
|
|
NOR: !(0 | 0) = 1
|
|
!(0 | 1) = 0
|
|
!(1 | 0) = 0
|
|
!(1 | 1) = 0
|
|
|
|
XNOR: !(0 ^ 0) = 1
|
|
!(0 ^ 1) = 0
|
|
!(1 ^ 0) = 0
|
|
!(1 ^ 1) = 1
|
|
|
|
oder der unaere Operator:
|
|
NOT,
|
|
darueberhinaus die Shift-Operatoren SHL und SHR.
|
|
|
|
Die Operatoren wirken Bit-weise auf die durch die
|
|
in den 'INPUT_STRING1/2' uebergebenen Ziffernstrings.
|
|
|
|
Beispiel1: 'INPUT_STRING1' - A6748
|
|
'OPERATOR' - XOR
|
|
'INPUT_STRING2' - 7DE4F5A
|
|
===> 'OUTPUT_STRING' - 7D42812
|
|
|
|
Beispiel2: 'INPUT_STRING1' - A6748
|
|
'OPERATOR' - SHR
|
|
'INPUT_STRING2' - 5
|
|
===> 'OUTPUT_STRING' - 0533A
|
|
|
|
Beispiel3: 'INPUT_STRING1' - A6748
|
|
'OPERATOR' - SHL
|
|
'INPUT_STRING2' - 6
|
|
===> 'OUTPUT_STRING' - 9D200
|
|
|
|
Beispiel4: 'INPUT_STRING1' - A6748
|
|
'OPERATOR' - NOT
|
|
'INPUT_STRING2' -
|
|
===> 'OUTPUT_STRING' - 598B7
|
|
|
|
Wichtig: Im Falle des 'NOT'-Operators darf kein
|
|
'INPUT_STRING2' eingegeben werden!
|
|
Bei 'SHL' bzw. 'SHR' wird ueber 'INPUT_STRING2'
|
|
die Anzahl der Stellen, um die der uebergebene
|
|
'INPUT_STRING2' 'geshiftet' werden soll,
|
|
eingegeben!
|
|
|
|
------------------------------</pre><b><a name="param6">6</a> INPUT_STRING2</b><pre>
|
|
konstanter String mit max. 14 Zeichen Laenge, der eine
|
|
Zahl in (fast) beliebiger Darstellung repraesentiert
|
|
oder ein ueber eine '&'-Variable empfangener String
|
|
gleichen Inhalts (bestehend aus moeglicherweise mehr
|
|
als 14 Zeichen, z.Zt. maximal 80 Zeichen);
|
|
|
|
Wichtig: Ein leerer Input erzeugt eine Fehlermeldung,
|
|
sofern nicht der unaere 'NOT'-Operator
|
|
verwendet wird!
|
|
Bei 'SHL' bzw. 'SHR' muss ueber 'INPUT_STRING2'
|
|
immer eine dezimale Zahl eingegeben werden!
|
|
|
|
------------------------------</pre><b><a name="param7">7</a> OUTPUT_STRING</b><pre>
|
|
Ausgabe-String, der das Ergebnis der durchgefuehrten
|
|
Operation enthaelt;
|
|
die Weitergabe an andere Module erfolgt durch eine
|
|
'&'-Variable;
|
|
die Laenge der Ausgabe ist gleich der Laenge des laengsten
|
|
'INPUT_STRING';
|
|
|
|
Wichtig: In sedezimaler Darstellung werden die
|
|
Zahlenwerte 10 bis 15 (entspr. A bis F) als
|
|
Grossbuchstaben ausgegeben!
|
|
|
|
|
|
Input: Zeiger auf den relevanten "Wert" einer Zeile der
|
|
expandierten Pruefliste;
|
|
Index im entsprechenden Speicherbereich fuer
|
|
Moduldaten;
|
|
Anzahl der Modulparameter;
|
|
|
|
Output: none
|
|
|
|
----------------------------------------------------------
|
|
Return Value:
|
|
= 0: Successful completion
|
|
-1: kein 'INPUT_STRING1' bzw. 'INPUT_STRING2';
|
|
der 'INPUT'-String repraesentiert keine Zahl in einem
|
|
der gueltigen Formate;
|
|
|
|
----------------------------------------------------------
|
|
Beispiel (optional):
|
|
|
|
----------------------------------------------------------
|
|
<\userdoc>
|
|
C4
|
|
int r_stroperate( shm_stringpointer *zeilen_wert
|
|
,long index_on_expPrfLst
|
|
,long anzPrmtr )
|
|
{
|
|
|
|
r_stroperate
|
|
|
|
lokale Variablen
|
|
|
|
ua. Schleifenparameter fuer Datenkopie:
|
|
long indx;
|
|
|
|
|
|
uebernimmt den an die Funktion uebergebenen Index fuer Datenkopie:
|
|
long indx_o_ePL;
|
|
|
|
|
|
speichert den Index zur Unitnummer, die fuer den Zugriff auf die dem
|
|
Modul zugeordnete Speicherbereiche notwendig ist:
|
|
long unit_indexPtr;
|
|
|
|
|
|
Speicher fuer Modulparameter:
|
|
STRING wert[ANZAHL_PARAMETER +1];
|
|
|
|
|
|
Vorzeichenflag: -1 negatives Vorzeichen
|
|
0 kein Vorzeichen (dh. positiv)
|
|
1 positives Vorzeichen
|
|
short signum;
|
|
|
|
|
|
Startposition im InputString der fuer die Auswertung
|
|
relevanten Ziffern (nur aus Kompatibilitaetsgruenden):
|
|
unsigned short pos_no_blanks_no_sign1, pos_no_blanks_no_sign2;
|
|
|
|
unsigned short relevant_InputLength1, relevant_InputLength2;
|
|
unsigned short InputLength;
|
|
|
|
unsigned short IntegerLength;
|
|
|
|
|
|
(nur aus Kompatibilitaetsgruenden)
|
|
BOOLEAN with_decimal_point;
|
|
|
|
|
|
hierin befindet sich nach Aufruf der Funktion
|
|
'analyze_InputPrmtr()' die im GAUDI angegebene
|
|
Formatangabe in kodierter Form:
|
|
unsigned short coded_InpFormat1, coded_InpFormat2;
|
|
|
|
char DigitString1[MAX_STRFORMAT_LEN];
|
|
char DigitString2[MAX_STRFORMAT_LEN];
|
|
|
|
laenge eines STRING Variable
|
|
char szHil[81];
|
|
|
|
Rueckgabewert der Funktion 'schrittbetrieb()':
|
|
int schritt_aktiv;
|
|
|
|
int ret_val = 0;
|
|
|
|
|
|
Schrittbetriebs-Handling
|
|
schritt_aktiv = schrittbetrieb( zeilen_wert, index_on_expPrfLst );
|
|
|
|
if ( schritt_aktiv != 1 ) {
|
|
return( ret_val );
|
|
|
|
}
|
|
|
|
keine Aktivitaeten im Ruestlauf:
|
|
if ( strcmp( Ssp_vi->job.liststate, PREINT ) ) {
|
|
indx_o_ePL = index_on_expPrfLst;
|
|
|
|
if ( anzPrmtr == ANZAHL_PARAMETER - 1 ) {
|
|
|
|
Kopie der Modulparameter aus dem Shared Memory in den lokalen Bereich:
|
|
for ( indx = 1; indx < anzPrmtr; indx++ ) {
|
|
wert[indx] = *zeilen_wert->ptr[indx_o_ePL];
|
|
indx_o_ePL++;
|
|
|
|
}
|
|
// der Positionszaehler 'indx_o_ePL' zeigt nun bereits auf
|
|
// die entsprechende Einfuegeposition fuer den Ergebnisstring
|
|
|
|
|
|
GAUDI-Parameter ausgeben
|
|
debug_message( __FILE__, __LINE__, DEB_GAUDI
|
|
,"Input fuer Modul \"R_STROPERATE\": \
|
|
\n[%s][%s] \
|
|
\n[%s][%s]"
|
|
,(const char *)wert[INPUT_FORMAT]
|
|
,(const char *)wert[INPUT_STRING1]
|
|
,(const char *)wert[OPERATOR]
|
|
,(const char *)wert[INPUT_STRING2] );
|
|
|
|
}
|
|
else if ( anzPrmtr == ANZAHL_PARAMETER ) {
|
|
|
|
Kopie der Modulparameter aus dem Shared Memory in den lokalen Bereich:
|
|
for ( indx = 1; indx <= anzPrmtr; indx++ ) {
|
|
wert[indx] = *zeilen_wert->ptr[indx_o_ePL];
|
|
indx_o_ePL++;
|
|
|
|
}
|
|
// den Positionszaehler 'indx_o_ePL' auf die entsprechende
|
|
// Einfuegeposition fuer den Ergebnisstring setzen.
|
|
|
|
indx_o_ePL -= 2;
|
|
|
|
|
|
GAUDI-Parameter ausgeben
|
|
debug_message( __FILE__, __LINE__, DEB_GAUDI
|
|
,"Input fuer Modul \"R_STROPERATE\": \
|
|
\n[%s][%s] \
|
|
\n[%s][%s][%s]"
|
|
,(const char *)wert[INPUT_FORMAT]
|
|
,(const char *)wert[INPUT_STRING1]
|
|
,(const char *)wert[OPERATOR]
|
|
,(const char *)wert[INPUT_STRING2]
|
|
,(const char *)wert[FEHLERFLAG] );
|
|
|
|
}
|
|
|
|
Auswertung des ersten InputStrings:
|
|
ret_val = analyze_InputPrmtr( (const char *)wert[INPUT_STRING1]
|
|
,(const char *)wert[INPUT_FORMAT]
|
|
,(const char *)wert[INPUT_FORMAT]
|
|
|
|
,&signum
|
|
,&pos_no_blanks_no_sign1
|
|
,&IntegerLength
|
|
,&relevant_InputLength1
|
|
,&with_decimal_point
|
|
|
|
,&coded_InpFormat1 );
|
|
|
|
|
|
Ermittlung der gewuenschten Operation und entsprechend
|
|
Auswertung des zweiten InputStrings,
|
|
Ermittlung der max. Inputlaenge
|
|
if ( 0 == ret_val ) {
|
|
if ( strcmp( (const char *)wert[OPERATOR], "AND" ) == 0 ) {
|
|
|
|
bitweises 'AND':
|
|
|
|
Auswertung des zweiten InputStrings:
|
|
ret_val = analyze_InputPrmtr( (const char *)wert[INPUT_STRING2]
|
|
,(const char *)wert[INPUT_FORMAT]
|
|
,(const char *)wert[INPUT_FORMAT]
|
|
|
|
,&signum
|
|
,&pos_no_blanks_no_sign2
|
|
,&IntegerLength
|
|
,&relevant_InputLength2
|
|
,&with_decimal_point
|
|
|
|
,&coded_InpFormat2 );
|
|
|
|
if ( 0 == ret_val ) {
|
|
|
|
max. Inputlaenge:
|
|
InputLength =
|
|
((relevant_InputLength2 > relevant_InputLength1) ? relevant_InputLength2 : relevant_InputLength1);
|
|
|
|
|
|
Formatierung der Inputstrings:
|
|
generate_OutputFormat( (const char *)(wert[INPUT_STRING1] + pos_no_blanks_no_sign1)
|
|
,relevant_InputLength1
|
|
,InputLength
|
|
,signum
|
|
,VON_VORNE
|
|
,DigitString1 );
|
|
|
|
generate_OutputFormat( (const char *)(wert[INPUT_STRING2] + pos_no_blanks_no_sign2)
|
|
,relevant_InputLength2
|
|
,InputLength
|
|
,signum
|
|
,VON_VORNE
|
|
,DigitString2 );
|
|
|
|
|
|
Operation ausfuehren und Ergebnis an GAUDI(SHM-)-Schnittstelle zuweisen:
|
|
str_opAND( DigitString1
|
|
,DigitString2
|
|
,InputLength
|
|
,szHil );
|
|
*zeilen_wert->ptr[indx_o_ePL] = szHil;
|
|
|
|
}
|
|
}
|
|
else if ( strcmp( (const char *)wert[OPERATOR], "NAND" ) == 0 ) {
|
|
|
|
bitweises 'NAND':
|
|
|
|
Auswertung des zweiten InputStrings:
|
|
ret_val = analyze_InputPrmtr( (const char *)wert[INPUT_STRING2]
|
|
,(const char *)wert[INPUT_FORMAT]
|
|
,(const char *)wert[INPUT_FORMAT]
|
|
|
|
,&signum
|
|
,&pos_no_blanks_no_sign2
|
|
,&IntegerLength
|
|
,&relevant_InputLength2
|
|
,&with_decimal_point
|
|
|
|
,&coded_InpFormat2 );
|
|
|
|
if ( 0 == ret_val ) {
|
|
|
|
max. Inputlaenge:
|
|
InputLength =
|
|
((relevant_InputLength2 > relevant_InputLength1) ? relevant_InputLength2 : relevant_InputLength1);
|
|
|
|
|
|
Formatierung der Inputstrings:
|
|
generate_OutputFormat( (const char *)(wert[INPUT_STRING1] + pos_no_blanks_no_sign1)
|
|
,relevant_InputLength1
|
|
,InputLength
|
|
,signum
|
|
,VON_VORNE
|
|
,DigitString1 );
|
|
|
|
generate_OutputFormat( (const char *)(wert[INPUT_STRING2] + pos_no_blanks_no_sign2)
|
|
,relevant_InputLength2
|
|
,InputLength
|
|
,signum
|
|
,VON_VORNE
|
|
,DigitString2 );
|
|
|
|
|
|
Operation ausfuehren und Ergebnis an GAUDI(SHM-)-Schnittstelle zuweisen:
|
|
str_opNAND( DigitString1
|
|
,DigitString2
|
|
,InputLength
|
|
,coded_InpFormat1
|
|
,szHil );
|
|
*zeilen_wert->ptr[indx_o_ePL] = szHil;
|
|
}
|
|
}
|
|
else if ( strcmp( (const char *)wert[OPERATOR], "OR" ) == 0 ) {
|
|
|
|
bitweises 'OR':
|
|
|
|
Auswertung des zweiten InputStrings:
|
|
ret_val = analyze_InputPrmtr( (const char *)wert[INPUT_STRING2]
|
|
,(const char *)wert[INPUT_FORMAT]
|
|
,(const char *)wert[INPUT_FORMAT]
|
|
|
|
,&signum
|
|
,&pos_no_blanks_no_sign2
|
|
,&IntegerLength
|
|
,&relevant_InputLength2
|
|
,&with_decimal_point
|
|
|
|
,&coded_InpFormat2 );
|
|
|
|
if ( 0 == ret_val ) {
|
|
|
|
max. Inputlaenge:
|
|
InputLength =
|
|
((relevant_InputLength2 > relevant_InputLength1) ? relevant_InputLength2 : relevant_InputLength1);
|
|
|
|
|
|
Formatierung der Inputstrings:
|
|
generate_OutputFormat( (const char *)(wert[INPUT_STRING1] + pos_no_blanks_no_sign1)
|
|
,relevant_InputLength1
|
|
,InputLength
|
|
,signum
|
|
,VON_VORNE
|
|
,DigitString1 );
|
|
|
|
generate_OutputFormat( (const char *)(wert[INPUT_STRING2] + pos_no_blanks_no_sign2)
|
|
,relevant_InputLength2
|
|
,InputLength
|
|
,signum
|
|
,VON_VORNE
|
|
,DigitString2 );
|
|
|
|
|
|
Operation ausfuehren und Ergebnis an GAUDI(SHM-)-Schnittstelle zuweisen:
|
|
str_opOR( DigitString1
|
|
,DigitString2
|
|
,InputLength
|
|
,szHil );
|
|
*zeilen_wert->ptr[indx_o_ePL] = szHil;
|
|
|
|
}
|
|
}
|
|
else if ( strcmp( (const char *)wert[OPERATOR], "NOR" ) == 0 ) {
|
|
|
|
bitweises 'NOR':
|
|
|
|
Auswertung des zweiten InputStrings:
|
|
ret_val = analyze_InputPrmtr( (const char *)wert[INPUT_STRING2]
|
|
,(const char *)wert[INPUT_FORMAT]
|
|
,(const char *)wert[INPUT_FORMAT]
|
|
|
|
,&signum
|
|
,&pos_no_blanks_no_sign2
|
|
,&IntegerLength
|
|
,&relevant_InputLength2
|
|
,&with_decimal_point
|
|
|
|
,&coded_InpFormat2 );
|
|
|
|
if ( 0 == ret_val ) {
|
|
|
|
max. Inputlaenge:
|
|
InputLength =
|
|
((relevant_InputLength2 > relevant_InputLength1) ? relevant_InputLength2 : relevant_InputLength1);
|
|
|
|
|
|
Formatierung der Inputstrings:
|
|
generate_OutputFormat( (const char *)(wert[INPUT_STRING1] + pos_no_blanks_no_sign1)
|
|
,relevant_InputLength1
|
|
,InputLength
|
|
,signum
|
|
,VON_VORNE
|
|
,DigitString1 );
|
|
|
|
generate_OutputFormat( (const char *)(wert[INPUT_STRING2] + pos_no_blanks_no_sign2)
|
|
,relevant_InputLength2
|
|
,InputLength
|
|
,signum
|
|
,VON_VORNE
|
|
,DigitString2 );
|
|
|
|
|
|
Operation ausfuehren und Ergebnis an GAUDI(SHM-)-Schnittstelle zuweisen:
|
|
str_opNOR( DigitString1
|
|
,DigitString2
|
|
,InputLength
|
|
,coded_InpFormat1
|
|
,szHil );
|
|
*zeilen_wert->ptr[indx_o_ePL] = szHil;
|
|
}
|
|
}
|
|
else if ( strcmp( (const char *)wert[OPERATOR], "XOR" ) == 0 ) {
|
|
|
|
bitweises 'XOR':
|
|
|
|
Auswertung des zweiten InputStrings:
|
|
ret_val = analyze_InputPrmtr( (const char *)wert[INPUT_STRING2]
|
|
,(const char *)wert[INPUT_FORMAT]
|
|
,(const char *)wert[INPUT_FORMAT]
|
|
|
|
,&signum
|
|
,&pos_no_blanks_no_sign2
|
|
,&IntegerLength
|
|
,&relevant_InputLength2
|
|
,&with_decimal_point
|
|
|
|
,&coded_InpFormat2 );
|
|
|
|
if ( 0 == ret_val ) {
|
|
|
|
max. Inputlaenge:
|
|
InputLength =
|
|
((relevant_InputLength2 > relevant_InputLength1) ? relevant_InputLength2 : relevant_InputLength1);
|
|
|
|
|
|
Formatierung der Inputstrings:
|
|
generate_OutputFormat( (const char *)(wert[INPUT_STRING1] + pos_no_blanks_no_sign1)
|
|
,relevant_InputLength1
|
|
,InputLength
|
|
,signum
|
|
,VON_VORNE
|
|
,DigitString1 );
|
|
|
|
generate_OutputFormat( (const char *)(wert[INPUT_STRING2] + pos_no_blanks_no_sign2)
|
|
,relevant_InputLength2
|
|
,InputLength
|
|
,signum
|
|
,VON_VORNE
|
|
,DigitString2 );
|
|
|
|
|
|
Operation ausfuehren und Ergebnis an GAUDI(SHM-)-Schnittstelle zuweisen:
|
|
str_opXOR( DigitString1
|
|
,DigitString2
|
|
,InputLength
|
|
,szHil );
|
|
*zeilen_wert->ptr[indx_o_ePL] = szHil;
|
|
}
|
|
}
|
|
else if ( strcmp( (const char *)wert[OPERATOR], "XNOR" ) == 0 ) {
|
|
|
|
bitweises 'XNOR':
|
|
|
|
Auswertung des zweiten InputStrings:
|
|
ret_val = analyze_InputPrmtr( (const char *)wert[INPUT_STRING2]
|
|
,(const char *)wert[INPUT_FORMAT]
|
|
,(const char *)wert[INPUT_FORMAT]
|
|
|
|
,&signum
|
|
,&pos_no_blanks_no_sign2
|
|
,&IntegerLength
|
|
,&relevant_InputLength2
|
|
,&with_decimal_point
|
|
|
|
,&coded_InpFormat2 );
|
|
|
|
if ( 0 == ret_val ) {
|
|
|
|
max. Inputlaenge:
|
|
InputLength =
|
|
((relevant_InputLength2 > relevant_InputLength1) ? relevant_InputLength2 : relevant_InputLength1);
|
|
|
|
|
|
Formatierung der Inputstrings:
|
|
generate_OutputFormat( (const char *)(wert[INPUT_STRING1] + pos_no_blanks_no_sign1)
|
|
,relevant_InputLength1
|
|
,InputLength
|
|
,signum
|
|
,VON_VORNE
|
|
,DigitString1 );
|
|
|
|
generate_OutputFormat( (const char *)(wert[INPUT_STRING2] + pos_no_blanks_no_sign2)
|
|
,relevant_InputLength2
|
|
,InputLength
|
|
,signum
|
|
,VON_VORNE
|
|
,DigitString2 );
|
|
|
|
|
|
Operation ausfuehren und Ergebnis an GAUDI(SHM-)-Schnittstelle zuweisen:
|
|
str_opXNOR( DigitString1
|
|
,DigitString2
|
|
,InputLength
|
|
,coded_InpFormat1
|
|
,szHil );
|
|
*zeilen_wert->ptr[indx_o_ePL] = szHil;
|
|
}
|
|
}
|
|
else if ( strcmp( (const char *)wert[OPERATOR], "NOT" ) == 0 ) {
|
|
|
|
bitweises 'NOT':
|
|
|
|
Formatierung des Inputstrings:
|
|
generate_OutputFormat( (const char *)(wert[INPUT_STRING1] + pos_no_blanks_no_sign1)
|
|
,relevant_InputLength1
|
|
,relevant_InputLength1
|
|
,signum
|
|
,VON_VORNE
|
|
,DigitString1 );
|
|
|
|
|
|
Operation ausfuehren und Ergebnis an GAUDI(SHM-)-Schnittstelle zuweisen:
|
|
str_opNOT( DigitString1
|
|
,relevant_InputLength1
|
|
,coded_InpFormat1
|
|
, szHil);
|
|
*zeilen_wert->ptr[indx_o_ePL] = szHil;
|
|
}
|
|
else if ( strcmp( (const char *)wert[OPERATOR], "SHL" ) == 0 ) {
|
|
|
|
'SHIFT LEFT':
|
|
|
|
Auswertung des zweiten InputStrings (Anzahl an Shift-Operationen):
|
|
ret_val = analyze_InputPrmtr( (const char *)wert[INPUT_STRING2]
|
|
,INTEGER_FORMAT_STRING
|
|
,INTEGER_FORMAT_STRING
|
|
|
|
,&signum
|
|
,&pos_no_blanks_no_sign2
|
|
,&IntegerLength
|
|
,&relevant_InputLength2
|
|
,&with_decimal_point
|
|
|
|
,&coded_InpFormat2 );
|
|
|
|
if ( 0 == ret_val ) {
|
|
if ( signum != 0 ) {
|
|
// error_message( ERR_ERROR_TTNR, HEADER, __LINE__
|
|
// ,"Parameter fuer SHIFT LEFT ist ungueltig, da nicht vorzeichenlos!" );
|
|
error_message( ERR_ERROR_TTNR, HEADER, __LINE__
|
|
,"Parameter for SHIFT LEFT is invalid, as it is not unsigned!" );
|
|
ret_val = -1;
|
|
|
|
}
|
|
}
|
|
if ( 0 == ret_val ) {
|
|
|
|
Formatierung des Inputstrings:
|
|
generate_OutputFormat( (const char *)(wert[INPUT_STRING1] + pos_no_blanks_no_sign1)
|
|
,relevant_InputLength1
|
|
,relevant_InputLength1
|
|
,signum
|
|
,VON_VORNE
|
|
,DigitString1 );
|
|
|
|
|
|
Operation ausfuehren und Ergebnis an GAUDI(SHM-)-Schnittstelle zuweisen:
|
|
str_opSHL( DigitString1
|
|
,relevant_InputLength1
|
|
,coded_InpFormat1
|
|
,(unsigned short)atoi( (const char *)(wert[INPUT_STRING2] + pos_no_blanks_no_sign2) )
|
|
, szHil);
|
|
*zeilen_wert->ptr[indx_o_ePL] = szHil;
|
|
}
|
|
}
|
|
else if ( strcmp( (const char *)wert[OPERATOR], "SHR" ) == 0 ) {
|
|
|
|
'SHIFT RIGHT':
|
|
|
|
Auswertung des zweiten InputStrings (Anzahl an Shift-Operationen):
|
|
ret_val = analyze_InputPrmtr( (const char *)wert[INPUT_STRING2]
|
|
,INTEGER_FORMAT_STRING
|
|
,INTEGER_FORMAT_STRING
|
|
|
|
,&signum
|
|
,&pos_no_blanks_no_sign2
|
|
,&IntegerLength
|
|
,&relevant_InputLength2
|
|
,&with_decimal_point
|
|
|
|
,&coded_InpFormat2 );
|
|
|
|
if ( 0 == ret_val ) {
|
|
if ( signum != 0 ) {
|
|
// error_message( ERR_ERROR_TTNR, HEADER, __LINE__
|
|
// ,"Parameter fuer SHIFT RIGHT ist ungueltig, da nicht vorzeichenlos!" );
|
|
error_message( ERR_ERROR_TTNR, HEADER, __LINE__
|
|
,"Parameter for SHIFT RIGHT is invalid, as it is not unsigned!" );
|
|
ret_val = -1;
|
|
|
|
}
|
|
}
|
|
if ( 0 == ret_val ) {
|
|
|
|
Formatierung des Inputstrings:
|
|
generate_OutputFormat( (const char *)(wert[INPUT_STRING1] + pos_no_blanks_no_sign1)
|
|
,relevant_InputLength1
|
|
,relevant_InputLength1
|
|
,signum
|
|
,VON_VORNE
|
|
,DigitString1 );
|
|
|
|
|
|
Operation ausfuehren und Ergebnis an GAUDI(SHM-)-Schnittstelle zuweisen:
|
|
str_opSHR( DigitString1
|
|
,relevant_InputLength1
|
|
,coded_InpFormat1
|
|
,(unsigned short)atoi( (const char *)(wert[INPUT_STRING2] + pos_no_blanks_no_sign2) )
|
|
, szHil);
|
|
*zeilen_wert->ptr[indx_o_ePL] = szHil;
|
|
}
|
|
}
|
|
else {
|
|
// error_message( ERR_ERROR_TTNR, HEADER, __LINE__
|
|
// ,"Ungueltige String-Operation: [%s]"
|
|
// ,(const char *)wert[OPERATOR] );
|
|
error_message( ERR_ERROR_TTNR, HEADER, __LINE__
|
|
,"Invalid string operation: [%s]"
|
|
,(const char *)wert[OPERATOR] );
|
|
ret_val = -1;
|
|
|
|
}
|
|
}
|
|
|
|
Fehlerflag an die &-Variable zurueckgeben
|
|
if (anzPrmtr == ANZAHL_PARAMETER) {
|
|
if (ret_val){
|
|
*zeilen_wert->ptr[index_on_expPrfLst + FEHLERFLAG - 1] = "1";
|
|
}
|
|
else{
|
|
*zeilen_wert->ptr[index_on_expPrfLst + FEHLERFLAG - 1] = "0";
|
|
}
|
|
}
|
|
|
|
|
|
|
|
Ergebnis ausgeben:
|
|
debug_message( __FILE__, __LINE__, DEB_DATA
|
|
,"Output von Modul \"R_STROPERATE\": \
|
|
\n[%s]"
|
|
,(const char *)(*zeilen_wert->ptr[indx_o_ePL]) );
|
|
|
|
// Ende von 'if ( strcmp( Ssp_vi->job.liststate, PREINT ) )'
|
|
|
|
}
|
|
return 0;
|
|
|
|
}
|
|
</PRE>
|
|
</BODY>
|
|
</HTML>
|