GRFXDEMO.MOD 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700
  1. MODULE GrfxDemo;
  2. (*
  3. * Graphix
  4. * Release 3.7
  5. * (c) Copyright 1986-1992 PMI
  6. * Green Bay, Wisconsin
  7. * (414) 468-6040
  8. * All rights reserved
  9. *
  10. *)
  11. FROM Storage IMPORT ALLOCATE,DEALLOCATE;
  12. IMPORT GrConst;
  13. IMPORT Meta;
  14. IMPORT GrFonts;
  15. IMPORT GrPorts;
  16. IMPORT GrQry;
  17. IMPORT Terminal;
  18. IMPORT Strings;
  19. IMPORT Storage;
  20. IMPORT SYSTEM;
  21. VAR
  22. FontPtr: SYSTEM.ADDRESS;
  23. CommPort,GrafixCard:INTEGER;
  24. BufSize: CARDINAL;
  25. PROCEDURE Conclude(); FORWARD;
  26. PROCEDURE WaitForKey();
  27. VAR
  28. LastKey : CHAR;
  29. BEGIN
  30. Terminal.Read(LastKey) ;
  31. IF CAP(LastKey) = 'Q' THEN
  32. Conclude();
  33. END;
  34. END WaitForKey;
  35. PROCEDURE ClearGraphicsScreen();
  36. VAR
  37. scrnR : GrConst.rect;
  38. BEGIN
  39. Meta.ScreenRect(scrnR);
  40. (* Get the screen limits *)
  41. Meta.EraseRect(scrnR);
  42. (* Erase the screen *)
  43. END ClearGraphicsScreen;
  44. (*
  45. PROCEDURE FileLoad( FileName: ARRAY OF CHAR;
  46. VAR DataAreaAdr: SYSTEM.ADDRESS; VAR BufSize:
  47. CARDINAL ): Terminal.ErrorMessage;
  48. VAR
  49. Handle: CARDINAL;
  50. name:ARRAY[0..79] OF CHAR;
  51. Err: Terminal.ErrorMessage;
  52. BEGIN
  53. M2Strings.Assign(FileName,name);
  54. Err:=HandleIO.FindFile(Handle,name, 'PATH');
  55. IF Err= Terminal.NoError THEN
  56. BufSize:=VAL(CARDINAL,HandleIO.FileLength(Handle));
  57. Storage.ALLOCATE( DataAreaAdr, BufSize );
  58. Err:=HandleIO.BlockRead(Handle, DataAreaAdr, BufSize);
  59. IF Err # Terminal.NoError THEN
  60. Err:=HandleIO.CloseHandle(Handle);
  61. RETURN Err;
  62. END;
  63. ELSE
  64. Conclude();
  65. END;
  66. RETURN Terminal.NoError;
  67. END FileLoad;
  68. *)
  69. PROCEDURE Explain( msg: ARRAY OF CHAR );
  70. BEGIN
  71. ClearGraphicsScreen;
  72. Meta.MoveTo( 20, 170 );
  73. Meta.DrawString( msg );
  74. Meta.MoveTo( 20, 190 );
  75. Meta.DrawString( 'Press any key to continue.');
  76. WaitForKey();
  77. END Explain;
  78. PROCEDURE Sample01();
  79. (* MoveTo/LineTo Example *)
  80. BEGIN
  81. Explain( 'First we draw a simple line.' );
  82. Meta.MoveTo(50,50);
  83. (* draw a line from *)
  84. Meta.LineTo(200,200);
  85. (* (50,50) to (200,200). *)
  86. WaitForKey();
  87. END Sample01;
  88. PROCEDURE Sample02();
  89. (* MoveTo/LineTo Example *)
  90. VAR
  91. tR : GrConst.rect;
  92. tmpImage: ADDRESS;
  93. imPara, imBytes : CARDINAL;
  94. BEGIN
  95. Explain(
  96. 'MetaWINDOW can read an image from the screen and display it elsewhere.');
  97. ClearGraphicsScreen();
  98. Meta.MoveTo(50,50);
  99. Meta.DrawString('*Image*');
  100. Meta.SetRect(tR, 45,40,115,55);
  101. Meta.FrameRect(tR);
  102. imPara := Meta.ImagePara(tR);
  103. IF (imPara > 2047) THEN
  104. Terminal.WriteString('Image too large');
  105. RETURN;
  106. END;
  107. imBytes := imPara*16;
  108. ALLOCATE(tmpImage,imBytes);
  109. Meta.ReadImage (tR, tmpImage);
  110. (* Read the image *)
  111. Meta.OffsetRect(tR,48,50);
  112. (* Write it back at *)
  113. Meta.WriteImage(tR, tmpImage);
  114. (* a different location. *)
  115. Meta.MoveTo( 20, 190);
  116. Meta.DrawString( 'Press any key to continue');
  117. DEALLOCATE(tmpImage,imBytes);
  118. WaitForKey();
  119. END Sample02;
  120. PROCEDURE Sample03();
  121. PROCEDURE LoadAndWrite( FileName: ARRAY OF CHAR; x, y: CARDINAL;
  122. message: ARRAY OF CHAR );
  123. VAR
  124. BufSize: CARDINAL;
  125. BEGIN
  126. (* pfontrec := NIL;
  127. Terminal.PrintMessage( FileLoad( FileName,
  128. pfontrec,
  129. BufSize ) );
  130. Meta.SetFont( pfontrec ); *)
  131. BufSize:=Meta.LoadFont(FileName);
  132. Meta.MoveTo( x, y );
  133. Meta.DrawString(message);
  134. END LoadAndWrite;
  135. BEGIN
  136. Explain( 'MetaWINDOW supports a wide variety of fonts.' );
  137. ClearGraphicsScreen();
  138. Meta.TextSize(14,14);
  139. (* Set text size for stroked font, ROMANSIM.FNT *)
  140. Meta.TextFace(GrConst.cProportional);
  141. LoadAndWrite( 'SYSTEM01.FNT', 10, 50, 'Text output using SYSTEM01.FNT' );
  142. LoadAndWrite( 'SYSTEM08.FNT', 10, 60, 'Text output using SYSTEM08.FNT' );
  143. LoadAndWrite( 'SYSTEM11.FNT', 10, 80, 'SYSTEM11.FNT' );
  144. LoadAndWrite( 'SYSTEM16.FNT', 10,100, 'Text output using SYSTEM16.FNT' );
  145. LoadAndWrite( 'SYSTEM24.FNT', 10,130, 'Text output using SYSTEM24.FNT' );
  146. LoadAndWrite( 'SYSTEM32.FNT', 10,170, 'Text output using SYSTEM32.FNT' );
  147. LoadAndWrite( 'SYSTEM35.FNT', 10,210, 'SYSTEM35.FNT' );
  148. LoadAndWrite( 'SYSTEM48.FNT', 10,260, 'System48.Fnt' );
  149. LoadAndWrite( 'SYSTEM72.FNT', 10,320, 'System72.Fnt' );
  150. LoadAndWrite( 'ROMANSIM.FNT', 300,100, 'Text output using ROMANSIM.FNT' );
  151. LoadAndWrite( 'SYSTEM16.FNT', 300,320, 'Press any key to continue.' );
  152. WaitForKey();
  153. END Sample03;
  154. PROCEDURE Sample05();
  155. VAR
  156. SrcBitMap(*, DstBitMap*): GrPorts.adsBMap;
  157. (* pointer to default bitmap *)
  158. thePort: GrPorts.adsPort;
  159. (* pointer to default port *)
  160. dstR, srcR : GrConst.rect;
  161. BEGIN
  162. Explain( 'MetaWINDOW can even enlarge a graphic image.' );
  163. ClearGraphicsScreen();
  164. Meta.GetPort(thePort);
  165. (* Get default port address *)
  166. SrcBitMap := thePort^.portBMap;
  167. (* Get default bmap address *)
  168. Meta.MoveTo(50,50);
  169. Meta.DrawString('ZoomBits');
  170. Meta.SetRect(srcR, 45,40,115,55);
  171. Meta.FrameRect(srcR);
  172. Meta.SetRect(dstR,50,100,595,195);
  173. Meta.FrameRect(dstR);
  174. Meta.ZoomBits( SrcBitMap, SrcBitMap, srcR, dstR, dstR, 0 );
  175. Meta.MoveTo( 20, 220 );
  176. Meta.DrawString( 'Press any key to continue');
  177. WaitForKey();
  178. END Sample05;
  179. PROCEDURE Sample17();
  180. BEGIN
  181. Explain( "MetaWINDOW's fonts allow superscript and subscript." );
  182. Meta.MoveTo (75,50);
  183. Meta.DrawString('MetaWINDOW');
  184. Meta.MoveTo (Meta.QueryX(),Meta.QueryY()-5);
  185. Meta.DrawString('tm');
  186. (* superscript 'tm' *)
  187. WaitForKey();
  188. END Sample17;
  189. PROCEDURE Sample20();
  190. VAR
  191. i,J, ImPara, ImBytes : INTEGER;
  192. ImagePtr : ADDRESS;
  193. scrnR, tR : GrConst.rect;
  194. PROCEDURE OpenWindow(VAR R:GrConst.rect; Title:ARRAY OF CHAR);
  195. VAR
  196. LocalRect:GrConst.rect;
  197. BEGIN
  198. ImPara := Meta.ImagePara(R);
  199. IF (ImPara > 2047) THEN
  200. Meta.SetDisplay(GrConst.TextPg0);
  201. Terminal.WriteString('Image too large');
  202. Terminal.WriteLn;
  203. HALT;
  204. END;
  205. ImBytes := ImPara*16;
  206. IF NOT Storage.Available(ImBytes) THEN
  207. Meta.SetDisplay(GrConst.TextPg0);
  208. Terminal.WriteString('Insufficient memory');
  209. Terminal.WriteLn;
  210. HALT;
  211. END;
  212. Storage.ALLOCATE(ImagePtr,ImBytes);
  213. Meta.ReadImage(R,ImagePtr);
  214. (* Save the window area *)
  215. Meta.FillRect(R,1);
  216. (* Clear the window *)
  217. Meta.PenMode(GrConst.zNANDz);
  218. (* Outline the window *)
  219. Meta.FrameRect(R);
  220. Meta.SetRect(LocalRect, R.Xmin,R.Ymin,R.Xmax,R.Ymin+14);
  221. Meta.FillRect(LocalRect,0);
  222. (* Display title block *)
  223. Meta.MoveTo(LocalRect.Xmin+5,LocalRect.Ymin+10);
  224. Meta.DrawString(Title);
  225. END OpenWindow;
  226. PROCEDURE CloseWindow(VAR R:GrConst.rect);
  227. BEGIN
  228. Meta.RasterOp(GrConst.zREPz);
  229. Meta.WriteImage(R,ImagePtr);
  230. (* Restore the window area *)
  231. Storage.DEALLOCATE(ImagePtr,ImBytes);
  232. END CloseWindow;
  233. BEGIN
  234. Explain(
  235. 'MetaWINDOW makes it easy to create desktop-style applications.');
  236. Meta.ScreenRect(scrnR);
  237. (* Get the screen limits *)
  238. Meta.FillRect(scrnR,3);
  239. Meta.SetRect(tR, 75,75,250,150);
  240. i:=( Meta.FileLoad( 'SYSTEM08.FNT', FontPtr, BufSize ) );
  241. IF i#0 THEN Conclude(); RETURN
  242. END;
  243. Meta.SetFont( FontPtr );
  244. FOR J:=1 TO 3 DO
  245. Meta.MoveTo( 20, 190);
  246. Meta.DrawString( 'Press any key to show menu ');
  247. WaitForKey();
  248. OpenWindow (tR,'Menu Title');
  249. Meta.MoveTo( 20, 190);
  250. Meta.DrawString( 'Press any key to remove menu');
  251. WaitForKey();
  252. CloseWindow(tR);
  253. Meta.OffsetRect(tR, 150,20)
  254. END;
  255. Meta.MoveTo( 20, 190);
  256. Meta.DrawString( 'Press any key to continue ');
  257. WaitForKey();
  258. END Sample20;
  259. PROCEDURE Sample11();
  260. VAR
  261. X, Y, Button : INTEGER;
  262. scrnR : GrConst.rect;
  263. BEGIN
  264. ClearGraphicsScreen();
  265. Terminal.WriteString(' Mouse-A-Sketch without tracking: ');
  266. Terminal.WriteLn;
  267. Terminal.WriteString('- left mouse button draws lines,');
  268. Terminal.WriteLn;
  269. Terminal.WriteString('- right mouse button erases screen,');
  270. Terminal.WriteLn;
  271. Terminal.WriteString('- left & right together ends program.');
  272. Terminal.WriteLn;
  273. Terminal.WriteString(' (Press any key to start) ');
  274. Terminal.WriteLn;
  275. WaitForKey();
  276. Meta.InitMouse(CommPort);
  277. Meta.ScaleMouse(24,16);
  278. Meta.ScreenRect(scrnR);
  279. (* Get the screen limits *)
  280. Meta.EraseRect(scrnR);
  281. (* Erase the screen *)
  282. Meta.FrameRect(scrnR);
  283. X:=100;
  284. Y:=100;
  285. Button:=0;
  286. REPEAT
  287. REPEAT
  288. Meta.ReadMouse(X,Y,Button)
  289. UNTIL Button>=0;
  290. IF Button=GrConst.swLeft THEN Meta.LineTo(X,Y)
  291. (* Draw line *)
  292. ELSIF Button=GrConst.swRight THEN
  293. Meta.EraseRect(scrnR);
  294. Meta.FrameRect(scrnR)
  295. ELSE Meta.MoveTo (X,Y) END;
  296. UNTIL Button=(GrConst.swLeft+GrConst.swRight);
  297. Meta.StopMouse;
  298. END Sample11;
  299. PROCEDURE Sample19();
  300. VAR
  301. X, Y, XOld, YOld, Switch : INTEGER;
  302. scrnR : GrConst.rect;
  303. PROCEDURE DrawCursor (CX,CY:INTEGER);
  304. BEGIN
  305. Meta.RasterOp(GrConst.zXORz);
  306. Meta.MoveTo (scrnR.Xmin,CY);
  307. Meta.LineTo (scrnR.Xmax,CY);
  308. Meta.MoveTo (CX,scrnR.Ymin);
  309. Meta.LineTo (CX,scrnR.Ymax);
  310. END DrawCursor;
  311. BEGIN
  312. Meta.ScreenRect(scrnR);
  313. (* Get the screen limits *)
  314. Meta.EraseRect(scrnR);
  315. (* Erase the screen *)
  316. Meta.InitMouse(CommPort);
  317. X:=100; Y:=100; XOld:=100; YOld:=100;
  318. DrawCursor(X,Y);
  319. (* Put the cursor on the screen *)
  320. REPEAT
  321. REPEAT
  322. Meta.ReadMouse(X,Y,Switch);
  323. UNTIL Switch>=0;
  324. DrawCursor(XOld,YOld);
  325. (* erase old cursor *)
  326. DrawCursor(X,Y);
  327. (* draw cursor in new position*)
  328. XOld:=X;
  329. YOld:=Y;
  330. UNTIL Switch>0;
  331. (* until switch is pressed *)
  332. Meta.StopMouse;
  333. END Sample19;
  334. PROCEDURE Sample21();
  335. VAR
  336. X, Y, Level, Button : INTEGER;
  337. scrnR : GrConst.rect;
  338. BEGIN
  339. Meta.ScreenRect(scrnR);
  340. (* Get the screen limits *)
  341. Meta.EraseRect(scrnR);
  342. (* Erase the screen *)
  343. Terminal.WriteString(' Mouse-A-Sketch with Auto-Tracking');
  344. Terminal.WriteLn;
  345. Terminal.WriteString('- left mouse button draws lines,');
  346. Terminal.WriteLn;
  347. Terminal.WriteString('- right mouse button erases screen,');
  348. Terminal.WriteLn;
  349. Terminal.WriteString('- left & right together ends program.');
  350. Terminal.WriteLn;
  351. Terminal.WriteString(' (Press any key to start) ');
  352. Terminal.WriteLn;
  353. WaitForKey();
  354. Meta.InitMouse(CommPort);
  355. Meta.ScaleMouse(24,16);
  356. Meta.EraseRect(scrnR);
  357. (* Erase the screen *)
  358. Meta.FrameRect(scrnR);
  359. X:=100;
  360. Y:=100;
  361. Button:=0;
  362. Meta.TrackCursor(TRUE);
  363. Meta.ShowCursor;
  364. Meta.LimitMouse(scrnR.Xmin,scrnR.Ymin,scrnR.Xmax,scrnR.Ymax);
  365. (* Keep mouse on screen *)
  366. REPEAT
  367. REPEAT
  368. Meta.QueryCursor(X,Y,Level,Button);
  369. UNTIL Button>=0;
  370. IF Button=GrConst.swLeft THEN
  371. Meta.HideCursor;
  372. Meta.LineTo(X,Y);
  373. Meta.ShowCursor;
  374. ELSIF Button=GrConst.swRight THEN
  375. Meta.HideCursor;
  376. Meta.EraseRect(scrnR);
  377. Meta.FrameRect(scrnR);
  378. Meta.ShowCursor;
  379. ELSE Meta.MoveTo(X,Y); END;
  380. UNTIL Button=(GrConst.swLeft+GrConst.swRight);
  381. Meta.ProtectRect(scrnR);
  382. Meta.MoveTo(10,20);
  383. Meta.DrawString( ' AUTO-CURSOR TRACKING');
  384. Meta.MoveTo(10,35);
  385. Meta.DrawString( 'Notice how the cursor continues to track');
  386. Meta.MoveTo(10,50);
  387. Meta.DrawString( 'even while off computing or awaiting input.');
  388. Meta.MoveTo(10,65);
  389. Meta.DrawString( ' (Press any key to continue)');
  390. Meta.ProtectOff;
  391. WaitForKey();
  392. Meta.StopMouse;
  393. END Sample21;
  394. PROCEDURE Sample22;
  395. VAR
  396. X, XOld, Y, YOld, Button : INTEGER;
  397. scrnR : GrConst.rect;
  398. BEGIN
  399. Meta.InitMouse(CommPort);
  400. Meta.ScaleMouse(24,16);
  401. Meta.ScreenRect(scrnR);
  402. (* Get the screen limits *)
  403. Meta.EraseRect(scrnR);
  404. (* Erase the screen *)
  405. Meta.FrameRect(scrnR);
  406. Meta.PenMode(GrConst.zXORz);
  407. X:=100;
  408. Y:=100;
  409. XOld:=100;
  410. YOld:=100;
  411. Meta.MoveTo(100,100);
  412. Meta.LineTo(X,Y);
  413. Meta.LineTo(500,100);
  414. Meta.MoveCursor(X,Y);
  415. Meta.ShowCursor;
  416. REPEAT
  417. REPEAT
  418. Meta.ReadMouse(X,Y,Button);
  419. UNTIL Button>=0;
  420. Meta.HideCursor;
  421. Meta.MoveTo(100,100);
  422. Meta.LineTo(XOld,YOld);
  423. Meta.LineTo(500,100);
  424. Meta.MoveTo(100,100);
  425. Meta.LineTo(X,Y);
  426. Meta.LineTo(500,100);
  427. Meta.MoveCursor(X,Y);
  428. Meta.ShowCursor;
  429. XOld:=X; YOld:=Y;
  430. UNTIL Button=GrConst.swLeft;
  431. WaitForKey();
  432. Meta.StopMouse;
  433. END Sample22;
  434. PROCEDURE Hilbert();
  435. VAR
  436. penColr : CARDINAL;
  437. vR: GrConst.rect;
  438. x, y, x0, y0, h, h0, ox, oy, i : INTEGER;
  439. ch : CHAR;
  440. PROCEDURE Plt();
  441. BEGIN
  442. Meta.MoveTo(ox, oy);
  443. Meta.LineTo(x, y);
  444. penColr := (penColr+1) MOD 15;
  445. Meta.PenColor(penColr);
  446. ox := x;
  447. oy := y;
  448. END Plt;
  449. PROCEDURE b(i : INTEGER); FORWARD;
  450. PROCEDURE c(i : INTEGER); FORWARD;
  451. PROCEDURE d(i : INTEGER); FORWARD;
  452. PROCEDURE a(i : INTEGER);
  453. BEGIN
  454. IF i>0 THEN
  455. d(i-1);
  456. DEC(x, CARDINAL(h));
  457. Plt();
  458. a(i-1);
  459. DEC(y, CARDINAL(h));
  460. Plt();
  461. a(i-1);
  462. INC(x, CARDINAL(h));
  463. Plt();
  464. b(i-1);
  465. END;
  466. END a;
  467. PROCEDURE b(i : INTEGER);
  468. BEGIN
  469. IF i>0 THEN
  470. c(i-1);
  471. INC(y, CARDINAL(h));
  472. Plt();
  473. b(i-1);
  474. INC(x, CARDINAL(h));
  475. Plt();
  476. b(i-1);
  477. DEC(y, CARDINAL(h));
  478. Plt();
  479. a(i-1);
  480. END;
  481. END b;
  482. PROCEDURE c(i : INTEGER);
  483. BEGIN
  484. IF i>0 THEN
  485. b(i-1);
  486. INC(x, CARDINAL(h));
  487. Plt();
  488. c(i-1);
  489. INC(y, CARDINAL(h));
  490. Plt();
  491. c(i-1);
  492. DEC(x, CARDINAL(h));
  493. Plt();
  494. d(i-1);
  495. END;
  496. END c;
  497. PROCEDURE d(i : INTEGER);
  498. BEGIN
  499. IF i>0 THEN
  500. a(i-1);
  501. DEC(y, CARDINAL(h));
  502. Plt();
  503. d(i-1);
  504. DEC(x, CARDINAL(h));
  505. Plt();
  506. d(i-1);
  507. INC(y, CARDINAL(h));
  508. Plt();
  509. c(i-1);
  510. END;
  511. END d;
  512. BEGIN
  513. ClearGraphicsScreen();
  514. Meta.SetRect(vR, 0, 0, 256, 256);
  515. Meta.VirtualRect(vR);
  516. h0 := 256;
  517. i := 0;
  518. h := h0;
  519. x0 := h DIV 2;
  520. y0 := x0;
  521. REPEAT
  522. INC(i);
  523. h := h DIV 2;
  524. INC(x0, CARDINAL(h DIV 2));
  525. INC(y0, CARDINAL(h DIV 2));
  526. x := x0;
  527. y := y0;
  528. ox := x0;
  529. oy := y0;
  530. a(i);
  531. UNTIL (h<8);
  532. WaitForKey();
  533. END Hilbert;
  534. PROCEDURE Conclude();
  535. BEGIN
  536. Hilbert();
  537. Meta.SetDisplay(GrConst.TextPg0);
  538. (* Switch to alpha mode *)
  539. Meta.ClearText();
  540. (* Clear the text screen *)
  541. (*
  542. MetaErrStatus.WriteErrorStatus();
  543. *)
  544. Terminal.WriteLn;
  545. Terminal.WriteLn;
  546. Terminal.WriteString(
  547. 'The Modula-2 interface to MetaWINDOW is available exclusively from' );
  548. Terminal.WriteLn;
  549. Terminal.WriteLn;
  550. Terminal.WriteLn;
  551. Terminal.WriteString(' PMI');
  552. Terminal.WriteLn;
  553. Terminal.WriteString( ' 3279 North Nicolet Drive' );
  554. Terminal.WriteLn;
  555. Terminal.WriteString( ' Green Bay WI 54311' );
  556. Terminal.WriteLn;
  557. Terminal.WriteLn;
  558. Terminal.WriteLn;
  559. Terminal.WriteString( ' P.O. Box 8402' );
  560. Terminal.WriteLn;
  561. Terminal.WriteString( ' Green Bay WI 54308' );
  562. Terminal.WriteLn;
  563. Terminal.WriteLn;
  564. Terminal.WriteLn;
  565. Terminal.WriteString( ' tel: (414) 468-6040' );
  566. Terminal.WriteLn;
  567. Terminal.WriteString( ' fax: (414) 465-0464' );
  568. Terminal.WriteLn;
  569. Terminal.WriteLn;
  570. Terminal.WriteLn;
  571. WaitForKey();
  572. Meta.ClearText();
  573. HALT;
  574. END Conclude;
  575. VAR
  576. MouseFound: BOOLEAN;
  577. tmpc: INTEGER;
  578. i,argc: CARDINAL;
  579. BEGIN
  580. GrQry.GrQuery(GrafixCard, CommPort);
  581. i := Meta.InitGrafix(-GrafixCard);
  582. IF (i # 0) THEN
  583. (* Display reason for no go *)
  584. GrQry.GrInitErr(GrafixCard, CommPort, i);
  585. END;
  586. MouseFound := CommPort = GrConst.MsDriver;
  587. (* Have MetaWINDOW figure out what the Grphics card and mouse
  588. * driver are. Global GrQry.GrafixCard and GrQry.CommPort variables will
  589. * be updated as side-effects.
  590. *)
  591. IF GrafixCard=0 THEN
  592. (* MetaWINDOW not installed *)
  593. RETURN;
  594. END;
  595. Meta.SetDisplay(GrConst.GrafPg0);
  596. (* Switch to graphics page 0 *)
  597. tmpc:=Meta.LoadFont('SYSTEM16.FNT');
  598. (* Terminal.PrintMessage( FileLoad( 'SYSTEM16.FNT', FontPtr, BufSize ) );
  599. (* MetaWINDOW tries to load this font file by default, but it's
  600. not very smart about where to look for it. FileLoad is smarter,
  601. so we open it explicitly. *)
  602. Meta.SetFont( FontPtr );
  603. *)
  604. Explain(
  605. "A brief demonstration of MetaWINDOW graphics for JPI's TopSpeed Modula-2." );
  606. Sample01();
  607. Sample02();
  608. Sample03();
  609. Sample17();
  610. Sample05();
  611. Sample20();
  612. (*Rest of GrfxDemo requires a mouse.*)
  613. IF MouseFound THEN
  614. Explain(
  615. 'Remainder of demo requires a mouse. Press Q if mouse not installed.' );
  616. Sample11();
  617. Sample19();
  618. Sample21();
  619. Sample22();
  620. ELSE
  621. Explain( 'Remainder of demo requires a mouse. No mouse located.' );
  622. END;
  623. Conclude();
  624. END GrfxDemo.
  625.