Нужно понять программу, реализующую мышь в QBasic

Узнай цену своей работы

Формулировка задачи:

Я недавно нашёл у себя пример реализации мышки в QBasic'е. Мне хотелось бы разобраться, что там означает каждый фрагмент (а ещё лучше - каждая строчка ). В целях самообразования, так сказать. Вот сам код. Если кто-нибудь его подробно закомментирует, то буду премного благодарен.
Листинг программы
  1. DECLARE FUNCTION MouseInit% ()
  2. DECLARE SUB MouseStatus (Lb%, Rb%, xMouse%, yMouse%)
  3. DECLARE SUB MouseRange (X1%, Y1%, x2%, Y2%)
  4. DECLARE SUB MousePut (X%, Y%)
  5. DECLARE SUB MouseHide ()
  6. DECLARE SUB MouseDriver (ax%, bx%, cx%, dx%)
  7. DECLARE SUB MouseShow ()
  8. DEFINT A-Z: DEF SEG = &HA000:
  9. DIM SHARED mouse$: mouse$ = SPACE$(57)
  10. CLS
  11. SCREEN 12
  12. FOR I% = 1 TO 57
  13. READ a$
  14. H$ = CHR$(VAL("&H" + a$))
  15. MID$(mouse$, I%, 1) = H$
  16. NEXT I%
  17. DATA 55,89,E5,8B,5E,0C,8B,07,50,8B,5E,0A,8B,07,50,8B
  18. DATA 5E,08,8B,0F,8B,5E,06,8B,17,5B,58,1E,07,CD,33,53
  19. DATA 8B,5E,0C,89,07,58,8B,5E,0A,89,07,8B,5E,08,89,0F
  20. DATA 8B,5E,06,89,17,5D,CA,08,00
  21. RESTORE
  22. IF NOT MouseInit% THEN
  23. PRINT "Mouse not found"
  24. END
  25. END IF
  26. LOCATE 2, 30
  27. PRINT "Mouse Control in QBasic"
  28. MouseShow
  29. MouseRange 0, 0, 630, 478
  30. DO
  31. MouseStatus Lb, Rb, X, Y
  32. SELECT CASE Lb%
  33. CASE -1: LOCATE 10, 1: PRINT "Left Button Pressed"
  34. CASE ELSE: LOCATE 10, 1: PRINT SPACE$(20)
  35. END SELECT
  36. SELECT CASE Rb%
  37. CASE -1: LOCATE 10, 60: PRINT "Right Button Pressed"
  38. CASE ELSE: LOCATE 10, 60: PRINT SPACE$(20)
  39. END SELECT
  40. LOOP UNTIL INKEY$ = CHR$(27)
  41. DEFLNG A-Z
  42. SUB MouseDriver (ax%, bx%, cx%, dx%)
  43. DEF SEG = VARSEG(mouse$)
  44. mouse% = SADD(mouse$)
  45. CALL Absolute(ax%, bx%, cx%, dx%, mouse%)
  46. END SUB
  47. SUB MouseHide
  48. ax% = 2
  49. MouseDriver ax%, 0, 0, 0
  50. END SUB
  51. FUNCTION MouseInit%
  52. ax% = 0
  53. MouseDriver ax%, 0, 0, 0
  54. MouseInit% = ax%
  55. END FUNCTION
  56. SUB MousePut (X%, Y%)
  57. ax% = 4
  58. cx% = X%
  59. dx% = Y%
  60. MouseDriver ax%, 0, cx%, dx%
  61. END SUB
  62. SUB MouseRange (X1%, Y1%, x2%, Y2%)
  63. ax% = 7
  64. cx% = X1%
  65. dx% = x2%
  66. MouseDriver ax%, 0, cx%, dx%
  67. ax% = 8
  68. cx% = Y1%
  69. dx% = Y2%
  70. MouseDriver ax%, 0, cx%, dx%
  71. END SUB
  72. SUB MouseShow
  73. ax% = 1
  74. MouseDriver ax%, 0, 0, 0
  75. END SUB
  76. SUB MouseStatus (Lb%, Rb%, xMouse%, yMouse%)
  77. ax% = 3
  78. MouseDriver ax%, bx%, cx%, dx%
  79. Lb% = ((bx% AND 1) <> 0)
  80. Rb% = ((bx% AND 2) <> 0)
  81. xMouse% = cx%
  82. yMouse% = dx%
  83. END SUB

Решение задачи: «Нужно понять программу, реализующую мышь в QBasic»

textual
Листинг программы
  1. DEF SEG = &HA000       ' A000h - сегмент начала видеопамяти
  2.    FOR i = 0 TO 31999    '  Заполним первые 32000 ячеек экрана
  3.       POKE i, 9      '  Синий цвет (индекс - 9)
  4.    NEXT
  5. DEF SEG

Объяснение кода листинга программы

  1. DEF SEG = &HA000 - присваивает переменной SEG значение &HA000, что означает сегмент начала видеопамяти.
  2. FOR i = 0 TO 31999 - начинает цикл от 0 до 31999 (включительно).
  3. POKE i, 9 - отправляет значение 9 в ячейку видеопамяти, соответствующую переменной i. Это задает синий цвет (индекс - 9).
  4. NEXT - переходит к следующей итерации цикла.
  5. DEF SEG - заканчивает процедуру определения сегмента видеопамяти.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут