DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T s

⟦13b912da1⟧ TextFile

    Length: 2340 (0x924)
    Types: TextFile
    Names: »slave_io.c«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Bridge/slave_io.c« 

TextFile

#include "talk.h"
#include <stdio.h>
#include <errno.h>
#include <sys/time.h>

#define A_LONG_TIME 10000000
#define STDIN_MASK (1<<fileno(stdin))	/* the bit mask for standard
					   input */
extern int errno;

/*
 * The routine to do the actual talking
 */


talk()
{	char	ch,ins[2][40];
	static char *im[2]={"Conversation","Input       "};
	int	rtn, i, ityp,iwn,wn, row, col, readmask,read_template;
	int	sockt_mask,read_set;
	BMSG	buf;
	int	ki[2],nb,nbuf=sizeof buf;
	struct	timeval wait;

	ityp=1;iwn=12;ki[0]=ki[1]=0;
	wmove(comwin[18].x_win,0,0);
	wprintw(comwin[18].x_win,"%s",im[ityp]);
	wrefresh(comwin[18].x_win);
	sockt_mask=(1<<sockt);
	read_template=sockt_mask | STDIN_MASK;
	forever {
		read_set=read_template;
		wait.tv_sec=100000;
		wait.tv_usec=0;
		select(32,&read_set,0,0,&wait);
		if(read_set&sockt_mask){
			nb=read(sockt,&buf,nbuf);
		    if(nb==nbuf){
			wn=WN;row=ROW;col=COL;
			if(row<80) wmove(comwin[wn].x_win,row,col);
                        if(wn<14&&STR[0]=='\\'){endwin();exit();}
			if(STR[0]=='Z'|wn==12) wclear(comwin[wn].x_win);
                        if(STR[0]!='Z') wprintw(comwin[wn].x_win,"%s",STR);
			wrefresh(comwin[wn].x_win);
		    }
		}
		if(read_set&STDIN_MASK){
			read(0,&ch,1);
			if(ityp==1&&ch<='z'&&ch>='a') ch&=223;
			switch(ch){
			     case 27:   ityp=1-ityp;iwn=28-iwn;
					wmove(comwin[18].x_win,0,0);
					wprintw(comwin[18].x_win,"%s",im[ityp]);
					wrefresh(comwin[18].x_win);
					break;
			     case '\b': if(ki[ityp]>0){
						ki[ityp]--;
						waddch(comwin[iwn].x_win,ch);
						wrefresh(comwin[iwn].x_win);
					}
					break;
			     default:   ins[ityp][ki[ityp]++]=ch;
					waddch(comwin[iwn].x_win,ch);
					wrefresh(comwin[iwn].x_win);
					
			}
			if(ki[ityp]>=comwin[iwn].x_ncols-1&&ch!='\n'){
				ch='\n';ins[ityp][ki[ityp]++]=ch;
				waddch(comwin[iwn].x_win,ch);
				wrefresh(comwin[iwn].x_win);
			}
			if(ch=='\n'){
				if(ityp){wclear(comwin[iwn].x_win);
					 wrefresh(comwin[iwn].x_win);}
				TYPE=ityp;ins[ityp][ki[ityp]]='\0';
				ROW=81;ki[ityp]=0;
				strcpy(STR,ins[ityp]);
				write(sockt,&buf,nbuf);
			}
		}
	}
}


p_error(string) 
char *string;
{
    char *sys;

    sys = "Unknown error";


    printf("[%s : %s (%d)]\n", string, sys, errno);
    quit();
}

    /* display string in the standard location */

message(string)
char *string;
{
}