/* Generated by XDS Modula-2 to ANSI C v4.20 translator */ #define X2C_int32 #define X2C_index32 #ifndef osi_H_ #include "osi.h" #endif #define osi_C_ #include "Windows.h" #ifndef FileSys_H_ #include "FileSys.h" #endif #ifndef RealMath_H_ #include "RealMath.h" #endif #ifndef TimeConv_H_ #include "TimeConv.h" #endif #ifndef Storage_H_ #include "Storage.h" #endif #include "WinSock.h" #include "WinDef.h" #ifndef InOut_H_ #include "InOut.h" #endif #ifndef IOChan_H_ #include "IOChan.h" #endif #ifndef StdChans_H_ #include "StdChans.h" #endif #ifndef RealIO_H_ #include "RealIO.h" #endif #ifndef aprsstr_H_ #include "aprsstr.h" #endif #include #ifndef Lib_H_ #include "Lib.h" #endif /* os interface linux/win32 */ /* FROM Storage IMPORT ALLOCATE, DEALLOCATE; */ /*FROM Select IMPORT selectrwt, fdclr, fdsetr, fdsetw, issetr, issetw;*/ static IOChan_ChanId cid; static char netstarted; static char usestdio; static unsigned long argc; extern long osi_realint(float x) { if (x>=2.E+9f) return 2000000000L; if (x<=(-2.E+9f)) return -2000000000L; return (long)X2C_TRUNCI(x,X2C_min_longint,X2C_max_longint); } /* end realint() */ extern unsigned long osi_realcard(float x) { if (x>=4.E+9f) return 0x0EE6B2800UL; if (x<=0.0f) return 0UL; return (unsigned long)X2C_TRUNCC(x,0UL,X2C_max_longcard); } /* end realcard() */ extern long osi_OpenDir(char path[], unsigned long path_len, struct osi_DIRCONTEXT * dir) { FileSys_OpenDir(&dir->dire, path, path_len, &dir->entr); if (dir->entr.done) return 0L; return -1L; } /* end OpenDir() */ extern void osi_ReadDirLine(char filename[], unsigned long filename_len, struct osi_DIRCONTEXT * dir) { unsigned long i; char fn[4096]; filename[0UL] = 0; FileSys_GetName(dir->dire, fn, 4096ul); if (!dir->entr.done) return; /* no (more) entries */ i = 0UL; while ((i<=filename_len-1 && i<=4095UL) && fn[i]) { filename[i] = fn[i]; ++i; } if (i<=filename_len-1) filename[i] = 0; FileSys_NextDirEntry(dir->dire, &dir->entr); } /* end ReadDirLine() */ extern void osi_CloseDir(struct osi_DIRCONTEXT dir) { FileSys_CloseDir(&dir.dire); } /* end CloseDir() */ extern void osi_WrStr(char s[], unsigned long s_len) { struct X2C_XHandler_STR anonym; X2C_PCOPY((void **)&s,s_len); if (X2C_XTRY(&anonym)) { if (usestdio) InOut_WriteString(s, s_len); X2C_XOFF(); } else X2C_XON(); X2C_XREMOVE(); X2C_PFREE(s); } /* end WrStr() */ extern void osi_WrCard(unsigned long n, unsigned long f) { struct X2C_XHandler_STR anonym; if (X2C_XTRY(&anonym)) { if (usestdio) InOut_WriteCard(n, f); X2C_XOFF(); } else X2C_XON(); X2C_XREMOVE(); } /* end WrCard() */ extern void osi_WrInt(unsigned long n, unsigned long f) { struct X2C_XHandler_STR anonym; if (X2C_XTRY(&anonym)) { if (usestdio) InOut_WriteInt((long)n, f); X2C_XOFF(); } else X2C_XON(); X2C_XREMOVE(); } /* end WrInt() */ extern void osi_WrLn(void) { struct X2C_XHandler_STR anonym; if (X2C_XTRY(&anonym)) { if (usestdio) InOut_WriteLn(); X2C_XOFF(); } else X2C_XON(); X2C_XREMOVE(); } /* end WrLn() */ extern void osi_WrStrLn(char s[], unsigned long s_len) { struct X2C_XHandler_STR anonym; X2C_PCOPY((void **)&s,s_len); if (X2C_XTRY(&anonym)) { if (usestdio) { InOut_WriteString(s, s_len); osi_WrLn(); } X2C_XOFF(); } else X2C_XON(); X2C_XREMOVE(); X2C_PFREE(s); } /* end WrStrLn() */ extern void osi_WrFixed(float x, long place, unsigned long witdh) { struct X2C_XHandler_STR anonym; if (X2C_XTRY(&anonym)) { if (usestdio) RealIO_WriteFixed(cid, x, place, witdh); X2C_XOFF(); } else X2C_XON(); X2C_XREMOVE(); } /* end WrFixed() */ static void h(unsigned long n) { char tmp; if (n<10UL) osi_WrStr((char *)(tmp = (char)(n+48UL),&tmp), 1u/1u); else osi_WrStr((char *)(tmp = (char)((n-10UL)+65UL),&tmp), 1u/1u); } /* end h() */ extern void osi_WrHex(unsigned long n, unsigned long f) { h(n/16UL&15UL); h(n&15UL); while (f>=3UL) { osi_WrStr(" ", 2ul); --f; } } /* end WrHex() */ extern char osi_FdValid(HANDLE fd) { return fd!=osi_InvalidFd; } /* end FdValid() */ extern float osi_floor(float x) { return (float)(long)X2C_TRUNCI(x,X2C_min_longint,X2C_max_longint); } /* end floor() */ static void startnet(void) { struct WSADATA wsa; if (!netstarted) netstarted = WSAStartup(514U, &wsa)==0L; } /* end startnet() */ extern void osi_CloseSock(unsigned fd) { long res; res = closesocket(fd); } /* end CloseSock() */ extern long osi_readsock(unsigned fd, char buf[], unsigned long buf_len, long len) { long res; res = recv(fd, (PBYTE)buf, len, 0L); /* IF res>=0 THEN WrInt(res, 1); WrStrLn(" recv"); END; */ if (res==0L) res = -1L; else if (res<0L) res = 0L; return res; } /* end readsock() */ extern long osi_sendsock(unsigned fd, char buf[], unsigned long buf_len, long len) { long ret; ret = send(fd, (PBYTE)buf, len, 0L); return ret; } /* end sendsock() */ extern unsigned osi_connectto(char url[], unsigned long url_len, char port[], unsigned long port_len) { p_hostent h0; unsigned s; struct sockaddr_in sai; struct sockaddr sa; long res; long nonbl; unsigned long * ipnum; unsigned long pnum; if (!aprsstr_StrToCard(port, port_len, &pnum)) return X2C_max_longcard; startnet(); h0 = gethostbyname(url); if ((h0==0 || h0->h_addr_list==0) || h0->h_length<4) { return X2C_max_longcard; } ipnum = (unsigned long *)(*h0->h_addr_list); s = socket(2L, 1L, 6L); if (s<0U) return X2C_max_longcard; nonbl = 1L; if (ioctlsocket(s, -2147195266L, (p_u_long) &nonbl)) { return X2C_max_longcard; } /* WSAAsyncSelect(s, hwndg, WM_SOCKET, CAST(CARDINAL, FD_CONNECT+FD_CLOSE+FD_READ+FD_WRITE)); */ memset((char *) &sai,(char)0,sizeof(struct sockaddr_in)); sai.sin_family = 2; sai.sin_port = htons((unsigned short)pnum); sai.sin_addr.s_addr = *ipnum; X2C_MOVE((char *) &sai,(char *) &sa,sizeof(struct sockaddr)); res = connect(s, &sa, (long)sizeof(struct sockaddr)); return s; } /* end connectto() */ extern unsigned osi_openudp(void) { unsigned s; long nonbl; startnet(); s = socket(2L, 2L, 0L); if (s==X2C_max_longcard) return s; nonbl = 1L; if (ioctlsocket(s, -2147195266L, (p_u_long) &nonbl)) { return X2C_max_longcard; } return s; } /* end openudp() */ extern long osi_bindudp(unsigned fd, unsigned long port) { struct sockaddr_in sai; struct sockaddr sa; long res; memset((char *) &sai,(char)0,sizeof(struct sockaddr_in)); sai.sin_family = 2; sai.sin_port = htons((unsigned short)port); sai.sin_addr.s_addr = 0UL; X2C_MOVE((char *) &sai,(char *) &sa,sizeof(struct sockaddr)); res = bind(fd, &sa, (long)sizeof(struct sockaddr)); /*WrInt(fd, 10);WrInt(res, 10);WrInt(port, 10);WrStrLn(" bindu"); */ return res; } /* end bindudp() */ extern long osi_socknonblock(unsigned fd) { return -1L; } /* end socknonblock() */ extern long osi_udpreceive(unsigned fd, char data[], unsigned long data_len, long len, unsigned long * fromport, unsigned long * fromip) { struct sockaddr_in sai; struct sockaddr sa; long res; long alen; alen = (long)sizeof(struct sockaddr); res = recvfrom(fd, (PBYTE)data, len, 0L, &sa, &alen); sai = *X2C_CAST(&sa,struct sockaddr,struct sockaddr_in, struct sockaddr_in *); *fromport = (unsigned long)ntohs(sai.sin_port); *fromip = ntohl(sai.sin_addr.s_addr); /*IF res>=0 THEN WrInt(res, 10);WrInt(fromport, 10);WrInt(fromip, 10); WrStrLn(" udpin"); END; */ return res; } /* end udpreceive() */ extern long osi_udpsend(long fd, char data[], unsigned long data_len, long len, unsigned long toport, unsigned long toip) { struct sockaddr_in sai; struct sockaddr sa; memset((char *) &sai,(char)0,sizeof(struct sockaddr_in)); sai.sin_family = 2; sai.sin_port = htons((unsigned short)toport); sai.sin_addr.s_addr = htonl(toip); sa = *X2C_CAST(&sai,struct sockaddr_in,struct sockaddr,struct sockaddr *); return sendto((unsigned)fd, (PBYTE)data, len, 0L, &sa, (long)sizeof(struct sockaddr)); } /* end udpsend() */ extern long osi_getunack(long fd) /* dummy, not possible in this os */ { return -1L; } /* end getunack() */ extern void osi_stoptxrx(long fd, long how) /* dummy, not functional on this os */ { } /* end stoptxrx() */ extern void osi_NextArg(char s[], unsigned long s_len) { if (argc>=Lib_ParamCount()) s[0UL] = 0; else { ++argc; Lib_ParamStr(s, s_len, argc); } } /* end NextArg() */ extern HANDLE osi_OpenAppend(char fn[], unsigned long fn_len) { HANDLE osi_OpenAppend_ret; X2C_PCOPY((void **)&fn,fn_len); osi_OpenAppend_ret = CreateFileA(fn, 0x4UL, 0x7U, 0, OPEN_ALWAYS, 0x80UL, 0); X2C_PFREE(fn); return osi_OpenAppend_ret; } /* end OpenAppend() */ extern HANDLE osi_OpenWrite(char fn[], unsigned long fn_len) { HANDLE osi_OpenWrite_ret; X2C_PCOPY((void **)&fn,fn_len); osi_OpenWrite_ret = CreateFileA(fn, 0x40000000UL, 0x7U, 0, CREATE_ALWAYS, 0x80UL, 0); X2C_PFREE(fn); return osi_OpenWrite_ret; } /* end OpenWrite() */ extern HANDLE osi_OpenRead(char fn[], unsigned long fn_len) { HANDLE osi_OpenRead_ret; X2C_PCOPY((void **)&fn,fn_len); osi_OpenRead_ret = CreateFileA(fn, 0x80000000UL, 0x7U, 0, OPEN_EXISTING, 0x80UL, 0); X2C_PFREE(fn); return osi_OpenRead_ret; } /* end OpenRead() */ extern void osi_Close(HANDLE fd) { CloseHandle(fd); } /* end Close() */ extern long osi_RdBin(HANDLE fd, char buf[], unsigned long buf_len, unsigned long size) { unsigned long rb; if (size>(buf_len-1)+1UL) size = (buf_len-1)+1UL; if (ReadFile(fd, (PVOID)buf, size, &rb, 0)) return (long)rb; return -1L; } /* end RdBin() */ extern void osi_WrBin(HANDLE fd, char buf[], unsigned long buf_len, unsigned long size) { unsigned long wb; if (size>(buf_len-1)+1UL) size = (buf_len-1)+1UL; WriteFile(fd, (LPCVOID)buf, size, &wb, 0); } /* end WrBin() */ extern void osi_SizeL(HANDLE fd, unsigned long * lo, unsigned long * hi) { *lo = GetFileSize(fd, hi); } /* end SizeL() */ extern unsigned long osi_Size(HANDLE fd) { unsigned long hi; unsigned long lo; osi_SizeL(fd, &lo, &hi); return lo; } /* end Size() */ extern void osi_Seek(HANDLE fd, unsigned long pos) { long hi; hi = 0L; SetFilePointer(fd, (long)pos, &hi, FILE_BEGIN); } /* end Seek() */ extern void osi_Seekcur(HANDLE fd, long rel) { unsigned long lo; long hii; /*WrInt(rel, 15); WrStrLn("=rel"); */ if (rel<0L) { hii = 0L; lo = SetFilePointer(fd, 0L, &hii, FILE_CURRENT); /*WrInt(lo, 15); WrInt(hii, 15); WrStrLn("=lo hi null"); */ if (hii==0L && (unsigned long) -rel>=lo) { osi_Seek(fd, 0UL); return; } hii = -1L; } else hii = 0L; /*WrInt(hii, 15); WrInt(rel, 15); WrStrLn("=hii rel"); */ SetFilePointer(fd, rel, &hii, FILE_CURRENT); } /* end Seekcur() */ extern void osi_STDIO(char on) { usestdio = on; if (usestdio) cid = StdChans_StdOutChan(); } /* end STDIO() */ extern void osi_BEGIN(void) { static int osi_init = 0; if (osi_init) return; osi_init = 1; Lib_BEGIN(); aprsstr_BEGIN(); RealIO_BEGIN(); StdChans_BEGIN(); IOChan_BEGIN(); InOut_BEGIN(); FileSys_BEGIN(); TimeConv_BEGIN(); Storage_BEGIN(); RealMath_BEGIN(); /* cid:=StdOutChan(); */ usestdio = 0; osi_InvalidFd = (HANDLE)-1U; argc = 0UL; netstarted = 0; } HANDLE osi_InvalidFd;