xref: /csrg-svn/usr.bin/tn3270/api/apilib.c (revision 31202)
1*31202Sminshall #define	LINT_ARGS
2*31202Sminshall #include <stdio.h>
3*31202Sminshall 
4*31202Sminshall #include "../api/api.h"
5*31202Sminshall 
6*31202Sminshall int api_sup_errno = 0;
7*31202Sminshall 
8*31202Sminshall int
9*31202Sminshall api_issue(ah, al, bh, bl, cx, dx, parms)
10*31202Sminshall int
11*31202Sminshall     ah,
12*31202Sminshall     al,
13*31202Sminshall     bh,
14*31202Sminshall     bl,
15*31202Sminshall     cx,
16*31202Sminshall     dx;
17*31202Sminshall char *parms;
18*31202Sminshall {
19*31202Sminshall     union REGS regs;
20*31202Sminshall     struct SREGS sregs;
21*31202Sminshall     static int oures = 0;
22*31202Sminshall 
23*31202Sminshall     if (oures == 0) {
24*31202Sminshall 	segread(&sregs);
25*31202Sminshall 	oures = sregs.es;
26*31202Sminshall     }
27*31202Sminshall     regs.h.ah = ah;
28*31202Sminshall     regs.h.al = al;
29*31202Sminshall     regs.h.bh = bh;
30*31202Sminshall     regs.h.bl = bl;
31*31202Sminshall     regs.x.cx = cx;
32*31202Sminshall     regs.x.dx = dx;
33*31202Sminshall     sregs.es = oures;
34*31202Sminshall     regs.x.di = (int) parms;
35*31202Sminshall 
36*31202Sminshall     int86x(API_INTERRUPT_NUMBER, &regs, &regs, &sregs);
37*31202Sminshall     if (regs.h.cl != 0) {
38*31202Sminshall 	api_sup_errno = regs.h.cl;
39*31202Sminshall 	return -1;
40*31202Sminshall     } else {
41*31202Sminshall 	return 0;
42*31202Sminshall     }
43*31202Sminshall }
44*31202Sminshall 
45*31202Sminshall 
46*31202Sminshall int
47*31202Sminshall api_name_resolve(name)
48*31202Sminshall char *name;
49*31202Sminshall {
50*31202Sminshall     NameResolveParms parms;
51*31202Sminshall     int i;
52*31202Sminshall     union REGS regs;
53*31202Sminshall     struct SREGS sregs;
54*31202Sminshall     static int oures = 0;
55*31202Sminshall 
56*31202Sminshall     for (i = 0; i < sizeof parms.gate_name; i++) {
57*31202Sminshall 	if (*name) {
58*31202Sminshall 	    parms.gate_name[i] = *name++;
59*31202Sminshall 	} else {
60*31202Sminshall 	    parms.gate_name[i] = ' ';
61*31202Sminshall 	}
62*31202Sminshall     }
63*31202Sminshall 
64*31202Sminshall     if (oures == 0) {
65*31202Sminshall 	segread(&sregs);
66*31202Sminshall 	oures = sregs.es;
67*31202Sminshall     }
68*31202Sminshall     regs.h.ah = NAME_RESOLUTION;
69*31202Sminshall     regs.h.al = 0;
70*31202Sminshall     regs.h.bh = 0;
71*31202Sminshall     regs.h.bl = 0;
72*31202Sminshall     regs.x.cx = 0;
73*31202Sminshall     regs.x.dx = 0;
74*31202Sminshall     sregs.es = oures;
75*31202Sminshall     regs.x.di = (int) &parms;
76*31202Sminshall 
77*31202Sminshall     int86x(API_INTERRUPT_NUMBER, &regs, &regs, &sregs);
78*31202Sminshall     if (regs.h.cl != 0) {
79*31202Sminshall 	api_sup_errno = regs.h.cl;
80*31202Sminshall 	return -1;
81*31202Sminshall     } else {
82*31202Sminshall 	return regs.x.dx;
83*31202Sminshall     }
84*31202Sminshall }
85