home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / assemblr / library / lib4a86 / lib / env.lib < prev    next >
Text File  |  1992-02-13  |  7KB  |  584 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. USELOKALENV EQU 0
  9. USECALLERENV EQU 1
  10. USECOMMANDENV EQU 2
  11. LOKALENVSEG DW 0
  12. CALLERENVSEG DW 0
  13. COMMANDENVSEG DW 0
  14. E001 DW 0
  15. U000 DB USELOKALENV
  16. SETENVVAR:
  17. CALL INTERN_TESTENV
  18. PUSH BX,CX,DX
  19. MOV AL,'='
  20. CALL INTERN_UPCASESTRING
  21. JC >L1
  22. L8:
  23. STC
  24. JZ >L1
  25. XOR AL,AL
  26. MOV CL,ES:[DI]
  27. XOR CH,CH
  28. JCXZ >L0
  29. PUSH DI
  30. INC DI
  31. REPNE SCASB
  32. POP DI
  33. JZ L8
  34. L0:
  35. CALL INTERN_DELETEENTRY
  36. MOV AL,0
  37. IF NC INC AL
  38. CMP B ES:[DI],0
  39. JNE >L0
  40. OR AL,AL
  41. JMP >L1
  42. L0:
  43. CALL INTERN_SETENTRY
  44. L1:
  45. POP DX,CX,BX
  46. RET
  47. P1 EQU [BP-512XD]
  48. P2 EQU [BP-256XD]
  49. SEARCHENVSTR:
  50. MOV B ES:[DI],0
  51. CALL INTERN_TESTENV
  52. PUSH BX,CX
  53. PUSH DS,SI
  54. PUSH ES,DI
  55. PUSH BP
  56. MOV BP,SP
  57. SUB SP,514XD
  58. MOV ES,SS
  59. MOV DS,SS
  60. CALL ENVCOUNT
  61. V1:
  62. PUSH AX
  63. LEA DI,P1
  64. CALL ENVSTR
  65. LEA SI,P1
  66. LEA DI,P2
  67. CALL ENVPARSE
  68. JC >L9
  69. LODSB
  70. LDS BX,[BP+6]
  71. CMP AL,[BX]
  72. JNE >L7
  73. INC BX
  74. MOV CL,AL
  75. XOR CH,CH
  76. L2:
  77. MOV AL,SS:[SI]
  78. INC SI
  79. CMP AL,[BX]
  80. JNE >L7
  81. INC BX
  82. LOOP L2
  83. JMP >G1
  84. L7:
  85. MOV DS,SS
  86. POP AX
  87. DEC AX
  88. JNZ V1
  89. STC
  90. JMP >L9
  91. G1:
  92. MOV DS,SS
  93. LEA SI,P2
  94. LES DI,[BP+2]
  95. LODSB
  96. XOR AH,AH
  97. STOSB
  98. MOV CX,AX
  99. REP MOVSB
  100. CLC
  101. L9:
  102. MOV SP,BP
  103. POP BP
  104. POP DI,ES
  105. POP SI,DS
  106. POP CX,BX
  107. RET
  108. ENVPARSE:
  109. MOV AX,'='
  110. MOV ES:[DI],AH
  111. CALL PARSESTR
  112. CMP B ES:[DI],0
  113. CLC
  114. IF E STC
  115. RET
  116. ENVSTR:
  117. MOV B ES:[DI],0
  118. CALL INTERN_TESTENV
  119. PUSH CX,DS,SI,ES,DI
  120. OR AL,AL
  121. IF Z INC AL
  122. PUSH AX
  123. CALL INTERN_GETENVSTART
  124. POP AX
  125. MOV AH,AL
  126. XOR AL,AL
  127. L0:
  128. DEC AH
  129. JZ >L1
  130. REPNE SCASB
  131. CMP ES:[DI],AL
  132. JNZ L0
  133. POP DI,ES
  134. JMP >L9
  135. L1:
  136. MOV DS,ES
  137. MOV SI,DI
  138. POP DI,ES
  139. CALL INTERN_UEBERTRAGEEINTRAG
  140. L9:
  141. POP SI,DS,CX
  142. RET
  143. GETENVDATA:
  144. CALL INTERN_TESTENV
  145. PUSH DI,ES
  146. CALL INTERN_GETENVSTART
  147. PUSH CX
  148. L0:
  149. REPNE SCASB
  150. CMP ES:[DI],AL
  151. JNZ L0
  152. INC DI
  153. CMP W ES:[DI],01
  154. JNE >L1
  155. INC DI,3
  156. REPNE SCASB
  157. L1:
  158. POP AX
  159. MOV BX,DI
  160. MOV CX,AX
  161. SUB CX,DI
  162. POP ES,DI
  163. RET
  164. ENVCOUNT:
  165. CALL INTERN_TESTENV
  166. PUSH ES,DI,CX
  167. MOV AX,CS:E001
  168. CALL INTERN_COUNTENTRYS
  169. POP CX,DI,ES
  170. RET
  171. USEDENVSEG?:
  172. CALL INTERN_INITENVROUTINES
  173. MOV AL,CS:U000
  174. CMP CS:E001,0FFFFH
  175. CLC
  176. IF E STC
  177. RET
  178. USEOTHERENV:
  179. CALL INTERN_INITENVROUTINES
  180. PUSH DS,BX
  181. MOV DS,CS
  182. MOV BX,LOKALENVSEG
  183. CMP AL,USELOKALENV
  184. JZ >L2
  185. MOV BX,CALLERENVSEG
  186. CMP AL,USECALLERENV
  187. JZ >L2
  188. MOV BX,COMMANDENVSEG
  189. CMP AL,USECOMMANDENV
  190. JNE >L8
  191. L2:
  192. CMP BX,0FFFFH
  193. JE >L8
  194. MOV E001,BX
  195. MOV U000 ,AL
  196. CLC
  197. JMP >L9
  198. L8:
  199. STC
  200. L9:
  201. POP BX,DS
  202. RET
  203. FREELOKALENV:
  204. CALL INTERN_INITENVROUTINES
  205. MOV AX,CS:LOKALENVSEG
  206. CMP AX,0FFFFH
  207. STC
  208. JE >L1
  209. PUSH ES
  210. MOV ES,AX
  211. MOV AH,049H
  212. INT 021H
  213. POP ES
  214. JC >L1
  215. MOV CS:LOKALENVSEG,0FFFFH
  216. CMP CS:U000 ,USELOKALENV
  217. CLC
  218. JNZ >L1
  219. MOV CS:E001,0FFFFH
  220. L1:
  221. RET
  222. #IF !INTERN_UPCASE_S
  223. INTERN_UPCASE_S EQU 01
  224. UPCASE:
  225. CMP AL,'ü'
  226. IF E MOV AL,'Ü'
  227. CMP AL,'ö'
  228. IF E MOV AL,'Ö'
  229. CMP AL,'ä'
  230. IF E MOV AL,'Ä'
  231. CMP AL,'a'
  232. JB >L1
  233. CMP AL,'z'
  234. JA >L1
  235. SUB AL,' '
  236. L1:
  237. RET
  238. #ENDIF
  239. #IF !INTERN_PARSESTR_S
  240. INTERN_PARSESTR_S EQU 01
  241. PARSESTR:
  242. PUSH SI,DI,CX,BX
  243. CLD
  244. XOR CH,CH
  245. MOV ES:[DI],CH
  246. MOV CL,[SI]
  247. JCXZ >L9
  248. PUSH ES,DI
  249. MOV ES,DS
  250. MOV DI,SI
  251. INC DI
  252. MOV BX,SI
  253. REPNE SCASB
  254. MOV SI,DI
  255. POP DI,ES
  256. JNE >L9
  257. XOR AH,AH
  258. MOV AL,[BX]
  259. SUB AX,CX
  260. SUB [BX],CL
  261. DEC B[BX]
  262. MOV AX,CX
  263. STOSB
  264. REP MOVSB
  265. L9:
  266. POP BX,CX,DI,SI
  267. RET
  268. #ENDIF
  269. #IF !INTERN_DOSSTRTOSTR_S
  270. INTERN_DOSSTRTOSTR_S EQU 01
  271. DOSSTRTOSTR:
  272. PUSH SI
  273. CLD
  274. XOR AH,AH
  275. PUSH DI
  276. INC DI
  277. L0:
  278. CMP [SI],AL
  279. JE >L2
  280. MOVSB
  281. INC AH
  282. JNZ L0
  283. DEC AH
  284. L2:
  285. POP DI
  286. MOV ES:[DI],AH
  287. POP SI
  288. RET
  289. #ENDIF
  290. GETCALLERNAME:
  291. MOV AX,CS:CALLERENVSEG
  292. JMP >L1
  293. GETPROGNAME:
  294. MOV AX,ES:LOKALENVSEG
  295. L1:
  296. PUSH AX
  297. CALL INTERN_INITENVROUTINES
  298. POP AX
  299. MOV B ES:[DI],0
  300. CMP AX,0FFFFH
  301. JNE INTERN_GETPROGNAME
  302. STC
  303. RET
  304. V0 DB 0
  305. INITENVROUTINES:
  306. MOV CS:V0,0
  307. JMP SHORT INTERN_INITENVROUTINES
  308. INTERN_GETPROGNAME:
  309. PUSH CX,DS,SI,ES,DI
  310. PUSH BP
  311. MOV BP,SP
  312. CALL INTERN_COUNTENTRYS
  313. CMP W ES:[DI],01H
  314. JE >L1
  315. XOR AX,AX
  316. JMP >L9
  317. L1:
  318. INC DI,2
  319. MOV DS,ES
  320. MOV SI,DI
  321. LES DI,[BP+2]
  322. CALL INTERN_UEBERTRAGEEINTRAG
  323. L9:
  324. MOV SP,BP
  325. POP BP
  326. POP DI,ES,SI,DS,CX
  327. RET
  328. INTERN_INITENVROUTINES:
  329. CLD
  330. CMP CS:V0,0
  331. JNE >L9
  332. PUSH DS
  333. PUSH AX
  334. PUSH BX
  335. PUSH DI
  336. PUSH ES
  337. PUSH DS
  338. MOV DS,CS
  339. MOV V0,01H
  340. MOV AH,062H
  341. INT 021H
  342. MOV AX,BX
  343. CALL INTERN_CHECKENV
  344. MOV LOKALENVSEG,AX
  345. MOV E001,AX
  346. MOV DS,BX
  347. MOV AX,[016H]
  348. MOV DS,CS
  349. CALL INTERN_CHECKENV
  350. MOV CALLERENVSEG,AX
  351. PUSH ES,BX
  352. MOV AH,052H
  353. INT 021H
  354. MOV ES,ES:[BX-2]
  355. MOV AX,ES
  356. ADD AX,ES:[03H]
  357. INC AX,2
  358. POP BX,ES
  359. CALL INTERN_CHECKENV
  360. MOV COMMANDENVSEG,AX
  361. MOV V0,0FFH
  362. POP DS
  363. POP ES
  364. POP DI
  365. POP BX
  366. POP AX
  367. POP DS
  368. L9:
  369. RET
  370. INTERN_DELETEENTRY:
  371. PUSH ES,DI,DS,SI
  372. CALL INTERN_GETENVSTART
  373. MOV DL,[SI]
  374. XOR DH,DH
  375. OR DL,DL
  376. JZ >L8
  377. INC SI
  378. L0:
  379. MOV BX,DI
  380. PUSH CX
  381. PUSH SI
  382. MOV CX,DX
  383. REPE CMPSB
  384. POP SI
  385. POP CX
  386. JNE >L01
  387. CMP B ES:[DI],'='
  388. JE >L1
  389. L01:
  390. MOV DI,BX
  391. REPNE SCASB
  392. CMP ES:[DI],AL
  393. JNE L0
  394. L8:
  395. STC
  396. JMP >L9
  397. L1:
  398. MOV DI,BX
  399. REPNE SCASB
  400. MOV SI,DI
  401. MOV DS,ES
  402. MOV DI,BX
  403. OR BX,BX
  404. IF Z DEC SI
  405. REP MOVSB
  406. L9:
  407. POP SI,DS,DI,ES
  408. RET
  409. INTERN_SETENTRY:
  410. PUSH SI,DS,DI,ES
  411. CALL GETENVDATA
  412. MOV AL,[SI]
  413. ADD AL,ES:[DI]
  414. INC AX
  415. INC AX
  416. XOR AH,AH
  417. CMP CX,AX
  418. JB >L8
  419. MOV CX,BX
  420. MOV BX,AX
  421. MOV ES,CS:E001
  422. XOR DI,DI
  423. XOR AL,AL
  424. L0:
  425. REPNE SCASB
  426. CMP ES:[DI],AL
  427. JNE L0
  428. CMP DI,01
  429. JNZ >L1
  430. DEC DI
  431. DEC BX
  432. INC CX
  433. L1:
  434. PUSH DI,SI
  435. PUSH DS
  436. MOV DS,ES
  437. MOV SI,DI
  438. ADD SI,CX
  439. DEC SI
  440. ADD DI,BX
  441. ADD DI,CX
  442. DEC DI
  443. STD
  444. REP MOVSB
  445. CLD
  446. POP DS
  447. POP SI,DI
  448. MOV CL,[SI]
  449. INC SI
  450. REP MOVSB
  451. MOV ES:B[DI],'='
  452. INC DI
  453. POP DS
  454. POP SI
  455. MOV CL,[SI]
  456. INC SI
  457. REP MOVSB
  458. STOSB
  459. CLC
  460. PUSH SI
  461. PUSH DS
  462. JMP >L1
  463. L8:
  464. STC
  465. L1:
  466. POP ES,DI,DS,SI
  467. RET
  468. INTERN_UPCASESTRING:
  469. PUSH DS,SI,CX,BX
  470. XOR BX,BX
  471. MOV AH,AL
  472. LODSB
  473. OR AL,AL
  474. JZ >L9
  475. MOV CL,AL
  476. XOR CH,CH
  477. L0:
  478. LODSB
  479. CALL UPCASE
  480. MOV [SI-1],AL
  481. CMP AH,AL
  482. IF E INC BL
  483. OR AL,AL
  484. IF E INC BH
  485. LOOP L0
  486. L9:
  487. MOV AX,BX
  488. POP BX,CX,SI,DS
  489. RET
  490. INTERN_CHECKENV:
  491. PUSH DS,BX
  492. MOV DS,AX
  493. MOV BX,[02CH]
  494. DEC BX
  495. MOV DS,BX
  496. CMP W[03],0
  497. JE >L8
  498. CMP B[0H],'M'
  499. JE >L1
  500. CMP B[0H],'Z'
  501. JNE >L8
  502. L1:
  503. INC BX
  504. CMP AX,[01H]
  505. MOV AX,BX
  506. JE >L9
  507. L8:
  508. MOV AX,0FFFFH
  509. L9:
  510. POP BX,DS
  511. RET
  512. INTERN_TESTENV:
  513. CALL INTERN_INITENVROUTINES
  514. CMP CS:E001,0FFFFH
  515. JNE RET
  516. STC
  517. ADD SP,2
  518. RET
  519. INTERN_COUNTENTRYS:
  520. PUSH DX
  521. CALL INTERN_GETENVSTART1
  522. CMP ES:[DI],AX
  523. JZ >L1
  524. MOV DX,AX
  525. L0:
  526. REPNE SCASB
  527. INC DX
  528. CMP ES:[DI],AL
  529. JNZ L0
  530. L1:
  531. INC DI
  532. MOV AX,DX
  533. POP DX
  534. RET
  535. INTERN_UEBERTRAGEEINTRAG:
  536. MOV AL,0
  537. CALL DOSSTRTOSTR
  538. OR AH,AH
  539. RET
  540. INTERN_GETENVSTART:
  541. MOV AX,CS:E001
  542. INTERN_GETENVSTART1:
  543. PUSH AX
  544. DEC AX
  545. MOV ES,AX
  546. MOV DI,ES:[03]
  547. POP ES
  548. MOV CL,4
  549. SHL DI,CL
  550. MOV CX,DI
  551. XOR AX,AX
  552. MOV DI,AX
  553. RET
  554. #IF !INTERN_CMARK0
  555. INTERN_CMARK0 EQU 01H
  556. INTERN_CMARK1:
  557. PUSH BP
  558. MOV BP,SP
  559. MOV BX,06H
  560. SUB CH,[BP+SI]
  561. SUB AH,[BX+SI]
  562. DEC SP
  563. DEC CX
  564. INC DX
  565. XOR AL,041H
  566. CMP B[02820H],DH
  567. INC BX
  568. SUB W[BX+SI],SP
  569. INC DX
  570. CS AND B[BP+DI+043H],DL
  571. DEC AX
  572. INC BP
  573. DEC BP
  574. DEC BP
  575. INC BP
  576. PUSH DX
  577. AND B[BP+SI],CH
  578. SUB CH,[BP+SI]
  579. POP DX
  580. MOV SP,BP
  581. POP BP
  582. RET
  583. #ENDIF
  584.