fgetchar.s 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. |improved fgetchar() implementation for TIGCCLIB
  2. |Copyright (C) Kevin Kofler, 2002-2003
  3. |Based on documentation examples and the original fgetchar implementation, both
  4. |by Zeljko Juric
  5. /* Prototype:
  6. short fgetchar(void); */
  7. .text
  8. .xdef fgetchar
  9. __fgetchar_clipzone: .byte 0,0,239,127
  10. .equ __SaveScrState,0x1a0 /* SaveScrState */
  11. .equ __MoveTo,0x19d /* MoveTo */
  12. .equ __DrawClipChar,0x191 /* DrawClipChar */
  13. fgetchar:
  14. movem.l %a2-%a4/%d3,-(%a7)
  15. 5:
  16. link.w %a6,#-18
  17. pea.l (%a7)
  18. move.l 0xc8:w,%a2
  19. move.l __SaveScrState*4(%a2),%a0
  20. jsr (%a0)
  21. move.w #4,(%a7)
  22. pea.l __fgetchar_clipzone(%pc)
  23. move.w #'_',-(%a7)
  24. move.l -8(%a6),-(%a7)
  25. move.l __DrawClipChar*4(%a2),%a3
  26. jsr (%a3)
  27. jbsr __fgetchar
  28. move.w %d0,%d3
  29. move.w #2,(%a7)
  30. pea.l __fgetchar_clipzone(%pc)
  31. move.w #'_',-(%a7)
  32. move.l -8(%a6),-(%a7)
  33. jsr (%a3)
  34. move.l -8(%a6),(%a7)
  35. move.l __MoveTo*4(%a2),%a0
  36. jsr (%a0)
  37. cmp.w #255,%d3
  38. bhi.s 2f
  39. move.w %d3,(%a7)
  40. cmp.w #13,(%a7)
  41. bne.s 3f
  42. subq.w #3,(%a7)
  43. 3:
  44. jbsr fputchar
  45. 2:
  46. move.w %d3,%d0
  47. unlk %a6
  48. movem.l (%a7)+,%a2-%a4/%d3
  49. rts