Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. (
  2.  
  3. )
  4.  
  5. Code    SYS1 ;( n -- n1 )
  6.         INT 40H
  7.         RET
  8. EndCode
  9.  
  10. Code    SYS2 ;( n n1 -- n2 )
  11.         MOV EBX, [EBP]
  12.         INT 40H
  13.         LEA EBP, [EBP+4]
  14.         RET
  15. EndCode
  16.  
  17. Code    SYS3 ;( n n1 n2 -- n3 )
  18.         MOV ECX, [EBP+4]
  19.         MOV EBX, [EBP]
  20.         INT 40H
  21.         LEA EBP, [EBP+8]
  22.         RET
  23. EndCode
  24.  
  25. Code    SYS4 ;( n n1 n2 n3 -- n4 )
  26.         MOV EDX, [EBP+8]
  27.         MOV ECX, [EBP+4]
  28.         MOV EBX, [EBP]
  29.         INT 40H
  30.         LEA EBP, [EBP+0CH]
  31.         RET
  32. EndCode
  33.  
  34. Code    SYS5 ;( n n1 n2 n3 n4 -- n5 )
  35.         MOV ESI, [EBP+0CH]
  36.         MOV EDX, [EBP+8]
  37.         MOV ECX, [EBP+4]
  38.         MOV EBX, [EBP]
  39.         INT 40H
  40.         LEA EBP, [EBP+10H]
  41.         RET
  42. EndCode
  43.  
  44. Code    SYS6 ;( n n1 n2 n3 n4 n5 -- n6 )
  45.         PUSH EDI
  46.         MOV EDI, [EBP+10H]
  47.         MOV ESI, [EBP+0CH]
  48.         MOV EDX, [EBP+8]
  49.         MOV ECX, [EBP+4]
  50.         MOV EBX, [EBP]
  51.         INT 40H
  52.         LEA EBP, [EBP+14H]
  53.         POP EDI
  54.         RET
  55. EndCode
  56.  
  57. VARIABLE reg_struc
  58.  
  59. Code    SYSV ;(  -- n )
  60.         LEA EBP,  [EBP-4]
  61.         MOV [EBP], EAX
  62.         MOV EAX, { ' reg_struc }
  63.         PUSH EDI
  64.         MOV EDI, [EAX+14H]
  65.         MOV ESI, [EAX+10H]
  66.         MOV EDX, [EAX+0CH]
  67.         MOV ECX, [EAX+8]
  68.         MOV EBX, [EAX+4]
  69.         MOV EAX, [EAX]
  70.         INT 40H
  71.         POP EDI
  72.         RET
  73. EndCode
  74.  
  75.  
  76.  
  77. 80 VALUE SCR_WIDTH
  78. 60 VALUE SCR_WIDTH-S
  79. 25 VALUE SCR_HEIGHT
  80.  
  81.  
  82. CREATE &AT-XY 0 , 0 ,
  83. CREATE &KEY 0 ,
  84. CREATE &ATRIB 0x0000FFFF ,
  85.  
  86. 0x0011000D VALUE >PIC
  87.  
  88. CREATE SCR_BUF SCR_WIDTH SCR_HEIGHT 1+ * ALLOT
  89.  
  90. : AT-XY ( X Y -- )
  91. SWAP 16 LSHIFT + &AT-XY ! ;
  92.  
  93. : AT-XY? ( -- X Y )
  94. &AT-XY 2+ W@ &AT-XY W@ ;
  95.  
  96. : __PAGE-UP
  97.  SCR_BUF SCR_WIDTH + SCR_BUF SCR_WIDTH SCR_HEIGHT * CMOVE
  98.  SCR_BUF SCR_WIDTH SCR_HEIGHT 1- * + SCR_WIDTH  BLANK
  99.  AT-XY? 1- 0 MAX AT-XY ;
  100.  
  101. VECT PAGE-UP
  102.  
  103. : ?PAGE-UP ( n -- )
  104.  
  105.  &AT-XY 2+      W@ + SCR_WIDTH  /MOD SWAP &AT-XY 2+     W!
  106.  &AT-XY         W@ + SCR_HEIGHT /MOD
  107.  IF PAGE-UP DROP SCR_HEIGHT 1- THEN  &AT-XY     W! ;
  108.  
  109. : SCR_CR
  110. &AT-XY @ 0xFFFF AND 1+ &AT-XY ! 0 ?PAGE-UP ;
  111.  
  112. : SCR_TYPE ( addr len -- )
  113.         TUCK SWAP
  114.  &ATRIB @
  115.   &AT-XY 2+     W@  0x60000 *
  116.   &AT-XY        W@  0xD * +
  117. 0x00060018 +
  118. 4 SYS5 DROP
  119. \ &AT-XY 2+ +!
  120.  ?PAGE-UP
  121. ;
  122.  
  123. : DRAW_LINS
  124.         ['] PAGE-UP >BODY @
  125.         ['] NOOP TO PAGE-UP
  126.         AT-XY?
  127.         0 0 AT-XY
  128.         SCR_BUF SCR_WIDTH SCR_HEIGHT * BOUNDS
  129.         DO I SCR_WIDTH SCR_TYPE \ SCR_CR
  130. SCR_WIDTH
  131.         +LOOP
  132.         AT-XY
  133.         TO PAGE-UP ;
  134.  
  135. : _PAGE-UP
  136. draw_window __PAGE-UP
  137. DRAW_LINS
  138. ;
  139.  
  140. ' _PAGE-UP TO PAGE-UP
  141.  
  142. CREATE LAST_CUR 0 , 0 ,
  143.  
  144. : CORSOR_DROW
  145.   0  LAST_CUR 2@ 38 SYS4 DROP
  146.   0x00FF00FF
  147.   &AT-XY        W@ 0xD * 0x21   + DUP     16 LSHIFT +
  148.   &AT-XY 2+     W@ 0x6 * 6      + DUP 6 + 16 LSHIFT +
  149.  2DUP LAST_CUR 2!
  150.   38 SYS4 DROP
  151. ;
  152. : REDRAW
  153.         draw_window
  154.         DRAW_LINS CORSOR_DROW ;
  155.  
  156. : EVENT-CASE
  157.      11 SYS1
  158.         DUP     1 = IF DROP REDRAW      EXIT    THEN
  159.         DUP     2 = IF DROP 2 SYS1 8 RSHIFT &KEY C! EXIT        THEN
  160.                 3 = IF -1 SYS1  EXIT    THEN ;
  161.  
  162.  
  163. 0
  164.   CELL  FIELD .CODE
  165. 2 CELLS FIELD .FIRST \ ¯®§¨æ¨ï ¢ ä ©«¥ (¢ ¡ ©â å)
  166.   CELL  FIELD .SIZE  \ ᪮«ìª® ¡ ©â R/W
  167.   CELL  FIELD .DATA  \ 㪠§ â¥«ì ­  ¤ ­­ë¥
  168.   222   FIELD .NAME  \ ASCIIZ-¨¬ï ä ©« 
  169. CONSTANT FILE_STR
  170.  
  171. : WINDOW
  172.  draw_window CC_LINES ;
  173.  
  174.