delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2014/05/07/08:30:15

X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f
From: david <peters DOT al AT gmx DOT com>
Newsgroups: comp.os.msdos.djgpp
Subject: djgpp_terminal
Date: Wed, 7 May 2014 12:14:12 +0000 (UTC)
Organization: Netfront http://www.netfront.net/
Lines: 168
Message-ID: <lkd82j$1g2q$1@adenine.netfront.net>
NNTP-Posting-Host: 90.177.26.126
Mime-Version: 1.0
X-Trace: adenine.netfront.net 1399464852 49242 90.177.26.126 (7 May 2014 12:14:12 GMT)
X-Complaints-To: news AT netfront DOT net
NNTP-Posting-Date: Wed, 7 May 2014 12:14:12 +0000 (UTC)
User-Agent: Pan/0.139 (Sexual Chocolate; GIT bf56508
git://git.gnome.org/pan2)
Bytes: 5172
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

I would ask about GPIB terminal in DJGPP ....

usleep is not defined, so poll function is Linux tooo

#include "lptgpib.h"
#include <stdio.h>
#include <string.h>
#include <X11/Xpoll.h>
#include <X11/Xos_r.h>
#include <X11/Xlibint.h>
#include <unistd.h>
#include <assert.h>
#include <sys/io.h>
#include <limits.h>
#include <pthread.h>
#include <pc.h>

static const int zdroj_adresa=10;

// lptgpib.c
#define get_control() (inportb(lpt_base+2) ^ 0x04)
#define put_control(x) outportb(lpt_base+2, (x) ^ 0x04)
#define TRI 0x20 /* tristate data lines */
#define NDAC 0x04 /* LPT pin 16 */
#define DAV  0x01 /* LPT pin 1  */
#define NRFD 0x02 /* LPT pin 14 */

extern int lpt_base;

int main(int argc,char **argv) {
  lptgpib_init(0x378);
  int init=1;
  for (;;) {

    // GPIB -> obrazovka
    if (init) {
      fprintf(stderr,"Inicializuji port... ");
      lptgpib_command(UNL);
      lptgpib_command(MLA+0);
      lptgpib_command(MTA+zdroj_adresa);
      fprintf(stderr,"hotovo.\n");
      init=0;
    }
    put_control(TRI | NDAC);    /* clear NRFD */
    usleep(1000000/10);
    if (get_control()&DAV) {    /* wait for DAV */
      fprintf(stderr,"ctu znak...\n");
      char flags,val=lptgpib_read_byte(&flags);
      if (flags&ATN)
        lptgpib_print_command(val);
      else
        fprintf(stderr,"precten znak: %02x (%c)\n",val,val);
    }
    put_control(TRI | NDAC | NRFD );  /* back to default state */
    usleep(1000000/10); /* chvili pockat, asi zbytecne, jen aby to bylo 
videt na portu */

    // klavesnice -> GPIB
    struct pollfd pollfd;
    memset(&pollfd,0,sizeof pollfd);
    pollfd.fd=0;
    pollfd.events=POLLIN;
    int i=poll(&pollfd,1,0);
    assert(i==0||i==1);
    if (i==1) {
      char str[LINE_MAX],*s=fgets(str,sizeof(str),stdin);
      assert(s==str);
      s=strchr(str,'\n');
      assert(s);
      assert(s[1]==0);
      *s=0;
      fprintf(stderr,"zapisuji radek: %s\n",str);
      lptgpib_write(zdroj_adresa,str);
      fprintf(stderr,"zapsan radek.\n");
      init=1;
    }

  }
}

I tried with timeout >>

#include "lptgpib.h"
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <unistd.h>
#include <assert.h>
#include <sys/io.h>
#include <sys/types.h>
#include <x11/Xpoll.h>
#include <limits.h>
#include <pc.h>

static const int zdroj_adresa=1;

// lptgpib.c
#define get_control() (inportb(lpt_base+2) ^ 0x04)
#define put_control(x) outportb(lpt_base+2, (x) ^ 0x04)
#define TRI 0x20 /* tristate data lines */
#define NDAC 0x04 /* LPT pin 16 */
#define DAV  0x01 /* LPT pin 1  */
#define NRFD 0x02 /* LPT pin 14 */

extern int lpt_base;

int main(int argc,char **argv) {
  lptgpib_init(0x378);
  int init=1;
  for (;;) {

    // GPIB -> obrazovka
    if (init)
      fprintf(stderr,"Inicializuji port... ");
    lptgpib_command(UNL);
    lptgpib_command(MLA+0);
    lptgpib_command(MTA+zdroj_adresa);
    if (init)
      fprintf(stderr,"hotovo.\n");
    init=0;
    put_control(TRI | NDAC);    /* clear NRFD */
    usleep(1000000/10);
    if (get_control()&DAV) {    /* wait for DAV */
      fprintf(stderr,"ctu znak...\n");
      char flags,val=lptgpib_read_byte(&flags);
      if (flags&ATN)
        lptgpib_print_command(val);
      else
        fprintf(stderr,"precten znak: %02x (%c)\n",val,val);
    }
    put_control(TRI | NDAC | NRFD );  /* back to default state */
    usleep(1000000/10); /* chvili pockat, asi zbytecne, jen aby to bylo 
videt na portu */

    // klavesnice -> GPIB

    struct timeval *timeout;
    memset(&read_fds,0,sizeof read_fds);
    FD_ZERO(&read_fds);
    FD_SET(0, &read_fds);

    timeout.tv_sec = 0;
    timeout.tv_usec = 0;
    int i=select(1,&read_fds,NULL,NULL,&timeout);
    assert(i==0||i==1);
    if (i==1) {
      char str[1000],*s=fgets(str,sizeof(str),stdin);
      assert(s==str);
      s=strchr(str,'\n');
      assert(s);
      assert(s[1]==0);
      *s=0;
      fprintf(stderr,"zapisuji radek: %s\n",str);
      lptgpib_write(zdroj_adresa,str);
      fprintf(stderr,"zapsan radek.\n");
    }

  }
}

is There some way to write correct terminal, read,write function in DJGPP??
Thanks for any idea

David



--- news://freenews.netfront.net/ - complaints: news AT netfront DOT net ---

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019