externalroutine SHOWOFF(string(255) REPEATER) ! !%externalroutinespec CLEAR(%string(255) S) !%externalroutinespec CONSOLE %alias "S#CONSOLE"(%integer EP,%integername START,LEN) !%externalintegerfnspec DDELAY(%integer I) !%externalroutinespec DEFINE(%string(255) S) !%externalintegerfunctionspec EXIST(%string(31) F) !%externalroutinespec DRAW PICTURE(%string(255) S) !%externalstring(63)%functionspec INTERRUPT ! !%include "ECSLIB.GENERALY_IMPPREDEF" include "types.inc" include "specs.inc" include "shapes.inc" include "consts.inc" ! integer C,CVAL,FLAG,I,N constinteger NUM=10 integerarray X(1:4), Y(1:4) constintegerarray FORTYEIGHTNUMBERS(1:48)= c 250,250,250,400,105,330,105,180, 250,250,250,400,395,330,395,180, 250,250,395,180,250,120,105,180, 250,250,285,275,250,295,215,275, 215,275,250,250,250,205,215,230, 250,250,285,275,285,230,250,205 constantstring(1) SNL=" " ! constantstring(31) CATFILE="ERCN09.SHOWOFFEGS_PUSSYCAT23" constantstring(31) CHIPFILE1="ERCN09.SHOWOFFEGS_CHIP1XPDF" constantstring(31) CHIPFILE2="ERCN09.SHOWOFFEGS_CHIP2XPDF" constantstring(31) EASYGEG="ERCN09.SHOWOFFEGS_EASYGEG" constantstring(31) WORLDMAPFILE="ERCN09.SHOWOFFEGS_WORLDXPDF" ! record(POINTFM)array POLYPOINTS(1:10) ! routine wait (integer i) integer c for i = 1, 1, i cycle for c = 1, 1, 65000 cycle repeat repeat end routine DRAW THREE POLYGONS integer N,WOW for WOW=1,1,3 cycle for N=1,1,4 cycle C=C+1; POLYPOINTS(N)_X=FORTYEIGHTNUMBERS(C) C=C+1; POLYPOINTS(N)_Y=FORTYEIGHTNUMBERS(C) repeat POLYGON(4,POLYPOINTS) repeat end ! routine SAFE REVIEW ! Calls the EDWIN routine REVIEW which will return at the ! end of the picture, or signal event 9 if the picture description ends. on 9 start return finish REVIEW end ! ! Trap any Errors which are signalled by EDWIN on 14 start TERMINATE EDWIN PRINT STRING("EDWIN error : ".EDWIN ERROR(event_sub)) NEWLINE stop finish ! !===================================================== SHOWOFF ============ ! REPEAT: ;! cycle around on indefinite display if SHOWOFF param REPEATER#""... ! INITIALISE FOR(DEFAULT DEVICE) ;! this Edwin routine looks up terminaltype. WINDOW(0,1023,0,767) ;! initialise scaling.. ! !----------------------------------------------------------- DEMO 1 ! NEWFRAME ;! clear screen. MOVE ABS(512,384) ;! move cursor to centre of screen. SET COLOUR(YELLOW) ;! yellow. SET SHADE MODE(SOLID) ;! subsequent figure(s) to be shaded in solid colour. CIRCLE(250) SET COLOUR MODE(INVERT MODE) ;! new colour to be 'inverted' with existing colour. SET SHADE MODE(OUTLINE) ;! figure to be drawn in outline only. if Charles#device data_devno#bbc micro start { These both have very show circle shading, done from mainframe } for I=248,-4,0 cycle CIRCLE(I) repeat finish UPDATE ;! make sure all the output is sent. -> EXIT if INTERRUPTED ; ! user must be able to interrupt out of indefinite loop! WAIT(7) ! !----------------------------------------------------------- DEMO 2 ! draws a series of 15 boxes coloured with the Edwin colours. ! NEWFRAME ;! clear screen SET COLOUR(BLACK) SET CHAR SIZE(8) MOVE ABS(0,475) TEXT("Edwin Colours:") for C=225,50,925 cycle MOVE ABS(C,475) TEXT(ITOS((C-225)//50+1,0)) repeat UPDATE N=200 SET SHADE MODE(SOLID) ;! solid filled-in colour. for C=1,1,15 cycle ; ! now draw 15 coloured boxes! SET COLOUR(C) RECTANGLE(N,400,N+50,450) UPDATE N=N+50 repeat -> EXIT if INTERRUPTED WAIT(3) ! !----------------------------------------------------------- DEMO 3 ! draws 4 lines of text in various character sizes, and a GIMMS appreciation of Graeme!: ! NEWFRAME ;! clear screen SET COLOUR(BLACK) SET COLOUR MODE(REPLACE MODE) MOVE ABS(20,700) SET CHAR SIZE(7) TEXT("The built-in character-sets:") for C=2,1,5 cycle SET COLOUR(C) SET CHAR SIZE(C*3) MOVE ABS(20,(600-(C-2)*100)) TEXT("abcdefghijklmnopqrstuvwxyz") TEXT(" ABCDEFGHIJKLMNOPQRSTUVWXYZ") if C<4 UPDATE repeat SET COLOUR(BLACK) MOVE ABS(20,200) SET CHAR SIZE(7) TEXT("And some of EDWIN's character sets:") SET CHAR QUALITY(1) MOVE ABS(10,100) SET COLOUR(YELLOW) SET CHAR SIZE(35) SET CHAR FONT(16) TEXT("NB: ") SET CHAR FONT(26) TEXT("Graeme Wallace") SET CHAR FONT(60) TEXT(" was ") SET CHAR FONT(61) TEXT("here!") UPDATE SET COLOUR(BLACK) SET CHAR FONT(0) SET CHAR SIZE(7) SET CHAR QUALITY(0) -> EXIT if INTERRUPTED WAIT(10) ! !----------------------------------------------------------- DEMO 4 ! light blue '3D' box in a dark blue '3D' corner: ! NEWFRAME SET COLOUR MODE(INVERT MODE) SET COLOUR(BLUE) ;! dark blue. SET SHADE MODE(SOLID) C=0 DRAW THREE POLYGONS SET COLOUR MODE(REPLACE MODE) ;! REPLACE old colour with new - ie REPLACE. SET COLOUR(11) ;! light blue DRAW THREE POLYGONS SET COLOUR(BLACK) ;! black. MOVE ABS(250,250); LINE ABS(215,275) ;! black outlines of small box.. MOVE ABS(250,250); LINE ABS(285,275) MOVE ABS(250,250); LINE ABS(250,205) UPDATE -> EXIT if INTERRUPTED WAIT(6) ! !----------------------------------------------------------- DEMO 5 ! overlay some coloured boxes to demonstrate colour-summing.. ! NEWFRAME SET COLOUR MODE(INVERT MODE) ;! 'invert' new colour with old.. SET COLOUR(GREEN) RECTANGLE(300,300,400,400) UPDATE WAIT (2) SET COLOUR(RED) RECTANGLE(300,300,500,500) UPDATE WAIT (2) SET COLOUR(BLUE) RECTANGLE(400,400,600,600) UPDATE WAIT (2) SET COLOUR(YELLOW) RECTANGLE(300,300,600,600) UPDATE WAIT (2) SET COLOUR(GREEN) RECTANGLE(300,300,400,400) UPDATE WAIT (2) SET COLOUR(RED) RECTANGLE(300,300,500,500) UPDATE WAIT (2) SET COLOUR(BLUE) RECTANGLE(400,400,600,600) UPDATE -> EXIT if INTERRUPTED SET COLOUR MODE(REPLACE MODE) WAIT(1) ! !----------------------------------------------------------- DEMO 6 ! Nine circles, variously coloured and shaded: ! NEWFRAME MOVE ABS(55,20) SET CHAR SIZE(7) TEXT("DEMONSTRATION OF TERMINAL'S IN-BUILT SHADING CAPABILITY:") for I=0,1,9 cycle MOVE ABS(55+I*110,200) SET COLOUR(I+2) SET SHADE MODE(I) CIRCLE(50) UPDATE repeat -> EXIT if INTERRUPTED SET SHADE MODE(OUTLINE) WAIT(3) ! !----------------------------------------------------------- DEMO 7 ! draws 8 lines, in different colours and linestyles if the terminal can take it! ! (note that Edwin actually only offers the first FOUR - for device-independence). ! for C=0,1,7 cycle SET COLOUR(C+2) SET LINESTYLE(C) MOVE ABS(100,(700-C*40)) LINE REL(700,0) repeat UPDATE -> EXIT if INTERRUPTED SET LINESTYLE(0) WAIT (8) ! !----------------------------------------------------------- DEMO 8 ! flings up a routine EASYGRAPH example: ! ! %if EXIST(EASYGEG)#0 %thenstart ! NEWFRAME ! MOVE ABS(200,650) ! SET COLOUR(BLACK) ! SET CHAR SIZE(8) ! TEXT("A sample of EASYGRAPH output:") ! MOVE ABS (0, 0) ! DEFINE("66,".EASYGEG) ! SELECTINPUT(66) ! SAFE REVIEW ! UPDATE ! SELECTINPUT(0); CLOSESTREAM(66); CLEAR("66") ! %finishelse PRINTSTRING("Sorry: ".EASYGEG." does not exist or not access.".SNL) ! -> EXIT %if INTERRUPT#"" ! FLAG=-1 ! CONSOLE(9,FLAG,FLAG) ! I=DDELAY(4) !! !!----------------------------------------------------------- DEMO 9 !! Charles Duncan's coloured map of the world, courtesy of Gordon! !! ! TERMINATE EDWIN ! INITIALISE FOR(DEFAULT DEVICE) ;! Start with a clean slate ! %if EXIST(WORLDMAPFILE)#0 %thenstart ! NEWFRAME ! DEFINE("66,".WORLDMAPFILE) ! SELECTINPUT(66) ! SAFE REVIEW ! UPDATE ! SELECTINPUT(0); CLOSESTREAM(66); CLEAR("66") ! %finishelse PRINTSTRING("Sorry: ".WORLDMAPFILE." does not exist or no access.".SNL) ! -> EXIT %if INTERRUPT#"" ! FLAG=-1 ! CONSOLE(9,FLAG,FLAG) ! I=DDELAY(4) !! !!----------------------------------------------------------- DEMO 10 !! draws an extract from one of Gordon's chips: !! ! %if EXIST(CHIPFILE1)#0 %and EXIST(CHIPFILE2)#0 %thenstart ! NEWFRAME ! MOVE ABS(0,950) ! SET COLOUR(BLACK) ! SET CHAR SIZE(7) ! TEXT("Two examples of parts of integrated circuits drawn by EDWIN") ! UPDATE ! ! Note that the use of VIEWPORT is device specific. ! ! in this example the viewport is set to be a area relative to the ! ! maximum device drawing area. This is good for interactive displays ! ! but remember some plotters may have VERY LARGE areas available! ! VIEW PORT (0, INT(DEVICE DATA_MVX * 4.5/10), ! INT(DEVICE DATA_MVY * 2/10), INT(DEVICE DATA_MVY * 8/10)) ! DEFINE("67,".CHIPFILE1) ! SELECTINPUT(67) ! SAFE REVIEW ! SELECTINPUT(0); CLOSESTREAM(67); CLEAR("67") ! VIEW PORT (INT(DEVICE DATA_MVX * 5.5/10), DEVICE DATA_MVX, ! INT(DEVICE DATA_MVY * 2/10), INT(DEVICE DATA_MVY * 8/10)) ! DEFINE("67,".CHIPFILE2) ! SELECTINPUT(67) ! SAFE REVIEW ! UPDATE ! SELECTINPUT(0); CLOSESTREAM(67); CLEAR("67") ! %finishelse PRINTSTRING("Sorry: ".CHIPFILE2." does not exist or no access.".SNL) ! -> EXIT %if INTERRUPT#"" ! FLAG=-1 ! CONSOLE(9,FLAG,FLAG) !! !!----------------------------------------------------------- DEMO 11 !! draws the NOTICE pussy-cat! !! ! %if EXIST(CATFILE)#0 %thenstart ! DRAW PICTURE(CATFILE.",.OUT") ! %finishelse PRINTSTRING("Sorry: ".CATFILE." does not exist or no access.".SNL) ! -> EXIT %if INTERRUPT#"" ! FLAG=-1 ! CONSOLE(9,FLAG,FLAG) ! I=DDELAY(5) ! ! -> REPEAT %if REPEATER#"" ;! param to SHOWOFF command non-null for indefinite repetition (until interrupted) ! !----------------------------------------------------------- DEMO 12 ! Gordon's cursor-testing program, for users to try themselves! ! INITIALISE FOR(DEFAULT DEVICE) { Note DRAW PICTURE calls TERMINATE EDWIN } NEWFRAME UPDATE SET COLOUR(BLACK) PRINTSTRING("THE LAST EXAMPLE GIVES YOU AN OPPORTUNITY TO TRY OUT THE X5A FOR YOURSELF!".SNL.SNL) PRINTSTRING("In a couple of moments a ""cross-hair cursor"" will appear on the screen:".SNL) PRINTSTRING("Try moving this around to four different points on the screen -".SNL) PRINTSTRING("using the cursor-keys or the ""JOYDISC"" on the left of the keyboard -".SNL) PRINTSTRING("typing any key to fix each point.".SNL) PRINTSTRING(SNL."When you want to finish, type S (for STOP).".SNL) cycle for I=1,1,4 cycle REQUEST INPUT(CVAL,X(I), Y(I)) exit if CVAL='s' or CVAL='S' if I&1=1 then MOVE ABS(X(I),Y(I)) else LINE ABS(X(I),Y(I)) MARKER REL(6,0,0) repeat exit if CVAL='s' or CVAL='S' for I=0,1,NUM cycle SET COLOUR(I+2) MOVE ABS(X(1)+I*(X(2)-X(1))//NUM, Y(1)+I*(Y(2)-Y(1))//NUM) LINE ABS(X(3)+I*(X(4)-X(3))//NUM, Y(3)+I*(Y(4)-Y(3))//NUM) repeat repeat ! EXIT: TERMINATE EDWIN ;! user can interrupt out to here to abort indefinite loop. ! end !%externalroutine showoffx5a(%string(255) s) ! %externalroutinespec terminaltype(%string(255) s) ! terminaltype("27") ! showoff(s) !%end begin showoff ("") end Endoffile