home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l040 / 13.ddi / RTLSYS.ZIP / PARS.ASM < prev    next >
Encoding:
Assembly Source File  |  1992-10-28  |  1.7 KB  |  120 lines

  1.  
  2. ; *******************************************************
  3. ; *                            *
  4. ; *     Turbo Pascal Run-time Library                   *
  5. ; *    Command Line Parameter Routines            *
  6. ; *                            *
  7. ; *     Copyright (c) 1988,92 Borland International     *
  8. ; *                            *
  9. ; *******************************************************
  10.  
  11.     TITLE    PARS
  12.  
  13.     INCLUDE    SE.ASM
  14.  
  15. DATA    SEGMENT    WORD PUBLIC
  16.  
  17. ; Externals
  18.  
  19.     EXTRN    PrefixSeg:WORD
  20.  
  21. DATA    ENDS
  22.  
  23. CODE    SEGMENT    BYTE PUBLIC
  24.  
  25.     ASSUME    CS:CODE,DS:DATA
  26.  
  27. ; Publics
  28.  
  29.     PUBLIC    GetParStr,GetParCnt
  30.  
  31. ; ParamStr standard function
  32.  
  33. GetParStr:
  34.  
  35.     ARG    StrP,DWORD,1
  36.     ARG    Index,WORD,1
  37.  
  38.     ENTRY    FAR
  39.     MOV    DX,Index
  40.     OR    DX,DX
  41.     JE    @@1
  42.     CALL    ParStrCnt
  43.     JMP    SHORT @@4
  44. @@1:    MOV    AH,dosGetVersion
  45.     INT    DOS
  46.     CMP    AL,3
  47.     MOV    AX,0
  48.     JB    @@4
  49.     MOV    ES,PrefixSeg
  50.     MOV    ES,ES:pspEnvSeg
  51.     XOR    DI,DI
  52.     CLD
  53. @@2:    CMP    AL,ES:[DI]
  54.     JE    @@3
  55.     MOV    CX,-1
  56.     REPNE    SCASB
  57.     JMP    @@2
  58. @@3:    ADD    DI,3
  59.     MOV    SI,DI
  60.     MOV    CX,256
  61.     REPNE    SCASB
  62.     XCHG    AX,CX
  63.     NOT    AL
  64. @@4:    PUSH    DS
  65.     PUSH    ES
  66.     POP    DS
  67.     LES    DI,StrP
  68.     CLD
  69.     STOSB
  70.     XCHG    AX,CX
  71.     REP    MOVSB
  72.     POP    DS
  73.     EXIT    2
  74.  
  75. ; ParamCount standard function
  76.  
  77. GetParCnt:
  78.  
  79.     XOR    DX,DX
  80.     CALL    ParStrCnt
  81.     XCHG    AX,BX
  82.     RETF
  83.  
  84. ; Return parameter string and count
  85. ; In    DX    = Parameter string number
  86. ; Out    AX    = Parameter string length
  87. ;    BX    = Parameter string count
  88. ;    ES:SI = Parameter string pointer
  89.  
  90. ParStrCnt:
  91.  
  92.     MOV    ES,PrefixSeg
  93.     MOV    DI,OFFSET pspCmdLine
  94.     MOV    CL,ES:[DI]
  95.     XOR    CH,CH
  96.     INC    DI
  97.     XOR    BX,BX
  98. @@1:    JCXZ    @@3
  99. @@2:    CMP    BYTE PTR ES:[DI],' '
  100.     JA    @@3
  101.     INC    DI
  102.     LOOP    @@2
  103. @@3:    MOV    SI,DI
  104.     JCXZ    @@5
  105. @@4:    CMP    BYTE PTR ES:[DI],' '
  106.     JBE    @@5
  107.     INC    DI
  108.     LOOP    @@4
  109. @@5:    MOV    AX,DI
  110.     SUB    AX,SI
  111.     JE    @@6
  112.     INC    BX
  113.     DEC    DX
  114.     JNZ    @@1
  115. @@6:    RET
  116.  
  117. CODE    ENDS
  118.  
  119.     END
  120.