;====================================================================
; Sring für Steinis Mini Compiler 
; (c)Copyright 2002 by Sebastian Steinhauer
; steini@steini-welt.de
;====================================================================
; Diese Bibliothek enthält alle "wichtigen" Befehle für die String
; Funktionen.
; Ein String in Steinis Mini Compiler ist so aufgebaut:
; 1 WORD	: Länge des Strings
; n BYTES	: Stringdaten
;====================================================================
; Letzte Änderung: 16:58 27.06.2002
; by Steini
;====================================================================



;====================================================================
; strlen: Gibt die Länge eines Strings zurück
; int strlen(string)
COMMAND,strlen,INTEGER
PARAMS,STRING,NULL
BEGIN_ASM
_strlen:
	push	bp
	mov	bp,sp		;Stack sichern
	mov	bx,[bp+4]	;Hole Pointer zum String
	mov	ax,[bx]		;1. Word ist Stringlänge!
	pop	bp		;BP holen
	ret	2		;des wars
END_ASM


;====================================================================
; strcat: Addiert 2 Strings
; int strcat(string,string)
COMMAND,strcat,INTEGER
PARAMS,STRING,STRING,NULL
NEED,strlen,NULL
BEGIN_ASM
_strcat:
	push	bp
	mov	bp,sp

	push	[bp+4]		;Länge des 1. Strings ermitteln
	call	_strlen		;
	push	ax		;Länge zwischenspeichern ;)
	push	[bp+6]		;Länge des 2. Strings ermitteln
	call	_strlen		;
	pop	cx		;CX=strlen(1), AX=strlen(2)

	mov	di,[bp+4]	;Pointer zu 1. String holen
	add	[di],ax		;String länger machen :)
	add	di,cx		;Pointer zum Ende des Strings
	add	di,2		;+Word beachten
	mov	cx,ax		;Jetzt Länge vom 2. String
	mov	si,[bp+6]	;Pointer für 2. String
	add	si,2		;Word wegnehmen
	rep	movsb		;String kopieren

	pop	bp
	ret	4
END_ASM


;====================================================================
; setstrlen: Setzt die Länge eines Strings fest.
; (eigentlich nur interne Nutzung!)
; int setstrlen(string,int)
COMMAND,setstrlen,INTEGER
PARAMS,STRING,NULL
BEGIN_ASM
_setstrlen:
	push	bp
	mov	bp,sp
	mov	cx,[bp+6]	;Neue Stringlänge
	mov	bx,[bp+4]	;Hole Adresse des Strings
	mov	[bx],cx		;übergebe neue Länge
	pop	bp
	ret	4
END_ASM