Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1812 yogev_ezra 1
; --------------------------------------------------------------------------
2
; FILE: TSrScan.Asm
3
; DATE: October 11, 2008
4
; --------------------------------------------------------------------------
5
 
6
; --------------------------------------------------------------------------
7
; Input:
8
;   AL = character from QUAD array
9
; --------------------------------------------------------------------------
10
align PROC_ALIGN
11
TSrScan_SetCosmosAttr:
12
    push    ecx
13
 
14
    mcOnRegEqu al, CHAR_ASTERISK, .attr_star
15
    mcOnRegEqu al, CHAR_BLACK_HOLE, .attr_bhole
16
    mcOnRegEqu al, CHAR_COMMANDER, .attr_klingon
17
    mcOnRegEqu al, CHAR_ENTERPRISE, .attr_ship
18
    mcOnRegEqu al, CHAR_FQUEENE, .attr_ship
19
    mcOnRegEqu al, CHAR_KLINGON, .attr_klingon
20
    mcOnRegEqu al, CHAR_PLANET, .attr_planet
21
    mcOnRegEqu al, CHAR_ROMULAN, .attr_romulan
22
    mcOnRegEqu al, CHAR_SCOM, .attr_klingon
23
    mcOnRegEqu al, CHAR_STARBASE, .attr_base
24
    mcOnRegEqu al, CHAR_THING, .attr_thing
25
    mcOnRegEqu al, CHAR_THOLIAN, .attr_tholian
26
    mcOnRegEqu al, CHAR_WEB, .attr_web
27
 
28
    mov     cl, ATTR_COSMOS
29
    jmp     .apply
30
 
31
.attr_star:
32
    mov     cl, ATTR_STAR
33
    jmp     .apply
34
 
35
.attr_bhole:
36
    mov     cl, ATTR_BLACK_HOLE
37
    jmp     .apply
38
 
39
.attr_klingon:
40
    mov     cl, ATTR_KLINGON
41
    jmp     .apply
42
 
43
.attr_ship:
44
    mov     cl, ATTR_SHIP
45
    jmp     .apply
46
 
47
.attr_planet:
48
    mov     cl, ATTR_PLANET
49
    jmp     .apply
50
 
51
.attr_romulan:
52
    mov     cl, ATTR_ROMULAN
53
    jmp     .apply
54
 
55
.attr_base:
56
    mov     cl, ATTR_BASE
57
    jmp     .apply
58
 
59
.attr_thing:
60
    mov     cl, ATTR_BLACK_HOLE
61
    jmp     .apply
62
 
63
.attr_tholian:
64
    mov     cl, ATTR_THOLIAN
65
    jmp     .apply
66
 
67
.attr_web:
68
    mov     cl, ATTR_WEB
69
 
70
.apply:
71
    call    TConsole_SetAttr
72
    pop     ecx
73
    ret
74
 
75
; --------------------------------------------------------------------------
76
; Input:
77
;   EAX = row index from 1 to 10
78
; --------------------------------------------------------------------------
79
align PROC_ALIGN
80
TSrScan_CramSpaceRow:
81
    dec     eax
82
    imul    eax, 10
83
 
84
    mcLoadGameDataPtr edx
85
    lea     esi, [edx + eax + TREKDATA.QUAD]
86
    mcLoad8bitsToReg32 ecx, 10
87
 
88
.dump_sector:
89
    push    ecx
90
 
91
    lodsb
92
    call    TSrScan_SetCosmosAttr
93
    call    TConsole_PutChar
94
    mov     al, CHAR_BLANK
95
    call    TConsole_PutChar
96
 
97
    pop     ecx
98
    loop    .dump_sector
99
    ret
100
 
101
; --------------------------------------------------------------------------
102
; Input:
103
;   ECX = index of SRSCAN report item text
104
; --------------------------------------------------------------------------
105
align PROC_ALIGN
106
TSrScan_Helper1:
107
    call    TConsole_Cram
108
    mov     cl, ATTR_REPORT_VALUE
109
    call    TConsole_SetAttr
110
    mcLoadGameDataPtr ebx
111
    ret
112
 
113
; --------------------------------------------------------------------------
114
align PROC_ALIGN
115
TSrScan_PrintTubesInfo:
116
    mov     ecx, 705
117
    call    TConsole_Cram
118
 
119
    mcLoadGameDataPtr esi
120
    movzx   eax, [esi + TREKDATA.NPTUBES]
121
    call    TConsole_CramInt
122
 
