qdosmsq:traps:trap_3:flin

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

qdosmsq:traps:trap_3:flin [2009/02/22 11:22]
george.gwilt created
qdosmsq:traps:trap_3:flin [2018/10/19 13:10] (current)
norman [Example] Added example IO_FSTRG
Line 1: Line 1:
 +====== IO_FLINE/​IOB_FLIN & IO_FSTRG/​IOB_FMUL ======
 +
 +These traps read a set of bytes from a channel.
 +^Call Parameters^^Return Parameters^^
 +|D0.B|$02 or $03|D0.L|Error code.|
 +|D1.L| |D1.W|Number of bytes fetched.|
 +|D2.W|Length of buffer. |D2.L|Preserved.|
 +|D3.W|Timeout.|D3.L|Preserved.|
 +|A0.L|Channel ID |A0.L|Preserved.|
 +|A1.L|Pointer to buffer.|A1.L|Pointer to one byte after the last fetched.|
 +
 +===== Errors =====
 +|ERR_NC|Not complete.|
 +|ERR_NO|Channel not open.|
 +|ERR_EF|End of file.|
 +|ERR_BO|Buffer overflow.|
 +
 +
 +===== Notes =====
 +  * All registers not shown above are not used on entry and are preserved on exit.
 +  * D0.B is $02 for IO_FLINE/​IOB_FLIN and $03 for IO_FSTRG/​IOB_FMUL.
 +  * IO_FLINE/​IOB_FLIN fetches a line of bytes ending with LF ($0A). The LF is included as the last character fetched. If the number of bytes read before LF is reached exceeds the size of the buffer a buffer overflow error occurs.
 +  * IO_FSTRG/​IOB_FMUL reads the number of bytes specified in D2.W unless EOF is reached first.
 +  * If bytes are being read from a CON channel the actions of the two Traps are different. For IO_FLINE/​IOB_FLIN the cursor is enabled and the characters are mirrored in the window. Also the arrow keys can be used to edit the line in the normal way. For IO_FSTRG/​IOB_FMUL the characters are not printed in the window and any cursor handling is up to the application.
 +
 +===== Example =====
 +<​code>​
 +input   ​moveq ​  #​io_fstrg,​d0
 +        moveq   ​1024,​d2 ​                ; Buffer max size
 +        moveq   #​-1,​d3 ​                 ; Infinite timeout
 +        lea     ​input_buffer,​a1 ​        ; Read data into here
 +        move.l ​ a1,​-(a7) ​               ; Save buffer address
 +        trap    #2
 +        cmpi.w ​ #​ERR_EF,​d0 ​             ; EOF?
 +        beq.s   ​input_end ​              ; Yes
 +        tst.w   ​d0 ​                     ; Any other error?
 +        bne.s   ​input_end ​              ; Yes
 +        ​
 +input_end
 +        move.l ​ (a7)+,​a1 ​               ; Restore buffer
 +        rts                             ; D0 = error code, ERR_EF or zero
 +        ​
 +input_buffer
 +        ds.w    1
 +        ds.b    1024
 +</​code>​
 +
  
  • qdosmsq/traps/trap_3/flin.txt
  • Last modified: 2018/10/19 13:10
  • by norman