String Library#
(c) 1991 Carsten Strotmann
;********************************
;** **
;** Phoenix SoftCrew ACTION! **
;** Programme und Tips f. 8Bit **
;** **
;********************************
; Programmname:Stringroutinen
; Programmierer:Carsten Strotmann
; Filename:STRING.ACT
; erste Version:
; letzte Aenderung:
; Zweck:
; Bemerkung:
; benoetigt DIVERS.ACT
;
; INCLUDE "DIVERS.ACT"
BYTE FUNC Find (BYTE ARRAY str2,str1)
BYTE len1,len2,z1,z2,flg,pos
IF str1(0)>=str2(0) THEN
len2=str2(0)
len1=str1(0)
len1==-len2+1
z1=0
z2=0
DO
flg=$FF
z1==+1
FOR z2=1 to len2
DO
IF str1(z1+z2-1)#str2(z2) THEN
flg=0
FI
OD
UNTIL z1=len1 OR flg#0
OD
IF flg#0 THEN
pos=z1
ELSE
pos=0
FI
ELSE
pos=0
FI
RETURN (pos)
;----------------------------------
PROC Hex (CARD value,BYTE ARRAY hex)
BYTE u,v1,v2
BYTE ARRAY hexx ($10)=~['0 '1 '2 '3 '4 '5 '6 '7 '8 '9 'A 'B 'C 'D 'E 'F]
v1=value RSH 8
v2=value
u=v1 RSH 4
hex(1)=hexx(u)
u=v1 MOD $10
hex(2)=hexx(u)
u=v2 RSH 4
hex(3)=hexx(u)
u=v2 MOD $10
hex(4)=hexx(u)
hex(0)=4
IF v1=0 THEN
hex(1)=hex(3)
hex(2)=hex(4)
hex(0)=2
FI
RETURN
;-----------------------------------
CARD FUNC Dec (BYTE ARRAY hexc)
BYTE v1,v2,pos
BYTE ARRAY such(2),hexd($11)
CARD result
pos=1
v1=0
v2=0
Scopy (hexd,"0123456789ABCDEF")
IF hexc(0)=4 THEN
such(0)=1
such(1)=hexc(pos)
v1=Find (such,hexd)-1
v1==*$10
pos==+1
such(1)=hexc(pos)
v1==+Find (such,hexd)-1
pos==+1
FI
IF hexc(0)=4 OR hexc(0)=2 THEN
such(0)=1
such(1)=hexc(pos)
v2=Find (such,hexd)-1
v2==*$10
pos==+1
such(1)=hexc(pos)
v2==+Find (such,hexd)-1
FI
result=v1
RESULT==*$100
result==+v2
RETURN (result)
;----------------------------------
PROC Upper (BYTE ARRAY text)
BYTE u
FOR u=1 TO text(0)
DO
IF text(u)>$60 AND text(u)<$7B THEN
text(u)==-$20
FI
OD
RETURN
;-----------------------------------
PROC Lower (BYTE ARRAY text)
BYTE u
FOR u=1 TO text(0)
DO
IF text(u)>$40 AND text(u)<$5B THEN
text(u)==+$20
FI
OD
RETURN
PROC Getin (BYTE ARRAY text,BYTE len)
BYTE ascii,pos,u,inv
pos=text(0)+1
inv=0
IF text(0)#0 THEN
Print (text)
FI
DO
ascii=Inkey ()
IF ascii=129 THEN
inv==!$80
FI
IF ascii=$1E AND pos>1 THEN
pos==-1
PutD (0,$1E)
FI
IF ascii=$7E AND pos>1 THEN
pos==-1
PutD (0,$7E)
FI
IF ascii=$1F AND pos#len+1 THEN
pos==+1
PutD (0,$1F)
FI
IF ascii>26 AND ascii<32 THEN
ascii=128
FI
IF pos#len+1 AND ascii<$7E THEN
ascii==+inv
PutD (0,ascii)
text(pos)=ascii
pos==+1
FI
text(0)=pos-1
Klick (2)
UNTIL ascii=$9B
OD
RETURN
PROC ClearChar (BYTE ARRAY text)
text(0)=0
RETURN
PROC FillString (BYTE ARRAY string,BYTE ch,BYTE len)
BYTE u
FOR u=1 TO len
DO
string(u)=ch
OD
string(0)=len
RETURN
PROC Sort (BYTE ARRAY field)
BYTE len,flg,u
len=field(0)
DO
flg=0
FOR u=1 TO len-1
DO
IF field(u)>field(u+1) THEN
flg=field(u+1)
field(u+1)=field(u)
field(u)=flg
flg=1
FI
OD
UNTIL flg=0
OD
RETURN
PROC Inters (BYTE ARRAY string)
BYTE u
FOR u=1 TO string(0)
DO
string(u)=Inter(string(u))
OD
RETURN
PROC RSet (BYTE ARRAY dest,source)
BYTE l1,l2,u
l1=dest(0)
l2=source(0)
IF l1>=l2 THEN
FOR u=1 TO l1-l2
DO
dest(u)=32
OD
FOR u=1 TO l2
DO
dest (l1-l2+u)=source(u)
OD
FI
RETURN