Module: DOS&Ext			Group: Video


Word: VideoOutput
Text: VideoOutput 
 - ᮢ㯭 ᫮  䠪᪮ 뢮   ࠭.
 ᫮ 뢠 ணࠬ  BIOS  (  -). 
᫨  ।⠥ 饭  DOS  (,  redirectable), 
, , ᮮ⢥⢥  맮 뢠.


Word: video
\  ⠭ -० u.	    ( u -- ) 


Word: Mode:
\  ।饥 ᫮   ०.		   ( u -- )


Word: MonoText


Word: ColourText


Word: TheMode
\  ⠥ ⥪騩  ०  BIOS-  RAM.	   
( -- n )


Word: Attribute
\   ਡ ᨬ, ᪠  ࠭.



Word: AttributeType
\  ।饥 ᫮  ਡ⮢,  祭    
\  梥⭮   梥⭮ ०.
   ( mono colour -- ) 


Word: normal
\  ଠ ਡ, ஥  ୮ (梥),
\    ᨭ (梥⭮).


Word: bold
\  ਡ  뤥 ,   ୮ (梥),
\  ⮥  ᨭ (梥⭮).
Word: inverse
\  ਡ  inverse-, ୮  ஬ (梥),
\  ⮥  䨮⮢ (梥⭮).



Word: biosTypel
\  ᪠ u ᨬ ⥪  seg:off   ⥪饩 樨   
\   . ᯮ ⥪饥 祭 ਡ.
   ( seg off u -- ) 


Word: biosType
\  ᪠ u ᨬ ⥪, 稭  adr.	   ( adr u -- ) 


Word: vEmit
\  ᪠ ᨬ   -࠭, ᯮ ⥪騩 ਡ.    
( c -- ) 


Word: xy
\  ⠭   ⮫ x  ப y.	   ( x y -- ) 


Word: at-xy
\  ⠭   ⮫ x  ப y.   ANS-Forth.
Alias:  at-xy   xy


Word: @xy
\  롨ࠥ ⥪   (⮫, ப).	   ( -- x y )


Word: Cursor
\  ⠭ ࠧ     孥
\  (ப  ᨬ쭮 ).
   ( upper lower -- )


Word: CursorOn
\    .


Word: CursorOff
\    
\  [᫠ ࠡ  設⢠  ०]


Word: SetVideo
Word: scrollup	
\  ப稢  n    , ।񭭮  
\   窠  x1, y1 ( 孨)   x2, y2 ( ࠢ).
\   ப  ⥪騩 ਡ.
  ( x1 y1 x2 y2 n -- ) 


Word: scrolldn
\  ப稢  n   , ।񭭮  
\   窠  x1, y1 ( 孨)  x2, y2 ( ࠢ).
\   ப  ⥪騩 ਡ.
   ( x1 y1 x2 y2 n -- ) 


Word: ClrTxt
\  頥 ⥪  , ।񭭮 㣫 x1, y1  x2, y2 
\  ᯮ ⥪饥 祭 attribute.
   ( x1 y1 x2 y2 -- )


Word: page
\  頥 ࠭  ⠭   孨  㣮.



Group: Keyboard


Word: bios?terminal
\  頥 f=keycode (fkt | 0  scan | ascii) ᫨  , 
\   f=0. Keycode 㤠  keybuffer.
   ( -- f )


Word: biosKey?
\   f 㫥, ᫨  㯭.
\  Keycode  㤠   keybuffer    ࠭ by KEY.
\  flag = hi|lo = func|0  scan|ascii.
  ( -- f ) 


Word: pckey
\   , ⠢ ७   
\  (s. bios?terminal)		( -- c )


Word: biosKey
\     頥 ascii-  ଠ쭮  
\  㭪樮     ᯥ樠쭮 control .
 ( -- c | fcode 0 ) 

Word: NormalKeys
\  ⠭   key-ணࠬ  ४祭 . 
\  . TaskKeys.


Word: Screen
\  ࠢ 뢮  ࠭.


Word: Console
\  ࠢ   뢮 ⥪  .


Word: ClrKeyBuf
\    ন騥 keycodes  keybuffer.



Group: DOS-Errors


Word: DOS-Errors

Text: DOS-Errors 
 ᯥ⮬ 맮 㭪権 DOS  ࠡ⪠ 訡.
Holon ᯥ稢  error-ଠ 
  饭  㭪樨.
設⢮ 㭪樮 ᫮ DOS 稢 맮  ?doserr, 
஥ ᮡࠥ  ଠ  訡,  ᯥ稢 DOS. 


