home *** CD-ROM | disk | FTP | other *** search
- *********************************************************
- * *
- * RETURN CP/M COMMAND LINE TO MBASIC *
- * *
- * A LINKABLE MODULE IN THE MICROSOFT *
- * RELOCATION FORMAT *
- * *
- * (C) 1981, Software Tools *
- * P.O. Box 80 *
- * Newport Beach *
- * NSW, 2106 *
- * AUSTRALIA *
- * *
- * Written by: Bill Bolton *
- * *
- * Date: 26/Jan/1981 *
- * *
- * Version: 1.1 (Initial Release) *
- * *
- * Date: 16/Feb/1981 *
- * *
- * Version: 1.2 Eliminated redundant *
- * code, added length *
- * checks and absolute *
- * exit on terminator. *
- * *
- * ------------------------------------------- *
- * *
- * ************ CAUTION ***************** *
- * *
- * This module will only work with the *
- * Microsoft BASIC compiler *
- * *
- * ------------------------------------------- *
- * *
- * INPUT PARAMETERS: *
- * *
- * 1st. passed in HL = Address of length of *
- * string (1 byte), followed *
- * pointer to string (2 bytes) *
- * *
- * RETURNED VALUE: *
- * *
- * 1st. passed by writing command line buffer *
- * into string passed as 1st. input *
- * parameter. First leading blank *
- * is stripped if present. *
- * *
- * Note 1 If running under a debugger *
- * with command lines forced by *
- * using "I", the leading blank is *
- * not inserted in the command *
- * buffer by the debugger unless *
- * explicitly typed. *
- * *
- * Note 2 The CP/M CCP converts any *
- * lower case characters in the *
- * command line to UPPER CASE. *
- * *
- * ------------------------------------------ *
- * *
- * Assembler: RMAC.ASM (Digital Research) *
- * *
- * Support: MACRO3.LIB (Software Tools) *
- * *
- *********************************************************
-
- PUBLIC CMD
-
- MACLIB MACRO3
-
- CSEG
-
- CMD:
- MOV A,M ;GET LENGTH OF STRING
- STA LENGTH ;SAVE IT FOR LATER
- INX H ;HL <---- POINTER TO STRING LOC
- CONTENTS ;HL <---- POINTER TO BASIC STRING
- XCHG ;DE <---- POINTER TO BASIC STRING
- LXI H,80H ;POINT TO COMMAND BUFFER
- MOV A,M ;GET LENGTH OF COMMAND LINE
- ORA A ;IS IT ZERO?
- RZ ;YES, DO NOTHING
- PUSH H ;SAVE COMMAND LINE POINTER
- LXI H,LENGTH ;POINT TO LENGTH OF BASIC STRING
- CMP M ;WILL COMMAND LINE FIT?
- JC FITS ;YES
- MOV A,M ;NO, ONLY MOVE LENGTH THAT WILL FIT
- FITS:
- POP H ;RESTORE COMMAND LINE POINTER
- MVI B,0
- MOV C,A ;BC <--- LENGTH TO MOVE
- DCX D ;PREPARE FOR LOOP ENTRY
- INX H ;POINT TO FIRST BYTE OF COMMAND
- MOV A,M ;GET FIRST BYTE
- CPI ' ' ;IS IT A SPACE?
- JZ LOOP ;YES, IGNORE IT
- INX D ;NO
- STAX D ;SAVE IT
- LOOP:
- INX H ;POINT TO NEXT COMMAND BYTE
- INX D ;POINT TO NEXT STRING BYTE
- MOV A,M ;GET BYTE FROM COMMAND
- CPI 0 ;IS IT TERMINATOR?
- RZ ;YES
- STAX D ;PUT BYTE TO STRING
- DCR C ;ADJUST COUNT
- JNZ LOOP
- RET
- ;
- ; DATA STORAGE
- ;
- DSEG
- ;
- DB 'Portions (C) 1981, Software Tools'
- ;
- LENGTH: DB 0 ;POINTER TO BASIC LENGTH BYTE
- ;
- END
-