Listing: 1 IMPLEMENTATION MODULE FieldTypes; 2 (* 3 * REPERTOIRE 4 * Release 1.6 5 * By Charles Bradford and Cole Brecheen 6 * (c) Copyright 1985-1992 PMI 7 * Green Bay, Wisconsin 8 * All rights reserved 9 * (414) 468-6040 10 * 11 * $Header: D:/logfiles/mods/fieldtyp.mov 1.7 10 Mar 1991 15:27:30 coleb $ 12 * 13 *) 14 15 16 (*EntryDiag: 17 IMPORT Diagnostics; 18 :EntryDiag*) 19 20 IMPORT Hash; 21 IMPORT GenLists; 22 IMPORT LowLevel; 23 IMPORT M2Strings; 24 IMPORT Numbers; 25 IMPORT ScrnTypes; 26 IMPORT StrConv; 27 IMPORT StrEdit; 28 IMPORT SYSTEM; 29 IMPORT ErrorManager; 30 IMPORT VStorage; 31 32 VAR 33 Initialized : BOOLEAN; 34 35 CONST 36 AfterLast = 65535; 37 gotoConst = 'GOTO'; ***** ^ not supported yet 38 stringConst = 'STRING'; ***** ^ not supported yet 39 integerConst = 'INTEGER'; ***** ^ not supported yet 40 realConst = 'REAL'; ***** ^ not supported yet 41 groupConst = 'GROUP'; ***** ^ not supported yet 42 choiceConst = 'CHOICE'; ***** ^ not supported yet 43 editorConst = 'EDITOR'; ***** ^ not supported yet 44 displayConst = 'DISPLAY'; ***** ^ not supported yet 45 displayonlyConst = 'DISPLAYONLY'; ***** ^ not supported yet 46 dateConst = 'DATE'; ***** ^ not supported yet 47 booleanConst = 'BOOLEAN'; ***** ^ not supported yet 48 49 TYPE 50 APromptTable = ARRAY [0..255] OF CARDINAL; ***** ^ not supported yet ***** ^ not supported yet 51 52 VAR 53 TableHandle: VStorage.MemHandle; ***** ^ not supported yet 54 TablePointer: POINTER TO APromptTable; ***** ^ not supported yet 55 56 FieldTypeCodes : Hash.HashTable; ***** ^ not supported yet 57 TableInitialized : BOOLEAN; 58 PromptList: GenLists.GenList; ***** ^ not supported yet 59 CharConstSize: CARDINAL; 60 61 62 PROCEDURE DisposeTable(); 63 BEGIN 64 Hash.Dispose( FieldTypeCodes ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 65 GenLists.DisposeList( PromptList ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 66 END DisposeTable; ***** ^ not supported yet 67 68 69 PROCEDURE SetPrompts(); 70 VAR 71 tmpstr: ARRAY [0..79] OF CHAR; ***** ^ not supported yet ***** ^ not supported yet 72 BEGIN 73 SetDefaultPrompt( editorConst, ***** ^ undeclared identifier ***** ^ not supported yet 74 'Alt-D deletes lines; Alt-U undeletes; Shift-F7 toggles wrapping.' ); ***** ^ not supported yet 75 StrEdit.AssignStr( 'Enter selects the highlighted choice.', ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 76 tmpstr ); ***** ^ not supported yet 77 StrConv.AppendDecoded( tmpstr, '#', ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 78 'Use #024 or #025 to move to another choice.'); ***** ^ not supported yet 79 SetDefaultPrompt( gotoConst, tmpstr ); ***** ^ undeclared identifier ***** ^ not supported yet ***** ^ not supported yet 80 StrEdit.SetLength(tmpstr, 0); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 81 StrConv.AppendDecoded(tmpstr, '#', ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 82 'Use #017#196 or #196#016 to change the highlighted choice, or'); ***** ^ not supported yet 83 StrConv.AppendDecoded(tmpstr, '#', ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 84 ' #024#025 to move to another field.'); ***** ^ not supported yet 85 SetDefaultPrompt( choiceConst, tmpstr ); ***** ^ undeclared identifier ***** ^ not supported yet ***** ^ not supported yet 86 87 StrEdit.AssignStr('Fill in the blank and press',tmpstr); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 88 StrConv.AppendDecoded(tmpstr, '#', ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 89 ' #024 or #025 to change fields, or F10 if finished.'); ***** ^ not supported yet 90 SetDefaultPrompt( stringConst, tmpstr ); ***** ^ undeclared identifier ***** ^ not supported yet ***** ^ not supported yet 91 92 StrEdit.AssignStr( 'Enter a number between MIN and MAX.',tmpstr); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 93 (* MAX and MIN are replaced with the true values at 94 runtime. *) 95 SetDefaultPrompt( integerConst, tmpstr ); ***** ^ undeclared identifier ***** ^ not supported yet ***** ^ not supported yet 96 SetDefaultPrompt( realConst, tmpstr ); ***** ^ undeclared identifier ***** ^ not supported yet ***** ^ not supported yet 97 98 SetDefaultPrompt( booleanConst, ***** ^ undeclared identifier ***** ^ not supported yet 99 'Press space bar to select or deselect choice.' ); ***** ^ not supported yet 100 SetDefaultPrompt( dateConst, ***** ^ undeclared identifier ***** ^ not supported yet 101 'Enter a date in the form 12/25/88 or 12-25-1988.' ); ***** ^ not supported yet 102 END SetPrompts; ***** ^ not supported yet 103 104 105 PROCEDURE FilledAssign( s1: ARRAY OF CHAR; VAR s2: ARRAY OF CHAR ); ***** ^ not supported yet ***** ^ not supported yet 106 VAR 107 len : CARDINAL; 108 BEGIN 109 LowLevel.Fill( SYSTEM.ADR(s2), HIGH(s2) + 1, 0C ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ not supported yet ***** ^ not supported yet 110 len := M2Strings.Length( s1 ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 111 IF len <= HIGH(s2) THEN ***** ^ undeclared identifier ***** ^ not supported yet 112 LowLevel.Move( SYSTEM.ADR(s1), SYSTEM.ADR(s2), len ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 113 ELSE 114 M2Strings.Assign( s1, s2 ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 115 END; 116 END FilledAssign; ***** ^ not supported yet 117 118 119 PROCEDURE InitTableIfNecessary(); 120 (* We can't call this in the module's initialization block 121 because it does dynamic memory allocation, and Repertoire 122 doesn't know where dynamic memory comes from until after 123 the initialization sequence is over. *) 124 VAR 125 TmpTypeName: ARRAY [0..15] OF CHAR; ***** ^ not supported yet ***** ^ not supported yet 126 BEGIN 127 IF TableInitialized THEN 128 RETURN; 129 END; 130 TableInitialized := TRUE; 131 Hash.Define( FieldTypeCodes, 10, CharConstSize ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 132 FilledAssign( gotoConst, TmpTypeName ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 133 Hash.Insert( FieldTypeCodes, TmpTypeName, 'J' ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 134 FilledAssign( stringConst, TmpTypeName ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 135 Hash.Insert( FieldTypeCodes, TmpTypeName, 'S' ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 136 FilledAssign( integerConst, TmpTypeName ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 137 Hash.Insert( FieldTypeCodes, TmpTypeName, 'I' ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 138 FilledAssign( realConst, TmpTypeName ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 139 Hash.Insert( FieldTypeCodes, TmpTypeName, 'R' ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 140 FilledAssign( groupConst, TmpTypeName ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 141 Hash.Insert( FieldTypeCodes, TmpTypeName, 'C' ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 142 FilledAssign( choiceConst, TmpTypeName ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 143 Hash.Insert( FieldTypeCodes, TmpTypeName, 'C' ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 144 FilledAssign( editorConst, TmpTypeName ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 145 Hash.Insert( FieldTypeCodes, TmpTypeName, 'E' ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 146 FilledAssign( displayConst, TmpTypeName ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 147 Hash.Insert( FieldTypeCodes, TmpTypeName, 'D' ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 148 FilledAssign( displayonlyConst, TmpTypeName ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 149 Hash.Insert( FieldTypeCodes, TmpTypeName, 'D' ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 150 FilledAssign( dateConst, TmpTypeName ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 151 Hash.Insert( FieldTypeCodes, TmpTypeName, 'T' ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 152 FilledAssign( booleanConst, TmpTypeName ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 153 Hash.Insert( FieldTypeCodes, TmpTypeName, 'B' ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 154 IF NOT VStorage.AllocMem( TableHandle, SYSTEM.TSIZE(APromptTable) ) THEN ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 155 END; 156 TablePointer := VStorage.LockMem( TableHandle ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 157 LowLevel.Fill( TablePointer, SYSTEM.TSIZE(APromptTable), 0C ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 158 VStorage.UnLockMem( TableHandle ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 159 GenLists.NewList( PromptList ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 160 SetPrompts(); ***** ^ not supported yet ***** ^ not supported yet 161 ErrorManager.AddTermProc( DisposeTable ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 162 END InitTableIfNecessary; ***** ^ not supported yet 163 164 165 PROCEDURE TypeCode( TypeName: 166 ARRAY OF CHAR ): CHAR; ***** ^ not supported yet 167 VAR 168 TmpTypeName: ARRAY [0..15] OF CHAR; ***** ^ not supported yet ***** ^ not supported yet 169 tmpch : CHAR; 170 hash1, hash2, hash3 : CARDINAL; 171 BEGIN 172 InitTableIfNecessary(); ***** ^ not supported yet ***** ^ not supported yet 173 FilledAssign( TypeName, TmpTypeName ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 174 175 (* We try to first spot the standard ones by simple string 176 comparison for speed purposes. *) 177 IF 0 = M2Strings.CompareStr( stringConst, TmpTypeName ) THEN ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 178 RETURN 'S'; 179 ELSIF 0 = M2Strings.CompareStr( integerConst, TmpTypeName ) THEN ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 180 RETURN 'I'; 181 ELSIF 0 = M2Strings.CompareStr( realConst, TmpTypeName ) THEN ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 182 RETURN 'R'; 183 ELSIF 0 = M2Strings.CompareStr( editorConst, TmpTypeName ) THEN ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 184 RETURN 'E'; 185 ELSIF 0 = M2Strings.CompareStr( dateConst, TmpTypeName ) THEN ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 186 RETURN 'T'; 187 ELSIF 0 = M2Strings.CompareStr( gotoConst, TmpTypeName ) THEN ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 188 RETURN 'J'; 189 ELSIF 0 = M2Strings.CompareStr( groupConst, TmpTypeName ) THEN ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 190 RETURN 'C'; 191 ELSIF 0 = M2Strings.CompareStr( choiceConst, TmpTypeName ) THEN ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 192 RETURN 'C'; 193 ELSIF 0 = M2Strings.CompareStr( displayConst, TmpTypeName ) THEN ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 194 RETURN 'D'; 195 ELSIF 0 = M2Strings.CompareStr( displayonlyConst, TmpTypeName ) THEN ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 196 RETURN 'D'; 197 ELSIF 0 = M2Strings.CompareStr( booleanConst, TmpTypeName ) THEN ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 198 RETURN 'B'; 199 ELSIF Hash.KeyFind( FieldTypeCodes, TmpTypeName ) THEN ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 200 Hash.GetData( FieldTypeCodes, tmpch ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 201 ELSE 202 Hash.Compute( TmpTypeName, hash1, hash2, hash3 ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 203 IF Numbers.CardIsBetween( ORD('['), hash2, 255 ) THEN ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ not supported yet ***** ^ not supported yet 204 tmpch := CHR( hash2 ); ***** ^ undeclared identifier ***** ^ not supported yet 205 ELSE 206 tmpch := CHR( (hash2 MOD (255 - 91)) + 91 ); ***** ^ undeclared identifier ***** ^ not supported yet 207 (*Force value into range 91 to 255.*) 208 END; 209 Hash.Insert( FieldTypeCodes, TmpTypeName, tmpch ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 210 END; 211 RETURN tmpch; 212 END TypeCode; ***** ^ not supported yet 213 214 215 PROCEDURE SetDefaultPrompt( TypeName: ARRAY OF CHAR; ***** ^ not supported yet 216 TheStr: ARRAY OF CHAR ); ***** ^ not supported yet 217 VAR 218 OrdOfType: CARDINAL; 219 BEGIN 220 InitTableIfNecessary(); ***** ^ not supported yet ***** ^ not supported yet 221 StrEdit.CAPstr( TypeName ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 222 TablePointer := VStorage.LockMem( TableHandle ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 223 OrdOfType := ORD( TypeCode( TypeName ) ); ***** ^ undeclared identifier ***** ^ not supported yet ***** ^ not supported yet 224 VStorage.UnLockMem( TableHandle ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 225 IF TablePointer^[ OrdOfType ] = 0 THEN ***** ^ not supported yet ***** ^ not supported yet 226 GenLists.ListInsert( TheStr, GenLists.StrCode, ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 227 PromptList, AfterLast ); ***** ^ not supported yet ***** ^ not supported yet 228 TablePointer := VStorage.LockMem( TableHandle ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 229 TablePointer^[ OrdOfType ] := GenLists.ListLength( PromptList ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 230 VStorage.UnLockMem( TableHandle ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 231 ELSE 232 TablePointer := VStorage.LockMem( TableHandle ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 233 GenLists.ListReplace( TheStr, GenLists.StrCode, ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 234 PromptList, TablePointer^[ OrdOfType ] ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 235 VStorage.UnLockMem( TableHandle ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 236 END; 237 END SetDefaultPrompt; ***** ^ not supported yet 238 239 240 PROCEDURE GetDefaultPrompt( TypeCode: CHAR; VAR TheStr: ARRAY 241 OF CHAR ); ***** ^ not supported yet 242 VAR 243 DumType, ListSpot : CARDINAL; 244 BEGIN 245 InitTableIfNecessary(); ***** ^ not supported yet ***** ^ not supported yet 246 StrEdit.SetLength( TheStr, 0 ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 247 TablePointer := VStorage.LockMem( TableHandle ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 248 VStorage.UnLockMem( TableHandle ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 249 ListSpot := TablePointer^[ ORD(TypeCode) ]; ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ not supported yet 250 IF ListSpot = 0 THEN 251 RETURN; 252 END; 253 GenLists.GetElmt( PromptList, ListSpot, TheStr, DumType ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 254 END GetDefaultPrompt; ***** ^ not supported yet 255 256 257 PROCEDURE GetCharConstSize(theChar: ARRAY OF CHAR): CARDINAL; ***** ^ not supported yet 258 (* We don't know how many bytes a character constant really 259 occupies. Stony Brook now has an implicit null at the end 260 of a char const. JPI doesn't. *) 261 BEGIN 262 RETURN HIGH(theChar) + 1; ***** ^ undeclared identifier ***** ^ not supported yet 263 END GetCharConstSize; ***** ^ not supported yet 264 265 266 PROCEDURE Init(); 267 BEGIN 268 IF Initialized THEN 269 RETURN; 270 ELSE 271 Initialized := TRUE; 272 END; 273 (*EntryDiag: 274 Diagnostics.Init(); 275 :EntryDiag*) 276 277 Hash.Init(); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 278 GenLists.Init(); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 279 LowLevel.Init(); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 280 M2Strings.Init(); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 281 Numbers.Init(); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 282 ScrnTypes.Init(); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 283 StrConv.Init(); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 284 StrEdit.Init(); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 285 ErrorManager.Init(); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 286 VStorage.Init(); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 287 (*EntryDiag: 288 Diagnostics.diagS( 'Entering FieldTypes', '' ); 289 :EntryDiag*) 290 291 CharConstSize := GetCharConstSize('A'); ***** ^ not supported yet ***** ^ not supported yet 292 TableInitialized := FALSE; 293 GenLists.NilList( PromptList ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 294 VStorage.NilHandle( TableHandle ); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 295 TablePointer := NIL; ***** ^ not supported yet 296 297 (*EntryDiag: 298 Diagnostics.diagS( 'Exiting FieldTypes', '' ); 299 :EntryDiag*) 300 END Init; ***** ^ not supported yet 301 302 BEGIN 303 Initialized := FALSE; 304 Init(); ***** ^ not supported yet ***** ^ not supported yet 305 END FieldTypes. ***** ^ not supported yet 438 errors