home *** CD-ROM | disk | FTP | other *** search
- INCLUDE MACROS.ASM
-
-
- CODE SEGMENT BYTE PUBLIC
- ASSUME CS:CODE
-
- PUBLIC ParseWord
-
-
- R_N_FunctionRes EQU DWORD PTR [BP+0Ah]
- R_N_S EQU DWORD PTR [BP+06h]
- R_N_Number EQU [BP+04h]
-
- RightStr_N PROC NEAR
- StandEntry
- MOV DX,DS
-
- StringOps R_N_S,R_N_FunctionRes,FORWARD
-
- MOV CX,R_N_Number ; Number to
- XOR CH,CH
- JCXZ R_N_ReturnNullStr
-
- LODSB
- CMP AL,CL
- JB R_N_ReturnNullStr
-
- SUB AL,CL ; adjust CL accordingly
-
- XOR AH,AH
- MOV BX,CX
- DEC BX
-
- ADD SI,BX
-
- INC AL
-
- MOV CL,AL ; copy length to CL
-
- STOSB ; store length of result
-
- REP MOVSB ; copy CL chars
- JMP SHORT R_N_ExitCode
- ; all done
-
- R_N_ReturnNullStr:
- XOR AL,AL
- STOSB
-
- R_N_ExitCode:
- MOV DS,DX
- StandExit 06h
- RightStr_N ENDP
-
-
- L_N_FunctionRes EQU DWORD PTR [BP+08h]
- L_N_S EQU DWORD PTR [BP+04h]
- L_N_Number EQU [BP+02h]
-
-
- LeftStr_N PROC NEAR
- MOV DX,BP ; save BP in DX
- MOV BP,SP ; stack frame with BP
- MOV BX,DS
-
- StringOps L_N_S,L_N_FunctionRes,FORWARD
-
- MOV CX,L_N_Number ; Number to
- XOR CH,CH
-
- LODSB ; length of _S in AL
- CMP AL,CL ; check to see if length of _S
- JAE StrOK ; >= length of number
- MOV CL,AL ; no, so adjust number
-
- StrOK:
-
- MOV AL,CL ; put adjusted length in AL
-
- STOSB ; copy it to FunctionRes
-
- JCXZ L_N_ExitCode ; if length is 0 then all done
-
- REP MOVSB ; copy Number chars
-
- L_N_ExitCode:
- MOV DS,BX
- MOV BP,DX
- RET 06h
- LeftStr_N ENDP
-
- ;function ParseWord(var _S : String; DelimChar : Char) : String;
-
- FunctionRes EQU DWORD PTR [BP+0Eh]
- _S EQU DWORD PTR [BP+0Ah]
- DelimChar EQU [BP+08h]
- TempStr EQU [BP-100h]
-
- ParseWord PROC FAR
- PUSH BP
- PUSH DS
- MOV BP,SP
- LocalVar 100h
-
- CLD
-
- LDS SI,_S
-
- LODSB
- OR AL,AL
- JZ ReturnNullStr
-
- MOV BL,AL
-
- MOV CL,AL
- XOR CH,CH
-
-
- LES DI,_S
- MOV AL,DelimChar
- INC DI
-
- REPNE SCASB
- JNZ ReturnWholeStr
-
- XOR BH,BH
- SUB BL,CL
-
- PUSH BX
-
- DEC BX
-
- PushPtr FunctionRes
- PushPtr _S
-
- PUSH BX
-
- CALL LeftStr_N
- POP AX
- POP AX
-
- POP BX
- INC BX
-
- PushSPtr TempStr
- PushPtr _S
-
- PUSH BX
-
- CALL RightStr_N
- POP AX
- POP AX
-
- CLD
- MOV AX,SS
- MOV DS,AX
- LEA SI,TempStr
- LES DI,_S
-
- LODSB
- MOV CL,AL
- XOR CH,CH
- STOSB
-
- REP MOVSB
-
- JMP SHORT ExitCode
-
- ReturnWholeStr:
- StringOps _S,FunctionRes,FORWARD
- LODSB
- MOV CL,AL
- XOR CH,CH
- STOSB
- REP MOVSB
-
- LES DI,_S
- XOR AL,AL
- STOSB
- JMP SHORT ExitCode
-
- ReturnNullStr:
- LES DI,FunctionRes
- STOSB
-
- ExitCode:
- UndoLocals
- POP DS
- StandExit 06h
- ParseWord ENDP
-
-
- CODE ENDS
-
- END