123
    mcLoadGameDataPtr esi
124
    cmp     [esi + TREKDATA.QTORPS], 0
125
    je      .close_bracket
126
    cmp     [esi + TREKDATA.TORPS], 0
127
    je      .close_bracket
128
 
129
    mov     ecx, 706
130
    call    TConsole_Cram
131
 
132
.close_bracket:
133
    mov     al, ')'
134
    call    TConsole_PutChar
135
    ret
136
 
137
; --------------------------------------------------------------------------
138
; Input:
139
;   EAX = row index from 1 to 10
140
; --------------------------------------------------------------------------
141
align PROC_ALIGN
142
TSrScan_CramStatusRow:
143
    mov     cl, ATTR_REPORT_TEXT
144
    call    TConsole_SetAttr
145
 
146
    mcOnRegEqu eax, 1, .print_stardate
147
    mcOnRegEqu eax, 2, .print_condition
148
    mcOnRegEqu eax, 3, .print_position
149
    mcOnRegEqu eax, 4, .print_lsupport
150
    mcOnRegEqu eax, 5, .print_warp
151
    mcOnRegEqu eax, 6, .print_energy
152
    mcOnRegEqu eax, 7, .print_torpedoes
153
    mcOnRegEqu eax, 8, .print_shields
154
    mcOnRegEqu eax, 9, .print_klingons
155
    ;
156
    ; Time left
157
    ;
158
    mcLoad8bitsToReg32 ecx, 103
159
    call    TSrScan_Helper1
160
 
161
    fld     [ebx + TREKDATA.REMTIME]
162
    mov     cl, 2
163
    call    TConsole_CramFloat
164
    jmp     .done
165
 
166
.print_stardate:
167
    mcLoad8bitsToReg32 ecx, 94
168
    call    TSrScan_Helper1
169
 
170
    fld     [ebx + TREKDATA.DATE]
171
    mov     cl, 1
172
    call    TConsole_CramFloat
173
    jmp     .done
174
 
175
.print_condition:
176
    mcLoad8bitsToReg32 ecx, 95
177
    call    TSrScan_Helper1
178
 
179
    cmp     [ebx + TREKDATA.CONDIT], CONDITION_DOCKED
180
    je      .do_condition
181
 
182
    push    ebx
183
    call    TCommon_NewCondition
184
    pop     ebx
185
 
186
.do_condition:
187
    movzx   eax, [ebx + TREKDATA.CONDIT]
188
    mov     esi, glb_AttrCondition
189
    mov     cl, [esi + eax - 1]
190
    call    TConsole_SetAttr
191
 
192
    lea     ecx, [eax + 103]
193
    call    TConsole_Cram
194
    jmp     .done
195
 
196
.print_position:
197
    mcLoad8bitsToReg32 ecx, 96
198
    call    TSrScan_Helper1
199
 
200
    mov     al, [ebx + TREKDATA.QUADX]
201
    mov     dl, [ebx + TREKDATA.QUADY]
202
    mcZeroBits ecx
203
    push    ebx
204
    call    TConsole_CramLoc
205
 
206
    mov     al, ','
207
    call    TConsole_PutChar
208
    pop     ebx
209
 
210
    mov     al, [ebx + TREKDATA.SECTX]
211
    mov     dl, [ebx + TREKDATA.SECTY]
212
    mcZeroBits ecx
213
    call    TConsole_CramLoc
214
    jmp     .done
215
 
216
.print_lsupport:
217
    mcLoad8bitsToReg32 ecx, 97
218
    call    TSrScan_Helper1
219
 
220
    mov     cl, DEV_LIFE_SUPPORT
221
    call    TArray_IsDamaged
222
    jc      .L44
223
 
224
    mcLoad8bitsToReg32 ecx, 108
225
    call    TConsole_Cram
226
    jmp     .done
227
 
228
.L44:
229
    cmp     [ebx + TREKDATA.CONDIT], CONDITION_DOCKED
230
    jne     .L45
231
 
232
    mcLoad8bitsToReg32 ecx, 109
233
    call    TConsole_Cram
234
    jmp     .done
235
 
236
.L45:
237
    mcLoad8bitsToReg32 ecx, 110
238
    push    ebx
239
    call    TConsole_Cram
240
    pop     ebx
241
 
242
    fld     [ebx + TREKDATA.LSUPRES]
243
    mov     cl, 2
244
    mov     dl, 4
245
    call    TConsole_CramFloatWidth
246
    jmp     .done
247
 
