Subversion Repositories Kolibri OS

Rev

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

  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 ---
  520.