12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016 |
- /* ************************************************************************** */
- /* * For conditions of distribution and use, * */
- /* * see copyright notice in libmng.h * */
- /* ************************************************************************** */
- /* * * */
- /* * project : libmng * */
- /* * file : libmng_chunk_xs.c copyright (c) 2000-2007 G.Juyn * */
- /* * version : 1.0.10 * */
- /* * * */
- /* * purpose : chunk access functions (implementation) * */
- /* * * */
- /* * author : G.Juyn * */
- /* * * */
- /* * comment : implementation of the chunk access functions * */
- /* * * */
- /* * changes : 0.5.1 - 05/06/2000 - G.Juyn * */
- /* * - changed and filled iterate-chunk function * */
- /* * 0.5.1 - 05/08/2000 - G.Juyn * */
- /* * - fixed calling convention * */
- /* * - added getchunk functions * */
- /* * - added putchunk functions * */
- /* * - changed strict-ANSI stuff * */
- /* * 0.5.1 - 05/11/2000 - G.Juyn * */
- /* * - added empty-chunk put-routines * */
- /* * 0.5.1 - 05/12/2000 - G.Juyn * */
- /* * - changed trace to macro for callback error-reporting * */
- /* * 0.5.1 - 05/15/2000 - G.Juyn * */
- /* * - added getimgdata & putimgdata functions * */
- /* * * */
- /* * 0.5.2 - 05/19/2000 - G.Juyn * */
- /* * - B004 - fixed problem with MNG_SUPPORT_WRITE not defined * */
- /* * also for MNG_SUPPORT_WRITE without MNG_INCLUDE_JNG * */
- /* * - Cleaned up some code regarding mixed support * */
- /* * * */
- /* * 0.9.1 - 07/19/2000 - G.Juyn * */
- /* * - fixed creation-code * */
- /* * * */
- /* * 0.9.2 - 08/05/2000 - G.Juyn * */
- /* * - changed file-prefixes * */
- /* * - added function to set simplicity field * */
- /* * - fixed putchunk_unknown() function * */
- /* * * */
- /* * 0.9.3 - 08/07/2000 - G.Juyn * */
- /* * - B111300 - fixup for improved portability * */
- /* * 0.9.3 - 08/26/2000 - G.Juyn * */
- /* * - added MAGN chunk * */
- /* * 0.9.3 - 10/20/2000 - G.Juyn * */
- /* * - fixed putchunk_plte() to set bEmpty parameter * */
- /* * * */
- /* * 0.9.5 - 01/25/2001 - G.Juyn * */
- /* * - fixed some small compiler warnings (thanks Nikki) * */
- /* * * */
- /* * 1.0.5 - 09/07/2002 - G.Juyn * */
- /* * - B578940 - unimplemented functions return errorcode * */
- /* * 1.0.5 - 08/19/2002 - G.Juyn * */
- /* * - B597134 - libmng pollutes the linker namespace * */
- /* * - added HLAPI function to copy chunks * */
- /* * 1.0.5 - 09/14/2002 - G.Juyn * */
- /* * - added event handling for dynamic MNG * */
- /* * 1.0.5 - 10/07/2002 - G.Juyn * */
- /* * - added check for TERM placement during create/write * */
- /* * 1.0.5 - 11/28/2002 - G.Juyn * */
- /* * - fixed definition of iMethodX/Y for MAGN chunk * */
- /* * * */
- /* * 1.0.6 - 05/25/2003 - G.R-P * */
- /* * - added MNG_SKIPCHUNK_cHNK footprint optimizations * */
- /* * 1.0.6 - 07/07/2003 - G.R-P * */
- /* * - added MNG_NO_DELTA_PNG reduction and more SKIPCHUNK * */
- /* * optimizations * */
- /* * 1.0.6 - 07/29/2003 - G.R-P * */
- /* * - added conditionals around PAST chunk support * */
- /* * 1.0.6 - 08/17/2003 - G.R-P * */
- /* * - added conditionals around non-VLC chunk support * */
- /* * * */
- /* * 1.0.8 - 04/01/2004 - G.Juyn * */
- /* * - added missing get-/put-chunk-jdaa * */
- /* * 1.0.8 - 08/02/2004 - G.Juyn * */
- /* * - added conditional to allow easier writing of large MNG's * */
- /* * * */
- /* * 1.0.9 - 09/17/2004 - G.R-P * */
- /* * - added two more conditionals * */
- /* * 1.0.9 - 09/25/2004 - G.Juyn * */
- /* * - replaced MNG_TWEAK_LARGE_FILES with permanent solution * */
- /* * 1.0.9 - 17/14/2004 - G.Juyn * */
- /* * - fixed PPLT getchunk/putchunk routines * */
- /* * 1.0.9 - 12/05/2004 - G.Juyn * */
- /* * - added conditional MNG_OPTIMIZE_CHUNKINITFREE * */
- /* * 1.0.9 - 12/20/2004 - G.Juyn * */
- /* * - cleaned up macro-invocations (thanks to D. Airlie) * */
- /* * * */
- /* * 1.0.10 - 04/08/2007 - G.Juyn * */
- /* * - added support for mPNG proposal * */
- /* * * */
- /* ************************************************************************** */
- #include "libmng.h"
- #include "libmng_data.h"
- #include "libmng_error.h"
- #include "libmng_trace.h"
- #ifdef __BORLANDC__
- #pragma hdrstop
- #endif
- #include "libmng_memory.h"
- #include "libmng_chunks.h"
- #ifdef MNG_OPTIMIZE_CHUNKREADER
- #include "libmng_chunk_descr.h"
- #endif
- #include "libmng_chunk_prc.h"
- #include "libmng_chunk_io.h"
- #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI)
- #pragma option -A /* force ANSI-C */
- #endif
- /* ************************************************************************** */
- #ifdef MNG_ACCESS_CHUNKS
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_iterate_chunks (mng_handle hHandle,
- mng_uint32 iChunkseq,
- mng_iteratechunk fProc)
- {
- mng_uint32 iSeq;
- mng_chunkid iChunkname;
- mng_datap pData;
- mng_chunkp pChunk;
- mng_bool bCont;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_ITERATE_CHUNKS, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = ((mng_datap)hHandle); /* and make it addressable */
- iSeq = 0;
- bCont = MNG_TRUE;
- pChunk = pData->pFirstchunk; /* get the first chunk */
- /* as long as there are some more */
- while ((pChunk) && (bCont)) /* and the app didn't signal a stop */
- {
- if (iSeq >= iChunkseq) /* reached the first target ? */
- { /* then call this and next ones back in... */
- iChunkname = ((mng_chunk_headerp)pChunk)->iChunkname;
- bCont = fProc (hHandle, (mng_handle)pChunk, iChunkname, iSeq);
- }
- iSeq++; /* next one */
- pChunk = ((mng_chunk_headerp)pChunk)->pNext;
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_ITERATE_CHUNKS, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #ifdef MNG_SUPPORT_WRITE
- mng_retcode MNG_DECL mng_copy_chunk (mng_handle hHandle,
- mng_handle hChunk,
- mng_handle hHandleOut)
- {
- mng_datap pDataOut;
- mng_chunkp pChunk;
- mng_chunkp pChunkOut;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_COPY_CHUNK, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handles */
- MNG_VALIDHANDLE (hHandleOut)
- pDataOut = (mng_datap)hHandleOut; /* make outhandle addressable */
- pChunk = (mng_chunkp)hChunk; /* address the chunk */
- if (!pDataOut->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pDataOut, MNG_FUNCTIONINVALID)
- /* create a new chunk */
- iRetcode = ((mng_createchunk)((mng_chunk_headerp)pChunk)->fCreate)
- (pDataOut, ((mng_chunk_headerp)pChunk), &pChunkOut);
- if (!iRetcode) /* assign the chunk-specific data */
- iRetcode = ((mng_assignchunk)((mng_chunk_headerp)pChunk)->fAssign)
- (pDataOut, pChunkOut, pChunk);
- if (iRetcode) /* on error bail out */
- return iRetcode;
- mng_add_chunk (pDataOut, pChunkOut); /* and put it in the output-stream */
- /* could it be the end of the chain ? */
- if (((mng_chunk_headerp)pChunkOut)->iChunkname == MNG_UINT_IEND)
- {
- #ifdef MNG_INCLUDE_JNG
- if ((pDataOut->iFirstchunkadded == MNG_UINT_IHDR) ||
- (pDataOut->iFirstchunkadded == MNG_UINT_JHDR) )
- #else
- if (pDataOut->iFirstchunkadded == MNG_UINT_IHDR)
- #endif
- pDataOut->bCreating = MNG_FALSE; /* right; this should be the last chunk !!! */
- }
- if (((mng_chunk_headerp)pChunkOut)->iChunkname == MNG_UINT_MEND)
- pDataOut->bCreating = MNG_FALSE; /* definitely this should be the last !!! */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_COPY_CHUNK, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif /* MNG_SUPPORT_WRITE */
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_getchunk_ihdr (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 *iWidth,
- mng_uint32 *iHeight,
- mng_uint8 *iBitdepth,
- mng_uint8 *iColortype,
- mng_uint8 *iCompression,
- mng_uint8 *iFilter,
- mng_uint8 *iInterlace)
- {
- mng_datap pData;
- mng_ihdrp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_IHDR, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_ihdrp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_IHDR)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iWidth = pChunk->iWidth; /* fill the fields */
- *iHeight = pChunk->iHeight;
- *iBitdepth = pChunk->iBitdepth;
- *iColortype = pChunk->iColortype;
- *iCompression = pChunk->iCompression;
- *iFilter = pChunk->iFilter;
- *iInterlace = pChunk->iInterlace;
- /* fill the chunk */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_IHDR, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_getchunk_plte (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 *iCount,
- mng_palette8 *aPalette)
- {
- mng_datap pData;
- mng_pltep pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PLTE, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_pltep)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_PLTE)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iCount = pChunk->iEntrycount; /* fill the fields */
- MNG_COPY (*aPalette, pChunk->aEntries, sizeof (mng_palette8));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PLTE, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_getchunk_idat (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 *iRawlen,
- mng_ptr *pRawdata)
- {
- mng_datap pData;
- mng_idatp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_IDAT, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_idatp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_IDAT)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iRawlen = pChunk->iDatasize; /* fill the fields */
- *pRawdata = pChunk->pData;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_IDAT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_getchunk_trns (mng_handle hHandle,
- mng_handle hChunk,
- mng_bool *bEmpty,
- mng_bool *bGlobal,
- mng_uint8 *iType,
- mng_uint32 *iCount,
- mng_uint8arr *aAlphas,
- mng_uint16 *iGray,
- mng_uint16 *iRed,
- mng_uint16 *iGreen,
- mng_uint16 *iBlue,
- mng_uint32 *iRawlen,
- mng_uint8arr *aRawdata)
- {
- mng_datap pData;
- mng_trnsp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_TRNS, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_trnsp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_tRNS)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *bEmpty = pChunk->bEmpty; /* fill the fields */
- *bGlobal = pChunk->bGlobal;
- *iType = pChunk->iType;
- *iCount = pChunk->iCount;
- *iGray = pChunk->iGray;
- *iRed = pChunk->iRed;
- *iGreen = pChunk->iGreen;
- *iBlue = pChunk->iBlue;
- *iRawlen = pChunk->iRawlen;
- MNG_COPY (*aAlphas, pChunk->aEntries, sizeof (mng_uint8arr));
- MNG_COPY (*aRawdata, pChunk->aRawdata, sizeof (mng_uint8arr));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_TRNS, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_gAMA
- mng_retcode MNG_DECL mng_getchunk_gama (mng_handle hHandle,
- mng_handle hChunk,
- mng_bool *bEmpty,
- mng_uint32 *iGamma)
- {
- mng_datap pData;
- mng_gamap pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_GAMA, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_gamap)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_gAMA)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *bEmpty = pChunk->bEmpty; /* fill the fields */
- *iGamma = pChunk->iGamma;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_GAMA, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_cHRM
- mng_retcode MNG_DECL mng_getchunk_chrm (mng_handle hHandle,
- mng_handle hChunk,
- mng_bool *bEmpty,
- mng_uint32 *iWhitepointx,
- mng_uint32 *iWhitepointy,
- mng_uint32 *iRedx,
- mng_uint32 *iRedy,
- mng_uint32 *iGreenx,
- mng_uint32 *iGreeny,
- mng_uint32 *iBluex,
- mng_uint32 *iBluey)
- {
- mng_datap pData;
- mng_chrmp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_CHRM, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_chrmp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_cHRM)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *bEmpty = pChunk->bEmpty; /* fill the fields */
- *iWhitepointx = pChunk->iWhitepointx;
- *iWhitepointy = pChunk->iWhitepointy;
- *iRedx = pChunk->iRedx;
- *iRedy = pChunk->iRedy;
- *iGreenx = pChunk->iGreenx;
- *iGreeny = pChunk->iGreeny;
- *iBluex = pChunk->iBluex;
- *iBluey = pChunk->iBluey;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_CHRM, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_sRGB
- mng_retcode MNG_DECL mng_getchunk_srgb (mng_handle hHandle,
- mng_handle hChunk,
- mng_bool *bEmpty,
- mng_uint8 *iRenderingintent)
- {
- mng_datap pData;
- mng_srgbp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SRGB, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_srgbp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_sRGB)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *bEmpty = pChunk->bEmpty; /* fill the fields */
- *iRenderingintent = pChunk->iRenderingintent;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SRGB, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_iCCP
- mng_retcode MNG_DECL mng_getchunk_iccp (mng_handle hHandle,
- mng_handle hChunk,
- mng_bool *bEmpty,
- mng_uint32 *iNamesize,
- mng_pchar *zName,
- mng_uint8 *iCompression,
- mng_uint32 *iProfilesize,
- mng_ptr *pProfile)
- {
- mng_datap pData;
- mng_iccpp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_ICCP, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_iccpp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_iCCP)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *bEmpty = pChunk->bEmpty; /* fill the fields */
- *iNamesize = pChunk->iNamesize;
- *zName = pChunk->zName;
- *iCompression = pChunk->iCompression;
- *iProfilesize = pChunk->iProfilesize;
- *pProfile = pChunk->pProfile;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_ICCP, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_tEXt
- mng_retcode MNG_DECL mng_getchunk_text (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 *iKeywordsize,
- mng_pchar *zKeyword,
- mng_uint32 *iTextsize,
- mng_pchar *zText)
- {
- mng_datap pData;
- mng_textp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_TEXT, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_textp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_tEXt)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- /* fill the fields */
- *iKeywordsize = pChunk->iKeywordsize;
- *zKeyword = pChunk->zKeyword;
- *iTextsize = pChunk->iTextsize;
- *zText = pChunk->zText;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_TEXT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_zTXt
- mng_retcode MNG_DECL mng_getchunk_ztxt (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 *iKeywordsize,
- mng_pchar *zKeyword,
- mng_uint8 *iCompression,
- mng_uint32 *iTextsize,
- mng_pchar *zText)
- {
- mng_datap pData;
- mng_ztxtp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_ZTXT, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_ztxtp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_zTXt)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- /* fill the fields */
- *iKeywordsize = pChunk->iKeywordsize;
- *zKeyword = pChunk->zKeyword;
- *iCompression = pChunk->iCompression;
- *iTextsize = pChunk->iTextsize;
- *zText = pChunk->zText;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_ZTXT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_iTXt
- mng_retcode MNG_DECL mng_getchunk_itxt (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 *iKeywordsize,
- mng_pchar *zKeyword,
- mng_uint8 *iCompressionflag,
- mng_uint8 *iCompressionmethod,
- mng_uint32 *iLanguagesize,
- mng_pchar *zLanguage,
- mng_uint32 *iTranslationsize,
- mng_pchar *zTranslation,
- mng_uint32 *iTextsize,
- mng_pchar *zText)
- {
- mng_datap pData;
- mng_itxtp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_ITXT, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_itxtp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_iTXt)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- /* fill the fields */
- *iKeywordsize = pChunk->iKeywordsize;
- *zKeyword = pChunk->zKeyword;
- *iCompressionflag = pChunk->iCompressionflag;
- *iCompressionmethod = pChunk->iCompressionmethod;
- *iLanguagesize = pChunk->iLanguagesize;
- *zLanguage = pChunk->zLanguage;
- *iTranslationsize = pChunk->iTranslationsize;
- *zTranslation = pChunk->zTranslation;
- *iTextsize = pChunk->iTextsize;
- *zText = pChunk->zText;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_ITXT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_bKGD
- mng_retcode MNG_DECL mng_getchunk_bkgd (mng_handle hHandle,
- mng_handle hChunk,
- mng_bool *bEmpty,
- mng_uint8 *iType,
- mng_uint8 *iIndex,
- mng_uint16 *iGray,
- mng_uint16 *iRed,
- mng_uint16 *iGreen,
- mng_uint16 *iBlue)
- {
- mng_datap pData;
- mng_bkgdp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_BKGD, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_bkgdp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_bKGD)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *bEmpty = pChunk->bEmpty; /* fill the fields */
- *iType = pChunk->iType;
- *iIndex = pChunk->iIndex;
- *iGray = pChunk->iGray;
- *iRed = pChunk->iRed;
- *iGreen = pChunk->iGreen;
- *iBlue = pChunk->iBlue;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_BKGD, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_pHYs
- mng_retcode MNG_DECL mng_getchunk_phys (mng_handle hHandle,
- mng_handle hChunk,
- mng_bool *bEmpty,
- mng_uint32 *iSizex,
- mng_uint32 *iSizey,
- mng_uint8 *iUnit)
- {
- mng_datap pData;
- mng_physp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PHYS, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_physp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_pHYs)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *bEmpty = pChunk->bEmpty; /* fill the fields */
- *iSizex = pChunk->iSizex;
- *iSizey = pChunk->iSizey;
- *iUnit = pChunk->iUnit;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PHYS, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_sBIT
- mng_retcode MNG_DECL mng_getchunk_sbit (mng_handle hHandle,
- mng_handle hChunk,
- mng_bool *bEmpty,
- mng_uint8 *iType,
- mng_uint8arr4 *aBits)
- {
- mng_datap pData;
- mng_sbitp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SBIT, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_sbitp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_sBIT)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *bEmpty = pChunk->bEmpty;
- *iType = pChunk->iType;
- (*aBits)[0] = pChunk->aBits[0];
- (*aBits)[1] = pChunk->aBits[1];
- (*aBits)[2] = pChunk->aBits[2];
- (*aBits)[3] = pChunk->aBits[3];
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SBIT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_sPLT
- mng_retcode MNG_DECL mng_getchunk_splt (mng_handle hHandle,
- mng_handle hChunk,
- mng_bool *bEmpty,
- mng_uint32 *iNamesize,
- mng_pchar *zName,
- mng_uint8 *iSampledepth,
- mng_uint32 *iEntrycount,
- mng_ptr *pEntries)
- {
- mng_datap pData;
- mng_spltp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SPLT, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_spltp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_sPLT)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *bEmpty = pChunk->bEmpty; /* fill the fields */
- *iNamesize = pChunk->iNamesize;
- *zName = pChunk->zName;
- *iSampledepth = pChunk->iSampledepth;
- *iEntrycount = pChunk->iEntrycount;
- *pEntries = pChunk->pEntries;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SPLT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_hIST
- mng_retcode MNG_DECL mng_getchunk_hist (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 *iEntrycount,
- mng_uint16arr *aEntries)
- {
- mng_datap pData;
- mng_histp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_HIST, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_histp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_hIST)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iEntrycount = pChunk->iEntrycount; /* fill the fields */
- MNG_COPY (*aEntries, pChunk->aEntries, sizeof (mng_uint16arr));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_HIST, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_tIME
- mng_retcode MNG_DECL mng_getchunk_time (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint16 *iYear,
- mng_uint8 *iMonth,
- mng_uint8 *iDay,
- mng_uint8 *iHour,
- mng_uint8 *iMinute,
- mng_uint8 *iSecond)
- {
- mng_datap pData;
- mng_timep pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_TIME, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_timep)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_tIME)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iYear = pChunk->iYear; /* fill the fields */
- *iMonth = pChunk->iMonth;
- *iDay = pChunk->iDay;
- *iHour = pChunk->iHour;
- *iMinute = pChunk->iMinute;
- *iSecond = pChunk->iSecond;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_TIME, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_getchunk_mhdr (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 *iWidth,
- mng_uint32 *iHeight,
- mng_uint32 *iTicks,
- mng_uint32 *iLayercount,
- mng_uint32 *iFramecount,
- mng_uint32 *iPlaytime,
- mng_uint32 *iSimplicity)
- {
- mng_datap pData;
- mng_mhdrp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_MHDR, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_mhdrp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iWidth = pChunk->iWidth; /* fill the fields */
- *iHeight = pChunk->iHeight;
- *iTicks = pChunk->iTicks;
- *iLayercount = pChunk->iLayercount;
- *iFramecount = pChunk->iFramecount;
- *iPlaytime = pChunk->iPlaytime;
- *iSimplicity = pChunk->iSimplicity;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_MHDR, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_LOOP
- mng_retcode MNG_DECL mng_getchunk_loop (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint8 *iLevel,
- mng_uint32 *iRepeat,
- mng_uint8 *iTermination,
- mng_uint32 *iItermin,
- mng_uint32 *iItermax,
- mng_uint32 *iCount,
- mng_uint32p *pSignals)
- {
- mng_datap pData;
- mng_loopp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_LOOP, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_loopp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_LOOP)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iLevel = pChunk->iLevel; /* fill teh fields */
- *iRepeat = pChunk->iRepeat;
- *iTermination = pChunk->iTermination;
- *iItermin = pChunk->iItermin;
- *iItermax = pChunk->iItermax;
- *iCount = pChunk->iCount;
- *pSignals = pChunk->pSignals;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_LOOP, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_getchunk_endl (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint8 *iLevel)
- {
- mng_datap pData;
- mng_endlp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_ENDL, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_endlp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_ENDL)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iLevel = pChunk->iLevel; /* fill the field */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_ENDL, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_DEFI
- mng_retcode MNG_DECL mng_getchunk_defi (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint16 *iObjectid,
- mng_uint8 *iDonotshow,
- mng_uint8 *iConcrete,
- mng_bool *bHasloca,
- mng_int32 *iXlocation,
- mng_int32 *iYlocation,
- mng_bool *bHasclip,
- mng_int32 *iLeftcb,
- mng_int32 *iRightcb,
- mng_int32 *iTopcb,
- mng_int32 *iBottomcb)
- {
- mng_datap pData;
- mng_defip pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_DEFI, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_defip)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_DEFI)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iObjectid = pChunk->iObjectid; /* fill the fields */
- *iDonotshow = pChunk->iDonotshow;
- *iConcrete = pChunk->iConcrete;
- *bHasloca = pChunk->bHasloca;
- *iXlocation = pChunk->iXlocation;
- *iYlocation = pChunk->iYlocation;
- *bHasclip = pChunk->bHasclip;
- *iLeftcb = pChunk->iLeftcb;
- *iRightcb = pChunk->iRightcb;
- *iTopcb = pChunk->iTopcb;
- *iBottomcb = pChunk->iBottomcb;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_DEFI, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_BASI
- mng_retcode MNG_DECL mng_getchunk_basi (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 *iWidth,
- mng_uint32 *iHeight,
- mng_uint8 *iBitdepth,
- mng_uint8 *iColortype,
- mng_uint8 *iCompression,
- mng_uint8 *iFilter,
- mng_uint8 *iInterlace,
- mng_uint16 *iRed,
- mng_uint16 *iGreen,
- mng_uint16 *iBlue,
- mng_uint16 *iAlpha,
- mng_uint8 *iViewable)
- {
- mng_datap pData;
- mng_basip pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_BASI, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_basip)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_BASI)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iWidth = pChunk->iWidth; /* fill the fields */
- *iHeight = pChunk->iHeight;
- *iBitdepth = pChunk->iBitdepth;
- *iColortype = pChunk->iColortype;
- *iCompression = pChunk->iCompression;
- *iFilter = pChunk->iFilter;
- *iInterlace = pChunk->iInterlace;
- *iRed = pChunk->iRed;
- *iGreen = pChunk->iGreen;
- *iBlue = pChunk->iBlue;
- *iAlpha = pChunk->iAlpha;
- *iViewable = pChunk->iViewable;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_BASI, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_CLON
- mng_retcode MNG_DECL mng_getchunk_clon (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint16 *iSourceid,
- mng_uint16 *iCloneid,
- mng_uint8 *iClonetype,
- mng_uint8 *iDonotshow,
- mng_uint8 *iConcrete,
- mng_bool *bHasloca,
- mng_uint8 *iLocationtype,
- mng_int32 *iLocationx,
- mng_int32 *iLocationy)
- {
- mng_datap pData;
- mng_clonp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_CLON, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_clonp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_CLON)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iSourceid = pChunk->iSourceid; /* fill the fields */
- *iCloneid = pChunk->iCloneid;
- *iClonetype = pChunk->iClonetype;
- *iDonotshow = pChunk->iDonotshow;
- *iConcrete = pChunk->iConcrete;
- *bHasloca = pChunk->bHasloca;
- *iLocationtype = pChunk->iLocationtype;
- *iLocationx = pChunk->iLocationx;
- *iLocationy = pChunk->iLocationy;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_CLON, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_PAST
- mng_retcode MNG_DECL mng_getchunk_past (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint16 *iDestid,
- mng_uint8 *iTargettype,
- mng_int32 *iTargetx,
- mng_int32 *iTargety,
- mng_uint32 *iCount)
- {
- mng_datap pData;
- mng_pastp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PAST, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_pastp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_PAST)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iDestid = pChunk->iDestid; /* fill the fields */
- *iTargettype = pChunk->iTargettype;
- *iTargetx = pChunk->iTargetx;
- *iTargety = pChunk->iTargety;
- *iCount = pChunk->iCount;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PAST, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_PAST
- mng_retcode MNG_DECL mng_getchunk_past_src (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 iEntry,
- mng_uint16 *iSourceid,
- mng_uint8 *iComposition,
- mng_uint8 *iOrientation,
- mng_uint8 *iOffsettype,
- mng_int32 *iOffsetx,
- mng_int32 *iOffsety,
- mng_uint8 *iBoundarytype,
- mng_int32 *iBoundaryl,
- mng_int32 *iBoundaryr,
- mng_int32 *iBoundaryt,
- mng_int32 *iBoundaryb)
- {
- mng_datap pData;
- mng_pastp pChunk;
- mng_past_sourcep pEntry;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PAST_SRC, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_pastp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_PAST)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- if (iEntry >= pChunk->iCount) /* valid index ? */
- MNG_ERROR (pData, MNG_INVALIDENTRYIX)
- /* address the entry */
- pEntry = pChunk->pSources + iEntry;
- *iSourceid = pEntry->iSourceid; /* fill the fields */
- *iComposition = pEntry->iComposition;
- *iOrientation = pEntry->iOrientation;
- *iOffsettype = pEntry->iOffsettype;
- *iOffsetx = pEntry->iOffsetx;
- *iOffsety = pEntry->iOffsety;
- *iBoundarytype = pEntry->iBoundarytype;
- *iBoundaryl = pEntry->iBoundaryl;
- *iBoundaryr = pEntry->iBoundaryr;
- *iBoundaryt = pEntry->iBoundaryt;
- *iBoundaryb = pEntry->iBoundaryb;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PAST_SRC, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_DISC
- mng_retcode MNG_DECL mng_getchunk_disc (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 *iCount,
- mng_uint16p *pObjectids)
- {
- mng_datap pData;
- mng_discp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_DISC, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_discp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_DISC)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iCount = pChunk->iCount; /* fill the fields */
- *pObjectids = pChunk->pObjectids;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_DISC, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_BACK
- mng_retcode MNG_DECL mng_getchunk_back (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint16 *iRed,
- mng_uint16 *iGreen,
- mng_uint16 *iBlue,
- mng_uint8 *iMandatory,
- mng_uint16 *iImageid,
- mng_uint8 *iTile)
- {
- mng_datap pData;
- mng_backp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_BACK, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_backp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_BACK)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iRed = pChunk->iRed; /* fill the fields */
- *iGreen = pChunk->iGreen;
- *iBlue = pChunk->iBlue;
- *iMandatory = pChunk->iMandatory;
- *iImageid = pChunk->iImageid;
- *iTile = pChunk->iTile;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_BACK, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_FRAM
- mng_retcode MNG_DECL mng_getchunk_fram (mng_handle hHandle,
- mng_handle hChunk,
- mng_bool *bEmpty,
- mng_uint8 *iMode,
- mng_uint32 *iNamesize,
- mng_pchar *zName,
- mng_uint8 *iChangedelay,
- mng_uint8 *iChangetimeout,
- mng_uint8 *iChangeclipping,
- mng_uint8 *iChangesyncid,
- mng_uint32 *iDelay,
- mng_uint32 *iTimeout,
- mng_uint8 *iBoundarytype,
- mng_int32 *iBoundaryl,
- mng_int32 *iBoundaryr,
- mng_int32 *iBoundaryt,
- mng_int32 *iBoundaryb,
- mng_uint32 *iCount,
- mng_uint32p *pSyncids)
- {
- mng_datap pData;
- mng_framp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_FRAM, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_framp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_FRAM)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *bEmpty = pChunk->bEmpty; /* fill the fields */
- *iMode = pChunk->iMode;
- *iNamesize = pChunk->iNamesize;
- *zName = pChunk->zName;
- *iChangedelay = pChunk->iChangedelay;
- *iChangetimeout = pChunk->iChangetimeout;
- *iChangeclipping = pChunk->iChangeclipping;
- *iChangesyncid = pChunk->iChangesyncid;
- *iDelay = pChunk->iDelay;
- *iTimeout = pChunk->iTimeout;
- *iBoundarytype = pChunk->iBoundarytype;
- *iBoundaryl = pChunk->iBoundaryl;
- *iBoundaryr = pChunk->iBoundaryr;
- *iBoundaryt = pChunk->iBoundaryt;
- *iBoundaryb = pChunk->iBoundaryb;
- *iCount = pChunk->iCount;
- *pSyncids = pChunk->pSyncids;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_FRAM, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_MOVE
- mng_retcode MNG_DECL mng_getchunk_move (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint16 *iFirstid,
- mng_uint16 *iLastid,
- mng_uint8 *iMovetype,
- mng_int32 *iMovex,
- mng_int32 *iMovey)
- {
- mng_datap pData;
- mng_movep pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_MOVE, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_movep)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_MOVE)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iFirstid = pChunk->iFirstid; /* fill the fields */
- *iLastid = pChunk->iLastid;
- *iMovetype = pChunk->iMovetype;
- *iMovex = pChunk->iMovex;
- *iMovey = pChunk->iMovey;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_MOVE, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_CLIP
- mng_retcode MNG_DECL mng_getchunk_clip (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint16 *iFirstid,
- mng_uint16 *iLastid,
- mng_uint8 *iCliptype,
- mng_int32 *iClipl,
- mng_int32 *iClipr,
- mng_int32 *iClipt,
- mng_int32 *iClipb)
- {
- mng_datap pData;
- mng_clipp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_CLIP, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_clipp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_CLIP)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iFirstid = pChunk->iFirstid; /* fill the fields */
- *iLastid = pChunk->iLastid;
- *iCliptype = pChunk->iCliptype;
- *iClipl = pChunk->iClipl;
- *iClipr = pChunk->iClipr;
- *iClipt = pChunk->iClipt;
- *iClipb = pChunk->iClipb;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_CLIP, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_SHOW
- mng_retcode MNG_DECL mng_getchunk_show (mng_handle hHandle,
- mng_handle hChunk,
- mng_bool *bEmpty,
- mng_uint16 *iFirstid,
- mng_uint16 *iLastid,
- mng_uint8 *iMode)
- {
- mng_datap pData;
- mng_showp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SHOW, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_showp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_SHOW)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *bEmpty = pChunk->bEmpty; /* fill the fields */
- *iFirstid = pChunk->iFirstid;
- *iLastid = pChunk->iLastid;
- *iMode = pChunk->iMode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SHOW, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_TERM
- mng_retcode MNG_DECL mng_getchunk_term (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint8 *iTermaction,
- mng_uint8 *iIteraction,
- mng_uint32 *iDelay,
- mng_uint32 *iItermax)
- {
- mng_datap pData;
- mng_termp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_TERM, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_termp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_TERM)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iTermaction = pChunk->iTermaction; /* fill the fields */
- *iIteraction = pChunk->iIteraction;
- *iDelay = pChunk->iDelay;
- *iItermax = pChunk->iItermax;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_TERM, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_SAVE
- mng_retcode MNG_DECL mng_getchunk_save (mng_handle hHandle,
- mng_handle hChunk,
- mng_bool *bEmpty,
- mng_uint8 *iOffsettype,
- mng_uint32 *iCount)
- {
- mng_datap pData;
- mng_savep pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SAVE, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_savep)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_SAVE)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *bEmpty = pChunk->bEmpty; /* fill the fields */
- *iOffsettype = pChunk->iOffsettype;
- *iCount = pChunk->iCount;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SAVE, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_getchunk_save_entry (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 iEntry,
- mng_uint8 *iEntrytype,
- mng_uint32arr2 *iOffset,
- mng_uint32arr2 *iStarttime,
- mng_uint32 *iLayernr,
- mng_uint32 *iFramenr,
- mng_uint32 *iNamesize,
- mng_pchar *zName)
- {
- mng_datap pData;
- mng_savep pChunk;
- mng_save_entryp pEntry;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SAVE_ENTRY, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_savep)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_SAVE)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- if (iEntry >= pChunk->iCount) /* valid index ? */
- MNG_ERROR (pData, MNG_INVALIDENTRYIX)
- pEntry = pChunk->pEntries + iEntry; /* address the entry */
- /* fill the fields */
- *iEntrytype = pEntry->iEntrytype;
- (*iOffset)[0] = pEntry->iOffset[0];
- (*iOffset)[1] = pEntry->iOffset[1];
- (*iStarttime)[0] = pEntry->iStarttime[0];
- (*iStarttime)[1] = pEntry->iStarttime[1];
- *iLayernr = pEntry->iLayernr;
- *iFramenr = pEntry->iFramenr;
- *iNamesize = pEntry->iNamesize;
- *zName = pEntry->zName;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SAVE_ENTRY, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_SEEK
- mng_retcode MNG_DECL mng_getchunk_seek (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 *iNamesize,
- mng_pchar *zName)
- {
- mng_datap pData;
- mng_seekp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SEEK, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_seekp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_SEEK)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iNamesize = pChunk->iNamesize; /* fill the fields */
- *zName = pChunk->zName;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_SEEK, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_eXPI
- mng_retcode MNG_DECL mng_getchunk_expi (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint16 *iSnapshotid,
- mng_uint32 *iNamesize,
- mng_pchar *zName)
- {
- mng_datap pData;
- mng_expip pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_EXPI, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_expip)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_eXPI)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iSnapshotid = pChunk->iSnapshotid; /* fill the fields */
- *iNamesize = pChunk->iNamesize;
- *zName = pChunk->zName;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_EXPI, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_fPRI
- mng_retcode MNG_DECL mng_getchunk_fpri (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint8 *iDeltatype,
- mng_uint8 *iPriority)
- {
- mng_datap pData;
- mng_fprip pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_FPRI, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_fprip)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_fPRI)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iDeltatype = pChunk->iDeltatype; /* fill the fields */
- *iPriority = pChunk->iPriority;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_FPRI, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_nEED
- mng_retcode MNG_DECL mng_getchunk_need (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 *iKeywordssize,
- mng_pchar *zKeywords)
- {
- mng_datap pData;
- mng_needp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_NEED, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_needp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_nEED)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- /* fill the fields */
- *iKeywordssize = pChunk->iKeywordssize;
- *zKeywords = pChunk->zKeywords;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_NEED, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_pHYg
- mng_retcode MNG_DECL mng_getchunk_phyg (mng_handle hHandle,
- mng_handle hChunk,
- mng_bool *bEmpty,
- mng_uint32 *iSizex,
- mng_uint32 *iSizey,
- mng_uint8 *iUnit)
- {
- mng_datap pData;
- mng_phygp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PHYG, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_phygp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_pHYg)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *bEmpty = pChunk->bEmpty; /* fill the fields */
- *iSizex = pChunk->iSizex;
- *iSizey = pChunk->iSizey;
- *iUnit = pChunk->iUnit;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PHYG, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifdef MNG_INCLUDE_JNG
- mng_retcode MNG_DECL mng_getchunk_jhdr (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 *iWidth,
- mng_uint32 *iHeight,
- mng_uint8 *iColortype,
- mng_uint8 *iImagesampledepth,
- mng_uint8 *iImagecompression,
- mng_uint8 *iImageinterlace,
- mng_uint8 *iAlphasampledepth,
- mng_uint8 *iAlphacompression,
- mng_uint8 *iAlphafilter,
- mng_uint8 *iAlphainterlace)
- {
- mng_datap pData;
- mng_jhdrp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_JHDR, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_jhdrp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_JHDR)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iWidth = pChunk->iWidth; /* fill the fields */
- *iHeight = pChunk->iHeight;
- *iColortype = pChunk->iColortype;
- *iImagesampledepth = pChunk->iImagesampledepth;
- *iImagecompression = pChunk->iImagecompression;
- *iImageinterlace = pChunk->iImageinterlace;
- *iAlphasampledepth = pChunk->iAlphasampledepth;
- *iAlphacompression = pChunk->iAlphacompression;
- *iAlphafilter = pChunk->iAlphafilter;
- *iAlphainterlace = pChunk->iAlphainterlace;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_JHDR, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif /* MNG_INCLUDE_JNG */
- /* ************************************************************************** */
- #ifdef MNG_INCLUDE_JNG
- mng_retcode MNG_DECL mng_getchunk_jdat (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 *iRawlen,
- mng_ptr *pRawdata)
- {
- mng_datap pData;
- mng_jdatp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_JDAT, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_jdatp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_JDAT)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iRawlen = pChunk->iDatasize; /* fill the fields */
- *pRawdata = pChunk->pData;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_JDAT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif /* MNG_INCLUDE_JNG */
- /* ************************************************************************** */
- #ifdef MNG_INCLUDE_JNG
- mng_retcode MNG_DECL mng_getchunk_jdaa (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 *iRawlen,
- mng_ptr *pRawdata)
- {
- mng_datap pData;
- mng_jdaap pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_JDAA, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_jdaap)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_JDAA)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iRawlen = pChunk->iDatasize; /* fill the fields */
- *pRawdata = pChunk->pData;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_JDAA, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif /* MNG_INCLUDE_JNG */
- /* ************************************************************************** */
- #ifndef MNG_NO_DELTA_PNG
- mng_retcode MNG_DECL mng_getchunk_dhdr (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint16 *iObjectid,
- mng_uint8 *iImagetype,
- mng_uint8 *iDeltatype,
- mng_uint32 *iBlockwidth,
- mng_uint32 *iBlockheight,
- mng_uint32 *iBlockx,
- mng_uint32 *iBlocky)
- {
- mng_datap pData;
- mng_dhdrp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_DHDR, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_dhdrp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_DHDR)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iObjectid = pChunk->iObjectid; /* fill the fields */
- *iImagetype = pChunk->iImagetype;
- *iDeltatype = pChunk->iDeltatype;
- *iBlockwidth = pChunk->iBlockwidth;
- *iBlockheight = pChunk->iBlockheight;
- *iBlockx = pChunk->iBlockx;
- *iBlocky = pChunk->iBlocky;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_DHDR, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_NO_DELTA_PNG
- mng_retcode MNG_DECL mng_getchunk_prom (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint8 *iColortype,
- mng_uint8 *iSampledepth,
- mng_uint8 *iFilltype)
- {
- mng_datap pData;
- mng_promp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PROM, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_promp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_PROM)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iColortype = pChunk->iColortype; /* fill the fields */
- *iSampledepth = pChunk->iSampledepth;
- *iFilltype = pChunk->iFilltype;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PROM, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_NO_DELTA_PNG
- mng_retcode MNG_DECL mng_getchunk_pplt (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint8 *iDeltatype,
- mng_uint32 *iCount)
- {
- mng_datap pData;
- mng_ppltp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PPLT, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_ppltp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_PPLT)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iDeltatype = pChunk->iDeltatype; /* fill the fields */
- *iCount = pChunk->iCount;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PPLT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_NO_DELTA_PNG
- mng_retcode MNG_DECL mng_getchunk_pplt_entry (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 iEntry,
- mng_uint16 *iRed,
- mng_uint16 *iGreen,
- mng_uint16 *iBlue,
- mng_uint16 *iAlpha,
- mng_bool *bUsed)
- {
- mng_datap pData;
- mng_ppltp pChunk;
- mng_pplt_entryp pEntry;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PPLT_ENTRY, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_ppltp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_PPLT)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- if (iEntry >= pChunk->iCount) /* valid index ? */
- MNG_ERROR (pData, MNG_INVALIDENTRYIX)
- pEntry = &pChunk->aEntries[iEntry]; /* address the entry */
- *iRed = pEntry->iRed; /* fill the fields */
- *iGreen = pEntry->iGreen;
- *iBlue = pEntry->iBlue;
- *iAlpha = pEntry->iAlpha;
- *bUsed = pEntry->bUsed;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_PPLT_ENTRY, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_NO_DELTA_PNG
- mng_retcode MNG_DECL mng_getchunk_drop (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 *iCount,
- mng_chunkidp *pChunknames)
- {
- mng_datap pData;
- mng_dropp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_DROP, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_dropp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_DROP)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iCount = pChunk->iCount; /* fill the fields */
- *pChunknames = pChunk->pChunknames;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_DROP, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_NO_DELTA_PNG
- #ifndef MNG_SKIPCHUNK_DBYK
- mng_retcode MNG_DECL mng_getchunk_dbyk (mng_handle hHandle,
- mng_handle hChunk,
- mng_chunkid *iChunkname,
- mng_uint8 *iPolarity,
- mng_uint32 *iKeywordssize,
- mng_pchar *zKeywords)
- {
- mng_datap pData;
- mng_dbykp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_DBYK, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_dbykp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_DBYK)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iChunkname = pChunk->iChunkname; /* fill the fields */
- *iPolarity = pChunk->iPolarity;
- *iKeywordssize = pChunk->iKeywordssize;
- *zKeywords = pChunk->zKeywords;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_DBYK, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- #endif
- /* ************************************************************************** */
- #ifndef MNG_NO_DELTA_PNG
- #ifndef MNG_SKIPCHUNK_ORDR
- mng_retcode MNG_DECL mng_getchunk_ordr (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 *iCount)
- {
- mng_datap pData;
- mng_ordrp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_ORDR, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_ordrp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_ORDR)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iCount = pChunk->iCount; /* fill the field */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_ORDR, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- #endif
- /* ************************************************************************** */
- #ifndef MNG_NO_DELTA_PNG
- #ifndef MNG_SKIPCHUNK_ORDR
- mng_retcode MNG_DECL mng_getchunk_ordr_entry (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 iEntry,
- mng_chunkid *iChunkname,
- mng_uint8 *iOrdertype)
- {
- mng_datap pData;
- mng_ordrp pChunk;
- mng_ordr_entryp pEntry;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_ORDR_ENTRY, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_ordrp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_ORDR)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- if (iEntry >= pChunk->iCount) /* valid index ? */
- MNG_ERROR (pData, MNG_INVALIDENTRYIX)
- pEntry = pChunk->pEntries + iEntry; /* address the proper entry */
- *iChunkname = pEntry->iChunkname; /* fill the fields */
- *iOrdertype = pEntry->iOrdertype;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_ORDR_ENTRY, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_MAGN
- mng_retcode MNG_DECL mng_getchunk_magn (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint16 *iFirstid,
- mng_uint16 *iLastid,
- mng_uint16 *iMethodX,
- mng_uint16 *iMX,
- mng_uint16 *iMY,
- mng_uint16 *iML,
- mng_uint16 *iMR,
- mng_uint16 *iMT,
- mng_uint16 *iMB,
- mng_uint16 *iMethodY)
- {
- mng_datap pData;
- mng_magnp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_MAGN, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_magnp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_MAGN)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iFirstid = pChunk->iFirstid; /* fill the fields */
- *iLastid = pChunk->iLastid;
- *iMethodX = (mng_uint16)pChunk->iMethodX;
- *iMX = pChunk->iMX;
- *iMY = pChunk->iMY;
- *iML = pChunk->iML;
- *iMR = pChunk->iMR;
- *iMT = pChunk->iMT;
- *iMB = pChunk->iMB;
- *iMethodY = (mng_uint16)pChunk->iMethodY;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_MAGN, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifdef MNG_INCLUDE_MPNG_PROPOSAL
- MNG_EXT mng_retcode MNG_DECL mng_getchunk_mpng (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 *iFramewidth,
- mng_uint32 *iFrameheight,
- mng_uint16 *iNumplays,
- mng_uint16 *iTickspersec,
- mng_uint8 *iCompressionmethod,
- mng_uint32 *iCount)
- {
- mng_datap pData;
- mng_mpngp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_MPNG, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_mpngp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_mpNG)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- /* fill the fields */
- *iFramewidth = pChunk->iFramewidth;
- *iFrameheight = pChunk->iFrameheight;
- *iNumplays = pChunk->iNumplays;
- *iTickspersec = pChunk->iTickspersec;
- *iCompressionmethod = pChunk->iCompressionmethod;
- *iCount = pChunk->iFramessize / sizeof (mng_mpng_frame);
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_MPNG, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifdef MNG_INCLUDE_MPNG_PROPOSAL
- MNG_EXT mng_retcode MNG_DECL mng_getchunk_mpng_frame (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 iEntry,
- mng_uint32 *iX,
- mng_uint32 *iY,
- mng_uint32 *iWidth,
- mng_uint32 *iHeight,
- mng_int32 *iXoffset,
- mng_int32 *iYoffset,
- mng_uint16 *iTicks)
- {
- mng_datap pData;
- mng_mpngp pChunk;
- mng_mpng_framep pFrame;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_MPNG_FRAME, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_mpngp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_mpNG)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- /* valid index ? */
- if (iEntry >= (pChunk->iFramessize / sizeof (mng_mpng_frame)))
- MNG_ERROR (pData, MNG_INVALIDENTRYIX)
- pFrame = pChunk->pFrames + iEntry; /* address the entry */
- /* fill the fields */
- *iX = pFrame->iX;
- *iY = pFrame->iY;
- *iWidth = pFrame->iWidth;
- *iHeight = pFrame->iHeight;
- *iXoffset = pFrame->iXoffset;
- *iYoffset = pFrame->iYoffset;
- *iTicks = pFrame->iTicks;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_MPNG_FRAME, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_evNT
- mng_retcode MNG_DECL mng_getchunk_evnt (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 *iCount)
- {
- mng_datap pData;
- mng_evntp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_EVNT, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_evntp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_evNT)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- *iCount = pChunk->iCount; /* fill the fields */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_EVNT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_getchunk_evnt_entry (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 iEntry,
- mng_uint8 *iEventtype,
- mng_uint8 *iMasktype,
- mng_int32 *iLeft,
- mng_int32 *iRight,
- mng_int32 *iTop,
- mng_int32 *iBottom,
- mng_uint16 *iObjectid,
- mng_uint8 *iIndex,
- mng_uint32 *iSegmentnamesize,
- mng_pchar *zSegmentname)
- {
- mng_datap pData;
- mng_evntp pChunk;
- mng_evnt_entryp pEntry;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_EVNT_ENTRY, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_evntp)hChunk; /* address the chunk */
- if (pChunk->sHeader.iChunkname != MNG_UINT_evNT)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- if (iEntry >= pChunk->iCount) /* valid index ? */
- MNG_ERROR (pData, MNG_INVALIDENTRYIX)
- pEntry = pChunk->pEntries + iEntry; /* address the entry */
- /* fill the fields */
- *iEventtype = pEntry->iEventtype;
- *iMasktype = pEntry->iMasktype;
- *iLeft = pEntry->iLeft;
- *iRight = pEntry->iRight;
- *iTop = pEntry->iTop;
- *iBottom = pEntry->iBottom;
- *iObjectid = pEntry->iObjectid;
- *iIndex = pEntry->iIndex;
- *iSegmentnamesize = pEntry->iSegmentnamesize;
- *zSegmentname = pEntry->zSegmentname;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_EVNT_ENTRY, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_getchunk_unknown (mng_handle hHandle,
- mng_handle hChunk,
- mng_chunkid *iChunkname,
- mng_uint32 *iRawlen,
- mng_ptr *pRawdata)
- {
- mng_datap pData;
- mng_unknown_chunkp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_UNKNOWN, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- pChunk = (mng_unknown_chunkp)hChunk; /* address the chunk */
- if (pChunk->sHeader.fCleanup != mng_free_unknown)
- MNG_ERROR (pData, MNG_WRONGCHUNK) /* ouch */
- /* fill the fields */
- *iChunkname = pChunk->sHeader.iChunkname;
- *iRawlen = pChunk->iDatasize;
- *pRawdata = pChunk->pData;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETCHUNK_UNKNOWN, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- /* ************************************************************************** */
- #ifdef MNG_INCLUDE_WRITE_PROCS
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_TERM
- MNG_LOCAL mng_bool check_term (mng_datap pData,
- mng_chunkid iChunkname)
- {
- mng_chunk_headerp pChunk = (mng_chunk_headerp)pData->pLastchunk;
- if (!pChunk) /* nothing added yet ? */
- return MNG_TRUE;
- /* last added chunk is TERM ? */
- if (pChunk->iChunkname != MNG_UINT_TERM)
- return MNG_TRUE;
- /* previous to last is MHDR ? */
- if ((pChunk->pPrev) && (((mng_chunk_headerp)pChunk->pPrev)->iChunkname == MNG_UINT_MHDR))
- return MNG_TRUE;
- if (iChunkname == MNG_UINT_SEEK) /* new chunk to be added is SEEK ? */
- return MNG_TRUE;
- return MNG_FALSE;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_putchunk_ihdr (mng_handle hHandle,
- mng_uint32 iWidth,
- mng_uint32 iHeight,
- mng_uint8 iBitdepth,
- mng_uint8 iColortype,
- mng_uint8 iCompression,
- mng_uint8 iFilter,
- mng_uint8 iInterlace)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_IHDR, mng_init_general, mng_free_general, mng_read_ihdr, mng_write_ihdr, mng_assign_general, 0, 0, sizeof(mng_ihdr)};
- #else
- {MNG_UINT_IHDR, mng_init_ihdr, mng_free_ihdr, mng_read_ihdr, mng_write_ihdr, mng_assign_ihdr, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_IHDR, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_IHDR))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_ihdr (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_IHDR, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- ((mng_ihdrp)pChunk)->iWidth = iWidth;
- ((mng_ihdrp)pChunk)->iHeight = iHeight;
- ((mng_ihdrp)pChunk)->iBitdepth = iBitdepth;
- ((mng_ihdrp)pChunk)->iColortype = iColortype;
- ((mng_ihdrp)pChunk)->iCompression = iCompression;
- ((mng_ihdrp)pChunk)->iFilter = iFilter;
- ((mng_ihdrp)pChunk)->iInterlace = iInterlace;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_IHDR, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_putchunk_plte (mng_handle hHandle,
- mng_uint32 iCount,
- mng_palette8 aPalette)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_PLTE, mng_init_general, mng_free_general, mng_read_plte, mng_write_plte, mng_assign_general, 0, 0, sizeof(mng_plte)};
- #else
- {MNG_UINT_PLTE, mng_init_plte, mng_free_plte, mng_read_plte, mng_write_plte, mng_assign_plte, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PLTE, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a header first! */
- if (pData->iFirstchunkadded == 0)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_PLTE))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_plte (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_PLTE, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_pltep)pChunk)->iEntrycount = iCount;
- ((mng_pltep)pChunk)->bEmpty = (mng_bool)(iCount == 0);
- MNG_COPY (((mng_pltep)pChunk)->aEntries, aPalette, sizeof (mng_palette8));
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PLTE, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_putchunk_idat (mng_handle hHandle,
- mng_uint32 iRawlen,
- mng_ptr pRawdata)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_IDAT, mng_init_general, mng_free_idat, mng_read_idat, mng_write_idat, mng_assign_idat, 0, 0, sizeof(mng_idat)};
- #else
- {MNG_UINT_IDAT, mng_init_idat, mng_free_idat, mng_read_idat, mng_write_idat, mng_assign_idat, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_IDAT, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a header first! */
- if (pData->iFirstchunkadded == 0)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_IDAT))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_idat (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_IDAT, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_idatp)pChunk)->bEmpty = (mng_bool)(iRawlen == 0);
- ((mng_idatp)pChunk)->iDatasize = iRawlen;
- if (iRawlen)
- {
- MNG_ALLOC (pData, ((mng_idatp)pChunk)->pData, iRawlen);
- MNG_COPY (((mng_idatp)pChunk)->pData, pRawdata, iRawlen);
- }
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_IDAT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_putchunk_iend (mng_handle hHandle)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_IEND, mng_init_general, mng_free_general, mng_read_iend, mng_write_iend, mng_assign_general, 0, 0, sizeof(mng_iend)};
- #else
- {MNG_UINT_IEND, mng_init_iend, mng_free_iend, mng_read_iend, mng_write_iend, mng_assign_iend, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_IEND, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a header first! */
- if (pData->iFirstchunkadded == 0)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_IEND))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_iend (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_IEND, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_INCLUDE_JNG
- if ((pData->iFirstchunkadded == MNG_UINT_IHDR) ||
- (pData->iFirstchunkadded == MNG_UINT_JHDR) )
- #else
- if (pData->iFirstchunkadded == MNG_UINT_IHDR)
- #endif
- pData->bCreating = MNG_FALSE; /* should be last chunk !!! */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_IEND, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_putchunk_trns (mng_handle hHandle,
- mng_bool bEmpty,
- mng_bool bGlobal,
- mng_uint8 iType,
- mng_uint32 iCount,
- mng_uint8arr aAlphas,
- mng_uint16 iGray,
- mng_uint16 iRed,
- mng_uint16 iGreen,
- mng_uint16 iBlue,
- mng_uint32 iRawlen,
- mng_uint8arr aRawdata)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_tRNS, mng_init_general, mng_free_general, mng_read_trns, mng_write_trns, mng_assign_general, 0, 0, sizeof(mng_trns)};
- #else
- {MNG_UINT_tRNS, mng_init_trns, mng_free_trns, mng_read_trns, mng_write_trns, mng_assign_trns, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_TRNS, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a header first! */
- if (pData->iFirstchunkadded == 0)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_tRNS))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_trns (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_tRNS, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_trnsp)pChunk)->bEmpty = bEmpty;
- ((mng_trnsp)pChunk)->bGlobal = bGlobal;
- ((mng_trnsp)pChunk)->iType = iType;
- ((mng_trnsp)pChunk)->iCount = iCount;
- ((mng_trnsp)pChunk)->iGray = iGray;
- ((mng_trnsp)pChunk)->iRed = iRed;
- ((mng_trnsp)pChunk)->iGreen = iGreen;
- ((mng_trnsp)pChunk)->iBlue = iBlue;
- ((mng_trnsp)pChunk)->iRawlen = iRawlen;
- MNG_COPY (((mng_trnsp)pChunk)->aEntries, aAlphas, sizeof (mng_uint8arr));
- MNG_COPY (((mng_trnsp)pChunk)->aRawdata, aRawdata, sizeof (mng_uint8arr));
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_TRNS, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_gAMA
- mng_retcode MNG_DECL mng_putchunk_gama (mng_handle hHandle,
- mng_bool bEmpty,
- mng_uint32 iGamma)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_gAMA, mng_init_general, mng_free_general, mng_read_gama, mng_write_gama, mng_assign_general, 0, 0, sizeof(mng_gama)};
- #else
- {MNG_UINT_gAMA, mng_init_gama, mng_free_gama, mng_read_gama, mng_write_gama, mng_assign_gama, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_GAMA, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a header first! */
- if (pData->iFirstchunkadded == 0)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_gAMA))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_gama (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_gAMA, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_gamap)pChunk)->bEmpty = bEmpty;
- ((mng_gamap)pChunk)->iGamma = iGamma;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_GAMA, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_cHRM
- mng_retcode MNG_DECL mng_putchunk_chrm (mng_handle hHandle,
- mng_bool bEmpty,
- mng_uint32 iWhitepointx,
- mng_uint32 iWhitepointy,
- mng_uint32 iRedx,
- mng_uint32 iRedy,
- mng_uint32 iGreenx,
- mng_uint32 iGreeny,
- mng_uint32 iBluex,
- mng_uint32 iBluey)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_cHRM, mng_init_general, mng_free_general, mng_read_chrm, mng_write_chrm, mng_assign_general, 0, 0, sizeof(mng_chrm)};
- #else
- {MNG_UINT_cHRM, mng_init_chrm, mng_free_chrm, mng_read_chrm, mng_write_chrm, mng_assign_chrm, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_CHRM, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a header first! */
- if (pData->iFirstchunkadded == 0)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_cHRM))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_chrm (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_cHRM, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_chrmp)pChunk)->bEmpty = bEmpty;
- ((mng_chrmp)pChunk)->iWhitepointx = iWhitepointx;
- ((mng_chrmp)pChunk)->iWhitepointy = iWhitepointy;
- ((mng_chrmp)pChunk)->iRedx = iRedx;
- ((mng_chrmp)pChunk)->iRedy = iRedy;
- ((mng_chrmp)pChunk)->iGreenx = iGreenx;
- ((mng_chrmp)pChunk)->iGreeny = iGreeny;
- ((mng_chrmp)pChunk)->iBluex = iBluex;
- ((mng_chrmp)pChunk)->iBluey = iBluey;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_CHRM, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_sRGB
- mng_retcode MNG_DECL mng_putchunk_srgb (mng_handle hHandle,
- mng_bool bEmpty,
- mng_uint8 iRenderingintent)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_sRGB, mng_init_general, mng_free_general, mng_read_srgb, mng_write_srgb, mng_assign_general, 0, 0, sizeof(mng_srgb)};
- #else
- {MNG_UINT_sRGB, mng_init_srgb, mng_free_srgb, mng_read_srgb, mng_write_srgb, mng_assign_srgb, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SRGB, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a header first! */
- if (pData->iFirstchunkadded == 0)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_sRGB))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_srgb (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_sRGB, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_srgbp)pChunk)->bEmpty = bEmpty;
- ((mng_srgbp)pChunk)->iRenderingintent = iRenderingintent;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SRGB, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_iCCP
- mng_retcode MNG_DECL mng_putchunk_iccp (mng_handle hHandle,
- mng_bool bEmpty,
- mng_uint32 iNamesize,
- mng_pchar zName,
- mng_uint8 iCompression,
- mng_uint32 iProfilesize,
- mng_ptr pProfile)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_iCCP, mng_init_general, mng_free_iccp, mng_read_iccp, mng_write_iccp, mng_assign_iccp, 0, 0, sizeof(mng_iccp)};
- #else
- {MNG_UINT_iCCP, mng_init_iccp, mng_free_iccp, mng_read_iccp, mng_write_iccp, mng_assign_iccp, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_ICCP, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a header first! */
- if (pData->iFirstchunkadded == 0)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_iCCP))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_iccp (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_iCCP, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_iccpp)pChunk)->bEmpty = bEmpty;
- ((mng_iccpp)pChunk)->iNamesize = iNamesize;
- ((mng_iccpp)pChunk)->iCompression = iCompression;
- ((mng_iccpp)pChunk)->iProfilesize = iProfilesize;
- if (iNamesize)
- {
- MNG_ALLOC (pData, ((mng_iccpp)pChunk)->zName, iNamesize + 1);
- MNG_COPY (((mng_iccpp)pChunk)->zName, zName, iNamesize);
- }
- if (iProfilesize)
- {
- MNG_ALLOC (pData, ((mng_iccpp)pChunk)->pProfile, iProfilesize);
- MNG_COPY (((mng_iccpp)pChunk)->pProfile, pProfile, iProfilesize);
- }
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_ICCP, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_tEXt
- mng_retcode MNG_DECL mng_putchunk_text (mng_handle hHandle,
- mng_uint32 iKeywordsize,
- mng_pchar zKeyword,
- mng_uint32 iTextsize,
- mng_pchar zText)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_tEXt, mng_init_general, mng_free_text, mng_read_text, mng_write_text, mng_assign_text, 0, 0, sizeof(mng_text)};
- #else
- {MNG_UINT_tEXt, mng_init_text, mng_free_text, mng_read_text, mng_write_text, mng_assign_text, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_TEXT, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a header first! */
- if (pData->iFirstchunkadded == 0)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_tEXt))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_text (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_tEXt, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_textp)pChunk)->iKeywordsize = iKeywordsize;
- ((mng_textp)pChunk)->iTextsize = iTextsize;
- if (iKeywordsize)
- {
- MNG_ALLOC (pData, ((mng_textp)pChunk)->zKeyword, iKeywordsize + 1);
- MNG_COPY (((mng_textp)pChunk)->zKeyword, zKeyword, iKeywordsize);
- }
- if (iTextsize)
- {
- MNG_ALLOC (pData, ((mng_textp)pChunk)->zText, iTextsize + 1);
- MNG_COPY (((mng_textp)pChunk)->zText, zText, iTextsize);
- }
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_TEXT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_zTXt
- mng_retcode MNG_DECL mng_putchunk_ztxt (mng_handle hHandle,
- mng_uint32 iKeywordsize,
- mng_pchar zKeyword,
- mng_uint8 iCompression,
- mng_uint32 iTextsize,
- mng_pchar zText)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_zTXt, mng_init_general, mng_free_ztxt, mng_read_ztxt, mng_write_ztxt, mng_assign_ztxt, 0, 0, sizeof(mng_ztxt)};
- #else
- {MNG_UINT_zTXt, mng_init_ztxt, mng_free_ztxt, mng_read_ztxt, mng_write_ztxt, mng_assign_ztxt, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_ZTXT, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a header first! */
- if (pData->iFirstchunkadded == 0)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_zTXt))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_ztxt (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_zTXt, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_ztxtp)pChunk)->iKeywordsize = iKeywordsize;
- ((mng_ztxtp)pChunk)->iCompression = iCompression;
- ((mng_ztxtp)pChunk)->iTextsize = iTextsize;
- if (iKeywordsize)
- {
- MNG_ALLOC (pData, ((mng_ztxtp)pChunk)->zKeyword, iKeywordsize + 1);
- MNG_COPY (((mng_ztxtp)pChunk)->zKeyword, zKeyword, iKeywordsize);
- }
- if (iTextsize)
- {
- MNG_ALLOC (pData, ((mng_ztxtp)pChunk)->zText, iTextsize + 1);
- MNG_COPY (((mng_ztxtp)pChunk)->zText, zText, iTextsize);
- }
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_ZTXT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_iTXt
- mng_retcode MNG_DECL mng_putchunk_itxt (mng_handle hHandle,
- mng_uint32 iKeywordsize,
- mng_pchar zKeyword,
- mng_uint8 iCompressionflag,
- mng_uint8 iCompressionmethod,
- mng_uint32 iLanguagesize,
- mng_pchar zLanguage,
- mng_uint32 iTranslationsize,
- mng_pchar zTranslation,
- mng_uint32 iTextsize,
- mng_pchar zText)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_iTXt, mng_init_general, mng_free_itxt, mng_read_itxt, mng_write_itxt, mng_assign_itxt, 0, 0, sizeof(mng_itxt)};
- #else
- {MNG_UINT_iTXt, mng_init_itxt, mng_free_itxt, mng_read_itxt, mng_write_itxt, mng_assign_itxt, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_ITXT, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a header first! */
- if (pData->iFirstchunkadded == 0)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_iTXt))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_itxt (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_iTXt, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_itxtp)pChunk)->iKeywordsize = iKeywordsize;
- ((mng_itxtp)pChunk)->iCompressionflag = iCompressionflag;
- ((mng_itxtp)pChunk)->iCompressionmethod = iCompressionmethod;
- ((mng_itxtp)pChunk)->iLanguagesize = iLanguagesize;
- ((mng_itxtp)pChunk)->iTranslationsize = iTranslationsize;
- ((mng_itxtp)pChunk)->iTextsize = iTextsize;
- if (iKeywordsize)
- {
- MNG_ALLOC (pData, ((mng_itxtp)pChunk)->zKeyword, iKeywordsize + 1);
- MNG_COPY (((mng_itxtp)pChunk)->zKeyword, zKeyword, iKeywordsize);
- }
- if (iLanguagesize)
- {
- MNG_ALLOC (pData, ((mng_itxtp)pChunk)->zLanguage, iLanguagesize + 1);
- MNG_COPY (((mng_itxtp)pChunk)->zLanguage, zLanguage, iLanguagesize);
- }
- if (iTranslationsize)
- {
- MNG_ALLOC (pData, ((mng_itxtp)pChunk)->zTranslation, iTranslationsize + 1);
- MNG_COPY (((mng_itxtp)pChunk)->zTranslation, zTranslation, iTranslationsize);
- }
- if (iTextsize)
- {
- MNG_ALLOC (pData, ((mng_itxtp)pChunk)->zText, iTextsize + 1);
- MNG_COPY (((mng_itxtp)pChunk)->zText, zText, iTextsize);
- }
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_ITXT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_bKGD
- mng_retcode MNG_DECL mng_putchunk_bkgd (mng_handle hHandle,
- mng_bool bEmpty,
- mng_uint8 iType,
- mng_uint8 iIndex,
- mng_uint16 iGray,
- mng_uint16 iRed,
- mng_uint16 iGreen,
- mng_uint16 iBlue)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_bKGD, mng_init_general, mng_free_general, mng_read_bkgd, mng_write_bkgd, mng_assign_general, 0, 0, sizeof(mng_bkgd)};
- #else
- {MNG_UINT_bKGD, mng_init_bkgd, mng_free_bkgd, mng_read_bkgd, mng_write_bkgd, mng_assign_bkgd, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_BKGD, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a header first! */
- if (pData->iFirstchunkadded == 0)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_bKGD))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_bkgd (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_bKGD, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_bkgdp)pChunk)->bEmpty = bEmpty;
- ((mng_bkgdp)pChunk)->iType = iType;
- ((mng_bkgdp)pChunk)->iIndex = iIndex;
- ((mng_bkgdp)pChunk)->iGray = iGray;
- ((mng_bkgdp)pChunk)->iRed = iRed;
- ((mng_bkgdp)pChunk)->iGreen = iGreen;
- ((mng_bkgdp)pChunk)->iBlue = iBlue;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_BKGD, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_pHYs
- mng_retcode MNG_DECL mng_putchunk_phys (mng_handle hHandle,
- mng_bool bEmpty,
- mng_uint32 iSizex,
- mng_uint32 iSizey,
- mng_uint8 iUnit)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_pHYs, mng_init_general, mng_free_general, mng_read_phys, mng_write_phys, mng_assign_general, 0, 0, sizeof(mng_phys)};
- #else
- {MNG_UINT_pHYs, mng_init_phys, mng_free_phys, mng_read_phys, mng_write_phys, mng_assign_phys, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PHYS, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a header first! */
- if (pData->iFirstchunkadded == 0)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_pHYs))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_phys (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_pHYs, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_physp)pChunk)->bEmpty = bEmpty;
- ((mng_physp)pChunk)->iSizex = iSizex;
- ((mng_physp)pChunk)->iSizey = iSizey;
- ((mng_physp)pChunk)->iUnit = iUnit;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PHYS, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_sBIT
- mng_retcode MNG_DECL mng_putchunk_sbit (mng_handle hHandle,
- mng_bool bEmpty,
- mng_uint8 iType,
- mng_uint8arr4 aBits)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_sBIT, mng_init_general, mng_free_general, mng_read_sbit, mng_write_sbit, mng_assign_general, 0, 0, sizeof(mng_sbit)};
- #else
- {MNG_UINT_sBIT, mng_init_sbit, mng_free_sbit, mng_read_sbit, mng_write_sbit, mng_assign_sbit, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SBIT, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a header first! */
- if (pData->iFirstchunkadded == 0)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_sBIT))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_sbit (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_sBIT, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_sbitp)pChunk)->bEmpty = bEmpty;
- ((mng_sbitp)pChunk)->iType = iType;
- ((mng_sbitp)pChunk)->aBits[0] = aBits[0];
- ((mng_sbitp)pChunk)->aBits[1] = aBits[1];
- ((mng_sbitp)pChunk)->aBits[2] = aBits[2];
- ((mng_sbitp)pChunk)->aBits[3] = aBits[3];
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SBIT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_sPLT
- mng_retcode MNG_DECL mng_putchunk_splt (mng_handle hHandle,
- mng_bool bEmpty,
- mng_uint32 iNamesize,
- mng_pchar zName,
- mng_uint8 iSampledepth,
- mng_uint32 iEntrycount,
- mng_ptr pEntries)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_sPLT, mng_init_general, mng_free_splt, mng_read_splt, mng_write_splt, mng_assign_splt, 0, 0, sizeof(mng_splt)};
- #else
- {MNG_UINT_sPLT, mng_init_splt, mng_free_splt, mng_read_splt, mng_write_splt, mng_assign_splt, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SPLT, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a header first! */
- if (pData->iFirstchunkadded == 0)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_sPLT))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_splt (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_sPLT, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_spltp)pChunk)->bEmpty = bEmpty;
- ((mng_spltp)pChunk)->iNamesize = iNamesize;
- ((mng_spltp)pChunk)->iSampledepth = iSampledepth;
- ((mng_spltp)pChunk)->iEntrycount = iEntrycount;
- if (iNamesize)
- {
- MNG_ALLOC (pData, ((mng_spltp)pChunk)->zName, iNamesize + 1);
- MNG_COPY (((mng_spltp)pChunk)->zName, zName, iNamesize);
- }
- if (iEntrycount)
- {
- mng_uint32 iSize = iEntrycount * ((iSampledepth >> 1) + 2);
- MNG_ALLOC (pData, ((mng_spltp)pChunk)->pEntries, iSize);
- MNG_COPY (((mng_spltp)pChunk)->pEntries, pEntries, iSize);
- }
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SPLT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_hIST
- mng_retcode MNG_DECL mng_putchunk_hist (mng_handle hHandle,
- mng_uint32 iEntrycount,
- mng_uint16arr aEntries)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_hIST, mng_init_general, mng_free_general, mng_read_hist, mng_write_hist, mng_assign_general, 0, 0, sizeof(mng_hist)};
- #else
- {MNG_UINT_hIST, mng_init_hist, mng_free_hist, mng_read_hist, mng_write_hist, mng_assign_hist, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_HIST, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a header first! */
- if (pData->iFirstchunkadded == 0)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_hIST))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_hist (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_hIST, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_histp)pChunk)->iEntrycount = iEntrycount;
- MNG_COPY (((mng_histp)pChunk)->aEntries, aEntries, sizeof (mng_uint16arr));
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_HIST, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_tIME
- mng_retcode MNG_DECL mng_putchunk_time (mng_handle hHandle,
- mng_uint16 iYear,
- mng_uint8 iMonth,
- mng_uint8 iDay,
- mng_uint8 iHour,
- mng_uint8 iMinute,
- mng_uint8 iSecond)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_tIME, mng_init_general, mng_free_general, mng_read_time, mng_write_time, mng_assign_general, 0, 0, sizeof(mng_time)};
- #else
- {MNG_UINT_tIME, mng_init_time, mng_free_time, mng_read_time, mng_write_time, mng_assign_time, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_TIME, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_tIME))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* must have had a header first! */
- if (pData->iFirstchunkadded == 0)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_time (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_tIME, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_timep)pChunk)->iYear = iYear;
- ((mng_timep)pChunk)->iMonth = iMonth;
- ((mng_timep)pChunk)->iDay = iDay;
- ((mng_timep)pChunk)->iHour = iHour;
- ((mng_timep)pChunk)->iMinute = iMinute;
- ((mng_timep)pChunk)->iSecond = iSecond;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_TIME, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_putchunk_mhdr (mng_handle hHandle,
- mng_uint32 iWidth,
- mng_uint32 iHeight,
- mng_uint32 iTicks,
- mng_uint32 iLayercount,
- mng_uint32 iFramecount,
- mng_uint32 iPlaytime,
- mng_uint32 iSimplicity)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_MHDR, mng_init_general, mng_free_general, mng_read_mhdr, mng_write_mhdr, mng_assign_general, 0, 0, sizeof(mng_mhdr)};
- #else
- {MNG_UINT_MHDR, mng_init_mhdr, mng_free_mhdr, mng_read_mhdr, mng_write_mhdr, mng_assign_mhdr, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_MHDR, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must be very first! */
- if (pData->iFirstchunkadded != 0)
- MNG_ERROR (pData, MNG_SEQUENCEERROR)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_MHDR))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_mhdr (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_MHDR, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_mhdrp)pChunk)->iWidth = iWidth;
- ((mng_mhdrp)pChunk)->iHeight = iHeight;
- ((mng_mhdrp)pChunk)->iTicks = iTicks;
- ((mng_mhdrp)pChunk)->iLayercount = iLayercount;
- ((mng_mhdrp)pChunk)->iFramecount = iFramecount;
- ((mng_mhdrp)pChunk)->iPlaytime = iPlaytime;
- ((mng_mhdrp)pChunk)->iSimplicity = iSimplicity;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_MHDR, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_putchunk_mend (mng_handle hHandle)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_MEND, mng_init_general, mng_free_general, mng_read_mend, mng_write_mend, mng_assign_general, 0, 0, sizeof(mng_mend)};
- #else
- {MNG_UINT_MEND, mng_init_mend, mng_free_mend, mng_read_mend, mng_write_mend, mng_assign_mend, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_MEND, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a header first! */
- if (pData->iFirstchunkadded == 0)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_MEND))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_mend (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_MEND, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- pData->bCreating = MNG_FALSE; /* should be last chunk !!! */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_MEND, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_LOOP
- mng_retcode MNG_DECL mng_putchunk_loop (mng_handle hHandle,
- mng_uint8 iLevel,
- mng_uint32 iRepeat,
- mng_uint8 iTermination,
- mng_uint32 iItermin,
- mng_uint32 iItermax,
- mng_uint32 iCount,
- mng_uint32p pSignals)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_LOOP, mng_init_general, mng_free_loop, mng_read_loop, mng_write_loop, mng_assign_loop, 0, 0, sizeof(mng_loop)};
- #else
- {MNG_UINT_LOOP, mng_init_loop, mng_free_loop, mng_read_loop, mng_write_loop, mng_assign_loop, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_LOOP, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_LOOP))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_loop (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_LOOP, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_loopp)pChunk)->iLevel = iLevel;
- ((mng_loopp)pChunk)->iRepeat = iRepeat;
- ((mng_loopp)pChunk)->iTermination = iTermination;
- ((mng_loopp)pChunk)->iItermin = iItermin;
- ((mng_loopp)pChunk)->iItermax = iItermax;
- ((mng_loopp)pChunk)->iCount = iCount;
- ((mng_loopp)pChunk)->pSignals = pSignals;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_LOOP, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_putchunk_endl (mng_handle hHandle,
- mng_uint8 iLevel)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_ENDL, mng_init_general, mng_free_general, mng_read_endl, mng_write_endl, mng_assign_general, 0, 0, sizeof(mng_endl)};
- #else
- {MNG_UINT_ENDL, mng_init_endl, mng_free_endl, mng_read_endl, mng_write_endl, mng_assign_endl, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_ENDL, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_ENDL))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_endl (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_ENDL, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_endlp)pChunk)->iLevel = iLevel;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_ENDL, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_DEFI
- mng_retcode MNG_DECL mng_putchunk_defi (mng_handle hHandle,
- mng_uint16 iObjectid,
- mng_uint8 iDonotshow,
- mng_uint8 iConcrete,
- mng_bool bHasloca,
- mng_int32 iXlocation,
- mng_int32 iYlocation,
- mng_bool bHasclip,
- mng_int32 iLeftcb,
- mng_int32 iRightcb,
- mng_int32 iTopcb,
- mng_int32 iBottomcb)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_DEFI, mng_init_general, mng_free_general, mng_read_defi, mng_write_defi, mng_assign_general, 0, 0, sizeof(mng_defi)};
- #else
- {MNG_UINT_DEFI, mng_init_defi, mng_free_defi, mng_read_defi, mng_write_defi, mng_assign_defi, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_DEFI, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_DEFI))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_defi (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_DEFI, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_defip)pChunk)->iObjectid = iObjectid;
- ((mng_defip)pChunk)->iDonotshow = iDonotshow;
- ((mng_defip)pChunk)->iConcrete = iConcrete;
- ((mng_defip)pChunk)->bHasloca = bHasloca;
- ((mng_defip)pChunk)->iXlocation = iXlocation;
- ((mng_defip)pChunk)->iYlocation = iYlocation;
- ((mng_defip)pChunk)->bHasclip = bHasclip;
- ((mng_defip)pChunk)->iLeftcb = iLeftcb;
- ((mng_defip)pChunk)->iRightcb = iRightcb;
- ((mng_defip)pChunk)->iTopcb = iTopcb;
- ((mng_defip)pChunk)->iBottomcb = iBottomcb;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_DEFI, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_BASI
- mng_retcode MNG_DECL mng_putchunk_basi (mng_handle hHandle,
- mng_uint32 iWidth,
- mng_uint32 iHeight,
- mng_uint8 iBitdepth,
- mng_uint8 iColortype,
- mng_uint8 iCompression,
- mng_uint8 iFilter,
- mng_uint8 iInterlace,
- mng_uint16 iRed,
- mng_uint16 iGreen,
- mng_uint16 iBlue,
- mng_uint16 iAlpha,
- mng_uint8 iViewable)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_BASI, mng_init_general, mng_free_general, mng_read_basi, mng_write_basi, mng_assign_general, 0, 0, sizeof(mng_basi)};
- #else
- {MNG_UINT_BASI, mng_init_basi, mng_free_basi, mng_read_basi, mng_write_basi, mng_assign_basi, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_BASI, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_BASI))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_basi (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_BASI, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_basip)pChunk)->iWidth = iWidth;
- ((mng_basip)pChunk)->iHeight = iHeight;
- ((mng_basip)pChunk)->iBitdepth = iBitdepth;
- ((mng_basip)pChunk)->iColortype = iColortype;
- ((mng_basip)pChunk)->iCompression = iCompression;
- ((mng_basip)pChunk)->iFilter = iFilter;
- ((mng_basip)pChunk)->iInterlace = iInterlace;
- ((mng_basip)pChunk)->iRed = iRed;
- ((mng_basip)pChunk)->iGreen = iGreen;
- ((mng_basip)pChunk)->iBlue = iBlue;
- ((mng_basip)pChunk)->iAlpha = iAlpha;
- ((mng_basip)pChunk)->iViewable = iViewable;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_BASI, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_CLON
- mng_retcode MNG_DECL mng_putchunk_clon (mng_handle hHandle,
- mng_uint16 iSourceid,
- mng_uint16 iCloneid,
- mng_uint8 iClonetype,
- mng_uint8 iDonotshow,
- mng_uint8 iConcrete,
- mng_bool bHasloca,
- mng_uint8 iLocationtype,
- mng_int32 iLocationx,
- mng_int32 iLocationy)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_CLON, mng_init_general, mng_free_general, mng_read_clon, mng_write_clon, mng_assign_general, 0, 0, sizeof(mng_clon)};
- #else
- {MNG_UINT_CLON, mng_init_clon, mng_free_clon, mng_read_clon, mng_write_clon, mng_assign_clon, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_CLON, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_CLON))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_clon (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_CLON, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_clonp)pChunk)->iSourceid = iSourceid;
- ((mng_clonp)pChunk)->iCloneid = iCloneid;
- ((mng_clonp)pChunk)->iClonetype = iClonetype;
- ((mng_clonp)pChunk)->iDonotshow = iDonotshow;
- ((mng_clonp)pChunk)->iConcrete = iConcrete;
- ((mng_clonp)pChunk)->bHasloca = bHasloca;
- ((mng_clonp)pChunk)->iLocationtype = iLocationtype;
- ((mng_clonp)pChunk)->iLocationx = iLocationx;
- ((mng_clonp)pChunk)->iLocationy = iLocationy;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_CLON, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_PAST
- mng_retcode MNG_DECL mng_putchunk_past (mng_handle hHandle,
- mng_uint16 iDestid,
- mng_uint8 iTargettype,
- mng_int32 iTargetx,
- mng_int32 iTargety,
- mng_uint32 iCount)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_PAST, mng_init_general, mng_free_past, mng_read_past, mng_write_past, mng_assign_past, 0, 0, sizeof(mng_past)};
- #else
- {MNG_UINT_PAST, mng_init_past, mng_free_past, mng_read_past, mng_write_past, mng_assign_past, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PAST, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_PAST))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_past (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_PAST, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_pastp)pChunk)->iDestid = iDestid;
- ((mng_pastp)pChunk)->iTargettype = iTargettype;
- ((mng_pastp)pChunk)->iTargetx = iTargetx;
- ((mng_pastp)pChunk)->iTargety = iTargety;
- ((mng_pastp)pChunk)->iCount = iCount;
- if (iCount)
- MNG_ALLOC (pData, ((mng_pastp)pChunk)->pSources, iCount * sizeof (mng_past_source));
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PAST, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_PAST
- mng_retcode MNG_DECL mng_putchunk_past_src (mng_handle hHandle,
- mng_uint32 iEntry,
- mng_uint16 iSourceid,
- mng_uint8 iComposition,
- mng_uint8 iOrientation,
- mng_uint8 iOffsettype,
- mng_int32 iOffsetx,
- mng_int32 iOffsety,
- mng_uint8 iBoundarytype,
- mng_int32 iBoundaryl,
- mng_int32 iBoundaryr,
- mng_int32 iBoundaryt,
- mng_int32 iBoundaryb)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_past_sourcep pEntry;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PAST_SRC, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- pChunk = pData->pLastchunk; /* last one must have been PAST ! */
- if (((mng_chunk_headerp)pChunk)->iChunkname != MNG_UINT_PAST)
- MNG_ERROR (pData, MNG_NOCORRCHUNK)
- /* index out of bounds ? */
- if (iEntry >= ((mng_pastp)pChunk)->iCount)
- MNG_ERROR (pData, MNG_INVALIDENTRYIX)
- /* address proper entry */
- pEntry = ((mng_pastp)pChunk)->pSources + iEntry;
- pEntry->iSourceid = iSourceid; /* fill entry */
- pEntry->iComposition = iComposition;
- pEntry->iOrientation = iOrientation;
- pEntry->iOffsettype = iOffsettype;
- pEntry->iOffsetx = iOffsetx;
- pEntry->iOffsety = iOffsety;
- pEntry->iBoundarytype = iBoundarytype;
- pEntry->iBoundaryl = iBoundaryl;
- pEntry->iBoundaryr = iBoundaryr;
- pEntry->iBoundaryt = iBoundaryt;
- pEntry->iBoundaryb = iBoundaryb;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PAST_SRC, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_DISC
- mng_retcode MNG_DECL mng_putchunk_disc (mng_handle hHandle,
- mng_uint32 iCount,
- mng_uint16p pObjectids)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_DISC, mng_init_general, mng_free_disc, mng_read_disc, mng_write_disc, mng_assign_disc, 0, 0, sizeof(mng_disc)};
- #else
- {MNG_UINT_DISC, mng_init_disc, mng_free_disc, mng_read_disc, mng_write_disc, mng_assign_disc, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_DISC, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_DISC))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_disc (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_DISC, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_discp)pChunk)->iCount = iCount;
- if (iCount)
- {
- mng_uint32 iSize = iCount * sizeof (mng_uint32);
- MNG_ALLOC (pData, ((mng_discp)pChunk)->pObjectids, iSize);
- MNG_COPY (((mng_discp)pChunk)->pObjectids, pObjectids, iSize);
- }
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_DISC, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_BACK
- mng_retcode MNG_DECL mng_putchunk_back (mng_handle hHandle,
- mng_uint16 iRed,
- mng_uint16 iGreen,
- mng_uint16 iBlue,
- mng_uint8 iMandatory,
- mng_uint16 iImageid,
- mng_uint8 iTile)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_BACK, mng_init_general, mng_free_general, mng_read_back, mng_write_back, mng_assign_general, 0, 0, sizeof(mng_back)};
- #else
- {MNG_UINT_BACK, mng_init_back, mng_free_back, mng_read_back, mng_write_back, mng_assign_back, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_BACK, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_BACK))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_back (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_BACK, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_backp)pChunk)->iRed = iRed;
- ((mng_backp)pChunk)->iGreen = iGreen;
- ((mng_backp)pChunk)->iBlue = iBlue;
- ((mng_backp)pChunk)->iMandatory = iMandatory;
- ((mng_backp)pChunk)->iImageid = iImageid;
- ((mng_backp)pChunk)->iTile = iTile;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_BACK, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_FRAM
- mng_retcode MNG_DECL mng_putchunk_fram (mng_handle hHandle,
- mng_bool bEmpty,
- mng_uint8 iMode,
- mng_uint32 iNamesize,
- mng_pchar zName,
- mng_uint8 iChangedelay,
- mng_uint8 iChangetimeout,
- mng_uint8 iChangeclipping,
- mng_uint8 iChangesyncid,
- mng_uint32 iDelay,
- mng_uint32 iTimeout,
- mng_uint8 iBoundarytype,
- mng_int32 iBoundaryl,
- mng_int32 iBoundaryr,
- mng_int32 iBoundaryt,
- mng_int32 iBoundaryb,
- mng_uint32 iCount,
- mng_uint32p pSyncids)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_FRAM, mng_init_general, mng_free_fram, mng_read_fram, mng_write_fram, mng_assign_fram, 0, 0, sizeof(mng_fram)};
- #else
- {MNG_UINT_FRAM, mng_init_fram, mng_free_fram, mng_read_fram, mng_write_fram, mng_assign_fram, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_FRAM, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_FRAM))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_fram (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_FRAM, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_framp)pChunk)->bEmpty = bEmpty;
- ((mng_framp)pChunk)->iMode = iMode;
- ((mng_framp)pChunk)->iNamesize = iNamesize;
- ((mng_framp)pChunk)->iChangedelay = iChangedelay;
- ((mng_framp)pChunk)->iChangetimeout = iChangetimeout;
- ((mng_framp)pChunk)->iChangeclipping = iChangeclipping;
- ((mng_framp)pChunk)->iChangesyncid = iChangesyncid;
- ((mng_framp)pChunk)->iDelay = iDelay;
- ((mng_framp)pChunk)->iTimeout = iTimeout;
- ((mng_framp)pChunk)->iBoundarytype = iBoundarytype;
- ((mng_framp)pChunk)->iBoundaryl = iBoundaryl;
- ((mng_framp)pChunk)->iBoundaryr = iBoundaryr;
- ((mng_framp)pChunk)->iBoundaryt = iBoundaryt;
- ((mng_framp)pChunk)->iBoundaryb = iBoundaryb;
- ((mng_framp)pChunk)->iCount = iCount;
- if (iNamesize)
- {
- MNG_ALLOC (pData, ((mng_framp)pChunk)->zName, iNamesize + 1);
- MNG_COPY (((mng_framp)pChunk)->zName, zName, iNamesize);
- }
- if (iCount)
- {
- mng_uint32 iSize = iCount * sizeof (mng_uint32);
- MNG_ALLOC (pData, ((mng_framp)pChunk)->pSyncids, iSize);
- MNG_COPY (((mng_framp)pChunk)->pSyncids, pSyncids, iSize);
- }
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_FRAM, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_MOVE
- mng_retcode MNG_DECL mng_putchunk_move (mng_handle hHandle,
- mng_uint16 iFirstid,
- mng_uint16 iLastid,
- mng_uint8 iMovetype,
- mng_int32 iMovex,
- mng_int32 iMovey)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_MOVE, mng_init_general, mng_free_general, mng_read_move, mng_write_move, mng_assign_general, 0, 0, sizeof(mng_move)};
- #else
- {MNG_UINT_MOVE, mng_init_move, mng_free_move, mng_read_move, mng_write_move, mng_assign_move, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_MOVE, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_MOVE))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_move (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_MOVE, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_movep)pChunk)->iFirstid = iFirstid;
- ((mng_movep)pChunk)->iLastid = iLastid;
- ((mng_movep)pChunk)->iMovetype = iMovetype;
- ((mng_movep)pChunk)->iMovex = iMovex;
- ((mng_movep)pChunk)->iMovey = iMovey;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_MOVE, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_CLIP
- mng_retcode MNG_DECL mng_putchunk_clip (mng_handle hHandle,
- mng_uint16 iFirstid,
- mng_uint16 iLastid,
- mng_uint8 iCliptype,
- mng_int32 iClipl,
- mng_int32 iClipr,
- mng_int32 iClipt,
- mng_int32 iClipb)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_CLIP, mng_init_general, mng_free_general, mng_read_clip, mng_write_clip, mng_assign_general, 0, 0, sizeof(mng_clip)};
- #else
- {MNG_UINT_CLIP, mng_init_clip, mng_free_clip, mng_read_clip, mng_write_clip, mng_assign_clip, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_CLIP, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_CLIP))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_clip (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_CLIP, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_clipp)pChunk)->iFirstid = iFirstid;
- ((mng_clipp)pChunk)->iLastid = iLastid;
- ((mng_clipp)pChunk)->iCliptype = iCliptype;
- ((mng_clipp)pChunk)->iClipl = iClipl;
- ((mng_clipp)pChunk)->iClipr = iClipr;
- ((mng_clipp)pChunk)->iClipt = iClipt;
- ((mng_clipp)pChunk)->iClipb = iClipb;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_CLIP, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_SHOW
- mng_retcode MNG_DECL mng_putchunk_show (mng_handle hHandle,
- mng_bool bEmpty,
- mng_uint16 iFirstid,
- mng_uint16 iLastid,
- mng_uint8 iMode)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_SHOW, mng_init_general, mng_free_general, mng_read_show, mng_write_show, mng_assign_general, 0, 0, sizeof(mng_show)};
- #else
- {MNG_UINT_SHOW, mng_init_show, mng_free_show, mng_read_show, mng_write_show, mng_assign_show, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SHOW, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_SHOW))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_show (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_SHOW, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_showp)pChunk)->bEmpty = bEmpty;
- ((mng_showp)pChunk)->iFirstid = iFirstid;
- ((mng_showp)pChunk)->iLastid = iLastid;
- ((mng_showp)pChunk)->iMode = iMode;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SHOW, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_TERM
- mng_retcode MNG_DECL mng_putchunk_term (mng_handle hHandle,
- mng_uint8 iTermaction,
- mng_uint8 iIteraction,
- mng_uint32 iDelay,
- mng_uint32 iItermax)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_TERM, mng_init_general, mng_free_general, mng_read_term, mng_write_term, mng_assign_general, 0, 0, sizeof(mng_term)};
- #else
- {MNG_UINT_TERM, mng_init_term, mng_free_term, mng_read_term, mng_write_term, mng_assign_term, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_TERM, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_term (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_TERM, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_termp)pChunk)->iTermaction = iTermaction;
- ((mng_termp)pChunk)->iIteraction = iIteraction;
- ((mng_termp)pChunk)->iDelay = iDelay;
- ((mng_termp)pChunk)->iItermax = iItermax;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_TERM, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_SAVE
- mng_retcode MNG_DECL mng_putchunk_save (mng_handle hHandle,
- mng_bool bEmpty,
- mng_uint8 iOffsettype,
- mng_uint32 iCount)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_SAVE, mng_init_general, mng_free_save, mng_read_save, mng_write_save, mng_assign_save, 0, 0, sizeof(mng_save)};
- #else
- {MNG_UINT_SAVE, mng_init_save, mng_free_save, mng_read_save, mng_write_save, mng_assign_save, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SAVE, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_SAVE))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_save (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_SAVE, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_savep)pChunk)->bEmpty = bEmpty;
- ((mng_savep)pChunk)->iOffsettype = iOffsettype;
- ((mng_savep)pChunk)->iCount = iCount;
- if (iCount)
- MNG_ALLOC (pData, ((mng_savep)pChunk)->pEntries, iCount * sizeof (mng_save_entry));
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SAVE, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_putchunk_save_entry (mng_handle hHandle,
- mng_uint32 iEntry,
- mng_uint8 iEntrytype,
- mng_uint32arr2 iOffset,
- mng_uint32arr2 iStarttime,
- mng_uint32 iLayernr,
- mng_uint32 iFramenr,
- mng_uint32 iNamesize,
- mng_pchar zName)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_save_entryp pEntry;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SAVE_ENTRY, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- pChunk = pData->pLastchunk; /* last one must have been SAVE ! */
- if (((mng_chunk_headerp)pChunk)->iChunkname != MNG_UINT_SAVE)
- MNG_ERROR (pData, MNG_NOCORRCHUNK)
- /* index out of bounds ? */
- if (iEntry >= ((mng_savep)pChunk)->iCount)
- MNG_ERROR (pData, MNG_INVALIDENTRYIX)
- /* address proper entry */
- pEntry = ((mng_savep)pChunk)->pEntries + iEntry;
- pEntry->iEntrytype = iEntrytype; /* fill entry */
- pEntry->iOffset[0] = iOffset[0];
- pEntry->iOffset[1] = iOffset[1];
- pEntry->iStarttime[0] = iStarttime[0];
- pEntry->iStarttime[1] = iStarttime[1];
- pEntry->iLayernr = iLayernr;
- pEntry->iFramenr = iFramenr;
- pEntry->iNamesize = iNamesize;
- if (iNamesize)
- {
- MNG_ALLOC (pData, pEntry->zName, iNamesize + 1);
- MNG_COPY (pEntry->zName, zName, iNamesize);
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SAVE_ENTRY, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_SEEK
- mng_retcode MNG_DECL mng_putchunk_seek (mng_handle hHandle,
- mng_uint32 iNamesize,
- mng_pchar zName)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_SEEK, mng_init_general, mng_free_seek, mng_read_seek, mng_write_seek, mng_assign_seek, 0, 0, sizeof(mng_seek)};
- #else
- {MNG_UINT_SEEK, mng_init_seek, mng_free_seek, mng_read_seek, mng_write_seek, mng_assign_seek, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SEEK, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_SEEK))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_seek (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_SEEK, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_seekp)pChunk)->iNamesize = iNamesize;
- if (iNamesize)
- {
- MNG_ALLOC (pData, ((mng_seekp)pChunk)->zName, iNamesize + 1);
- MNG_COPY (((mng_seekp)pChunk)->zName, zName, iNamesize);
- }
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_SEEK, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_eXPI
- mng_retcode MNG_DECL mng_putchunk_expi (mng_handle hHandle,
- mng_uint16 iSnapshotid,
- mng_uint32 iNamesize,
- mng_pchar zName)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_eXPI, mng_init_general, mng_free_expi, mng_read_expi, mng_write_expi, mng_assign_general, 0, 0, sizeof(mng_expi)};
- #else
- {MNG_UINT_eXPI, mng_init_expi, mng_free_expi, mng_read_expi, mng_write_expi, mng_assign_expi, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_EXPI, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_eXPI))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_expi (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_eXPI, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_expip)pChunk)->iSnapshotid = iSnapshotid;
- ((mng_expip)pChunk)->iNamesize = iNamesize;
- if (iNamesize)
- {
- MNG_ALLOC (pData, ((mng_expip)pChunk)->zName, iNamesize + 1);
- MNG_COPY (((mng_expip)pChunk)->zName, zName, iNamesize);
- }
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_EXPI, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_fPRI
- mng_retcode MNG_DECL mng_putchunk_fpri (mng_handle hHandle,
- mng_uint8 iDeltatype,
- mng_uint8 iPriority)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_fPRI, mng_init_general, mng_free_general, mng_read_fpri, mng_write_fpri, mng_assign_general, 0, 0, sizeof(mng_fpri)};
- #else
- {MNG_UINT_fPRI, mng_init_fpri, mng_free_fpri, mng_read_fpri, mng_write_fpri, mng_assign_fpri, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_FPRI, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_fPRI))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_fpri (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_fPRI, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_fprip)pChunk)->iDeltatype = iDeltatype;
- ((mng_fprip)pChunk)->iPriority = iPriority;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_FPRI, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_nEED
- mng_retcode MNG_DECL mng_putchunk_need (mng_handle hHandle,
- mng_uint32 iKeywordssize,
- mng_pchar zKeywords)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_nEED, mng_init_general, mng_free_need, mng_read_need, mng_write_need, mng_assign_need, 0, 0, sizeof(mng_need)};
- #else
- {MNG_UINT_nEED, mng_init_need, mng_free_need, mng_read_need, mng_write_need, mng_assign_need, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_NEED, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_nEED))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_need (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_nEED, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_needp)pChunk)->iKeywordssize = iKeywordssize;
- if (iKeywordssize)
- {
- MNG_ALLOC (pData, ((mng_needp)pChunk)->zKeywords, iKeywordssize + 1);
- MNG_COPY (((mng_needp)pChunk)->zKeywords, zKeywords, iKeywordssize);
- }
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_NEED, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_pHYg
- mng_retcode MNG_DECL mng_putchunk_phyg (mng_handle hHandle,
- mng_bool bEmpty,
- mng_uint32 iSizex,
- mng_uint32 iSizey,
- mng_uint8 iUnit)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_pHYg, mng_init_general, mng_free_general, mng_read_phyg, mng_write_phyg, mng_assign_general, 0, 0, sizeof(mng_phyg)};
- #else
- {MNG_UINT_pHYg, mng_init_phyg, mng_free_phyg, mng_read_phyg, mng_write_phyg, mng_assign_phyg, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PHYG, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_pHYg))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_phyg (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_pHYg, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_phygp)pChunk)->bEmpty = bEmpty;
- ((mng_phygp)pChunk)->iSizex = iSizex;
- ((mng_phygp)pChunk)->iSizey = iSizey;
- ((mng_phygp)pChunk)->iUnit = iUnit;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PHYG, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifdef MNG_INCLUDE_JNG
- mng_retcode MNG_DECL mng_putchunk_jhdr (mng_handle hHandle,
- mng_uint32 iWidth,
- mng_uint32 iHeight,
- mng_uint8 iColortype,
- mng_uint8 iImagesampledepth,
- mng_uint8 iImagecompression,
- mng_uint8 iImageinterlace,
- mng_uint8 iAlphasampledepth,
- mng_uint8 iAlphacompression,
- mng_uint8 iAlphafilter,
- mng_uint8 iAlphainterlace)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_JHDR, mng_init_general, mng_free_general, mng_read_jhdr, mng_write_jhdr, mng_assign_general, 0, 0, sizeof(mng_jhdr)};
- #else
- {MNG_UINT_JHDR, mng_init_jhdr, mng_free_jhdr, mng_read_jhdr, mng_write_jhdr, mng_assign_jhdr, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_JHDR, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_JHDR))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_jhdr (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_JHDR, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_jhdrp)pChunk)->iWidth = iWidth;
- ((mng_jhdrp)pChunk)->iHeight = iHeight;
- ((mng_jhdrp)pChunk)->iColortype = iColortype;
- ((mng_jhdrp)pChunk)->iImagesampledepth = iImagesampledepth;
- ((mng_jhdrp)pChunk)->iImagecompression = iImagecompression;
- ((mng_jhdrp)pChunk)->iImageinterlace = iImageinterlace;
- ((mng_jhdrp)pChunk)->iAlphasampledepth = iAlphasampledepth;
- ((mng_jhdrp)pChunk)->iAlphacompression = iAlphacompression;
- ((mng_jhdrp)pChunk)->iAlphafilter = iAlphafilter;
- ((mng_jhdrp)pChunk)->iAlphainterlace = iAlphainterlace;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_JHDR, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif /* MNG_INCLUDE_JNG */
- /* ************************************************************************** */
- #ifdef MNG_INCLUDE_JNG
- mng_retcode MNG_DECL mng_putchunk_jdat (mng_handle hHandle,
- mng_uint32 iRawlen,
- mng_ptr pRawdata)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_JDAT, mng_init_general, mng_free_jdat, mng_read_jdat, mng_write_jdat, mng_assign_jdat, 0, 0, sizeof(mng_jdat)};
- #else
- {MNG_UINT_JDAT, mng_init_jdat, mng_free_jdat, mng_read_jdat, mng_write_jdat, mng_assign_jdat, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_JDAT, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR or JHDR first! */
- if ((pData->iFirstchunkadded != MNG_UINT_MHDR) &&
- (pData->iFirstchunkadded != MNG_UINT_JHDR) )
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_JDAT))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_jdat (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_JDAT, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_jdatp)pChunk)->iDatasize = iRawlen;
- if (iRawlen)
- {
- MNG_ALLOC (pData, ((mng_jdatp)pChunk)->pData, iRawlen);
- MNG_COPY (((mng_jdatp)pChunk)->pData, pRawdata, iRawlen);
- }
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_JDAT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif /* MNG_INCLUDE_JNG */
- /* ************************************************************************** */
- #ifdef MNG_INCLUDE_JNG
- mng_retcode MNG_DECL mng_putchunk_jdaa (mng_handle hHandle,
- mng_uint32 iRawlen,
- mng_ptr pRawdata)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_JDAA, mng_init_general, mng_free_jdaa, mng_read_jdaa, mng_write_jdaa, mng_assign_jdaa, 0, 0, sizeof(mng_jdaa)};
- #else
- {MNG_UINT_JDAA, mng_init_jdaa, mng_free_jdaa, mng_read_jdaa, mng_write_jdaa, mng_assign_jdaa, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_JDAA, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR or JHDR first! */
- if ((pData->iFirstchunkadded != MNG_UINT_MHDR) &&
- (pData->iFirstchunkadded != MNG_UINT_JHDR) )
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_JDAA))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_jdaa (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_JDAA, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_jdaap)pChunk)->iDatasize = iRawlen;
- if (iRawlen)
- {
- MNG_ALLOC (pData, ((mng_jdaap)pChunk)->pData, iRawlen);
- MNG_COPY (((mng_jdaap)pChunk)->pData, pRawdata, iRawlen);
- }
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_JDAA, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif /* MNG_INCLUDE_JNG */
- /* ************************************************************************** */
- #ifdef MNG_INCLUDE_JNG
- mng_retcode MNG_DECL mng_putchunk_jsep (mng_handle hHandle)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_JSEP, mng_init_general, mng_free_general, mng_read_jsep, mng_write_jsep, mng_assign_general, 0, 0, sizeof(mng_jsep)};
- #else
- {MNG_UINT_JSEP, mng_init_jsep, mng_free_jsep, mng_read_jsep, mng_write_jsep, mng_assign_jsep, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_JSEP, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR or JHDR first! */
- if ((pData->iFirstchunkadded != MNG_UINT_MHDR) &&
- (pData->iFirstchunkadded != MNG_UINT_JHDR) )
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_JSEP))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_jsep (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_JSEP, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_JSEP, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif /* MNG_INCLUDE_JNG */
- /* ************************************************************************** */
- #ifndef MNG_NO_DELTA_PNG
- mng_retcode MNG_DECL mng_putchunk_dhdr (mng_handle hHandle,
- mng_uint16 iObjectid,
- mng_uint8 iImagetype,
- mng_uint8 iDeltatype,
- mng_uint32 iBlockwidth,
- mng_uint32 iBlockheight,
- mng_uint32 iBlockx,
- mng_uint32 iBlocky)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_DHDR, mng_init_general, mng_free_general, mng_read_dhdr, mng_write_dhdr, mng_assign_general, 0, 0, sizeof(mng_dhdr)};
- #else
- {MNG_UINT_DHDR, mng_init_dhdr, mng_free_dhdr, mng_read_dhdr, mng_write_dhdr, mng_assign_dhdr, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_DHDR, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_DHDR))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_dhdr (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_DHDR, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_dhdrp)pChunk)->iObjectid = iObjectid;
- ((mng_dhdrp)pChunk)->iImagetype = iImagetype;
- ((mng_dhdrp)pChunk)->iDeltatype = iDeltatype;
- ((mng_dhdrp)pChunk)->iBlockwidth = iBlockwidth;
- ((mng_dhdrp)pChunk)->iBlockheight = iBlockheight;
- ((mng_dhdrp)pChunk)->iBlockx = iBlockx;
- ((mng_dhdrp)pChunk)->iBlocky = iBlocky;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_DHDR, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_NO_DELTA_PNG
- mng_retcode MNG_DECL mng_putchunk_prom (mng_handle hHandle,
- mng_uint8 iColortype,
- mng_uint8 iSampledepth,
- mng_uint8 iFilltype)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_PROM, mng_init_general, mng_free_general, mng_read_prom, mng_write_prom, mng_assign_general, 0, 0, sizeof(mng_prom)};
- #else
- {MNG_UINT_PROM, mng_init_prom, mng_free_prom, mng_read_prom, mng_write_prom, mng_assign_prom, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PROM, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_PROM))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_prom (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_PROM, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_promp)pChunk)->iColortype = iColortype;
- ((mng_promp)pChunk)->iSampledepth = iSampledepth;
- ((mng_promp)pChunk)->iFilltype = iFilltype;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PROM, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_NO_DELTA_PNG
- mng_retcode MNG_DECL mng_putchunk_ipng (mng_handle hHandle)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_IPNG, mng_init_general, mng_free_general, mng_read_ipng, mng_write_ipng, mng_assign_general, 0, 0, sizeof(mng_ipng)};
- #else
- {MNG_UINT_IPNG, mng_init_ipng, mng_free_ipng, mng_read_ipng, mng_write_ipng, mng_assign_ipng, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_IPNG, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_IPNG))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_ipng (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_IPNG, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_IPNG, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_NO_DELTA_PNG
- mng_retcode MNG_DECL mng_putchunk_pplt (mng_handle hHandle,
- mng_uint8 iDeltatype,
- mng_uint32 iCount)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_PPLT, mng_init_general, mng_free_general, mng_read_pplt, mng_write_pplt, mng_assign_general, 0, 0, sizeof(mng_pplt)};
- #else
- {MNG_UINT_PPLT, mng_init_pplt, mng_free_pplt, mng_read_pplt, mng_write_pplt, mng_assign_pplt, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PPLT, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_PPLT))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_pplt (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_PPLT, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_ppltp)pChunk)->iDeltatype = iDeltatype;
- ((mng_ppltp)pChunk)->iCount = iCount;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PPLT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_NO_DELTA_PNG
- mng_retcode MNG_DECL mng_putchunk_pplt_entry (mng_handle hHandle,
- mng_uint32 iEntry,
- mng_uint16 iRed,
- mng_uint16 iGreen,
- mng_uint16 iBlue,
- mng_uint16 iAlpha)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_pplt_entryp pEntry;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PPLT_ENTRY, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- pChunk = pData->pLastchunk; /* last one must have been PPLT ! */
- if (((mng_chunk_headerp)pChunk)->iChunkname != MNG_UINT_PPLT)
- MNG_ERROR (pData, MNG_NOCORRCHUNK)
- /* index out of bounds ? */
- if (iEntry >= ((mng_ppltp)pChunk)->iCount)
- MNG_ERROR (pData, MNG_INVALIDENTRYIX)
- /* address proper entry */
- pEntry = (mng_pplt_entryp)(((mng_ppltp)pChunk)->aEntries) + iEntry;
- pEntry->iRed = (mng_uint8)iRed; /* fill the entry */
- pEntry->iGreen = (mng_uint8)iGreen;
- pEntry->iBlue = (mng_uint8)iBlue;
- pEntry->iAlpha = (mng_uint8)iAlpha;
- pEntry->bUsed = MNG_TRUE;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_PPLT_ENTRY, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_NO_DELTA_PNG
- #ifdef MNG_INCLUDE_JNG
- mng_retcode MNG_DECL mng_putchunk_ijng (mng_handle hHandle)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_IJNG, mng_init_general, mng_free_general, mng_read_ijng, mng_write_ijng, mng_assign_general, 0, 0, sizeof(mng_ijng)};
- #else
- {MNG_UINT_IJNG, mng_init_ijng, mng_free_ijng, mng_read_ijng, mng_write_ijng, mng_assign_ijng, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_IJNG, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_IJNG))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_ijng (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_IJNG, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_IJNG, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- #endif
- /* ************************************************************************** */
- #ifndef MNG_NO_DELTA_PNG
- mng_retcode MNG_DECL mng_putchunk_drop (mng_handle hHandle,
- mng_uint32 iCount,
- mng_chunkidp pChunknames)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_DROP, mng_init_general, mng_free_drop, mng_read_drop, mng_write_drop, mng_assign_drop, 0, 0, sizeof(mng_drop)};
- #else
- {MNG_UINT_DROP, mng_init_drop, mng_free_drop, mng_read_drop, mng_write_drop, mng_assign_drop, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_DROP, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_DROP))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_drop (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_DROP, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_dropp)pChunk)->iCount = iCount;
- if (iCount)
- {
- mng_uint32 iSize = iCount * sizeof (mng_chunkid);
- MNG_ALLOC (pData, ((mng_dropp)pChunk)->pChunknames, iSize);
- MNG_COPY (((mng_dropp)pChunk)->pChunknames, pChunknames, iSize);
- }
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_DROP, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_NO_DELTA_PNG
- #ifndef MNG_SKIPCHUNK_DBYK
- mng_retcode MNG_DECL mng_putchunk_dbyk (mng_handle hHandle,
- mng_chunkid iChunkname,
- mng_uint8 iPolarity,
- mng_uint32 iKeywordssize,
- mng_pchar zKeywords)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_DBYK, mng_init_general, mng_free_dbyk, mng_read_dbyk, mng_write_dbyk, mng_assign_dbyk, 0, 0, sizeof(mng_dbyk)};
- #else
- {MNG_UINT_DBYK, mng_init_dbyk, mng_free_dbyk, mng_read_dbyk, mng_write_dbyk, mng_assign_dbyk, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_DBYK, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_DBYK))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_dbyk (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_DBYK, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_dbykp)pChunk)->iChunkname = iChunkname;
- ((mng_dbykp)pChunk)->iPolarity = iPolarity;
- ((mng_dbykp)pChunk)->iKeywordssize = iKeywordssize;
- if (iKeywordssize)
- {
- MNG_ALLOC (pData, ((mng_dbykp)pChunk)->zKeywords, iKeywordssize + 1);
- MNG_COPY (((mng_dbykp)pChunk)->zKeywords, zKeywords, iKeywordssize);
- }
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_DBYK, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- #endif
- /* ************************************************************************** */
- #ifndef MNG_NO_DELTA_PNG
- #ifndef MNG_SKIPCHUNK_ORDR
- mng_retcode MNG_DECL mng_putchunk_ordr (mng_handle hHandle,
- mng_uint32 iCount)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_ORDR, mng_init_general, mng_free_ordr, mng_read_ordr, mng_write_ordr, mng_assign_ordr, 0, 0, sizeof(mng_ordr)};
- #else
- {MNG_UINT_ORDR, mng_init_ordr, mng_free_ordr, mng_read_ordr, mng_write_ordr, mng_assign_ordr, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_ORDR, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_ORDR))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_ordr (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_ORDR, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_ordrp)pChunk)->iCount = iCount;
- if (iCount)
- MNG_ALLOC (pData, ((mng_ordrp)pChunk)->pEntries, iCount * sizeof (mng_ordr_entry));
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_ORDR, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- #endif
- /* ************************************************************************** */
- #ifndef MNG_NO_DELTA_PNG
- #ifndef MNG_SKIPCHUNK_ORDR
- mng_retcode MNG_DECL mng_putchunk_ordr_entry (mng_handle hHandle,
- mng_uint32 iEntry,
- mng_chunkid iChunkname,
- mng_uint8 iOrdertype)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_ordr_entryp pEntry;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_ORDR_ENTRY, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- pChunk = pData->pLastchunk; /* last one must have been ORDR ! */
- if (((mng_chunk_headerp)pChunk)->iChunkname != MNG_UINT_ORDR)
- MNG_ERROR (pData, MNG_NOCORRCHUNK)
- /* index out of bounds ? */
- if (iEntry >= ((mng_ordrp)pChunk)->iCount)
- MNG_ERROR (pData, MNG_INVALIDENTRYIX)
- /* address proper entry */
- pEntry = ((mng_ordrp)pChunk)->pEntries + iEntry;
- pEntry->iChunkname = iChunkname; /* fill the entry */
- pEntry->iOrdertype = iOrdertype;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_ORDR_ENTRY, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_MAGN
- mng_retcode MNG_DECL mng_putchunk_magn (mng_handle hHandle,
- mng_uint16 iFirstid,
- mng_uint16 iLastid,
- mng_uint16 iMethodX,
- mng_uint16 iMX,
- mng_uint16 iMY,
- mng_uint16 iML,
- mng_uint16 iMR,
- mng_uint16 iMT,
- mng_uint16 iMB,
- mng_uint16 iMethodY)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_MAGN, mng_init_general, mng_free_general, mng_read_magn, mng_write_magn, mng_assign_general, 0, 0, sizeof(mng_magn)};
- #else
- {MNG_UINT_MAGN, mng_init_magn, mng_free_magn, mng_read_magn, mng_write_magn, mng_assign_magn, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_MAGN, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_MAGN))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_magn (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_MAGN, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_magnp)pChunk)->iFirstid = iFirstid;
- ((mng_magnp)pChunk)->iLastid = iLastid;
- ((mng_magnp)pChunk)->iMethodX = (mng_uint8)iMethodX;
- ((mng_magnp)pChunk)->iMX = iMX;
- ((mng_magnp)pChunk)->iMY = iMY;
- ((mng_magnp)pChunk)->iML = iML;
- ((mng_magnp)pChunk)->iMR = iMR;
- ((mng_magnp)pChunk)->iMT = iMT;
- ((mng_magnp)pChunk)->iMB = iMB;
- ((mng_magnp)pChunk)->iMethodY = (mng_uint8)iMethodY;
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_MAGN, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifdef MNG_INCLUDE_MPNG_PROPOSAL
- MNG_EXT mng_retcode MNG_DECL mng_putchunk_mpng (mng_handle hHandle,
- mng_uint32 iFramewidth,
- mng_uint32 iFrameheight,
- mng_uint16 iNumplays,
- mng_uint16 iTickspersec,
- mng_uint8 iCompressionmethod,
- mng_uint32 iCount)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_mpNG, mng_init_general, mng_free_mpng, mng_read_mpng, mng_write_mpng, mng_assign_mpng, 0, 0, sizeof(mng_mpng)};
- #else
- {MNG_UINT_mpNG, mng_init_mpng, mng_free_mpng, mng_read_mpng, mng_write_mpng, mng_assign_mpng, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_MPNG, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a IHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_IHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_mpng (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_mpNG, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_mpngp)pChunk)->iFramewidth = iFramewidth;
- ((mng_mpngp)pChunk)->iFrameheight = iFrameheight;
- ((mng_mpngp)pChunk)->iNumplays = iNumplays;
- ((mng_mpngp)pChunk)->iTickspersec = iTickspersec;
- ((mng_mpngp)pChunk)->iCompressionmethod = iCompressionmethod;
- ((mng_mpngp)pChunk)->iFramessize = iCount * sizeof (mng_mpng_frame);
- if (iCount)
- MNG_ALLOC (pData, ((mng_mpngp)pChunk)->pFrames, ((mng_mpngp)pChunk)->iFramessize);
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_MPNG, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifdef MNG_INCLUDE_MPNG_PROPOSAL
- MNG_EXT mng_retcode MNG_DECL mng_putchunk_mpng_frame (mng_handle hHandle,
- mng_uint32 iEntry,
- mng_uint32 iX,
- mng_uint32 iY,
- mng_uint32 iWidth,
- mng_uint32 iHeight,
- mng_int32 iXoffset,
- mng_int32 iYoffset,
- mng_uint16 iTicks)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_mpng_framep pFrame;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_MPNG_FRAME, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a IHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_IHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- pChunk = pData->pLastchunk; /* last one must have been mpNG ! */
- if (((mng_chunk_headerp)pChunk)->iChunkname != MNG_UINT_mpNG)
- MNG_ERROR (pData, MNG_NOCORRCHUNK)
- /* index out of bounds ? */
- if (iEntry >= (((mng_mpngp)pChunk)->iFramessize / sizeof (mng_mpng_frame)))
- MNG_ERROR (pData, MNG_INVALIDENTRYIX)
- /* address proper entry */
- pFrame = ((mng_mpngp)pChunk)->pFrames + iEntry;
- /* fill entry */
- pFrame->iX = iX;
- pFrame->iY = iY;
- pFrame->iWidth = iWidth;
- pFrame->iHeight = iHeight;
- pFrame->iXoffset = iXoffset;
- pFrame->iYoffset = iYoffset;
- pFrame->iTicks = iTicks;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_MPNG_FRAME, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_evNT
- mng_retcode MNG_DECL mng_putchunk_evnt (mng_handle hHandle,
- mng_uint32 iCount)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_evNT, mng_init_general, mng_free_evnt, mng_read_evnt, mng_write_evnt, mng_assign_evnt, 0, 0, sizeof(mng_evnt)};
- #else
- {MNG_UINT_evNT, mng_init_evnt, mng_free_evnt, mng_read_evnt, mng_write_evnt, mng_assign_evnt, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_EVNT, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, MNG_UINT_evNT))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_evnt (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_evNT, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_evntp)pChunk)->iCount = iCount;
- if (iCount)
- MNG_ALLOC (pData, ((mng_evntp)pChunk)->pEntries, iCount * sizeof (mng_evnt_entry));
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_EVNT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_putchunk_evnt_entry (mng_handle hHandle,
- mng_uint32 iEntry,
- mng_uint8 iEventtype,
- mng_uint8 iMasktype,
- mng_int32 iLeft,
- mng_int32 iRight,
- mng_int32 iTop,
- mng_int32 iBottom,
- mng_uint16 iObjectid,
- mng_uint8 iIndex,
- mng_uint32 iSegmentnamesize,
- mng_pchar zSegmentname)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_evnt_entryp pEntry;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_EVNT_ENTRY, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a MHDR first! */
- if (pData->iFirstchunkadded != MNG_UINT_MHDR)
- MNG_ERROR (pData, MNG_NOHEADER)
- pChunk = pData->pLastchunk; /* last one must have been evNT ! */
- if (((mng_chunk_headerp)pChunk)->iChunkname != MNG_UINT_evNT)
- MNG_ERROR (pData, MNG_NOCORRCHUNK)
- /* index out of bounds ? */
- if (iEntry >= ((mng_evntp)pChunk)->iCount)
- MNG_ERROR (pData, MNG_INVALIDENTRYIX)
- /* address proper entry */
- pEntry = ((mng_evntp)pChunk)->pEntries + iEntry;
- /* fill entry */
- pEntry->iEventtype = iEventtype;
- pEntry->iMasktype = iMasktype;
- pEntry->iLeft = iLeft;
- pEntry->iRight = iRight;
- pEntry->iTop = iTop;
- pEntry->iBottom = iBottom;
- pEntry->iObjectid = iObjectid;
- pEntry->iIndex = iIndex;
- pEntry->iSegmentnamesize = iSegmentnamesize;
- if (iSegmentnamesize)
- {
- MNG_ALLOC (pData, pEntry->zSegmentname, iSegmentnamesize + 1);
- MNG_COPY (pEntry->zSegmentname, zSegmentname, iSegmentnamesize);
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_EVNT_ENTRY, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_putchunk_unknown (mng_handle hHandle,
- mng_chunkid iChunkname,
- mng_uint32 iRawlen,
- mng_ptr pRawdata)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- mng_retcode iRetcode;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_chunk_header sChunkheader =
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- {MNG_UINT_HUH, mng_init_general, mng_free_unknown, mng_read_unknown, mng_write_unknown, mng_assign_unknown, 0, 0, sizeof(mng_unknown_chunk)};
- #else
- {MNG_UINT_HUH, mng_init_unknown, mng_free_unknown, mng_read_unknown, mng_write_unknown, mng_assign_unknown, 0, 0};
- #endif
- #else
- mng_chunk_header sChunkheader;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_UNKNOWN, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must have had a header first! */
- if (pData->iFirstchunkadded == 0)
- MNG_ERROR (pData, MNG_NOHEADER)
- /* prevent misplaced TERM ! */
- if (!check_term (pData, iChunkname))
- MNG_ERROR (pData, MNG_TERMSEQERROR)
- /* create the chunk */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- #ifdef MNG_OPTIMIZE_CHUNKINITFREE
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #else
- iRetcode = mng_init_unknown (pData, &sChunkheader, &pChunk);
- #endif
- #else
- mng_get_chunkheader(MNG_UINT_HUH, &sChunkheader);
- iRetcode = mng_init_general (pData, &sChunkheader, &pChunk);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- /* fill the chunk */
- ((mng_unknown_chunkp)pChunk)->sHeader.iChunkname = iChunkname;
- ((mng_unknown_chunkp)pChunk)->iDatasize = iRawlen;
- if (iRawlen)
- {
- MNG_ALLOC (pData, ((mng_unknown_chunkp)pChunk)->pData, iRawlen);
- MNG_COPY (((mng_unknown_chunkp)pChunk)->pData, pRawdata, iRawlen);
- }
- mng_add_chunk (pData, pChunk); /* add it to the list */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTCHUNK_UNKNOWN, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #endif /* MNG_INCLUDE_WRITE_PROCS */
- /* ************************************************************************** */
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_getimgdata_seq (mng_handle hHandle,
- mng_uint32 iSeqnr,
- mng_uint32 iCanvasstyle,
- mng_getcanvasline fGetcanvasline)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETIMGDATA_SEQ, MNG_LC_START);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETIMGDATA_SEQ, MNG_LC_END);
- #endif
- return MNG_FNNOTIMPLEMENTED;
- }
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_getimgdata_chunkseq (mng_handle hHandle,
- mng_uint32 iSeqnr,
- mng_uint32 iCanvasstyle,
- mng_getcanvasline fGetcanvasline)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETIMGDATA_CHUNKSEQ, MNG_LC_START);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETIMGDATA_CHUNKSEQ, MNG_LC_END);
- #endif
- return MNG_FNNOTIMPLEMENTED;
- }
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_getimgdata_chunk (mng_handle hHandle,
- mng_handle hChunk,
- mng_uint32 iCanvasstyle,
- mng_getcanvasline fGetcanvasline)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETIMGDATA_CHUNK, MNG_LC_START);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_GETIMGDATA_CHUNK, MNG_LC_END);
- #endif
- return MNG_FNNOTIMPLEMENTED;
- }
- /* ************************************************************************** */
- /* ************************************************************************** */
- #ifdef MNG_INCLUDE_WRITE_PROCS
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_putimgdata_ihdr (mng_handle hHandle,
- mng_uint32 iWidth,
- mng_uint32 iHeight,
- mng_uint8 iColortype,
- mng_uint8 iBitdepth,
- mng_uint8 iCompression,
- mng_uint8 iFilter,
- mng_uint8 iInterlace,
- mng_uint32 iCanvasstyle,
- mng_getcanvasline fGetcanvasline)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTIMGDATA_IHDR, MNG_LC_START);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTIMGDATA_IHDR, MNG_LC_END);
- #endif
- return MNG_FNNOTIMPLEMENTED;
- }
- /* ************************************************************************** */
- #ifdef MNG_INCLUDE_JNG
- mng_retcode MNG_DECL mng_putimgdata_jhdr (mng_handle hHandle,
- mng_uint32 iWidth,
- mng_uint32 iHeight,
- mng_uint8 iColortype,
- mng_uint8 iBitdepth,
- mng_uint8 iCompression,
- mng_uint8 iInterlace,
- mng_uint8 iAlphaBitdepth,
- mng_uint8 iAlphaCompression,
- mng_uint8 iAlphaFilter,
- mng_uint8 iAlphaInterlace,
- mng_uint32 iCanvasstyle,
- mng_getcanvasline fGetcanvasline)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTIMGDATA_JHDR, MNG_LC_START);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_PUTIMGDATA_JHDR, MNG_LC_END);
- #endif
- return MNG_FNNOTIMPLEMENTED;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_updatemngheader (mng_handle hHandle,
- mng_uint32 iFramecount,
- mng_uint32 iLayercount,
- mng_uint32 iPlaytime)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_UPDATEMNGHEADER, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must be a MNG animation! */
- if ((pData->eImagetype != mng_it_mng) || (pData->iFirstchunkadded != MNG_UINT_MHDR))
- MNG_ERROR (pData, MNG_NOMHDR)
- pChunk = pData->pFirstchunk; /* get the first chunk */
- /* and update the variables */
- ((mng_mhdrp)pChunk)->iFramecount = iFramecount;
- ((mng_mhdrp)pChunk)->iLayercount = iLayercount;
- ((mng_mhdrp)pChunk)->iPlaytime = iPlaytime;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_UPDATEMNGHEADER, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode MNG_DECL mng_updatemngsimplicity (mng_handle hHandle,
- mng_uint32 iSimplicity)
- {
- mng_datap pData;
- mng_chunkp pChunk;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_UPDATEMNGSIMPLICITY, MNG_LC_START);
- #endif
- MNG_VALIDHANDLE (hHandle) /* check validity handle */
- pData = (mng_datap)hHandle; /* and make it addressable */
- if (!pData->bCreating) /* aren't we creating a new file ? */
- MNG_ERROR (pData, MNG_FUNCTIONINVALID)
- /* must be a MNG animation! */
- if ((pData->eImagetype != mng_it_mng) || (pData->iFirstchunkadded != MNG_UINT_MHDR))
- MNG_ERROR (pData, MNG_NOMHDR)
- pChunk = pData->pFirstchunk; /* get the first chunk */
- /* and update the variable */
- ((mng_mhdrp)pChunk)->iSimplicity = iSimplicity;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (((mng_datap)hHandle), MNG_FN_UPDATEMNGSIMPLICITY, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #endif /* MNG_INCLUDE_WRITE_PROCS */
- /* ************************************************************************** */
- #endif /* MNG_ACCESS_CHUNKS */
- /* ************************************************************************** */
- /* * end of file * */
- /* ************************************************************************** */
|