$ TADA/LIST=HW6BPKG HW6BPKG TeleSoft-Ada compiler -- Version 1.3d March 25, 1983 Copyright (c) 1981,1982,1983 TeleSoft. All rights reserved. Opening hw6bpkg.text Symbol table space: 127.5K bytes Compilation complete Syntax errors: 0 Semantic errors: 0 Lines compiled: 96 reset(hw6bpkg.CODE) rewrite(hw6bpkg.CODE) Segment 1, 3 procedures ... end. $ TYPE HW6BPKG Opening hw6bpkg.text 1: with FLOAT_MATH_LIB ; use FLOAT_MATH_LIB ; 2: with TEXT_IO ; use TEXT_IO , INTEGER_IO , FLOAT_IO ; 3: 4: package HW6BPKG is -- just the basic control structure for HW6 5: 6: T : FLOAT := 0.0 ; -- Global to all tasks and main program 7: 8: task TARGET is -- TASK SPECIFICATION FOR TARGET 9: entry ZOOM ; 10: end TARGET ; 11: 12: -- task PLANE is -- TASK SPECIFICATION FOR PLANE \ 13: -- entry FLY ; \_ HW7 14: -- end PLANE ; / 15: 16: -- task MISSILE is -- TASK SPECIFICATION FOR MISSILE \ 17: -- entry ZIP ; \_ HW8 18: -- end MISSILE ; / 19: 20: task SHARED is -- SHARED TASK SPECIFICATION 21: entry REPORT (WHO:INTEGER ; X,Y,VX,VY:FLOAT) ; 22: entry READ_OUT (WHO:INTEGER ; X,Y,VX,VY: out FLOAT) ; 23: entry PLOT (X,Y:FLOAT ; PLOT_STR : STRING) ; 24: end SHARED ; 25: 26: end HW6BPKG ; 27: 28: 29: package body HW6BPKG is 30: task body TARGET is -- TASK BODY FOR TARGET 31: TGT_X : FLOAT := 2.0 ; -- right middel of screen 32: TGT_Y : FLOAT := 1.0 ; 33: TGT_VX : FLOAT ; -- target velocity needed for HW7 34: TGT_VY : FLOAT ; 35: TGT_XOLD : FLOAT ; -- old X,Y for velocity computation 36: TGT_YOLD : FLOAT ; 37: begin 38: accept ZOOM do 39: null ; -- Go immediately to parallel execution 40: end ; 41: while T < 8.0 loop -- This is the timing loop 42: T := T + 0.03 ; 43: 44: -- PUT YOUR CODE HERE TO COMPUTE TGT_X etc. 45: 46: -- provide for sharing results with PLANE task 47: SHARED.REPORT(1,TGT_X,TGT_Y,TGT_VX,TGT_VY) ; 48: 49: -- go plot position 50: SHARED.PLOT(TGT_X,TGT_Y,"*") ; 51: -- you might erase old plot or make vapor trail 52: 53: end loop ; 54: end TARGET ; 55: 56: 57: task body SHARED is -- SHARED TASK BODY 58: type SH_VEC is array(1..2) of FLOAT ; 59: X_VALS : SH_VEC ; 60: Y_VALS : SH_VEC ; 61: VX_VALS : SH_VEC ; 62: VY_VALS : SH_VEC ; 63: I : INTEGER ; 64: J : INTEGER ; 65: ESC_STR : STRING(1..1) ; 66: begin 67: loop 68: select 69: accept REPORT (WHO:INTEGER ; X,Y,VX,VY:FLOAT) do 70: X_VALS(WHO) := X ; 71: Y_VALS(WHO) := Y ; 72: VX_VALS(WHO) := VX ; 73: VY_VALS(WHO) := VX ; 74: end ; 75: or 76: accept READ_OUT (WHO:INTEGER ; X,Y,VX,VY: out FLOAT) do 77: X := X_VALS(WHO) ; 78: Y := Y_VALS(WHO) ; 79: VX := VX_VALS(WHO) ; 80: VY := VY_VALS(WHO) ; 81: end ; 82: or 83: accept PLOT (X,Y:FLOAT ; PLOT_STR : STRING) do 84: I := INTEGER( Y * 10.0 ) + 1 ; 85: J := INTEGER( X * 30.0 ) + 1 ; 86: ESC_STR(1) := ASCII.ESC ; 87: -- use concatenation in order to get one put 88: PUT(ESC_STR & "[" & INTEGER'IMAGE(I) & ";" 89: & INTEGER'IMAGE(J) & "f" & PLOT_STR) ; 90: end ; 91: or 92: terminate ; 93: end select ; 94: end loop ; 95: end SHARED ; 96: end HW6BPKG ; Syntax errors: 0 Semantic errors: 0 Lines compiled: 96 $ TADA/LIST=HW6B HW6B TeleSoft-Ada compiler -- Version 1.3d March 25, 1983 Copyright (c) 1981,1982,1983 TeleSoft. All rights reserved. Opening hw6b.text Symbol table space: 127.5K bytes Compilation complete Syntax errors: 0 Semantic errors: 0 Lines compiled: 19 reset(hw6b.CODE) rewrite(hw6b.CODE) Segment 1, 1 procedures . end. $ TYPE HW6B Opening hw6b.text 1: with TEXT_IO ; use TEXT_IO ; 2: with HW6BPKG ; use HW6BPKG ; 3: 4: procedure HW6B is -- one possible main procedure for HW6 5: 6: begin 7: 8: PUT(ASCII.ESC) ; PUT("[2J") ; -- CLEAR VT100 SCREEN 9: 10: TARGET.ZOOM ; 11: 12: while T < 8.0 loop -- T is time from package HW6BPKG. 13: SHARED.PLOT(0.0,0.0," ") ; 14: -- This loop keeps the main program alive. 15: end loop ; -- The PLOT provides output so that 16: -- control gets to the tasks 17: -- This is needed to prevent premature 18: -- termination . 19: end HW6B ; Compilation complete Syntax errors: 0 Semantic errors: 0 Lines compiled: 19 $ ! TRUN HW6B -- this must be typed from the terminal to see action