home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / TELECOM / stg_v4.lzh / ss_misc.c < prev    next >
C/C++ Source or Header  |  1994-11-11  |  3KB  |  196 lines

  1. #include "stglib.h"
  2.  
  3. #define MAX_Paths 32
  4.  
  5. /*
  6.  * _ss_mode(path,code)
  7.  *
  8.  * code:     0 = normal
  9.  *         1 = no echo
  10.  *         2 = disable line buffering [UNIX]
  11.  *        -1 = RAW
  12.  *
  13. */
  14.  
  15. #ifdef _OS9
  16.  
  17. #include <sgstat.h>
  18.  
  19. struct sgbuf *apsTermMode[MAX_Paths], *malloc();
  20.  
  21. _ss_mode(path,code)
  22. int path,code;
  23. {
  24.     struct sgbuf sTempMode;
  25.  
  26.     if (!apsTermMode[path])
  27.     {
  28.         apsTermMode[path]=malloc(sizeof(struct sgbuf));
  29.         if (!apsTermMode[path])
  30.             return(ERR);
  31.         if (_gs_opt(path,apsTermMode[path])==ERR)
  32.             return(ERR);
  33.     }
  34.  
  35.     memcpy(&sTempMode,apsTermMode[path],sizeof(struct sgbuf));
  36.  
  37.     if (code&1)
  38.         sTempMode.sg_echo=0;
  39.  
  40.     if (code<0)
  41.     {
  42.         sTempMode.sg_pause=0;
  43.         sTempMode.sg_eorch=0;
  44.         sTempMode.sg_eofch=0;
  45.         sTempMode.sg_rlnch=0;
  46.         sTempMode.sg_dulnch=0;
  47.         sTempMode.sg_psch=0;
  48.         sTempMode.sg_kbich=0;
  49.         sTempMode.sg_kbach=0;
  50.         sTempMode.sg_xon=0;
  51.         sTempMode.sg_xoff=0;
  52.     }
  53.     if (_ss_opt(path,&sTempMode)==ERR)
  54.         return(ERR);
  55.  
  56.     /* fake a write to force update of settings */
  57.     write(path,"",0);
  58.  
  59.     if (!code)
  60.     {
  61.         free(apsTermMode[path]);
  62.         apsTermMode[path]=0;
  63.     }
  64.     return(0);
  65. }
  66.  
  67. _ss_own(path,uid)
  68. int path;
  69. int uid;
  70. {
  71.     unsigned char buf[32];
  72.  
  73.     _gs_gfd(path,buf,32);
  74.     buf[1]=(uid&0x00FF0000)>>16;
  75.     buf[2]=(uid&0x000000FF);
  76.     return(_ss_pfd(path,buf));
  77. }
  78.  
  79. fchown(path,uid,gid)
  80. int path;
  81. int uid;
  82. int gid;
  83. {
  84.     /* ignore gid - not in OS-9 */
  85.     return(_ss_own(path,uid));
  86. }
  87.  
  88. #endif
  89.  
  90. #ifdef _UNIX
  91.  
  92. #include <termio.h>
  93. struct termio *apsTermMode[MAX_Paths];
  94.  
  95. #include <sys/filio.h>
  96. _ss_mode(path,code)
  97. int path,code;
  98. {
  99.     struct termio sTempMode;
  100.  
  101.     if (!apsTermMode[path])
  102.     {
  103.         apsTermMode[path]=
  104.             (struct termio *)malloc(sizeof(struct termio));
  105.         if (!apsTermMode[path])
  106.             return(ERR);
  107.         ioctl(path,TCGETA,apsTermMode[path]);
  108.     }
  109.     memcpy(&sTempMode,apsTermMode[path],sizeof(struct termio));
  110.  
  111.     if (code&1)    /* just turn echo off */
  112.     {
  113.         sTempMode.c_lflag&=~ECHO;
  114. /*        sTempMode.c_cc[4]=1; */
  115.     }
  116.  
  117.     if (code&2)    /* turn off line buffering */
  118.     {
  119.         /* local flags */
  120.         sTempMode.c_lflag&=~ICANON;    /* no canon processing */
  121.     }
  122.  
  123.     if (code<0)    /* RAW MODE */
  124.     {
  125.         /* input flags */
  126.         sTempMode.c_iflag=0;
  127.  
  128.         /* output flags */
  129.         sTempMode.c_oflag=0;
  130.  
  131.         /* control flags */
  132.         sTempMode.c_cflag&=~PARENB;
  133.         sTempMode.c_cflag|=CS8;
  134.  
  135.         /* local modes */
  136.         sTempMode.c_lflag=0;
  137.     }
  138.  
  139.     ioctl(path,TCSETAW,&sTempMode);
  140.     if (!code)
  141.     {
  142.         free(apsTermMode[path]);
  143.         apsTermMode[path]=0;
  144.     }
  145.     return(0);
  146. }
  147.  
  148. _gs_rdy(path)
  149. int path;
  150. {
  151.     long lReady;
  152.  
  153.     ioctl(path,FIONREAD,&lReady);
  154.  
  155.     if (!lReady)
  156.         return(-1);
  157.  
  158.     return((int)lReady);
  159. }
  160.  
  161. long
  162. _gs_size(path)
  163. int path;
  164. {
  165.     long save,size;
  166.  
  167.     save=lseek(path,0l,1);
  168.     size=lseek(path,0l,2);
  169.     lseek(path,save,0);
  170.     return(size);
  171. }
  172.  
  173. int
  174. _ss_size(path,size)
  175. int path;
  176. long size;
  177. {
  178.     return(truncate(path,size));
  179. }
  180.  
  181. /*
  182. _ss_own(path,uid)
  183. int path;
  184. int uid;
  185. {
  186.     return(fchown(path,uid,-1));
  187. }
  188. */
  189.  
  190. _ss_lock()
  191. {
  192.     return(0);
  193. }
  194.  
  195. #endif
  196.