home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol073 / cmd.asm < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  3.0 KB  |  120 lines

  1. *********************************************************
  2. *                            *
  3. *    RETURN CP/M COMMAND LINE TO MBASIC        *
  4. *                            *
  5. *    A LINKABLE MODULE IN THE MICROSOFT        *
  6. *    RELOCATION FORMAT                *
  7. *                            *
  8. *    (C) 1981, Software Tools            *
  9. *          P.O. Box 80                *
  10. *          Newport Beach                *
  11. *          NSW, 2106                *
  12. *          AUSTRALIA                *
  13. *                            *
  14. *    Written by:    Bill Bolton            *
  15. *                            *
  16. *    Date:        26/Jan/1981            *
  17. *                            *
  18. *    Version:    1.1    (Initial Release)    *
  19. *                            *
  20. *    Date:        16/Feb/1981            *
  21. *                            *
  22. *    Version:    1.2    Eliminated redundant    *
  23. *                code, added length    *
  24. *                checks and absolute    *
  25. *                exit on terminator.    *    
  26. *                            *
  27. *    -------------------------------------------    *
  28. *                            *
  29. *    ************ CAUTION *****************        *
  30. *                            *
  31. *    This module will only work with the        *
  32. *    Microsoft BASIC compiler            *
  33. *                            *
  34. *    -------------------------------------------    *
  35. *                            *
  36. *    INPUT PARAMETERS:                *
  37. *                            *
  38. *    1st. passed in HL = Address of length of    *
  39. *                string (1 byte), followed    *
  40. *                pointer to string (2 bytes)    *
  41. *                            *
  42. *    RETURNED VALUE:                    *
  43. *                            *
  44. *    1st. passed by writing command line buffer    *
  45. *            into string passed as 1st. input    *
  46. *            parameter. First leading blank    *
  47. *            is stripped if present.        *
  48. *                            *
  49. *    Note 1        If running under a debugger        *
  50. *            with command lines forced by    *
  51. *            using "I", the leading blank is    *
  52. *            not inserted in the command        *
  53. *            buffer by the debugger unless    *
  54. *            explicitly typed.            *
  55. *                            *
  56. *    Note 2        The CP/M CCP converts any        *
  57. *            lower case characters in the    *
  58. *            command line to UPPER CASE.        *
  59. *                            *        
  60. *    ------------------------------------------    *
  61. *                            *
  62. *    Assembler:    RMAC.ASM (Digital Research)    *
  63. *                            *
  64. *    Support:    MACRO3.LIB (Software Tools)    *
  65. *                            *
  66. *********************************************************        
  67.  
  68.     PUBLIC    CMD
  69.  
  70.     MACLIB    MACRO3
  71.  
  72.     CSEG
  73.  
  74. CMD:
  75.     MOV    A,M        ;GET LENGTH OF STRING
  76.     STA    LENGTH        ;SAVE IT FOR LATER
  77.     INX    H        ;HL <---- POINTER TO STRING LOC
  78.     CONTENTS        ;HL <---- POINTER TO BASIC STRING
  79.     XCHG                  ;DE <---- POINTER TO BASIC STRING
  80.     LXI    H,80H        ;POINT TO COMMAND BUFFER
  81.     MOV    A,M        ;GET LENGTH OF COMMAND LINE
  82.     ORA    A        ;IS IT ZERO?
  83.     RZ            ;YES, DO NOTHING
  84.     PUSH    H        ;SAVE COMMAND LINE POINTER
  85.     LXI    H,LENGTH    ;POINT TO LENGTH OF BASIC STRING
  86.     CMP    M        ;WILL COMMAND LINE FIT?
  87.     JC    FITS        ;YES
  88.     MOV    A,M        ;NO, ONLY MOVE LENGTH THAT WILL FIT
  89. FITS:
  90.     POP    H        ;RESTORE COMMAND LINE POINTER    
  91.     MVI    B,0
  92.     MOV    C,A        ;BC <--- LENGTH TO MOVE
  93.     DCX    D        ;PREPARE FOR LOOP ENTRY
  94.     INX    H        ;POINT TO FIRST BYTE OF COMMAND
  95.     MOV    A,M        ;GET FIRST BYTE
  96.     CPI    ' '        ;IS IT A SPACE?
  97.     JZ    LOOP        ;YES, IGNORE IT
  98.     INX    D        ;NO
  99.     STAX    D        ;SAVE IT
  100. LOOP:
  101.     INX    H        ;POINT TO NEXT COMMAND BYTE
  102.     INX    D        ;POINT TO NEXT STRING BYTE
  103.     MOV    A,M        ;GET BYTE FROM COMMAND
  104.     CPI    0        ;IS IT TERMINATOR?
  105.     RZ            ;YES
  106.     STAX    D        ;PUT BYTE TO STRING
  107.     DCR    C        ;ADJUST COUNT
  108.     JNZ    LOOP
  109.     RET
  110. ;
  111. ;    DATA STORAGE
  112. ;
  113.     DSEG
  114. ;
  115.     DB    'Portions (C) 1981, Software Tools'
  116. ;
  117. LENGTH:    DB    0        ;POINTER TO BASIC LENGTH BYTE
  118. ;
  119.     END
  120.