;******************************************************************************* ;* Module : DELETE.SUB ;* Programmer: Tony Papadimitriou <tonyp@acm.org> ;* Purpose : Delete a range of characters from a string given index and length ;* Language : Motorola/Freescale/NXP HC08/9S08 Assembly Language (aspisys.com/ASM8) ;* Status : FREEWARE Copyright (c) 2021 by Tony Papadimitriou <tonyp@acm.org> ;* Original : http://www.aspisys.com/code/hc08/delete.html ;* Note(s) : Use: #Include delete.sub ;* History : 11.11.12 v1.00 Original ;******************************************************************************* #ifmain ;----------------------------------------------------------------------- #ListOff #Uses mcu.inc #ListOn #endif ;------------------------------------------------------------------------ ?_OBJECT_? ;******************************************************************************* ; Purpose: Delete a range of characters from a string given index and length ; Input : Stack = String pointer, Position, Length ; Output : None ; Pascal : Delete(var s: string; index: Byte; count: Byte) StringDeleteRange macro [#]String,[#]Index,[#]Count mreq 1,2,3:[#]String,[#]Index,[#]Count #push #spauto :sp push #psp lda ~3~ psha lda ~2~ psha ldhx ~1~ pshhx call ~0~ ais #:psp pull #pull endm ;------------------------------------------------------------------------------- #spauto :ab StringDeleteRange proc @parms .str,index,count ;string pointer, position at which to start, number of chars to delete push #ais #ifhcs ldhx .str@@,sp ;HX -> string #else tsx lda .str@@,spx ldx .str@@+1,spx tah #endif lda index@@,sp ;offset within string deca ;make it zero-based @aax ;HX -> position to delete lda count@@,sp ;A = number of chars to delete Loop@@ tst ,x ;ASCIZ terminator? beq Done@@ ;If so, exit push ToEOS@@ lda 1,x ;make next character... sta ,x ;... the current one aix #1 ;point to next character bne ToEOS@@ ;repeat while not terminator pull dbnza Loop@@ Done@@ @ais #:ais pull rtc #sp ;******************************************************************************* #Exit ;******************************************************************************* @EndStats CString fcs 'Hello World!' vstring @var ::CString #spauto Start proc @rsp clrhx Copy@@ lda CString,x sta vstring,x aix #1 bne Copy@@ ;--- @StringDeleteRange #vstring,#5,#2 ;--- bra * @vector Vreset,Start