Word: Err#
\   訡 DOS.


Word: ErrClass
\   訡 DOS.


Word: ErrAction
\  DOS᪮ ⢨  । 訡.


Word: ?doserr
\   ஢ઠ  訡 ᫥ 饭  㭪樨 DOS, 
\  頥 ଠ, ᯥ祭 Int 21h, 㭪樥 59h.
\  ⠢ f=0, ᫨ ந諠 訡.
   ( -- f=ax ) 
Group: Files

Word: File-Handling
Text: File-Handling 
 ᫮ , ⮡  ॠ 
(᫨ ⮫쪮  訫  ࠡ 訡). 
設⢮ ᫮ 頥  ଠ, 
    砥 訡.
    ⠫஢   ⥬  祭
  Err# ,  ErrClass    ErrAction    DOS-, 饩 .

     Read    Write, 
Holon । ᫮ 㯠  䠩  ଥ  @h   !h    ..  
 ᫮  filehandle  ।, 
 filepointer  㦥   ⥫쭮 . 
 㯠  ⠢ ଠ  訡 ।⢥, 
   ஢ 訡,  Err#  ᫥  㯠.


Word: mkfile
\    䠩    "adr, 頥 handle-  
\  訡 h=0. [Error-ଠ ᮤন  Err#, ErrClass  ErrAction] 
( "adr -- h )


Word: <open>
\  뢠 䠩  "adr (ப  稪) ᮣ᭮ ०  AL
\  [ 饭 ⮫쪮  Codeword ].
   ( "adr -- h ) 


Word: open-r
\  뢠 䠩 "adr  ⮫쪮--⥭,
\  頥 handle  0=error.
   ( "adr -- h ) 


Word: open-r/w
\  뢠 䠩 "adr  ⥭  , 頥 handle  0=error.
   ( "adr -- h ) 

Word: <lseek>
\  ⠭ 㪠⥫  䠩 h  ﭨ d 
\  ᮣ᭮ ०  AL.	      ( d h -- d ) 


Word: lseek
\  ⠭ 㪠⥫  䠩 h  d ⮢  砫.
   ( d h -- d ) 
Word: lseek+
\  ६頥 㪠⥫  䠩 h  d ⮢
\  ⭮⥫쭮 ⥪饩 樨.
  ( d h -- d ) 


Word: lseek++
\  ⠭ 㪠⥫  䠩 h  d ⮢ ⭮⥫쭮 .
   ( d h -- d ) 


Word: Filelength
\  砥  d 䠩 h  ⠭ 㪠⥫   䠩.
   ( h -- d )


Word: FileReset
\  ⠭ 㪠⥫  砫 䠩.
   ( h -- )


Word: MovePointer
\  ६ 㪠⥫  n  䠩 h.
   ( h n -- )


Word: FilePointer
\  頥  ⥪饣 㪠⥫ d  䠩 h.
   ( h -- d )


Word: duph
\  㡫 handle, ᯮ㥬  DUPH CLOSE 
\  ࠭  뢮  䠩.
   ( h1 -- h2 ) 


Word: close
\  뢠 䠩   h, 訡 ᫨ f=0.
           		( h -- f ) 


Word: rename
\  २뢠 䠩 "adr1  "adr2, 訡 ᫨ f=0.  b35-1
( "adr1 "adr2 -- f ) 


Word: rmfile
\   䠩 "adr, 訡 ᫨ f=0.
   ( "adr -- f ) 
Word: FileEx?
\  ஢, ᫨ 䠩 "adr ,
\   䠩 ⠢ .	     ( "adr -- f ) 



Group: Read&Write

Word: read
\  ⠥ u1   ⥪饩 樨  䠩   h  dbuf (seg:off). 
\  頥 ᫮  ⮢,  訡 (=0), ᫨ u2<u1, 
\   䠩  ⨣ ᫨誮 ࠭.
  ( dbuf u1 h -- u2 ) 


Word: write
\  뢠 u1 ⮢  dbuf (seg:off)  䠩 h 稭  ⥪饩
\  樨.  頥 ᫮ ᠭ ⮢ u2  訡.
\  ᫨ u2<u1, । .
   ( dbuf n1 h -- n2 ) 


Word: EOF?
\  EOF?  <0, ᫨  ஡    䠩.


Word: ?rwError
\  ஢ઠ 訡 ᫥ 㭪権 ⥭-,
\  롨ࠥ ଠ  DOS १ int 21h, fkt.  59h.
\  ᫨ 訡: Err#>0.   ஢ EndOfFile.	  ( -- )


Word: <@h>
\  ணࠬ, ⠥ ᫮ ⮢,   CX  䠩 h 
\   ⥪ .  Err#>0 , ᫨ 訡.        ( h -- b,n,d ) 


Word: c@h
\  ⠥  b  䠩 h  ⥪饩 樨, 
\  㢥稢 㪠⥫ 䠩.		   ( h -- b ) 


Word: @h
\  ⠥ n  䠩 h  த 㪠⥫ 䠩.     ( h -- n ) 


Word: d@h
\  ⠥  ᫮ d  䠩 h  த 㪠⥫ 䠩.
   		( h -- d ) 
Word: <!h>
\  ணࠬ, 뢠 ᫮ ⮢,  cx  ⥪  䠩 h
\  Err#>0 , ᫨ 訡.
   ( b,n,d h -- )


Word: c!h
\  ࠭  b  䠩 h  ⥪饩 樨
\   த 㪠⥫ 䠩.
   		( b h -- ) 


Word: !h
\  ࠭ ᫮ n  䠩 h  த 㪠⥫ 䠩.
  ( n h -- )


Word: d!h
\  ࠭  ᫮ d  䠩 h  த 㪠⥫ 䠩.
   ( d h -- )


Word: "!h
\  뢠 ப  稪  seg:off   䠩 h  ⥪饩 樨.
   ( seg off h -- )


Word: "@h
\  ⠥ ப  ⥪饩 樨  䠩 h  seg:off,
\   ஢ન .
   ( seg off h -- )



Group: Time&Date

Word: time@
\  롨ࠥ ⥬ ६.
   	( -- hnd sec min h ) 


Word: date@
\  롨ࠥ ⥬ .
 ( -- day month year ) 


Word: "Time
\  ⥬ ६  ப 'hh:mm:ss'.
 ( -- "adr )

Word: "Date
\  ⥬   ப 'dd.mm.yy'.
   ( -- "adr ) 


Word: .Time
\  ⠥ ⥬ ६.


Word: .Date
\  ⠥ ⥬ .


Word: Time0
\  ࠭ ⥪饥 ६  ७ ࢠ ६.



Word: @sec/100

\  DOS 頥 ⥪饥 ६   , ᥪ㭤,   .
\    ⪨ timing-ਮ  ᮢ ⮫쪮  
\  ᥪ㭤,  ᨬ쭮  ࠧ饩 ᯮᮡ (). 
\
\   - , ⥬  , 
\  ⠩  DOS ⮫쪮  18 msec.
   ( -- n )


Word: Seconds
\  㭤 ⠩ ⥬.	   ( -- u )


Word: Now
\  砫 ணࠬ ᨭ஭樨.


Word: Timeout?
\   ⨭, ᫨ u   ᥪ㭤 ।   NOW.
   ( u -- f )


Word: MSec
\   u ᥪ㭤 (18 msec ।񭭮).
    ( u -- ) 


Word: 1Sec
\   1 ᥪ㭤.
Group: Memory

Word: MoreMemory
Text: MoreMemory 
騥 ᫮ ᯮ DOS-堭 । ࠭⢠ 
  १ࢨ஢ ணࠬ .


Word: malloc
\  । u ࠣ䮢     ᯮ짮 ਪ 
\  ணࠬ,   ᥣ  true ,  ⮫쪮 false.
  ( u -- seg true | false ) 


Word: mfree
\  頥 ।   ᥣ seg  DOS, 
\  err#=0  ᫨ ok.	   ( seg -- err# )



Group: Arrays

Word: Arrays
Text: Arrays 
 ⨯   ஡ ࠭ ᮢ 
묨 ( ᮢ ??-)    ᮮ饭. Holon 
ॠ ᨢ ꥪ   -ࠨ᪮ . 
   MATRIX( i j ).  襡⢮ 믮 ᫮ ).


Word: Arrays-2
Text: Arrays-2 
 ᨢ   ࠫ,  横, ꥪ,  
ᨢ.  Holon ਭ ᫥騥 ࠦ:

m( 1 2 )                      \   頥 element 1 2  m(
m( i j ) add m( j i )     \   i j   横
33 is m( x y )             \   x,y  楫᫥ ꥪ



Word: Arrays-3
Text: Arrays-3 
  ।  ⨯ ᨢ, ᯮ 堭 ArrayType:. 
 ਫ ⨯ ।  ஢    
楫᫥묨 ⠬.    ७  ᨢ 
 ᥫ  ᨢ  饩 ⮩.
।  ஢  ਬ,   - ⮩ , ⮡ 
 ஢ ।  ᫮, ஥ 頥  .
Word: ArrayType:
\  । ஢    ࠨ᪮ : 
\  DATA( i .. )


Word: )
\  稢 ஢  ,  믮  
\   ⮤,  ਬ  ஢  
\   .   ᯮ짮   n- ;
\   饭  <obj>  <method>.


Word: vadr
\  ⠢   i-⮣ 楫᫥    obj.
   ( i obj -- adr ) 


Word: @v
\  ⠢ 祭  i-⮣ 楫᫥    obj.
 ( i obj -- n )


Word: !v
\  ࠭ n  i-⮬  obj.
   ( n i obj -- ) 


Word: +!v
\    n  i-⮬  obj.
  	( n i obj -- ) 


Word: vPrint
\  ⠥    obj.  뢠  : print V( )
( obj -- )


Word: Vector
\  । +n ࠧ .		 ( +n -- ) 


Word: xx(
\   .
10 Vector xx(


Word: TestXX
\   ᯮ짮 .   ⠪ ஢   
\   ப  ०  (Ctl+F4).
: TestXX xx( 3 )  33 is xx( 3 )  xx( 3 )  22 add xx( 3 )  xx( 3 )  ;

Word: mij
\  ⠢  adr  i j  ࠭⢥   obj.
   ( i j obj -- adr )


Word: @m
\  롨ࠥ   i j.
  ( i j obj -- n ) 


Word: !m
\  ࠭ n    i j.
 ( n i j obj -- ) 


Word: +!m
\   n    i j.
( n i j obj -- ) 


Word: mPrint
\  ⠥    obj. 
\  뢠  :  print m( ) 
( obj -- )


Word: Matrix
\  ।  ࠧ஬ m*n.
( m n -- ) 



Word: mm(
\  ।  2*4.
\  ᪠: ᫥ ࠭⢮    F6=Code.
2 4 Matrix mm(



Word: TestMM
\   ᨢ mm( i j ) 㢥稢騬 ᫠.
\  ᪠:  ᬮ ࠭⢮  mm( 
\    F6=Code. 
\  ࠩ ᫠   ப.

:  TestMM
2  0  do   4  0  do  j  4  *  i  +  is  mm( j i )  loop  loop   ;


Group: Stacks


Word: Stacks
Text: Stacks 
 쭥訩 ਬ ꥪ⮢,  ⨯ ⥪  16-ࠧ來 
⮢.  ⥪   ᯮ짮, ਬ  ࠩ 
ࠢ .


Word: PopMsg
\  饭  訡  ⪠ ᥪ । ⥪ 
\  ᤥ ࠨ묨  ᯥ᪮ ⨯ ⥪  ⥪饬 
\  ᯮ짮.



Word: PushMsg


Word: SEmpty
:  SEmpty  ."  Stack empty"   ;


Word: SFull
:  SFull  ."  Stack overflow"   ;


Word: DefaultStackMsg


Word: PopS
\  ⮤,  ⠫ 祭  ⥪ ꥪ.
  ( obj -- x )


Word: PushS
\  頥  x   ⥪ ꥪ.
   ( x obj -- )


Word: InitS
\  樠 ⥪ ꥪ.
   ( obj -- )


Word: PrintS
\  ⠥ ᮤন ⥪.
   ( obj -- )


Word: Stack
\  । ꥪ ⥪  ࠭⢮  u 16-⮢ ⮢.
\  | max | index |..data..| 
 ( u -- ) 


Word: aStack
\  ਬ ⥪  10 .
\  [ᯮ짮: 111 push aStack, 222 push aStack, print aStack,   ..]
  10  Stack  aStack




Group: Screenstack


Word: ScreenStack
\   - ⮩    ࠭  ࠭. 
\  ࠭ ⥪ ᮤন 㪠⥫  । .



Word: ScreenBase
\    ணࠬ  뫨   뢠 ࠧ - 
\  ०,   ᫮  ᫮.
\  $B800 ⨬   ⥪ ० 2  3
\  (梥  梥⭮ ⥪).
   ( -- seg off )



Word: ScreenSize
\   - ࠧ  ⥪⮢ ࠭.
4000  integer  ScreenSize



Word: SaveScreen
\  ࠭ ⥪騩  ࠭  ,
\   । - (freshly).



Word: Restorescreen
\  롨ࠥ ᠬ  ࠭ -࠭  ᢮ 
\   । .

Group: Interrupts

Word: GetIntVec
\  롨ࠥ ⥪騩  뢠 u.
  ( u -- seg off ) 


Word: SetIntVec
\  ⠭  뢠 u, ⮡ 맢   seg:off.
  ( seg off u -- ) 


Word: sti
\  ⠭ (⨬) 뢠.
\  ᯮ  ᫮ .


Word: cli
\  頥 ( 㯭묨) 뢠.


Word: CtlBrk
\   ᯮ㥬 <the control break> 뢠, ⮡ ⠭ 
\  ࠢ  ணࠬ, <襩>  横. 뢠 㢥稢 
\  ६ BRK?,  ஢७ ᥬ ᫮ ࠢ ⮪. 
\  6ah-2 Label.


Word: SetCtlBrk
\  ⠭ ࠩ  뢠.



Group: CoroutineSwitching

Word: doHalt
\   ணࠬ tHalt 㯭  ᫮ . 
\  tHalt 稢 ணࠬ, ࠭ ⥪饥 ﭨ   
\  ᭮   頥 to the host. 


Word: CurXY
\  ६  ࠭ ⥪饩 樨  x,y


Word: Halt
\  ࠭ ࠭  頥     doHalt.
\  ᫨   tab   , 
\  ணࠬ 뢠 (resets) ࠭  த.
Group: Tasking


Word: Tasking

Text: Tasking
Tasking  ࠫ쭮 믮 ᫮ ணࠬ. 
 ᮤন <task block> ( )  <task area> ( ).
  㪠뢠  ᫮ ணࠬ, ஥  饥 ६ 
믮 by the task.

 ணࠬ   ,     ᠬ   
  易  㣨 ᫮ ணࠬ.
  (the task block)  㪠뢠    (task area), 
  ⨢஢. 

  ᮤন  ଠ  :  
⥪   ,  ६ 짮⥫ ( 㪠⥫ 
,  믮 ४祭  ᫥ ).  
  -  ᥣ ⥪.



Word: TaskObjects

Text: TaskObjects 
 ନ஢  ꥪ,  ਭ ᮮ饭: 
is, start, stop,  continue.
  ᯮᮡ  楤  :
-  ' Prog is Task
-  Make Task Prog




Word: theTask
\  뢠  ⥪騩  .



Word: Area
\  롨ࠥ   (ᥣ ⥪)  theTask.
\       뢠  짮⥫.
   ( -- up ) 



Word: Area!
\  ࠭ n  ᬥ饭 u   .
   ( n u -- ) 

Word: InitArea
\  ⠭   of theTask   .




Word: GetArea
\  । 512 ⮢    , ᫨ 㯭.
   ( -- seg )




Word: LinkArea
\  ࠭ 㪠⥫  ⥪騩 ᥣ      
\   뢠    楯窮   ⨢ .

     :  LinkArea   ( seg -- ) 
dup  theTask  4  +  !        \  㪠⥫   taskblock 
ss:  0  @l   over  0  !l       \  뢠   ᫥饩 祩 
ss:  0  !l                     \  뢠 ⥪   
;




Word: BuildArea
\  ନ   .




Word: tStart
\  稭 theTask.




Word: tStop
\  ⠭ theTask.




Word: tContinue
\  ஡㦤 theTask. 
\  ᫨ ip (=si)    㪠뢠  ᬥ饭 4  taskblock, 
\   訫    १饭.

Word: Task

\      砥  . 直 ࠧ,   
\   ᮢ, ६ theTask 㪠뢠  taskblock.

ObjectType:  Task 
Data:   tHalt  integer,         \  xt of taskingroutine (init: Halt)
       	 tHalt  integer,         \  ਩ ମ 
	 0  integer,              \   , ⠭  start 
    Methods:  noop  !  tstart  tstop  tcontinue 
  Messages:  get  is  start  stop  continue






Group: Taskkeys


Word: Task&Keys
Text: Task&Keys
 㤭  । ࠢ   ᫮ Switch. 
襥 ६ ४ --  ६   짮⥫. 
⮬  ।塞  ᨨ of Key ,   ᮤঠ 
४⥫. 



Word: TaskKey?
: TaskKey?
Switch  bioskey?  ;



Word: TaskKey
: TaskKey 
begin  TaskKey?  until   bioskey   ;



Word: TaskKeys
\  ⨢   ४祭 .
: TaskKeys 
make  key  TaskKey 
make  key?  TaskKey?   ;





