-
Notifications
You must be signed in to change notification settings - Fork 2
/
testclient.f
142 lines (115 loc) · 3.48 KB
/
testclient.f
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
require unix/socket.fs
require 9p4.f
warnings off
0 value mysock
: connect ( a u port -> ) open-socket to mysock ;
: write ( a u -> ) mysock write-socket ;
: read ( -> n ) mysock 9p-rxbuf read-socket nip ;
: ?abort ( flag a u -> )
>r >r if
." error: " r> r> type abort
then
r> drop r> drop ;
: .qfield ( n -> ) s>d <# #s #> type ;
: .qtype ( a -> ) qid-type le1@ .qfield ;
: .qversion ( a -> ) qid-version le4@ decimal .qfield ;
: .qpath ( a -> ) qid-path le8@ hex .qfield ;
: .qid ( a -> )
base @ >r
." (" dup .qpath space dup .qversion space .qtype ." )"
r> base ! ;
: .qids ( a u -> )
1- for
dup .qid space /qid +
next
drop ;
: .mode ( u -> ) base @ >r 8 base ! . r> base ! ;
: .stat ( 'stat len -> )
drop
." size : " dup stat-size le2@ . cr
." type : " dup stat-type le2@ . cr
." dev : " dup stat-dev le4@ . cr
." qid : " dup stat-qid .qid cr
." mode : " dup stat-mode le4@ .mode cr
." atime : " dup stat-atime le4@ . cr
." mtime : " dup stat-mtime le4@ . cr
." length: " dup stat-length le8@ . cr
." name : " dup stat-name 9p-s@ type cr
." uid : " dup stat-uid 9p-s@ type cr
." gid : " dup stat-gid 9p-s@ type cr
." muid : " stat-muid 9p-s@ type cr ;
s" 127.0.0.1" 9999 connect
Tversion write
read Rversion
." connection msize: " . cr
." protocol version: " type cr
cr
-1 value rootfid
s" iru" s" " Tattach write to rootfid read Rattach
." root fid: " rootfid . cr
." root qid: " .qid cr
cr
rootfid clonefid write
." root clone fid: " . cr read Rwalk
." #qids walked : " . cr drop \ drop pointer to array of qids
cr
-1 value rfid
s" /etc/hosts" 1 rootfid Twalk write to rfid
." read fid : " rfid . cr read Rwalk
." #qids walked: " dup . cr
." qids : " .qids cr
cr
s" hosts" s" etc" 2 rootfid Twalk write
." final fid : " . cr read Rwalk
." #qids walked: " dup . cr
." qids : " .qids cr
cr
rfid 0 Topen write read Ropen
." opened: " rfid . cr
." iounit: " . cr
." qid : " .qid cr
cr
rfid 0 32 Tread write read Rread
." #read: " dup . cr
." --- " cr
type cr
." --- " cr
cr
-1 value dirfid
s" /tmp" 1 rootfid Twalk write to dirfid
." dir fid: " dirfid . cr read Rwalk -1 = s" can't walk to dir" ?abort drop
dirfid s" aaa" 420 1 Tcreate write read Rcreate
over 0 = s" can't create file" ?abort
." created!" cr
." iounit: " . cr
." qid : " .qid cr
dirfid Tclunk write read Rclunk
cr
-1 value wfid
s" /tmp/aaa" 1 rootfid Twalk write to wfid
." write fid: " wfid . cr read Rwalk -1 = s" can't walk to file" ?abort drop
wfid 1 Topen write read Ropen drop drop
wfid 0 s" written by 9p4" Twrite write read Rwrite
." #written : " . cr
cr
wfid Tstat write read Rstat over swap .stat
constant wstat
\ change name, mode and group of the file
stat-dont-touch wstat stat-type le2!
stat-dont-touch wstat stat-dev le4!
stat-dont-touch wstat stat-qid qid-type le1!
stat-dont-touch wstat stat-qid qid-version le4!
stat-dont-touch wstat stat-qid qid-path le8!
421 wstat stat-mode le4!
stat-dont-touch wstat stat-atime le4!
stat-dont-touch wstat stat-mtime le4!
stat-dont-touch wstat stat-length le8!
s" abc" wstat stat-name 9p-s!
stat-s-dont-touch wstat stat-uid 9p-s!
s" wheel" wstat stat-gid 9p-s!
stat-s-dont-touch wstat stat-muid 9p-s!
wstat wfid Twstat write read Rwstat
wfid Tstat write read Rstat cr .stat
wfid Tremove write read Rremove
rootfid Tclunk write
bye