********************************************************* * * * 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