SMARTSCR.MOD 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688
  1. IMPLEMENTATION MODULE SmartScreen;
  2. (*
  3. * REPERTOIRE
  4. * Release 1.6
  5. * By Charles Bradford and Cole Brecheen
  6. * (c) Copyright 1985-1992 PMI
  7. * Green Bay, Wisconsin
  8. * All rights reserved
  9. * (414) 468-6040
  10. *
  11. * $Header: D:/logfiles/mods/smartscr.mov 1.5 17 Mar 1991 17:53:50 coleb $
  12. *
  13. *)
  14. (*EntryDiag:
  15. IMPORT Diagnostics;
  16. :EntryDiag*)
  17. (* IMPORT EnvironUtils; *)
  18. IMPORT ErrorManager;
  19. IMPORT LowLevel;
  20. IMPORT M2Strings;
  21. IMPORT Numbers;
  22. IMPORT StrConv;
  23. IMPORT StrEdit;
  24. IMPORT StringIO;
  25. IMPORT SYSTEM;
  26. IMPORT VStorage;
  27. IMPORT FAPI;
  28. VAR
  29. Initialized : BOOLEAN;
  30. CONST
  31. blink = 16;
  32. byte1 = 0;
  33. VAR
  34. ReturnCode: CARDINAL;
  35. TextAttrByte: CHAR;
  36. NoSnow, UsingColor: BOOLEAN;
  37. NilValue : VStorage.MemHandle;
  38. setting : ARRAY [0..80] OF CHAR;
  39. PROCEDURE SetBits( VAR TheWord: SYSTEM.BYTE; bit1, bit2, bit3: CARDINAL );
  40. BEGIN
  41. END SetBits;
  42. PROCEDURE EndCol(): CARDINAL;
  43. VAR
  44. ModeData: FAPI.VIOMODEINFO;
  45. ErrorNum: CARDINAL;
  46. BEGIN
  47. ModeData.cb := SYSTEM.TSIZE(FAPI.VIOMODEINFO);
  48. ErrorNum := FAPI.VIOGETMODE(SYSTEM.ADR(ModeData), 0);
  49. IF ErrorNum # 0 THEN
  50. ErrorManager.WarnNumber("VioGetMode error", ErrorNum);
  51. END;
  52. MaxCol := ModeData.col;
  53. (*
  54. MaxCol := 80;
  55. *)
  56. RETURN MaxCol;
  57. END EndCol;
  58. PROCEDURE EndRow(): CARDINAL;
  59. VAR
  60. ModeData: FAPI.VIOMODEINFO;
  61. ErrorNum: CARDINAL;
  62. BEGIN
  63. ModeData.cb := SYSTEM.TSIZE(FAPI.VIOMODEINFO);
  64. ErrorNum := FAPI.VIOGETMODE(SYSTEM.ADR(ModeData), 0);
  65. IF ErrorNum # 0 THEN
  66. ErrorManager.WarnNumber("VioGetMode error", ErrorNum);
  67. END;
  68. MaxRow := ModeData.row;
  69. (*
  70. MaxRow := 25;
  71. *)
  72. RETURN MaxRow;
  73. END EndRow;
  74. PROCEDURE GotoXY(column, row : CARDINAL);
  75. (*puts cursor at column X, row Y *)
  76. VAR
  77. dumstr, dumstr2 : ARRAY [0..20] OF CHAR;
  78. BEGIN
  79. IF row>MaxRow THEN
  80. row := MaxRow - 1;
  81. ELSIF row>0 THEN
  82. DEC(row);
  83. END;
  84. IF column>MaxCol THEN
  85. column := MaxCol - 1;
  86. ELSIF column>0 THEN
  87. DEC(column);
  88. END;
  89. IF FAPI.VIOSETCURPOS(row, column, 0) # 0 THEN
  90. ErrorManager.WARN("VioSetCurPos error ");
  91. END;
  92. END GotoXY;
  93. PROCEDURE MonoAttrsToColor(AttrSet : AttributeSet; VAR fg, bg :
  94. Colors);
  95. BEGIN
  96. fg := ForeGround;
  97. bg := BackGround;
  98. IF invisible IN AttrSet THEN
  99. fg := black;
  100. bg := black;
  101. RETURN;
  102. END;
  103. IF plain IN AttrSet THEN
  104. fg := lightgrey;
  105. bg := black;
  106. RETURN;
  107. END;
  108. IF underscored IN AttrSet THEN
  109. fg := blue;
  110. bg := black;
  111. END;
  112. IF ReverseVideo IN AttrSet THEN
  113. fg := black;
  114. bg := lightgrey;
  115. END;
  116. IF (bold IN AttrSet) AND (ForeGround<darkgrey) THEN
  117. fg := VAL(Colors, ORD(ForeGround)+ORD(darkgrey));
  118. END;
  119. IF (blinking IN AttrSet) AND (ORD(BackGround)<(blink DIV 2)) THEN
  120. bg := VAL(Colors, ORD(BackGround)+(blink DIV 2));
  121. END;
  122. END MonoAttrsToColor;
  123. PROCEDURE ColorToMonoAttrs(fg, bg : Colors; VAR AttrSet :
  124. AttributeSet);
  125. BEGIN
  126. AttrSet := AttributeSet{plain};
  127. IF (ORD(bg)>=(blink DIV 2)) THEN
  128. AttrSet := AttributeSet{blinking};
  129. bg := VAL(Colors, ORD(bg)-(blink DIV 2));
  130. END;
  131. IF fg>=darkgrey THEN
  132. INCL(AttrSet, bold);
  133. fg := VAL(Colors, ORD(fg)-ORD(darkgrey));
  134. END;
  135. CASE bg OF
  136. black :
  137. IF fg=blue THEN
  138. INCL(AttrSet, underscored);
  139. ELSIF fg=black THEN
  140. AttrSet := AttributeSet{invisible};
  141. END;
  142. | lightgrey :
  143. IF fg=black THEN
  144. INCL(AttrSet, ReverseVideo);
  145. END;
  146. ELSE
  147. END;
  148. IF AttrSet#AttributeSet{plain} THEN
  149. EXCL(AttrSet, plain);
  150. END;
  151. END ColorToMonoAttrs;
  152. PROCEDURE MakeAttrByte();
  153. VAR
  154. cnt: CARDINAL;
  155. BEGIN
  156. cnt := ORD(BackGround);
  157. LowLevel.ShiftLeft(cnt, 4);
  158. TextAttrByte := CHR(ORD(ForeGround)+cnt);
  159. END MakeAttrByte;
  160. PROCEDURE TextColor(fg, bg : Colors);
  161. VAR
  162. dumstr : ARRAY [0..8] OF CHAR;
  163. BEGIN
  164. ForeGround := fg;
  165. BackGround := bg;
  166. ColorToMonoAttrs(fg, bg, TextModeNow);
  167. MakeAttrByte();
  168. END TextColor;
  169. PROCEDURE ReverseColors();
  170. (* Switches fore and back ground colors, like reverse video *)
  171. VAR
  172. SwitchColor : Colors;
  173. BEGIN
  174. SwitchColor := ForeGround;
  175. ForeGround := BackGround;
  176. BackGround := SwitchColor;
  177. MakeAttrByte();
  178. END ReverseColors;
  179. PROCEDURE SetAttribOrColor(forec, backc: Colors; atrib: TextAttribute);
  180. (* depending on current screen mode, sets color or mono attribute *)
  181. BEGIN
  182. IF UsingColor THEN
  183. IF (forec<>ForeGround) OR (backc<>BackGround) THEN
  184. TextColor( forec, backc);
  185. END;
  186. ELSE
  187. IF NOT (atrib IN TextModeNow) THEN
  188. TextModeNow := AttributeSet{};
  189. ForeGround := lightgrey;
  190. BackGround := black;
  191. IF VideoMethod=ANSI THEN
  192. TextMode( plain); (* resets to plain first *)
  193. TextMode( atrib);
  194. ELSE
  195. INCL(TextModeNow, atrib);
  196. MonoAttrsToColor(TextModeNow, ForeGround, BackGround);
  197. MakeAttrByte();
  198. END;
  199. END;
  200. END;
  201. END SetAttribOrColor;
  202. PROCEDURE TextMode(attribute : TextAttribute);
  203. PROCEDURE UpdateNeeded(attribute : TextAttribute) : BOOLEAN;
  204. VAR
  205. answer : BOOLEAN;
  206. BEGIN
  207. answer := FALSE;
  208. IF attribute=plain THEN
  209. IF TextModeNow#AttributeSet{plain} THEN
  210. answer := TRUE;
  211. END;
  212. TextModeNow := AttributeSet{plain};
  213. ELSIF NOT (attribute IN TextModeNow) THEN
  214. INCL(TextModeNow, attribute);
  215. EXCL(TextModeNow, plain);
  216. RETURN (TRUE);
  217. END;
  218. RETURN (answer);
  219. END UpdateNeeded;
  220. VAR
  221. fground, bground : CARDINAL;
  222. BEGIN
  223. IF UpdateNeeded(attribute) THEN
  224. MonoAttrsToColor(TextModeNow, ForeGround, BackGround);
  225. MakeAttrByte();
  226. END;
  227. END TextMode;
  228. PROCEDURE ScreenMode(TheMode : ScreenModeType);
  229. VAR
  230. dumstr : ARRAY [0..8] OF CHAR;
  231. temp, ModeData: FAPI.VIOMODEINFO;
  232. BEGIN
  233. IF TheMode # ScreenModeNow THEN
  234. CASE TheMode OF
  235. BW40x25:
  236. (* BIOS MODE 0 *)
  237. ModeData.cb := 12;
  238. ModeData.fbType := FAPI.UCHAR(FAPI.VGMT_DISABLEBURST);
  239. (* mono *)
  240. ModeData.hres := 320;
  241. ModeData.vres := 200;
  242. ModeData.row := 25;
  243. ModeData.col := 40;
  244. SetBits (ModeData.color, 0, 7, 1);
  245. (* 2 colors = B/w ???*)
  246. | color40x25:
  247. (* BIOS MODE 1 *)
  248. ModeData.cb := 12;
  249. ModeData.row :=25 ;
  250. ModeData.col := 40;
  251. ModeData.fbType := FAPI.VGMT_OTHER;
  252. (* color ??? *)
  253. ModeData.hres := 320;
  254. ModeData.vres := 200;
  255. SetBits (ModeData.color, 0, 7, 4);
  256. (* 16 colors *)
  257. | BW80x25:
  258. (* BIOS MODE 2 *)
  259. ModeData.cb := 12;
  260. ModeData.row := 25;
  261. ModeData.col := 80;
  262. ModeData.fbType := FAPI.VGMT_DISABLEBURST;
  263. ModeData.hres := 640;
  264. ModeData.vres := 200;
  265. SetBits (ModeData.color, 0, 7, 1);
  266. (* 2 colors = B/w ???*)
  267. | color80x25:
  268. (* BIOS MODE 3 *)
  269. ModeData.cb := 12;
  270. ModeData.row :=25 ;
  271. ModeData.col :=80 ;
  272. ModeData.fbType := FAPI.VGMT_OTHER;
  273. (* ModeData.color *)
  274. ModeData.hres := 640;
  275. ModeData.vres := 200;
  276. SetBits (ModeData.color, 0, 7, 4);
  277. (* 16 colors *)
  278. | color320:
  279. (* BIOS MODE 4 *)
  280. ModeData.cb := 12;
  281. ModeData.row := 0 ;
  282. ModeData.col := 0 ;
  283. ModeData.fbType := FAPI.VGMT_GRAPHICS;
  284. (* color graphics *)
  285. ModeData.hres := 320;
  286. ModeData.vres := 200;
  287. SetBits (ModeData.color, 0, 7, 2);
  288. (* 4 colors *)
  289. | BW320:
  290. (* BIOS MODE 5 *)
  291. ModeData.cb := 12;
  292. ModeData.row := 0;
  293. ModeData.col :=0 ;
  294. ModeData.fbType := FAPI.VGMT_DISABLEBURST + FAPI.VGMT_GRAPHICS;
  295. ModeData.hres := 320;
  296. ModeData.vres := 200;
  297. SetBits (ModeData.color, 0, 7, 1);
  298. (* 2 colors = B/w ???*)
  299. | BW640:
  300. (* BIOS MODE 6 *)
  301. ModeData.cb := 12;
  302. ModeData.row := 0;
  303. ModeData.col :=0 ;
  304. ModeData.fbType := FAPI.VGMT_DISABLEBURST + FAPI.VGMT_GRAPHICS;
  305. ModeData.hres := 640;
  306. ModeData.vres := 200;
  307. SetBits (ModeData.color, 0, 7, 1);
  308. (* 2 colors = B/w ???*)
  309. | Mono:
  310. (* BIOS MODE 7 *)
  311. ModeData.row := 25;
  312. ModeData.cb := 12;
  313. ModeData.col :=80 ;
  314. ModeData.fbType := FAPI.VGMT_DISABLEBURST;
  315. (* mono *)
  316. ModeData.hres := 720;
  317. ModeData.vres := 350;
  318. SetBits (ModeData.color, 0, 7, 1);
  319. (* 2 colors = B/w ???*)
  320. | PCjr160:
  321. (* BIOS MODE 8 not supported *)
  322. ErrorManager.WARN("VioSetMode - not supported ");
  323. | PCjr320:
  324. (* BIOS MODE 9 - NOT SUPPORTED *)
  325. ErrorManager.WARN("VioSetMode - not supported ");
  326. | PCjr640:
  327. (* BIOS MODE Ah - NOT SUPPORTS *)
  328. ErrorManager.WARN("VioSetMode - not supported ");
  329. | EGA11:
  330. (* BIOS MODE B hex - not supported *)
  331. ErrorManager.WARN("VioSetMode - not supported ");
  332. | EGA12:
  333. (* BIOS MODE c hex *);
  334. | EGA320:
  335. (* BIOS MODE d hex *)
  336. ModeData.cb := 12;
  337. ModeData.row := 0;
  338. ModeData.col := 0;
  339. ModeData.fbType := FAPI.VGMT_GRAPHICS + FAPI.VGMT_OTHER;
  340. (*??*)
  341. ModeData.hres := 320;
  342. ModeData.vres := 200;
  343. SetBits (ModeData.color, 0, 7, 4);
  344. (* 16 colors *)
  345. | EGA640:
  346. (* BIOS MODE E hex *)
  347. ModeData.cb := 12;
  348. ModeData.row := 0;
  349. ModeData.col :=0 ;
  350. ModeData.fbType := FAPI.VGMT_GRAPHICS + FAPI.VGMT_OTHER;
  351. ModeData.hres := 640;
  352. ModeData.vres := 200;
  353. SetBits (ModeData.color, 0, 7, 2);
  354. (* 4 colors = *)
  355. | EGAMono:
  356. (* BIOS MODE F hex *)
  357. ModeData.cb := 12;
  358. ModeData.row := 0;
  359. ModeData.col :=0 ;
  360. ModeData.fbType := FAPI.VGMT_GRAPHICS;
  361. ModeData.hres := 640;
  362. ModeData.vres := 350;
  363. SetBits (ModeData.color, 0, 7, 1);
  364. (* 2 colors = B/w ???*)
  365. | EGA64color:
  366. (* BIOS MODE 10 hex *)
  367. ModeData.cb := 12;
  368. ModeData.row := 0;
  369. ModeData.col :=0 ;
  370. ModeData.fbType := FAPI.VGMT_GRAPHICS + FAPI.VGMT_OTHER;
  371. ModeData.hres := 640;
  372. ModeData.vres := 350;
  373. SetBits (ModeData.color, 0, 7, 4);
  374. (* 16 colors *)
  375. ELSE
  376. ErrorManager.WARN ("Screen mode not supported");
  377. END; (* CASE *)
  378. ModeData.cb := SYSTEM.TSIZE(FAPI.VIOMODEINFO);
  379. IF FAPI.VIOSETMODE(SYSTEM.ADR(ModeData), 0) #0 THEN
  380. ErrorManager.WARN("VioSetMode error");
  381. END;
  382. MaxCol := ModeData.col;
  383. MaxRow := ModeData.row;
  384. ScreenModeNow := TheMode;
  385. UsingColor := NOT ( (TheMode = BW40x25) OR (TheMode = BW80x25)
  386. OR (TheMode = BW320) OR (TheMode = BW640) OR
  387. (TheMode = Mono) OR (TheMode = EGAMono));
  388. END;
  389. END ScreenMode;
  390. PROCEDURE coord(ColNum, RowNum : CARDINAL) : CARDINAL;
  391. (*Makes it easier to work with the routines below, which
  392. treat the screen as a linear sequence OF 4000 bytes.*)
  393. BEGIN
  394. RETURN (Numbers.Between(0, RowNum-1, MaxRow-1) * MaxCol +
  395. Numbers.Between(1, ColNum, MaxCol));
  396. END coord;
  397. PROCEDURE RealVideoMode() : ScreenModeType;
  398. (* This is incomplete, I know, but its only purpose is
  399. compatibility with old code. New code ought
  400. to get this information in some more rational way. *)
  401. VAR
  402. ModeData: FAPI.VIOMODEINFO;
  403. ErrorNum: CARDINAL;
  404. BEGIN
  405. ModeData.cb := SYSTEM.TSIZE(FAPI.VIOMODEINFO);
  406. ErrorNum := FAPI.VIOGETMODE(SYSTEM.ADR(ModeData), 0);
  407. IF ErrorNum # 0 THEN
  408. ErrorManager.WarnNumber("VioGetMode Error", ErrorNum);
  409. END;
  410. MaxCol := ModeData.col;
  411. MaxRow := ModeData.row +1;
  412. (* Adjust to Repertoire's system of
  413. numbering from 1 instead of 0 *)
  414. IF (CARDINAL(LowLevel.BitwiseAnd(FAPI.VGMT_OTHER,
  415. ORD(ModeData.fbType))) # 0) THEN
  416. IF (CARDINAL(LowLevel.BitwiseAnd(FAPI.VGMT_GRAPHICS,
  417. ORD(ModeData.fbType))) # 0) THEN
  418. (* We're in a graphics mode. *)
  419. IF CARDINAL(LowLevel.BitwiseAnd(FAPI.VGMT_DISABLEBURST,
  420. ORD(ModeData.fbType))) # 0 THEN
  421. (* We're in a monochrome graphics mode. *)
  422. IF ModeData.hres = 320 THEN
  423. RETURN BW320;
  424. ELSE
  425. RETURN BW640;
  426. END;
  427. ELSE
  428. (* We're in a color graphics mode. *)
  429. IF ModeData.hres = 320 THEN
  430. RETURN EGA320;
  431. ELSE
  432. RETURN EGA640;
  433. END;
  434. END;
  435. ELSE
  436. (* We're in a text mode. *)
  437. IF CARDINAL(LowLevel.BitwiseAnd(FAPI.VGMT_DISABLEBURST,
  438. ORD(ModeData.fbType))) # 0 THEN
  439. (* We're in a monochrome text mode. *)
  440. IF (ModeData.row =25) AND (ModeData.col = 40) THEN
  441. RETURN BW40x25;
  442. ELSE
  443. RETURN BW80x25;
  444. END;
  445. ELSE
  446. (* We're in a color text mode. *)
  447. IF (ModeData.row =25) AND (ModeData.col = 40) THEN
  448. RETURN color40x25;
  449. ELSE
  450. RETURN color80x25;
  451. END;
  452. END;
  453. END;
  454. ELSE
  455. RETURN Mono;
  456. END;
  457. RETURN color80x25;
  458. END RealVideoMode;
  459. PROCEDURE WriteAt(ColNum, RowNum : CARDINAL; TheStr : ARRAY OF CHAR);
  460. BEGIN
  461. AdrWriteAt( ColNum, RowNum, SYSTEM.ADR(TheStr),
  462. M2Strings.Length(TheStr));
  463. END WriteAt;
  464. PROCEDURE AdrWriteAt(ColNum, RowNum : CARDINAL; TheAdr:
  465. SYSTEM.ADDRESS; TheSize: CARDINAL );
  466. BEGIN
  467. IF TheSize = 0 THEN
  468. RETURN;
  469. END;
  470. ColNum := Numbers.Between( 1, ColNum, MaxCol );
  471. RowNum := Numbers.Between( 1, RowNum, MaxRow );
  472. TheSize := Numbers.Min( TheSize, (MaxCol - ColNum) + 1 );
  473. NominalCol := ColNum + TheSize;
  474. NominalRow := RowNum;
  475. IF FAPI.VIOWRTCHARSTRATT( TheAdr, TheSize,
  476. RowNum-1, ColNum-1, SYSTEM.ADR(TextAttrByte), 0 ) # 0 THEN
  477. ErrorManager.WARN("VioWrtCharStrAtt error");
  478. END;
  479. END AdrWriteAt;
  480. PROCEDURE SetCursorHeight(lines : CARDINAL);
  481. VAR
  482. CursorData: FAPI.VIOCURSORINFO;
  483. BEGIN
  484. ReturnCode := FAPI.VIOGETCURTYPE(SYSTEM.ADR(CursorData), 0);
  485. IF ReturnCode # 0 THEN
  486. ErrorManager.WarnNumber("VioGetCurType error", ReturnCode);
  487. END;
  488. (* We set CursorWidth to 0, which means default width, because
  489. the API.LIB version of VIOGETCURTYPE doesn't seem to be
  490. returning values that can be passed on to VIOSETCURTYPE. *)
  491. CursorData.cx := 0;
  492. (*
  493. CursorData.CursorEndLine := -100;
  494. OS/2 lets us specify percentages of the character cell by
  495. using negative numbers. This means that the end line is
  496. always 100% of the way down from the top of the character
  497. cell.
  498. Unfortunately, API.LIB doesn't support this, so we start by getting
  499. CursorData, and we try not to change it much.
  500. *)
  501. IF lines <= 0 THEN
  502. CursorData.attr := 65535;
  503. ELSE
  504. CursorData.attr := 1;
  505. IF lines >= 10 THEN
  506. CursorData.yStart := 0;
  507. ELSE
  508. CursorData.yStart := CursorData.cEnd - lines;
  509. END;
  510. END;
  511. ReturnCode := FAPI.VIOSETCURTYPE(SYSTEM.ADR(CursorData), 0);
  512. IF ReturnCode # 0 THEN
  513. ErrorManager.WarnNumber("VioSetCurType error", ReturnCode);
  514. END;
  515. END SetCursorHeight;
  516. PROCEDURE ClearPart(col1, row1, col2, row2 : CARDINAL);
  517. VAR
  518. BackGroundCell: VideoMemChar;
  519. BEGIN
  520. row2 := Numbers.Min( row2, MaxRow );
  521. col2 := Numbers.Min( col2, MaxCol );
  522. col1 := Numbers.Between( 1, col1, col2 );
  523. row1 := Numbers.Between( 1, row1, row2 );
  524. BackGroundCell.attr :=TextAttrByte;
  525. BackGroundCell.ch := ' ';
  526. IF FAPI.VIOSCROLLUP( row1-1, col1-1, row2-1, col2-1, 65535,
  527. SYSTEM.ADR(BackGroundCell), 0) # 0 THEN
  528. ErrorManager.WARN("VioScrollUp error");
  529. END;
  530. END ClearPart;
  531. PROCEDURE ClearScreen();
  532. (*Clears the screen and sends the cursor to the top left corner.*)
  533. BEGIN
  534. ClearPart(1, 1, MaxCol, MaxRow);
  535. END ClearScreen;
  536. PROCEDURE SetVideoVars();
  537. BEGIN
  538. ScreenModeNow := RealVideoMode();
  539. IF ScreenModeNow >= color320 THEN
  540. VideoMethod := ROM;
  541. END;
  542. IF M2Strings.CompareStr( setting, 'DMAWAIT') = 0 THEN
  543. NoSnow := TRUE;
  544. ELSIF M2Strings.CompareStr( setting, 'DMA') = 0 THEN
  545. NoSnow := FALSE;
  546. ELSE
  547. NoSnow := ScreenModeNow < Mono;
  548. END;
  549. UsingColor := NOT ( (ScreenModeNow = BW40x25) OR
  550. (ScreenModeNow = BW80x25) OR
  551. (ScreenModeNow = BW320) OR
  552. (ScreenModeNow = BW640) OR
  553. (ScreenModeNow = Mono) OR
  554. (ScreenModeNow = EGAMono));
  555. END SetVideoVars;
  556. PROCEDURE SetVideoMethod( NewMethod: VidMethodType);
  557. BEGIN
  558. IF (VideoMethod = ANSI) AND (NewMethod # ANSI) THEN
  559. SetVideoVars();
  560. END;
  561. VideoMethod := NewMethod;
  562. END SetVideoMethod;
  563. PROCEDURE Init();
  564. BEGIN
  565. IF Initialized THEN
  566. RETURN;
  567. ELSE
  568. Initialized := TRUE;
  569. END;
  570. (*EntryDiag:
  571. Diagnostics.Init();
  572. :EntryDiag*)
  573. ErrorManager.Init();
  574. LowLevel.Init();
  575. M2Strings.Init();
  576. Numbers.Init();
  577. StrConv.Init();
  578. StrEdit.Init();
  579. StringIO.Init();
  580. VStorage.Init();
  581. (*EntryDiag:
  582. Diagnostics.diagS( 'Entering SmartScreen', '' );
  583. :EntryDiag*)
  584. VStorage.NilHandle( NilValue );
  585. VideoMethod := DMA;
  586. ForeGround := lightgrey;
  587. BackGround := black;
  588. TextModeNow := AttributeSet{ plain};
  589. MakeAttrByte();
  590. MaxCol := 80;
  591. MaxRow := 25;
  592. (*
  593. ScreenModeNow :=RealVideoMode();
  594. *)
  595. SetVideoVars();
  596. (*EntryDiag:
  597. Diagnostics.diagS( 'Exiting SmartScreen', '' );
  598. :EntryDiag*)
  599. END Init;
  600. BEGIN
  601. Initialized := FALSE;
  602. Init();
  603. END SmartScreen.