home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / assemblr / library / lib4a86 / lib / strings.lib < prev    next >
Text File  |  1992-02-15  |  6KB  |  545 lines

  1. #IF !LIB4A86
  2. #ELSE
  3. #IF !INTERN_LIB4A86_S
  4. INTERN_LIB4A86_S EQU 01
  5. JMP START
  6. #ENDIF
  7. #ENDIF
  8. DELETESTR MACRO
  9. XOR AL,AL
  10. XCHG [SI],AL
  11. #EM
  12. MAKESTR MACRO
  13. PUSH DI
  14. CLD
  15. XOR CH,CH
  16. MOV ES:[DI],CL
  17. INC DI
  18. REP STOSB
  19. POP DI
  20. #EM
  21. CHARTOSTR MACRO
  22. MOV B[SI],1
  23. MOV B[SI+1],AL
  24. #EM
  25. STRTOCHAR MACRO
  26. CMP B[SI],1
  27. STC
  28. JNZ >M1
  29. MOV AL,B[SI+1]
  30. M1:
  31. #EM
  32. LENGTH MACRO
  33. MOV CL,[SI]
  34. XOR CH,CH
  35. OR CX,CX
  36. #EM
  37. #IF !INTERN_UPCASE_S
  38. INTERN_UPCASE_S EQU 01
  39. UPCASE:
  40. CMP AL,'ü'
  41. IF E MOV AL,'Ü'
  42. CMP AL,'ö'
  43. IF E MOV AL,'Ö'
  44. CMP AL,'ä'
  45. IF E MOV AL,'Ä'
  46. CMP AL,'a'
  47. JB >L1
  48. CMP AL,'z'
  49. JA >L1
  50. SUB AL,' '
  51. L1:
  52. RET
  53. #ENDIF
  54. LOWCASE:
  55. CMP AL,'Ü'
  56. IF E MOV AL,'ü'
  57. CMP AL,'Ö'
  58. IF E MOV AL,'ö'
  59. CMP AL,'Ä'
  60. IF E MOV AL,'ä'
  61. CMP AL,'A'
  62. JB >L1
  63. CMP AL,'Z'
  64. JA >L1
  65. ADD AL,' '
  66. L1:
  67. RET
  68. UPSTR:
  69. MOV AX,OFFSET UPCASE
  70. JMP >L1
  71. LOWSTR:
  72. MOV AX,OFFSET LOWCASE
  73. L1:
  74. PUSH BX
  75. MOV BX,AX
  76. CALL INTERN_KONVERTSTRING
  77. POP BX
  78. RET
  79. NOTPOSCHAR:
  80. MOV AH,01
  81. JMP >L1
  82. POSCHAR:
  83. MOV AH,0
  84. L1:
  85. PUSH DI,CX,BX
  86. CLD
  87. MOV CL,ES:[DI]
  88. INC DI
  89. XOR CH,CH
  90. JCXZ >L8
  91. MOV BX,CX
  92. OR AH,AH
  93. JZ >L2
  94. REPE SCASB
  95. JNE >L1
  96. JMP >L8
  97. L2:
  98. REPNE SCASB
  99. JE >L1
  100. JCXZ >L8
  101. L1:
  102. SUB BX,CX
  103. MOV AX,BX
  104. OR AX,AX
  105. JMP >L9
  106. L8:
  107. XOR AX,AX
  108. L9:
  109. POP BX,CX,DI
  110. RET
  111. INSERTCHAR:
  112. PUSH DS,SI
  113. PUSH BP
  114. MOV BP,SP
  115. XCHG AH,AL
  116. PUSH AX
  117. MOV B [BP-2],01
  118. MOV SI,SP
  119. MOV DS,SS
  120. CALL INSERTSTR
  121. MOV SP,BP
  122. POP BP
  123. POP SI,DS
  124. RET
  125. S001 EQU [BP+2]
  126. S002 EQU [BP+4]
  127. S003 EQU [BP+6]
  128. S004 EQU [BP+8]
  129. INSERTSTR:
  130. PUSH CX,BX,ES,DI,DS,SI
  131. PUSH BP
  132. MOV BP,SP
  133. MOV AH,0
  134. MOV CH,0
  135. MOV BH,0
  136. OR AL,AL
  137. IF E INC AL
  138. CMP B[SI],AH
  139. JE >L9
  140. MOV CL,ES:[DI]
  141. INC CL
  142. STC
  143. JZ >L9
  144. CMP AL,CL
  145. IF A MOV AL,CL
  146. DEC CL
  147. MOV BL,B[SI]
  148. PUSH CX
  149. ADD CL,BL
  150. POP CX
  151. JC >L9
  152. ADD ES:[DI],BL
  153. LDS SI,S003
  154. ADD SI,CX
  155. MOV DI,SI
  156. ADD DI,BX
  157. SUB CX,AX
  158. INC CX
  159. STD
  160. REP MOVSB
  161. LDS SI,S001
  162. MOV CL,BL
  163. ADD SI,CX
  164. REP MOVSB
  165. CLD
  166. CLC
  167. L9:
  168. MOV SP,BP
  169. POP BP
  170. POP SI,DS,DI,ES,BX,CX
  171. RET
  172. DELCHARS:
  173. PUSH CX,DX,DI,SI
  174. CLD
  175. MOV AH,AL
  176. LODSB
  177. MOV CL,AL
  178. XOR CH,CH
  179. JCXZ >L9
  180. XOR DX,DX
  181. MOV DI,SI
  182. L0:
  183. LODSB
  184. MOV [DI],AL
  185. INC DI
  186. CMP AL,AH
  187. JNE >L1
  188. INC DX
  189. DEC DI
  190. L1:
  191. LOOP L0
  192. POP SI
  193. SUB [SI],DL
  194. MOV AL,DL
  195. PUSH SI
  196. L9:
  197. MOV AH,0
  198. POP SI
  199. POP DI,DX,CX
  200. RET
  201. STRIPCHARS:
  202. PUSH ES,CX,DI,SI
  203. CLD
  204. MOV AH,AL
  205. LODSB
  206. OR AL,AL
  207. JZ >L9
  208. MOV CL,AL
  209. XOR CH,CH
  210. DEC CL
  211. JZ >L21
  212. INC SI
  213. MOV DI,SI
  214. MOV ES,DS
  215. L0:
  216. LODSB
  217. CMP AL,AH
  218. JNE >L1
  219. CMP [SI-2],AH
  220. JNZ >L1
  221. INC CH
  222. JMP >L2
  223. L1:
  224. STOSB
  225. L2:
  226. DEC CL
  227. JNZ L0
  228. L21:
  229. POP SI
  230. SUB [SI],CH
  231. MOV AL,CH
  232. XOR AH,AH
  233. PUSH SI
  234. L9:
  235. MOV AH,0
  236. POP SI
  237. POP DI,CX,ES
  238. RET
  239. DELCHAR:
  240. MOV AH,01
  241. DELSTR:
  242. PUSH SI,DI,ES,CX,BX
  243. CLD
  244. OR AL,AL
  245. IF E INC AL
  246. OR AH,AH
  247. JE >L9
  248. XOR CH,CH
  249. MOV CL,[SI]
  250. JCXZ >L91
  251. CMP AL,CL
  252. JA >L91
  253. MOV BX,AX
  254. PUSH CX
  255. XOR AH,AH
  256. SUB CX,AX
  257. CMP BH,CL
  258. POP CX
  259. JB >L1
  260. DEC B[SI]
  261. JMP >L91
  262. L1:
  263. MOV AL,CL
  264. SUB AL,BH
  265. MOV [SI],AL
  266. MOV ES,DS
  267. MOV DI,SI
  268. XOR AH,AH
  269. MOV AL,BL
  270. ADD DI,AX
  271. ADD AL,BH
  272. ADD SI,AX
  273. SUB CX,AX
  274. INC CX
  275. REP MOVSB
  276. L91:
  277. CLC
  278. L9:
  279. POP BX,CX,ES,DI,SI
  280. RET
  281. CONCATSTR:
  282. PUSH SI,DI,CX
  283. CLD
  284. MOV AH,0
  285. MOV CH,AH
  286. MOV AL,ES:[DI]
  287. MOV CL,[SI]
  288. JCXZ >L9
  289. PUSH AX
  290. ADD AX,CX
  291. SUB AX,255XD
  292. IF NS SUB CX,AX
  293. POP AX
  294. JCXZ >L9
  295. ADD ES:[DI],CL
  296. ADD DI,AX
  297. CMPSB
  298. JMP >L91
  299. MOVESTR:
  300. PUSH SI,DI,CX
  301. CLD
  302. XOR CH,CH
  303. MOV CL,[SI]
  304. INC CX
  305. L91:
  306. REP MOVSB
  307. L9:
  308. POP CX,DI,SI
  309. RET
  310. SUBSTR:
  311. PUSH SI,DI,CX
  312. CLD
  313. MOV CH,AH
  314. MOV CL,[SI]
  315. XOR AH,AH
  316. MOV B ES:[DI],AH
  317. OR AL,AL
  318. IF E INC AL
  319. OR CH,CH
  320. JE L9
  321. CMP AL,CL
  322. JA L9
  323. ADD SI,AX
  324. SUB CL,AL
  325. INC CL
  326. CMP CH,CL
  327. IF B MOV CL,CH
  328. XOR CH,CH
  329. MOV AL,CL
  330. STOSB
  331. JMP L91
  332. #IF !INTERN_PARSESTR_S
  333. INTERN_PARSESTR_S EQU 01
  334. PARSESTR:
  335. PUSH SI,DI,CX,BX
  336. CLD
  337. XOR CH,CH
  338. MOV ES:[DI],CH
  339. MOV CL,[SI]
  340. JCXZ >L9
  341. PUSH ES,DI
  342. MOV ES,DS
  343. MOV DI,SI
  344. INC DI
  345. MOV BX,SI
  346. REPNE SCASB
  347. MOV SI,DI
  348. POP DI,ES
  349. JNE >L9
  350. XOR AH,AH
  351. MOV AL,[BX]
  352. SUB AX,CX
  353. SUB [BX],CL
  354. DEC B[BX]
  355. MOV AX,CX
  356. STOSB
  357. REP MOVSB
  358. L9:
  359. POP BX,CX,DI,SI
  360. RET
  361. #ENDIF
  362. STRTODOSSTR:
  363. PUSH CX,DI,SI
  364. CLD
  365. XOR CH,CH
  366. MOV CL,[SI]
  367. INC SI
  368. JCXZ >L1
  369. REP MOVSB
  370. L1:
  371. STOSB
  372. POP SI,DI,CX
  373. RET
  374. #IF !INTERN_DOSSTRTOSTR_S
  375. DOSSTRTOSTR:
  376. INTERN_DOSSTRTOSTR_S EQU 01
  377. PUSH SI
  378. CLD
  379. XOR AH,AH
  380. PUSH DI
  381. INC DI
  382. L0:
  383. CMP [SI],AL
  384. JE >L2
  385. MOVSB
  386. INC AH
  387. JNZ L0
  388. MOV AH,255XD
  389. L2:
  390. POP DI
  391. MOV ES:[DI],AH
  392. POP SI
  393. RET
  394. #ENDIF
  395. TRANSLATECHARS:
  396. PUSH DI,CX
  397. XOR BX,BX
  398. XOR CH,CH
  399. MOV CL,ES:[DI]
  400. JCXZ >L9
  401. INC DI
  402. L1:
  403. SCASB
  404. JNE >L2
  405. MOV ES:[DI-1],AH
  406. INC BL
  407. L2:
  408. LOOP L1
  409. L9:
  410. POP CX,DI
  411. RET
  412. POSSTR:
  413. PUSH DI,SI,CX,DX
  414. CLD
  415. MOV CL,[SI]
  416. XOR CH,CH
  417. MOV DL,ES:[DI]
  418. XOR DH,DH
  419. SUB DX,CX
  420. JB >L90
  421. XOR AX,AX
  422. JCXZ >L9
  423. INC AX
  424. INC DX
  425. INC SI
  426. L0:
  427. INC DI
  428. PUSH CX,SI,DI
  429. REPZ CMPSB
  430. POP DI,SI,CX
  431. JZ >L9
  432. INC AX
  433. DEC DX
  434. JNZ L0
  435. L90:
  436. XOR AX,AX
  437. L9:
  438. POP DX,CX,SI,DI
  439. RET
  440. COMPARESTR:
  441. PUSH DI,SI,CX
  442. CLD
  443. MOV AL,[SI]
  444. MOV CL,ES:[DI]
  445. CMPSB
  446. LAHF
  447. IF A MOV CL,AL
  448. XOR CH,CH
  449. JCXZ >L1
  450. REPE CMPSB
  451. JNZ >L2
  452. L1:
  453. SAHF
  454. L2:
  455. POP CX,SI,DI
  456. RET
  457. V0 EQU W[BP-02H]
  458. Q1 EQU W[BP-04H]
  459. Q0 EQU W[BP-06H]
  460. Z0 EQU W[BP-08H]
  461. TRANSLATESTR:
  462. PUSH CX,BX,DI,SI,DS
  463. PUSH BP
  464. MOV BP,SP
  465. MOV BX,DX
  466. MOV AL,[BX]
  467. MOV AH,[SI]
  468. CMP AH,AL
  469. IF B MOV AL,AH
  470. XOR AH,AH
  471. PUSH AX
  472. PUSH DS
  473. INC SI
  474. PUSH SI
  475. INC DX
  476. PUSH DX
  477. MOV DS,ES
  478. MOV SI,DI
  479. MOV BX,OFFSET INTERN_TRANSLATESTRING
  480. CALL INTERN_KONVERTSTRING
  481. MOV SP,BP
  482. POP BP
  483. POP DS,SI,DI,BX,CX
  484. RET
  485. INTERN_TRANSLATESTRING:
  486. PUSH DI,ES,SI,CX
  487. LES DI,W Q0
  488. MOV SI,Z0
  489. MOV CX,V0
  490. L0:
  491. SCASB
  492. JE >L10
  493. INC SI
  494. LOOP L0
  495. JMP >L1
  496. L10:
  497. MOV AL,ES:[SI]
  498. L1:
  499. POP CX,SI,ES,DI
  500. RET
  501. INTERN_KONVERTSTRING:
  502. PUSH SI,CX
  503. MOV CL,[SI]
  504. XOR CH,CH
  505. JCXZ >L2
  506. L1:
  507. INC SI
  508. MOV AL,[SI]
  509. CALL BX
  510. MOV [SI],AL
  511. LOOP L1
  512. L2:
  513. POP CX,SI
  514. RET
  515. #IF !INTERN_CMARK0
  516. INTERN_CMARK0 EQU 01H
  517. INTERN_CMARK1:
  518. PUSH BP
  519. MOV BP,SP
  520. MOV BX,06H
  521. SUB CH,[BP+SI]
  522. SUB AH,[BX+SI]
  523. DEC SP
  524. DEC CX
  525. INC DX
  526. XOR AL,041H
  527. CMP B[02820H],DH
  528. INC BX
  529. SUB W[BX+SI],SP
  530. INC DX
  531. CS AND B[BP+DI+043H],DL
  532. DEC AX
  533. INC BP
  534. DEC BP
  535. DEC BP
  536. INC BP
  537. PUSH DX
  538. AND B[BP+SI],CH
  539. SUB CH,[BP+SI]
  540. POP DX
  541. MOV SP,BP
  542. POP BP
  543. RET
  544. #ENDIF
  545.