INTERFACE TO INTEGER*2 FUNCTION SIOBAUD [c,alias:'_SioBaud'] $ (Port, BaudCode) INTEGER*2 Port [value] INTEGER*2 BaudCode [value] END INTERFACE TO INTEGER*2 FUNCTION SIODONE [c,alias:'_SioDone'] $ (Port) INTEGER*2 Port [value] END INTERFACE TO INTEGER*2 FUNCTION SIOERROR [c,alias:'_SioError'] $ (Code) INTEGER*2 Code [value] END INTERFACE TO INTEGER*2 FUNCTION SIOGETC [c,alias:'_SioGetc'] $ (Port, TimeOut) INTEGER*2 Port [value] INTEGER*2 TimeOut [value] END INTERFACE TO INTEGER*2 FUNCTION SIOPARMS [c,alias:'_SioParms'] $ (Port, Parity, StopBits, WordLength) INTEGER*2 Port [value] INTEGER*2 Parity [value] INTEGER*2 StopBits [value] INTEGER*2 WordLength [value] END INTERFACE TO INTEGER*2 FUNCTION SIOPUTC [c,alias:'_SioPutc'] $ (Port, Byte) INTEGER*2 Port [value] CHARACTER*1 Byte [value] END INTERFACE TO INTEGER*2 FUNCTION SIORESET [c,alias:'_SioReset'] $ (Port, BaudCode) INTEGER*2 Port [value] INTEGER*2 BaudCode [value] END INTERFACE TO INTEGER*2 FUNCTION SIORXBUF [c,alias:'_SioRxBuf'] $ (Port, Buffer, Size) INTEGER*2 Port [value] INTEGER*1 Buffer [reference] INTEGER*2 Size [value] END INTERFACE TO INTEGER*2 FUNCTION SIORXFLUSH $ [c,alias:'_SioRxFlush'] (Port) INTEGER*2 Port [value] END INTERFACE TO INTEGER*2 FUNCTION SIORXQUE [c,alias:'_SioRxQue'] $ (Port) INTEGER*2 Port [value] END ! ! ! Routines to simulate VAX QIOs ! integer function io_init (cport, speed, width, parity, bits) integer*2 SioRxBuf, SioReset, SioParms, SioError, SioRxFlush character cport*(*), parity*(*) integer speed, width, bits integer*2 prty, dwidth, dbits, dspeed, rc integer*1 RxBuffer(1024) integer*2 Port common /QioConst/ Port common /QioBuf/ RxBuffer Port = 0 if (cport(1:3) .eq. 'COM' .or. cport(1:3) .eq. 'com') then if (len(cport) .ge. 4) then if (cport(4:4) .eq. '2') Port = 1 endif endif prty = 0 if (parity(1:1) .eq. 'o' .or. parity(1:1) .eq. 'O') prty = 1 if (parity(1:1) .eq. 'e' .or. parity(1:1) .eq. 'E') prty = 3 dbits = 0 if (bits .eq. 2) dbits = 1 dwidth = 3 if (width .eq. 7) dwidth = 2 dspeed = 5 if (speed .eq. 19200) dspeed = 6 if (speed .eq. 4800) dspeed = 4 if (speed .eq. 2400) dspeed = 3 if (speed .eq. 1200) dspeed = 2 if (speed .eq. 300) dspeed = 0 rc = SioRxBuf (Port, RxBuffer(1), 7) if (rc .lt. 0) i = SioError (rc) rc = SioParms (Port, prty, dbits, dwidth) if (rc .lt. 0) i = SioError (rc) rc = SioReset (Port, dspeed) if (rc .lt. 0) i = SioError (rc) rc = SioRxFlush (Port) io_init = 1 return end integer function io_done () integer*2 SioDone, rc integer*2 Port common /QioConst/ Port rc = SioDone (Port) io_done = 1 return end integer function io_read (iosb, in_buff, in_size, itime) integer in_size, itime integer*2 iosb(4) integer*1 in_buff(*) integer*2 SioGetc, j integer*2 Port common /QioConst/ Port M_time = itime * 18 L_time = M_time/in_size if (L_time .le. 0) L_time = 5 J_time = 0 do 100 i = 1, in_size 110 j = SioGetc (Port, L_time) if (j .eq. -1) then J_time = J_time + L_time if (J_Time .gt. M_time) go to 500 go to 110 endif in_buff(i) = iand (j, #ff) 100 continue iosb(1) = 1 iosb(2) = in_size io_read = 1 return 500 continue iosb(1) = 0 iosb(2) = i - 1 io_read = #22c return end integer function io_prompt (iosb, in_buff, in_size, itime, $ out_buf, out_size) integer in_size, itime, out_size integer*2 iosb(4) integer*1 in_buff(*), out_buf(*) integer*2 SioGetc, SioPutc, SioRxFlush, j integer*2 Port common /QioConst/ Port j = SioRxFlush (Port) do 50 i = 1, out_size jc = out_buf(i) j = SioPutc (Port, char(jc)) 50 continue M_time = itime * 18 L_time = M_time/in_size if (L_time .le. 0) L_time = 5 J_time = 0 do 100 i = 1, in_size 110 j = SioGetc (Port, L_time) if (j .eq. -1) then J_time = J_time + L_time if (J_Time .gt. M_time) go to 500 go to 110 endif in_buff(i) = iand (j, #ff) 100 continue iosb(1) = 1 iosb(2) = in_size io_read = 1 return 500 continue iosb(1) = 0 iosb(2) = i - 1 io_prompt = #22c return end