GophHub - zajo/appler/src/KBDSETUP.ASM


Raw File

    1	;  _____________________________________________
    2	; |                                             |
    3	; |  Project:   APPLER                          |
    4	; |  File:      KBDSETUP.ASM                    |
    5	; |  Compiler:  16-bit TASM (2.5)               |
    6	; |                                             |
    7	; |  Subject:   Keyboard Setup Utility          |
    8	; |                                             |
    9	; |  Author:    Emil Dotchevski                 |
   10	; |_____________________________________________|
   11	
   12	                include GLOBALS.INC
   13	                include INTERFAC.INC
   14	                include CONIO.INC
   15	
   16	KBDsetup        segment public
   17	                assume  cs:KBDsetup,ds:KBDsetup,es:Keyboard
   18	
   19	GetLineParams   GL_ParamStruc  <?,0,1,1,5,0,0,20h,40h,2*80,?,?,0Bh,1,0,GetLineUser>
   20	ScreenIOParams  SIO_ParamStruc <1,KBDsetup,0,0,offset Screen,seg Screen,1,0,1,1>
   21	GetKeyParams    RK_ParamStruc  <1,Fkey,0,0,0,?,ShowAll,0>
   22	
   23	KBDSetupInInit  proc    far
   24	                cli
   25	                push    ax ds es
   26	                mov     ax,Emulate
   27	                mov     es,ax
   28	                assume  es:Emulate
   29	                mov     al,es:[C000]
   30	                mov     cs:KeyPressed,al
   31	                mov     es:[C000],0
   32	                assume  ds:CONio
   33	                mov     ax,CONio
   34	                mov     ds,ax
   35	                mov     GL_ParamsOfs,  offset GetLineParams
   36	                mov     GL_ParamsSeg,  seg    GetLineParams
   37	                mov     SIO_ParamsOfs, offset ScreenIOParams
   38	                mov     SIO_ParamsSeg, seg    ScreenIOParams
   39	                mov     RK_ParamsOfs,  offset GetKeyParams
   40	                mov     RK_ParamsSeg,  seg    GetKeyParams
   41	                push    cs
   42	                pop     ds
   43	                assume  ds:KBDsetup
   44	                mov     ax,Keyboard
   45	                mov     es,ax
   46	                assume  es:Keyboard
   47	                mov     ax,OldKeys
   48	                mov     es:k_Table,ax
   49	                pop     es ds ax
   50	                call    UnSetBreaks
   51	                sti
   52	                ret
   53	KBDSetupInInit  endp
   54	
   55	KeyPressed      db      0
   56	OldKeys         dw      offset Keyboard:k_KbdSetupTable
   57	KBDSetupOutInit proc    far
   58	                cli
   59	                push    ax ds es
   60	                push    cs
   61	                pop     ds
   62	                mov     ax,Keyboard
   63	                mov     es,ax
   64	                assume  es:Keyboard
   65	                mov     ax,es:k_Table
   66	                mov     OldKeys,ax
   67	                mov     ax,Emulate
   68	                mov     es,ax
   69	                assume  es:Emulate
   70	                mov     al,KeyPressed
   71	                mov     es:[C000],al
   72	                mov     ax,seg T_Iflags
   73	                mov     es,ax
   74			assume  es:seg T_Iflags
   75	                mov     byte ptr es:T_Iflags,00000010b
   76	                pop     es ds ax
   77			call    AppleKeysOn
   78	                call    SetBreaks
   79	                ret
   80	KBDSetupOutInit endp
   81	
   82	                assume  cs:KBDsetup,ds:KBDsetup,es:Keyboard
   83	
   84	KBD_Keys        db      05h,06h,07h,08h,01h,02h,0Ah,18h,0Ch
   85	KBD_Procs       dw      KBD_Left,KBD_Right,KBD_Up,KBD_Down,KBD_Home,KBD_End,KBD_Clear,KBD_Enter,KBD_Esc
   86	
   87	KBDsetupRET:    push    cs
   88	                pop     ds
   89	                mov     ax,Keyboard
   90	                mov     es,ax
   91	KBDloop:        mov     cs:ActiveFlags,0000000000001000b
   92	                mov     FkeysFlags,0000111111b
   93	                mov     SA_Active,0
   94	                mov     ShowASCII?,0
   95	                mov     es:k_Table,offset k_KbdSetupTable
   96	                mov     ScreenIOparams.CursorFlag,0
   97	                mov     SA_MesFlag,1
   98	                call    ReadKey
   99	                mov     SA_MesFlag,0
  100	                mov     es:k_Table,offset k_DebugTable
  101	                mov     ShowASCII?,1
  102	                xor     bx,bx
  103	                mov     bl,ah
  104	                mov     SA_Active,bx
  105	                mov     si,es:k_Shifts
  106	                mov     ST_Shifts,si
  107	                mov     cs:ActiveFlags,0000000000010000b
  108	                call    KBD_Home
  109	                xchg    si,bx
  110	                call    get_table_ofs
  111	                mov     bx,es:k_AppleTable[bx]
  112	                mov     bl,es:[si][bx]
  113	                cmp     bl,85h
  114	                ja      KBDloop1
  115	KBDloop0:       mov     al,ST_Pos
  116	                cmp     al,bl
  117	                je      KBDloop1
  118	                call    KBD_Down
  119	                jmp     KBDloop0
  120	KBDloop1:       mov     cx,100h
  121	                call    ReadKey
  122	                mov     di,offset KBD_Keys
  123	                mov     cx,offset KBD_Procs- offset KBD_Keys
  124	                call    CalcCommand
  125	                jc      KBDloop1
  126	                shl     di,1
  127	                call    KBD_Procs[di]
  128	                jnc     KBDloop1
  129	                jmp     KBDloop
  130	
  131	KBD_Left:       cmp     ST_Pos,16
  132	                jb      KBD_LeftRet
  133	                sub     ST_Pos,16
  134	                mov     al,ST_Pos
  135	                cmp     al,ST_BegPrint
  136	                jae     KBD_LeftRet
  137	                sub     ST_BegPrint,16
  138	KBD_LeftRet:    clc
  139	                ret
  140	
  141	KBD_Right:      cmp     ST_Pos,86h-16
  142	                jnb     KBD_RightRet
  143	                add     ST_Pos,16
  144	                mov     al,ST_Pos
  145	                sub     al,ST_BegPrint
  146	                cmp     al,16*4
  147	                jb      KBD_RightRet
  148	                add     ST_BegPrint,16
  149	KBD_RightRet:   clc
  150	                ret
  151	
  152	KBD_Up:         cmp     ST_Pos,0
  153	                jz      KBD_UpRet
  154	                dec     ST_Pos
  155	                mov     al,ST_Pos
  156	                cmp     al,ST_BegPrint
  157	                jae     KBD_UpRet
  158	                sub     ST_BegPrint,16
  159	KBD_UpRet:      clc
  160	                ret
  161	
  162	KBD_Down:       cmp     ST_Pos,85h
  163	                jae     KBD_DownRet
  164	                inc     ST_Pos
  165	                mov     al,ST_Pos
  166	                sub     al,ST_BegPrint
  167	                cmp     al,16*4
  168	                jb      KBD_DownRet
  169	                add     ST_BegPrint,16
  170	KBD_DownRet:    clc
  171	                ret
  172	
  173	KBD_Home:       mov     ST_Pos,0
  174	                mov     ST_BegPrint,0
  175	                clc
  176	                ret
  177	
  178	KBD_End:        mov     ST_Pos,07Fh
  179	                mov     ST_BegPrint,4*16
  180	                clc
  181	                ret
  182	
  183	KBD_Clear:      mov     dl,ST_Pos
  184	                mov     ST_Pos,86h
  185	                call    KBD_Enter
  186	                mov     ST_Pos,dl
  187	                ret
  188	
  189	KBD_Enter:      mov     bx,ST_Shifts
  190	                call    get_table_ofs
  191	                mov     si,es:k_AppleTable[bx]
  192	                mov     al,ST_Pos
  193	                mov     bx,SA_Active
  194	                cmp     si,offset Keyboard:a_AltTable
  195	                jne     KBD_Enter1
  196	                mov     es:a_CtrlTable[bx],al
  197	KBD_Enter1:     cmp     si,offset Keyboard:a_CtrlTable
  198	                jne     KBD_Enter2
  199	                mov     es:a_AltTable[bx],al
  200	KBD_Enter2:     mov     es:[si][bx],al
  201	KBD_Esc:        stc
  202	                ret
  203	
  204	
  205	
  206	FkeyProcs       dw      Fkey_F1,Fkey_F2,Fkey_F3,Fkey_F4,Fkey_F5
  207	                dw      Fkey_F6,Fkey_F7,Fkey_F8,Fkey_F9,Fkey_F0
  208	FkeysMasks      dw      1b,10b,100b,1000b,10000b,100000b,1000000b,10000000b,100000000b,1000000000b
  209	Fkey            proc    far
  210	                push    ax bx cx dx si di bp ds es
  211	                push    cs
  212	                pop     ds
  213	                mov     bx,Keyboard
  214	                mov     es,bx
  215	                push    [ActiveFlags]
  216	                push    word ptr [ScreenIOparams.CursorFlag]
  217	                push    word ptr [ScreenIOparams.CursorLen]
  218	                push    word ptr [ScreenIOparams.CursorColor]
  219	                push    [FkeysFlags]
  220	                push    word ptr [SA_MesFlag]
  221	                mov     SA_MesFlag,0
  222	                push    es:k_Table
  223	                mov     es:k_Table,offset k_DebugTable
  224	                xor     bx,bx
  225	                mov     bl,al
  226	                shl     bx,1
  227	                mov     ax,FkeysMasks[bx]
  228	                mov     ScreenIOparams.CursorLen,1
  229	                mov     ScreenIOparams.CursorFlag,1
  230	                test    FkeysFlags,ax
  231	                jz      Fkey_Ret
  232	                mov     FkeysFlags,0000001000b
  233	                call    FkeyProcs[bx]
  234	Fkey_Ret:       push    cs
  235	                pop     ds
  236	                mov     bx,Keyboard
  237	                mov     es,bx
  238	                pop     es:k_Table
  239	                pop     word ptr [SA_MesFlag]
  240	                pop     [FkeysFlags]
  241	                pop     word ptr [ScreenIOparams.CursorColor]
  242	                pop     word ptr [ScreenIOparams.CursorLen]
  243	                pop     word ptr [ScreenIOparams.CursorFlag]
  244	                pop     [ActiveFlags]
  245	                pop     es ds bp di si dx cx bx ax
  246	                ret
  247	Fkey            endp
  248	
  249	
  250	Fkey_F1:        mov     ax,CONio
  251	                mov     es,ax
  252	                assume  es:CONio
  253	                xor     es:DKO_OldBuffFlag,1
  254	                cmp     es:DKO_OldBuffFlag,0
  255	                jnz     Fkey_F1_Ret
  256	                call    ClearBuffer
  257	Fkey_F1_Ret:    ret
  258	                assume  es:Keyboard
  259	
  260	Fkey_F2:        call    Prepare4DOS
  261	                mov     dx,offset Filespec
  262	                xor     cx,cx
  263	                mov     ax,3C01h
  264	                int     21h
  265	                jc      Fkey_F2errorNC
  266	                mov     bx,ax
  267	                mov     dx,offset RecognizeBytes
  268	                mov     cx,5
  269	                mov     ah,40h
  270	                int     21h
  271	                jc      Fkey_F2error
  272	                cmp     ax,cx
  273	                jne     Fkey_F2error
  274	                mov     dx,offset SR_KbdParam
  275	                mov     cx,1
  276	                mov     ah,40h
  277	                int     21h
  278	                jc      Fkey_F2error
  279	                mov     cx,CONio
  280	                mov     ds,cx
  281	                mov     dx,offset CONio:DKO_OldBuffFlag
  282	                mov     cx,1
  283	                mov     ah,40h
  284	                int     21h
  285	                jc      Fkey_F2error
  286	                mov     cx,Keyboard
  287	                mov     ds,cx
  288	                mov     dx,offset Keyboard:a_NormalTable
  289	                mov     cx,6 * 54h
  290	                mov     ah,40h
  291	                int     21h
  292	                jc      Fkey_F2error
  293	                cmp     ax,cx
  294	                jne     Fkey_F2error
  295	                mov     ah,3Eh
  296	                int     21h
  297	                mov     cs:GetKeyParams.RK_ErrPtr,offset SMS_Saved
  298	Fkey_F2ret:     call    SOD4eraperP
  299	                ret
  300	Fkey_F2error:   mov     ah,3Eh
  301	                int     21h
  302	Fkey_F2errorNC: mov     cs:GetKeyParams.RK_ErrPtr,offset SMS_ErrorSave
  303	                jmp     Fkey_F2ret
  304	
  305	
  306	RecognizeBytes  db      0,0FFh,55h,0AAh,0
  307	RecognizeBuffer db      5 dup (0)
  308	Fkey_F3:        call    Prepare4DOS
  309	                mov     dx,offset Filespec
  310	                mov     ax,3D00h
  311	                int     21h
  312	                jc      Fkey_F3errorNC
  313	                mov     bx,ax
  314	                mov     dx,offset RecognizeBuffer
  315	                mov     cx,5
  316	                mov     ah,3Fh
  317	                int     21h
  318	                jc      Fkey_F3error
  319	                cmp     ax,cx
  320	                jne     Fkey_F3error
  321	                push    cs
  322	                pop     es
  323	                mov     si,offset RecognizeBytes
  324	                mov     di,offset RecognizeBuffer
  325	                cld
  326	        rep     cmpsb
  327	                jne     Fkey_F3errorT
  328	                mov     dx,offset SR_KbdParam
  329	                mov     cx,1
  330	                mov     ah,3Fh
  331	                int     21h
  332	                jc      Fkey_F3error
  333	                mov     cx,CONio
  334	                mov     ds,cx
  335	                mov     dx,offset CONio:DKO_OldBuffFlag
  336	                mov     cx,1
  337	                mov     ah,3Fh
  338	                int     21h
  339	                jc      Fkey_F3error
  340	                mov     cx,Keyboard
  341	                mov     ds,cx
  342	                mov     dx,offset Keyboard:a_NormalTable
  343	                mov     cx,6 * 54h
  344	                mov     ah,3Fh
  345	                int     21h
  346	                jc      Fkey_F3error
  347	                cmp     ax,cx
  348	                jne     Fkey_F3error
  349	                mov     ah,3Eh
  350	                int     21h
  351	                call    UpdateKeyboard
  352	                mov     cs:GetKeyParams.RK_ErrPtr,offset SMS_Restored
  353	Fkey_F3ret:     call    SOD4eraperP
  354	                ret
  355	Fkey_F3error:   mov     ah,3Eh
  356	                int     21h
  357	Fkey_F3errorNC: mov     cs:GetKeyParams.RK_ErrPtr,offset SMS_ErrorLoad
  358	                jmp     Fkey_F3ret
  359	Fkey_F3errorT:  mov     ah,3Eh
  360	                int     21h
  361	                mov     cs:GetKeyParams.RK_ErrPtr,offset SMS_Type
  362	                jmp     Fkey_F3ret
  363	
  364	Fkey_F4:        call    GoAppleII
  365	                ret
  366	
  367	FkeyF5_Keys     db      7,8,5,6,18h,0Ch
  368	FkeyF5_Procs    dw      FkeyF5_Up,FkeyF5_Down,FkeyF5_Left,FkeyF5_Right,FkeyF5_Enter,FkeyF5_Esc
  369	Fkey_F5:        mov     ActiveFlags,1
  370	FkeyF5Loop:     call    ReadKey
  371	                mov     di,offset FkeyF5_Keys
  372	                mov     cx,offset FkeyF5_Procs- offset FkeyF5_Keys
  373	                call    CalcCommand
  374	                jc      FkeyF5Loop
  375	                shl     di,1
  376	                mov     al,SR_KbdParam
  377	                mov     ah,al
  378	                call    FkeyF5_Procs[di]
  379	                mov     SR_KbdParam,al
  380			call    UpdateKeyboard
  381	                jnc     FkeyF5Loop
  382	                ret
  383	
  384	FkeyF5_Up:      and     ah,01100000b
  385	                add     ah,00100000b
  386	                and     ah,01100000b
  387	                and     al,10011111b
  388	                or      al,ah
  389	                clc
  390	                ret
  391	
  392	FkeyF5_Down:    and     ah,01100000b
  393	                sub     ah,00100000b
  394	                and     ah,01100000b
  395	                and     al,10011111b
  396	                or      al,ah
  397	                clc
  398	                ret
  399	
  400	FkeyF5_Left:    inc     ah
  401	                and     ah,00011111b
  402	                and     al,11100000b
  403	                or      al,ah
  404	                mov     di,offset SR_speeds_v
  405	                mov     cx,10
  406			xchg    al,ah
  407	                call    CalcCommand
  408			xchg    al,ah
  409	                jc      FkeyF5_Left
  410	                ret
  411	
  412	FkeyF5_Right:   dec     ah
  413	                and     ah,00011111b
  414	                and     al,11100000b
  415	                or      al,ah
  416	                mov     di,offset SR_speeds_v
  417	                mov     cx,10
  418			xchg    al,ah
  419	                call    CalcCommand
  420			xchg    al,ah
  421	                jc      FkeyF5_Right
  422	                ret
  423	
  424	FkeyF5_Enter:
  425	FkeyF5_Esc:     stc
  426	                ret
  427	
  428	
  429	UpdateKeyboard  proc    far
  430	                pushf
  431	                push    ax
  432	                mov     al,0ADh                 ; Disable Keyboard
  433	                call    K_SendCommand
  434	                jc      UK_Exit
  435	                mov     al,0F3h
  436	                call    K_SendData
  437	                mov     al,cs:SR_KbdParam
  438	                call    K_SendData
  439	UK_Exit:        mov     al,0AEh                 ; Enable Keyboard
  440	                out     64h,al
  441	                pop     ax
  442			popf
  443	                ret
  444	UpdateKeyboard  endp
  445	
  446	
  447	KBD_EXT         db      '.KBD',0
  448	Fkey_F6:        mov     ActiveFlags,0000000000000100b
  449	                mov     FkeysFlags,0000001000b
  450	                mov     GetLineParams.GL_Buffer,offset Filespec
  451	                mov     GetLineParams.GL_Pos,0
  452	                mov     GetLineParams.GL_BegPrint,0
  453	                mov     GetLineParams.GL_MaxLength,99
  454	                mov     GetLineParams.GL_MaxPrint,27
  455	                xor     bx,bx
  456	Seek0_Loop:     cmp     FileSpec[bx],0
  457	                jz      Seek0_Done
  458	                inc     bl
  459	                jmp     Seek0_Loop
  460	Seek0_Done:     mov     GetLineParams.GL_Length,bl
  461	                gotoxy  5,51
  462	                GetLineService _GETLINE
  463	                push    si di
  464	                mov     si,offset KBD_EXT
  465	                mov     di,offset Filespec
  466	                call    AddExt
  467	                pop     di si
  468	                gotoxy  2,0
  469	                mov     GetLineParams.GL_CX,cx
  470	                ret
  471	
  472	Fkey_F7:
  473	Fkey_F8:
  474	Fkey_F9:
  475	Fkey_F0:        ret
  476	
  477	
  478	
  479	
  480	; *******************************************************************
  481	; **                                                               **
  482	; **                                                               **
  483	; **                        S H O W    A L L                       **
  484	; **                                                               **
  485	; **                                                               **
  486	; *******************************************************************
  487	
  488	ActiveFlags     dw      0
  489	ShowAll         proc    far
  490	                cli
  491	                push    ax ds bp
  492	                push    word ptr [ScreenIOparams.CursorColor]
  493	                push    word ptr [ScreenIOparams.CursorLen]
  494	                push    word ptr [ScreenIOparams.CursorFlag]
  495	                push    cs
  496	                pop     ds
  497	                mov     ax,Keyboard
  498	                mov     es,ax
  499	                mov     ScreenIOparams.CursorLen,10
  500	                mov     ScreenIOparams.CursorColor,10h
  501	                mov     ScreenIOparams.CursorFlag,1
  502	                call    ShowRepeat
  503	                call    ShowBuffer
  504	                call    ShowFilespec
  505	                call    ShowAssignment
  506	                call    ShowASCII
  507	                call    ShowFuncKeys
  508	                ScreenIOservice _SHOWLINE
  509	                call    ShowTitle
  510	                call    ShowMessage
  511	                pop     word ptr [ScreenIOparams.CursorFlag]
  512	                pop     word ptr [ScreenIOparams.CursorLen]
  513	                pop     word ptr [ScreenIOparams.CursorColor]
  514	                pop     bp ds ax
  515	                sti
  516	                ret
  517	ShowAll         endp
  518	
  519	
  520	; -- Draw box --------------------------
  521	; Entry:
  522	;  AH  = Active Flag Bit
  523	;  CX  = HTAB & VTAB
  524	;  BX  = Offset of the strings
  525	;  DL  = Hi-light color
  526	;  DH  = Number of lines - 1
  527	; Destroy:
  528	;  AX,BX,CX,DX
  529	DB_CX           dw      ?
  530	DrawBox:        push    ax
  531	                mov     ax,cx
  532	                add     ax,80 * 2
  533	                mov     cs:DB_CX,ax
  534	                pop     ax
  535	                test    ActiveFlags,ax
  536	                mov     ah,7
  537	                jz      DB_ok1
  538	                mov     ah,dl
  539	DB_ok1:         ScreenIOservice _STRINGPRINT
  540	                mov     bx,ScreenIOparams.SP_bx
  541	                dec     dh
  542	                mov     al,dh
  543	                mov     dx,cs:DB_CX
  544	DB_Loop1:       mov     cx,dx
  545	                add     dx,80 * 2
  546	                ScreenIOservice _STRINGPRINT
  547	                dec     al
  548	                jnz     DB_Loop1
  549	                mov     cx,dx
  550	                mov     bx,ScreenIOparams.SP_bx
  551	                ScreenIOservice _STRINGPRINT
  552	                ret
  553	
  554	
  555	ST_StrX         db      '                              APPLER KEYBOARD SETUP                             ',0
  556	ShowTitle:      push    ax bx cx
  557	                gotoxy  1,0
  558	                mov     ah,5Fh
  559	                mov     bx,offset ST_StrX
  560	                ScreenIOservice _STRINGPRINT
  561	                gotoxy  2,0
  562	                xor     ah,ah
  563	                ScreenIOservice _STRINGPRINT
  564	                pop     cx bx ax
  565	                ret
  566	
  567	
  568	SR_Str          db      'ÚRepeat SettingsÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ',0
  569	                db      '³                                 ³ ',0
  570	                db      'ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ',0
  571	SR_str1   db      1,7,'Delay:',0
  572	SR_str2   db      1,7,' ms  Speed: ',0
  573	SR_str3   db      1,7,' ch/s',0
  574	SR_delays       dw      d250,d500,d750,d1000
  575	SR_speeds_v     db      0,1,2,4,8,0Ah,0Dh,10h,14h,1Fh
  576	SR_speeds       dw      s300,s267,s240,s200,s150,s100,s092,s075,s050,s020
  577	d250            db      1,0Bh,' 250',0
  578	d500            db      1,0Bh,' 500',0
  579	d750            db      1,0Bh,' 750',0
  580	d1000           db      1,0Bh,'1000',0
  581	s300            db      1,0Bh,'30.0',0
  582	s267            db      1,0Bh,'26.7',0
  583	s240            db      1,0Bh,'24.0',0
  584	s200            db      1,0Bh,'20.0',0
  585	s150            db      1,0Bh,'15.0',0
  586	s100            db      1,0Bh,'10.0',0
  587	s092            db      1,0Bh,' 9.2',0
  588	s075            db      1,0Bh,' 7.5',0
  589	s050            db      1,0Bh,' 5.0',0
  590	s020            db      1,0Bh,' 2.0',0
  591	SR_KbdParam     db      0
  592	ShowRepeat:     push    ax bx cx dx di
  593	                gotoxy  3,0
  594	                mov     bx,offset SR_Str
  595	                mov     dx,30Eh
  596	                mov     ax,0000000000000001b
  597	                call    DrawBox
  598	                gotoxy  5,2
  599	                mov     bx,offset SR_Str1
  600	                ScreenIOservice _STRINGPRINT
  601	                xor     bx,bx
  602	                mov     bl,SR_KbdParam
  603	                shr     bl,5
  604	                shl     bx,1
  605	                mov     bx,SR_delays[bx]
  606	                ScreenIOservice _STRINGPRINT
  607	                mov     bx,offset SR_str2
  608	                ScreenIOservice _STRINGPRINT
  609	                xor     bx,bx
  610	                mov     al,SR_KbdParam
  611	                and     al,00011111b
  612	                push    cx
  613	                mov     di,offset SR_Speeds_v
  614	                mov     cx,10
  615	                call    CalcCommand
  616	                pop     cx
  617	                shl     di,1
  618	                mov     bx,SR_speeds[di]
  619	                ScreenIOservice _STRINGPRINT
  620	                mov     bx,offset SR_str3
  621	                ScreenIOservice _STRINGPRINT
  622	                pop     di dx cx bx ax
  623	                ret
  624	
  625	
  626	SB_Str          db      'ÚBufferÄÄÄÄ¿ ',0
  627	                db      '³          ³ ',0
  628	                db      'ÀÄÄÄÄÄÄÄÄÄÄÙ ',0
  629	SB_Enabled      db      1,0Bh,'Enabled',0
  630	SB_Disabled     db      1,0Bh,'Disabled',0
  631	ShowBuffer:     push    ax bx cx dx es
  632	                gotoxy  3,36
  633	                mov     bx,offset SB_Str
  634	                mov     dx,30Eh
  635	                mov     ax,0000000000000010b
  636	                call    DrawBox
  637	                gotoxy  5,38
  638	                mov     ax,CONio
  639	                mov     es,ax
  640	                assume  es:CONio
  641	                test    es:DKO_OldBuffFlag,1
  642	                mov     bx,offset SB_Disabled
  643	                jz      SB_1
  644	                mov     bx,offset SB_Enabled
  645	SB_1:           ScreenIOservice _STRINGPRINT
  646	                pop     es dx cx bx ax
  647	                ret
  648	                assume  es:Keyboard
  649	
  650	
  651	SF_Str          db      'ÚFilenameÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿',0
  652	                db      '³                             ³',0
  653	                db      'ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ',0
  654	Filespec        db      'APPLER.KBD',100 dup (0)
  655	ShowFilespec:   push    ax bx cx dx
  656	                gotoxy  3,49
  657	                mov     bx,offset SF_Str
  658	                mov     dx,30Eh
  659	                mov     ax,0000000000000100b
  660	                call    DrawBox
  661	                xor     dl,dl
  662	                xchg    Filespec[27],dl
  663	                mov     bx,offset Filespec
  664	                gotoxy  5,51
  665	                mov     ah,0Bh
  666	                ScreenIOservice _STRINGPRINT
  667	                xchg    Filespec[27],dl
  668	                pop     dx cx bx ax
  669	                ret
  670	
  671	
  672	SA_Str          db      'ÚKeyboard MapÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿',0
  673	                db      '³                                                                              ³',0
  674	                db      'ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ',0
  675	SA_Message      db      1,0Fh,'Press a key to remap',0
  676	SA_Keyboard     db      'ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿  ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿',0
  677	                db      '³  ³³  ³³  ³³  ³³  ³³  ³³  ³³  ³³  ³³  ³³  ³³  ³³  ³³  ³³  ³  ³  ³³  ³³  ³³  ³',0
  678	                db      'ÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙ  ÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙ',0
  679	                db      'ÚÄÄÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄÄÄ¿  ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿',0
  680	                db      '³    ³³  ³³  ³³  ³³  ³³  ³³  ³³  ³³  ³³  ³³  ³³  ³³  ³³    ³  ³  ³³  ³³  ³³  ³',0
  681	                db      'ÀÄÄÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀ¿   ³  ÀÄÄÙÀÄÄÙÀÄÄÙ³  ³',0
  682	                db      'ÚÄÄÄÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿³   ³  ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿³  ³',0
  683	                db      '³     ³³  ³³  ³³  ³³  ³³  ³³  ³³  ³³  ³³  ³³  ³³  ³³  ³³   ³  ³  ³³  ³³  ³³  ³',0
  684	                db      'ÀÄÄÄÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÄÙ  ÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙ',0
  685	                db      'ÚÄÄÄÄÄÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄÄÄÄÄÄÄÄ¿  ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿ÚÄÄ¿',0
  686	                db      '³       ³³  ³³  ³³  ³³  ³³  ³³  ³³  ³³  ³³  ³³  ³³         ³  ³  ³³  ³³  ³³  ³',0
  687	                db      'ÀÄÄÄÄÄÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÙÀÄÄÄÄÄÄÄÄÄÙ  ÀÄÄÙÀÄÄÙÀÄÄÙ³  ³',0
  688	                db      'ÚÄÄÄÄ¿       ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿        ÚÄÄÄÄ¿  ÚÄÄÄÄÄÄ¿ÚÄÄ¿³  ³',0
  689	                db      '³    ³       ³                               ³        ³    ³  ³      ³³  ³³  ³',0
  690	                db      'ÀÄÄÄÄÙ       ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ        ÀÄÄÄÄÙ  ÀÄÄÄÄÄÄÙÀÄÄÙÀÄÄÙ',0
  691	SA_SpcProcs     dw      SAS_Enter,SAS_Ctrl,SAS_Lshift,SAS_Div,SAS_Rshift,SAS_Caps,SAS_Num
  692	SA_TblPtr       dw      ?
  693	SA_Active       dw      0
  694	SA_MesFlag      db      1
  695	ShowAssignment: push    ax bx cx dx si di
  696	                mov     bx,es:k_Shifts
  697	                call    get_table_ofs
  698	                mov     bx,es:k_AppleTable[bx]
  699	                mov     SA_TblPtr,bx
  700	                gotoxy  7,0
  701	                mov     bx,offset SA_Str
  702	                mov     dx,110Eh
  703	                mov     ax,0000000000001000b
  704	                call    DrawBox
  705	                mov     bx,offset SA_Keyboard
  706	                gotoxy  9,1
  707	                mov     dx,15
  708	                mov     ah,7
  709	SA_Loop1:       ScreenIOservice _STRINGPRINT
  710	                add     cx,2*2
  711	                add     bx,79
  712	                dec     dx
  713	                jnz     SA_Loop1
  714	                mov     bx,offset SA_Message
  715	                gotoxy  8,58
  716	                cmp     SA_MesFlag,0
  717	                jz      SA_Dont1
  718	                ScreenIOservice _STRINGPRINT
  719	SA_Dont1:       mov     si,53h
  720	SA_Loop2:       mov     al,SA_Y[si]
  721	                or      al,al
  722	                jz      SA_Next
  723	                dec     al
  724	                jz      SA_Special
  725	                mov     ah,80 * 2
  726	                mul     ah
  727	                mov     cx,ax
  728	                xor     ax,ax
  729	                mov     al,SA_X[si]
  730	                add     cx,ax
  731	                add     cx,ax
  732	SA_SpecialRet:  mov     bx,SA_TblPtr
  733	                mov     bl,es:[bx][si]
  734	                cmp     bl,85h
  735	                ja      SA_Next
  736	                xor     bh,bh
  737	                add     cx,81*2
  738	                cmp     bl,20h
  739	                mov     ax,0B00h+' '
  740	                jae     SA_NoCtrl
  741	                mov     al,'^'
  742	SA_NoCtrl:      ScreenIOservice _SYMBPRINT
  743	                mov     al,SA_Table[bx]
  744	                ScreenIOservice _SYMBPRINT
  745	SA_Next:        dec     si
  746	                jnz     SA_Loop2
  747	                jmp     SA_Ret
  748	
  749	SA_Special:     xor     bx,bx
  750	                mov     bl,SA_X[si]
  751	                shl     bx,1
  752	                mov     ah,7
  753	                call    SA_SpcProcs[bx]
  754	                jmp     SA_SpecialRet
  755	
  756	SA_Ret:         pop     di si dx cx bx ax
  757	                ret
  758	
  759	SAS_Enter:      mov     bx,SA_TblPtr
  760	                mov     bl,es:[bx][si]
  761	                xor     bh,bh
  762	                gotoxy  21,76
  763	                cmp     bl,20h
  764	                mov     ax,0B00h+' '
  765	                jae     SASE_NoCtrl
  766	                mov     al,'^'
  767	SASE_NoCtrl:    ScreenIOservice _SYMBPRINT
  768	                mov     al,SA_Table[bx]
  769	                ScreenIOservice _SYMBPRINT
  770	                gotoxy  12,56
  771	                ret
  772	
  773	SAS_CtrlStr     db      'Ctrl',0
  774	SAS_Ctrl:       gotoxy  22,2
  775	                mov     bx,offset SAS_CtrlStr
  776	                test    es:k_Shifts,1
  777	                mov     ah,7
  778	                jz      SAS_Ctrl1
  779	                mov     ah,0Fh
  780	SAS_Ctrl1:      ScreenIOservice _STRINGPRINT
  781	                gotoxy  22,56
  782	                ScreenIOservice _STRINGPRINT
  783	                ret
  784	
  785	SAS_ShiftStr    db      'Shift',0
  786	SAS_Lshift:     gotoxy  19,3
  787	                mov     bx,offset SAS_ShiftStr
  788	                test    es:k_Shifts,M_LEFT_SHIFT or M_RIGHT_SHIFT
  789	                mov     ah,7
  790	                jz      SAS_LS1
  791	                mov     ah,0Fh
  792	SAS_LS1:        ScreenIOservice _STRINGPRINT
  793	                ret
  794	
  795	SAS_Rshift:     gotoxy  19,53
  796	                mov     bx,offset SAS_ShiftStr
  797	                test    es:k_Shifts,M_LEFT_SHIFT or M_RIGHT_SHIFT
  798	                mov     ah,7
  799	                jz      SAS_RS1
  800	                mov     ah,0Fh
  801	SAS_RS1:        ScreenIOservice _STRINGPRINT
  802	                ret
  803	
  804	SAS_CapsStr     db      'Caps',0
  805	SAS_Caps:       gotoxy  16,2
  806	                mov     bx,offset SAS_CapsStr
  807	                test    es:k_Shifts,M_CAPS_LOCK
  808	                mov     ah,7
  809	                jz      SAS_Caps1
  810	                mov     ah,0Fh
  811	SAS_Caps1:      ScreenIOservice _STRINGPRINT
  812	                ret
  813	
  814	SAS_NumStr      db      'NL',0
  815	SAS_Num:        gotoxy  10,64
  816	                mov     bx,offset SAS_NumStr
  817	                test    es:k_Shifts,M_NUM_LOCK
  818	                mov     ah,7
  819	                jz      SAS_Num1
  820	                mov     ah,0Fh
  821	SAS_Num1:       ScreenIOservice _STRINGPRINT
  822	                ret
  823	
  824	SAS_Div:        mov     bx,SA_TblPtr
  825	                mov     bl,es:[bx][si]
  826	                xor     bh,bh
  827	                gotoxy  10,68
  828	                cmp     bl,20h
  829	                mov     ax,0B00h+' '
  830	                jae     SASD_NoCtrl
  831	                mov     al,'^'
  832	SASD_NoCtrl:    ScreenIOservice _SYMBPRINT
  833	                mov     al,SA_Table[bx]
  834	                ScreenIOservice _SYMBPRINT
  835	                gotoxy  18,46
  836	                ret
  837	
  838	
  839	;                        0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
  840	SA_X            db       0,01,05,09,13,17,21,25,29,33,37,41,45,49,57, 2 ; 00
  841	                db      07,11,15,19,23,27,31,35,39,43,47,51, 0, 1,08,12 ; 10
  842	                db      16,20,24,28,32,36,40,44,48,52, 2,53,10,14,18,22 ; 20
  843	                db      26,30,34,38,42, 3, 4,71, 0,28, 5, 0, 0, 0, 0, 0 ; 30
  844	                db       0, 0, 0, 0, 0, 6, 0,63,67,71,75,63,67,71,75,63 ; 40
  845	                db      67,71,65,71                                     ; 50
  846	
  847	;                        0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
  848	SA_Y            db       0,09,09,09,09,09,09,09,09,09,09,09,09,09,09,12 ; 00
  849	                db      12,12,12,12,12,12,12,12,12,12,12,12, 1, 1,15,15 ; 10
  850	                db      15,15,15,15,15,15,15,15,15,15, 1,09,18,18,18,18 ; 20
  851	                db      18,18,18,18,18, 1, 1,09, 0,21, 1, 0, 0, 0, 0, 0 ; 30
  852	                db       0, 0, 0, 0, 0, 1, 0,12,12,12,09,15,15,15,14,18 ; 40
  853	                db      18,18,21,21                                     ; 50
  854	
  855	;                        0123456789ABCDEF0123456789ABCDEF
  856	SA_Table        db      '@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_' ; 00
  857	                db      'ú!"#$%&''()*+,-./0123456789:;<=>?'; 20
  858	                db      '@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_' ; 40
  859	                db      '`abcdefghijklmnopqrstuvwxyz{|}~±' ; 60
  860	                db      1,2,1Bh,1Ah,18h,19h                ; 80
  861	
  862	
  863	ST_Str          db      'ÚÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄ¿',0
  864	                db      '³            ³            ³            ³            ³',0
  865	                db      'ÀÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÙ',0
  866	ST_Str1         db      1,0Eh,'³',1,7,' ASCII Char ',1,0Eh,'³',1,7,' ASCII Char ',1,0Eh,'³',1,7,' ASCII Char ',1,0Eh,'³',1,7,' ASCII Char ',1,0Eh,'³',0
  867	ST_Str2         db      1,0Eh,'³',1,7,' ÄÄÄÄÄ ÄÄÄÄ ',1,0Eh,'³',1,7,' ÄÄÄÄÄ ÄÄÄÄ ',1,0Eh,'³',1,7,' ÄÄÄÄÄ ÄÄÄÄ ',1,0Eh,'³',1,7,' ÄÄÄÄÄ ÄÄÄÄ ',1,0Eh,'³',0
  868	ST_Mes0         db      1,2Fh,'                                                   ',0
  869	ST_Mes1         db      1,2Fh,'Select new char to assign to <',0
  870	ST_Mes2         db      1,2Fh,'>',0
  871	
  872	ST_ShiftTable   dw      ST_None
  873	                dw      ST_Ctrl
  874	                dw      ST_Ctrl
  875	                dw      ST_Caps
  876	                dw      ST_CapsShift
  877	                dw      ST_Shift
  878	                dw      ST_Num
  879	ST_None         db      0
  880	ST_Ctrl         db      'Ctrl+',0
  881	ST_Shift        db      'Shift+',0
  882	ST_Caps         db      'Caps+',0
  883	ST_CapsShift    db      'Caps+Shift+',0
  884	ST_Num          db      'Num+',0
  885	
  886	ShowASCII?      db      0
  887	ST_Shifts       dw      0
  888	ST_BegPrint     db      0
  889	ST_Pos          db      0
  890	ShowASCII:      push    ax bx cx dx si di
  891	                cmp     ShowASCII?,0
  892	                jnz     ST_Go
  893	                jmp     ST_Ret1
  894	ST_Go:          mov     FkeysFlags,0000001000b
  895	                gotoxy  4,14
  896	                mov     bx,offset ST_Str
  897	                mov     dx,130Eh
  898	                mov     ax,0000000000010000b
  899	                call    DrawBox
  900	                gotoxy  5,14
  901	                mov     bx,offset ST_Str1
  902	                ScreenIOservice _STRINGPRINT
  903	                gotoxy  6,14
  904	                mov     bx,offset ST_Str2
  905	                ScreenIOservice _STRINGPRINT
  906	                gotoxy  7,18
  907	                mov     si,cx
  908	                mov     di,cx
  909	                xor     bx,bx
  910	                mov     bl,ST_BegPrint
  911	                mov     dl,4
  912	ST_Loop0:       mov     dh,16
  913	ST_Loop:        mov     al,bl
  914	                cmp     al,85h
  915	                ja      ST_Ret
  916	                mov     ah,7
  917	                ScreenIOservice _BYTEPRINT
  918	                add     cx,6
  919	                cmp     bl,20h
  920	                mov     al,' '
  921	                jae     ST_NoCtrl
  922	                mov     al,'^'
  923	ST_NoCtrl:      mov     ah,0Fh
  924	                ScreenIOservice _SYMBPRINT
  925	                mov     al,SA_Table[bx]
  926	                ScreenIOservice _SYMBPRINT
  927	                cmp     bl,ST_Pos
  928	                je      ST_ShowCursor
  929	ST_ShowCursorR: inc     bx
  930	                add     si,80*2
  931	                mov     cx,si
  932	                dec     dh
  933	                jnz     ST_Loop
  934	                add     di,26
  935	                mov     si,di
  936	                mov     cx,di
  937	                dec     dl
  938	                jnz     ST_Loop0
  939	ST_Ret:         gotoxy  23,15
  940	                mov     bx,offset ST_Mes0
  941	                ScreenIOservice _STRINGPRINT
  942	                gotoxy  23,15
  943	                mov     bx,offset ST_Mes1
  944	                ScreenIOservice _STRINGPRINT
  945	                mov     bx,ST_Shifts
  946	                call    get_table_ofs
  947	                mov     bx,ST_ShiftTable[bx]
  948	                mov     ah,2Eh
  949	                ScreenIOservice _STRINGPRINT
  950	                mov     bx,SA_Active
  951	                mov     al,ST_Table[bx]
  952	                cmp     al,20h
  953	                jbe     ST_Special
  954	                ScreenIOservice _SYMBPRINT
  955	ST_SpecRet:     mov     bx,offset ST_Mes2
  956	                ScreenIOservice _STRINGPRINT
  957	ST_Ret1:        pop     di si dx cx bx ax
  958	                ret
  959	
  960	ST_ShowCursor:  push    cx
  961	                sub     cx,9*2
  962	                ScreenIOservice _CALCXY
  963	                mov     cs:ScreenIOparams.CursorColor,40h
  964	                ScreenIOservice _SHOWCURSOR
  965	                pop     cx
  966	                jmp     ST_ShowCursorR
  967	
  968	ST_Special:     xor     bx,bx
  969	                mov     bl,al
  970	                shl     bx,1
  971	                mov     bx,ST_Specials[bx]
  972	                ScreenIOservice _STRINGPRINT
  973	                jmp     ST_SpecRet
  974	
  975	ST_Specials     dw      STS_Esc,STS_BS,STS_Tab,STS_Enter,STS_Space,STS_Num
  976	                dw      STS_Home,STS_Up,STS_PgUp,STS_Left,STS_Cntr,STS_Right
  977	                dw      STS_End,STS_Down,STS_PgDn,STS_Ins,STS_Del
  978	STS_Esc         db      'Esc',0
  979	STS_BS          db      'BackSpace',0
  980	STS_Tab         db      'Tab',0
  981	STS_Enter       db      'Enter',0
  982	STS_Space       db      'Space',0
  983	STS_Num         db      'Num',0
  984	STS_Home        db      'Home',0
  985	STS_Up          db      'Up',0
  986	STS_PgUp        db      'PgUp',0
  987	STS_Left        db      'Left',0
  988	STS_Cntr        db      'Center',0
  989	STS_Right       db      'Right',0
  990	STS_End         db      'End',0
  991	STS_Down        db      'Down',0
  992	STS_PgDn        db      'PgDn',0
  993	STS_Ins         db      'Ins',0
  994	STS_Del         db      'Del',0
  995	
  996	ST_Table        db      0,0,'1234567890-=',1
  997	                db      2,'QWERTYUIOP[]',3
  998	                db      0,'ASDFGHJKL;''`'
  999	                db      0,'\ZXCVBNM,./',0,'*'
 1000	                db      0,4,0,0,0,0,0,0,0,0,0,0,0
 1001	                db      5,0,6,7,8,'-',9,10,11,'+',12,13,14,15,16
 1002	
 1003	
 1004	
 1005	SFK_Str         db      '1       2       3       4       5       '
 1006	                db      '6       7       8       9      10       ',0
 1007	FkeysFlags      dw      0000111111b
 1008	SFK_FkeysMain   dw      SFK_Buffer, SFK_Save,   SFK_Load,     SFK_Cont,    SFK_Repeat
 1009	                dw      SFK_Name  , SFK_None  , SFK_None  ,   SFK_None,    SFK_None
 1010	SFK_None        db      '      ',0
 1011	SFK_Cont        db      'Apple ',0
 1012	SFK_Load        db      'Load  ',0
 1013	SFK_Save        db      'Save  ',0
 1014	SFK_Repeat      db      'Repeat',0
 1015	SFK_Buffer      db      'Buffer',0
 1016	SFK_Assign      db      'Assign',0
 1017	SFK_Name        db      'Name  ',0
 1018	
 1019	ShowFuncKeys:   push    ax bx cx dx si
 1020	                gotoxy  19h,0
 1021	                mov     bx,offset SFK_Str
 1022	                mov     ah,7
 1023	                ScreenIOservice _STRINGPRINT
 1024	                gotoxy  19h,1
 1025	                xor     si,si
 1026	                mov     dx,cs:FkeysFlags
 1027	SFK_Loop0:      shr     dx,1
 1028	                mov     ah,58h
 1029	                jnc     SFK_Next0
 1030	                mov     ah,5Fh
 1031	SFK_Next0:      mov     bx,cs:SFK_FkeysMain[si]
 1032	                ScreenIOservice _STRINGPRINT
 1033	                add     cx,4
 1034	                add     si,2
 1035	                cmp     si,20
 1036	                jb      SFK_Loop0
 1037	                pop     si dx cx bx ax
 1038	                ret
 1039	
 1040	
 1041	
 1042	SMS_Restored    db      ' Keyboard setup successfully restored',0
 1043	SMS_Saved       db      '    Keyboard setup successfully saved',0
 1044	SMS_ErrorLoad   db      1,0Ch,'       Error restoring keyboard setup',0
 1045	SMS_ErrorSave   db      1,0Ch,'          Error saving keyboard setup',0
 1046	SMS_Type        db      1,0Ch,'This file isn''t a keyboard setup file',0
 1047	ShowMessage:    cmp     GetKeyParams.RK_ErrPtr,0
 1048	                jz      SMS_Ret
 1049	                push    ax bx cx dx
 1050	                mov     bx,GetKeyParams.RK_ErrPtr
 1051	                mov     ah,0Ah
 1052	                gotoxy  8,41
 1053	                ScreenIOservice _STRINGPRINT
 1054	                pop     dx cx bx ax
 1055	SMS_Ret:        ret
 1056	
 1057	
 1058	
 1059	
 1060	                assume  es:Emulate
 1061	
 1062	Upcase:         cmp     al,'A'
 1063	                jb      UPCSret
 1064	                cmp     al,'Z'
 1065	                ja      UPCSret
 1066	                or      al,20h
 1067	UPCSret:        ret
 1068	
 1069	CalcCommand:    push    ax bx cx es             ; Returns number of a command
 1070	                push    cs                      ; Input:
 1071	                pop     es                      ;   di -> offset Commands
 1072	                call    Upcase                  ;   al -> search command
 1073	                cld                             ;   cx -> commands count
 1074	                mov     bx,di
 1075	                repne   scasb                   ; Output:
 1076	                stc                             ;   di <- Number of the command
 1077	                jne     CC_end                  ;   cf <- 1 if not found
 1078	                sub     di,bx
 1079	                dec     di
 1080	                clc
 1081	CC_end:         pop     es cx bx ax
 1082	                ret
 1083	
 1084	
 1085	
 1086	; -- Hook INT 24h ----------------------
 1087	
 1088	OldFlags        dw      ?
 1089	OldFkeys        dw      ?
 1090	Prepare4DOS:    saveall
 1091	                xor     ax,ax
 1092	                xchg    ax,cs:ActiveFlags
 1093	                mov     cs:OldFlags,ax
 1094	                xor     ax,ax
 1095	                xchg    ax,cs:FkeysFlags
 1096	                mov     cs:OldFkeys,ax
 1097	                call    ShowAll
 1098	                ScreenIOservice _SHOWSCREEN
 1099	                call    far ptr SystemTINI
 1100	                restoreall
 1101	                ret
 1102	
 1103	
 1104	
 1105	; -- Unhook INT 24h --------------------
 1106	
 1107	SOD4eraperP:    saveall
 1108	                mov     ax,cs:OldFlags
 1109	                mov     cs:ActiveFlags,ax
 1110	                mov     ax,cs:OldFkeys
 1111	                mov     cs:FkeysFlags,ax
 1112	                mov     ax,Emulate
 1113	                mov     es,ax
 1114	                mov     byte ptr [C000],0
 1115	                call    far ptr SystemINIT
 1116	                restoreall
 1117	                ret
 1118	
 1119	
 1120	GetLineUser     proc    far
 1121	                ret
 1122	GetLineUser     endp
 1123	
 1124	
 1125	GoAppleII:      push    ax bx es
 1126	                call    ShowAll
 1127	                ScreenIOservice _SHOWSCREEN
 1128			mov     ax,Emulate
 1129	                mov     es,ax
 1130	                mov     al,C050
 1131	                ScreenIOservice _SetScreen
 1132	                xor     bx,bx
 1133	                xchg    bx,ActiveFlags
 1134	                SwitchToProcess PID_EMULATOR
 1135	                mov     ActiveFlags,bx
 1136	                pop     es bx ax
 1137	                ret
 1138	
 1139	
 1140	KBDsetup        ends
 1141	
 1142			END
 1143	

Generated by GNU Enscript 1.6.6, and GophHub 1.3.