From: Denis Fayaud [denis.fayaud@netspace.mc] Sent: Tuesday, December 02, 2003 5:53 AM To: Info-VAX@Mvb.Saic.Com Subject: Re: Qio ? The last version is more efficient (and compiles without any warning !) [inherit('SYS$LIBRARY:STARLET')] PROGRAM CAMDEV_AST(output,input); TYPE $WORD=[WORD] -32768..32767; $BYTE=[BYTE] 0..255; nodlin_type = VARYING [80] OF CHAR; io_status = PACKED RECORD Status_code:$WORD; Byte_count :$WORD; device_dep : INTEGER; END; VAR stat : INTEGER:=0; ACC_channel : [VOLATILE] $word; { QIO Channel } INbuffer : [VOLATILE] PACKED ARRAY [1..1] OF CHAR; loop : [VOLATILE] integer:=0; first : [VOLATILE] boolean:=true; message : [VOLATILE] nodlin_type:=''; Terminal : [VOLATILE] TEXT; {-------------------------------------------------------------------} [ASYNCHRONOUS] PROCEDURE display_message; BEGIN IF (INbuffer <> chr(13)) THEN IF (INbuffer <> chr(10)) THEN message:=message+INbuffer ELSE BEGIN writeln(terminal,message); IF length(message) >= 15 THEN IF SUBSTR(message,12,4)='EXIT' THEN $exit; message:=''; END; END; {-------------------------------------------------------------------} [ASYNCHRONOUS] PROCEDURE Rec; VAR stat,loop : INTEGER:=0; IO_Status_Block : io_status; { QIO status Block } OUTbuffer : [VOLATILE] PACKED ARRAY [1..1] OF CHAR; terminator_mask : [VOLATILE] ARRAY [1..2] OF INTEGER; BEGIN terminator_mask[1]:=0; (* terminator_mask[2]:=%O'20000'; octal *) (* terminator_mask[2]:=%X'2000'; hexa *) terminator_mask[2]:=8192; (* *) OUTbuffer[1]:=chr(0); IF NOT first THEN BEGIN $clref(2); display_message; END ELSE first:=false; stat:=$QIO ( 2, acc_Channel , IO$_READPROMPT, IO_status_block, ASTADR:= %IMMED IADDRESS(rec), P1:= INbuffer, P2:=1, P4:= IADDRESS(terminator_mask[1]), P5:= IADDRESS(OUTbuffer), P6:=1); END; {-------------------------------------------------------------------} { main } BEGIN WRITELN(' ',chr(27),'[4mCAMDEV$INTERFACE (02/01)',chr(27),'[0m'); writeln(' NO timeout - Infinite loop - AST synchro'); Writeln; Writeln(' ATTENTION !!! CAMDEV doit etre en mode PASTHRU'); Writeln(' $ set term/perm/pasthru camdev'); Writeln; stat := $Assign('CAMDEV',ACC_channel); OPEN (terminal, 'SYS$OUTPUT'); REWRITE (terminal); rec; $HIBER; END.