schau dir doch mal die Zeile genau an:
PIP_MASK_STRING = ^PIP_MASK_STRING;
wie kann PIP_MASK_STRING gleichzeitig ^PIP_MASK_STRING sein? Hast du dich da vielleicht vertippt?
das führende P steht übrigens für Pointertyp. Und das was da im Quelltext steht wäre die Erstellung eines Pointertypes auf einen Pointertyp. Einfach die entsprechende Zeile mal ein Weilchen anschauen und dann überlegen was daran wohl falsch ist.