video.inc 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. {
  2. System independent low-level video interface for os/2
  3. $Id$
  4. }
  5. uses viocalls;
  6. var videobuf:Pvideobuf;
  7. videobufsize:cardinal;
  8. lastcursortype:word=crunderline;
  9. cell_width,cell_height:word;
  10. {$ASMMODE ATT}
  11. procedure update_cell_size;
  12. begin
  13. {This function cannot fail when you the default handle is used.}
  14. viogetdevicecellsize(cell_height,cell_width,0);
  15. end;
  16. procedure initvideo;
  17. begin
  18. initvideocalled:=true;
  19. {Get the address of the videobuffer.}
  20. if viogetbuf(videobuf,videobufsize,0)=0 then
  21. begin
  22. update_cell_size;
  23. sethighbitblink;
  24. setcursortype(lastcursortype);
  25. end
  26. else
  27. errcode:=errvioinit;
  28. end;
  29. procedure setcursorpos(newcursorx,newcursory:word);
  30. begin
  31. if viosetcurpos(newcursory,newcursorx,0)<>0 then
  32. {Do not set an error code; people should fix invalid newcursorx or
  33. newcursory values when designing, there is no need for detecting
  34. these errors at runtime.}
  35. runerror(225);
  36. end;
  37. function getcursortype:word;
  38. var cd:Tviocursorinfo;
  39. begin
  40. viogetcurtype(cd,0); {Never fails, because handle is default handle.}
  41. if cd.attr=-1 then
  42. getcursortype:=crhidden
  43. else
  44. {Because the cursor's start and end lines are returned, we'll have
  45. to guess heuristically what cursor type we have.}
  46. case cd.cend-cd.ystart of
  47. 0:
  48. {Propably this does not occur, but you'll never know.}
  49. getcursortype:=crhidden;
  50. 1..cell_height div 4:
  51. getcursortype=crunderline;
  52. cell_height div 4..cell_height div 2:
  53. getcursortype:=crhalfblock;
  54. else
  55. getcursortype:=crblock;
  56. end;
  57. end;
  58. procedure setcursortype;
  59. begin
  60. end;
  61. procedure donevideo;
  62. begin
  63. If initvideocalled then
  64. begin
  65. lastcursortype:=getcursortype;
  66. clearscreen;
  67. setcursortype(crunderline);
  68. setcursorpos(0,0);
  69. initvideocalled:=false;
  70. videobufsize:=0;
  71. end;
  72. end;
  73. function GetCapabilities: Word;
  74. begin
  75. GetCapabilities := $3F;
  76. end;
  77. procedure SetCursorPos(NewCursorX, NewCursorY: Word);
  78. begin
  79. end;
  80. function GetCursorType: Word;
  81. begin
  82. end;
  83. procedure SetCursorType(NewType: Word);
  84. begin
  85. end;
  86. function DefaultVideoModeSelector(const VideoMode: TVideoMode; Params: Longint): Boolean;
  87. begin
  88. end;
  89. procedure ClearScreen;
  90. begin
  91. end;
  92. procedure UpdateScreen(Force: Boolean);
  93. begin
  94. if LockUpdateScreen<>0 then
  95. exit;
  96. if not force then
  97. begin
  98. asm
  99. movl VideoBuf,%esi
  100. movl OldVideoBuf,%edi
  101. movl VideoBufSize,%ecx
  102. shrl $2,%ecx
  103. repe
  104. cmpsl
  105. orl %ecx,%ecx
  106. jz .Lno_update
  107. movb $1,force
  108. .Lno_update:
  109. end;
  110. end;
  111. if Force then
  112. begin
  113. dosmemput(videoseg,0,videobuf^,VideoBufSize);
  114. move(videobuf^,oldvideobuf^,VideoBufSize);
  115. end;
  116. end;
  117. procedure RegisterVideoModes;
  118. begin
  119. RegisterVideoMode(40, 25, False, DefaultVideoModeSelector, $00000000);
  120. RegisterVideoMode(40, 25, True, DefaultVideoModeSelector, $00000001);
  121. RegisterVideoMode(80, 25, False, DefaultVideoModeSelector, $00000002);
  122. RegisterVideoMode(80, 25, True, DefaultVideoModeSelector, $00000003);
  123. end;
  124. {
  125. $Log$
  126. Revision 1.1 2000-02-23 22:44:22 daniel
  127. * Video.inc for os/2
  128. Revision 1.4 1998/12/15 17:17:17 peter
  129. + cursor at 1,1 at the end
  130. Revision 1.3 1998/12/12 19:13:01 peter
  131. * keyboard updates
  132. * make test target, make all only makes units
  133. Revision 1.2 1998/12/10 11:41:50 florian
  134. * cursor is properly restored in DoneVideo
  135. Revision 1.1 1998/12/04 12:48:27 peter
  136. * moved some dirs
  137. Revision 1.4 1998/11/01 20:29:11 peter
  138. + lockupdatescreen counter to not let updatescreen() update
  139. Revision 1.3 1998/10/28 21:18:26 peter
  140. * more fixes
  141. Revision 1.2 1998/10/28 00:02:08 peter
  142. + mouse
  143. + video.clearscreen, video.videobufsize
  144. Revision 1.1 1998/10/26 11:31:47 peter
  145. + inital include files
  146. }