summaryrefslogtreecommitdiff
path: root/v4.0/src/CMD/FC/STRING.ASM
diff options
context:
space:
mode:
Diffstat (limited to 'v4.0/src/CMD/FC/STRING.ASM')
-rw-r--r--v4.0/src/CMD/FC/STRING.ASM115
1 files changed, 115 insertions, 0 deletions
diff --git a/v4.0/src/CMD/FC/STRING.ASM b/v4.0/src/CMD/FC/STRING.ASM
new file mode 100644
index 0000000..d72f7a4
--- /dev/null
+++ b/v4.0/src/CMD/FC/STRING.ASM
@@ -0,0 +1,115 @@
1;
2; string functions for lattice C
3;
4
5.xlist
6include version.inc
7include cmacros.inc
8.list
9
10sBegin data
11assumes ds,data
12
13externB XLTab
14externB XUTab
15
16sEnd
17
18sBegin code
19assumes cs,code
20
21externP strlen
22
23;
24; strbscan (string, set) returns pointer to 1st char in set or end
25;
26cProc strbscan,<PUBLIC>,<SI,DI>
27parmW str
28parmW set
29cBegin
30 push ds
31 pop es
32 cCall strlen,<set>
33 inc ax
34 mov bx, ax
35 mov si,str
36 cld
37bscan:
38 lodsb
39 mov cx,bx
40 mov di,set
41;
42; While not in the set
43;
44 repnz scasb
45 jnz bscan
46 lea ax,[si-1]
47cEnd
48
49;
50; strbskip ( string, set ) returns pointer to 1st char not in set
51;
52cProc strbskip,<PUBLIC>,<SI,DI>
53parmW str
54parmW set
55cBegin
56 push ds
57 pop es
58 cCall strlen,<set>
59 inc ax
60 mov bx, ax
61 mov si,str
62 cld
63bskip:
64 lodsb
65 or al,al
66 jz eskip
67 mov cx,bx
68 mov di,set
69;
70; While not in the set
71;
72 repnz scasb
73 jz bskip
74eskip:
75 lea ax,[si-1]
76cEnd
77
78;
79; strpre (s1, s2) returns -1 if s1 is a prefix of s2, 0 otherwise. Ignores
80; case.
81;
82cProc strpre,<PUBLIC>,<si,di>
83parmW pref
84parmW str
85cBegin
86 cld
87 mov si,pref
88 mov di,str
89 mov bx,dataOFFSET xltab
90preCompare:
91 lodsb
92 mov ah,[di]
93 inc di
94
95 xlat
96 xchg ah,al
97 xlat
98
99 cmp ah,al
100 jnz preDif
101 or ah,ah
102 jnz preCompare
103preYes:
104 mov ax,-1
105 jmp short preDone
106preDif:
107 or ah,ah
108 jz preYes
109 xor ax,ax
110preDone:
111cEnd
112
113sEnd
114
115end