section "lethh" get "libhdr" get "etherhdr" global $( mcseg : ug bseg : ug + 1 etsk : ug + 2 $) let start() be // load ether handler task $( let newsegl = vec 4 let csegl = tcb!tcb.seglist let tres = ? etsk := 0 mcseg := loadseg(":ether.emcseg") bseg := loadseg (":ether.eth-task") if mcseg=0 | bseg=0 do $( tidy.up("Failed to load task segments") stop(20) $) !newsegl := 4 // number of segments newsegl!1 := csegl!1 // copy the two library segments newsegl!2 := csegl!2 newsegl!3 := bseg newsegl!4 := mcseg // create the task, priority 1500, stack 200 etsk := createtask(newsegl, 200, 1500) if etsk=0 do $( tidy.up("Can't create task") stop(30) $) // activate task tres := sendpkt(-1, etsk, ?, ?, ?, ?) unless tres do $( tidy.up("Task wouldn't start properly") stop(40) $) $( let rti = rootnode!rtn.info // see if info vector exists if rti=0 do $( rti := getvec(5) !rti := 5 // size for i = 1 to 5 do rti!i := 0 rootnode!rtn.info := rti $) rti!rtninfo.ether := etsk $) writef("********** Ether handler started as Task %n*n", etsk) $) and tidy.up(s) be $( writes(s) newline() unless mcseg=0 do unloadseg(mcseg) unless bseg=0 do unloadseg(bseg) unless etsk=0 do deletetask(etsk) $)