COREWIND.A 24 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573
  1. (* Release 3.10 *)
  2. (*-------------------------------------------------------------------------*
  3. * *
  4. * COREWIND.A - core window routines *
  5. * *
  6. * COPYRIGHT (C) 1989..1992 Clarion Software Corporation. *
  7. * All Rights Reserved *
  8. * *
  9. *--------------------------------------------------------------------------*)
  10. include "corelib.inc"
  11. module win1
  12. (*****************************************************************************)
  13. (*%T _DLL *)
  14. segment _DATA(DATA,28H)
  15. public __initwin_vector : org FarCodePtrSize
  16. (*%E *)
  17. segment _BSS(BSS, 28H)
  18. public __fullscreen : org DataPtrSize
  19. public __uselist : org DataPtrSize
  20. public __windowstack : org DataPtrSize
  21. public __cursorstack : org DataPtrSize
  22. public __multip : org 1
  23. public __winsetup : org 1
  24. public __cursorlines: org 2
  25. (*%T SameDS *)
  26. segment _TEXT(CODE, 28H)
  27. (*%E *)
  28. (*%F SameDS *)
  29. segment COREWIND_TEXT(CODE, 28H)
  30. (*%E *)
  31. extrn __wfu
  32. public __ScrnAddr : dw 0,ColorSeg
  33. public __ActPag : db 0
  34. public __IsColor : db TRUE
  35. public __IsSnow : db 0
  36. segment _DATA(DATA, 28H)
  37. extrn __IsDirect
  38. public __ScreenSel : dw 0
  39. public __Config : dw 10,0,0,0,0
  40. public __BufInf : dw 0,0,8000,0,0
  41. public __Status : db 0
  42. (*%F _OS2 *)
  43. (*****************************************************************************)
  44. section
  45. segment _DATA(DATA, 28H)
  46. (*%T SameDS *)
  47. segment _TEXT(CODE,28H)
  48. (*%E *)
  49. (*%F SameDS *)
  50. segment COREWIND_TEXT(CODE,28H)
  51. (*%E *)
  52. extrn __wfu
  53. extrn __ScrnAddr
  54. extrn __ActPag
  55. extrn __IsColor
  56. extrn __IsSnow
  57. (*%F RegParam *)
  58. RetSize = 0
  59. (*%E *)
  60. (*%T RegParam *)
  61. (*%T NearPtr *)
  62. RetSize = 0
  63. (*%E *)
  64. (*%F NearPtr *)
  65. RetSize = 4
  66. (*%E *)
  67. (*%E *)
  68. (*%F RegParam *)
  69. BuffL = frame
  70. (*%F NearPtr *)
  71. StrL = 4+frame
  72. Len = 8+frame
  73. Attr = 10+frame
  74. (*%E *)
  75. (*%T NearPtr *)
  76. StrL = 2+frame
  77. Len = 4+frame
  78. Attr = 6+frame
  79. (*%E *)
  80. (*%E *)
  81. (*%T RegParam *)
  82. (*%F NearPtr *)
  83. Len = 2+frame
  84. Attr = frame
  85. (*%E *)
  86. (*%E *)
  87. public __bufferwrite :
  88. push bp
  89. mov bp, sp
  90. push ds
  91. push si
  92. push di
  93. (*%T RegParam *)
  94. (*%F NearPtr *)
  95. mov ds, dx
  96. mov si, cx
  97. mov es, bx
  98. mov di, ax
  99. (*%E *)
  100. (*%T NearPtr *)
  101. mov si, bx
  102. mov di, ax
  103. mov ax, _DATA
  104. mov es, ax
  105. (*%E *)
  106. (*%E *)
  107. (*%F RegParam *)
  108. mov cx, [bp][Len]
  109. (*%F NearPtr *)
  110. lds si, [bp][StrL]
  111. les di, [bp][BuffL]
  112. (*%E *)
  113. (*%T NearPtr *)
  114. mov si, [bp][StrL]
  115. mov di, [bp][BuffL]
  116. mov ax, _DATA
  117. mov es, ax
  118. (*%E *)
  119. mov ah, [bp][Attr]
  120. (*%E *)
  121. (*%T RegParam *)
  122. (*%F NearPtr *)
  123. mov cx, [bp][Len]
  124. mov ah, [bp][Attr]
  125. (*%E *)
  126. (*%T NearPtr *)
  127. mov ah, dl
  128. (*%E *)
  129. (*%E *)
  130. jcxz $Exit
  131. LDoWrite:
  132. LWriteLoop:
  133. lodsb
  134. stosw
  135. loop LWriteLoop
  136. $Exit:
  137. pop di
  138. pop si
  139. pop ds
  140. pop bp
  141. (*%F NearCall *)
  142. ret far RetSize
  143. (*%E *)
  144. (*%T NearCall *)
  145. ret RetSize
  146. (*%E *)
  147. dw __wfu
  148. (*****************************************************************************)
  149. section
  150. segment _DATA(DATA, 28H)
  151. (*%T SameDS *)
  152. segment _TEXT(CODE,28H)
  153. (*%E *)
  154. (*%F SameDS *)
  155. segment COREWIND_TEXT(CODE,28H)
  156. (*%E *)
  157. public __getscreendepth :
  158. push bp
  159. mov bp, sp
  160. mov ax, 1130H
  161. sub bx, bx
  162. sub cx, cx
  163. sub dx, dx
  164. int 10H
  165. or cx, cx
  166. jnz not25
  167. mov dl, 24
  168. not25:
  169. mov al, dl
  170. inc al
  171. pop bp
  172. (*%F NearCall *)
  173. ret far 0
  174. (*%E *)
  175. (*%T NearCall *)
  176. ret 0
  177. (*%E *)
  178. (*****************************************************************************)
  179. section
  180. segment _DATA(DATA, 28H)
  181. (*%T SameDS *)
  182. segment _TEXT(CODE,28H)
  183. (*%E *)
  184. (*%F SameDS *)
  185. segment COREWIND_TEXT(CODE,28H)
  186. (*%E *)
  187. extrn __ScrnAddr
  188. extrn __ActPag
  189. extrn __IsColor
  190. extrn __IsSnow
  191. (*%F RegParam *)
  192. RetSize = 0
  193. (*%E *)
  194. (*%T RegParam *)
  195. (*%T NearPtr *)
  196. RetSize = 0
  197. (*%E *)
  198. (*%F NearPtr *)
  199. RetSize = 6
  200. (*%E *)
  201. (*%E *)
  202. (*%F RegParam *)
  203. ToL = frame
  204. (*%F NearPtr *)
  205. FromL = 4+frame
  206. Len = 8+frame
  207. PalL = 10+frame
  208. (*%E *)
  209. (*%T NearPtr *)
  210. FromL = 2+frame
  211. Len = 4+frame
  212. PalL = 6+frame
  213. (*%E *)
  214. (*%E *)
  215. (*%T RegParam *)
  216. (*%F NearPtr *)
  217. ToL = -4
  218. FromL = -8
  219. Len = 4+frame
  220. PalL = frame
  221. (*%E *)
  222. (*%T NearPtr *)
  223. ToL = -2
  224. FromL = -4
  225. Len = -6
  226. PalL = -8
  227. (*%E *)
  228. locals = 8
  229. (*%E *)
  230. public __palxlat :
  231. push bp
  232. mov bp,sp
  233. (*%T RegParam *)
  234. sub sp, locals
  235. (*%F NearPtr *)
  236. mov [bp][ToL], ax
  237. mov [bp][ToL][2], bx
  238. mov [bp][FromL], cx
  239. mov [bp][FromL][2], dx
  240. (*%E *)
  241. (*%T NearPtr *)
  242. mov [bp][ToL], ax
  243. mov [bp][FromL], bx
  244. mov [bp][Len], cx
  245. mov [bp][PalL], dx
  246. (*%E *)
  247. (*%E *)
  248. push ds
  249. push si
  250. push di
  251. mov cx,[bp][Len]
  252. jcxz PXExit
  253. sub sp,10
  254. mov di,sp
  255. (* copy pallette onto stack *)
  256. (*%F NearPtr *)
  257. lds si,[bp][PalL]
  258. push ss
  259. pop es
  260. (*%E *)
  261. (*%T NearPtr *)
  262. mov si,[bp][PalL]
  263. mov ax, _DATA
  264. mov es, ax
  265. (*%E *)
  266. mov cx,5
  267. rep
  268. movsw
  269. mov bx,sp
  270. (*%F NearPtr *)
  271. lds si, [bp][FromL]
  272. les di, [bp][ToL]
  273. (*%E *)
  274. (*%T NearPtr *)
  275. mov si, [bp][FromL]
  276. mov di, [bp][ToL]
  277. (*%E *)
  278. mov cx,[bp][Len]
  279. PXloop:
  280. lodsw
  281. xchg al,ah
  282. db 36H (* ss override for xlat *)
  283. xlat
  284. xchg al,ah
  285. stosw
  286. loop PXloop
  287. add sp,10
  288. PXExit:
  289. pop di
  290. pop si
  291. pop ds
  292. (*%T RegParam *)
  293. mov sp, bp
  294. (*%E *)
  295. pop bp
  296. (*%F NearCall *)
  297. ret far RetSize
  298. (*%E *)
  299. (*%T NearCall *)
  300. ret RetSize
  301. (*%E *)
  302. (*****************************************************************************)
  303. section
  304. section
  305. segment _DATA(DATA, 28H)
  306. (*%T SameDS *)
  307. segment _TEXT(CODE,28H)
  308. (*%E *)
  309. (*%F SameDS *)
  310. segment COREWIND_TEXT(CODE,28H)
  311. (*%E *)
  312. extrn __wfu
  313. extrn __ScrnAddr
  314. extrn __ActPag
  315. extrn __IsColor
  316. extrn __IsSnow
  317. (*%F RegParam *)
  318. RetSize = 0
  319. (*%E *)
  320. (*%T RegParam *)
  321. (*%F NearPtr *)
  322. RetSize = 2
  323. (*%E *)
  324. (*%T NearPtr *)
  325. RetSize = 0
  326. (*%E *)
  327. (*%E *)
  328. (*%F RegParam *)
  329. X = frame
  330. Y = 2+frame
  331. SourceL = 4+frame
  332. (*%F NearPtr *)
  333. Len = 8+frame
  334. (*%E *)
  335. (*%T NearPtr *)
  336. Len = 6+frame
  337. (*%E *)
  338. (*%E *)
  339. (*%T RegParam *)
  340. Len = frame
  341. (*%E *)
  342. public __buffertoscreen :
  343. push bp
  344. mov bp,sp
  345. push ds
  346. push si
  347. push di
  348. (*%F RegParam *)
  349. (*%F NearPtr *)
  350. lds si,[bp][SourceL]
  351. (*%E *)
  352. (*%T NearPtr *)
  353. mov si,[bp][SourceL]
  354. (*%E *)
  355. mov ax,[bp][Y]
  356. mov di,[bp][X]
  357. mov dx, [bp][Len]
  358. (*%E *)
  359. (*%T RegParam *)
  360. (*%F NearPtr *)
  361. mov ds, dx
  362. mov si,cx
  363. mov dx, [bp][Len]
  364. (*%E *)
  365. (*%T NearPtr *)
  366. mov si, cx
  367. (*%E *)
  368. mov di, ax
  369. mov ax, bx
  370. (*%E *)
  371. mov cl,4
  372. shl ax,cl (* 16Y *)
  373. add di,ax
  374. shl ax,1
  375. shl ax,1
  376. add di,ax (* +64Y=80Y *)
  377. shl di,1
  378. mov cx, dx
  379. les dx, cs:[__ScrnAddr]
  380. add di,dx
  381. cmp byte cs:[__IsSnow],FALSE
  382. je BtsNoSnowMove
  383. pushf
  384. mov dx, ColorStatusReg
  385. mov bl, 1
  386. cld
  387. sti
  388. push bp
  389. BtsLoop:
  390. lodsw
  391. mov bp, ax
  392. BtsWaitNotHoriz:
  393. in al, dx
  394. rcr al, 1
  395. jc BtsWaitNotHoriz
  396. cli
  397. BtsWait:
  398. in al,dx
  399. rcr al,1
  400. jnc BtsWait
  401. xchg ax,bp
  402. stosw
  403. sti
  404. loop BtsLoop
  405. pop bp
  406. popf
  407. jmp BtsRet
  408. BtsNoSnowMove:
  409. BtsIsBW:
  410. rep
  411. movsw
  412. BtsRet:
  413. pop di
  414. pop si
  415. pop ds
  416. pop bp
  417. (*%F NearCall *)
  418. ret far RetSize
  419. (*%E *)
  420. (*%T NearCall *)
  421. ret RetSize
  422. (*%E *)
  423. dw __wfu
  424. (*****************************************************************************)
  425. section
  426. segment _DATA(DATA, 28H)
  427. (*%T SameDS *)
  428. segment _TEXT(CODE,28H)
  429. (*%E *)
  430. (*%F SameDS *)
  431. segment COREWIND_TEXT(CODE,28H)
  432. (*%E *)
  433. extrn __ScrnAddr
  434. extrn __ActPag
  435. extrn __IsColor
  436. extrn __IsSnow
  437. (*%F RegParam *)
  438. RetSize = 0
  439. (*%E *)
  440. (*%T RegParam *)
  441. (*%F NearPtr *)
  442. RetSize = 2
  443. (*%E *)
  444. (*%T NearPtr *)
  445. RetSize = 0
  446. (*%E *)
  447. (*%E *)
  448. (*%F RegParam *)
  449. X = frame
  450. Y = 2+frame
  451. DestL = 4+frame
  452. (*%F NearPtr *)
  453. Len = 8+frame
  454. (*%E *)
  455. (*%T NearPtr *)
  456. Len = 6+frame
  457. (*%E *)
  458. (*%E *)
  459. (*%T RegParam *)
  460. Len = frame
  461. (*%E *)
  462. public __screentobuffer :
  463. push bp
  464. mov bp,sp
  465. push ds
  466. push si
  467. push di
  468. (*%F RegParam *)
  469. (*%F NearPtr *)
  470. les di,[bp][DestL]
  471. (*%E *)
  472. (*%T NearPtr *)
  473. mov di,[bp][DestL]
  474. mov ax, _DATA
  475. mov es, ax
  476. (*%E *)
  477. mov ax,[bp][Y]
  478. mov si,[bp][X]
  479. mov dx, [bp][Len]
  480. (*%E *)
  481. (*%T RegParam *)
  482. (*%F NearPtr *)
  483. mov es, dx
  484. mov di,cx
  485. mov dx, [bp][Len]
  486. (*%E *)
  487. (*%T NearPtr *)
  488. mov di, _DATA
  489. mov es, di
  490. mov di, cx
  491. (*%E *)
  492. mov si, ax
  493. mov ax, bx
  494. (*%E *)
  495. mov cl,4
  496. shl ax,cl (* 16Y *)
  497. add si,ax
  498. shl ax,1
  499. shl ax,1
  500. add si,ax (* +64Y=80Y *)
  501. shl si,1
  502. mov cx, dx
  503. lds dx, cs:[__ScrnAddr]
  504. add si,dx
  505. cmp byte cs:[__IsSnow],FALSE
  506. je StbNoSnowMove
  507. pushf
  508. mov dx, ColorStatusReg
  509. add cx, cx (* bytes *)
  510. mov bl, 1
  511. cld
  512. StbLoop:
  513. StbWaitNotHoriz:
  514. in al, dx
  515. rcr al, 1
  516. jc StbWaitNotHoriz
  517. cli
  518. StbWait:
  519. in al, dx
  520. rcr al, 1
  521. jnc StbWait
  522. movsb
  523. sti
  524. loop StbLoop
  525. popf
  526. jmp StbRet
  527. StbNoSnowMove:
  528. cld
  529. rep
  530. movsw
  531. StbRet:
  532. pop di
  533. pop si
  534. pop ds
  535. pop bp
  536. (*%F NearCall *)
  537. ret far RetSize
  538. (*%E *)
  539. (*%T NearCall *)
  540. ret RetSize
  541. (*%E *)
  542. (*****************************************************************************)
  543. section
  544. segment _DATA(DATA, 28H)
  545. (*%T SameDS *)
  546. segment _TEXT(CODE,28H)
  547. (*%E *)
  548. (*%F SameDS *)
  549. segment COREWIND_TEXT(CODE,28H)
  550. (*%E *)
  551. extrn __ScrnAddr
  552. extrn __ActPag
  553. extrn __IsColor
  554. extrn __IsSnow
  555. (*%F RegParam *)
  556. NewPage = frame
  557. (*%E *)
  558. (*%T RegParam *)
  559. NewPage = -2
  560. locals = 2
  561. (*%E *)
  562. public __setvideopage :
  563. push bp
  564. mov bp,sp
  565. (*%T RegParam *)
  566. sub sp, locals
  567. mov [bp][NewPage], ax
  568. (*%E *)
  569. (*%F RegParam *)
  570. mov ax, [bp][NewPage]
  571. (*%E *)
  572. mov cs:[__ActPag], al
  573. mov ah, 5
  574. push bp
  575. int 10H
  576. pop bp
  577. mov ax,[bp][NewPage]
  578. mov bx, 100H
  579. mul bx
  580. add ax, ColorSeg
  581. mov cs:[__ScrnAddr][2],ax
  582. mov word cs:[__ScrnAddr],0
  583. (*%T RegParam *)
  584. mov sp, bp
  585. (*%E *)
  586. pop bp
  587. (*%F NearCall *)
  588. ret far 0
  589. (*%E *)
  590. (*%T NearCall *)
  591. ret 0
  592. (*%E *)
  593. (*****************************************************************************)
  594. section
  595. segment _DATA(DATA, 28H)
  596. (*%T SameDS *)
  597. segment _TEXT(CODE,28H)
  598. (*%E *)
  599. (*%F SameDS *)
  600. segment COREWIND_TEXT(CODE,28H)
  601. (*%E *)
  602. extrn __ActPag
  603. public __activepage :
  604. mov al, cs:[__ActPag]
  605. cbw
  606. (*%F NearCall *)
  607. ret far 0
  608. (*%E *)
  609. (*%T NearCall *)
  610. ret 0
  611. (*%E *)
  612. (*****************************************************************************)
  613. section
  614. segment _DATA(DATA, 28H)
  615. (*%T SameDS *)
  616. segment _TEXT(CODE,28H)
  617. (*%E *)
  618. (*%F SameDS *)
  619. segment COREWIND_TEXT(CODE,28H)
  620. (*%E *)
  621. extrn __ScrnAddr
  622. extrn __ActPag
  623. extrn __IsColor
  624. extrn __IsSnow
  625. IsSnow = frame
  626. (* initialize screen type *)
  627. public __initscreentype :
  628. push bp
  629. mov bp,sp
  630. push ds
  631. push si
  632. push di
  633. mov si, ax
  634. mov byte cs:[__IsColor], TRUE
  635. mov word cs:[__ScrnAddr],0
  636. mov word cs:[__ScrnAddr][2],ColorSeg
  637. mov ah,15
  638. push bp
  639. int 10H
  640. pop bp
  641. cmp al,7
  642. (*%F RegParam *)
  643. mov al,[bp][IsSnow]
  644. (*%E *)
  645. (*%T RegParam *)
  646. mov ax, si
  647. (*%E *)
  648. jne LIsColor
  649. mov byte cs:[__IsColor],FALSE
  650. mov word cs:[__ScrnAddr][2],BWseg
  651. mov al,FALSE
  652. LIsColor:
  653. mov cs:[__IsSnow],al
  654. (* Check for Desqview window *)
  655. sub di,di
  656. les di,cs:[__ScrnAddr]
  657. mov ax,0FE00H
  658. int 10H
  659. mov ax,es
  660. cmp ax,cs:[__ScrnAddr][2]
  661. jz NoDV
  662. mov cs:[__ScrnAddr],di
  663. mov cs:[__ScrnAddr][2],es
  664. mov byte cs:[__IsSnow],0
  665. NoDV:
  666. pop di
  667. pop si
  668. pop ds
  669. pop bp
  670. (*%F NearCall *)
  671. ret far 0
  672. (*%E *)
  673. (*%T NearCall *)
  674. ret 0
  675. (*%E *)
  676. (****************************************************************************)
  677. section
  678. segment _INIT(INIT_CODE,28H)
  679. segment _DATA(DATA, 28H)
  680. segment _TEXT(CODE,28H)
  681. extrn __initwin
  682. extrn __initwin_vector
  683. select _DATA
  684. select _TEXT
  685. do_initconio : (* defined later on ! *)
  686. select _INIT
  687. (*%F NearCall *)
  688. initconio : dw MAGIC_NUM
  689. db PR4
  690. dd do_initconio
  691. (*%E *)
  692. (*%T NearCall *)
  693. initconio : dw MAGIC_NUM
  694. db PR4
  695. dw do_initconio
  696. (*%E *)
  697. select _DATA
  698. public __wfu : dw 0, initconio
  699. select _TEXT
  700. (*%T _DLLOVL *)
  701. push bp
  702. mov bp, sp
  703. (*%E *)
  704. (*%F _DLL *)
  705. (*%F NearCall *)
  706. call far __initwin
  707. (*%E *)
  708. (*%T NearCall *)
  709. call __initwin
  710. (*%E *)
  711. (*%E *)
  712. (*%T _DLL *)
  713. push ds
  714. mov ax, _DATA
  715. mov ds, ax
  716. cmp word [__initwin_vector], 0
  717. jz noCall
  718. call far [__initwin_vector]
  719. noCall:
  720. pop ds
  721. (*%E *)
  722. (*%F NearCall *)
  723. (*%T _DLLOVL *)
  724. pop bp
  725. (*%E *)
  726. ret far 0
  727. (*%E *)
  728. (*%T NearCall *)
  729. ret 0
  730. (*%E *)
  731. (*%E *)
  732. (*%T _OS2 *)
  733. (****************************************************************************)
  734. section
  735. segment _INIT(INIT_CODE,28H)
  736. segment _DATA(DATA, 28H)
  737. segment _TEXT(CODE,28H)
  738. extrn __initwin
  739. extrn __initwin_vector
  740. select _DATA
  741. select _TEXT
  742. do_initconio : (* defined later on ! *)
  743. select _INIT
  744. (*%F NearCall *)
  745. initconio : dw MAGIC_NUM
  746. db PR4
  747. dd do_initconio
  748. (*%E *)
  749. (*%T NearCall *)
  750. initconio : dw MAGIC_NUM
  751. db PR4
  752. dw do_initconio
  753. (*%E *)
  754. select _DATA
  755. public __IsDirect : dw 0, initconio
  756. select _TEXT
  757. (*%F _DLL *)
  758. (*%F NearCall *)
  759. call far __initwin
  760. (*%E *)
  761. (*%T NearCall *)
  762. call __initwin
  763. (*%E *)
  764. (*%E *)
  765. (*%T _DLL *)
  766. push ds
  767. mov ax, _DATA
  768. mov ds, ax
  769. cmp word [__initwin_vector], 0
  770. jz noCall
  771. call far [__initwin_vector]
  772. noCall:
  773. pop ds
  774. (*%E *)
  775. (*%F NearCall *)
  776. ret far 0
  777. (*%E *)
  778. (*%T NearCall *)
  779. ret 0
  780. (*%E *)
  781. (****************************************************************************)
  782. section
  783. segment _DATA(DATA, 28H)
  784. (*%T SameDS *)
  785. segment _TEXT(CODE,28H)
  786. (*%E *)
  787. (*%F SameDS *)
  788. segment COREWIND_TEXT(CODE,28H)
  789. (*%E *)
  790. extrn __IsDirect
  791. extrn __ScreenSel
  792. extrn __Config
  793. extrn __BufInf
  794. extrn __Status
  795. extrn VIOREADCELLSTR
  796. extrn VIOWRTCELLSTR
  797. extrn VIOSCRUNLOCK
  798. extrn VIOSCRLOCK
  799. extrn VIOGETCONFIG
  800. extrn VIOGETPHYSBUF
  801. (*%F RegParam *)
  802. RetSize = 0
  803. (*%E *)
  804. (*%T RegParam *)
  805. (*%T NearPtr *)
  806. RetSize = 0
  807. (*%E *)
  808. (*%F NearPtr *)
  809. RetSize = 4
  810. (*%E *)
  811. (*%E *)
  812. (*%F RegParam *)
  813. BuffL = frame
  814. (*%F NearPtr *)
  815. StrL = 4+frame
  816. Len = 8+frame
  817. Attr = 10+frame
  818. (*%E *)
  819. (*%T NearPtr *)
  820. StrL = 2+frame
  821. Len = 4+frame
  822. Attr = 6+frame
  823. (*%E *)
  824. (*%E *)
  825. (*%T RegParam *)
  826. (*%F NearPtr *)
  827. Len = 2+frame
  828. Attr = frame
  829. (*%E *)
  830. (*%E *)
  831. public __bufferwrite :
  832. push bp
  833. mov bp, sp
  834. push ds
  835. push si
  836. push di
  837. (*%T RegParam *)
  838. (*%F NearPtr *)
  839. mov ds, dx
  840. mov si, cx
  841. mov es, bx
  842. mov di, ax
  843. (*%E *)
  844. (*%T NearPtr *)
  845. mov si, bx
  846. mov di, ax
  847. mov ax, _DATA
  848. mov es, ax
  849. (*%E *)
  850. (*%E *)
  851. (*%F RegParam *)
  852. mov cx, [bp][Len]
  853. (*%F NearPtr *)
  854. lds si, [bp][StrL]
  855. les di, [bp][BuffL]
  856. (*%E *)
  857. (*%T NearPtr *)
  858. mov si, [bp][StrL]
  859. mov di, [bp][BuffL]
  860. mov ax, _DATA
  861. mov es, ax
  862. (*%E *)
  863. mov ah, [bp][Attr]
  864. (*%E *)
  865. (*%T RegParam *)
  866. (*%F NearPtr *)
  867. mov cx, [bp][Len]
  868. mov ah, [bp][Attr]
  869. (*%E *)
  870. (*%T NearPtr *)
  871. mov ah, dl
  872. (*%E *)
  873. (*%E *)
  874. jcxz $Exit
  875. LDoWrite:
  876. LWriteLoop:
  877. lodsb
  878. stosw
  879. loop LWriteLoop
  880. $Exit:
  881. pop di
  882. pop si
  883. pop ds
  884. pop bp
  885. (*%F NearCall *)
  886. ret far RetSize
  887. (*%E *)
  888. (*%T NearCall *)
  889. ret RetSize
  890. (*%E *)
  891. (*****************************************************************************)
  892. section
  893. segment _DATA(DATA, 28H)
  894. (*%T SameDS *)
  895. segment _TEXT(CODE,28H)
  896. (*%E *)
  897. (*%F SameDS *)
  898. segment COREWIND_TEXT(CODE,28H)
  899. (*%E *)
  900. extrn VIOGETMODE
  901. buf = -34
  902. locals = 34
  903. rows = 6
  904. public __getscreendepth :
  905. push bp
  906. mov bp, sp
  907. sub sp, locals
  908. lea bx, [bp][buf]
  909. mov word ss:[bx][0], locals
  910. push ss
  911. push bx
  912. sub ax, ax
  913. push ax
  914. call far VIOGETMODE
  915. mov al, [bp][buf][rows]
  916. mov sp, bp
  917. pop bp
  918. (*%F NearCall *)
  919. ret far 0
  920. (*%E *)
  921. (*%T NearCall *)
  922. ret 0
  923. (*%E *)
  924. (****************************************************************************)
  925. section
  926. segment _DATA(DATA, 28H)
  927. (*%T SameDS *)
  928. segment _TEXT(CODE,28H)
  929. (*%E *)
  930. (*%F SameDS *)
  931. segment COREWIND_TEXT(CODE,28H)
  932. (*%E *)
  933. extrn __IsDirect
  934. extrn __ScreenSel
  935. extrn __Config
  936. extrn __BufInf
  937. extrn __Status
  938. extrn VIOREADCELLSTR
  939. extrn VIOWRTCELLSTR
  940. extrn VIOSCRUNLOCK
  941. extrn VIOSCRLOCK
  942. extrn VIOGETCONFIG
  943. extrn VIOGETPHYSBUF
  944. (*%F RegParam *)
  945. RetSize = 0
  946. (*%E *)
  947. (*%T RegParam *)
  948. (*%T NearPtr *)
  949. RetSize = 0
  950. (*%E *)
  951. (*%F NearPtr *)
  952. RetSize = 6
  953. (*%E *)
  954. (*%E *)
  955. (*%F RegParam *)
  956. ToL = frame
  957. (*%F NearPtr *)
  958. FromL = 4+frame
  959. Len = 8+frame
  960. PalL = 10+frame
  961. (*%E *)
  962. (*%T NearPtr *)
  963. FromL = 2+frame
  964. Len = 4+frame
  965. PalL = 6+frame
  966. (*%E *)
  967. (*%E *)
  968. (*%T RegParam *)
  969. (*%F NearPtr *)
  970. ToL = -4
  971. FromL = -8
  972. Len = 4+frame
  973. PalL = frame
  974. (*%E *)
  975. (*%T NearPtr *)
  976. ToL = -2
  977. FromL = -4
  978. Len = -6
  979. PalL = -8
  980. (*%E *)
  981. locals = 8
  982. (*%E *)
  983. public __palxlat :
  984. push bp
  985. mov bp,sp
  986. (*%T RegParam *)
  987. sub sp, locals
  988. (*%F NearPtr *)
  989. mov [bp][ToL], ax
  990. mov [bp][ToL][2], bx
  991. mov [bp][FromL], cx
  992. mov [bp][FromL][2], dx
  993. (*%E *)
  994. (*%T NearPtr *)
  995. mov [bp][ToL], ax
  996. mov [bp][FromL], bx
  997. mov [bp][Len], cx
  998. mov [bp][PalL], dx
  999. (*%E *)
  1000. (*%E *)
  1001. push ds
  1002. push si
  1003. push di
  1004. mov cx,[bp][Len]
  1005. jcxz PXExit
  1006. sub sp,10
  1007. mov di,sp
  1008. (* copy pallette onto stack *)
  1009. (*%F NearPtr *)
  1010. lds si,[bp][PalL]
  1011. push ss
  1012. pop es
  1013. (*%E *)
  1014. (*%T NearPtr *)
  1015. mov si,[bp][PalL]
  1016. mov ax, _DATA
  1017. mov es, ax
  1018. (*%E *)
  1019. mov cx,5
  1020. rep
  1021. movsw
  1022. mov bx,sp
  1023. (*%F NearPtr *)
  1024. lds si, [bp][FromL]
  1025. les di, [bp][ToL]
  1026. (*%E *)
  1027. (*%T NearPtr *)
  1028. mov si, [bp][FromL]
  1029. mov di, [bp][ToL]
  1030. (*%E *)
  1031. mov cx,[bp][Len]
  1032. PXloop:
  1033. lodsw
  1034. xchg al,ah
  1035. db 36H (* ss override for xlat *)
  1036. xlat
  1037. xchg al,ah
  1038. stosw
  1039. loop PXloop
  1040. add sp,10
  1041. PXExit:
  1042. pop di
  1043. pop si
  1044. pop ds
  1045. (*%T RegParam *)
  1046. mov sp, bp
  1047. (*%E *)
  1048. pop bp
  1049. (*%F NearCall *)
  1050. ret far RetSize
  1051. (*%E *)
  1052. (*%T NearCall *)
  1053. ret RetSize
  1054. (*%E *)
  1055. (****************************************************************************)
  1056. section
  1057. segment _DATA(DATA, 28H)
  1058. (*%T SameDS *)
  1059. segment _TEXT(CODE,28H)
  1060. (*%E *)
  1061. (*%F SameDS *)
  1062. segment COREWIND_TEXT(CODE,28H)
  1063. (*%E *)
  1064. extrn __IsDirect
  1065. extrn __ScreenSel
  1066. extrn __Config
  1067. extrn __BufInf
  1068. extrn __Status
  1069. extrn VIOREADCELLSTR
  1070. extrn VIOWRTCELLSTR
  1071. extrn VIOSCRUNLOCK
  1072. extrn VIOSCRLOCK
  1073. extrn VIOGETCONFIG
  1074. extrn VIOGETPHYSBUF
  1075. (*%F RegParam *)
  1076. RetSize = 0
  1077. (*%E *)
  1078. (*%T RegParam *)
  1079. (*%F NearPtr *)
  1080. RetSize = 2
  1081. (*%E *)
  1082. (*%T NearPtr *)
  1083. RetSize = 0
  1084. (*%E *)
  1085. (*%E *)
  1086. (*%F RegParam *)
  1087. X = frame
  1088. Y = 2+frame
  1089. SourceL = 4+frame
  1090. (*%F NearPtr *)
  1091. Len = 8+frame
  1092. (*%E *)
  1093. (*%T NearPtr *)
  1094. Len = 6+frame
  1095. (*%E *)
  1096. (*%E *)
  1097. (*%T RegParam *)
  1098. (*%F NearPtr *)
  1099. Len = frame
  1100. X = -2
  1101. Y = -4
  1102. SourceL =-8
  1103. locals = 8
  1104. (*%E *)
  1105. (*%T NearPtr *)
  1106. X = -2
  1107. Y = -4
  1108. SourceL =-8
  1109. Len = -10
  1110. locals = 10
  1111. (*%E *)
  1112. (*%E *)
  1113. public __buffertoscreen :
  1114. push bp
  1115. mov bp, sp
  1116. (*%T RegParam *)
  1117. sub sp, locals
  1118. mov [bp][X], ax
  1119. mov [bp][Y], bx
  1120. mov [bp][SourceL], cx
  1121. (*%F NearPtr *)
  1122. mov [bp][SourceL][2], dx
  1123. (*%E *)
  1124. (*%T NearPtr *)
  1125. mov [bp][Len], dx
  1126. (*%E *)
  1127. (*%E *)
  1128. (*%F SameDS *)
  1129. push ds
  1130. mov ax, _DATA
  1131. mov ds, ax
  1132. (*%E *)
  1133. cmp byte [__IsDirect],0
  1134. jne FBufferToScreen
  1135. NBTS:
  1136. (*%F NearPtr *)
  1137. push [bp][SourceL][2]
  1138. (*%E *)
  1139. (*%T NearPtr *)
  1140. push ds
  1141. (*%E *)
  1142. push [bp][SourceL]
  1143. mov ax, [bp][Len]
  1144. shl ax,1
  1145. push ax
  1146. push [bp][Y]
  1147. push [bp][X]
  1148. xor ax, ax
  1149. push ax
  1150. call far VIOWRTCELLSTR
  1151. RetBufferToScreen:
  1152. (*%F SameDS *)
  1153. pop ds
  1154. (*%E *)
  1155. (*%T RegParam *)
  1156. mov sp, bp
  1157. (*%E *)
  1158. pop bp
  1159. (*%F NearCall *)
  1160. ret far RetSize
  1161. (*%E *)
  1162. (*%T NearCall *)
  1163. ret RetSize
  1164. (*%E *)
  1165. FBufferToScreen:
  1166. xor ax,ax
  1167. push ax
  1168. push ds
  1169. mov ax, __Status
  1170. push ax
  1171. xor ax,ax;
  1172. push ax
  1173. call far VIOSCRLOCK;
  1174. cmp byte [__Status], 0
  1175. jne NBTS
  1176. erTest:
  1177. or ax, ax
  1178. jne NBTS
  1179. push si
  1180. push di
  1181. push ds
  1182. mov es, [__ScreenSel]
  1183. (*%F NearPtr *)
  1184. lds si,[bp][SourceL]
  1185. (*%E *)
  1186. (*%T NearPtr *)
  1187. mov si,[bp][SourceL]
  1188. (*%E *)
  1189. mov ax, [bp][Y]
  1190. mov di, [bp][X]
  1191. mov cl, 4
  1192. shl ax, cl (* 16Y *)
  1193. add di, ax
  1194. shl ax, 1
  1195. shl ax, 1
  1196. add di, ax (* +64Y=80Y *)
  1197. shl di, 1
  1198. mov cx, [bp][Len]
  1199. rep
  1200. movsw
  1201. pop ds
  1202. pop di
  1203. pop si
  1204. xor ax,ax
  1205. push ax
  1206. call far VIOSCRUNLOCK
  1207. jmp RetBufferToScreen
  1208. (****************************************************************************)
  1209. section
  1210. segment _DATA(DATA, 28H)
  1211. (*%T SameDS *)
  1212. segment _TEXT(CODE,28H)
  1213. (*%E *)
  1214. (*%F SameDS *)
  1215. segment COREWIND_TEXT(CODE,28H)
  1216. (*%E *)
  1217. extrn __IsDirect
  1218. extrn __ScreenSel
  1219. extrn __Config
  1220. extrn __BufInf
  1221. extrn __Status
  1222. extrn VIOREADCELLSTR
  1223. extrn VIOWRTCELLSTR
  1224. extrn VIOSCRUNLOCK
  1225. extrn VIOSCRLOCK
  1226. extrn VIOGETCONFIG
  1227. extrn VIOGETPHYSBUF
  1228. (*%F RegParam *)
  1229. RetSize = 0
  1230. (*%E *)
  1231. (*%T RegParam *)
  1232. (*%F NearPtr *)
  1233. RetSize = 2
  1234. (*%E *)
  1235. (*%T NearPtr *)
  1236. RetSize = 0
  1237. (*%E *)
  1238. (*%E *)
  1239. (*%F RegParam *)
  1240. X = frame
  1241. Y = 2+frame
  1242. DestL = 4+frame
  1243. (*%F NearPtr *)
  1244. Len = 8+frame
  1245. (*%E *)
  1246. (*%T NearPtr *)
  1247. Len = 6+frame
  1248. (*%E *)
  1249. (*%E *)
  1250. (*%T RegParam *)
  1251. (*%F NearPtr *)
  1252. Len = frame
  1253. (*%E *)
  1254. (*%T NearPtr *)
  1255. Len = -2
  1256. locals = 2
  1257. (*%E *)
  1258. (*%E *)
  1259. public __screentobuffer :
  1260. (*%F RegParam *)
  1261. push bp
  1262. mov bp,sp
  1263. (*%F NearPtr *)
  1264. push [bp][DestL][2]
  1265. (*%E *)
  1266. (*%T NearPtr *)
  1267. push ds
  1268. (*%E *)
  1269. push [bp][DestL]
  1270. push ss
  1271. shl word [bp][Len],1
  1272. lea ax, [bp][Len]
  1273. push ax
  1274. push [bp][Y]
  1275. push [bp][X]
  1276. xor ax,ax
  1277. push ax
  1278. call far VIOREADCELLSTR
  1279. pop bp
  1280. (*%F NearCall *)
  1281. ret far RetSize
  1282. (*%E *)
  1283. (*%T NearCall *)
  1284. ret RetSize
  1285. (*%E *)
  1286. (*%E *)
  1287. (*%T RegParam *)
  1288. push bp
  1289. mov bp,sp
  1290. (*%T NearPtr *)
  1291. sub sp, locals
  1292. mov [bp][Len], dx
  1293. (*%E *)
  1294. (*%F NearPtr *)
  1295. push dx
  1296. push cx
  1297. (*%E *)
  1298. (*%T NearPtr *)
  1299. push ds
  1300. push cx
  1301. (*%E *)
  1302. push ss
  1303. shl word [bp][Len],1
  1304. lea dx, [bp][Len]
  1305. push dx
  1306. push bx
  1307. push ax
  1308. xor ax,ax
  1309. push ax
  1310. call far VIOREADCELLSTR
  1311. (*%T NearPtr *)
  1312. mov sp, bp
  1313. (*%E *)
  1314. pop bp
  1315. (*%F NearCall *)
  1316. ret far RetSize
  1317. (*%E *)
  1318. (*%T NearCall *)
  1319. ret RetSize
  1320. (*%E *)
  1321. (*%E *)
  1322. section
  1323. segment _DATA(DATA, 28H)
  1324. (*%T SameDS *)
  1325. segment _TEXT(CODE,28H)
  1326. (*%E *)
  1327. (*%F SameDS *)
  1328. segment COREWIND_TEXT(CODE,28H)
  1329. (*%E *)
  1330. extrn __IsDirect
  1331. extrn __ScreenSel
  1332. extrn __Config
  1333. extrn __BufInf
  1334. extrn __Status
  1335. extrn VIOREADCELLSTR
  1336. extrn VIOWRTCELLSTR
  1337. extrn VIOSCRUNLOCK
  1338. extrn VIOSCRLOCK
  1339. extrn VIOGETCONFIG
  1340. extrn VIOGETPHYSBUF
  1341. IsSnow = frame
  1342. (* initialize screen type *)
  1343. public __initscreentype :
  1344. push bp
  1345. mov bp, sp
  1346. (*%F SameDS *)
  1347. push ds
  1348. mov ax, _DATA
  1349. mov ds, ax
  1350. (*%E *)
  1351. mov byte [__IsDirect],0
  1352. cmp byte [bp][IsSnow],0
  1353. jne SkipInit
  1354. mov byte [__IsDirect],1
  1355. xor ax,ax
  1356. push ax
  1357. push ds
  1358. mov bx, __Config
  1359. push bx
  1360. push ax
  1361. call far VIOGETCONFIG
  1362. mov word [__BufInf],0
  1363. mov word [__BufInf][2], 0BH
  1364. cmp word [__Config][2], 0
  1365. je itsmono
  1366. mov word [__BufInf],8000H
  1367. mov word [__BufInf][2],0BH
  1368. itsmono:
  1369. push ds
  1370. mov ax, __BufInf
  1371. push ax
  1372. xor ax,ax
  1373. push ax
  1374. call far VIOGETPHYSBUF
  1375. or ax, ax
  1376. jz initOK
  1377. mov byte [__IsDirect], 0
  1378. jmp SkipInit
  1379. initOK:
  1380. mov ax,[__BufInf][8]
  1381. mov [__ScreenSel],ax
  1382. SkipInit:
  1383. (*%F SameDS *)
  1384. pop ds
  1385. (*%E *)
  1386. pop bp
  1387. (*%F NearCall *)
  1388. ret far 0
  1389. (*%E *)
  1390. (*%T NearCall *)
  1391. ret 0
  1392. (*%E *)
  1393. (*%E *)
  1394. (****************************************************************************)
  1395. (*%T _DLL *)
  1396. section
  1397. segment _DATA(DATA,28H)
  1398. segment _TEXT(CODE,28H)
  1399. extrn __initwin_vector
  1400. public __set_initwin_vector :
  1401. push ds
  1402. mov cx, _DATA
  1403. mov ds, cx
  1404. mov [__initwin_vector][2], bx
  1405. mov [__initwin_vector], ax
  1406. pop ds
  1407. ret far 0
  1408. (*%E *)
  1409. end