//CursorStream.bcpl utility for sending "stream" output to the cursor get "streams.d" external [ InitCursor; WriteCursor; CursorS ] external [ CreateDisplayStream; SetBitPos; Zero; MoveBlock; Puts ] static CursorS=0 //This proceedure must be called first //It creats a small Stream DCB for text to be placed //it returns the stream in case you want to output to the stream without WriteCursor //The three parameters are pointer to a buffer, length of buffer, must be 50 words or more //pointer to a font, 0 for sysfont, and pointer to zone, syszone if zero let InitCursor(buff,length,fnt,zne) =valof [ CursorS = CreateDisplayStream(1,buff,length,fnt,2,DSstopright,zne) let dcb = CursorS>>DS.fdcb //Zero(dcb>>DCB.bitmap,32) SetBitPos(CursorS,0) //WriteCursor(0) resultis CursorS ] //this proceedure sends "param" to routine, and copies the resulting bitmap in the //dcb into the cursor //example WriteCursor(Wss,"Hi") displays Hi //example WriteCursor(Wns,cnt) displays cnt right justified in decimal //example Wns(S,val,0,8); WriteCursor(0,0) displays what you want //example WriteCursor($i) displays smaall "in" in bottom 4 scan lines of the cursor //example WriteCursor($o) displays smaall "out" in bottom 4 scan lines of the cursor and WriteCursor(routine,param) be [ let In = table [ #2260; #2310; #2210; #2210 ] let Out = table [ #74447; #44442; #44442; #74302 ] if routine eq $i then [ MoveBlock(#445,In,4); return ]//in if routine eq $o then [ MoveBlock(#445,Out,4); return ]//out if routine then routine(CursorS,param,2) let dcb = CursorS>>DS.fdcb let bitmap = dcb>>DCB.bitmap for i = 0 to 15 do #431!i = i ls dcb>>DCB.height*2? bitmap!(i lshift 1),0 Puts(CursorS, $*n); SetBitPos(CursorS,0) ] (635)