248
.print_warp:
249
    mcLoad8bitsToReg32 ecx, 98
250
    call    TSrScan_Helper1
251
 
252
    fld     [ebx + TREKDATA.WARPFAC]
253
    mov     cl, 1
254
    call    TConsole_CramFloat
255
    jmp     .done
256
 
257
.print_energy:
258
    mcLoad8bitsToReg32 ecx, 99
259
    call    TSrScan_Helper1
260
 
261
    fld     [ebx + TREKDATA.ENERGY]
262
    mov     cl, 2
263
    call    TConsole_CramFloat
264
    jmp     .done
265
 
266
.print_torpedoes:
267
    mcLoad8bitsToReg32 ecx, 100
268
    call    TSrScan_Helper1
269
 
270
    movzx   eax, [ebx + TREKDATA.TORPS]
271
    call    TConsole_CramInt
272
    call    TSrScan_PrintTubesInfo
273
    jmp     .done
274
 
275
.print_shields:
276
    mcLoad8bitsToReg32 ecx, 101
277
    call    TSrScan_Helper1
278
 
279
    mov     cl, DEV_SHIELDS
280
    call    TArray_IsDamaged
281
    jc      .shields_damaged
282
 
283
    movzx   ecx, [ebx + TREKDATA.SHLDUP]
284
    add     cl, 120
285
 
286
.cram_shields_state:
287
    push    ebx
288
    call    TConsole_Cram
289
    pop     ebx
290
 
291
    fld     [ebx + TREKDATA.SHLD]
292
    fld     [ebx + TREKDATA.INSHLD]
293
    fdivp
294
    fld     [glb_dbl_100]
295
    fmulp
296
    frndint
297
    call    TCommon_FP_Truncate
298
    push    ebx
299
    call    TConsole_CramInt
300
 
301
    mcLoad8bitsToReg32 ecx, 111
302
    call    TConsole_Cram
303
 
304
    pop     ebx
305
    fld     [ebx + TREKDATA.SHLD]
306
    frndint
307
    call    TCommon_FP_Truncate
308
    call    TConsole_CramInt
309
 
310
    mcLoad8bitsToReg32 ecx, 112
311
    call    TConsole_Cram
312
    jmp     .done
313
 
314
.shields_damaged:
315
    mcLoad8bitsToReg32 ecx, 119
316
    jmp     .cram_shields_state
317
 
318
.print_klingons:
319
    mcLoad8bitsToReg32 ecx, 102
320
    call    TSrScan_Helper1
321
 
322
    movzx   eax, [ebx + TREKDATA.REMKL]
323
    call    TConsole_CramInt
324
 
325
.done:
326
    ret
327
 
328
; --------------------------------------------------------------------------
329
; STATUS
330
; --------------------------------------------------------------------------
331
align PROC_ALIGN
332
TSrScan_Status:
333
    call    TConsole_ScrollUp
334
 
335
    mcLoad1 eax
336
    mcLoad8bitsToReg32 ecx, 10
337
 
338
.dump_row:
339
    push    eax ecx
340
 
341
    call    TSrScan_CramStatusRow
342
    call    TConsole_ScrollUp
343
 
344
    pop     ecx eax
345
    inc     eax
346
    loop    .dump_row
347
 
348
    call    TConsole_ScrollUp
349
    ret
350
 
351
; --------------------------------------------------------------------------
352
; REQUEST
353
; --------------------------------------------------------------------------
354
align PROC_ALIGN
355
TSrScan_Request:
356
 
357
.L301:
358
    call    TCmdBuf_Scan
