
// ********************************************************
// By KreAktiv.ch - 2009 - GNU Lizenz
// Dieser Code untersteht der GNU-Lizenz. (General Public License)
// Dieses Script darf von jedermann kostenlos benutzt und geändert werden,
// solange der Copyright-Verweis und die restlichen Kommentare erhalten bleiben.
// Mit dem Einsatz dieses Skripts akzeptieren Sie, dass KreAktiv von jeglicher
// Haftung und Gewährleistung hinsichtlich des Einsatzes befreit ist.
// Der Verkauf dieses Skripts, auch in modifizierter Form, ist ohne
// vorherige Absprache ausdrücklich untersagt.
// In jeden Fall muss der Copyright-Verweis und die restlichen Kommentare
// erhalten bleiben.
// *********************************************************
// Filemaker 10
// cfDefinition für Code 128 B B/C
// Version 1.2 / Läuft 7.1.2010rh
// *********************************************************
//
/*-------------------*/
/* Code 128 B B/C    */
/*-------------------*/
//
// Berechnung der Checksumme
//
// Aufruf:	[ $i = 1; $Code128 = Text; $Checksum = "" ]
Name:		cfC128Checksum
Parameter:

// ******************* Start CF ****************************
// By KreAktiv.ch - 2009 - GNU Lizenz
// $i = 1, $Code128 = Code, Resultat -> $Checksum, $i
// Läuft 31.12.2009rh
// *********************************************************
SetzeVars ([
 temp = Code( ZeichenMitte( $Code128 ; $i ; 1 )); 
 temp = Wenn( temp < 127 ; temp - 32 ; temp - 105); // ENDE Wenn
 $Checksum = Wenn( $i = 1 ; temp ; Mod( $Checksum + (temp * ($i - 1 )); 103)); // ENDE Wenn
 $i = $i + 1 // Nächstes Zeichen
];
 Falls( $i < Länge( $Code128 ) + 1 ; cfC128Checksum) // ENDE Falls - (RekursivAufruf)
) // ENDE SetzeVars
// ******************* Ende CF *****************************
//
// Genügend Zeichen für Type C?
//
// Aufruf:	[ 2/4/6 -> $mini; $chaine = Text ]	Minimum erforderliche Zeichen
// Antwort:	0 -> Tabelle C / <0 -> Tabelle B

Name:		cfC128TestNum
Parameter:

// ******************* Start CF ****************************
// By KreAktiv.ch - 2009 - GNU Lizenz
// MindestZeichen -> $mini, $chaine = Daten, ab Position -> $i, Resultat -> $mini
// Läuft 3.1.2010rh
// *********************************************************
Wenn( $mini = 6 UND länge( $chaine) - $i = 6
 UND Code( ZeichenRechts( $chaine ; 1)) > 47 
 UND Code( ZeichenRechts( $chaine ; 1)) < 58 ;
 SetzeVars( $mini = -1;"")
; // Else
 SetzeVars ([
  $mini = $mini - 1 ; 
  temp = Code( ZeichenMitte( $chaine ; $i + $mini ; 1 )); // von Hinten n. V.
  $mini = Wenn( (temp < 48 ODER temp > 57); - 11 ; $mini) // ENDE Wenn Ausstieg?
 ];
  Falls( $mini > 0 ; cfC128TestNum) // ENDE Falls - (RekursivAufruf)
 ) // ENDE SetzeVars
) // ENDE Wenn
// ******************* Ende CF *****************************
//
// Code für Type B
//
// Aufruf:	[ $tableB = true; $i = 1; $chaine = Text ]

Name:		cfC128B
Parameter:

// ******************* Start CF ****************************
// By KreAktiv.ch - 2009 - GNU Lizenz
// tableB = true, $chaine = Daten, Resultat -> $Code128
// Läuft 31.12.2009rh
// *********************************************************
SetzeVars ([
 $Code128 = Wenn( $i = 1 ; Char(209) ; $Code128) ; // Anfang? -> chr209 für B
 $Code128 = $Code128 & ZeichenMitte( $chaine ; $i ; 1);// ein Zeichen Type B
 $i = $i + 1 
];
 Falls( $i <= Länge( $chaine) ; cfC128B) // ENDE Falls - (RekursivAufruf)
) // ENDE SetzeVars
// ******************* Ende CF *****************************
//
// Code für Type B/C
//
// Aufruf:	[ $tableB = true; $i = 1; $chaine = Text ]

