Browse Source

* Maskutils, #10149

git-svn-id: trunk@9242 -
marco 17 years ago
parent
commit
e460c7c195
4 changed files with 555 additions and 55 deletions
  1. 1 0
      .gitattributes
  2. 54 54
      packages/fcl-base/Makefile
  3. 1 1
      packages/fcl-base/Makefile.fpc
  4. 499 0
      packages/fcl-base/src/inc/maskutils.pp

+ 1 - 0
.gitattributes

@@ -3966,6 +3966,7 @@ packages/fcl-base/src/inc/inicol.pp svneol=native#text/plain
 packages/fcl-base/src/inc/inifiles.pp svneol=native#text/plain
 packages/fcl-base/src/inc/inifiles.pp svneol=native#text/plain
 packages/fcl-base/src/inc/iostream.pp svneol=native#text/plain
 packages/fcl-base/src/inc/iostream.pp svneol=native#text/plain
 packages/fcl-base/src/inc/libtar.pas svneol=native#text/plain
 packages/fcl-base/src/inc/libtar.pas svneol=native#text/plain
+packages/fcl-base/src/inc/maskutils.pp svneol=native#text/plain
 packages/fcl-base/src/inc/pooledmm.pp svneol=native#text/plain
 packages/fcl-base/src/inc/pooledmm.pp svneol=native#text/plain
 packages/fcl-base/src/inc/rtfdata.inc svneol=native#text/plain
 packages/fcl-base/src/inc/rtfdata.inc svneol=native#text/plain
 packages/fcl-base/src/inc/rtfpars.pp svneol=native#text/plain
 packages/fcl-base/src/inc/rtfpars.pp svneol=native#text/plain

+ 54 - 54
packages/fcl-base/Makefile

@@ -1,5 +1,5 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2007/11/08]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2007/11/13]
 #
 #
 default: all
 default: all
 MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded
 MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded
@@ -243,163 +243,163 @@ PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(F
 override PACKAGE_NAME=fcl-base
 override PACKAGE_NAME=fcl-base
 override PACKAGE_VERSION=2.0.0
 override PACKAGE_VERSION=2.0.0
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  syncobjs daemonapp fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 endif
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  fileinfo syncobjs daemonapp ServiceManager fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  fileinfo syncobjs daemonapp ServiceManager fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 endif
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  syncobjs daemonapp fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  syncobjs
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  syncobjs
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  daemonapp fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  syncobjs daemonapp fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
 ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netware)
 ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  syncobjs
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  syncobjs
 endif
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  daemonapp fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
 ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 endif
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  syncobjs daemonapp fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 endif
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
 ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  syncobjs
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  syncobjs
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wince)
 ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  fileinfo syncobjs fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  fileinfo syncobjs fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
 ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 endif
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
 ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  syncobjs daemonapp fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  syncobjs daemonapp fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  daemonapp fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
 ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  daemonapp fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
 ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
 ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  syncobjs daemonapp fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  daemonapp fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  syncobjs daemonapp fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  syncobjs daemonapp fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  daemonapp fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  syncobjs daemonapp fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
 ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  syncobjs daemonapp fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  syncobjs daemonapp fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  syncobjs daemonapp fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  fileinfo syncobjs daemonapp ServiceManager fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  fileinfo syncobjs daemonapp ServiceManager fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 endif
 endif
 ifeq ($(FULL_TARGET),arm-linux)
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  syncobjs daemonapp fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 endif
 endif
 ifeq ($(FULL_TARGET),arm-wince)
 ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  fileinfo syncobjs fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  fileinfo syncobjs fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),arm-gba)
 ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 endif
 endif
 ifeq ($(FULL_TARGET),arm-nds)
 ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 endif
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
 ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 endif
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
 ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  syncobjs daemonapp fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll  syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils  syncobjs daemonapp fptimer
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll
+override TARGET_UNITS+=contnrs inifiles ezcgi rtfpars idea base64 gettext iostream cachecls avl_tree eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 endif
 endif
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
 override TARGET_RSTS+=cachecls custapp cgiapp eventlog registry streamcoll inicol
 override TARGET_RSTS+=cachecls custapp cgiapp eventlog registry streamcoll inicol

+ 1 - 1
packages/fcl-base/Makefile.fpc

@@ -14,7 +14,7 @@ packages_win64=winunits
 units=contnrs inifiles ezcgi rtfpars idea base64 gettext \
 units=contnrs inifiles ezcgi rtfpars idea base64 gettext \
       iostream cachecls avl_tree \
       iostream cachecls avl_tree \
       eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream \
       eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream \
