Visual2000 . & .

, Visual Basic

,

© 199x, ,
. c ....


, .

119. API .

, 866 1251, . , API.

, Windows 3.x/95 , DOS Windows, OEM ANSI. Windows. 866 1251 . ( , Microsoft . , , , , ... .)

API OEM- ANSI, . 32- :

CharToOem ANSI OEM ( API/16 AnsiToOem);

OemToChar OEM ANSI (API/16 OemToAnsi);

API 16/32 , . (API/32):

Private Declare Function GetOEMCP Lib "kernel32" () As Long
Private Declare Function GetACP Lib "kernel32" () As Long
Private Declare Function OemToChar Lib "user32" Alias "OemToCharA"
(ByVal lpszSrc As String, ByVal lpszDst As String) As Long

Private Sub Form_Load()
   '      
   OemCP& = GetOEMCP    '  OEM (DOS) 
   AnsiCP& = GetACP     '  ANSI (Windows) 
   Debug.Print OemCP&; AnsiCP&   ' = 866 2151
   '
   '     
   FilePath$ = "russian.txt"
   Open FilePath$ For Input As #1
   Line Input #1, InputStr$
   Print InputStr$
   OutputStr$ = Space$(Len(InputStr$)) '    
   Code& = OemToChar(InputStr$, OutputStr$)  '
   '
   Print Code&: Print InputStr$: Print OutputStr$
   Close #1
End Sub

:

  1. DOS Windows. Windows OSR2, , , 866 1251.

  2. OutputStr$, , OemToChar. ( , , OutputStr$=...), Code& = 0. , Code& = 1. , . : OutputStr$ = Space$(0) OutputStr$ =Space$(Len(InputStr$)) + "fffffff".

  3. , : Code& = OemToChar(InputStr$, InputStr$).

120. .

DOS Windows. , QuickBasic 4.x:

FUNCTION SymChange$ (Text$, NewCode$, OldCode$)
'
'     OldCode$ -> NewCode$:
'    Text$    OldCode$
'       NewCode$
'
'  !
'    :  LEN(NewCode$)=LEN(OldCode$)
'-
     Sym$ = Text$: Ltext% = LEN(Text$)
     IF Ltext% > 0 THEN
       FOR i% = 1 TO Ltext%
         k% = INSTR(OldCode$, MID$(Text$, i%, 1))
         IF k% > 0 THEN 
           MID$(Sym$, i%, 1) = MID$(NewCode$, k%, 1)
         END IF
       NEXT i%
     END IF
     SymChange$ = Sym$
END FUNCTION

FUNCTION RusDosWin$ (Text$, Code%)
'
'   :
'  Code% = 0 -  DOS  Windows
'        = 1 - 
'
'  D$ -      DOS (cp866)
'  W$ -      Windows (cp1251)
'       :
'  ......
'
'============================================
CONST D$ = "_
"
CONST W$ = "_
"
' ============================================
IF Code% = 0 THEN
      RusDosWin$ = SymChange(Text$, W$, D$)
    ELSE
      RusDosWin$ = SymChange(Text$, D$, W$)
    END IF
END FUNCTION
FUNCTION ULrus$ (Text$, Code%)
'
'     :
'   Code% = 0  -   
'         = 1  - 
'         ELSE -   
'   (  UCASE$/LCASE$,    )
'
     CONST Urus$ = ""
     CONST Lrus$ = ""
'
     SELECT CASE Code%
      CASE 0: ULrus$ = SymChange$(Text$, Urus$, Lrus$)
      CASE 1: ULrus$ = SymChange$(Text$, Lrus$, Urus$)
     END SELECT
END FUNCTION

FUNCTION DoubleSpaceDelete$ (Text$)
'
'        Text$
'
  Temp$ = RTRIM$(Text$)
  DO
    Num% = INSTR(Temp$, "  ")  '   
    IF Num% <= 0 THEN EXIT DO
    Temp$ = LEFT$(Temp$, Num%) + MID$(Temp$, Num% + 2)
  LOOP
  DoubleSpaceDelete$ = Temp$
END FUNCTION

FUNCTION StrFilter$ (Text$, Filter$)
'================================================================
'     Text$
'
'   Filter$=CHR$(CodeFilter%)+FilterString$
'      Filter$ -  ,
'     -  / 
'   CodeFilter%=ASC(Filter$)
'      =0 -     Text$,   
'                 - FilterString$
'      =1 -     Text$,  
'                 - FilterString$
'===============================================================
      Temp$ = "": CodeFilter% = ASC(Filter$)
      FOR i% = 1 TO LEN(Text$)
        Sym$ = MID$(Text$, i%, 1)
        IF (SGN(INSTR(2, Filter$, Sym$)) XOR CodeFilter%) <> 0 THEN
          Temp$ = Temp$ + Sym$
        END IF
      NEXT i%
      StrFilter$ = Temp$
END FUNCTION

Basic/DOS ( ) DOS/Windows VB/Win DECLARE.

  1. StrChange$. . , "" "":

    a$ = ""
    b$ = SymChange$(a$, "", "")
    PRINT b$  '  - ""
    

  2. RusDosWin$ ULrus$ StrChange$. DOS Windows , , . DOS Windows ( W$) :

    W$ = "": D$ = ""
    For i = 192 To 255: W$ = W$ + Chr$(i): Next
    For i = 128 To 175: D$ = D$ + Chr$(i): Next
    For i = 224 To 236: D$ = D$ + Chr$(i): Next
    Print W$: Print D$
    

  3. DoubleSpaceDelete$ ( ).

  4. StrFilter$ . , , :

    PhoneNumber$ = "369-76-97"
    CodeFilter% = 0       '  
    FilterString$ = "1234567890"
    Filter$ = CHR$(CodeFilter%) + FilterString$
    NewNumber$ = StrFilter$(PhoneNumber$, Filter$)
    PRINT NewNumber$
    ' : '3697697'
    

121. DOS Windows, .

, Basic DOS, VB/Win. DOS Windows ( ) . , , . : DOS Windows 866 1251 .

DOS VB, , , , . VB/Win, , , 866 1251. , , WinWord: " MS-DOS", " ". , , - , , DOS, Windwos.

, . : Print ", !" . , , , DOS Windows.

, RusDosWin$. , D$ W$ , , . "......" DOS Windows . , RusDosWin$ DOS, :

Const D$ = "......"
Const W$ =   

Windows, :

Const D$ =    ( !)
Const W$ = "......"

, , .

, RusDosWin$ DOS QB D$, W$ . ">" DOS , D$. WinWord " MS-DOS", D$ W$ " ". DOS, , W$. Windows, , W$.

:

  1. RusDosWin$ . : , ", !" ( , , Urus$ Lrus$ ULrus$), , . , RusDosWin$ DOS Windows : , D$ W$ .

  2. RusDosWin$ , D$ ( DOS) W$ ( Windows), , , , .

. , DOS Windows, DOS :


WinWord "" ( ) "". DOS, :

''""

: 145 146 ( DOS C ) , "" 39. , DOS , Windows ( )! (34, 147, 148).