CORECLIP.A 68 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969
  1. (* Release 3.10 *)
  2. (*-------------------------------------------------------------------------*
  3. * *
  4. * CORECLIP.A - Borland clipping window module *
  5. * *
  6. * COPYRIGHT (C) 1989..1992 Clarion Software Corporation. *
  7. * All Rights Reserved *
  8. * *
  9. *--------------------------------------------------------------------------*)
  10. include "corelib.inc"
  11. module Borw
  12. (* Common Procedures *)
  13. (****************************************************************************)
  14. section
  15. (* ------------------------------------------------------------------------
  16. PROCEDURE - _incxy.
  17. PRECONDITIONS - None.
  18. POSTCONDITIONS - Cursor position advanced.
  19. IN PARAMETERS - row (CHAR), column (CHAR) in DH:DL.
  20. OUT PARAMETERS - returns new values DH:DL.
  21. CALLING CONVENTION - Near Call.
  22. NOTES - Internal.
  23. VERSION - OS2 and MSDOS.
  24. ------------------------------------------------------------------------ *)
  25. segment _TEXT(CODE,28H)
  26. segment _DATA(DATA, 28H)
  27. extrn __setxy
  28. extrn __scroll
  29. extrn __right
  30. extrn __top
  31. extrn __bottom
  32. extrn __left
  33. extrn __wscroll
  34. select _TEXT
  35. public __incxy : (* internal to conio *)
  36. (*%F SameDS *)
  37. push ds
  38. mov ax, _DATA
  39. mov ds, ax
  40. (*%E *)
  41. inc dl
  42. cmp dl, [__right]
  43. jbe xOK
  44. cmp dh, [__bottom]
  45. jae scrollUp
  46. mov dl, [__left]
  47. inc dh
  48. xOK:
  49. call __setxy
  50. (*%F SameDS *)
  51. pop ds
  52. (*%E *)
  53. ret 0
  54. scrollUp:
  55. cmp word [__wscroll], 0
  56. je xOK
  57. push dx
  58. mov ax, 601H
  59. mov ch, [__top]
  60. mov cl, [__left]
  61. mov dh, [__bottom]
  62. mov dl, [__right]
  63. call __scroll
  64. pop dx
  65. mov dl, [__left]
  66. jmp xOK
  67. (****************************************************************************)
  68. section
  69. (* ------------------------------------------------------------------------
  70. PROCEDURE - _decxy.
  71. PRECONDITIONS - None.
  72. POSTCONDITIONS - Cursor position decremented.
  73. IN PARAMETERS - row (CHAR), column (CHAR) in DH:DL.
  74. OUT PARAMETERS - returns new values DH:DL.
  75. CALLING CONVENTION - Near Call.
  76. NOTES - Internal.
  77. VERSION - OS2 and MSDOS.
  78. ------------------------------------------------------------------------ *)
  79. segment _TEXT(CODE,28H)
  80. segment _DATA(DATA, 28H)
  81. extrn __setxy
  82. extrn __scroll
  83. select _DATA
  84. extrn __right
  85. extrn __top
  86. extrn __bottom
  87. extrn __left
  88. select _TEXT
  89. public __decxy : (* internal to conio *)
  90. (*%F SameDS *)
  91. push ds
  92. mov ax, _DATA
  93. mov ds, ax
  94. (*%E *)
  95. dec dl
  96. cmp dl, [__left]
  97. jae xOK
  98. cmp dh, [__top]
  99. jbe screenBegin
  100. mov dl, [__right]
  101. dec dh
  102. xOK:
  103. call __setxy
  104. (*%F SameDS *)
  105. pop ds
  106. (*%E *)
  107. ret 0
  108. screenBegin:
  109. mov dh, [__top]
  110. mov dl, [__left]
  111. jmp xOK
  112. (****************************************************************************)
  113. section
  114. (* ------------------------------------------------------------------------
  115. PROCEDURE - clreol.
  116. PRECONDITIONS - None.
  117. POSTCONDITIONS - Screen cleared from cursor to end of line.
  118. IN PARAMETERS - None.
  119. OUT PARAMETERS - None.
  120. CALLING CONVENTION - Standard.
  121. NOTES - None.
  122. VERSION - OS2 and MSDOS.
  123. ------------------------------------------------------------------------ *)
  124. segment _TEXT(CODE,28H)
  125. segment _DATA(DATA, 28H)
  126. extrn __scroll
  127. extrn __getxy
  128. extrn __attrib
  129. extrn __right
  130. select _TEXT
  131. public _clreol : (* clear screen from cursor to eol *)
  132. (*%T _DLLOVL *)
  133. push bp
  134. mov bp, sp
  135. (*%E *)
  136. push ax
  137. push bx
  138. push cx
  139. push dx
  140. (*%F SameDS *)
  141. push ds
  142. mov ax, _DATA
  143. mov ds, ax
  144. (*%E *)
  145. call __getxy
  146. mov ax, 6FFH
  147. mov cx, dx
  148. mov dl, [__right] (* calculate end of line *)
  149. call __scroll (* use scroll to clear screen *)
  150. (*%F SameDS *)
  151. pop ds
  152. (*%E *)
  153. pop dx
  154. pop cx
  155. pop bx
  156. pop ax
  157. (*%T _DLLOVL *)
  158. pop bp
  159. (*%E *)
  160. (*%F NearCall *)
  161. ret far 0
  162. (*%E *)
  163. (*%T NearCall *)
  164. ret 0
  165. (*%E *)
  166. (****************************************************************************)
  167. section
  168. (* ------------------------------------------------------------------------
  169. PROCEDURE - clrscr.
  170. PRECONDITIONS - None.
  171. POSTCONDITIONS - Screen cleared and cursor home.
  172. IN PARAMETERS - None.
  173. OUT PARAMETERS - None.
  174. CALLING CONVENTION - Standard.
  175. NOTES - None.
  176. VERSION - OS2 and MSDOS.
  177. ------------------------------------------------------------------------ *)
  178. segment _TEXT(CODE,28H)
  179. segment _DATA(DATA, 28H)
  180. extrn __scroll
  181. extrn __setxy
  182. extrn __attrib
  183. extrn __top
  184. extrn __left
  185. extrn __bottom
  186. extrn __right
  187. select _TEXT
  188. public _clrscr : (* clear screen and home cursor *)
  189. (*%T _DLLOVL *)
  190. push bp
  191. mov bp, sp
  192. (*%E *)
  193. push ax
  194. push bx
  195. push cx
  196. push dx
  197. (*%F SameDS *)
  198. push ds
  199. mov ax, _DATA
  200. mov ds, ax
  201. (*%E *)
  202. mov ax, 06FFH
  203. mov ch, [__top]
  204. mov cl, [__left]
  205. mov dl, [__right]
  206. mov dh, [__bottom]
  207. call __scroll
  208. mov dh, [__top]
  209. mov dl, [__left]
  210. call __setxy
  211. (*%F SameDS *)
  212. pop ds
  213. (*%E *)
  214. pop dx
  215. pop cx
  216. pop bx
  217. pop ax
  218. (*%T _DLLOVL *)
  219. pop bp
  220. (*%E *)
  221. (*%F NearCall *)
  222. ret far 0
  223. (*%E *)
  224. (*%T NearCall *)
  225. ret 0
  226. (*%E *)
  227. (****************************************************************************)
  228. section
  229. (* ------------------------------------------------------------------------
  230. PROCEDURE - delline.
  231. PRECONDITIONS - None.
  232. POSTCONDITIONS - Current line deleted and screen scrolled up.
  233. IN PARAMETERS - None.
  234. OUT PARAMETERS - None.
  235. CALLING CONVENTION - Standard.
  236. NOTES - None.
  237. VERSION - OS2 and MSDOS.
  238. ------------------------------------------------------------------------ *)
  239. segment _TEXT(CODE,28H)
  240. segment _DATA(DATA, 28H)
  241. extrn __scroll
  242. extrn __getxy
  243. extrn __top
  244. extrn __left
  245. extrn __bottom
  246. extrn __right
  247. select _TEXT
  248. public _delline : (* delete current line *)
  249. (*%T _DLLOVL *)
  250. push bp
  251. mov bp, sp
  252. (*%E *)
  253. push ax
  254. push bx
  255. push cx
  256. push dx
  257. (*%F SameDS *)
  258. push ds
  259. mov ax, _DATA
  260. mov ds, ax
  261. (*%E *)
  262. call __getxy
  263. mov ch, dh
  264. mov cl, [__left]
  265. mov dh, [__bottom]
  266. mov dl, [__right]
  267. mov ax, 601H
  268. call __scroll
  269. (*%F SameDS *)
  270. pop ds
  271. (*%E *)
  272. pop dx
  273. pop cx
  274. pop bx
  275. pop ax
  276. (*%T _DLLOVL *)
  277. pop bp
  278. (*%E *)
  279. (*%F NearCall *)
  280. ret far 0
  281. (*%E *)
  282. (*%T NearCall *)
  283. ret 0
  284. (*%E *)
  285. (* __delline ENDP *)
  286. (****************************************************************************)
  287. section
  288. (* ------------------------------------------------------------------------
  289. PROCEDURE - insline.
  290. PRECONDITIONS - None.
  291. POSTCONDITIONS - Line inserted at current position and screen below
  292. scrolled up down.
  293. IN PARAMETERS - None.
  294. OUT PARAMETERS - None.
  295. CALLING CONVENTION - Standard.
  296. NOTES - None.
  297. VERSION - OS2 and MSDOS.
  298. ------------------------------------------------------------------------ *)
  299. segment _TEXT(CODE,28H)
  300. segment _DATA(DATA, 28H)
  301. extrn __scroll
  302. extrn __getxy
  303. extrn __top
  304. extrn __left
  305. extrn __bottom
  306. extrn __right
  307. select _TEXT
  308. public _insline : (* insert line at curent position *)
  309. (*%T _DLLOVL *)
  310. push bp
  311. mov bp, sp
  312. (*%E *)
  313. push ax
  314. push bx
  315. push cx
  316. push dx
  317. (*%F SameDS *)
  318. push ds
  319. mov ax, _DATA
  320. mov ds, ax
  321. (*%E *)
  322. call __getxy
  323. mov ch, dh
  324. mov cl, [__left]
  325. mov dh, [__bottom]
  326. mov dl, [__right]
  327. mov ax, 701H
  328. call __scroll
  329. (*%F SameDS *)
  330. pop ds
  331. (*%E *)
  332. pop dx
  333. pop cx
  334. pop bx
  335. pop ax
  336. (*%T _DLLOVL *)
  337. pop bp
  338. (*%E *)
  339. (*%F NearCall *)
  340. ret far 0
  341. (*%E *)
  342. (*%T NearCall *)
  343. ret 0
  344. (*%E *)
  345. (* __insline ENDP *)
  346. (****************************************************************************)
  347. section
  348. (* ------------------------------------------------------------------------
  349. PROCEDURE - highvideo.
  350. PRECONDITIONS - None.
  351. POSTCONDITIONS - High intensity attribute bit set.
  352. IN PARAMETERS - None.
  353. OUT PARAMETERS - None.
  354. CALLING CONVENTION - Standard.
  355. NOTES - None.
  356. VERSION - OS2 and MSDOS.
  357. ------------------------------------------------------------------------ *)
  358. segment _TEXT(CODE,28H)
  359. segment _DATA(DATA, 28H)
  360. extrn __scroll
  361. extrn __attrib
  362. select _TEXT
  363. public _highvideo : (* set high intensity bit *)
  364. (*%T _DLLOVL *)
  365. push bp
  366. mov bp, sp
  367. (*%E *)
  368. (*%F SameDS *)
  369. push ax
  370. push ds
  371. mov ax, _DATA
  372. mov ds, ax
  373. (*%E *)
  374. or byte [__attrib], 8
  375. (*%F SameDS *)
  376. pop ds
  377. pop ax
  378. (*%E *)
  379. (*%T _DLLOVL *)
  380. pop bp
  381. (*%E *)
  382. (*%F NearCall *)
  383. ret far 0
  384. (*%E *)
  385. (*%T NearCall *)
  386. ret 0
  387. (*%E *)
  388. (****************************************************************************)
  389. section
  390. (* ------------------------------------------------------------------------
  391. PROCEDURE - lowvideo.
  392. PRECONDITIONS - None.
  393. POSTCONDITIONS - High intensity attribute bit cleared.
  394. IN PARAMETERS - None.
  395. OUT PARAMETERS - None.
  396. CALLING CONVENTION - Standard.
  397. NOTES - None.
  398. VERSION - OS2 and MSDOS.
  399. ------------------------------------------------------------------------ *)
  400. segment _TEXT(CODE,28H)
  401. segment _DATA(DATA, 28H)
  402. extrn __scroll
  403. extrn __attrib
  404. select _TEXT
  405. public _lowvideo : (* clear high intensity bit *)
  406. (*%T _DLLOVL *)
  407. push bp
  408. mov bp, sp
  409. (*%E *)
  410. (*%F SameDS *)
  411. push ax
  412. push ds
  413. mov ax, _DATA
  414. mov ds, ax
  415. (*%E *)
  416. and byte [__attrib], 247
  417. (*%F SameDS *)
  418. pop ds
  419. pop ax
  420. (*%E *)
  421. (*%T _DLLOVL *)
  422. pop bp
  423. (*%E *)
  424. (*%F NearCall *)
  425. ret far 0
  426. (*%E *)
  427. (*%T NearCall *)
  428. ret 0
  429. (*%E *)
  430. (****************************************************************************)
  431. section
  432. (* ------------------------------------------------------------------------
  433. PROCEDURE - normvideo.
  434. PRECONDITIONS - None.
  435. POSTCONDITIONS - High intensity attribute bit set to original state.
  436. IN PARAMETERS - None.
  437. OUT PARAMETERS - None.
  438. CALLING CONVENTION - Standard.
  439. NOTES - None.
  440. VERSION - OS2 and MSDOS.
  441. ------------------------------------------------------------------------ *)
  442. segment _TEXT(CODE,28H)
  443. segment _DATA(DATA, 28H)
  444. extrn __scroll
  445. extrn __attrib
  446. extrn __startattrib
  447. select _TEXT
  448. public _normvideo : (* restore original attribute *)
  449. (*%T _DLLOVL *)
  450. push bp
  451. mov bp, sp
  452. (*%E *)
  453. (*%F SameDS *)
  454. push ax
  455. push ds
  456. mov ax, _DATA
  457. mov ds, ax
  458. (*%E *)
  459. mov al, [__startattrib]
  460. mov [__attrib], al
  461. (*%F SameDS *)
  462. pop ds
  463. pop ax
  464. (*%E *)
  465. (*%T _DLLOVL *)
  466. pop bp
  467. (*%E *)
  468. (*%F NearCall *)
  469. ret far 0
  470. (*%E *)
  471. (*%T NearCall *)
  472. ret 0
  473. (*%E *)
  474. (****************************************************************************)
  475. section
  476. (* ------------------------------------------------------------------------
  477. PROCEDURE - textcolor.
  478. PRECONDITIONS - None.
  479. POSTCONDITIONS - Text foreground color attribute bit set.
  480. IN PARAMETERS - New color (int).
  481. OUT PARAMETERS - None.
  482. CALLING CONVENTION - Standard.
  483. NOTES - None.
  484. VERSION - OS2 and MSDOS.
  485. ------------------------------------------------------------------------ *)
  486. segment _TEXT(CODE,28H)
  487. segment _DATA(DATA, 28H)
  488. extrn __scroll
  489. extrn __attrib
  490. extrn __startattrib
  491. select _TEXT
  492. public _textcolor :
  493. colour = frame
  494. push bp
  495. mov bp, sp
  496. (*%F SameDS *)
  497. push bx
  498. push ds
  499. mov bx, _DATA
  500. mov ds, bx
  501. (*%E *)
  502. (*%F RegParam *)
  503. mov al, [bp][colour]
  504. (*%E *)
  505. and al, 08FH
  506. and byte [__attrib], 070H
  507. or [__attrib], al
  508. (*%F SameDS *)
  509. pop ds
  510. pop bx
  511. (*%E *)
  512. pop bp
  513. (*%F NearCall *)
  514. ret far 0
  515. (*%E *)
  516. (*%T NearCall *)
  517. ret 0
  518. (*%E *)
  519. (****************************************************************************)
  520. section
  521. (* ------------------------------------------------------------------------
  522. PROCEDURE - textbackground.
  523. PRECONDITIONS - None.
  524. POSTCONDITIONS - Text background color attribute bit set.
  525. IN PARAMETERS - New color (int).
  526. OUT PARAMETERS - None.
  527. CALLING CONVENTION - Standard.
  528. NOTES - None.
  529. VERSION - OS2 and MSDOS.
  530. ------------------------------------------------------------------------ *)
  531. segment _TEXT(CODE,28H)
  532. segment _DATA(DATA, 28H)
  533. extrn __scroll
  534. extrn __attrib
  535. extrn __startattrib
  536. select _TEXT
  537. public _textbackground :
  538. colour = frame (* set background colour *)
  539. push bp
  540. mov bp, sp
  541. push cx
  542. (*%F SameDS *)
  543. push bx
  544. push ds
  545. mov bx, _DATA
  546. mov ds, bx
  547. (*%E *)
  548. (*%F RegParam *)
  549. mov ax, [bp][colour]
  550. (*%E *)
  551. and al, 7
  552. mov cl, 4
  553. shl ax, cl
  554. and byte [__attrib], 0FH
  555. or [__attrib], al
  556. (*%F SameDS *)
  557. pop ds
  558. pop bx
  559. (*%E *)
  560. pop cx
  561. pop bp
  562. (*%F NearCall *)
  563. ret far 0
  564. (*%E *)
  565. (*%T NearCall *)
  566. ret 0
  567. (*%E *)
  568. (****************************************************************************)
  569. section
  570. (* ------------------------------------------------------------------------
  571. PROCEDURE - textattr.
  572. PRECONDITIONS - None.
  573. POSTCONDITIONS - Text color attribute bit set.
  574. IN PARAMETERS - New attribute (int).
  575. OUT PARAMETERS - None.
  576. CALLING CONVENTION - Standard.
  577. NOTES - None.
  578. VERSION - OS2 and MSDOS.
  579. ------------------------------------------------------------------------ *)
  580. segment _TEXT(CODE,28H)
  581. segment _DATA(DATA, 28H)
  582. extrn __scroll
  583. extrn __attrib
  584. extrn __startattrib
  585. select _TEXT
  586. public _textattr :
  587. attribute = frame (* set background and text colour *)
  588. push bp
  589. mov bp, sp
  590. (*%F RegParam *)
  591. push ax
  592. (*%E *)
  593. (*%F SameDS *)
  594. push bx
  595. push ds
  596. mov bx, _DATA
  597. mov ds, bx
  598. (*%E *)
  599. (*%F RegParam *)
  600. mov ax, [bp][attribute]
  601. (*%E *)
  602. mov [__attrib], al
  603. (*%F SameDS *)
  604. pop ds
  605. pop bx
  606. (*%E *)
  607. (*%F RegParam *)
  608. pop ax
  609. (*%E *)
  610. pop bp
  611. (*%F NearCall *)
  612. ret far 0
  613. (*%E *)
  614. (*%T NearCall *)
  615. ret 0
  616. (*%E *)
  617. (****************************************************************************)
  618. section
  619. (* ------------------------------------------------------------------------
  620. PROCEDURE - wherex.
  621. PRECONDITIONS - None.
  622. POSTCONDITIONS - None.
  623. IN PARAMETERS - None.
  624. OUT PARAMETERS - X cursor position (int).
  625. CALLING CONVENTION - Standard.
  626. NOTES - None.
  627. VERSION - OS2 and MSDOS.
  628. ------------------------------------------------------------------------ *)
  629. segment _TEXT(CODE,28H)
  630. segment _DATA(DATA, 28H)
  631. extrn __getxy
  632. extrn __left
  633. extrn __top
  634. select _TEXT
  635. public _wherex :
  636. (*%T _DLLOVL *)
  637. push bp
  638. mov bp, sp
  639. (*%E *)
  640. push bx
  641. push cx
  642. push dx
  643. (*%F NearPtr *)
  644. push ds
  645. mov ax, _DATA
  646. mov ds, ax
  647. (*%E *)
  648. call __getxy (* return x position relative to window *)
  649. sub dl, [__left]
  650. mov al, dl
  651. cbw
  652. inc ax
  653. (*%F NearPtr *)
  654. pop ds
  655. (*%E *)
  656. pop dx
  657. pop cx
  658. pop bx
  659. (*%T _DLLOVL *)
  660. pop bp
  661. (*%E *)
  662. (*%F NearCall *)
  663. ret far 0
  664. (*%E *)
  665. (*%T NearCall *)
  666. ret 0
  667. (*%E *)
  668. (****************************************************************************)
  669. section
  670. (* ------------------------------------------------------------------------
  671. PROCEDURE - wherey.
  672. PRECONDITIONS - None.
  673. POSTCONDITIONS - None.
  674. IN PARAMETERS - None.
  675. OUT PARAMETERS - Y cursor position (int).
  676. CALLING CONVENTION - Standard.
  677. NOTES - None.
  678. VERSION - OS2 and MSDOS.
  679. ------------------------------------------------------------------------ *)
  680. segment _TEXT(CODE,28H)
  681. segment _DATA(DATA, 28H)
  682. extrn __getxy
  683. extrn __left
  684. extrn __top
  685. select _TEXT
  686. public _wherey : (* return y position relative to window *)
  687. (*%T _DLLOVL *)
  688. push bp
  689. mov bp, sp
  690. (*%E *)
  691. push bx
  692. push cx
  693. push dx
  694. (*%F NearPtr *)
  695. push ds
  696. mov ax, _DATA
  697. mov ds, ax
  698. (*%E *)
  699. call __getxy
  700. sub dh, [__top]
  701. mov al, dh
  702. cbw
  703. inc ax
  704. (*%F NearPtr *)
  705. pop ds
  706. (*%E *)
  707. pop dx
  708. pop cx
  709. pop bx
  710. (*%T _DLLOVL *)
  711. pop bp
  712. (*%E *)
  713. (*%F NearCall *)
  714. ret far 0
  715. (*%E *)
  716. (*%T NearCall *)
  717. ret 0
  718. (*%E *)
  719. (****************************************************************************)
  720. section
  721. (* ------------------------------------------------------------------------
  722. PROCEDURE - window.
  723. PRECONDITIONS - None.
  724. POSTCONDITIONS - Window parameters defined.
  725. IN PARAMETERS - left, top, right and bottom bounds (int).
  726. OUT PARAMETERS - None.
  727. CALLING CONVENTION - Standard.
  728. NOTES - None.
  729. VERSION - OS2 and MSDOS.
  730. ------------------------------------------------------------------------ *)
  731. segment _TEXT(CODE,28H)
  732. segment _DATA(DATA, 28H)
  733. extrn _gotoxy
  734. extrn __left
  735. extrn __top
  736. extrn __right
  737. extrn __bottom
  738. extrn __xlim
  739. extrn __ylim
  740. select _TEXT
  741. public _window :
  742. (*%F RegParam *)
  743. left = frame
  744. top = 2+frame
  745. right = 4+frame
  746. bottom = 6+frame
  747. push bp (* check parameters and set if valid *)
  748. mov bp, sp
  749. (*%F SameDS *)
  750. push ds
  751. mov ax, _DATA
  752. mov ds, ax
  753. (*%E *)
  754. mov al, [bp][left]
  755. dec al
  756. cmp al, [__xlim]
  757. ja winError
  758. mov [__left], al
  759. mov al, [bp][top]
  760. dec al
  761. cmp al, [__ylim]
  762. ja winError
  763. mov [__top], al
  764. mov al, [bp][right]
  765. dec al
  766. cmp al, [__xlim]
  767. ja winError
  768. mov [__right], al
  769. mov al, [bp][bottom]
  770. dec al
  771. cmp al, [__ylim]
  772. ja winError
  773. mov [__bottom], al
  774. mov ax, 1
  775. push ax
  776. push ax
  777. (*%F NearCall *)
  778. call far _gotoxy
  779. (*%E *)
  780. (*%T NearCall *)
  781. call _gotoxy
  782. (*%E *)
  783. add sp, 4
  784. winError:
  785. (*%F SameDS *)
  786. pop ds
  787. (*%E *)
  788. pop bp
  789. (*%E *)
  790. (*%T RegParam *)
  791. (*%F SameDS *)
  792. push ds
  793. push ax
  794. mov ax, _DATA
  795. mov ds, ax
  796. pop ax
  797. (*%E *)
  798. dec al
  799. cmp al, [__xlim]
  800. ja winError
  801. mov [__left], al
  802. dec bl
  803. cmp bl, [__ylim]
  804. ja winError
  805. mov [__top], bl
  806. dec cl
  807. cmp cl, [__xlim]
  808. ja winError
  809. mov [__right], cl
  810. dec dl
  811. cmp dl, [__ylim]
  812. ja winError
  813. mov [__bottom], dl
  814. mov ax, 1
  815. mov bx, ax
  816. (*%F NearCall *)
  817. call far _gotoxy
  818. (*%E *)
  819. (*%T NearCall *)
  820. call _gotoxy
  821. (*%E *)
  822. winError:
  823. (*%F SameDS *)
  824. pop ds
  825. (*%E *)
  826. (*%E *)
  827. (*%F NearCall *)
  828. ret far 0
  829. (*%E *)
  830. (*%T NearCall *)
  831. ret 0
  832. (*%E *)
  833. (*%F _OS2 *) (* MSDOS Specific procedures *)
  834. (****************************************************************************)
  835. section
  836. (* ------------------------------------------------------------------------
  837. PROCEDURE - _c_putch.
  838. PRECONDITIONS - None.
  839. POSTCONDITIONS - character output to console.
  840. IN PARAMETERS - character (int).
  841. OUT PARAMETERS - None.
  842. CALLING CONVENTION - Standard.
  843. NOTES - Internal procedure assigned to procedure variable for putch
  844. when this module is initialized.
  845. VERSION - MSDOS.
  846. ------------------------------------------------------------------------ *)
  847. segment _TEXT(CODE,28H)
  848. segment _DATA(DATA, 28H)
  849. extrn __getxy
  850. extrn __setxy
  851. extrn __incxy
  852. extrn __decxy
  853. extrn __attrib
  854. extrn __vidseg
  855. extrn _directvideo
  856. extrn __left
  857. extrn __right
  858. select _DATA
  859. bellChar :dw 7
  860. select _TEXT
  861. public __c_putch :
  862. (*%F RegParam *)
  863. chk = frame
  864. (*%E *)
  865. (*%T RegParam *)
  866. chk = -2
  867. locals = 2
  868. (*%E *)
  869. push bp
  870. mov bp, sp
  871. (*%T RegParam *)
  872. sub sp, locals
  873. (*%E *)
  874. push bx
  875. push cx
  876. push dx
  877. (*%T RegParam *)
  878. mov [bp][chk], ax
  879. (*%E *)
  880. (*%F SameDS *)
  881. push ds
  882. mov ax, _DATA
  883. mov ds, ax
  884. (*%E *)
  885. call __getxy
  886. mov al, [bp][chk]
  887. cmp al, 8
  888. je backSpace
  889. cmp al, 0AH
  890. je newLine
  891. cmp al, 0DH
  892. je carriageReturn
  893. cmp al, 09H
  894. je tab
  895. cmp al, 07H
  896. je bell
  897. notEsc:
  898. cmp word [_directvideo], 0
  899. jnz putDirect
  900. mov ah, 9
  901. mov bh, 0
  902. mov bl, [__attrib]
  903. mov cx, 1
  904. int 10H
  905. putDone:
  906. call __incxy
  907. putExit:
  908. mov ax, [bp][chk]
  909. (*%F SameDS *)
  910. pop ds
  911. (*%E *)
  912. pop dx
  913. pop cx
  914. pop bx
  915. (*%T RegParam *)
  916. mov sp, bp
  917. (*%E *)
  918. pop bp
  919. (*%F NearCall *)
  920. ret far 0
  921. (*%E *)
  922. (*%T NearCall *)
  923. ret 0
  924. (*%E *)
  925. bell:
  926. mov ah, 40H
  927. mov bx, 1
  928. mov cx, bx
  929. (*%F SameDS *)
  930. push ds
  931. mov dx, _DATA
  932. mov ds, dx
  933. (*%E *)
  934. mov dx, bellChar
  935. extrn @DosInterrupt
  936. (*%F NearCall *)
  937. call far @DosInterrupt
  938. (*%E *)
  939. (*%T NearCall *)
  940. call @DosInterrupt
  941. (*%E *)
  942. (*%F SameDS *)
  943. pop ds
  944. (*%E *)
  945. jmp putExit
  946. backSpace:
  947. call __decxy
  948. jmp putExit
  949. newLine:
  950. mov dl, [__right]
  951. jmp putDone
  952. carriageReturn:
  953. mov dl, [__left]
  954. call __setxy
  955. jmp putExit
  956. tab:
  957. mov cx, 4
  958. mov al, 20H
  959. tabLoop:
  960. push cx
  961. mov ah, 0AH
  962. mov bh, 0
  963. mov cx, 1
  964. int 10H
  965. call __incxy
  966. pop cx
  967. loop tabLoop
  968. jmp putExit
  969. putDirect: (* direct video access *)
  970. push di
  971. push dx
  972. mov al, dh (* calculate address *)
  973. mov ah, 80
  974. mul ah
  975. sub dh, dh
  976. add ax, dx
  977. shl ax, 1
  978. mov di, ax
  979. mov es, [__vidseg]
  980. mov al, [bp][chk]
  981. mov ah, [__attrib]
  982. stosw
  983. pop dx
  984. pop di
  985. jmp putDone
  986. (****************************************************************************)
  987. section
  988. (* ------------------------------------------------------------------------
  989. PROCEDURE - _scroll.
  990. PRECONDITIONS - None.
  991. POSTCONDITIONS - screen scrolled or cleared.
  992. IN PARAMETERS - Regsiters initialized for dos call, AL = -1 denotes
  993. clear window.
  994. OUT PARAMETERS - None.
  995. CALLING CONVENTION - Near Call.
  996. NOTES - Internal procedure.
  997. VERSION - MSDOS.
  998. ------------------------------------------------------------------------ *)
  999. segment _TEXT(CODE,28H)
  1000. extrn __attrib
  1001. public __scroll : (* internal to conio *)
  1002. cmp al, -1
  1003. jne notClear
  1004. sub al, al
  1005. notClear:
  1006. mov bh, [__attrib]
  1007. int 10H
  1008. ret 0
  1009. (****************************************************************************)
  1010. section
  1011. (* ------------------------------------------------------------------------
  1012. PROCEDURE - _getxy.
  1013. PRECONDITIONS - None.
  1014. POSTCONDITIONS - None.
  1015. IN PARAMETERS - None.
  1016. OUT PARAMETERS - Cursor position in DH:DL.
  1017. CALLING CONVENTION - Near Call.
  1018. NOTES - Internal procedure.
  1019. VERSION - MSDOS.
  1020. ------------------------------------------------------------------------ *)
  1021. segment _TEXT(CODE,28H)
  1022. public __getxy : (* internal to conio *)
  1023. push es
  1024. mov ax, 40H
  1025. mov es, ax
  1026. mov bx, 50H
  1027. mov dx, es:[bx]
  1028. pop es
  1029. ret 0
  1030. (****************************************************************************)
  1031. section
  1032. (* ------------------------------------------------------------------------
  1033. PROCEDURE - _setxy.
  1034. PRECONDITIONS - None.
  1035. POSTCONDITIONS - Cursor position set.
  1036. IN PARAMETERS - Cursor position in DH:DL.
  1037. OUT PARAMETERS - None.
  1038. CALLING CONVENTION - Near Call.
  1039. NOTES - Internal procedure.
  1040. VERSION - MSDOS.
  1041. ------------------------------------------------------------------------ *)
  1042. segment _TEXT(CODE,28H)
  1043. public __setxy : (* internal to conio *)
  1044. mov ah, 2H
  1045. mov bh, 0
  1046. int 10H
  1047. ret 0
  1048. (****************************************************************************)
  1049. section
  1050. segment _TEXT(CODE,28H)
  1051. segment _DATA(DATA, 28H)
  1052. extrn __scroll
  1053. extrn __getxy
  1054. extrn __setxy
  1055. extrn __incxy
  1056. select _DATA
  1057. extrn __top
  1058. extrn __left
  1059. extrn __bottom
  1060. extrn __right
  1061. extrn __ylim
  1062. extrn __xlim
  1063. extrn __vidseg
  1064. extrn _directvideo
  1065. select _TEXT
  1066. public _gettext :
  1067. (*
  1068. int gettext(int left, int top, int right, int bottom, void *buffer)
  1069. puts text into buffer.
  1070. *)
  1071. (*%F RegParam *)
  1072. RetSize = 0
  1073. (*%E *)
  1074. (*%T RegParam *)
  1075. (*%T NearPtr *)
  1076. RetSize = 2
  1077. (*%E *)
  1078. (*%F NearPtr *)
  1079. RetSize = 4
  1080. (*%E *)
  1081. (*%E *)
  1082. (*%F RegParam *)
  1083. left = frame
  1084. top = 2+frame
  1085. right = 4+frame
  1086. bottom = 6+frame
  1087. buffer = 8+frame
  1088. temp = -2
  1089. nextrow = -4
  1090. locals = 4
  1091. (*%E *)
  1092. (*%T RegParam *)
  1093. buffer = frame
  1094. temp = -2
  1095. nextrow = -4
  1096. left = -6
  1097. right = -8
  1098. top = -10
  1099. bottom = -12
  1100. locals = 12
  1101. (*%E *)
  1102. push bp
  1103. mov bp, sp
  1104. sub sp, locals
  1105. (*%F RegParam *)
  1106. push bx
  1107. push cx
  1108. push dx
  1109. (*%E *)
  1110. push di
  1111. push si
  1112. (*%T RegParam *)
  1113. mov [bp][left], ax
  1114. mov [bp][top], bx
  1115. mov [bp][right], cx
  1116. mov [bp][bottom], dx
  1117. (*%E *)
  1118. (*%F SameDS *)
  1119. push ds
  1120. mov ax, _DATA
  1121. mov ds, ax
  1122. (*%E *)
  1123. call __checkParam (* validate arguments *)
  1124. jc getError
  1125. (*%F NearPtr *)
  1126. les di, [bp][buffer]
  1127. (*%E *)
  1128. (*%T NearPtr *)
  1129. mov di, [bp][buffer]
  1130. mov cx, _DATA
  1131. mov es, cx
  1132. (*%E *)
  1133. cmp word [_directvideo], 0
  1134. jnz tobuf (* use direct video output *)
  1135. mov [bp][nextrow], dx
  1136. call __getxy (* save current position *)
  1137. mov [bp][temp], dx
  1138. mov bh, 0
  1139. mov cx, [bp][top]
  1140. mov dx, [bp][nextrow]
  1141. rowLoop: (* loop for total number of rows *)
  1142. cmp cx, [bp][bottom]
  1143. ja rowDone
  1144. call __setxy
  1145. push cx
  1146. mov cx, [bp][left]
  1147. colLoop: (* loop for total number of columns *)
  1148. cmp cx, [bp][right]
  1149. ja colDone
  1150. mov ah, 8
  1151. int 10H
  1152. stosw
  1153. call __incxy
  1154. inc cx
  1155. jmp colLoop
  1156. colDone:
  1157. pop cx
  1158. inc cx
  1159. mov dx, [bp][nextrow]
  1160. inc dh
  1161. jmp rowLoop
  1162. rowDone:
  1163. mov dx, [bp][temp]
  1164. call __setxy (* restore cursor *)
  1165. mov ax, 1
  1166. getDone: (* return *)
  1167. (*%F SameDS *)
  1168. pop ds
  1169. (*%E *)
  1170. pop si
  1171. pop di
  1172. (*%F RegParam *)
  1173. pop dx
  1174. pop cx
  1175. pop bx
  1176. (*%E *)
  1177. mov sp, bp
  1178. pop bp
  1179. (*%F NearCall *)
  1180. ret far RetSize
  1181. (*%E *)
  1182. (*%T NearCall *)
  1183. ret RetSize
  1184. (*%E *)
  1185. getError:
  1186. sub ax, ax
  1187. jmp getDone
  1188. tobuf: (* direct video here *)
  1189. mov ax, [bp][top]
  1190. mov dx, [bp][bottom]
  1191. mov cx, [bp][right]
  1192. sub cx, [bp][left]
  1193. inc cx
  1194. mov [bp][temp], cx
  1195. sub dx, ax
  1196. inc dx
  1197. push dx
  1198. mov bx, 80
  1199. mul bx
  1200. add ax, [bp][left]
  1201. shl ax, 1
  1202. mov si, ax
  1203. pop dx
  1204. linlop:
  1205. mov cx, [bp][temp]
  1206. push ds
  1207. mov ds, [__vidseg]
  1208. rep ; movsw
  1209. pop ds
  1210. add ax, 160
  1211. mov si, ax
  1212. dec dx
  1213. jne linlop
  1214. done:
  1215. mov ax, 1
  1216. jmp getDone
  1217. public __checkParam : (* check parameters agianst window *)
  1218. dec byte [bp][left]
  1219. dec byte [bp][right]
  1220. dec byte [bp][top]
  1221. dec byte [bp][bottom]
  1222. mov dh, [bp][top]
  1223. cmp dh, [__ylim]
  1224. ja chkError
  1225. mov dl, [bp][left]
  1226. cmp dl, [__xlim]
  1227. ja chkError
  1228. mov bl, [bp][right]
  1229. cmp bl, [__xlim]
  1230. ja chkError
  1231. mov bl, [bp][bottom]
  1232. cmp bl, [__ylim]
  1233. ja chkError
  1234. clc
  1235. ret 0
  1236. chkError: (* carry flag denotes error *)
  1237. stc
  1238. ret 0
  1239. (****************************************************************************)
  1240. section
  1241. segment _TEXT(CODE,28H)
  1242. segment _DATA(DATA, 28H)
  1243. extrn __scroll
  1244. extrn __getxy
  1245. extrn __setxy
  1246. extrn __incxy
  1247. extrn __checkParam
  1248. select _DATA
  1249. extrn __top
  1250. extrn __left
  1251. extrn __bottom
  1252. extrn __right
  1253. extrn __attrib
  1254. extrn __ylim
  1255. extrn __xlim
  1256. extrn __vidseg
  1257. extrn _directvideo
  1258. select _TEXT
  1259. public _puttext :
  1260. (*
  1261. int puttext(int left, int top, int right, int bottom, void *buffer)
  1262. copy buffer to screen
  1263. *)
  1264. (*%F RegParam *)
  1265. RetSize = 0
  1266. (*%E *)
  1267. (*%T RegParam *)
  1268. (*%T NearPtr *)
  1269. RetSize = 2
  1270. (*%E *)
  1271. (*%F NearPtr *)
  1272. RetSize = 4
  1273. (*%E *)
  1274. (*%E *)
  1275. (*%F RegParam *)
  1276. left = frame
  1277. top = 2+frame
  1278. right = 4+frame
  1279. bottom = 6+frame
  1280. buffer = 8+frame
  1281. temp = -2
  1282. nextrow = -4
  1283. locals = 4
  1284. (*%E *)
  1285. (*%T RegParam *)
  1286. buffer = frame
  1287. temp = -2
  1288. nextrow = -4
  1289. left = -6
  1290. right = -8
  1291. top = -10
  1292. bottom = -12
  1293. locals = 12
  1294. (*%E *)
  1295. push bp
  1296. mov bp, sp
  1297. sub sp, locals
  1298. (*%F RegParam *)
  1299. push bx
  1300. push cx
  1301. push dx
  1302. (*%E *)
  1303. push di
  1304. push si
  1305. (*%T RegParam *)
  1306. mov [bp][left], ax
  1307. mov [bp][top], bx
  1308. mov [bp][right], cx
  1309. mov [bp][bottom], dx
  1310. (*%E *)
  1311. (*%F SameDS *)
  1312. push ds
  1313. mov ax, _DATA
  1314. mov ds, ax
  1315. (*%E *)
  1316. call __checkParam
  1317. jc setError
  1318. cmp word [_directvideo], 0
  1319. jnz frombuf
  1320. (*%F NearPtr *)
  1321. lds si, [bp][buffer]
  1322. (*%E *)
  1323. (*%T NearPtr *)
  1324. mov si, [bp][buffer]
  1325. (*%E *)
  1326. mov [bp][nextrow], dx
  1327. call __getxy
  1328. mov [bp][temp], dx
  1329. mov bh, 0
  1330. mov cx, [bp][top]
  1331. mov dx, [bp][nextrow]
  1332. rowLoop:
  1333. cmp cx, [bp][bottom]
  1334. ja rowDone
  1335. call __setxy
  1336. push cx
  1337. mov cx, [bp][left]
  1338. colLoop:
  1339. cmp cx, [bp][right]
  1340. ja colDone
  1341. lodsw
  1342. mov bl, ah
  1343. push cx
  1344. mov cx, 1
  1345. mov ah, 9
  1346. int 10H
  1347. pop cx
  1348. call __incxy
  1349. inc cx
  1350. jmp colLoop
  1351. colDone:
  1352. pop cx
  1353. inc cx
  1354. mov dx, [bp][nextrow]
  1355. inc dh
  1356. jmp rowLoop
  1357. rowDone:
  1358. mov dx, [bp][temp]
  1359. call __setxy
  1360. mov ax, 1
  1361. setDone:
  1362. (*%F SameDS *)
  1363. pop ds
  1364. (*%E *)
  1365. pop si
  1366. pop di
  1367. (*%F RegParam *)
  1368. pop dx
  1369. pop cx
  1370. pop bx
  1371. (*%E *)
  1372. mov sp, bp
  1373. pop bp
  1374. (*%F NearCall *)
  1375. ret far RetSize
  1376. (*%E *)
  1377. (*%T NearCall *)
  1378. ret RetSize
  1379. (*%E *)
  1380. setError:
  1381. sub ax, ax
  1382. jmp setDone
  1383. frombuf:
  1384. mov ax, [bp][top]
  1385. mov dx, [bp][bottom]
  1386. mov cx, [bp][right]
  1387. sub cx, [bp][left]
  1388. inc cx
  1389. mov [bp][temp], cx
  1390. sub dx, ax
  1391. inc dx
  1392. push ds
  1393. push dx
  1394. mov bx, 80
  1395. mul bx
  1396. add ax, [bp][left]
  1397. shl ax, 1
  1398. mov di, ax
  1399. mov es, [__vidseg]
  1400. (*%F NearPtr *)
  1401. lds si, [bp][buffer]
  1402. (*%E *)
  1403. (*%T NearPtr *)
  1404. mov si, [bp][buffer]
  1405. (*%E *)
  1406. pop dx
  1407. linlop:
  1408. mov cx, [bp][temp]
  1409. rep ; movsw
  1410. add ax, 160
  1411. mov di, ax
  1412. dec dx
  1413. jne linlop
  1414. pop ds
  1415. mov ax, 1
  1416. jmp setDone
  1417. (****************************************************************************)
  1418. section
  1419. segment _TEXT(CODE,28H)
  1420. segment _DATA(DATA, 28H)
  1421. extrn __scroll
  1422. extrn __getxy
  1423. extrn __setxy
  1424. extrn __incxy
  1425. extrn __checkParam
  1426. select _DATA
  1427. extrn __top
  1428. extrn __left
  1429. extrn __bottom
  1430. extrn __right
  1431. extrn __attrib
  1432. extrn __ylim
  1433. extrn __xlim
  1434. extrn __vidseg
  1435. extrn _directvideo
  1436. select _TEXT
  1437. public _movetext :
  1438. (*
  1439. int movetext(int left, int top, int right, int bottom, int nleft, int ntop)
  1440. *)
  1441. (*%F RegParam *)
  1442. RetSize = 0
  1443. (*%E *)
  1444. (*%T RegParam *)
  1445. RetSize = 4
  1446. (*%E *)
  1447. (*%F RegParam *)
  1448. left = frame
  1449. top = 2+frame
  1450. right = 4+frame
  1451. bottom = 6+frame
  1452. nleft = 8+frame
  1453. ntop = 10+frame
  1454. rcount = -2
  1455. ccount = -4
  1456. locals = 4
  1457. (*%E *)
  1458. (*%T RegParam *)
  1459. rcount = -2
  1460. ccount = -4
  1461. left = -6
  1462. right = -8
  1463. top = -10
  1464. bottom = -12
  1465. ntop = frame
  1466. nleft = 2+frame
  1467. locals = 12
  1468. (*%E *)
  1469. push bp
  1470. mov bp, sp
  1471. sub sp, locals
  1472. (*%F RegParam *)
  1473. push bx
  1474. push cx
  1475. push dx
  1476. (*%E *)
  1477. push di
  1478. push si
  1479. push ds
  1480. (*%T RegParam *)
  1481. mov [bp][left], ax
  1482. mov [bp][top], bx
  1483. mov [bp][right], cx
  1484. mov [bp][bottom], dx
  1485. (*%E *)
  1486. dec word [bp][nleft]
  1487. dec word [bp][ntop]
  1488. (*%F SameDS *)
  1489. mov ax, _DATA
  1490. mov ds, ax
  1491. (*%E *)
  1492. call __checkParam
  1493. jc near setError
  1494. mov ax, [bp][bottom]
  1495. sub ax, [bp][top]
  1496. inc ax
  1497. mov [bp][rcount], ax
  1498. mov ax, [bp][right]
  1499. sub ax, [bp][left]
  1500. inc ax
  1501. mov [bp][ccount], ax
  1502. mov ax, [bp][top]
  1503. mov dx, 80
  1504. mul dx
  1505. add ax, [bp][left]
  1506. shl ax, 1
  1507. mov si, ax
  1508. mov ax, [bp][ntop]
  1509. mov dx, 80
  1510. mul dx
  1511. add ax, [bp][nleft]
  1512. shl ax, 1
  1513. mov di, ax
  1514. mov ax, [bp][top]
  1515. mov bx, [bp][ntop]
  1516. cmp ax, bx
  1517. jge RowUp
  1518. RowDown:
  1519. mov ax, 80
  1520. mov dx, [bp][rcount]
  1521. dec dx
  1522. mul dx
  1523. shl ax, 1
  1524. add si, ax
  1525. add di, ax
  1526. mov dx, -160
  1527. jmp gotRowDirection
  1528. RowUp:
  1529. mov dx, 160
  1530. gotRowDirection:
  1531. mov cx, [bp][left]
  1532. mov bx, [bp][nleft]
  1533. cmp cx, bx
  1534. jge ColUp
  1535. ColDown:
  1536. mov ax, [bp][ccount]
  1537. dec ax
  1538. shl ax, 1
  1539. add si, ax
  1540. add di, ax
  1541. std
  1542. jmp gotColDirection
  1543. ColUp:
  1544. gotColDirection:
  1545. mov ax, [__vidseg]
  1546. mov es, ax
  1547. mov ds, ax
  1548. mov bx, [bp][rcount]
  1549. rowLoop:
  1550. push di
  1551. push si
  1552. mov cx, [bp][ccount]
  1553. rep ; movsw
  1554. pop si
  1555. pop di
  1556. add si, dx
  1557. add di, dx
  1558. dec bx
  1559. jnz rowLoop
  1560. setDone:
  1561. mov ax, 1
  1562. setExit:
  1563. cld
  1564. pop ds
  1565. pop si
  1566. pop di
  1567. (*%F RegParam *)
  1568. pop dx
  1569. pop cx
  1570. pop bx
  1571. (*%E *)
  1572. mov sp, bp
  1573. pop bp
  1574. (*%F NearCall *)
  1575. ret far RetSize
  1576. (*%E *)
  1577. (*%T NearCall *)
  1578. ret RetSize
  1579. (*%E *)
  1580. setError:
  1581. sub ax, ax
  1582. jmp setExit
  1583. (****************************************************************************)
  1584. section
  1585. segment _TEXT(CODE,28H)
  1586. segment _DATA(DATA, 28H)
  1587. extrn __scroll
  1588. extrn __getxy
  1589. extrn __setxy
  1590. extrn __incxy
  1591. select _DATA
  1592. extrn __top
  1593. extrn __left
  1594. extrn __bottom
  1595. extrn __right
  1596. select _TEXT
  1597. public _gotoxy :
  1598. (*
  1599. void gotoxy(int x, int y)
  1600. *)
  1601. xpos = frame
  1602. ypos = 2+frame
  1603. (*%F RegParam *)
  1604. push bp (* move to position relative to window *)
  1605. mov bp, sp
  1606. (*%E *)
  1607. (*%T RegParam *)
  1608. (*%T _DLLOVL *)
  1609. push bp
  1610. mov bp, sp
  1611. (*%E *)
  1612. push cx
  1613. push dx
  1614. (*%E *)
  1615. (*%F SameDS *)
  1616. push ds
  1617. mov cx, _DATA
  1618. mov ds, cx
  1619. (*%E *)
  1620. (*%F RegParam *)
  1621. mov al, [bp][xpos]
  1622. (*%E *)
  1623. dec al
  1624. add al, [__left]
  1625. cmp al, [__right]
  1626. ja gotoError
  1627. (*%F RegParam *)
  1628. mov bh, [bp][ypos]
  1629. (*%E *)
  1630. (*%T RegParam *)
  1631. mov bh, bl
  1632. (*%E *)
  1633. dec bh
  1634. add bh, [__top]
  1635. cmp bh, [__bottom]
  1636. ja gotoError
  1637. mov dh, bh
  1638. mov dl, al
  1639. mov ah, 2
  1640. sub bh, bh
  1641. int 10H
  1642. gotoError:
  1643. (*%F SameDS *)
  1644. pop ds
  1645. (*%E *)
  1646. (*%T RegParam *)
  1647. pop dx
  1648. pop cx
  1649. (*%T _DLLOVL *)
  1650. pop bp
  1651. (*%E *)
  1652. (*%E *)
  1653. (*%F RegParam *)
  1654. pop bp
  1655. (*%E *)
  1656. (*%F NearCall *)
  1657. ret far 0
  1658. (*%E *)
  1659. (*%T NearCall *)
  1660. ret 0
  1661. (*%E *)
  1662. (****************************************************************************)
  1663. section
  1664. segment _TEXT(CODE,28H)
  1665. public __ScreenLines :
  1666. push bp
  1667. mov bp, sp
  1668. push ax
  1669. push bx
  1670. push cx
  1671. mov ax, 1130H
  1672. sub bx, bx
  1673. sub cx, cx
  1674. sub dx, dx
  1675. int 10H
  1676. or cx, cx
  1677. jnz not25
  1678. mov dl, 24
  1679. not25:
  1680. mov al, dl
  1681. add al, ~24
  1682. pop cx
  1683. pop bx
  1684. pop ax
  1685. pop bp
  1686. ret 0
  1687. (****************************************************************************)
  1688. section
  1689. segment _TEXT(CODE,28H)
  1690. segment _DATA(DATA, 28H)
  1691. extrn __scroll
  1692. extrn __ScreenLines
  1693. select _DATA
  1694. extrn __xlim
  1695. extrn __ylim
  1696. extrn __prevmode
  1697. extrn __last43
  1698. select _TEXT
  1699. public _textmode :
  1700. (*
  1701. void textmode(int mode)
  1702. *)
  1703. (*%F RegParam *)
  1704. mode = frame (* set text mode *)
  1705. (*%E *)
  1706. (*%T RegParam *)
  1707. mode = -2
  1708. locals = 2
  1709. (*%E *)
  1710. push bp
  1711. mov bp, sp
  1712. (*%T RegParam *)
  1713. sub sp, locals
  1714. mov [bp][mode], ax
  1715. (*%E *)
  1716. push ax
  1717. (*%F RegParam *)
  1718. push bx
  1719. push cx
  1720. push dx
  1721. (*%E *)
  1722. (*%F SameDS *)
  1723. push ds
  1724. mov ax, _DATA
  1725. mov ds, ax
  1726. (*%E *)
  1727. mov cx, ax
  1728. mov dl, [__prevmode]
  1729. mov bh, 0
  1730. mov ah, 0FH
  1731. int 10H
  1732. mov [__prevmode], al
  1733. mov al, [bp][mode]
  1734. sub ah, ah
  1735. cmp al, -1
  1736. jne notLastMode
  1737. mov al, dl
  1738. mov ch, [__last43]
  1739. notLastMode:
  1740. call __ScreenLines
  1741. mov cl, 0
  1742. adc cl, 0
  1743. mov [__last43], cl
  1744. cmp ch, 1
  1745. je notMode25
  1746. mov bx, 40H
  1747. mov es, bx
  1748. and byte es:[87H], ~1
  1749. notMode25:
  1750. int 10H
  1751. cmp ch, 1
  1752. jnz notMode43
  1753. mov ax, 40H
  1754. mov es, ax
  1755. or byte es:[87H], 1
  1756. mov ax, 1112H
  1757. mov bl, 0
  1758. int 10H
  1759. mov dx, es:[63H]
  1760. mov al, 14H
  1761. out dx, al
  1762. inc dx
  1763. mov al, 7H
  1764. out dx, al
  1765. mov ah, 12H
  1766. mov bl, 20H
  1767. int 10H
  1768. call __ScreenLines
  1769. mov [__ylim], dl
  1770. jmp modeExit
  1771. notMode43:
  1772. cmp al, 1
  1773. ja column80
  1774. mov cl, 39
  1775. jmp setCol
  1776. column80:
  1777. mov cl, 79
  1778. setCol:
  1779. mov [__xlim], cl
  1780. modeExit:
  1781. pop dx
  1782. pop cx
  1783. pop bx
  1784. (*%F RegParam *)
  1785. pop ax
  1786. (*%E *)
  1787. (*%F SameDS *)
  1788. pop ds
  1789. (*%E *)
  1790. (*%T RegParam *)
  1791. mov sp, bp
  1792. (*%E *)
  1793. pop bp
  1794. (*%F NearCall *)
  1795. ret far 0
  1796. (*%E *)
  1797. (*%T NearCall *)
  1798. ret 0
  1799. (*%E *)
  1800. (****************************************************************************)
  1801. section
  1802. segment _TEXT(CODE,28H)
  1803. segment _DATA(DATA, 28H)
  1804. extrn _wherex
  1805. extrn _wherey
  1806. select _DATA
  1807. extrn __left
  1808. extrn __top
  1809. extrn __right
  1810. extrn __bottom
  1811. extrn __xlim
  1812. extrn __ylim
  1813. extrn __startattrib
  1814. extrn __attrib
  1815. select _TEXT
  1816. public _gettextinfo :
  1817. (*
  1818. void gettextinfo(struct text_info *r)
  1819. Copies window information into user supplied structure.
  1820. *)
  1821. winleft = 0
  1822. wintop = 1
  1823. winright = 2
  1824. winbottom = 3
  1825. attribute = 4
  1826. normattr = 5
  1827. currmode = 6
  1828. screenheight = 7
  1829. screenwidth = 8
  1830. curx = 9
  1831. cury = 10
  1832. (*%F RegParam *)
  1833. r = frame
  1834. push bp
  1835. mov bp, sp
  1836. push ax
  1837. push bx
  1838. push cx
  1839. push dx
  1840. push si
  1841. push ds
  1842. (*%F NearPtr *)
  1843. lds si, [bp][r]
  1844. (*%E *)
  1845. (*%T NearPtr *)
  1846. mov si, [bp][r]
  1847. (*%E *)
  1848. (*%E *)
  1849. (*%T RegParam *)
  1850. (*%T _DLLOVL *)
  1851. push bp
  1852. mov bp, sp
  1853. (*%E *)
  1854. (*%T NearPtr *)
  1855. push bx
  1856. (*%E *)
  1857. push cx
  1858. push dx
  1859. push si
  1860. push ds
  1861. (*%F NearPtr *)
  1862. mov ds, bx
  1863. mov si, ax
  1864. (*%E *)
  1865. (*%T NearPtr *)
  1866. mov si, ax
  1867. (*%E *)
  1868. (*%E *)
  1869. (*%F NearCall *)
  1870. call far _wherex
  1871. (*%E *)
  1872. (*%T NearCall *)
  1873. call _wherex
  1874. (*%E *)
  1875. mov [si][curx], al
  1876. (*%F NearCall *)
  1877. call far _wherey
  1878. (*%E *)
  1879. (*%T NearCall *)
  1880. call _wherey
  1881. (*%E *)
  1882. mov [si][cury], al
  1883. mov ax, _DATA
  1884. mov es, ax
  1885. mov al, es:[__startattrib] (* attributes *)
  1886. mov [si][normattr], al
  1887. mov al, es:[__attrib]
  1888. mov [si][attribute], al
  1889. mov al, es:[__left]
  1890. inc al
  1891. mov [si][winleft], al (* window co-ordinates *)
  1892. mov al, es:[__top]
  1893. inc al
  1894. mov [si][wintop], al
  1895. mov al, es:[__right]
  1896. inc al
  1897. mov [si][winright], al
  1898. mov al, es:[__xlim]
  1899. inc al
  1900. mov [si][screenwidth], al
  1901. mov al, es:[__bottom]
  1902. inc al
  1903. mov [si][winbottom], al
  1904. mov al, es:[__ylim]
  1905. inc al
  1906. mov [si][screenheight], al
  1907. mov ah, 0FH
  1908. int 10H (* current text mode *)
  1909. mov [si][currmode], al
  1910. pop ds
  1911. pop si
  1912. (*%F RegParam *)
  1913. pop dx
  1914. pop cx
  1915. pop bx
  1916. pop ax
  1917. (*%E *)
  1918. (*%T RegParam *)
  1919. pop dx
  1920. pop cx
  1921. (*%T NearPtr *)
  1922. pop bx
  1923. (*%E *)
  1924. (*%T _DLLOVL *)
  1925. pop bp
  1926. (*%E *)
  1927. (*%E *)
  1928. (*%F RegParam *)
  1929. pop bp
  1930. (*%E *)
  1931. (*%F NearCall *)
  1932. ret far 0
  1933. (*%E *)
  1934. (*%T NearCall *)
  1935. ret 0
  1936. (*%E *)
  1937. (****************************************************************************)
  1938. section
  1939. segment _INIT(INIT_CODE,28H)
  1940. segment _DATA(DATA, 28H)
  1941. segment _TEXT(CODE,28H)
  1942. extrn __getxy
  1943. extrn __setxy
  1944. extrn __c_putch
  1945. extrn __d_cgets
  1946. extrn __ScreenLines
  1947. select _DATA
  1948. (*%T _DLLOVL *)
  1949. PutchAdr: dd __c_putch
  1950. CgetsAdr: dd __d_cgets
  1951. (*%E *)
  1952. extrn __i_putch
  1953. extrn __i_cgets
  1954. extrn __p_init
  1955. public __startattrib : db 0
  1956. public __attrib : db 0
  1957. public __prevmode : db 0
  1958. public __xlim : db 0
  1959. public __ylim : db 0
  1960. public __windmin :
  1961. public __left : db 0
  1962. public __top : db 0
  1963. public __windmax :
  1964. public __right : db 0
  1965. public __bottom : db _directvideo
  1966. public __vidseg : dw 0B000H
  1967. public __last43: db 0
  1968. public __wscroll: dw 1
  1969. select _TEXT
  1970. do_initconio : (* defined later on ! *)
  1971. select _INIT
  1972. (*%F NearCall *)
  1973. initconio : dw MAGIC_NUM
  1974. db PR4
  1975. dd do_initconio
  1976. (*%E *)
  1977. (*%T NearCall *)
  1978. initconio : dw MAGIC_NUM
  1979. db PR4
  1980. dw do_initconio
  1981. (*%E *)
  1982. select _DATA
  1983. public _directvideo : dw 1, initconio
  1984. select _TEXT
  1985. (* initialisation for conio - sets screen *)
  1986. (* mode, gets video refresh segment and *)
  1987. (* initialises the defualt full screen window *)
  1988. temp = -2
  1989. locals = 2
  1990. push bp
  1991. mov bp, sp
  1992. sub sp, locals
  1993. (*%F SameDS *)
  1994. push ds
  1995. mov ax, seg __i_putch
  1996. mov ds, ax
  1997. (*%E *)
  1998. (*%F _DLLOVL *)
  1999. mov word [__i_putch], __c_putch
  2000. mov word [__i_cgets], __d_cgets
  2001. (*%F NearCall *)
  2002. mov word [__i_putch][2], cs
  2003. mov word [__i_cgets][2], cs
  2004. (*%E *)
  2005. (*%E *)
  2006. (*%T _DLLOVL *)
  2007. mov ax, seg PutchAdr
  2008. mov es, ax
  2009. mov ax, es:[PutchAdr]
  2010. mov word [__i_putch], ax
  2011. mov ax, es:[CgetsAdr]
  2012. mov word [__i_cgets], ax
  2013. mov ax, es:[PutchAdr][2]
  2014. mov word [__i_putch][2], ax
  2015. mov ax, es:[CgetsAdr][2]
  2016. mov word [__i_cgets][2], ax
  2017. (*%E *)
  2018. mov word [__p_init], 1
  2019. (*%F SameDS *)
  2020. mov ax, seg __startattrib
  2021. mov ds, ax
  2022. (*%E *)
  2023. call __getxy
  2024. mov [bp][temp], dx
  2025. sub dx, dx
  2026. call __setxy
  2027. mov ah, 8H
  2028. mov bh, 0
  2029. int 10H
  2030. mov ah, 7H
  2031. mov [__startattrib], ah
  2032. mov [__attrib], ah
  2033. mov ah, 0FH
  2034. int 10H
  2035. mov [__prevmode], al
  2036. cmp al, 1
  2037. ja column80
  2038. mov dx, 39
  2039. jmp setColumn
  2040. column80:
  2041. mov dx, 79
  2042. setColumn:
  2043. mov [__xlim], dl
  2044. mov [__right], dl
  2045. call __ScreenLines
  2046. mov byte [__ylim], dl
  2047. mov byte [__bottom], dl
  2048. jnc not43
  2049. mov byte [__last43], 1
  2050. not43:
  2051. mov byte [__left], 0
  2052. mov byte [__top], 0
  2053. cmp al, 7
  2054. je monoScreen
  2055. mov ax, 0B800H
  2056. jmp setScreen
  2057. monoScreen:
  2058. mov ax, 0B000H
  2059. setScreen:
  2060. mov [__vidseg], ax
  2061. mov dx, [bp][temp]
  2062. call __setxy
  2063. (*%F SameDS *)
  2064. pop ds
  2065. (*%E *)
  2066. (*%F NearCall *)
  2067. mov sp, bp
  2068. pop bp
  2069. ret far 0
  2070. (*%E *)
  2071. (*%T NearCall *)
  2072. mov sp, bp
  2073. pop bp
  2074. ret 0
  2075. (*%E *)
  2076. (*%E *)
  2077. (*%T _OS2 *)
  2078. (* KBDKEYINFO structure, for KbdCharIn and KbdPeek *)
  2079. chChar = 0
  2080. chScan = 1
  2081. fbStatus = 2
  2082. bNlsShift = 3
  2083. fsState = 4
  2084. time = 6
  2085. KbdInfoSize = 10
  2086. (****************************************************************************)
  2087. section
  2088. segment _TEXT(CODE,28H)
  2089. segment _DATA(DATA, 28H)
  2090. extrn __getxy
  2091. extrn __setxy
  2092. extrn __incxy
  2093. extrn __decxy
  2094. extrn VIOSHOWBUF
  2095. extrn DOSBEEP
  2096. select _DATA
  2097. extrn __attrib
  2098. extrn __vidsel
  2099. extrn __left
  2100. extrn __right
  2101. extrn __char
  2102. extrn _directvideo
  2103. select _TEXT
  2104. public __c_putch :
  2105. (*
  2106. int putch(int c)
  2107. Checks for any character returned by ungetch then calls BIOS.
  2108. *)
  2109. (*%F RegParam *)
  2110. chk = frame
  2111. (*%E *)
  2112. (*%T RegParam *)
  2113. chk = -2
  2114. locals = 2
  2115. (*%E *)
  2116. push bp
  2117. mov bp, sp
  2118. (*%T RegParam *)
  2119. sub sp, locals
  2120. push bx
  2121. push cx
  2122. push dx
  2123. mov [bp][chk], ax
  2124. (*%E *)
  2125. (*%F SameDS *)
  2126. push ds
  2127. mov ax, _DATA
  2128. mov ds, ax
  2129. (*%E *)
  2130. call __getxy
  2131. mov al, [bp][chk]
  2132. cmp al, 8
  2133. je backSpace
  2134. cmp al, 0AH
  2135. je newLine
  2136. cmp al, 0DH
  2137. je carriageReturn
  2138. cmp al, 09H
  2139. je tab
  2140. cmp al, 07H
  2141. je bell
  2142. mov cx, 1
  2143. pLoop:
  2144. push cx
  2145. push dx
  2146. mov ah, [__attrib] (* ax is char and attrib *)
  2147. mov bx, ax
  2148. mov al, 80
  2149. mul dh
  2150. sub dh, dh
  2151. add ax, dx
  2152. shl ax, 1
  2153. xchg ax, bx
  2154. mov es, [__vidsel][2]
  2155. add bx, [__vidsel]
  2156. mov es:[bx], ax
  2157. push bx
  2158. mov ax, 2
  2159. push ax
  2160. sub ax, ax
  2161. push ax
  2162. call far VIOSHOWBUF
  2163. pop dx
  2164. call __incxy
  2165. pop cx
  2166. loop pLoop
  2167. putExit:
  2168. mov ax, [bp][chk]
  2169. (*%F SameDS *)
  2170. pop ds
  2171. (*%E *)
  2172. (*%T RegParam *)
  2173. pop dx
  2174. pop cx
  2175. pop bx
  2176. mov sp, bp
  2177. (*%E *)
  2178. pop bp
  2179. (*%F NearCall *)
  2180. ret far 0
  2181. (*%E *)
  2182. (*%T NearCall *)
  2183. ret 0
  2184. (*%E *)
  2185. backSpace:
  2186. call __decxy
  2187. jmp putExit
  2188. newLine:
  2189. mov dl, [__right]
  2190. call __incxy
  2191. jmp putExit
  2192. carriageReturn:
  2193. mov dl, [__left]
  2194. call __setxy
  2195. jmp putExit
  2196. tab:
  2197. mov cx, 4
  2198. mov word [bp][chk], 20H
  2199. jmp pLoop
  2200. bell:
  2201. mov ax, 1500
  2202. push ax
  2203. mov ax, 300
  2204. push ax
  2205. call far DOSBEEP
  2206. jmp putExit
  2207. dw _directvideo
  2208. (****************************************************************************)
  2209. section
  2210. segment _TEXT(CODE,28H)
  2211. segment _DATA(DATA, 28H)
  2212. IO_NOWAIT = 1
  2213. extrn KBDSTRINGIN
  2214. extrn __getxy
  2215. select _DATA
  2216. extrn __ungotchar
  2217. extrn __kbdhandle
  2218. select _TEXT
  2219. public __c_cgets :
  2220. (*
  2221. char *cgets(char *str)
  2222. String is read from console and stroed starting at str[2].
  2223. s[0] is the max length of the string.
  2224. The actual length is stored at str[1].
  2225. Returns a pointer to the beginning of the actual string.
  2226. *)
  2227. CR = 0DH
  2228. LF = 0AH
  2229. (*%F RegParam *)
  2230. str = frame
  2231. kbuf = -4
  2232. locals = 4
  2233. (*%E *)
  2234. (*%T RegParam *)
  2235. str = -4
  2236. kbuf = -8
  2237. locals = 8
  2238. (*%E *)
  2239. push bp
  2240. mov bp, sp
  2241. sub sp, locals
  2242. (*%F RegParam *)
  2243. push bx
  2244. (*%E *)
  2245. push cx
  2246. (*%T NearPtr *)
  2247. push dx
  2248. (*%E *)
  2249. (*%T RegParam *)
  2250. mov [bp][str], ax
  2251. mov [bp][str][2], bx
  2252. (*%E *)
  2253. push di
  2254. push si
  2255. push ds
  2256. sub cx, cx
  2257. (*%F NearPtr *)
  2258. lds si, [bp][str]
  2259. (*%E *)
  2260. (*%T NearPtr *)
  2261. mov si, [bp][str]
  2262. (*%E *)
  2263. mov ax, _DATA
  2264. mov es, ax
  2265. cmp word es:[__ungotchar], 0
  2266. je cgetsNoWaiting
  2267. not cx
  2268. dec byte [si]
  2269. cgetsNoWaiting:
  2270. mov al, [si]
  2271. sub ah, ah
  2272. mov [bp][kbuf], ax
  2273. add si, 2
  2274. push cx
  2275. push ds
  2276. push si
  2277. push ss
  2278. lea ax, [bp][kbuf]
  2279. push ax
  2280. mov ax, IO_NOWAIT (* get string from console *)
  2281. push ax
  2282. push es:[__kbdhandle]
  2283. call far KBDSTRINGIN
  2284. pop cx
  2285. jcxz cgetsNoUnget
  2286. mov dx, es:[__ungotchar] (* insert put back character *)
  2287. mov cx, [bp][kbuf][2]
  2288. push si
  2289. std
  2290. (*%F NearPtr *)
  2291. les di, [bp][str]
  2292. (*%E *)
  2293. (*%T NearPtr *)
  2294. mov di, [bp][str]
  2295. (*%E *)
  2296. add si, cx
  2297. add di, cx
  2298. add di, 2
  2299. dec si
  2300. rep ; movsb
  2301. pop si
  2302. mov [si], dl
  2303. cld
  2304. inc word [bp][kbuf][2]
  2305. cgetsNoUnget:
  2306. mov bx, [bp][kbuf][2]
  2307. mov [si][-1], bl
  2308. mov byte [si][bx], 0
  2309. mov dx, ds (* return address of string *)
  2310. mov ax, si
  2311. pop ds
  2312. pop si
  2313. pop di
  2314. (*%T NearPtr *)
  2315. pop dx
  2316. (*%E *)
  2317. pop cx
  2318. (*%F RegParam *)
  2319. pop bx
  2320. (*%E *)
  2321. mov sp, bp
  2322. pop bp
  2323. (*%F NearCall *)
  2324. ret far 0
  2325. (*%E *)
  2326. (*%T NearCall *)
  2327. ret 0
  2328. (*%E *)
  2329. (****************************************************************************)
  2330. section
  2331. segment _TEXT(CODE,28H)
  2332. segment _DATA(DATA, 28H)
  2333. extrn VIOSCROLLDN
  2334. extrn VIOSCROLLUP
  2335. select _DATA
  2336. extrn __char
  2337. select _TEXT
  2338. public __scroll : (* internal to conio *)
  2339. push si
  2340. mov si, ax
  2341. mov byte [__char], 20H
  2342. sub bh, bh
  2343. mov bl, ch
  2344. push bx
  2345. mov bl, cl
  2346. push bx
  2347. mov bl, dh
  2348. push bx
  2349. mov bl, dl
  2350. push bx
  2351. cbw
  2352. push ax
  2353. push ds
  2354. mov bx, __char
  2355. push bx
  2356. sub bx, bx
  2357. push bx
  2358. mov ax, si
  2359. test ah, 1
  2360. jz scrollUp
  2361. call far VIOSCROLLDN
  2362. jmp scrollDone
  2363. scrollUp:
  2364. call far VIOSCROLLUP
  2365. scrollDone:
  2366. pop si
  2367. ret 0
  2368. (****************************************************************************)
  2369. section
  2370. segment _TEXT(CODE,28H)
  2371. segment _DATA(DATA, 28H)
  2372. extrn VIOGETCURPOS
  2373. select _DATA
  2374. extrn __attrib
  2375. select _TEXT
  2376. public __getxy : (* internal to conio *)
  2377. row = 2
  2378. col = 0
  2379. locals = 4
  2380. sub sp, locals
  2381. mov bx, sp
  2382. push ss
  2383. lea ax, [bx][row]
  2384. push ax
  2385. push ss
  2386. push bx
  2387. sub ax, ax
  2388. push ax
  2389. call far VIOGETCURPOS
  2390. mov dh, ss:[bx][row]
  2391. mov dl, ss:[bx][col]
  2392. add sp, locals
  2393. ret 0
  2394. (****************************************************************************)
  2395. section
  2396. segment _TEXT(CODE,28H)
  2397. segment _DATA(DATA, 28H)
  2398. extrn VIOSETCURPOS
  2399. select _TEXT
  2400. public __setxy : (* internal to conio *)
  2401. sub bh, bh
  2402. mov bl, dh
  2403. push bx
  2404. mov bl, dl
  2405. push bx
  2406. sub ax, ax
  2407. push ax
  2408. call far VIOSETCURPOS
  2409. ret 0
  2410. (****************************************************************************)
  2411. section
  2412. segment _TEXT(CODE,28H)
  2413. segment _DATA(DATA, 28H)
  2414. extrn __scroll
  2415. extrn __getxy
  2416. extrn __setxy
  2417. extrn __incxy
  2418. select _DATA
  2419. extrn __top
  2420. extrn __left
  2421. extrn __bottom
  2422. extrn __right
  2423. extrn __ylim
  2424. extrn __xlim
  2425. extrn __vidsel
  2426. extrn _directvideo
  2427. select _TEXT
  2428. public _gettext :
  2429. (*
  2430. int gettext(int left, int top, int right, int bottom, void *buffer)
  2431. puts text into buffer.
  2432. *)
  2433. (*%F RegParam *)
  2434. RetSize = 0
  2435. (*%E *)
  2436. (*%T RegParam *)
  2437. (*%T NearPtr *)
  2438. RetSize = 2
  2439. (*%E *)
  2440. (*%F NearPtr *)
  2441. RetSize = 4
  2442. (*%E *)
  2443. (*%E *)
  2444. (*%F RegParam *)
  2445. left = frame
  2446. top = 2+frame
  2447. right = 4+frame
  2448. bottom = 6+frame
  2449. buffer = 8+frame
  2450. temp = -2
  2451. nextrow = -4
  2452. locals = 4
  2453. (*%E *)
  2454. (*%T RegParam *)
  2455. buffer = frame
  2456. temp = -2
  2457. nextrow = -4
  2458. left = -6
  2459. right = -8
  2460. top = -10
  2461. bottom = -12
  2462. locals = 12
  2463. (*%E *)
  2464. push bp
  2465. mov bp, sp
  2466. sub sp, locals
  2467. push di
  2468. push si
  2469. (*%T RegParam *)
  2470. mov [bp][left], ax
  2471. mov [bp][top], bx
  2472. mov [bp][right], cx
  2473. mov [bp][bottom], dx
  2474. (*%E *)
  2475. (*%F NearPtr *)
  2476. push ds
  2477. (*%E *)
  2478. (*%F SameDS *)
  2479. mov ax, _DATA
  2480. mov ds, ax
  2481. (*%E *)
  2482. call __checkParam (* validate arguments *)
  2483. jc getError
  2484. mov ax, [bp][top]
  2485. mov dx, [bp][bottom]
  2486. mov cx, [bp][right]
  2487. sub cx, [bp][left]
  2488. inc cx
  2489. mov [bp][temp], cx
  2490. sub dx, ax
  2491. inc dx
  2492. push dx
  2493. mov bx, 80
  2494. mul bx
  2495. add ax, [bp][left]
  2496. shl ax, 1
  2497. mov si, ax
  2498. (*%F NearPtr *)
  2499. les di, [bp][buffer]
  2500. (*%E *)
  2501. (*%T NearPtr *)
  2502. mov di, _DATA
  2503. mov es, di
  2504. mov di, [bp][buffer]
  2505. (*%E *)
  2506. pop dx
  2507. linlop:
  2508. mov cx, [bp][temp]
  2509. push ds
  2510. add si, [__vidsel]
  2511. mov ds, [__vidsel][2]
  2512. rep ; movsw
  2513. pop ds
  2514. add ax, 160
  2515. mov si, ax
  2516. dec dx
  2517. jne linlop
  2518. done:
  2519. getDone:
  2520. mov ax, 1 (* return *)
  2521. getExit:
  2522. (*%F NearPtr *)
  2523. pop ds
  2524. (*%E *)
  2525. pop si
  2526. pop di
  2527. mov sp, bp
  2528. pop bp
  2529. (*%F NearCall *)
  2530. ret far RetSize
  2531. (*%E *)
  2532. (*%T NearCall *)
  2533. ret RetSize
  2534. (*%E *)
  2535. getError:
  2536. sub ax, ax
  2537. jmp getExit
  2538. public __checkParam : (* check parameters agianst window *)
  2539. dec byte [bp][left]
  2540. dec byte [bp][right]
  2541. dec byte [bp][top]
  2542. dec byte [bp][bottom]
  2543. mov dh, [bp][top]
  2544. cmp dh, [__ylim]
  2545. ja chkError
  2546. mov dl, [bp][left]
  2547. cmp dl, [__xlim]
  2548. ja chkError
  2549. mov bl, [bp][right]
  2550. cmp bl, [__xlim]
  2551. ja chkError
  2552. mov bl, [bp][bottom]
  2553. cmp bl, [__ylim]
  2554. ja chkError
  2555. clc
  2556. ret 0
  2557. chkError: (* carry flag denotes error *)
  2558. stc
  2559. ret 0
  2560. (**************************************************************************)
  2561. section
  2562. segment _TEXT(CODE,28H)
  2563. segment _DATA(DATA, 28H)
  2564. extrn __scroll
  2565. extrn __getxy
  2566. extrn __setxy
  2567. extrn __incxy
  2568. extrn __checkParam
  2569. extrn __updatebuf
  2570. select _DATA
  2571. extrn __top
  2572. extrn __left
  2573. extrn __bottom
  2574. extrn __right
  2575. extrn __attrib
  2576. extrn __ylim
  2577. extrn __xlim
  2578. extrn __vidsel
  2579. extrn _directvideo
  2580. select _TEXT
  2581. public _puttext :
  2582. (*
  2583. int puttext(int left, int top, int right, int bottom, void *buffer)
  2584. copy buffer to screen
  2585. *)
  2586. (*%F RegParam *)
  2587. RetSize = 0
  2588. (*%E *)
  2589. (*%T RegParam *)
  2590. (*%T NearPtr *)
  2591. RetSize = 2
  2592. (*%E *)
  2593. (*%F NearPtr *)
  2594. RetSize = 4
  2595. (*%E *)
  2596. (*%E *)
  2597. (*%F RegParam *)
  2598. left = frame
  2599. top = 2+frame
  2600. right = 4+frame
  2601. bottom = 6+frame
  2602. buffer = 8+frame
  2603. temp = -2
  2604. nextrow = -4
  2605. locals = 4
  2606. (*%E *)
  2607. (*%T RegParam *)
  2608. buffer = frame
  2609. temp = -2
  2610. nextrow = -4
  2611. left = -6
  2612. right = -8
  2613. top = -10
  2614. bottom = -12
  2615. locals = 12
  2616. (*%E *)
  2617. push bp
  2618. mov bp, sp
  2619. sub sp, locals
  2620. push di
  2621. push si
  2622. (*%T RegParam *)
  2623. mov [bp][left], ax
  2624. mov [bp][top], bx
  2625. mov [bp][right], cx
  2626. mov [bp][bottom], dx
  2627. (*%E *)
  2628. (*%F NearPtr *)
  2629. push ds
  2630. (*%E *)
  2631. (*%F SameDS *)
  2632. mov ax, _DATA
  2633. mov ds, ax
  2634. (*%E *)
  2635. call __checkParam
  2636. jc setError
  2637. mov ax, [bp][top]
  2638. mov dx, [bp][bottom]
  2639. mov cx, [bp][right]
  2640. sub cx, [bp][left]
  2641. inc cx
  2642. mov [bp][temp], cx
  2643. sub dx, ax
  2644. inc dx
  2645. push dx
  2646. mov bx, 80
  2647. mul bx
  2648. add ax, [bp][left]
  2649. shl ax, 1
  2650. mov di, ax
  2651. mov es, [__vidsel][2]
  2652. add di, [__vidsel]
  2653. (*%F NearPtr *)
  2654. lds si, [bp][buffer]
  2655. (*%E *)
  2656. (*%T NearPtr *)
  2657. mov si, [bp][buffer]
  2658. (*%E *)
  2659. pop dx
  2660. linlop:
  2661. mov cx, [bp][temp]
  2662. rep ; movsw
  2663. add ax, 160
  2664. mov di, ax
  2665. dec dx
  2666. jne linlop
  2667. call __updatebuf
  2668. setDone:
  2669. mov ax, 1
  2670. setExit:
  2671. (*%F NearPtr *)
  2672. pop ds
  2673. (*%E *)
  2674. pop si
  2675. pop di
  2676. mov sp, bp
  2677. pop bp
  2678. (*%F NearCall *)
  2679. ret far RetSize
  2680. (*%E *)
  2681. (*%T NearCall *)
  2682. ret RetSize
  2683. (*%E *)
  2684. setError:
  2685. sub ax, ax
  2686. jmp setExit
  2687. (****************************************************************************)
  2688. section
  2689. segment _TEXT(CODE,28H)
  2690. segment _DATA(DATA, 28H)
  2691. extrn __scroll
  2692. extrn __getxy
  2693. extrn __setxy
  2694. extrn __incxy
  2695. select _DATA
  2696. extrn __top
  2697. extrn __left
  2698. extrn __bottom
  2699. extrn __right
  2700. select _TEXT
  2701. public _gotoxy :
  2702. (*
  2703. void gotoxy(int x, int y)
  2704. *)
  2705. xpos = frame
  2706. ypos = 2+frame
  2707. (*%F RegParam *)
  2708. push bp (* move to position relative to window *)
  2709. mov bp, sp
  2710. (*%E *)
  2711. (*%T RegParam *)
  2712. push cx
  2713. push dx
  2714. (*%E *)
  2715. (*%F SameDS *)
  2716. push ds
  2717. mov cx, _DATA
  2718. mov ds, cx
  2719. (*%E *)
  2720. (*%F RegParam *)
  2721. mov al, [bp][xpos]
  2722. (*%E *)
  2723. dec al
  2724. add al, [__left]
  2725. cmp al, [__right]
  2726. ja gotoError
  2727. (*%F RegParam *)
  2728. mov bh, [bp][ypos]
  2729. (*%E *)
  2730. (*%T RegParam *)
  2731. mov bh, bl
  2732. (*%E *)
  2733. dec bh
  2734. add bh, [__top]
  2735. cmp bh, [__bottom]
  2736. ja gotoError
  2737. mov dh, bh
  2738. mov dl, al
  2739. call __setxy
  2740. gotoError:
  2741. (*%F SameDS *)
  2742. pop ds
  2743. (*%E *)
  2744. (*%T RegParam *)
  2745. pop dx
  2746. pop cx
  2747. (*%E *)
  2748. (*%F RegParam *)
  2749. pop bp
  2750. (*%E *)
  2751. (*%F NearCall *)
  2752. ret far 0
  2753. (*%E *)
  2754. (*%T NearCall *)
  2755. ret 0
  2756. (*%E *)
  2757. (****************************************************************************)
  2758. section
  2759. segment _TEXT(CODE,28H)
  2760. segment _DATA(DATA, 28H)
  2761. extrn __settextmode
  2762. extrn __gettextmode
  2763. select _DATA
  2764. extrn __xlim
  2765. extrn __ylim
  2766. extrn __prevmode
  2767. select _TEXT
  2768. public _textmode :
  2769. (*
  2770. void textmode(int mode)
  2771. *)
  2772. (*%F RegParam *)
  2773. mode = frame (* set text mode *)
  2774. (*%E *)
  2775. (*%T RegParam *)
  2776. mode = -2
  2777. locals = 2
  2778. (*%E *)
  2779. push bp
  2780. mov bp, sp
  2781. (*%T RegParam *)
  2782. sub sp, locals
  2783. mov [bp][mode], ax
  2784. (*%E *)
  2785. (*%F RegParam *)
  2786. push ax
  2787. (*%E *)
  2788. push bx
  2789. push cx
  2790. push dx
  2791. (*%F SameDS *)
  2792. push ds
  2793. mov ax, _DATA
  2794. mov ds, ax
  2795. (*%E *)
  2796. mov dl, [__prevmode]
  2797. call __gettextmode
  2798. mov [__prevmode], al
  2799. mov ax, [bp][mode]
  2800. cmp al, -1
  2801. jne newMode
  2802. sub dh, dh
  2803. push dx
  2804. jmp callSet
  2805. newMode:
  2806. push ax
  2807. callSet:
  2808. call __settextmode
  2809. add sp, 2
  2810. (*%F SameDS *)
  2811. pop ds
  2812. (*%E *)
  2813. pop dx
  2814. pop cx
  2815. pop bx
  2816. (*%F RegParam *)
  2817. pop ax
  2818. (*%E *)
  2819. (*%T RegParam *)
  2820. mov sp, bp
  2821. (*%E *)
  2822. pop bp
  2823. (*%F NearCall *)
  2824. ret far 0
  2825. (*%E *)
  2826. (*%T NearCall *)
  2827. ret 0
  2828. (*%E *)
  2829. (****************************************************************************)
  2830. section
  2831. segment _TEXT(CODE,28H)
  2832. segment _DATA(DATA, 28H)
  2833. extrn _wherex
  2834. extrn _wherey
  2835. extrn __gettextmode
  2836. select _DATA
  2837. extrn __left
  2838. extrn __top
  2839. extrn __right
  2840. extrn __bottom
  2841. extrn __xlim
  2842. extrn __ylim
  2843. extrn __startattrib
  2844. extrn __attrib
  2845. select _TEXT
  2846. public _gettextinfo :
  2847. (*
  2848. void gettextinfo(struct text_info *r)
  2849. Copies window information into user supplied structure.
  2850. *)
  2851. winleft = 0
  2852. wintop = 1
  2853. winright = 2
  2854. winbottom = 3
  2855. attribute = 4
  2856. normattr = 5
  2857. currmode = 6
  2858. screenheight = 7
  2859. screenwidth = 8
  2860. curx = 9
  2861. cury = 10
  2862. (*%F RegParam *)
  2863. r = frame
  2864. push bp
  2865. mov bp, sp
  2866. push si
  2867. (*%F NearPtr *)
  2868. push ds
  2869. lds si, [bp][r]
  2870. (*%E *)
  2871. (*%T NearPtr *)
  2872. mov si, [bp][r]
  2873. (*%E *)
  2874. (*%E *)
  2875. (*%T RegParam *)
  2876. (*%T NearPtr *)
  2877. push bx
  2878. (*%E *)
  2879. push cx
  2880. push dx
  2881. push si
  2882. (*%F NearPtr *)
  2883. push ds
  2884. mov ds, bx
  2885. mov si, ax
  2886. (*%E *)
  2887. (*%T NearPtr *)
  2888. mov si, ax
  2889. (*%E *)
  2890. (*%E *)
  2891. (*%F NearCall *)
  2892. call far _wherex
  2893. (*%E *)
  2894. (*%T NearCall *)
  2895. call _wherex
  2896. (*%E *)
  2897. mov [si][curx], al
  2898. (*%F NearCall *)
  2899. call far _wherey
  2900. (*%E *)
  2901. (*%T NearCall *)
  2902. call _wherey
  2903. (*%E *)
  2904. mov [si][cury], al
  2905. mov ax, _DATA
  2906. mov es, ax
  2907. mov al, es:[__startattrib] (* attributes *)
  2908. mov [si][normattr], al
  2909. mov al, es:[__attrib]
  2910. mov [si][attribute], al
  2911. mov al, es:[__left]
  2912. inc al
  2913. mov [si][winleft], al (* window co-ordinates *)
  2914. mov al, es:[__top]
  2915. inc al
  2916. mov [si][wintop], al
  2917. mov al, es:[__right]
  2918. inc al
  2919. mov [si][winright], al
  2920. mov al, es:[__xlim]
  2921. inc al
  2922. mov [si][screenwidth], al
  2923. mov al, es:[__bottom]
  2924. inc al
  2925. mov [si][winbottom], al
  2926. mov al, es:[__ylim]
  2927. inc al
  2928. mov [si][screenheight], al
  2929. call __gettextmode
  2930. mov [si][currmode], al
  2931. (*%F NearPtr *)
  2932. pop ds
  2933. (*%E *)
  2934. pop si
  2935. (*%T RegParam *)
  2936. pop dx
  2937. pop cx
  2938. (*%T NearPtr *)
  2939. pop bx
  2940. (*%E *)
  2941. (*%E *)
  2942. (*%F RegParam *)
  2943. pop bp
  2944. (*%E *)
  2945. (*%F NearCall *)
  2946. ret far 0
  2947. (*%E *)
  2948. (*%T NearCall *)
  2949. ret 0
  2950. (*%E *)
  2951. (****************************************************************************)
  2952. section
  2953. segment INITCODE(CODE, 28H)
  2954. segment _DATA(DATA, 28H)
  2955. extrn _directvideo
  2956. select _DATA (* globals for conio *)
  2957. public __startattrib : db 0
  2958. public __char : db 0
  2959. public __attrib : db 0
  2960. public __prevmode : db 0
  2961. public __xlim : db 0
  2962. public __ylim : db 0
  2963. public __windmin :
  2964. public __left : db 0
  2965. public __top : db 0
  2966. public __windmax :
  2967. public __right : db 0
  2968. public __bottom : db _directvideo
  2969. public __vidsel : org 4
  2970. public __vidlen : dw _directvideo
  2971. public __wscroll: dw 1
  2972. (****************************************************************************)
  2973. section
  2974. segment _DATA(DATA, 28H)
  2975. segment _INIT(INIT_CODE,28H)
  2976. segment _TEXT(CODE,28H)
  2977. extrn __getxy
  2978. extrn __setxy
  2979. extrn __gettextmode
  2980. extrn __getvidsel
  2981. extrn __c_putch
  2982. extrn __d_cgets
  2983. extrn KBDOPEN
  2984. select _DATA
  2985. extrn __startattrib
  2986. extrn __attrib
  2987. extrn __prevmode
  2988. extrn __xlim
  2989. extrn __ylim
  2990. extrn __top
  2991. extrn __left
  2992. extrn __right
  2993. extrn __bottom
  2994. extrn __vidsel
  2995. extrn __kbdhandle
  2996. extrn __p_init
  2997. extrn __i_cgets
  2998. extrn __i_putch
  2999. extrn __nullproc
  3000. select _TEXT
  3001. do_initconio : (* defined later on ! *)
  3002. select _INIT
  3003. (*%F NearCall *)
  3004. initconio : dw MAGIC_NUM
  3005. db PR4
  3006. dd do_initconio
  3007. (*%E *)
  3008. (*%T NearCall *)
  3009. initconio : dw MAGIC_NUM
  3010. db PR4
  3011. dw do_initconio
  3012. (*%E *)
  3013. select _DATA
  3014. public _directvideo : dw 0, initconio
  3015. select _TEXT
  3016. public __initconio : (* initialisation for conio - sets screen *)
  3017. (* mode, gets video refresh segment and *)
  3018. (* initialises the defualt full screen window *)
  3019. push bp
  3020. mov bp, sp
  3021. (*%F SameDS *)
  3022. push ds
  3023. mov ax, seg __i_putch
  3024. mov ds, ax
  3025. (*%E *)
  3026. mov word [__i_putch], __c_putch
  3027. mov word [__i_cgets], __d_cgets
  3028. (*%F NearCall *)
  3029. mov word [__i_putch][2], cs
  3030. mov word [__i_cgets][2], cs
  3031. (*%E *)
  3032. mov word [__p_init], -1
  3033. (*%F SameDS *)
  3034. mov ax, seg __startattrib
  3035. mov ds, ax
  3036. (*%E *)
  3037. mov ah, 7
  3038. mov [__startattrib], ah
  3039. mov [__attrib], ah
  3040. call __gettextmode
  3041. mov [__prevmode], al
  3042. cmp al, 1
  3043. ja column80
  3044. mov dx, 39
  3045. jmp setColumn
  3046. column80:
  3047. mov dx, 79
  3048. setColumn:
  3049. mov [__xlim], dl
  3050. mov [__right], dl
  3051. mov byte [__ylim], 24
  3052. mov byte [__bottom], 24
  3053. mov byte [__left], 0
  3054. mov byte [__top], 0
  3055. call __getvidsel
  3056. (* push ds
  3057. mov ax, __kbdhandle
  3058. push ax
  3059. call far KBDOPEN *)
  3060. setScreen:
  3061. (*%F SameDS *)
  3062. pop ds
  3063. (*%E *)
  3064. pop bp
  3065. (*%F NearCall *)
  3066. ret far 0
  3067. (*%E *)
  3068. (*%T NearCall *)
  3069. ret 0
  3070. (*%E *)
  3071. (****************************************************************************)
  3072. section
  3073. segment _TEXT(CODE,28H)
  3074. segment _DATA(DATA, 28H)
  3075. extrn VIOGETBUF
  3076. select _DATA
  3077. extrn __vidsel
  3078. extrn __vidlen
  3079. select _TEXT
  3080. public __getvidsel :
  3081. push ds
  3082. mov ax, __vidsel
  3083. push ax
  3084. push ds
  3085. mov ax, __vidlen
  3086. push ax
  3087. sub ax, ax
  3088. push ax
  3089. call far VIOGETBUF
  3090. ret 0
  3091. (****************************************************************************)
  3092. section
  3093. segment _TEXT(CODE,28H)
  3094. segment _DATA(DATA, 28H)
  3095. extrn VIOSHOWBUF
  3096. select _DATA
  3097. extrn __vidsel
  3098. extrn __vidlen
  3099. select _TEXT
  3100. public __updatebuf :
  3101. mov ax, _DATA
  3102. mov es, ax
  3103. push es:[__vidsel]
  3104. push es:[__vidlen]
  3105. sub ax, ax
  3106. push ax
  3107. call far VIOSHOWBUF
  3108. ret 0
  3109. (****************************************************************************)
  3110. section
  3111. segment _TEXT(CODE,28H)
  3112. segment _DATA(DATA, 28H)
  3113. extrn VIOGETMODE
  3114. extrn VIOSETMODE
  3115. select _DATA
  3116. select _TEXT
  3117. BW40 = 0
  3118. C40 = 1
  3119. BW80 = 2
  3120. C80 = 3
  3121. MONO = 7
  3122. VGMT_MONO = 0
  3123. VGMT_OTHER = 1
  3124. VGMT_GRAPHICS = 2
  3125. VGMT_DISABLEBURST = 4
  3126. VGMT_ENABLEBURST = 251
  3127. (* struct _VIOMODEINFO *)
  3128. cb = 0
  3129. fbType = 2
  3130. color = 3
  3131. col = 4
  3132. row = 6
  3133. hres = 8
  3134. vres = 10
  3135. fmt_ID = 12
  3136. attrib = 13
  3137. VIOMODESIZE = 14
  3138. viobuf = -VIOMODESIZE
  3139. locals = VIOMODESIZE-2
  3140. public __gettextmode :
  3141. push bp
  3142. mov bp, sp
  3143. sub sp, locals
  3144. mov word [bp][viobuf][cb], VIOMODESIZE
  3145. push ss
  3146. lea ax, [bp][viobuf]
  3147. push ax
  3148. sub ax, ax
  3149. push ax
  3150. call far VIOGETMODE
  3151. mov al, [bp][viobuf][fbType]
  3152. cmp al, VGMT_MONO
  3153. jne colorMode
  3154. mov ax, MONO
  3155. jmp modeDone
  3156. colorMode:
  3157. cmp al, VGMT_DISABLEBURST
  3158. jne colorEnabled
  3159. BWMode:
  3160. mov ax, 0
  3161. jmp getCols
  3162. colorEnabled:
  3163. mov ax, 1
  3164. getCols:
  3165. mov bx, [bp][viobuf][col]
  3166. cmp bx, 80
  3167. jne g40col
  3168. add ax, 2
  3169. g40col:
  3170. modeDone:
  3171. mov sp, bp
  3172. pop bp
  3173. ret 0
  3174. public __settextmode :
  3175. (*%F RegParam *)
  3176. mode = sframe
  3177. (*%E *)
  3178. (*%T RegParam *)
  3179. mode = VIOMODESIZE-2
  3180. (*%E *)
  3181. push bp
  3182. mov bp, sp
  3183. sub sp, locals
  3184. (*%T RegParam *)
  3185. mov [bp][mode], ax
  3186. (*%E *)
  3187. mov word [bp][viobuf][cb], VIOMODESIZE
  3188. push ss
  3189. lea ax, [bp][viobuf]
  3190. push ax
  3191. sub ax, ax
  3192. push ax
  3193. call far VIOGETMODE
  3194. mov ax, [bp][mode]
  3195. cmp ax, 7
  3196. jne notMono
  3197. mov byte [bp][viobuf][fbType], VGMT_MONO
  3198. jmp setMode
  3199. notMono:
  3200. test ax, 1
  3201. jnz colorEd
  3202. or byte [bp][viobuf][fbType], VGMT_DISABLEBURST
  3203. jmp setCol
  3204. colorEd:
  3205. and byte [bp][viobuf][fbType], VGMT_ENABLEBURST
  3206. setCol:
  3207. test ax, 2
  3208. jnz s80Col
  3209. mov word [bp][viobuf][col], 40
  3210. jmp setMode
  3211. s80Col:
  3212. mov word [bp][viobuf][col], 80
  3213. setMode:
  3214. push ss
  3215. lea ax, [bp][viobuf]
  3216. push ax
  3217. sub ax, ax
  3218. push ax
  3219. call far VIOSETMODE
  3220. mov sp, bp
  3221. pop bp
  3222. ret 0
  3223. (****************************************************************************)
  3224. section
  3225. segment _TEXT(CODE,28H)
  3226. segment _DATA(DATA, 28H)
  3227. extrn __scroll
  3228. extrn __getxy
  3229. extrn __setxy
  3230. extrn __incxy
  3231. extrn __checkParam
  3232. extrn __updatebuf
  3233. select _DATA
  3234. extrn __top
  3235. extrn __left
  3236. extrn __bottom
  3237. extrn __right
  3238. extrn __attrib
  3239. extrn __ylim
  3240. extrn __xlim
  3241. extrn __vidseg
  3242. extrn __vidsel
  3243. select _TEXT
  3244. public _movetext :
  3245. (*
  3246. int movetext(int left, int top, int right, int bottom, int nleft, int ntop)
  3247. *)
  3248. (*%F RegParam *)
  3249. RetSize = 0
  3250. (*%E *)
  3251. (*%T RegParam *)
  3252. RetSize = 4
  3253. (*%E *)
  3254. (*%F RegParam *)
  3255. left = frame
  3256. top = 2+frame
  3257. right = 4+frame
  3258. bottom = 6+frame
  3259. nleft = 8+frame
  3260. ntop = 10+frame
  3261. rcount = -2
  3262. ccount = -4
  3263. locals = 4
  3264. (*%E *)
  3265. (*%T RegParam *)
  3266. rcount = -2
  3267. ccount = -4
  3268. left = -6
  3269. right = -8
  3270. top = -10
  3271. bottom = -12
  3272. ntop = frame
  3273. nleft = 2+frame
  3274. locals = 12
  3275. (*%E *)
  3276. push bp
  3277. mov bp, sp
  3278. sub sp, locals
  3279. push di
  3280. push si
  3281. push ds
  3282. (*%T RegParam *)
  3283. mov [bp][left], ax
  3284. mov [bp][top], bx
  3285. mov [bp][right], cx
  3286. mov [bp][bottom], dx
  3287. (*%E *)
  3288. dec word [bp][nleft]
  3289. dec word [bp][ntop]
  3290. (*%F SameDS *)
  3291. mov ax, _DATA
  3292. mov ds, ax
  3293. (*%E *)
  3294. call __checkParam
  3295. jc near setError
  3296. mov ax, [bp][bottom]
  3297. sub ax, [bp][top]
  3298. inc ax
  3299. mov [bp][rcount], ax
  3300. mov ax, [bp][right]
  3301. sub ax, [bp][left]
  3302. inc ax
  3303. mov [bp][ccount], ax
  3304. mov ax, [bp][top]
  3305. mov dx, 80
  3306. mul dx
  3307. add ax, [bp][left]
  3308. shl ax, 1
  3309. mov si, ax
  3310. mov ax, [bp][ntop]
  3311. mov dx, 80
  3312. mul dx
  3313. add ax, [bp][nleft]
  3314. shl ax, 1
  3315. mov di, ax
  3316. mov ax, [bp][top]
  3317. mov bx, [bp][ntop]
  3318. cmp ax, bx
  3319. jge RowUp
  3320. RowDown:
  3321. mov ax, 80
  3322. mov dx, [bp][rcount]
  3323. dec dx
  3324. mul dx
  3325. shl ax, 1
  3326. add si, ax
  3327. add di, ax
  3328. mov dx, -160
  3329. jmp gotRowDirection
  3330. RowUp:
  3331. mov dx, 160
  3332. gotRowDirection:
  3333. mov cx, [bp][left]
  3334. mov bx, [bp][nleft]
  3335. cmp cx, bx
  3336. jge ColUp
  3337. ColDown:
  3338. mov ax, [bp][ccount]
  3339. dec ax
  3340. shl ax, 1
  3341. add si, ax
  3342. add di, ax
  3343. std
  3344. jmp gotColDirection
  3345. ColUp:
  3346. gotColDirection:
  3347. mov ax, [__vidsel][2]
  3348. mov bx, [__vidsel]
  3349. mov es, ax
  3350. mov ds, ax
  3351. add di, bx
  3352. add si, bx
  3353. mov bx, [bp][rcount]
  3354. rowLoop:
  3355. push di
  3356. push si
  3357. mov cx, [bp][ccount]
  3358. rep ; movsw
  3359. pop si
  3360. pop di
  3361. add si, dx
  3362. add di, dx
  3363. dec bx
  3364. jnz rowLoop
  3365. setDone:
  3366. call __updatebuf
  3367. mov ax, 1
  3368. setExit:
  3369. cld
  3370. pop ds
  3371. pop si
  3372. pop di
  3373. mov sp, bp
  3374. pop bp
  3375. (*%F NearCall *)
  3376. ret far RetSize
  3377. (*%E *)
  3378. (*%T NearCall *)
  3379. ret RetSize
  3380. (*%E *)
  3381. setError:
  3382. sub ax, ax
  3383. jmp setExit
  3384. (*%E *)
  3385. end
  3386.