-      streamex blowfish streamio inicol pooledmm libtar streamcoll
+      streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils
 units_beos=syncobjs 
 units_beos=syncobjs 
 units_freebsd=syncobjs daemonapp fptimer
 units_freebsd=syncobjs daemonapp fptimer
 units_darwin=syncobjs daemonapp fptimer 
 units_darwin=syncobjs daemonapp fptimer 

+ 499 - 0
packages/fcl-base/src/inc/maskutils.pp

@@ -0,0 +1,499 @@
+{
+ /***************************************************************************
+                                  maskutils.pas
+                                  ---------
+
+ ***************************************************************************/
+
+ *****************************************************************************
+ *                                                                           *
+ *  This file is part of the Lazarus Component Library (LCL)                 *
+ *                                                                           *
+ *  See the file COPYING.modifiedLGPL, included in this distribution,        *
+ *  for details about the copyright.                                         *
+ *                                                                           *
+ *  This program is distributed in the hope that it will be useful,          *
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of           *
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                     *
+ *                                                                           *
+ *****************************************************************************
+ 
+
+ Author: Boguslaw Brandys
+ 
+ Abstract:
+    FormatMaskText implementation
+ 
+}
+
+
+unit maskutils;
+
+{$mode objfpc}{$H+}
+{.$define DebugMaskUtils}
+{.$define MaskRaiseException}
+
+
+
+{ Define MaskRaiseException only if you want strict matching for required
+characters. It raises exception for some tests valid under delphi like
+
+AssertEquals('(123)_   -    ', FormatMaskText('(000)_000-0000;0;*','123'));
+
+}
+
+interface
+
+uses
+Classes
+,SysUtils
+ {$ifdef DebugMaskUtils}
+,lclproc
+ {$endif};
+
+
+function FormatMaskText(const EditMask: string; const Value: string): string;
+
+implementation
+
+
+resourcestring
+
+//exInvalidMaskValue = 'Input mask value incorrect';
+exInvalidMaskValue = 'FormatMaskText function failed!';
+//replace above text when all bugs will be fixed!
+
+
+
+
+type
+  TStepState =
+  (
+  stLeading,  //? not used currently
+  stUpper,    //use uppercase
+  stLower,    //use lowercase
+  stSpecial,  //use escape character
+  stArbitrary //put arbitrary character
+  );
+  
+  TParseState = set of TStepState;
+
+
+
+{ TMaskUtils }
+
+type
+  TMaskUtils = class(TObject)
+    FValue: string;
+    private
+    SourcePosition,Position : Integer;
+    FEditMask,FMask : string;
+    SourceVal,ExitVal : string;
+    Matched : Boolean;
+    MissChar : Char;
+    State : TParseState;
+    procedure EvaluateExit;
+    procedure EvaluateMissing;
+    procedure DoFillRest;
+    procedure DoLiteral;
+    procedure DoToken;
+    procedure DoUpper;
+    procedure DoLower;
+    procedure DoNumeric(Required : Boolean);
+    procedure DoAlpha(Required : Boolean);
+    procedure DoAlphaNumeric(Required : Boolean);
+    procedure DoNumericPlusMinus;
+    procedure DoArbitrary(Required : Boolean);
+    procedure DoTime;
+    procedure DoDate;
+    procedure SetMask(const AValue: string);
+    procedure SetValue(const AValue: string);
+    protected
+    procedure RaiseError;
+    procedure ExtractMask;
+    function MaskPtr : Char;
+    function SourcePtr : Char;
+    public
+    function Validate : string;
+    property Mask : string read FEditMask write SetMask;
+    property Value : string read FValue write SetValue;
+  end;
+
+
+
+
+function IsNumeric(const C : Char) : Boolean;
+begin
+  Result := C In ['0'..'9'];
+end;
+
+
+
+function IsAlpha(const C : Char) : Boolean;
+begin
+  //Fix it later if better way is possible
+  Result := AnsiUpperCase(C) <> AnsiLowerCase(C);
+end;
+
+
+function IsToken(const C : Char) : Boolean;
+begin
+  Result := C In ['!','>','<','\','L','l','A','a','C','c','0','9','#',':',
+            '/',';'];
+end;
+
+
+
+{ TMaskUtils }
+
+
+
+
+
+procedure TMaskUtils.SetMask(const AValue: string);
+begin
+  if FEditMask = AValue then Exit;
+  FEditMask := AValue;
+  ExtractMask;
+end;
+
+procedure TMaskUtils.SetValue(const AValue: string);
+begin
+  if SourceVal=AValue then exit;
+  SourceVal := AValue;
+end;
+
+
+
+function TMaskUtils.Validate: string;
+begin
+ {Prepare}
+  ExitVal := '';
+  Position := 1;
+  SourcePosition := 1;
+  State := [];
+
+ {Process}
+  while (Position <= Length(FMask)) do
+    begin
+      if (IsToken(MaskPtr) and not (stSpecial In State)) then
+       DoToken
+      else
+        DoLiteral;
+
+      Inc(Position);
+    end;
+
+  DoFillRest;
+  Result := ExitVal;
+end;
+
+
+
+
+
+
+procedure TMaskUtils.EvaluateMissing;
+begin
+  ExitVal := ExitVal + MissChar;
+  Inc(SourcePosition);
+end;
+
+
+procedure TMaskUtils.RaiseError;inline;
+begin
+  if SourcePosition > Length(SourceVal) then
+   EvaluateMissing;
+{$ifdef MaskRaiseException}
+  raise Exception.CreateFmtHelp(exInvalidMaskValue,[],Position);
+{$endif}
+  if Matched then
+   raise Exception.CreateFmtHelp(exInvalidMaskValue,[],Position);
+end;
+
+
+
+function TMaskUtils.MaskPtr : Char;
+begin
+  Result := FMask[Position];
+end;
+
+
+
+function TMaskUtils.SourcePtr : Char;
+begin
+  if SourcePosition <= Length(SourceVal) then
+    Result := SourceVal[SourcePosition]
+  else Result := #0;
+end;
+
+
+
+
+
+{Extract mask from input parameter}
+procedure TMaskUtils.ExtractMask;
+var
+  P : Integer;
+  s : string;
+begin
+  { TODO:  Implement clear, UTF8 compliant parsing ? }
+  MissChar := #32;
+  Matched := false;
+  s := Copy(FEditMask,1,Length(FEditMask));
+  P := LastDelimiter(';',s);
+  if P = 0 then FMask := s
+  else
+    begin
+      MissChar := PChar(Copy(s,P+1,1))^;
+      //for  compatibility with delphi bug ,uncomment  line below !
+      //MissChar := #32;
+      Delete(s,P,2);
+      P := LastDelimiter(';',s);
+      Matched := (Copy(s,P+1,1) <> '0');
+      Delete(s,P,2);
+      FMask := s;
+    end;
+end;
+
+
+
+
+procedure TMaskUtils.EvaluateExit;
+begin
+  if stUpper in State then
+   ExitVal := ExitVal + UpperCase(SourcePtr)
+  else
+    if stLower in State then
+     ExitVal := ExitVal + LowerCase(SourcePtr)
+  else
+    ExitVal := ExitVal + SourcePtr;
+  Inc(SourcePosition);
+end;
+
+
+
+
+procedure TMaskUtils.DoUpper;
+begin
+ {$ifdef DebugMaskUtils}
+  DebugLn(['DoUpper',',Position=',Position]);
+ {$endif}
+  if stLower in State then
+   Exclude(State,stLower)
+  else
+    Include(State,stUpper);
+
+  {Ugly check for '<>' sequence. Is that required ?}
+  if (Position > 1) and (FMask[Position-1] = '<') then
+    begin
+      Exclude(State,stLower);
+      Exclude(State,stUpper);
+    end;
+end;
+
+procedure TMaskUtils.DoLower;
+begin
+ {$ifdef DebugMaskUtils}
+  DebugLn(['DoLower',',Position=',Position]);
+ {$endif}
+  if stUpper in State then
+   Exclude(State,stUpper)
+  else
+    Include(State,stLower);
+end;
+
+
+procedure TMaskUtils.DoAlphaNumeric(Required : Boolean);
+begin
+ {$ifdef DebugMaskUtils}
+  DebugLn(['DoAlphaNumeric',',Position=',Position]);
+ {$endif}
+  if Required then
+    begin
+      if (IsAlpha(SourcePtr) or IsNumeric(SourcePtr)) then EvaluateExit
+      else
+        RaiseError;
+    end
+  else
+    begin
+      if (IsAlpha(SourcePtr) or IsNumeric(SourcePtr)) then EvaluateExit
+      else
+        EvaluateMissing;
+    end;
+
+end;
+
+procedure TMaskUtils.DoArbitrary(Required : Boolean);
+begin
+ {$ifdef DebugMaskUtils}
+  DebugLn(['DoArbitrary',',Position=',Position]);
+ {$endif}
+  Include(State,stArbitrary);
+  if Required then
+    begin
+      if Position > Length(SourceVal) then  RaiseError;
+    end
+  else
+    begin
+      if Position > Length(SourceVal) then  EvaluateMissing
+      else
+        EvaluateExit;
+    end;
+end;
+
+
+procedure TMaskUtils.DoNumeric(Required : Boolean);
+begin
+ {$ifdef DebugMaskUtils}
+  DebugLn(['DoNumeric',',Position=',Position]);
+ {$endif}
+  if Required then
+    begin
+      if IsNumeric(SourcePtr) then EvaluateExit
+      else
+        RaiseError;
+    end
+  else
+    begin
+      if IsNumeric(SourcePtr) then EvaluateExit
+      else
+        EvaluateMissing;
+    end;
+end;
+
+procedure TMaskUtils.DoNumericPlusMinus;
+begin
+ {$ifdef DebugMaskUtils}
+  DebugLn(['DoNumericPlusMinus',',Position=',Position]);
+ {$endif}
+  if (IsNumeric(SourcePtr)) or
+     (SourcePtr = '+') or
+     (SourcePtr = '-') then
+     EvaluateExit
+  else
+    EvaluateMissing;
+end;
+
+
+procedure TMaskUtils.DoTime;
+begin
+ {$ifdef DebugMaskUtils}
+  DebugLn(['DoTime',',Position=',Position]);
+ {$endif}
+  ExitVal := ExitVal + TimeSeparator;
+end;
+
+
+
+procedure TMaskUtils.DoDate;
+begin
+ {$ifdef DebugMaskUtils}
+  DebugLn(['DoDate',',Position=',Position]);
+ {$endif}
+  ExitVal := ExitVal + DateSeparator;
+end;
+
+
+
+
+
+procedure TMaskUtils.DoAlpha(Required : Boolean);
+begin
+ {$ifdef DebugMaskUtils}
+  DebugLn(['DoAlpha',',Position=',Position]);
+ {$endif}
+  if Required then
+    begin
+      if IsAlpha(SourcePtr) then
+      EvaluateExit
+      else
+        RaiseError;
+    end
+  else
+    begin
+      if IsAlpha(SourcePtr) then
+      EvaluateExit
+      else
+        EvaluateMissing;
+    end;
+end;
+
+
+procedure TMaskUtils.DoToken;
+begin
+  if stArbitrary in State then Exclude(State,stArbitrary);
+
+  case MaskPtr of
+    '!' : Include(State,stLeading);
+    '>' : DoUpper;
+    '<' : DoLower;
+    '\' : Include(State,stSpecial);
+    'L' : DoAlpha(true);
+    'l' : DoAlpha(false);
+    'A' : DoAlphaNumeric(true);
+    'a' : DoAlphaNumeric(false);
+    'C' : DoArbitrary(true);
+    'c' : DoArbitrary(false);
+    '0' : DoNumeric(true);
+    '9' : DoNumeric(false);
+    '#' : DoNumericPlusMinus;
+    ':' : DoTime;
+    '/' : DoDate;
+  end;
+
+end;
+
+procedure TMaskUtils.DoLiteral;
+begin
+ {$ifdef DebugMaskUtils}
+  DebugLn(['DoLiteral',',Position=',Position]);
+ {$endif}
+  if stSpecial in State then
+   Exclude(State,stSpecial);
+  if Matched and (MaskPtr <> SourcePtr) then
+   RaiseError;
+  if Matched or not (IsAlpha(SourcePtr) or IsNumeric(SourcePtr)) then
+   Inc(SourcePosition);
+  ExitVal := ExitVal + MaskPtr;
+end;
+
+procedure TMaskUtils.DoFillRest;
+var
+  i : Integer;
+begin
+
+{Fill rest of exit value because source is longer then mask
+and the last mask character permit arbitrary char.
+Compatibility with delphi}
+
+  if (stArbitrary in State) then
+    begin
+      i := Length(SourceVal) - Length(FMask);
+      while i >= 0 do
+        begin
+          EvaluateExit;
+          Dec(i);
+        end;
+    end;
+end;
+
+
+function FormatMaskText(const EditMask: string; const Value: string): string;
+var
+  msk : TMaskUtils;
+begin
+  Result := '';
+  msk := TMaskUtils.Create;
+  try
+    msk.Mask := EditMask;
+    msk.Value := Value;
+    Result := msk.Validate;
+  finally
+    msk.Free;
+  end;
+end;
+
+
+end.
+