]9GSXADDENPAS íMGSXCIRC PAS&¥òGSXFUNC PAS5"8!GSXINIT PASWb…GSXMODE CMDgv×WGSXMODE PASÝ&�ÿPROCEDURE Set_Writing_mode (Mode : INTEGER); BEGIN Contrl[1] := 32; { Op code for Set_Writing_Mode } Contrl[2] := 0; Contrl[4] := 1; { Number of elements in the Intin Array } Intin[1] := Mode; { Writing mode requested } Call_gsx END; { PROCEDURE Set_Writing_Mode } PROCEDURE Set_Plane_Mask (Mask : INTEGER); BEGIN Contrl[1] := 5; { Op code for Escape } Contrl[2] := 0; Contrl[4] := 0; Contrl[6] := 51; { Function ID for Set_Plane_Mask } Intin[1] := Mask; { Plane mask requested } Call_gsx END; { PROCEDURE Set_Plane_Mask } PROCEDURE Reverse_Video_On; BEGIN Contrl[1] := 5; { Op code for Escape } Contrl[2] := 0; Contrl[4] := 0; Contrl[6] := 13; { Function ID for Reverse_Video_On } Call_gsx END; { PROCEDURE Reverse_Video_On } PROCEDURE Reverse_Video_Off; BEGIN Contrl[1] := 5; { Op code for Escape } Contrl[2] := 0; Contrl[4] := 0; Contrl[6] := 14; { Function ID for Reverse_Video_Off } Call_gsx END; { PROCEDURE Reverse_Video_Off } PROCEDURE Direct_Cursor_Address (Row, Col : INTEGER); BEGIN Contrl[1] := 5; { Op code for Escape } Contrl[2] := 0; Contrl[4] := 0; Contrl[6] := 11; { Function ID for Direct_Cursor_Address } Intin[1] := Row; { Requested row number } Intin[2] := Col; { Requested column number } Call_gsx END; { PROCEDURE Direct_Cursor_Address } PROCEDURE Update_Workstation; BEGIN Contrl[1] := 4; { Op code for Update_Workstation } Contrl[2] := 0; Contrl[4] := 0; Call_gsx END; { PROCEDURE Update_Workstation } { These procedures calculate data necessary to present three- dimensional circles using homogenous coordinates. } { We need some global variables specific to these procedures. } VAR Display_scale : REAL; Table_init : BOOLEAN; PROCEDURE Screen_init; { This prepares data tables for screen display } BEGIN Display_scale := 1.58; { Scale factor for y coordinate screen display } Table_init := FALSE; { Signal that tables must be initialized } END; { PROCEDURE Screen_init } PROCEDURE Printer_init; { This prepares data tables for printer display } BEGIN Display_scale := 0.88; { Scale factor for y coordinate printer display } Table_init := FALSE; { Signal that tables must be initialized } END; { Procedure Printer_init } { The following procedures have been developed to demonstrate the calculations necessary to display true three-dimensional circles using GSX. But first we must define types and global variables for this. } CONST Rad = 57.296; Sides = 48; TYPE Circle_Table = RECORD x, y, z, w : REAL END; { RECORD } Display_Table = RECORD x, y, z, w : INTEGER END; { RECORD } Circle_Array = ARRAY[1..sides] of Circle_Table; Display_Array = ARRAY[1..sides] of Display_Table; VAR Circle_pt, Sized_circle : Circle_Array; Display_data : Display_Array; PROCEDURE Draw_circle (Center_x, Center_y, Radius : REAL; Fill_index, Interior_index : INTEGER); PROCEDURE Init_Circle_Table; { This is necessary because Turbo Pascal does not initialize variables. The record is set-up for three-dimensional homogenous coordinates. } VAR I : INTEGER; BEGIN FOR I := 1 to sides DO BEGIN WITH Circle_pt[I] DO BEGIN x := 0; y := 0; z := 0; w := 0 END; { WITH } END; { FOR } Table_init := TRUE END; { PROCEDURE Init_Circle_Table } PROCEDURE Calculate_Circle_Table; { This calculates the x, y coordinates of unit circle at origin. These points define a 48-sided polygon. } VAR I : INTEGER; Angle, Delta_angle, Theta : REAL; Testcos, Testsin : REAL; BEGIN Delta_angle := 7.5; Angle := 0; BEGIN Init_Circle_table; FOR I := 1 TO sides DO { Calculate unit circle based on origin } BEGIN Theta := Angle/Rad; WITH Circle_pt[I] DO BEGIN x := COS(Theta); y := SIN(Theta) END; { WITH } Angle := Angle + Delta_angle END { FOR } END; { IF..THEN } END; { PROCEDURE Calculate_circle_table } PROCEDURE Size_circle; { Calculates the x, y coordinates of a circle of size Radius } VAR I : INTEGER; BEGIN Sized_circle := Circle_pt; { Make copy of table for further calculations. } FOR I := 1 TO sides DO BEGIN WITH Sized_circle[I] DO BEGIN x := x * Radius; y := Y * Radius END { WITH } END; { FOR } END; { PROCEDURE Size_circle } PROCEDURE Size_display; { Calculates the y coordinate for true size on display screen } VAR I : INTEGER; BEGIN FOR I := 1 TO sides DO Sized_circle[I].y := Sized_circle[I].y * Display_scale; END; { PROCEDURE Size_display } PROCEDURE Locate_circle; { Calculates specific x, y coordinates for given circle } VAR I : INTEGER; BEGIN FOR I := 1 TO sides DO BEGIN WITH Sized_circle[I] DO BEGIN x := x + Center_x; y := y + Center_y END { WITH } END; { FOR } { Now convert to integers to pass to line drawing procedure } FOR I := 1 TO sides DO BEGIN Display_data[I].x := ROUND (Sized_circle[I].x); Display_data[I].y := ROUND (Sized_circle[I].y); Display_data[I].z := ROUND (Sized_circle[I].z) END { FOR } END; { PROCEDURE Locate_circle } PROCEDURE Draw_circle; { Coordinates of polygon now passed to GSX Polyline procedure } VAR I, J : INTEGER; BEGIN I := 1; J := 1; REPEAT Ptsin[I] := Display_data[J].x; Ptsin[I+1] := Display_data[J].y; I := I + 2; J := J + 1; UNTIL J > sides; Contrl[1] := 9; { Op code for filled polygon } Contrl[2] := sides; Contrl[4] := 0; { Now this information is passed to GSX } Call_gsx END; { PROCEDURE Draw_circle } { PROCEDURE Draw_Filled_Circle Main Program } BEGIN Fill_interior (Fill_index); Fill_style (Interior_index); IF NOT Table_init THEN { Determine if table needs to be calculated } Calculate_circle_table; Size_circle; Size_display; Locate_circle; Draw_circle END; { PROCEDURE Draw_circle } { This ends the include file for drawing circle } { These are procedures that performs GSX functions that may be called from various user programs. It is designed to be used as an include file. } PROCEDURE Init_Work_Station (WS_number:INTEGER); { This opens the workstation whose number is passed to this procedure. See page 20, GSX manual. } BEGIN Contrl[1] := 1; Contrl[2] := 0; Contrl[4] := 10; Intin[1] := WS_number; { Calls device driver for the specified station } Intin[2] := 1; { The values set the default settings for the station } Intin[3] := 1; Intin[4] := 1; Intin[5] := 1; Intin[6] := 1; Intin[7] := 1; Intin[8] := 1; Intin[9] := 1; Intin[10] := 1; { Now that initialization has been done, call GSX. } Call_gsx; END; { PROCEDURE Init_Work_Station } { The following procedure returns from alpha to graphics mode } PROCEDURE Enter_graphics_mode; BEGIN Contrl[1] := 5; { Op code for escape } Contrl[2] := 0; Contrl[4] := 0; Contrl[6] := 2; { Function ID: enter graphics mode } { Now that initialization has been done, call GSX. } Call_gsx; END; { PROCEDURE Enter_graphics_mode } { The following procedure returns from graphics to alpha mode } PROCEDURE Exit_graphics_mode; BEGIN Contrl[1] := 5; { Op code for escape } Contrl[2] := 0; Contrl[4] := 0; Contrl[6] := 3; { Function ID: exit graphics mode } { Now that initialization has been done, Call GSX. } Call_gsx; END; { PROCEDURE Exit_graphics_mode } { The following procedure clears the screen in monitor mode. It dumps the graphics memory to the printer when the printer is the open work station. } PROCEDURE Clear_work_station; BEGIN Contrl[1] := 3; { Op code } Contrl[2] := 0; Contrl[4] := 0; { Now that initialization has been done, call GSX. } Call_gsx; END; { PROCEDURE Clear_work_station } { This procedure is called by others which allow definition of line types. } PROCEDURE Set_line_type (Line_type : INTEGER); BEGIN Contrl[1] := 15; { Op code } Contrl[2] := 0; Contrl[4] := 1; Intin[1] := Line_type; { Now that initialization has been done, call GSX. } Call_gsx; END; { PROCEDURE Set_line_type } { The following procedure controls the size and orientation of the string which will be sent by the Text procedure. } PROCEDURE Set_character_spec (Height : INTEGER; Angle : REAL); CONST Rad = 57.296; { For angle conversion } BEGIN { Set up height first } Contrl[1] := 12; { Op code } Contrl[2] := 1; Contrl[4] := 0; Ptsin[1] := 0; Ptsin[2] := Height; Call_gsx; { Now set up angle } Contrl[1] := 13; { Op code } Contrl[2] := 0; Contrl[4] := 3; Intin[1] := ROUND (Angle * 10); Intin[2] := ROUND (COS(Angle/Rad) * 100); Intin[3] := ROUND (SIN(Angle/Rad) * 100); Call_gsx END; { PROCEDURE Set_character_spec } { This procedure allows for changing of text font } PROCEDURE Set_text_font (Text_font : INTEGER); BEGIN Contrl[1] := 21; { Op code } Contrl[2] := 0; Contrl[4] := 1; Intin[1] := Text_font; Call_gsx END; { PROCEDURE Set_text_font} { The following procedure sends the text passed to it to the work station. } PROCEDURE Text (x,y : INTEGER; Text_string : Screenline); VAR I, Lens : INTEGER; BEGIN Lens := LENGTH(Text_string); { Set-up according to GSX convention } Contrl[1] := 8; { Op code } Contrl[2] := 1; Contrl[4] := Lens; Contrl[6] := 12; { Function ID } Ptsin[1] := x; Ptsin[2] := y; { Now prepare the string for GSX, see page 46, GSX manual. } FOR I := 1 to Lens DO Intin[I] := ORD(Text_string[I]); Call_gsx END; { PROCEDURE Text } { This procedure determines the interior fill style of a filled figure } PROCEDURE Fill_style (Style : INTEGER); BEGIN Contrl[1] := 24; { Op code } Contrl[2] := 0; Contrl[4] := 1; Intin[1] := Style; Call_gsx END; { PROCEDURE Fill_style } { This procedure determines the choices of interior styles } PROCEDURE Fill_interior (Style : INTEGER); BEGIN Contrl[1] := 23; { Op code } Contrl[2] := 0; Contrl[4] := 1; Intin[1] := Style; Call_gsx END; { PROCEDURE Fill_interior } { This ends the include file of GSX functions. } { These procedures call GSX from Turbo Pascal. Development begun March 29, 1984, by Dr. August E. Sapega. Essentially completed on March 2, 1984. Extended on April 7, 1984. } { The link up to GSX is accomplished in the calling procedures through the folling procedure. } PROCEDURE Call_gsx; { Before we can call GSX we must set-up the parameter block. This assigns addresses to parameter blocks as required by GSX. See page 12 of the GSX. Also see Turbo manual, page 176. } TYPE Address_Type = ^Pblock_Address; {This is necessary to use ADDR procedure} Pblock_Address = RECORD PB_Address : Address_Type { A 32-bit word ! } END; PBlockA = ARRAY [1..20] of PBlock_Address; { To hold 32-bit address } RegPack = RECORD { See Turbo addendum, page 4 } ax,bx,cx,dx,bp,si,di,ds,es,flags: INTEGER END; VAR RecPack : RegPack; PBlock : PBlockA; Dxp, Dsp : INTEGER; BEGIN { First we set-up the parameter block. These are 32-bit addresses as needed in the parameter block. } PBlock[1].PB_Address := ADDR(Contrl); PBlock[2].PB_Address := ADDR(Intin); PBlock[3].PB_Address := ADDR(Ptsin); PBlock[4].PB_Address := ADDR(Ptsout); PBlock[5].PB_Address := ADDR(Intout); { Now we set-up the d-registers, before calling the interrupt to GSX. See page 11, GSX manual. } Dxp := OFS(PBlock); { See page 176, Turbo manual. } Dsp := SEG(PBlock); RecPack.dx := Dxp; RecPack.ds := Dsp; { The following sets register CX, as required by GSX. See page 11, GSX manual. Decimal 1139 is equal to 0437H. } RecPack.cx := 1139; { Now we issue the interrupt to call GSX, using Intr procedure as supplied by Turbo Pascal. See page 5 Turbo Addendum. Decimal 224 is the interrupt required by GSX. } Intr(224, RecPack) END; { PROCEDURE Call_gsx } { This ends the Include file for calling GSX. } £££@éý$��Í«Copyright (C) 1984 BORLAND IncÓK Rainbow 100chelectedP=1h>1lÿ.Š' äùt C.Šè þÌuõøÃè* ÃSQRWVPœ2äPÿ¨�X^_ZY[Ã<€rè¦ëè†$ëÚU‹ì‡^Pœ.ŠC ÀtèÇÿëó�X‡^]ÃU‹ì‡^Pœ.ŠC ÀtéèÁÿëóCKuÃ. &2äÀÀÀP2ÀÔ XHu÷ëåènÿr!.‹ÐëØSP»ªèìÿ»¤èWÿr.‹¼èÀÿX[ÃSP»¶ëéSP»°ëâSPœ.€>Òt .ÆÒ»Êè´ÿ�X[ÃSPœ.€>Òÿtñ.ÆÒÿ»ÄëãSP»¾è’ÿX[ûmé‰ÿ»}éƒÿSQRWVPœ¾�¿Ó¹.‹.‰FFGGâô.Š . žÆè$.Š¡. ŸÂè»Óè¶þ.‹¢è!ÿ�X^_ZY[ÿÓ2íù.ö�ÿt.ˆÃOO»K2ä.ö·n Àt0.ˆGŠÄ Ûuèà d[YSŠÐŠñþÊþÎépÿ±²þèc2ä$±²ÿèU Àtõ÷Ít<ué\!2äÂXZP€úýs±è0÷ÍtLèºÿ Àt LèÀÿ<uLè¸ÿÃXZP±é XZP±é±èþ2䋨éaþé‘[_ë)PQ±ÓèØYX%Ã;Úu;ÁÃÁÚëå&‹E&‹]P ÃXÃ[S‰>YŒ[‹Á»r3Û$øè¼ÿ‹È‹ÓÇaUŒcÄ>UèÂÿt%è°ÿs ‰>aŒc&Ä=ëéèst +ÁÚ%ë6&Ä=ëTè`‹ÇŒÃè‹ÿ£Ö‰ØQR‹È‹Ó‹ÄŒÓƒëè_ÿ3ÀèhÿZYwé- 3À3ÛSP&ÿu&ÿ5‹ÇŒÃèTÿ‹øŽÃ&�&�E&�E&�EÄ6a&‰<&�DÃÄ6Y&‰<&�DÑ[_ë[S‹Á&‹ &‹U»r3Û$øèîþ£]‰_Ä>U‹ÇŒÃèêþsW&‹&‹]èÞþs‹øŽÃëî‹ñŽÂÿ6_ÿ6]&‰&‰\&�D&�D&‰ &‰U&‹E&‹]è<t&Ä=&‹E&‹]&‹ &‹Uë&‰U‰W‹ùŽÂ&‰&‰]‹È‹Ó¡]‹_&‰E&‰]£e‰gÇŒÃgèKþèVþuQ¡Ö‹ØèJþt1‹ñŽÂ&‹&‹\&‹L&‹T&‰&‰]¡e‹gè)þ&‰E&‰]3ÀÉ>ÖŒØW3Àü¹ó«_3ÀÃ3É3Ò3öÄ>Uèþtè&Ä=ëó‹ÄŒÓƒëèÓý3À+Ørè‹ÂÃ;ós‹óèÑý‹È‹ÓÃèÀÿ‹ÆÃ[¡Ö&‰‹Ø&‰Uÿã[&‹£Ö&‹E£Øÿã‰i‰kÓ[‰,.;W!tW.ƒ!u‹Ó±èTþÀtFŒÊ±3èH‹,¡i.‰G!º$ÓR±è2‹,±!è& Àu‹,.ÿG!Z�€ÿkuÖƒÃ$ÿãÿ6,² é‹UÍà]ÃÇ;¿¤¹%üó¤ÆÏÆÒÃ�¬ÖÞæ¬�SQRWVLÿ¦éÌú²ÿëWƉ ÇŠ »è_Ã2ÒŠè«{}U3À¹üó«Ã3ÀŽÀÿ6Rÿ6P&�&�÷Íu2Ò±èÊýÿ6ɸ»3PŽËË Ày÷ØÃPè[Ñè™÷ó’Ë*‹(SQŠÇŠûŠÝŠé2ÉÐØÑÛÑÙXÈXظébȸ6؉*‰(‹Ãà Ày÷ØÆ-C2íº'èºèèºdè ² èŠÈë2ÉþÁ+ÂsúÂþÅþÉuþÍt€Á0ˆCÃ3À€?$º uºCPŠèCþŠÈX€é0r%€ù rƒúu€é€ù r€ùsR÷âZr2íÁsÎë ƒút‹ÈÉÊ€ù-uCQè©ÿYr€ù-u÷ØøÃ[‹÷&Š 2íA+á‹üüó¤ÿã^.Š 2íA+á‹üüó¤ÿæZŠÁ‹Ü6Š2íÙC6‹?CC6ŽCC‹ô:ÈvŠÈ6ˆAüó¤‹ãÿâ[‹÷2í+áL‹ü6ˆ Güó¤ÿã[2í‹ô6Š2ä+Á‹þø Àt'y‹ç6Š Aüó¤ë6ˆ ùñAýó¤G‹çÿãè!é9èéBèéKèéTè é]èéf‹üƒÇ6Š 2íG‹÷ñ6Š2öF‹ÞÚŠÁŠâ;Êv‡Ê Ét üó¦u:àZY‹ãQÿâ�Ћü6Š2ö‹÷Fò6Š Ñr&6ˆ2í+ù‹çAVüó¤‹þ^NO‹ÊAýó¤G‹çÿ&вé�ÐèÂü‹ÈXènH‹ô6Š2ö‹üú+Ðvð;Ñvñ‹Ñýó¤ë3Ò‡÷6ˆ‹æÿ&Ð[‹ü6Š2äàDÿã�Ћü6Š2öG‹÷ò6Š 2íF‹ÞÙ3À+Ñr@ ÉtBüQWVó¦^_Yt@GJuñ3À‹ãÿ&Ј5£6[�:�<‰&>Œ@SÄ>:Wèøý¸P¡6HèBÿÄ>>èåýèõþÄ>:èÚýÿ66¸ÿè%ÿèàþŠ5èõýéWÿ£8[�6�:�<SÄ>:Wè¨ý¸P¡6HèòþÄ>:è•ý¡68P¸ÿèÜþè—þ±ÿè®ýÃ[XþÈu†Äÿã‰Ð²éÈ‹ô6Š\2ÿ6‹@Šà°6‰@Ã[â‹ô6Š:Át2äð‹ü2íù‘Aýó¤G‹çÿã äu Àtòé[Z‹÷ƒì ‹üQü ít2ÀªþÍuûŽÚó¤Y´ *å*át2ÀªþÌuûÿã[ƒì ‹ü¹3Àüó«ÿãèð6Ñ[XS*ÈrþÁŠáèÝŠÌ2í6ÐàsC°âôËôFF6‹| 6ŽD"ŠÕ2öò2íüó¤Â$[ŠÕ2ö2í‹ôòñ‹üƒÇ ;÷tNOýó¤G‹çÿã¸ë3Àè•ó§ŽÚt5 ÀÂ@3Àë¸è}Hu‡þ­ ¯uâø¸ë3ÀŽÚ ÀÂ@è_­ «âúŽÚ èQ­÷Ð#«âøŽÚ èA­#«âúŽÚ ‹Ü6‹G" ät3Àë è6"¸t@ ÀÂ"ŠØ2ÿ±ÓëƒÃÜŠÈ€á°ÒàËôƒÆ‹üƒÇ$ŒÚ¹üÃ;øu;Ñu@ ÀÃ;øu;ÑuH ÀÃZ¿àè‹÷R¿Ú[Y��E�EQÿã[Yÿuÿuÿ5Qÿã3À‰‰E‰EÃÇ�3ÀëñÇ‚!ÇE¢ÚÇEIÃÇ�úÇE3óÇE5ÃÇ€ÒÇE÷ÇEr1ˉ‹D‰E‹D‰EÃ.‹‰.‹G‰E.‹G‰EÃÑ%ëøÐUÑUÑUÃøÑ]Ñ]Ð]Ë‰ë ŠEDˆE‹ED‰E‹ED‰EÊE*DˆE‹ED‰E‹ED‰EÃöU÷U÷U€EƒUƒUËE;Du‹E;DuŠE:Dó€ë2Û€<uÀ=uè@ÿ0]ÃV‹×¿æè3ÿ‹÷‹úŠ}€ç€2\2߀M€€L€‹ÏŠ*tsöØ‹þè?ÿþþÈu÷‹ùöÀuèBÿs2è+ÿþu+ùë.èOÿs€÷€ècÿ‹E E Et öE€u èùþþ uóè‰þë€÷€0}^À=tS€<tKŠ襊Ȼæ‡þ‡ûè¢þ‡û‡þè[þˆ µ±CÐsèÔþè¿þþÉuòþÍuëŸöE€užè¡þþ ˆT0u€=uè'þÀ=túŠ*õèP¢æ»ë¹èâþrè«þõÐþÉuKþÍt ±è`þsåè•þøëçèUþrè¼þõ‡Þè!þ‡ÞŸöE€užè>þëþuùÃé”ÿr€v [é¿ý€s[ùÊuŠT2ò€M€€L€öÖ€æ€ÃŠE2DŠEyÐÐè€tètõÊ:u ÀtèQþà ÀuétýŠô¹�y÷ØxþÉÀyú öx€ä‰ ÇE‰EÊ,€wèHýë<(s2ä3Û3ÉùÑÙÑÛÐÜþÈuõ!M!] eÃV‡÷¿æè^ýèÊÿ‡÷èþ^Ã[&ÿu&ÿu&ÿ5ÿã[.ÿw.ÿw.ÿ7ƒÃÿã[XYZ_&‰&‰M&‰Uÿãè·üèËýrèÉüòé¥è¦üè¶ýëíèžüèCþëåè–ü€<tè�þëØ²éƒ‹Ü6€t6€w€Ã‹Ü6€gÃèmüèïþ¸tH ÀÃè^üèàþ¸uH ÀÃèOüèÑþ¸sH ÀÃè@üèÂþ¸vH ÀÃè1üè³þ¸wH ÀÃè"üè¤þ¸rH ÀÃèü‡÷¿àèrü‡÷éhÿè üèÖþèüÃèüèöþëô=Úÿ|=%~²éáP¿ÚèüXèiëØèžöº€° öÇ€u ÑáÑÓþÊþÈuñ2Ò€çXSQRÿàºÿÿë3ÒY[XXQ±�*Ër"€ùwþÁŠü€Ì€Óès Òt@x öÇ€t÷ØÃ3Àòéy¿Úè#þèŽûÿàèzû[XS¿Úèþè{û¿àëåècû€=tAöE€u?‹÷¿ìè­ûŠ€Ðø€ˆ,P¾Ú¿òè—û¾ìè+ýè>üþ ‡þè3üX8vPè~ûë܇þè*ûòé¿ìèû‹÷¿Úè6ûþ è üëèüú€=lra‹÷¿ìèûþ‡þŠ]€eè\ýˆ]r èÐüèÌýèqüöE€tè×ûþ è@ýœrèÈûþ è5ýr þ€M€è¼û€=lr»ð±è��r €=t€u€è£úÃX�9Ÿ?×`C�0’0gª?(2×n¶*ï8t Ð Ðzˆˆˆˆ~«ªªªªèeú€=töE€t²éGŠ,�˜PÆ�¾ì‡÷èƒúþ èÝû‡÷èbú‡÷è>û‡÷þè;û‡÷è ü»’±èþ¾Ú‡÷èeúþ ‡÷èûX¿òè«ü‡÷þè û¾ìè û€=gsèúèúÃ}Š�؉}颋.:}Žã8Žc~I’$I~ÍÌÌÌL«ªªª*èÉùöE€œ€e¾ì‡÷èú‡÷èªû€=ˆsNŠþËEºÿÿèíýP‡÷è=ü€=tþ ‡÷è˜ú»(±è�X¾ìÑès P‡÷è¸ù‡÷èûXr�t‡÷è�ùè[ûèqùÃX²éLm.`1pF,þåt6|‰„!wS<ÿÃ.zÒ}[•|%¸FXc~üïýu€Ò÷r1è'ù€=t¾3ÀöE€t@€eP‹÷¿ìè4ù‡÷è‚ûr‡÷è÷ú‡÷èXùX@@PÇ~JÇDŽéÇDÏèaûsèÊëZ»°P‡÷èBùƒÃ‡÷èGûXrƒÃ þÈuè‡÷èù¿òè%ùƒÃS‡÷è·ù¿ìèFú‡÷èËø‡÷è«ù‹÷¿Úè�úè|[‹÷¿ìèøø‡÷è’ùX¨tP‹÷¿ìè§øþ è{ùX¨t€M€èvøÃçÏÌTöô¢0 jÁ‘ €µžŠoD€‚,:Í€jÁ‘ �€!¢ÚI}袋.º}Žã8Žc~I’$I’~ÍÌÌÌL«ªªªª»M±‹÷¿ègø‡þSQè¡ùY[è¾é–ùQ‹÷¿øèLø‡þèXøƒÃëQ‹÷¿þèJøƒÃ‡þSèàø[¾øSèiù[YþÉuà‡÷èè÷‡÷éÈøSƒúr!‹Áègñ²öE€tþÂ*Âs2À< r° þÀŠÐŠðRè™ZŠÂþÀ öuÁyÆ ë < r° è [¾ öÅ€t°-èjŠé ötµ íyèYëèKþÍyù Òt°.èIþÅtè@þÊuõþÊxè,ë÷ öuðEè+°+ ÉyöÙ°-è°/þÀ€é sùè€Á:ŠÁë Š ÀtFë°0ˆCÀ=u» Ç00CC�ûuô¹ÃŠm€eŠ,€˜»M÷ëŠÄ<ÙuþÀŠÈöØQè@Y€=�sè«þÉ€M€°„*Æt è1÷ÐþÈu÷» ¾æŠEÐèÐèÐèÐè0ˆ€e‡þèÙö‡þèùöèööè ÷èðöC�ûuÓÃ2ä» Ø€?5ÆrþÈx Kþ€?:rÆëïÆ1ÆGþÁÊ€ù-uCQèYr€ù-u €=t€u€øÃè7ö3ÉŠè ïè‰r%ŠÐèr.ŠÂ2äSQ¾ì‡÷è›ø‡÷è÷Y[öÅ@tþÉë <.u öÅ@ùu€Í@CëÁè¥Ôh¶¿ÉìÅëx-ÐÍÎÂSÞùx9?ë+¨­ÅøÉ{Η@€=uÀM€V¾æ‡þèQõ‡þè€õè}õè�õ^s èuõþuùÀe€ðÿ¢2[èD _S€>ÏuA�ÿÆuŒÀŒÛ;ÃuÆÏ À>2tè$r &Æ&ˆEÃè[í&Æ&ÆEƒÇ ¾€¹üó¥Ã¹»2QS¾¹Šèúí.:t [YƒÃâçùÃFCâéYY€<:uó.ŠÃCONTRMKBDLSTAUXUSR°ÿë2À¢3[Sè…€>ÏuI&€}u#è@€>Ïu8&Æ€>3t&Æ&ÆEu"é€&Æ&€}u&Æ&€}u&Æ&ÆEÃè ¹€>3t±èl¹QèeYþÀuˆ.ÏÃWƒÇ¹ 3Àüó«_Ã[S&€}u.&öt°èþ€>Ïu&öuîë&öt±èþÀuÆÏ&ÆÃ�Ðÿ6ÐW¿Æè _Ã�Ðÿ6Љ>,Œ.&öt&€}u &ÆEé8ÆÏÃ�Ðÿ6ÐW¿Æè _Ã�Ðÿ6Љ>,Œ.&öuÆÏÊ.Ò€ý€rµÆÒ»‰Ó±è�ë< t4²<t<tþÊ<t< rå:ÍtáˆþÁCè4æë×þÉxÑKèPæ þÊtÇëîÆÃWÄ>,&€}_Ãèïÿtè¡<uÃWÄ>,è_ÃSQRW&ŠE<u‹ÓŠ<toÿÓëi<uèëP< rèÉåë< uè¹åXëN<uLÿ¦ëC<uLÿ®ë8<uLÿ²ë-±èŸu&Š]2ÿ&ŠA0<t&þEy&ÆE&€ ëÆÏ°_&ˆEZY[ÃWÄ>,è_Ã&ŠE€>Ït°Ãè:ÿèàÿ< t < t< t< uè1ÿëè» èÅÿ< t< t< t<tˆC�û'tè ÿëßèíþuèÿÆ» €?Ãr€?tÆÏ ùÃ[SèÊþu è|ÿ&ˆéÚþè×þ&ˆñÿë2É[SQè|ÿYtQèÄìYèÂÿr Éu&‰ë&ˆÃ[Sè\ÿtW¿Úèåú‹÷_èžÿr¹üó¥Ã[Sè{þè!ÿ< uè~þëô3Ûèÿ< t<tC&ˆþÉtèdþëèèDþuèZþ&ˆÃÄ>,&€}uéBäèáþ< t <t è:þëðèþu è0þ< ué)þ&€}t&ÆEÃWÄ>,è_À>ÏucSQRW2äP&ŠE<t<uÿ¨ëD<uÿªë:<uÿ¬ë0<uÿ°ë&X&€ &Š]2ÿ&ˆA0&þEy&ÆE±è«tÆÏ_ZY[Ã[ZSèÚé<v ‘I° èxÿâù‹Âéqÿ‘[XSQ»èúêXè¹é�ë+Ãv‘° èTÿâù‹Ë»ŠèHÿCâøÃ’[XSèÝïP‘»èøëÍ[YS¿Ä Éu¿Éè[ëè ÃTRUEFALSEègéZ‹Ü6*v ŠÈ2í° èÿþâù6Š2íC Ét 6ŠèíþCâ÷‹ãÿâ[.Š2íC Ét .ŠèÕþCâ÷ÿã° èËþ° éÆþ² ë²[S&ötèxý:Ât<u¸ ÀÃ3ÀÃ2Àékú°ÿë2À¢3‰0[Sèa€>ÏuCèIû€>Ïu9&Æ&ÆE&ÇE&ÇE-ŒÂ‹÷ƒÆ¹€>3u2Àè«¡0&9EtÆÏÃ&ÇE¡0&‰E¸ÿÿé‰[S&öt(±"è4&ÆE&ÇE-ŒÂ‹÷ƒÆ¹¸ÿè`±"èéûË÷[ZSÄ>,&‹E&;Es2À&‹Mè;&ÿEÃÆÏ Ë÷[ZSÄ>,&‹E&;E¸ÿr&ÿEtþÌ&‹Mè &ÿEÃÆÏ À>ÏtÃŽÚ‹Ð&öt&&€%û Òt&€}u öu�ù€s QRV±!èŸ^ZYuW Òt&€ &Š]2ÿ¸€+Ã;Ès&M3Àë&ÆE+È‘W�y0è7üó¤è1_‘&€}uQRV±"è;^ZYu&ÿE- ÉtéÿÃÆÏ ÃÆÏ à Òu‡÷Ã[S±"ètÆÏ Ã&€ &öt&&€%÷ë &öt&€%ûQŒÂ±3è�U0±èYè ÀÃ�U èÃWè±å_Ã[_S&;Ew3&‰E&‹U÷âƒÒŠÈ€á&ˆMÀÒŠÄŠâ&;E-t P±"è…ÿX&‰E-ÃÆÏÃ[&‹E&;E¸u@ Àÿã[&‹Eÿã[&‹Eÿã°ÿë2À¢3[Sè8€>Ïu-èïø€>Ïu#&Ʊ#è]ÿ&‹E-&ÇE-&‰E&ÇE€&ÇEÃ[S&öuÃéù±!ë±"ˆ4‘[XZ_S&öt=PQ±3è"ÿYZãQR±èÿŠ4èÿZY Àu$&ÿE-�€Iëß&‹E-&‰E&;Ev&‰EÃÆÏÃÆÏ €>4!tÆÏ Ã[_S&;Evé ÿ&‰E&‰E-Ã[Sè¢u±è¦þþÀuÆÏÃ[èj_Sè‡uóè¬äWƒÇ¾€¹üó¥_±èzþþÀtÔƒÇ ¾€¹üó¥Ã¸Kë3À[S÷ÍuFèIuèP±èLþþÀXt3&‰E-ŒÊ±3èGþº%R±è>þ±!è.þZ Àu &ÿE-�Â€ëæ±èþèããéìéoÿÆÏÃ&€}tÆÏÃLÿ¤ÈB‰>C[�EYXSQ»è/æëˆB‰>C[�EZXSè&ëP‘»ècóYÄ>CWŠB2ö“-+Èv G&Æ þÆ:òtâ󑻊CG&ˆþÆ:òtâñ_&ˆ5Ã2Àë°¢G‰>L[�N�H�Jè@S»€>Guè;ær#Ä>H&‰ë¿Úèmôr‹÷Ä>H¹üó¥3À8t“-@Ä>L&‰ÃX‹ô6Š2ö‹ÊBƒùv¹F¿üó¤ÆâÿàÃ[ŒÚ‹÷_üó¤ŽÚÿã[ŒÚ‹÷+á‹üüó¤ŽÚÿã[Y_üóªÿ㑌Ú[_^ü;÷sñùNOýó¤ŽÚÿã[WUS¹ &ÿ5GGâù_^]ZY[XÜWVURQSP‹ì‹~ŽF¹ &�GGâù[]_ÿã;ÁsòéÅ;Á|;Âò é·‹Ä+Ár=r±ÓèŒÑÁ;Ørò é˜[X�Sÿ6ÍÇÍLè‘Þ ÀtLè—Þ�Í<tÃ�ÐèÏèÝ^C User breaké‘ ÏÆÏ2äÀ>ÏuÃ�ñÿ™ð™ò™ð‘ !"�ЊÏ艊».$.׊ÐèÍÜ I/Oë2[X�S²ë ’�‘ÿð�ÐèZŠÂ»h$.׊ÐèžÜ Run-timeƒ.Ðè‹Ü error ŠÂèzâÆTÿèvÜ, PC=¡Ðè_âègÜ Program aborted é%ãR�&ÍûÿèáZÃèCâPè‹ìéXU‹ìUéƒìh¸H¹èƒþÀÀ—W¿mZ—_‰Cš‰Sœ¸H¹èfþÀÀ—W¿yZ—_‰Cš‰Sœ¸H¹èIþÀÀ—W¿ Z—_‰Cš‰Sœ¸H¹è,þÀÀ—W¿ÑZ—_‰Cš‰Sœ¸H¹èþÀÀ—W¿AZ—_‰Cš‰Sœ�~š—‰F˜ŒÐ‰F–‹F˜‰Fð‹F–‰Fø¸s‰Fî�~êè™ýÍàè¯ýé‹å]ÃU‹ìUé¸H¹èºýÀ—W¸_‰…m¸H¹è¤ýÀ—W¸_‰…m¸H¹èŽýÀ—W¸ _‰…m¸H¹dèxýÀ—W‹F_‰…y¸H¹dèbýÀ—W¸_‰…y¸H¹dèLýÀ—W¸_‰…y¸H¹dè6ýÀ—W¸_‰…y¸H¹dè ýÀ—W¸_‰…y¸H¹dè ýÀ—W¸_‰…y¸H¹dèôüÀ—W¸_‰…y¸H¹dèÞüÀ—W¸_‰…y¸ H¹dèÈüÀ—W¸_‰…y¸ H¹dè²üÀ—W¸_‰…y¹nè¸üèþé‹å]ÂU‹ìUé¸H¹èƒüÀ—W¸_‰…m¸H¹èmüÀ—W¸_‰…m¸H¹èWüÀ—W¸_‰…m¸H¹èAüÀ—W¸_‰…m¹nèGüè•ýé‹å]ÃU‹ìUé¸H¹èüÀ—W¸_‰…m¸H¹èþûÀ—W¸_‰…m¸H¹èèûÀ—W¸_‰…m¸H¹èÒûÀ—W¸_‰…m¹nèØûè&ýé‹å]ÃU‹ìUé¸H¹è¥ûÀ—W¸_‰…m¸H¹è�ûÀ—W¸_‰…m¸H¹èyûÀ—W¸_‰…m¹nèûèÍüé‹å]ÃU‹ìUé¸H¹èLûÀ—W¸_‰…m¸H¹è6ûÀ—W¸_‰…m¸H¹è ûÀ—W¸_‰…m¸H¹dè ûÀ—W‹F_‰…y¹nèûè^üé‹å]ÂU‹ìUé¸H¹èÛúÀ—W¸ _‰…m¸H¹èÅúÀ—W¸_‰…m¸H¹è¯úÀ—W¸_‰…m¸H¹dè™úÀ—W¸_‰… ¸H¹dèƒúÀ—W‹F _‰… ¹nè‰úè×û¸H¹èdúÀ—W¸ _‰…m¸H¹èNúÀ—W¸_‰…m¸H¹è8úÀ—W¸_‰…m¸H¹dè"úÀ—W�~èýæ¸ ègèè@çè(è_‰…y¸H¹dèüùÀ—W�~è׿èãæ†¾Ÿ/eèçè«è¸dè2èè çèóç_‰…y¸H¹dèÇùÀ—W�~è¢æè®æ†¾Ÿ/eèêæè‹è¸dèýçèÖæè¾ç_‰…y¹nè®ùèüúé‹å]ÂU‹ìUé¸H¹èyùÀ—W¸_‰…m¸H¹ècùÀ—W¸_‰…m¸H¹èMùÀ—W¸_‰…m¸H¹dè7ùÀ—W‹F_‰…y¹nè=ùè‹úé‹å]ÂU‹ìUéƒì�~è~Þèà‰Fú¸H¹èøøÀ—W¸_‰…m¸H¹èâøÀ—W¸_‰…m¸H¹èÌøÀ—W‹Fú_‰…m¸H¹è¶øÀ—W¸ _‰…m¸H¹dè øÀ—W‹FW_‰… ¸H¹dèŠøÀ—W‹FU_‰… ¸P‹FúY‘+È}é1A‰FüQ‹FüH¹dè_øÀ—W‹Fü¹QèRø—ŠC2ä_‰…yYItÿFüéÓÿ¹nèOøè�ùé‹å]ÂUU‹ìUé¸H¹èøÀ—W¸_‰…m¸H¹èøÀ—W¸_‰…m¸H¹èî÷À—W¸_‰…m¸H¹dèØ÷À—W‹F_‰…y¹nèÞ÷è,ùé‹å]ÂU‹ìUé¸H¹è©÷À—W¸_‰…m¸H¹è“÷À—W¸_‰…m¸H¹è}÷À—W¸_‰…m¸H¹dèg÷À—W‹F_‰…y¹nèm÷è»øé‹å]ÂU‹ìU鿚Wè/ä�×£p=Jè7丹ºè/÷¢ é‹å]ÃU‹ìU鿚Wèä€z®Gaè 丹ºè÷¢ é‹å]ÃU‹ìUé‹U‹Äÿvþ‹èUéP¸P¸0Y‘+È}éhA‰FúQ‹FúH¹0èºö¹÷á—�Ç¡WÄ~ôW¸èùäè¦ãÄ~ôƒÇW¸èèäè•ãÄ~ôƒÇ W¸è×äè„ãÄ~ôƒÇW¸èÆäèsãXXYItÿFúéœÿ¸¹ºè_ö¢ é‹å]ÃU‹Äÿvþ‹èUéƒì �~îWè)ãƒpè1ã�~ôW¸èväè#ã¹ è/öè.ÿ¸P¸0Y‘+È}é‚A‰FúQ�~èW�~ôèÙâèå↾Ÿ/eè!ãèêâ‹FúH¹0èÚõ¹÷á—�Ç¡WÄ~ÖW�~èè¨âèˆäèÂâÄ~ÖƒÇW�~èè“âèˆäè­âXX�~ôW�~ôèâ�~îèxâè¨âè’âYItÿFúé‚ÿé‹å]ÃU‹Äÿvþ‹èUéP¿! W¿¡¹€èÜô¸P¸0Y‘+È}égA‰FúQ‹FúH¹0è@õ¹÷á—�Ç! WÄ~ôWÄ~ôèâ‹^þ6�èâèLâèâÄ~ôƒÇWÄ~ôƒÇèëá‹^þ6�èàáè)âèúáXXYItÿFúé�ÿé‹å]ÃU‹Äÿvþ‹èUéP¸P¸0Y‘+È}éJA‰FúQ‹FúH¹0èµô¹÷á—�Ç' W‹FúH¹0èŸô¹÷á—�Ç' èwῚèpáè¹áèŠáYItÿFúéºÿé‹å]ÃU‹Äÿvþ‹èUéP¸P¸0Y‘+È}égA‰FúQ‹FúH¹0èGô¹÷á—�Ç! WÄ~ôWÄ~ôèá‹^þ6�è áè:áè$áÄ~ôƒÇWÄ~ôƒÇèòà‹^þ6�èçàèáèáXXYItÿFúé�ÿ¸P¸0Y‘+È}é¢A‰FúQ‹FúH¹0èÐó¹÷á—W‹FúH¹0è¿ó¹÷á—�Ç! è—àèËá_‰…¡‹FúH¹0èŸó¹÷á—W‹FúH¹0èŽó¹÷á—�Ç' èfàèšá_‰…£‹FúH¹0ènó¹÷á—W‹FúH¹0è]ó¹÷á—�Ç- è5àèiá_‰…¥YItÿFúébÿé‹å]ÃU‹Äÿvþ‹èUéƒì¸‰Fú¸‰Fø‹FúH¹dèóÀ—W‹FøH¹0èó¹÷á—‹…¡_‰… ‹FúH¹dèçòÀ—W‹FøH¹0èÙò¹÷á—‹…£_‰… ‹Fú‰Fú‹Fø‰Fø‹Fø=0é’ÿ¸H¹è£òÀ—W¸ _‰…m¸H¹è�òÀ—W¸0_‰…m¸H¹èwòÀ—W¸_‰…m¹nè}òèËóé‹å]ùèmò‹FPè”ú¹è`ò‹FPèú  2ä4ué ¹(èGòèáû¹ è>òè¨ü¹ è5òè9ý¹ è,òèžý¹ è#òèÒþé‹å]ÂU‹ìUé¹è ò¸PèŽö¹èýñ‹FPè³ù¹èðñ‹FPèú¸H¹èÇñÀ—W¸ _‰…m¸H¹è±ñÀ—W¸_‰…m¸H¹è›ñÀ—W¸_‰…m¸H¹è…ñÀ—W¸_‰…m¸H¹dèoñÀ—W‹F _‰… ¸H¹dèYñÀ—W‹F _‰… ¸H¹dèCñÀ—W¸_‰… ¸H¹dè-ñÀ—W¸_‰… ¸H¹dèñÀ—W‹F_‰… ¸H¹dèñÀ—W¸_‰… ¹nèñèUòé‹å] U‹ìUé¹èîð‹FPè¤ø¹èáð‹FPèù¸H¹è¸ðÀ—W¸ _‰…m¸H¹è¢ðÀ—W¸_‰…m¸H¹èŒðÀ—W¸_‰…m¸H¹èvðÀ—W¸_‰…m¸H¹dè`ðÀ—W‹F_‰… ¸H¹dèJðÀ—W‹F _‰… ¸H¹dè4ðÀ—W‹F _‰… ¸H¹dèðÀ—W‹F_‰… ¹nè$ðèrñé‹å] U‹ìUé¹è ð¸PèÁ÷¹èþï¸Pè%ø¸H¹èÕïÀ—W¸ _‰…m¸H¹è¿ïÀ—W¸_‰…m¸H¹è©ïÀ—W¸_‰…m¸H¹dè“ïÀ—W¸ N_‰… ¸H¹dè}ïÀ—W¸˜:_‰… ¸H¹dègïÀ—W¸¨a_‰… ¸H¹dèQïÀ—W¸¨a_‰… ¸H¹dè;ïÀ—W¸Hq_‰… ¸H¹dè%ïÀ—W¸ˆ_‰… ¸H¹dèïÀ—W¸ N_‰… ¸H¹dèùîÀ—W¸˜:_‰… ¹nèÿîèMðé‹å]ÃU‹ìUé¸H¹èÌîÀ—W¸_‰…m¸H¹è¶îÀ—W¸_‰…m¸H¹è îÀ—W¸ô_‰…m¸H¹dèŠîÀ—W¸ô_‰… ¸H¹dètîÀ—W¸ô_‰… ¸H¹dè^îÀ—W¸}_‰… ¸H¹dèHîÀ—W¸ô_‰… ¸H¹dè2îÀ—W¸}_‰… ¸H¹dèîÀ—W¸}_‰… ¸H¹dèîÀ—W¸ô_‰… ¸H¹dèðíÀ—W¸}_‰… ¸ H¹dèÚíÀ—W¸ô_‰… ¸ H¹dèÄíÀ—W¸ô_‰… ¹nèÊíèïé‹å]ÃU‹ìUé¹è³íè»þ¹èªí¸hBP¸€>P¸'P¸P¸Pè|û¹è�í¸pP¸ˆP¸@P¸°6P¸P¸Pèwü¹èlí¸'P¸€>P¸à.P¸PFP¸P¸PèVü¹èKí¸È2P¸ˆP¸8JP¸¨aP¸P¸Pè5ü¹è*íèý¹è!í¸Pè¥ñ¹èí¸€>èLÛ¸€>èFÛ¸@è@Û¸P¸Pèòõ¹èñì¸pè)Û¸ Nè#Û¸èèÛ¸P¸PèÏõ¹èÎì¸À]èÛ¸@èÛ¸ÐèúÚ¸P¸Pè¬õ¹è«ì¸à.èãÚ¸ èÝÚ¸ è×Ú¸P¸Pè‰õ¹èˆì¸Ä P¸è¼Úèwñ¹_èuì¸XP¸HqPèáÑ GSX GRAPHICS±Pè-Òè$ó¹èOì¸ÐP¸èƒÚè>ñ¹_è<ì¸pP¸�ePè¨ÑUsing Turbo Pascal±PèîÑèåò¹èì¸èP¸ZèDÚèÿð¹_èýë¸ÐP¸ä PèiÑby Dr. August E. Sapega±PèªÑè¡ò¹èÌë¸@P¸èÚè»ð¹_è¹ë¸0uP¸¨aPè%ÑTRINITY COLLEGE±PènÑèeò¹è�븰P¸-èÄÙèð¹_è}븈P¸˜:PèéÐ Easy-to-use±Pè6Ñè-òé‹å]Ãèðáè�å%This program demonstrates GSX pascal.è}åèŽë¹èë¸Pè5í¹èëè®ó¹è ëèFý¹èë¸PèWñ¹èóê¸èP¸è'Ùèâï¹_èàê¸èP¸°PèLÐ#TYPE T TO LEAVE GRAPHICS MODE±Pè�Ðèxñèá¿™èõâè‡ãèë ™2ä=T¸tHP ™2ä=t¸tHY Á ÀuéÉÿ¹èlêè,îèáè¢ä5To obtain print out of graphics on LA50, type P èäè�êèà¿™èsâèãè€ê ™2ä=P¸tHP ™2ä=p¸tHY Á Àué(¹èêé¸Pèì¹èÝéè§ò¹èÔéèü¹èËéèúíèaàèäThis concludes demonstration.èöãèêééÕÍê ™2ä=P¸tHP ™2ä=p¸tHY Á Àué¨É¹èêé¸Pèì¹èÝéè§ò¹èÔéèü¹èËéèúíèaàèäThis{$R+} PROGRAM GSX_Model; { This is a model program to demonstrate GSX, and to provide a template to build on for further developments. This program begun April 11, 1984 by Dr. August E. Sapega. This program takes advantage of the special feature of Turbo Pascal which allows any section (such as TYPE, VAR, etc.) to occur any number of times in any order. See page 45, Turbo Manual for further details. } { The following global arrays hold information needed by GSX. } TYPE ControlA = ARRAY[1..6] of INTEGER; IntinA = ARRAY[1..100] of INTEGER; IntoutA = ARRAY[1..100] of INTEGER; PtsinA = ARRAY[1..100] of INTEGER; PtsoutA = ARRAY[1..100] of INTEGER; ScreenLine = STRING[80]; { For text via Procedure Text. } { These are global variables used to reach GSX through the above arrays. } VAR Contrl : ControlA; Intin : IntinA; Intout : IntoutA; Ptsin : PtsinA; Ptsout : PtsoutA; { This global variable is needed in the demonstration program. } Ch : CHAR; { Now we include those procedures which initialize and call GSX. Note that the include line is indented so that when using Tlist to print out program it will not list the included files. Consult the help function of Tlist for further details. } {$I GSXINIT.PAS} { Here are included some GSX Procedures called from demonstration program. } {$I GSXFUNC.PAS} {$I GSXCIRC.PAS} { This procedure uses the GSX GDP for a circle } PROCEDURE Circle (X, Y, Radius, Interior, Fill : INTEGER); BEGIN { CIRCLE } Set_line_type (3); Fill_Style (Fill); Fill_Interior (Interior); Contrl[1] := 11; { Circle op code } Contrl[2] := 3; Contrl[4] := 0; Contrl[6] := 4; { Circle identifier } Ptsin[1] := X; Ptsin[2] := Y; Ptsin[3] := 0; Ptsin[4] := 0; Ptsin[5] := Radius; { Radius } Ptsin[6] := 0; Call_gsx END; { PROCEDURE Circle } { This procedure uses the GSX GDP for a bar } PROCEDURE Bar (Lx, Ly, Ux, Uy, Interior, Fill : INTEGER); BEGIN { BAR } Fill_Style (Fill); Fill_Interior (Interior); Contrl[1] := 11; { Op code } Contrl[2] := 2; Contrl[4] := 0; Contrl[6] := 1; { Bar identifier } Ptsin[1] := Lx; Ptsin[2] := Ly; Ptsin[3] := Ux; Ptsin[4] := Uy; Call_gsx END; { PROCEDURE Bar } { This procedure uses the GSX GDP for a filled polygon. } PROCEDURE Shape; BEGIN Fill_Style (1); Fill_Interior (2); Contrl[1] := 9; { Filled area op code } Contrl[2] := 4; Contrl[4] := 0; Ptsin[1] := 20000; Ptsin[2] := 15000; Ptsin[3] := 25000; Ptsin[4] := 25000; Ptsin[5] := 29000; Ptsin[6] := 5000; Ptsin[7] := 20000; Ptsin[8] := 15000; Call_gsx END; { PROCEDURE Shape } PROCEDURE Border; { This draws a border within the edges of NDC spaces. } BEGIN { Draw Border } { Set origin } Contrl[1] := 6; { Polyline op code } Contrl[2] := 5; { Number of lines to connect } Contrl[4] := 500; Ptsin[1] := 500; Ptsin[2] := 500; Ptsin[3] := 32000; Ptsin[4] := 500; Ptsin[5] := 32000; Ptsin[6] := 32000; Ptsin[7] := 500; Ptsin[8] := 32000; Ptsin[9] := 500; Ptsin[10] := 500; { Having defined the border, now draw it. } Call_gsx END; { PROCEDURE Border } PROCEDURE Graphics_Demo; BEGIN Border; Circle (17000,16000,10000,0,2); Bar (6000,5000,8000,14000,3,1); Bar (10000,16000,12000,18000,3,2); Bar (13000,5000,19000,25000,3,5); Shape; Set_Line_Type (4); Draw_Circle (16000,16000,8000,0,0); Draw_Circle (6000,20000,1000,3,6); Draw_Circle (24000,8000,2000,2,5); Draw_Circle (12000,4000,800,2,6); Set_Character_Spec (2500,0); Text (7000,29000,'GSX GRAPHICS'); Set_Character_Spec (2000,0); Text (6000,26000,'Using Turbo Pascal'); Set_Character_Spec (1000,90); Text (2000,3300,'by Dr. August E. Sapega'); Set_Character_Spec (1600,270); Text (30000,25000,'TRINITY COLLEGE'); Set_Character_Spec (1200,45); Text (5000,15000,'Easy-to-use'); END; { PROCEDURE Graphics_Demo } { Main program } BEGIN WRITELN ('This program demonstrates GSX pascal.'); Init_Work_Station (1); { Open workstation for display } Screen_init; { This sets scaling for Draw_Circle procedure } Graphics_Demo; Set_Text_Font (2); Set_Character_Spec (1000,0); Text (1000,1200,'TYPE T TO LEAVE GRAPHICS MODE'); REPEAT READLN (Ch) UNTIL (Ch = 'T') OR (Ch = 't'); Exit_Graphics_Mode; WRITELN ('To obtain print out of graphics on LA50, type P '); READLN (Ch); IF (Ch = 'P') OR (Ch = 'p') THEN BEGIN Init_Work_Station (21); Printer_Init; Graphics_Demo; Clear_Work_Station END; WRITELN ('This concludes demonstration.') END. { GSX test program } END.