359
    cmp     [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_ALPHA
360
    je      .L303
361
 
362
.L302:
363
    mcLoad8bitsToReg32 ecx, 115
364
    call    TGame_Prompt
365
    jmp     .L301
366
 
367
.L303:
368
    mcLoad8bitsToReg32 edx, 1
369
 
370
.check_cmd:
371
    mcLoad8bitsToReg32 ecx, 122
372
    add     ecx, edx
373
    push    edx
374
    call    TCmdBuf_Crop
375
    pop     edx
376
    jc      .row_in_EDX
377
 
378
    inc     edx
379
    cmp     edx, 10
380
    jbe     .check_cmd
381
    ;
382
    ; List possible request items
383
    ;
384
    call    TConsole_ScrollUp
385
    call    TConsole_SetGameMsgAttr
386
    mcLoad8bitsToReg32 ecx, 116
387
    call    TConsole_Prout
388
    mcLoad8bitsToReg32 ecx, 117
389
    call    TConsole_Prout
390
    mcLoad8bitsToReg32 ecx, 118
391
    call    TConsole_Prout
392
    call    TConsole_ScrollUp
393
    jmp     .L302
394
 
395
.row_in_EDX:
396
    push    edx
397
    call    TConsole_ScrollUp
398
    pop     eax
399
    ;
400
    ; Due to mapping we need to swap places of
401
    ; TIME and TORPEDOES request. Basic logic here as follows:
402
    ;
403
    ; IF (EAX == 7) THEN EAX=10
404
    ; IF (EAX == 10) THEN EAX=7
405
    ;
406
    mcOnRegEqu eax, 7, .load_10
407
    mcOnRegEqu eax, 10, .load_7
408
 
409
.dump_info:
410
    call    TSrScan_CramStatusRow
411
    call    TConsole_ScrollUp
412
    call    TConsole_ScrollUp
413
    ret
414
 
415
.load_7:
416
    sub     eax, 3
417
    jmp     .dump_info
418
 
419
.load_10:
420
    add     eax, 3
421
    jmp     .dump_info
422
 
423
; --------------------------------------------------------------------------
424
; SRSCAN
425
; --------------------------------------------------------------------------
426
virtual at 0
427
loc24:
428
    .bRightSide BOOL ?
429
    .nRow INDEX ?
430
    .size = $
431
end virtual
432
; --------------------------------------------------------------------------
433
align PROC_ALIGN
434
TSrScan_Main:
435
    mcBeginLocals loc24.size
436
 
437
    mov     cl, DEV_SR_SENSORS
438
    call    TArray_IsDamaged
439
    jnc     .proceed
440
 
441
    mcLoadGameDataPtr ebx
442
    cmp     [ebx + TREKDATA.CONDIT], CONDITION_DOCKED
443
    jne     .not_available
444
 
445
.proceed:
446
    mcLoad1 eax
447
    mcStoreLocal loc24.bRightSide, eax
448
    mcStoreLocal loc24.nRow, eax
449
 
450
    call    TCmdBuf_Scan
451
    cmp     [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_EOL
452
    je      .L3
453
 
454
    mcLoad8bitsToReg32 ecx, 122
455
    call    TCmdBuf_Crop
456
    jnc     .L3
457
 
458
    dec     [esp + loc24.bRightSide]
459
 
460
.L3:
461
    mcLoadLocal ecx, loc24.nRow
462
    mcLoadGameDataPtr ebx
463
    mcLoadMember al, TREKDATA.QUADX
464
    mcLoadMember dl, TREKDATA.QUADY
465
    call    TArray_SetStarChartValue
466
    call    TArray_SetScanned
467
 
468
    call    TConsole_ScrollUp
469
 
470
    mov     cl, ATTR_SCAN_SCALE
471
    call    TConsole_SetAttr
472
    mcLoad8bitsToReg32 ecx, 113
473
    call    TConsole_Prout
474
 
475
.dump_row:
476
    mov     cl, ATTR_SCAN_SCALE
477
    call    TConsole_SetAttr
478
 
479
    mcLoadLocal eax, loc24.nRow
480
    mov     cl, 3
481
    call    TConsole_CramIntWidth
482
 
483
    mov     al, CHAR_BLANK
484
    call    TConsole_PutChar
485
 
486
    mcLoadLocal eax, loc24.nRow
487
    call    TSrScan_CramSpaceRow
488
 
489
    cmp     [esp + loc24.bRightSide], 0
490
    je      .next_row
491
 
492
    mcLoadLocal eax, loc24.nRow
493
    call    TSrScan_CramStatusRow
494
 
495
.next_row:
496
    call    TConsole_ScrollUp
497
 
498
    inc     [esp + loc24.nRow]
499
    cmp     [esp + loc24.nRow], 10
500
    jbe     .dump_row
501
 
502
    mov     cl, ATTR_SCAN_SCALE
503
    call    TConsole_SetAttr
504
    mcLoad8bitsToReg32 ecx, 113
505
    call    TConsole_Prout
506
    jmp     .done
507
 
508
.not_available:
509
    call    TConsole_SetGameMsgAttr
510
    call    TConsole_ScrollUp
511
    mcLoad8bitsToReg32 ecx, 114
512
    call    TConsole_Prout
513
 
514
.done:
515
    call    TConsole_ScrollUp
516
    mcEndLocals loc24.size
517
    ret
518
 
519
; --- EOF ---