Name:		cfC128BC
Parameter:

// ******************* Start CF ****************************
// By KreAktiv.ch - 2009 - GNU Lizenz
// $tableB = true, $chaine = Daten, Resultat -> $Code128
// Läuft 3.1.2010rh
// *********************************************************
// Welche Tabelle verwenden wir?
SetzeVars([
temp = Wenn( $tableB ; // wir sind in Tabelle B
 SetzeVars([
  $mini = Wenn( $i = 1 ODER $i + 3 >= Länge($chaine) ; 4 ; 6); // Minimum für C
  temp = cfC128TestNum; 
  $tableB = Wenn( $mini < 0 ; //  -> B
   SetzeVars(
    $Code128 = Wenn( $i = 1 ; Char(209) ; $Code128) // Anfang? -> chr209 für B
   ; Wahr) // Ende SetzeVars
  ; // Else -> wechsel zu C
   SetzeVars(
    $Code128 = Wenn( $i = 1 ; Char(210) ; $Code128 & Char(204)) // Anfang oder Wechsel -> C
   ; Falsch) // Ende SetzeVars
   ) // Ende Wenn -> B
  ]; "") // ENDE SetzeVars
; "" ); // Ende Wenn tableB
// Wir beginnen mit Schreiben
temp = Wenn( NICHT $tableB ; // wir sind in Tabelle C
 SetzeVars([
  temp = SetzeVars( $mini = 2; cfC128TestNum); // Minimum in C
  temp = Wenn ( $mini = 0 ; // weitere 2 Zahlen
   SetzeVars([
    $dummy = ZeichenMitte( $chaine ; $i ; 2);
    $dummy = Wenn( $dummy < 95; $dummy + 32; $dummy +105);
    $Code128 = $Code128 & Char($dummy);
    $i = $i + 2
   ]; "") // ENDE SetzeVars
  ; // Else Wechsel -> B
   SetzeVars([
    $Code128 = $Code128 & Char(205);
    $tableB = Wahr
   ]; "") // ENDE SetzeVars
  ) // Ende Wenn weitere 2 Zahlen
 ]; "") // ENDE SetzeVars
; "" // Else 
); // Ende Wenn tableC
temp = Wenn( $tableB ; // wir sind in Tabelle B und schreiben ein Zeichen
 SetzeVars([
  $Code128 = $Code128 & ZeichenMitte( $chaine ; $i ; 1);// ein Zeichen Type B
  $i = $i + 1 
 ]; "") // ENDE SetzeVars
; "") // Ende Wenn wir sind
]; Falls( $i <= Länge( $chaine) ; cfC128BC) // ENDE Falls - (RekursivAufruf)
) // ENDE SetzeVars
// ******************* Ende CF *****************************

// ************* Start FormelFeldDefinition ****************
// By KreAktiv.ch - 2009 - GNU Lizenz
// FormelFeldDefinition für Code 128
// Läuft 3.1.2010rh
// *********************************************************
//
Code128 = Formel (Text)
/*-------------------*/
/* Code 128 B/C      */
/* 03.01.10rh        */
/*-------------------*/
// By KreAktiv.ch - 2009 - GNU Lizenz
//
SetzeVars([
 $tableB = Wahr;
 $chaine = text ; $i = 1
];
 Falls( Länge( $chaine ) > 0; cfC128BC; ) //ENDE Falls, Haben wir Text -> übersetzen?
 & $Code128 &
 SetzeVars([ // Checksumme berechnen
  $i = 1;  $Checksum = ""
 ];
  Falls( Länge( $Code128 ) > 0; cfC128Checksum; ) //ENDE Falls
 ) //ENDE SetzeVars
 &
 SetzeVars(
  $Checksum = Falls( $Checksum < 95 ; $Checksum + 32 ; $Checksum + 105);
  Char( $Checksum) & Char(211)
 ) //ENDE SetzeVars
) //ENDE SetzeVars
// ************* Ende FormelFeldDefinition *****************