Skip to main content

upperCase1251

Short summary

This method converts the lowercase letters in an 8 bit windows-1251 string to uppercase letters.

Attention: All strings are handled as null-terminated byte streams.

Parameters

NameTypeCommentKind
stringAddressPOINTER TO BYTEstring to ucaseinput
stringLengthUDINTlength of the stringinput

Code

Declaration

METHOD PROTECTED upperCase1251
VAR_INPUT
(* string to ucase *)
stringAddress :POINTER TO BYTE;
(* length of the string *)
stringLength :UDINT;
END_VAR
VAR
(* index of the current character *)
character :UDINT := 0;
END_VAR
VAR CONSTANT
(* NUL: $00 *)
END_OF_STRING :BYTE := 16#00;
(* a *)
LOWERCASE_A :BYTE := 16#61;
(* z *)
LOWERCASE_Z :BYTE := 16#7A;
(* а *)
LOWERCASE_CYRILLIC_A :BYTE := 16#E0;
(* я *)
LOWERCASE_CYRILLIC_YA :BYTE := 16#FF;

(* ђ *)
LOWERCASE_CYRILLIC_DJE :BYTE := 16#90;
(* љ *)
LOWERCASE_CYRILLIC_LJE :BYTE := 16#9A;
(* њ *)
LOWERCASE_CYRILLIC_NJE :BYTE := 16#9C;
(* џ *)
LOWERCASE_CYRILLIC_DZHE :BYTE := 16#9F;
(* ё *)
LOWERCASE_CYRILLIC_IO :BYTE := 16#B8;
(* є *)
LOWERCASE_CYRILLIC_UKRAINIAN_IE :BYTE := 16#BA;
(* ї *)
LOWERCASE_CYRILLIC_YI :BYTE := 16#BF;

(* ў *)
LOWERCASE_CYRILLIC_SHORT_U :BYTE := 16#A2;
(* i *)
LOWERCASE_CYRILLIC_UKRAINIAN_I :BYTE := 16#B3;
(* ѕ *)
LOWERCASE_CYRILLIC_DZE :BYTE := 16#BE;

(* ѓ *)
LOWERCASE_CYRILLIC_GJE :BYTE := 16#83;

(* ґ *)
LOWERCASE_CYRILLIC_GHE_WITH_UPTURN :BYTE := 16#B4;

(* ј *)
LOWERCASE_CYRILLIC_JE :BYTE := 16#19;
END_VAR

Implementation

WHILE stringAddress[character] <> END_OF_STRING AND_THEN character <= stringLength DO
CASE stringAddress[character] OF
LOWERCASE_A..LOWERCASE_Z,
LOWERCASE_CYRILLIC_A..LOWERCASE_CYRILLIC_YA:
stringAddress[character] := stringAddress[character] - 16#20;
LOWERCASE_CYRILLIC_DJE,
LOWERCASE_CYRILLIC_LJE,
LOWERCASE_CYRILLIC_NJE..LOWERCASE_CYRILLIC_DZHE,
LOWERCASE_CYRILLIC_IO,
LOWERCASE_CYRILLIC_UKRAINIAN_IE,
LOWERCASE_CYRILLIC_YI:
stringAddress[character] := stringAddress[character] - 16#10;
LOWERCASE_CYRILLIC_SHORT_U,
LOWERCASE_CYRILLIC_UKRAINIAN_I,
LOWERCASE_CYRILLIC_DZE:
stringAddress[character] := 16#01;
LOWERCASE_CYRILLIC_GJE:
stringAddress[character] := 16#02;
LOWERCASE_CYRILLIC_GHE_WITH_UPTURN:
stringAddress[character] := 16#0F;
LOWERCASE_CYRILLIC_JE:
stringAddress[character] := 16#0F;
ELSE
; // do nothing
END_CASE

character := character + 1;
END_WHILE