?login_element?

Subversion Repositories NedoOS

Rev

Rev 1649 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.         DEVICE ZXSPECTRUM128
  2.         include "../_sdk/sys_h.asm"
  3. ;COMMANDLINE    EQU #80
  4.  
  5.         org PROGSTART
  6. cmd_begin
  7.         ld hl,COMMANDLINE
  8.         call skipword
  9.         cp 0x00
  10.         jp z, defname
  11.         call skipspaces
  12.         cp 0x00
  13.         jp z, defname
  14.  
  15.         ld de,FILE_NAME
  16.         call getname
  17.         inc hl
  18.         ld (hl),0
  19.         ld a,0
  20.         ld (de),a
  21.  
  22. defname:
  23.         ld de,FILE_NAME
  24.         OS_CREATEHANDLE
  25.         or a
  26.         jp nz,ERR_EXIT    ;обработка ошибок
  27.         ld a,b
  28.         ld (handle),a    ;сохраняем дескриптор
  29.  
  30. ;Заполняю пустотой внутренний мир файла
  31.         ld b,160
  32. t1:     push bc
  33.         ld a,(handle)
  34.         ld b,a
  35.         ld de,Empt
  36.         ld hl,4096
  37.         OS_WRITEHANDLE
  38.         or a
  39.         jp nz,ERR_EXIT    ;обработка ошибок
  40.                 pop bc
  41.  
  42.                 djnz t1
  43.  
  44. ;Ищу в нем своё место
  45.                 ld a, (handle)
  46.                 ld b,a
  47.                 ld de,#0000
  48.                 ld hl,#0800
  49.                 OS_SEEKHANDLE
  50.  
  51. ;и заполняю его смыслом
  52.         ld a,(handle)
  53.         ld b,a
  54.         ld de, SYSTEM_TRACK
  55.         ld hl,BUF_SIZE
  56.         OS_WRITEHANDLE
  57.         or a
  58.         jp nz,ERR_EXIT    ;обработка ошибок
  59.  
  60. CLOSE_ERR_EXIT
  61.         ld a,(handle)
  62.         ld b,a
  63.         OS_CLOSEHANDLE
  64.  
  65. ERR_EXIT
  66.         QUIT
  67.  
  68. skipword
  69. ;hl=string
  70. ;out: hl=terminator/space addr
  71. getword0
  72.         ld a,(hl)
  73.         or a
  74.         ret z
  75.         cp 0x20
  76.         ret z
  77.         inc hl
  78.         jr getword0
  79.  
  80. skipspaces
  81. ;hl=string
  82. ;out: hl=after last space
  83.         ld a,(hl)
  84.         cp ' '
  85.         ret nz
  86.         inc hl
  87.         jr skipspaces
  88.  
  89. getname:
  90.         ld a,(hl)
  91.         cp 0
  92.         ret z
  93.        
  94.         cp ' '
  95.         ret z
  96.         ld (de),a
  97.         inc hl
  98.         inc de
  99.         jr getname
  100.                
  101. handle:
  102.            DEFB 0
  103.  
  104. ;Ну проще я не придумал :-(
  105. ;Придумаю переделаю.
  106. Empt:
  107.         DEFS 16*256
  108.  
  109. SYSTEM_TRACK:;системная дорожка
  110.  
  111. BUFF_ADDR:
  112.                 DEFB 0
  113. DCU_SEC:
  114.                 DEFS 224
  115. FR_SEC_NEXT:;следующий свободный сектор
  116.                 DEFB 0
  117. FR_TRK_NEXT:;следующая свободная дорожка
  118.                 DEFB 1
  119. TYPE_DISC:; тип диска
  120.                 DEFB #10
  121. N_FILES:; количество файлов на диске           
  122.                 DEFB 0
  123. ; количество свободных секторов на диске
  124. ;(это максимальное количество, будем из него вычитать)
  125. N_FREE_SEC:
  126.                 DEFW #09F0
  127. MAIN_BYTE:
  128.                 DEFB #10
  129. ZERO:  
  130.                 DEFB 0,0
  131. BLANK9:
  132.                 DEFB #20,#20,#20,#20,#20,#20,#20,#20,#20,0; последний ноль нужен!
  133. N_DEL_FILES:
  134.                 DEFB 0
  135. ;заголовок диска
  136. DISC_TITLE:
  137.                 DEFB "RESULT",0,0
  138. ZERO_N:
  139.                 DEFS 3
  140. BUF_SIZE EQU $-SYSTEM_TRACK
  141.        
  142. FILE_NAME:
  143.         DEFB "dist.trd"
  144. END:    DEFB 0
  145.         DEFB 0
  146.  
  147. cmd_end
  148.  
  149.  
  150.  
  151.  
  152.         ;display "Size ",/d,cmd_end-cmd_begin," bytes"
  153.  
  154.         savebin "mktrd.com",cmd_begin,cmd_end-cmd_begin
  155.  
  156.         LABELSLIST "../../us/user.l"
  157.