home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / progm / dpl.zip / CMDLN.D < prev    next >
Text File  |  1988-07-11  |  3KB  |  158 lines

  1. ; Doug's Programming Language  -- DPL, Version 2.22
  2. ; Copyright (c) 1988 Douglas S. Cody, All rights reserved.
  3. ;-------------------------------------
  4. ; CMDLN -- THIS ROUTINE RETURNS THE NEXT ELEMENT FROM THE
  5. ;       COMMAND LINE INTO THE STRING SUPPLIED IN THE AX REGISTER
  6. ;
  7. ; Entry conditions:
  8. ;    AX holds the string address
  9. ;    ES segment contains the PSP segment
  10. ; Exit conditions:
  11. ;    Carry clear = data available
  12. ;    Carry set   = No data available
  13. ;
  14. ; Calling Example:
  15. ;
  16. ;    STRING    STR,132
  17. ;    ;
  18. ;    CALL    CMDLN STR
  19. ;
  20. ; Calling results:
  21. ;
  22. ;    DOS>[PROG] /T TESTING A
  23. ;
  24. ;    1st call result:
  25. ;      STR = "T"
  26. ;
  27. ;    2nd call result:
  28. ;      STR = "TESTING"
  29. ;
  30. ;    3rd call result:
  31. ;      STR = "A"
  32. ;    
  33. SUBPGM    CMDLN
  34. ;
  35. INTEGER    PSPLEN
  36. INTEGER    PSPPTR
  37. ;
  38. SPACE    EQU    20H
  39. TAB    EQU    09H
  40. SWITCH    EQU    2FH
  41. ;
  42. BEGIN    CMDLN
  43.     CALL    SETUP        ; SETUP THE VARIABLES
  44.     JCXZ    CMDL_20        ; EXIT IF NULL REMAINING...
  45. ;
  46. CMDL_05:
  47.     LODSB            ; FETCH THE CHARACTER
  48.     CMP    AL,'/'        ; SWITCH CHARACTER?
  49.     JE    CMDL_06        ; YES, SKIP IT
  50.     CMP    AL,' '        ; SPACE CHARACTER?
  51.     JE    CMDL_06        ; YES, SKIP IT
  52.     CMP    AL,09        ; TAB CHARACTER?
  53.     JNE    CMDL_11        ; NO, ACCEPT IT
  54. ;
  55. CMDL_06:
  56.     LOOP    CMDL_05        ; LOOP TILL DONE...
  57.     JMP    SHORT CMDL_20    ; EXIT IF DONE...
  58. ;
  59. CMDL_10:
  60.     LODSB            ; FETCH THE NEXT CHARACTER
  61.     CMP    AL,'/'        ; SWITCH? ('/')
  62.     JE    CMDL_14        ; YES, QUIT.
  63.     CMP    AL,' '        ; LESS THAN OR EQUAL TO A SPACE?
  64.     JLE    CMDL_14        ; YES, QUIT.
  65.     CMP    AL,09        ; TAB
  66.     JE    CMDL_14        ; YES, QUIT.
  67. ;
  68. CMDL_11:
  69.     STOSB
  70.     LOOP    CMDL_10        ; CONTINUE TILL DONE...
  71.     JMP    SHORT CMDL_15    ; SKIP THE ADJUSTMENT
  72. ;
  73. CMDL_14:
  74.     DEC    CX        ; ADJUST FOR THE FOUND MATCH
  75. ;
  76. CMDL_15:
  77.     MOV    ES:[PSPPTR],SI    ; SAVE THE POINTER
  78.     MOV    ES:[PSPLEN],CX    ; SAVE THE REMAINING LENGTH
  79.     CLC            ; RETURN FULL...
  80. ;
  81. CMDL_16:
  82.     PUSH    ES        ; SWAP ES & DS
  83.     PUSH    DS
  84.     POP    ES
  85.     POP    DS
  86.     MOV    BYTE PTR [DI],00H ; SET THE TERMINATOR
  87.     RET
  88. ;
  89. CMDL_20:
  90.     STC            ; RETURN NULL AND VOID
  91.     JMP    SHORT CMDL_16    ; EXIT THROUGH COMMON CODE
  92. ;
  93. ;
  94. ; C M D A L L  --  MOVE THE ENTIRE COMMAND LINE
  95. ;
  96. ; Entry conditions:
  97. ;    None
  98. ; Exit conditions:
  99. ;    None
  100. ;
  101.     PUBLIC    CMDALL
  102. CMDALL    PROC
  103.     CALL    SETUP
  104.     JCXZ    CMDL_20        ; EXIT NULL & VOID
  105.     REP    MOVSB        ; MOVE THE WHOLE LINE
  106.     JMP    CMDL_16        ; RETURN THROUGH COMMON CODE
  107.  
  108. CMDALL    ENDP
  109. ;
  110. ;
  111. ; C M D R S T  --  RESET THE POINTER TO THE BEGINNING OF THE COMMAND LINE
  112. ;
  113. ; Entry conditions:
  114. ;    None
  115. ; Exit conditions:
  116. ;    None
  117. ;
  118.     PUBLIC    CMDRST
  119. CMDRST    PROC
  120.     MOV    WORD PTR [PSPLEN],00H    ; RESET THE PSP POINTERS
  121.     MOV    WORD PTR [PSPPTR],00H
  122.     RET
  123.  
  124. CMDRST    ENDP
  125. ;
  126. ;
  127. ;=====================
  128. ;   ROUTINE SECTION
  129. ;    LEVEL 1
  130. ;=====================
  131. ;
  132. ;
  133. SETUP    PROC    NEAR
  134.     PUSH    ES
  135.     PUSH    DS        ; SWAP ES & DS
  136.     POP    ES        ; ES = DATA SEGMENT
  137.     POP    DS
  138. ;
  139.     MOV    DI,AX        ; DI POINTS TO THE TARGET
  140.     MOV    SI,ES:[PSPPTR]    ; FETCH THE PSP POINTER
  141.     MOV    CX,ES:[PSPLEN]    ; AND THE REMAINING LENGTH
  142.     OR    SI,SI        ; IS THIS A FRESH START?
  143.     JNE    STUP_02        ; NO, USE THIS POINTER
  144. ;
  145.     MOV    SI,80H        ; YES, RE-INIT ALL
  146.     SUB    CH,CH        ; CLEAR THE MSB
  147.     MOV    CL,[SI]        ; ALSO THE COUNT
  148.     INC    SI        ; MOVE PAST THE LENGTH
  149. ;
  150. STUP_02:
  151.     CLD            ; ALL STRINGS FORWARD...
  152.     RET
  153.  
  154. SETUP    ENDP
  155. ;
  156. ENDPGM    CMDLN
  157. ;
  158.