aboutsummaryrefslogtreecommitdiff
path: root/sys/ki/kfiotx.x
blob: b329c6743351ca3fb25ebff03fcea5050f7dacc7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.

include	<mach.h>
include	<config.h>
include	<fio.h>
include	"ki.h"

# KFIOTX -- Text file driver.

procedure kopntx (osfn, mode, chan)

char	osfn[ARB]		# packed os filename
int	mode			# access mode
int	chan			# receives channel code

int	server
int	ki_connect(), ki_getchan()
include	"kii.com"

begin
	server = ki_connect (osfn)

	if (server == NULL) {
	    call strpak (p_sbuf[p_arg[1]], p_sbuf, SZ_SBUF)
	    call zopntx (p_sbuf, mode, chan)
	    if (chan != ERR)
		chan = ki_getchan (server, chan)
	} else
	    call kt_zopn (KI_ZFIOTX, osfn, mode, chan)
end


procedure kclstx (chan, status)

int	chan
int	status
include	"kichan.com"

begin
	# Possible if an abort occurs during the open.
	if (chan <= 0) {
	    status = OK
	    return
	}

	if (k_node[chan] == NULL) {
	    call zclstx (k_oschan[chan], status)
	    call ki_freechan (chan)
	} else
	    call kt_zcls (KI_ZFIOTX, chan, status)
end


procedure kgettx (chan, text, maxch, status)

int	chan
char	text[maxch]
int	maxch, status
include	"kichan.com"

begin
	if (k_node[chan] == NULL)
	    call zgettx (k_oschan[chan], text, maxch, status)
	else
	    call kt_zget (KI_ZFIOTX, chan, text, maxch, status)
end


procedure kputtx (chan, text, nchars, status)

int	chan
char	text[nchars]
int	nchars, status
include	"kichan.com"

begin
	if (k_node[chan] == NULL)
	    call zputtx (k_oschan[chan], text, nchars, status)
	else
	    call kt_zput (KI_ZFIOTX, chan, text, nchars, status)
end


procedure kflstx (chan, status)

int	chan
int	status
include	"kichan.com"

begin
	if (k_node[chan] == NULL)
	    call zflstx (k_oschan[chan], status)
	else
	    call kt_zfls (KI_ZFIOTX, chan, status)
end


procedure ksektx (chan, loffset, status)

int	chan
long	loffset
int	status
include	"kichan.com"

begin
	if (k_node[chan] == NULL)
	    call zsektx (k_oschan[chan], loffset, status)
	else
	    call kt_zsek (KI_ZFIOTX, chan, loffset, status)
end


procedure knottx (chan, loffset)

int	chan
long	loffset
include	"kichan.com"

begin
	if (k_node[chan] == NULL)
	    call znottx (k_oschan[chan], loffset)
	else
	    call kt_znot (KI_ZFIOTX, chan, loffset)
end


procedure kstttx (chan, what, lvalue)

int	chan
int	what
long	lvalue
include	"kichan.com"

begin
	if (k_node[chan] == NULL)
	    call zstttx (k_oschan[chan], what, lvalue)
	else {
	    # Querying the text file status parameters is slow over the net,
	    # and they are essentially constants anyhow, so just return the
	    # expected values.
	    #
	    # call kt_zstt (KI_ZFIOTX, chan, what, lvalue)

	    switch (what) {
	    case FSTT_BLKSIZE:
		lvalue = 1
	    case FSTT_FILSIZE:
		lvalue = 1
	    case FSTT_OPTBUFSIZE:
		lvalue = SZ_LINE
	    case FSTT_MAXBUFSIZE:
		lvalue = 0
	    default:
		lvalue = ERR
	    }
	}
end