#include "/header/Program Management/String Class.bi" #define tabPrint print string(tabNum, " "); declare sub loadObject() declare sub loadPlane() declare sub loadVertex() declare sub loadTrans() dim shared tabNum as integer enum qualifier_list objectStart = 0 objectEnd plane vertex transStart transEnd fileEnd end enum enum trans_list rotation = 0 translation end enum open "New file.dom" for binary as #1 open "Representative.txt" for output as #2 dim header1 as ubyte dim header2 as ubyte dim header3 as ubyte dim version as ubyte dim shared NameLength as ubyte dim shared NamePtr as ubyte ptr dim shared NameClass as stringClass dim shared Qualifier as ubyte dim shared float1 as single dim shared float2 as single dim shared float3 as single dim shared channel as ubyte get #1, , header1 get #1, , header2 get #1, , header3 get #1, , version 'Check header if not(header1 = 114 and header2 = 146 and header3 = 194) then tabprint "Invalid Header, should be 114-146-194" sleep end else tabprint "Header check is good" end if if version = 1 then tabprint "Valid File version" else tabprint "Invalid file version, should be 1" sleep end end if print 'Object 'Get name do loadObject() if eof(1) then tabprint "Finished" close #1 sleep end loop end sub loadObject() get #1, , NameLength NamePtr = allocate(NameLength) get #1, , *NamePtr, NameLength NameClass.setStr(NamePtr, NameLength) tabPrint "Object "; NameClass.retStr() tabNum += 1 'Get next qualifer get #1, , qualifier do select case as const qualifier case fileEnd tabNum = 0 tabprint "Finished" sleep end case objectStart loadObject() case objectEnd tabNum -= 1 exit do case plane loadPlane() case vertex tabPrint "Invalid qualifier: Vertex qualifier in Object node" sleep end case transStart loadTrans() case transEnd 'tabPrint "Invalid qualifier: Trans end qualifier with no begining" 'sleep 'end get #1, , qualifier if qualifier = fileEnd then tabprint "Out of place Finish" sleep end end if case else tabprint "Unknown qualifier" sleep end end select loop end sub sub loadPlane() get #1, , NameLength NamePtr = allocate(NameLength) get #1, , *NamePtr, NameLength NameClass.setStr(NamePtr, NameLength) tabPrint "Plane "; NameClass.retStr() tabNum += 1 get #1, , qualifier do while qualifier = vertex loadVertex() loop tabNum -= 1 end sub sub loadVertex() get #1, , NameLength NamePtr = allocate(NameLength) get #1, , *NamePtr, NameLength NameClass.setStr(NamePtr, NameLength) tabPrint "Vertex "; NameClass.retStr() tabNum += 1 'Load vertex coordinates get #1, , float1 get #1, , float2 get #1, , float3 tabprint "Coord ("; float1; ","; float2; ","; float3; ")" 'Color get #1, , channel tabprint "Alpha channel: "; channel get #1, , channel tabprint "Red channel: "; channel get #1, , channel tabprint "Green channel: "; channel get #1, , channel tabprint "Blue channel: "; channel 'Texture coordinates get #1, , float1 get #1, , float2 tabprint "Texture Coord ("; float1; ","; float2;")" get #1, , qualifier tabNum -= 1 end sub sub loadTrans() get #1, , NameLength NamePtr = allocate(NameLength) get #1, , *NamePtr, NameLength NameClass.setStr(NamePtr, NameLength) tabPrint "Trans "; NameClass.retStr() tabNum += 1 get #1, , qualifier 'Mode if qualifier = rotation then tabprint "Rotation mode" elseif qualifier = translation then tabprint "Translation mode" else tabprint "Invalide Mode" sleep end end if 'Get Data get #1, , float1 get #1, , float2 get #1, , float3 tabprint "Vector <"; float1; ","; float2; ","; float3; ">" get #1, , float1 get #1, , float2 tabPrint "Range ="; float1; " to"; float2 get #1, , qualifier do select case as const qualifier case objectStart tabprint "Invalid qualifier: Object start in trans node" sleep end case objectEnd tabprint "Invalid qualifier: Object end in trans node" sleep end case plane tabprint "Invalid qualifier: Plane in trans node" sleep end case vertex tabprint "Invalid qualifier: Vertex in trans node" sleep end case transStart loadTrans() case transEnd exit do case fileEnd tabprint "Premature end" sleep end end select loop tabNum -= 1 get #1, , qualifier end sub