-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathmain.mac
175 lines (168 loc) · 3.38 KB
/
main.mac
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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
;----- IS OPEN COMMAND MACROS ----------------
MACRO _isopencommand in_str,exit
_cmpstr cmd_bufer, cmd_open, 4
OR A
JZ lex
XOR A
LD (termcmd),A
LD HL,connected
LD A,(HL)
OR A
JNZ oc3 ;if alredy connected
LD HL,conn_descr
LD A,(HL)
CP 0FFh
JNZ lex ;if descriptor is bad
_cur_off
_closew
_printw wnd_status
_prints msg_connecting
;gethostbyname
ld hl, cmd_bufer+5 ;//Set ptr to 1st symbol of hostname. command open[space]hostname[space]port.
ld bc,#FFFF
oloop INC BC
LD A,(HL)
INC HL
CP 32
JZ oc0 ;//find space symbol. it means that hostname is end
OR A
JNZ oloop ;//check zero code. it means that hostname is end. TODO: neet to set default port
oc0 LD A,B ;//check length of hostname. must be > 0
OR A
JNZ oc1
LD A,C
OR A
JZ get_err ;//if hostname length is zero
PUSH HL
oc5 LD A,(HL) ;//find port number or rezo
CP 32
JZ oc6
OR A
JZ oc7
JR oc8
oc6 INC HL
JP oc5
oc7 LD DE,23
LD (server_port),DE
JR oc9
oc8 CALL strings.texttonum
LD (server_port),DE
oc9 POP HL
ld HL, cmd_bufer+5
oc1 CALL sockets.gethostbyname ;//get ip address
or a:jp nz,get_err
ld (server_addr),hl,(server_addr+2),bc
;create socket ;//create socket
socket AF_INET,SOCK_STREAM,0
cp #FF:jp z,get_err
ld (conn_descr),a
;bind my socket
bind conn_descr,my_addr ;//bind to address ????
or a:jp nz,get_err
;connect to host
connect conn_descr,server_addr ;//create connection
or a:jr nz,get_err
_closew
_prints msg_openok
LD A,1
LD (connected),A
CALL showstatus
JP exit
get_err _closew
_prints msg_openerr
get_er XOR A
LD (connected),A
CALL showstatus
JP exit
oc3 _closew
_prints msg_alredyopen
jr get_er
oc4 _closew
_prints msg_fdproblem
jr get_er
lex
ENDM
;--- IS CLOSE COMMAND MACROS ----------------------------------------------------------------------
MACRO _isclosecommand in_str,exit
_cmpstr cmd_bufer, cmd_close, 5
OR A
JZ cl2
XOR A
LD (termcmd),A
_cur_off
_closew
_isconnected
JNZ l2 ;if not connected
LD A,(conn_descr)
CP 0FFh
JZ l2 ;if descriptor is bad
CALL sockets.close
OR A
JNZ l21
_prints msg_connectclosed
LD A,#FF
LD (conn_descr),A
XOR A
LD (connected),A
JR l2
l21 _prints msg_closeerr
l2 CALL showstatus
_cur_on
JP exit
cl2
ENDM
;---IS HELP COMMAND MACROS ----------------------------------------------------------------------
MACRO _ishelpcommand in_str,exit
_cmpstr cmd_bufer, cmd_help, 4
OR A
JP Z,l3
_closew
_prints msg_help
_printw wnd_cmd
_cur_on
JP exit
l3
ENDM
;---IS ABOUT COMMAND MACROS ----------------------------------------------------------------------
MACRO _isaboutcommand in_str,exit
_cmpstr cmd_bufer, cmd_about, 5
OR A
JP Z,l4
_closew
_prints msg_about
_printw wnd_cmd
_cur_on
JP exit
l4
ENDM
;---IS EXIT COMMAND MACROS ----------------------------------------------------------------------
MACRO _isexitcommand in_str,exit
_cmpstr cmd_bufer, cmd_exit, 4
OR A
JP Z,l5
JP main.exit
l5
ENDM
;--- JZ (JP Z) MACROS ----------------------------------------------------------------------
MACRO JZ addr
JP Z,addr
ENDM
;----JNZ (JP NZ) MACROS---------------------------------------------------------------------
MACRO JNZ addr
JP NZ, addr
ENDM
;-----------------------------
MACRO _isconnected
LD A,(connected)
CP 1
ENDM
;-----------------------------
MACRO _istermcommand
LD A,(termcmd)
OR A
ENDM
;-----------------------------
MACRO _iscmdmode
LD A,(termcmd)
CP 1
ENDM