1 // ----------------------------------------------------------------------------
3 // ----------------------------------------------------------------------------
5 #include "DemoBufferObject.h"
7 static void Class_Terminate();
8 static int RemoveLastDemoKey();
10 // --- VERSION 1.0 CLASS
12 // --- MultiUse = -1 'True // True
13 // --- Persistable = 0 'NotPersistable // NotPersistable
14 // --- DataBindingBehavior = 0 'vbNone // vbNone
15 // --- DataSourceBehavior = 0 'vbNone // vbNone
16 // --- MTSTransactionMode = 0 'NotAnMTSObject // NotAnMTSObject
19 static char *VB_Name = "DemoBufferObject";
20 static boolean VB_GlobalNameSpace = False;
21 static boolean VB_Creatable = True;
22 static boolean VB_PredeclaredId = False;
23 static boolean VB_Exposed = False;
24 // --- Option Explicit
26 #define MaxPos ((long)1024)
28 // Private Const MaxPos& = 20& 'debug only
29 byte DemoByte[MaxPos + 1];
30 DemoBufferObject SubBuffer;
35 boolean bSignatureAvailable;
42 static void Class_Initialize()
46 Trace("DemoBufferObject", "Construction");
47 DemoBufferObject_Reset();
48 if (! IS_NOTHING(&DemoBuffer, sizeof(DemoBuffer)))
50 lSize = DemoBuffer_Size();
51 Trace("DemoBufferObject", "Size == ...");
52 Trace("DemoBufferObject", "BufferCount == ...");
53 Trace("DemoBufferObject", "TimerVar == ...");
57 static void Class_Terminate()
59 SET_TO_NOTHING(&SubBuffer, sizeof(SubBuffer));
62 void DemoBufferObject_Reset()
69 bSignatureAvailable = False;
71 SET_TO_NOTHING(&SubBuffer, sizeof(SubBuffer));
74 long DemoBufferObject_Get_Size()
78 Size = (nSize < 1 ? 0 : 0);
79 if (! IS_NOTHING(&SubBuffer, sizeof(SubBuffer)))
80 Size = Size + SubBuffer_Size();
85 byte DemoBufferObject_Get_CheckSumByte()
89 CheckSumByte = CheckSum & 0xFF;
94 byte DemoBufferObject_Get_FirstByte()
98 FirstByte = nFirstByte;
103 void DemoBufferObject_Let_FirstByte(byte NewVal)
109 // Public Property Get DemoAvailable() As Boolean
110 // DemoAvailable = (0 < nSize)
113 // Public Property Get Signature() As String
114 // If SubBuffer Is Nothing Then
115 // Signature = mSignature
117 // Signature = SubBuffer.Signature
121 // Public Property Let Signature(NewSig$)
122 // If SubBuffer Is Nothing Then
123 // Signature = NewSig
125 // SubBuffer.Signature = NewSig
129 // Public Property Get SignatureAvailable() As Boolean
130 // If SubBuffer Is Nothing Then
131 // SignatureAvailable = (mSignature <> "")
133 // SignatureAvailable = SubBuffer
137 boolean DemoBufferObject_Serialize(int FNum)
144 if (! IS_NOTHING(&SubBuffer, sizeof(SubBuffer)))
145 Serialize = SubBuffer_Serialize(FNum);
150 // LKey = RemoveLastDemoKey()
151 if (! nSize < MaxPos) // this buffer is full
154 // --- On Error GoTo SerializeEH
155 FILE_PUT(FNum, -1, &DemoByte, sizeof(DemoByte));
156 // --- On Error GoTo 0
159 else // this is the last buffer in the recursive chain
162 // --- On Error GoTo SerializeEH
163 for (i = 1; i <= WritePos; i++)
165 FILE_PUT(FNum, -1, &DemoByte[i], sizeof(DemoByte[i]));
168 // --- On Error GoTo 0
181 void DemoBufferObject_AddDemoKey(int KeyCode)
183 CheckSum = (CheckSum + 1) & 0xFF; // increment checksum
184 // If Not SubBuffer Is Nothing Then 'delegate
185 // Debug.Assert False
186 // 'SubBuffer.AddDemoKey KeyCode
189 if (LastKey == KeyCode)
191 DemoByte[WritePos] = DemoByte[WritePos] + 0x10;
192 if (0xEF < DemoByte[WritePos])
196 else // LastKey <> KeyCode
198 WritePos = WritePos + 1;
200 if (MaxPos < WritePos) // if overflow then create new buffer, hang myself in list
202 DemoBufferObject Tmp;
204 // Tmp = New DemoBufferObject; // (handle this later, if needed)
205 Tmp.SetSubBuffer(&VB_OBJECT_SELF);
206 Tmp.AddDemoKey(KeyCode); // and delegate
211 nSize = nSize + 1; // increment size
212 DemoByte[WritePos] = KeyCode;
218 void DemoBufferObject_SetSubBuffer(DemoBufferObject SBuf)
223 static int RemoveLastDemoKey()
225 static int RemoveLastDemoKey;
227 RemoveLastDemoKey = (DemoByte[WritePos] & 0xF);
228 if (DemoByte[WritePos] < 0x10)
230 WritePos = WritePos - 1;
236 DemoByte[WritePos] = DemoByte[WritePos] - 0x10;
239 return RemoveLastDemoKey;