|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T a
Length: 4889 (0x1319)
Types: TextFile
Names: »actions5.c«
└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape
└─⟦eba4602b1⟧ »./isode-5.0.tar.Z«
└─⟦d3ac74d73⟧
└─⟦this⟧ »isode-5.0/vt/actions5.c«
/* actions5.c - VTPM: FSM sector 5 actions */
#ifndef lint
static char *rcsid = "$Header: /f/osi/vt/RCS/actions5.c,v 6.0 89/03/18 23:45:56 mrose Rel $";
#endif
/*
* $Header: /f/osi/vt/RCS/actions5.c,v 6.0 89/03/18 23:45:56 mrose Rel $
*
*
* $Log: actions5.c,v $
* Revision 6.0 89/03/18 23:45:56 mrose
* Release 5.0
*
*/
/*
* NOTICE
*
* Acquisition, use, and distribution of this module and related
* materials are subject to the restrictions of a license agreement.
* Consult the Preface in the User's Manual for the full terms of
* this agreement.
*
*/
#include "vtpm.h"
#include "sector1.h"
/************************************************************************/
/* This file contains the functions that are executed when the */
/* VT Protocol machine is in a Sector 5 state and a protocol */
/* event occurs. The state transition matrix is specified in */
/* Table 32 of ISO 9041 (July 1987 version). The actions which */
/* this collection of functions perform are specified in Table 40 */
/* of ISO 9041. */
/************************************************************************/
extern int sd; /*Global Session Descriptor (ISODE) */
/* xx1x xxxx = awaiting ack from peer i.e., 420 */
/* xxxx xx1x = awaiting ack from user */
/* T = got token, N = no got token */
/*
req: usr==>vtpm
ind: vtpm==>usr
*/
int
ce_104(pe) /* common event 104 */
PE pe;
{
/* if (vnt > 0) */
if(pe != NULLPE) vdatind(SEQUENCED,pe);
vnt = 0;
return(OK);
}
int
ce_105() /* common event 105 */
{
/* if (vns > 0) for(... */
if(p_ondq != NULLPE)
(void)p_data(p_ondq); /* send NDQ */
vns = 0;
return(OK);
}
/* ARGSUSED */
int
a5_0(pe) /*VDATreq-sqtr in states 400B or 402B */
/* V data request addressing sequenced trigger co */
PE pe;
{
return(ce_105());
/*
==> SAMESTATE;
*/
}
/* ARGSUSED */
int
a5_1(pe) /*VDATreq-n in states 400B, 402B or 40T */
/* V data request addressing sequenced trigger co */
PE pe;
{
/*
vns++;
==> SAMESTATE
*/
return(ce_105()); /*Autonomous Event to Ship it*/
}
int
a5_2(pe) /*NDQ-tr in states 400B, 420B */
PE pe;
{
/*
vnt++;
*/
return(ce_104(pe));
/*
==> SAMESTATE
*/
}
int
a5_3(pe) /*NDQ-ntr in states 400B, 420B */
PE pe;
{
/*
vnt++;
*/
/*
==> SAMESTATE
*/
return(ce_104(pe)); /*Autonomous Event to Deliver to User*/
}
int
a5_5(pe) /* VBRKreq */
PE pe;
{
vtok = 0; /* giving the token away */
vnt = 0;
vns = 0;
/* vtkp was set in vbrkreq so it could be coded in to the pe */
(void)p_resync_req(pe,SYNC_RESTART); /* send break request */
state = S5_61;
return(OK);
}
int
a5_6(pe) /* VBRKrsp in state 62 */
PE pe;
{
(void)p_resync_resp(pe); /* send out break response */
if (vsmd && vtok)
state = S5_40T;
else
if (vsmd)
state = S5_40N;
else {
vtkp = INITIATOR;
if (vtok)
vtkp = ACCEPTOR;
state = S5_400B;
}
return(OK);
}
int
a5_9(pe) /*VDELreq in states 400B, 402B */
PE pe;
{
if (dcno) /* no delivery control */
{
advise(LLOG_DEBUG,NULLCP,"a5_9: dcno hasn't been set");
/* ==> SAMESTATE */
return(NOTOK);
}
(void)ce_105();
/* send out dlq */
/* this will be replace by the new-fangled pepy schtuff;
will use this now for compatability */
(void)p_data(pe);
state = (vra) ? state + 2 : state; /* pretty neeto eh? */
return(OK);
}
int
a5_11(pe) /*HDQ request in 400B*/
PE pe;
{
(void) p_typed_data(pe);
return(OK);
}
/*ARGSUSED*/
int
a5_17(pe) /*VRELreq in states 400B */
PE pe;
{
/* ce_105(); */
sector = 1;
if(vtok)
{
state = S1_51Q; /*Must change state first because
vt_disconnect gets RLR & calls
state machine again. */
vt_disconnect(); /*May be only TEMP*/
}
else
{
request_token();
/*Need call to ISODE to request token*/
state = S1_50B;
}
return(OK);
}
int
a5_28(pe) /*UDQ request in 400B*/
PE pe;
{
(void) p_typed_data(pe);
return(OK);
}
int
a5_31(pe) /* BKR in 61 */
PE pe;
{
if (vsmd && vtok) state = S5_40T;
else if (vsmd) state = S5_40N;
else state = S5_400B;
vbrkcnf(pe);
return(OK);
}
int
a5_32(pe) /* BKQ could occur in any state except 62 */
PE pe;
{
vnt = 0;
vns = 0;
/*
vbrkind clears queues etc.
and then map the break character to user
and sets vtok to 1
(we should have received the token)
*/
state = S5_62;
vbrkind(pe);
return(OK);
}
int
a5_34(pe) /*UDQ in 400B*/
PE pe;
{
if(pe != NULLPE) vudatind(pe);
return(OK);
}
int
a5_35(pe) /* DEL in states 400B, 420B */
PE pe;
{
if ((vra = prim2flag(pe)) == NOTOK)
adios("a5_35: bogus PDU (%s)", pe_error (pe -> pe_errno));
(void)ce_104(NULLPE);
vdelind(pe,vra);
state = (vra) ? state + 2 : state;
return(OK);
}
int
a5_38(pe) /* RLQ in states 400B */
PE pe;
{
(void)ce_104(pe);
sector = 1;
state = S1_51R;
(void)vrelind();
return(OK);
}
int
a5_106(pe)
PE pe;
{
if(pe != NULLPE) vhdatind(pe);
return(OK);
}