Index: src/lib/plugins/chi_supp.cpp
===================================================================
--- src/lib/plugins/chi_supp.cpp	(revision 149)
+++ src/lib/plugins/chi_supp.cpp	(working copy)
@@ -68,8 +68,17 @@
   const unsigned PAUSE = 63;
   PACK_PRE struct CHINote
   {
-    uint8_t Command : 2;
-    uint8_t Note : 6;
+    unsigned Command() const
+    {
+      return Value & 3;
+    }
+
+    unsigned Note() const
+    {
+      return Value >> 2;
+    }
+  private:
+    uint8_t Value;
   } PACK_POST;
 
   const unsigned SOFFSET = 0;
@@ -78,8 +87,16 @@
   const unsigned SPECIAL = 3;
   PACK_PRE struct CHINoteParam
   {
-    uint8_t Parameter : 4;
-    uint8_t Sample : 4;
+    uint8_t Parameter() const
+    {
+      return Value & 15;
+    }
+    uint8_t Sample() const
+    {
+      return Value >> 4;
+    }
+  private:
+    uint8_t Value;
   } PACK_POST;
 
   PACK_PRE struct CHIPattern
@@ -141,38 +158,38 @@
           Parent::Line::Chan& dstChan(dstLine.Channels[chanNum]);
           const CHINote& note(src.Notes[lineNum][chanNum]);
           const CHINoteParam& param(src.Params[lineNum][chanNum]);
-          if (NOTE_EMPTY != note.Note)
+          if (NOTE_EMPTY != note.Note())
           {
-            if (PAUSE == note.Note)
+            if (PAUSE == note.Note())
             {
               dstChan.Enabled = false;
             }
             else
             {
               dstChan.Enabled = true;
-              dstChan.Note = note.Note - NOTE_BASE;
-              dstChan.SampleNum = param.Sample;
+              dstChan.Note = note.Note() - NOTE_BASE;
+              dstChan.SampleNum = param.Sample();
             }
           }
-          switch (note.Command)
+          switch (note.Command())
           {
           case SOFFSET:
-            if (param.Parameter)
+            if (param.Parameter())
             {
-              dstChan.Commands.push_back(Parent::Command(SAMPLE_OFFSET, 512 * param.Parameter));
+              dstChan.Commands.push_back(Parent::Command(SAMPLE_OFFSET, 512 * param.Parameter()));
             }
             break;
           case SLIDEDN:
-            dstChan.Commands.push_back(Parent::Command(SLIDE, -static_cast<int8_t>(param.Parameter)));
+            dstChan.Commands.push_back(Parent::Command(SLIDE, -static_cast<int8_t>(param.Parameter())));
             break;
           case SLIDEUP:
-            dstChan.Commands.push_back(Parent::Command(SLIDE, static_cast<int8_t>(param.Parameter)));
+            dstChan.Commands.push_back(Parent::Command(SLIDE, static_cast<int8_t>(param.Parameter())));
             break;
           case SPECIAL:
             if (0 == chanNum)
             {
               warner.Assert(!dstLine.Tempo, TEXT_WARNING_DUPLICATE_TEMPO);
-              dstLine.Tempo = param.Parameter;
+              dstLine.Tempo = param.Parameter();
             }
             else if (3 == chanNum)
             {
