12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485openHxdopenSmoduleCaml_scheduler=Make(structtype+'at='aend)typeerror=SeekmoduletypeSINGLETON=sigtypetvalv:tendtypeflow={mutableoff:int;len:int}moduleCaml_iflow(X:SINGLETONwithtypet=string)=structtypescheduler=Caml_scheduler.ttypenonrecerror=error=Seektypenonrecflow=flow={mutableoff:int;len:int}typebuffer=bytesletinputflowbuffer~off~len=letlen=(min:int->int->int)len(flow.len-flow.off)inBytes.blit_stringX.vflow.offbufferofflen;flow.off<-flow.off+len;Caml_scheduler.inj(Oklen)endmoduleCaml_oflow=structtypescheduler=Caml_scheduler.ttypenonrecerror=error=Seektypeflow=Buffer.ttypebuffer=stringletoutputbufbuffer~off~len=Buffer.add_substringbufbufferofflen;Caml_scheduler.inj(Oklen)endletcaml={bind=(funxf->f(Caml_scheduler.prjx));return=Caml_scheduler.inj}letlseek={lseek=funflowposmode->let()=matchmodewith|`CUR->flow.off<-flow.off+pos|`SET->flow.off<-pos|`END->flow.off<-flow.len-posinifflow.off<0||flow.off>=flow.lenthenCaml_scheduler.inj(ErrorSeek)elseCaml_scheduler.inj(Okflow.off)}letoconfigurationstrseekppf=letmoduleCaml_iflow=Caml_iflow(structtypet=stringletv=strend)inletic={off=0;len=String.lengthstr}inletoc=Buffer.create16inletres=O.oconfigurationcaml(moduleCaml_iflow)(moduleCaml_oflow)icoclseekseekppfinmatchCaml_scheduler.prjreswith|Ok()->Ok(Buffer.contentsoc)|ErrorSeek->Error(`Msg"Index out of bounds")moduleCaml_onull=structtypescheduler=Caml_scheduler.ttypenonrecerror=error=Seektypeflow=()typebuffer=stringletoutput()_~off:_~len=Caml_scheduler.inj(Oklen)endletppconfigurationppfstr=letmoduleCaml_iflow=Caml_iflow(structtypet=stringletv=strend)inletic={off=0;len=String.lengthstr}inletseek=`Absolute0inletres=O.oconfigurationcaml(moduleCaml_iflow)(moduleCaml_onull)ic()lseekseekppfinmatchCaml_scheduler.prjreswith|Ok()->()|ErrorSeek->()(* XXX(dinosaure): nothing to do where [String.length str = 0] *)letnull=Format.formatter_of_out_functions{Format.out_string=(fun___->());out_flush=(fun()->());out_newline=(fun()->());out_spaces=(fun_->());out_indent=(fun_->())}letto_hxdconfigurationstrseek=oconfigurationstrseeknull