Subversion Repositories NedoOS

Rev

Rev 68 | Rev 122 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

  1. ;TODO т срЄэшъх %0 (ярЁрьхЄЁ√ чряєёър), %1 ...
  2. ;TODO %~dp0 (фЁрщт ш яєЄ№ чряєёър)
  3. ;TODO %~t1 (фрЄр-тЁхь  1-ую ярЁрьхЄЁр)
  4. ;TODO goto ш ьхЄъш :label
  5. ;TODO if ???==??? goto
  6. ;TODO for
  7. ;TODO PATH (уфх їЁрэшЄ№? фюыцэр яюфуЁєцрЄ№ё  яЁш ёЄрЁЄх эютющ ъюяшш cmd)
  8.  
  9.         DEVICE ZXSPECTRUM128
  10.         include "../_sdk/sys_h.asm"
  11. MAXCMDSZ=COMMANDLINE_sz-1;127 ;эх ёўшЄр  ЄхЁьшэрЄюЁр
  12. txtscrhgt=25
  13. txtscrwid=80
  14. CMDLINEY=24
  15.  
  16. COLOR=7
  17. CURSORCOLOR=#38
  18.  
  19.         org PROGSTART
  20. cmd_begin
  21.         ld sp,#4000 ;эх фюыцхэ юяєёърЄ№ё  эшцх #3b00! шэрўх тючьюцэр яюЁўр OS
  22.         ld e,6 ;textmode
  23.         OS_SETGFX
  24.         ;ld e,COLOR
  25.         ;OS_CLS
  26.        
  27.         OS_GETMAINPAGES
  28. ;dehl=эюьхЁр ёЄЁрэшЎ т 0000,4000,8000,c000
  29.         push hl
  30.         OS_DELPAGE
  31.         pop hl
  32.         push hl
  33.         ld e,h
  34.         OS_DELPAGE
  35.         pop hl
  36.         ld e,l
  37.         OS_DELPAGE
  38.        
  39.         ld hl,COMMANDLINE ;command line
  40.         ld de,wordbuf
  41.         call getword
  42.         call skipspaces
  43.          ;jr cmd_interactive
  44.         ld a,(hl)
  45.         or a
  46.         jr z,cmd_interactive
  47. ;command line = "cmd <command to run>"
  48.         ld de,cmdbuf
  49.         call strcopy
  50.        
  51.         ;ld hl,cmdbuf
  52.         ;call prtext
  53.         ;call prcrlf
  54.         call makeprompt ;шэрўх чряєёЄшЄё  шч эхяЁртшы№эющ фшЁхъЄюЁшш
  55.          ;jr cmd_interactive
  56.        
  57.         call execcmd ;can show errors ;a!=0: no such internal command
  58.         or a
  59.         call nz,strcpexec_tryrun ;чряєёърхЄ яю Їюэє
  60.         YIELD ;ўЄюс√ чряє∙хээр  чрфрўр єёяхыр чрїтрЄшЄ№ Їюъєё ;???
  61. ;хёыш ъюьрэфэр  ёЄЁюър с√ыр ёю ёыютюь autoexec.bat тьхёЄю ёыютр cmd, Єю ¤Єю эрўры№э√щ чряєёъ autoexec.bat, шч эхую эрфю тїюфшЄ№ т шэЄхЁръЄштэ√щ Ёхцшь
  62.         ld a,(COMMANDLINE)
  63.         cp 'a'
  64.         jr z,cmd_interactive
  65.         ;jr $
  66.         QUIT
  67.        
  68. cmd_interactive
  69.        
  70.         ;OS_GETMAINPAGES
  71. ;dehl=эюьхЁр ёЄЁрэшЎ т 0000,4000,8000,c000
  72.         ;ld a,e
  73.         ;ld (curpgshapes),a
  74.         ;ld a,h
  75.         ;ld (curpgpal),a
  76.         ;ld a,l
  77.         ;ld (curpgtemp),a
  78. ;TODO free pages
  79.        
  80.         ;ld a,4;TR-DOS ;0=SD card (Z-controller)
  81.         ;call cmdsetdrive
  82.        
  83. cmdmainloop
  84.         call makeprompt
  85.         call editcmd
  86.         call prcrlf
  87.        
  88.         ld hl,cmdbuf
  89.         ld de,oldcmd
  90.         ld bc,MAXCMDSZ+1
  91.         ldir
  92.        
  93.         call execcmd ;a!=0: no such internal command
  94.         or a
  95.         call nz,strcpexec_tryrun
  96.         ld hl,cmdbuf
  97.         ld (hl),0
  98.         jp cmdmainloop
  99.  
  100. ;;;;;;;;;;;;;;;;;;
  101. prNNcmd
  102. ;a=NN
  103.         ld c,10
  104.         call prNcmd
  105.         add a,'0'
  106.         PRCHAR
  107.         ret
  108. prNcmd
  109. ;a=NN
  110. ;c=divisor
  111.         ld b,'0'-1
  112.         sub c
  113.         inc b
  114.         jr nc,$-2
  115.         add a,c
  116.         push af
  117.         ld a,b
  118.         PRCHAR
  119.         pop af
  120.         ret
  121.        
  122. editcmd_up
  123.         ld de,cmdbuf
  124.         ld hl,oldcmd
  125.         ld bc,MAXCMDSZ+1
  126.         ldir
  127.         ;jp editcmd
  128.  
  129. editcmd
  130.         ld hl,cmdbuf
  131.         call strlen
  132.         ld a,l
  133.         ld (curcmdx),a
  134. editcmd0
  135.         call fixscroll_prcmd
  136.         call cmdcalccurxy
  137.         OS_SETXY
  138.         ld e,CURSORCOLOR;#38
  139.         OS_PRATTR ;эрЁшёютрЄ№ ъєЁёюЁ
  140.         YIELDGETKEYLOOP
  141.          ;ld a,c ;keynolang
  142.         push af
  143.         call cmdcalccurxy
  144.         OS_SETXY
  145.         ld e,COLOR;7
  146.         OS_PRATTR ;ёЄхЁхЄ№ ъєЁёюЁ
  147.         pop af
  148.         cp Enter
  149.         ret z
  150.         cp cs7 ;up
  151.         jr z,editcmd_up
  152.          ld hl,editcmd0
  153.          push hl
  154.         ;ld hl,cmdbuf
  155.         cp cs0 ;backspace
  156.         jr z,editcmd_backspace
  157.         cp cs5 ;left
  158.         jr z,editcmd_left
  159.         cp cs8 ;right
  160.         jr z,editcmd_right
  161.         cp ' '
  162.         ret c ;jr c,editcmdok ;яЁюўшх ёшёЄхьэ√х ъэюяъш эх эєцэ√
  163. ;type in
  164. editcmdtypein
  165.         ld e,a
  166.         ld hl,cmdbuf
  167.         call strlen ;hl=length
  168.         ld bc,MAXCMDSZ
  169.         or a
  170.         sbc hl,bc
  171.         ret nc ;jr nc,editcmdok ;эхъєфр ттюфшЄ№
  172.         call cmdcalctextaddr ;hl=addr, a=curcmdx
  173.         inc a
  174.         ld (curcmdx),a
  175.         jp strinsch ;e=ch
  176. ;editcmdok
  177.         ;ret ;jp editcmd0
  178.        
  179. editcmd_backspace
  180.         call cmdcalctextaddr ;hl=addr, a=curcmdx
  181.         or a
  182.         ret z ;jr z,editcmdok ;эхўхую єфры Є№
  183.         dec a
  184.         ld (curcmdx),a
  185.         jp strdelch ;єфры хЄ яЁхф√фє∙шщ ёшьтюы
  186.         ;jr editcmdok
  187.      
  188. editcmd_left
  189.         ld a,(curcmdx)
  190.         or a
  191.         ret z ;jr z,editcmdok ;эхъєфр тыхтю
  192.         dec a
  193.         ld (curcmdx),a
  194.         ret ;jr editcmdok
  195.      
  196. editcmd_right
  197.         call cmdcalctextaddr ;hl=addr, a=curcmdx
  198.         inc (hl)
  199.         dec (hl)
  200.         ret z ;jr z,editcmdok ;эхъєфр яЁртю, ёЄюшь эр ЄхЁьшэрЄюЁх
  201.         inc a
  202.         ld (curcmdx),a
  203.         ret ;jr editcmdok
  204.  
  205. prtext
  206. prtext0
  207.         ld a,(hl)
  208.         or a
  209.         ret z
  210.         push hl
  211.         PRCHAR ;testing (351/352t) (was 986/987t)
  212.         pop hl
  213.         inc hl
  214.         jp prtext0
  215.  
  216. cmdprNchars
  217.         push bc
  218.         ld a,(hl)
  219.         inc hl
  220.         push hl
  221.         PRCHAR
  222.         pop hl
  223.         pop bc
  224.         djnz cmdprNchars
  225.         ret
  226.        
  227. getword
  228. ;hl=string
  229. ;de=wordbuf
  230. ;out: hl=terminator/space addr
  231. getword0
  232.         ld a,(hl)
  233.         or a
  234.         jr z,getwordq
  235.         sub ' '
  236.         jr z,getwordq
  237.         ldi
  238.         jp getword0
  239. getwordq
  240.         ;xor a
  241.         ld (de),a
  242.         ret
  243.  
  244. execcmd
  245. ;a=0: command executed
  246. ;a!=0: no such internal command
  247.         ld hl,cmdbuf
  248.         ld a,(hl)
  249.         or a
  250.         ret z
  251.        
  252.         ld de,wordbuf
  253.         call getword ;hl=terminator/space addr
  254.         call skipspaces
  255.         ld (execcmd_pars),hl
  256.         ld hl,commandslist ;list of internal commands
  257. strcpexec0
  258.         ld c,(hl)
  259.         inc hl
  260.         ld b,(hl)
  261.         inc hl
  262.         ld a,b
  263.         cp -1
  264.         ret z ;jr z,strcpexec_tryrun ;a!=0: no such internal command
  265.         ld de,wordbuf
  266.         push hl
  267.         call strcp
  268.         pop hl
  269.         jr nz,strcpexec_fail
  270.         ld h,b
  271.         ld l,c
  272.         call jphl ;execute command
  273.         xor a
  274.         ret ;a=0: command executed
  275. jphl
  276.         jp (hl) ;run internal command
  277. strcpexec_fail
  278.         ld b,-1 ;ўЄюс√ Єюўэю эрщЄш ЄхЁьшэрЄюЁ
  279.         xor a
  280.         cpir ;эрщф╕ь юс чрЄхы№эю
  281.         jr strcpexec0
  282.  
  283. cmd_start
  284.         ld hl,cmdbuf
  285.         ld a,(hl)
  286.         or a
  287.         ret z
  288.         ld de,wordbuf
  289.         call getword ;hl=terminator/space addr
  290.         call skipspaces
  291.         ld de,cmdbuf
  292.         ld bc,MAXCMDSZ+1
  293.         ldir
  294. strcpexec_tryrun
  295. ;т√яюыэшЄ№ Їрщы ё шьхэхь cmdbuf ш ярЁрьхЄЁрьш Єрь
  296.         call loadapp ;чруЁєчшЄ№ Їрщы ё шьхэхь cmdbuf, e=id, cy=end of .bat
  297.         jr nz,execcmd_tryrunerror
  298. execcmd_tryrunok
  299.         ret c ;cy=end of .bat
  300.         OS_RUNAPP
  301.         ret
  302.  
  303. execcmd_tryrunerror
  304. ;т√яюыэшЄ№ Їрщы ё шьхэхь SYSDIR/cmdbuf ш ярЁрьхЄЁрьш Єрь
  305.         ;call loadapp_keeppath
  306.         OS_SETSYSDRV
  307.         ld de,sysdir
  308.         push de
  309.         OS_GETPATH
  310.         ;call loadapp_setoldpath ;TODO шч prompt
  311.         ;ld de,cmdprompt
  312.         ;OS_CHDIR
  313.         ;call makeprompt
  314.         ;ld de,cmdprompt
  315.         ;jr $
  316.         ;OS_CHDIR
  317.         pop hl
  318.         push hl
  319. ;хёыш т ъюэЎх эхЄ ёых°р, Єю фюсртшь:
  320.         ;ld bc,0 ;ўЄюс√ Єюўэю эрщЄш ЄхЁьшэрЄюЁ
  321.         xor a
  322.         ld b,a
  323.         ld c,a;0
  324.         cpir ;эрщф╕ь юс чрЄхы№эю, хёыш фышэр=0, Єю bc=-1 ш Є.ф.
  325.         dec hl ;эр ЄхЁьшэрЄюЁх
  326.         dec hl ;яхЁхф ЄхЁьшэрЄюЁюь
  327.         ld a,'/'
  328.         cp (hl)
  329.         jr z,$+2+5
  330.          inc hl
  331.          ld (hl),a
  332.          inc hl
  333.          ld (hl),0
  334.         pop hl ;sysdir
  335.         call strlen
  336.         ld b,h
  337.         ld c,l ;bc=SYSDIR_size
  338.          push bc ;SYSDIR_size
  339.         ld hl,MAXCMDSZ+1
  340.         or a
  341.         sbc hl,bc
  342.         push hl ;MAXCMDSZ+1-SYSDIR_size
  343. ;bc=SYSDIR_size
  344.         ld hl,cmdbuf+MAXCMDSZ;+1
  345.         or a
  346.         sbc hl,bc
  347.         ld de,cmdbuf+MAXCMDSZ;+1
  348.         pop bc ;MAXCMDSZ+1-SYSDIR_size
  349.         lddr
  350.         ld hl,sysdir
  351.         ld de,cmdbuf
  352.          pop bc ;SYSDIR_size
  353.         ldir ;эхы№ч  strcopy, Є.ъ. эх эєцхэ ЄхЁьшэрЄюЁ
  354.         call loadapp ;чруЁєчшЄ№ Їрщы ё шьхэхь cmdbuf, e=id, cy=end of .bat
  355.         jr z,execcmd_tryrunok
  356. execcmd_error
  357.         ld hl,tunknowncommand
  358.         jp cmderror
  359.        
  360. callcmd
  361. ;call command (cmdbuf) with waiting
  362.         call execcmd ;a!=0: no such internal command
  363.         or a
  364.         ret z ;command executed
  365.         call loadapp ;чруЁєчшЄ№ Їрщы ё шьхэхь cmdbuf, e=id
  366.         jr nz,execcmd_error
  367.         push de
  368.         OS_RUNAPP
  369.         pop de
  370.         WAITPID
  371.         ret
  372.  
  373. loadapp_keeppath
  374.         ld hl,cmdprompt
  375.         ld de,oldpath
  376.         ld bc,MAXPATH_sz;MAXCMDSZ+1
  377.         ldir ;TODO ЁхъєЁёштэю (фы  .bat)
  378.         ret
  379.  
  380. loadapp_setoldpath
  381.         push de
  382.         ld de,oldpath ;TODO ЁхъєЁёштэю (фы  .bat)
  383.         OS_CHDIR
  384.         pop de
  385.         xor a
  386.         ret ;Z
  387.        
  388. loadapp
  389. ;out: nz=error, cy=end of .bat, or else e=id
  390.         ld hl,cmdbuf
  391.         ld de,wordbuf
  392.         call getword
  393. ;єўхёЄ№ яєЄ№ т шьхэш (TODO шёяюы№чютрЄ№ OS_OPENHANDLE)
  394.         ld hl,wordbuf
  395.         push hl
  396.         call findlastslash. ;de=after last slash or beginning of path
  397.         pop hl
  398.         push de ;de=after last slash or beginning of path
  399.         dec de
  400.         ld a,(de)
  401.         cp '/'
  402.         jr nz,$+4
  403.          xor a
  404.          ld (de),a ;юЄЁхчрЄ№ шь  Їрщыр
  405.         inc de
  406.         ex de,hl;ld de,wordbuf ;ASCIIZ string for parsing (т #c000...)
  407.         pop hl ;hl=after last slash
  408.         jr nz,loadapp_nopath
  409.  
  410.         ;ld bc,loadapp_setoldpath
  411.         ;push bc
  412.  
  413.         push hl ;hl=after last slash
  414.         OS_CHDIR
  415.         call loadapp_keeppath
  416.         pop hl ;hl=after last slash
  417. loadapp_nopath
  418.         ex de,hl ;de=after last slash
  419.         ;ld de,wordbuf ;ASCIIZ string for parsing (т #c000...)
  420.         ld hl,fcb_filename ;Pointer to 11 byte buffer
  421.         OS_PARSEFNAME
  422.        
  423.         ld hl,fcb_filename+8
  424.         ld a,(hl)
  425.         or 0x20
  426.         cp 'b'
  427.         jr z,strcpexec_tryrun_bat
  428.         cp ' '
  429.         jr nz,strcpexec_tryrun_noemptyext
  430.         ld (hl),'c'
  431.         inc hl
  432.         ld (hl),'o'
  433.         inc hl
  434.         ld (hl),'m'
  435. strcpexec_tryrun_noemptyext
  436.         ld de,fcb
  437.         OS_FOPEN
  438.          push af
  439.          call loadapp_setoldpath
  440.          pop af
  441.         or a
  442.         ret nz ;jr nz,execcmd_error
  443.         OS_NEWAPP ;эр ьюьхэЄ ёючфрэш  фюыцэр с√Є№ тъы■ўхэр Єхъє∙р  фшЁхъЄюЁш !!!
  444.         or a
  445.         ret nz ;error
  446. ;dehl=эюьхЁр ёЄЁрэшЎ т 0000,4000,8000,c000 эютюую яЁшыюцхэш , b=id, a=error
  447.         push bc ;b=id
  448.         ld a,d
  449.         SETPG32KHIGH
  450.         push de
  451.         push hl
  452.         ld hl,cmdbuf
  453.         ld de,#c000+COMMANDLINE
  454.         ld bc,COMMANDLINE_sz
  455.         ldir ;command line
  456.         pop hl
  457.         pop de
  458.         call readfile_pages_dehl
  459.  
  460.         ld de,fcb
  461.         OS_FCLOSE
  462.         pop de
  463.         ld e,d ;e=id
  464.         xor a
  465.         ret ;Z
  466.        
  467. strcpexec_tryrun_bat
  468. ;filename in fcb
  469. ;out: nz=error, cy=end of .bat
  470. ;open .bat
  471.         ld hl,fcb_filename
  472.         ld de,fcb_bat_filename
  473.         ld bc,11
  474.         ldir
  475.  
  476.         ld de,fcb_bat
  477.         OS_FOPEN
  478.         or a
  479.         ret nz ;jp nz,execcmd_error
  480.        
  481.          ld a,0x3c ;"inc a"
  482.          ld (readbyte_readbuf_last),a
  483.         ld iy,file_buf_end
  484. strcpexec_tryrun_bat0
  485. ;load line to cmdbuf
  486.         ld hl,cmdbuf
  487.         call readstr ;nz=EOF
  488.         jr nz,strcpexec_tryrun_batq ;TODO яюёыхфэ■■ ёЄЁюъє тё╕-Єръш т√яюыэшЄ№
  489.  
  490.         push iy
  491.         ld hl,cmdbuf
  492.         call prtext
  493.         call prcrlf
  494.         pop iy
  495.        
  496. ;call command in cmdbuf
  497.         push iy
  498.         call callcmd
  499.         pop iy
  500.         jr strcpexec_tryrun_bat0
  501. strcpexec_tryrun_batq
  502. ;close .bat
  503.         ld de,fcb_bat
  504.         OS_FCLOSE
  505.         xor a
  506.          scf ;ўЄюс√ эр т√їюфх эх фхырЄ№ RUNAPP
  507.         ret ;Z
  508.  
  509.         macro READBYTE_A
  510. ;out: z=EOF
  511.         inc ly
  512.         call m,readbyte_readbuf
  513.         ld a,(iy)
  514.         endm
  515.  
  516. readstr
  517. ;out: nz=EOF
  518. ;skips empty lines!
  519.         READBYTE_A ;z=EOF
  520.         jr z,readstrEOF
  521.         cp 0x0d
  522.         jr z,readstr ;empty string - retry
  523.         cp 0x0a
  524.         jr z,readstr ;empty string - retry
  525.         ld b,MAXCMDSZ
  526.         jr readstr0go
  527. readstr0
  528.         READBYTE_A ;z=EOF
  529.         jr z,readstrEOF
  530.         cp 0x0d
  531.         jr z,readstrq
  532.         cp 0x0a
  533.         jr z,readstrq
  534. readstr0go
  535.         ld (hl),a
  536.         inc hl
  537.         djnz readstr0
  538. readstrq
  539.         xor a ;Z
  540.         ld (hl),a
  541.         inc hl
  542.         ret ;Z
  543. readstrEOF
  544.         xor a
  545.         ld (hl),a
  546.         inc hl
  547.         dec a
  548.         ret ;NZ
  549.  
  550. readbyte_readbuf
  551. ;out: z=EOF
  552.         push bc
  553.         push de
  554.         push hl
  555.         push ix
  556.  
  557.         xor a
  558. readbyte_readbuf_last=$ ;TODO keep if recursive!
  559.         inc a ;/nop(z)=last, inc a(nz)=not last
  560.         jr z,readbyte_readbufq
  561.        
  562.         ld de,file_buf
  563.         push de
  564.         OS_SETDTA ;set disk transfer address = de
  565.         ld de,fcb_bat
  566.         OS_FREAD
  567.         pop iy
  568.         xor 128 ;a = bytes read
  569.         jr z,readbyte_readbufq
  570.         jp m,readbyte_readbufq ;full block = not last block
  571. ;last block: shift data to the end of buf, mark last
  572.         ld c,a ;1..128
  573.         ld b,0 ;nz!
  574.         ld a,b
  575.         ld (readbyte_readbuf_last),a
  576.         ld hl,file_buf
  577.         add hl,bc
  578.         dec hl ;end of data
  579.         ld de,file_buf+127
  580.         lddr
  581.         inc de
  582.         push de
  583.         pop iy
  584.         ;nz!
  585. readbyte_readbufq
  586. ;iy=addr
  587. ;z=EOF
  588.         pop ix
  589.         pop hl
  590.         pop de
  591.         pop bc
  592.         ret
  593.  
  594. readfile_pages_dehl
  595.         ld a,d
  596.         SETPG32KHIGH
  597.         ld a,+(#c000+PROGSTART)/256
  598.         call cmd_loadpage
  599.         or a
  600.         ret nz
  601.        
  602.         ld a,e
  603.         SETPG32KHIGH
  604.         ld a,#c000/256
  605.         call cmd_loadpage
  606.         or a
  607.         ret nz
  608.        
  609.         ld a,h
  610.         SETPG32KHIGH
  611.         ld a,#c000/256
  612.         call cmd_loadpage
  613.         or a
  614.         ret nz
  615.        
  616.         ld a,l
  617.         SETPG32KHIGH
  618.         ld a,#c000/256
  619.         jp cmd_loadpage
  620.  
  621. cmd_dir
  622.         ld de,fcb
  623.         OS_SETDTA ;set disk transfer address = de
  624.         ;call makeemptymask
  625.         ld de,fcbmask
  626.         OS_FSEARCHFIRST
  627.         or a
  628.         ld bc,0 ;nfiles
  629.         jp nz,loaddir_error
  630. loaddir0
  631.         ld hl,fcb+FCB_FNAME
  632.         ;ld a,(hl)
  633.         ;cp ' '
  634.         ;jp z,loaddirq
  635.         push bc
  636.         ld b,8
  637.         call cmdprNchars
  638.         ld a,(fcb+FCB_FATTRIB)
  639.         and FATTRIB_DIR
  640.         xor '.'
  641.         push hl
  642.         PRCHAR
  643.         pop hl
  644.         ld b,3
  645.         call cmdprNchars
  646.         ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  647.         exx
  648.         ld hl,(fcb+FCB_FSIZE+2)
  649.         exx
  650.         ld hl,(fcb+FCB_FSIZE)
  651.         call prdword
  652.         ld a,' '
  653.         PRCHAR
  654.         ld hl,(fcb+FCB_FDATE)
  655.         call prdate
  656.         ld a,' '
  657.         PRCHAR
  658.         ld hl,(fcb+FCB_FTIME)
  659.         call prtime
  660.         ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  661.         call prcrlf
  662.         ld de,fcb
  663.         OS_SETDTA ;set disk transfer address = de
  664.          ;call makeemptymask ;т CP/M эх эєцэю, эю юЄёєЄёЄтшх тЁхфшЄ ьэюуючрфрўэюёЄш
  665.          ld de,fcbmask ;т CP/M эх эєцэю, эю юЄёєЄёЄтшх тЁхфшЄ ьэюуючрфрўэюёЄш
  666.         OS_FSEARCHNEXT
  667.         pop bc ;nfiles
  668.         inc bc ;nfiles
  669.         or a
  670.         jp z,loaddir0
  671. loaddir_error
  672. loaddirq
  673. ;bc=nfiles
  674.         ld h,b
  675.         ld l,c
  676.         call prword
  677.         ld hl,t_files_crlf
  678.         jp prtext
  679.  
  680. prdate
  681.         push hl
  682.         ld a,h
  683.         srl a
  684.         sub 20
  685.         jr nc,$+4
  686.         add a,100 ;XX century
  687.         call prNNcmd ;year
  688.         ld a,'-'
  689.         PRCHAR
  690.         pop hl
  691.         ld a,l
  692.         push af
  693.         add hl,hl
  694.         add hl,hl
  695.         add hl,hl
  696.         ld a,h
  697.         and 0x0f
  698.         call prNNcmd ;month
  699.         ld a,'-'
  700.         PRCHAR
  701.         pop af
  702.         and 0x1f
  703.         jp prNNcmd ;day
  704.  
  705. prtime
  706.         push hl
  707.         ld a,h
  708.         rra
  709.         rra
  710.         rra
  711.         and 0x1f
  712.         call prNNcmd ;hour
  713.         ld a,':'
  714.         PRCHAR
  715.         pop hl
  716.         ld a,l
  717.         push af
  718.         add hl,hl
  719.         add hl,hl
  720.         add hl,hl
  721.         ld a,h
  722.         and 0x3f
  723.         call prNNcmd ;minute
  724.         ld a,':'
  725.         PRCHAR
  726.         pop af
  727.         add a,a
  728.         and 0x3f
  729.         jp prNNcmd ;second
  730.  
  731. ;makeemptymask
  732.         ;ld hl,fcbmask_filename
  733.         ;ld d,h
  734.         ;ld e,l
  735.         ;inc de
  736.         ;ld bc,11-1
  737.         ;ld (hl),'?'
  738.         ;ldir
  739.         ;ret
  740.        
  741. skipspaces
  742. ;hl=string
  743. ;out: hl=after last space
  744.         ld a,(hl)
  745.         cp ' '
  746.         ret nz
  747.         inc hl
  748.         jr skipspaces
  749.  
  750. strcopy
  751. ;hl->de
  752. strcopy0
  753.         ld a,(hl)
  754.         ldi
  755.         or a
  756.         jr nz,strcopy0
  757.         ret
  758.  
  759. cmd_cd
  760. execcmd_pars=$+1
  761.         ld hl,0
  762.         ld a,(hl)
  763.         or a
  764.         jr z,cmd_error_nopars
  765.         ex de,hl ;de=path
  766.         OS_CHDIR
  767.         or a
  768.         ret z
  769.         ld hl,twrongpath
  770.         jp cmderror
  771.        
  772. cmd_error_nopars
  773.         ld hl,tnopars
  774.         jp cmderror
  775. cmd_error_notenoughpars
  776.         ld hl,tnotenoughpars
  777.         jp cmderror
  778.  
  779. cmd_md
  780.         ld hl,(execcmd_pars)
  781.         ld a,(hl)
  782.         or a
  783.         jr z,cmd_error_nopars
  784.         ex de,hl ;de=dirname
  785.         OS_MKDIR
  786.         or a
  787.         ret z
  788. cmd_error_cantmakedir
  789.         ld hl,tcantmakedir
  790.         jp cmderror
  791.        
  792. cmd_del
  793.         ld hl,(execcmd_pars)
  794.         ld a,(hl)
  795.         or a
  796.         jr z,cmd_error_nopars
  797.         if 1==1
  798.         ex de,hl
  799.         OS_DELETE
  800.         else ;CP/M-like
  801.         ex de,hl
  802.         ld hl,fcb_filename
  803.         OS_PARSEFNAME
  804.         ld de,fcb
  805.         OS_FDEL
  806.         endif
  807.         or a
  808.         ret z
  809. cmd_error_wrongfile
  810.         ld hl,twrongfile
  811.         jp cmderror
  812.        
  813. cmd_ren
  814.         ld hl,(execcmd_pars)
  815.         ld a,(hl)
  816.         or a
  817.         jr z,cmd_error_nopars
  818.         ld de,wordbuf
  819.         call getword ;hl=terminator/space addr
  820.         call skipspaces
  821.         ld a,(hl)
  822.         or a
  823.         jr z,cmd_error_notenoughpars
  824.         ld de,wordbuf2
  825.         call getword ;hl=terminator/space addr
  826.         ld de,wordbuf
  827.         ld hl,wordbuf2
  828.         OS_RENAME
  829.         or a
  830.         ret z
  831.         ld hl,tcantrename
  832.         jp cmderror
  833.        
  834. cmd_copy
  835.         ld hl,(execcmd_pars)
  836.         ld a,(hl)
  837.         or a
  838.         jr z,cmd_error_nopars
  839.         ld de,filenamebuf;wordbuf
  840.         call getword ;hl=terminator/space addr
  841.         call skipspaces
  842.         ld a,(hl)
  843.         or a
  844.         jr z,cmd_error_notenoughpars
  845.         ld de,filenamebuf2;wordbuf2
  846.         call getword ;hl=terminator/space addr
  847.  
  848.         if 1==1
  849.        
  850.         ld de,filenamebuf;wordbuf ;de=drive/path/file
  851.         OS_OPENHANDLE
  852.         or a
  853.         jp nz,cmd_error_wrongfile
  854.         ld a,b
  855.         ld (close_file1_handle),a
  856.         ld hl,close_file1
  857.         push hl
  858.        
  859.         ld de,filenamebuf2;wordbuf2 ;de=drive/path/file
  860.         OS_CREATEHANDLE
  861.         or a
  862.         jp nz,cmd_error_cant_copy
  863.         ld a,b
  864.         ld (cmd_copy_close_file2_handle),a
  865.         ld hl,cmd_copy_close_file2
  866.         push hl
  867. cmd_copy0
  868.         ld hl,copybuf_sz
  869.         ld de,copybuf
  870.         ld a,(close_file1_handle)
  871.         ld b,a
  872. ;B = file handle, DE = Buffer address, HL = Number of bytes to read
  873.         push de
  874.         OS_READHANDLE
  875. ;HL = Number of bytes actually read, A=error
  876.         pop de
  877.         ld a,h
  878.         or l
  879.         ret z ;0 bytes remain
  880.         ld a,(cmd_copy_close_file2_handle)
  881.         ld b,a
  882. ;B = file handle, DE = Buffer address, HL = Number of bytes to write
  883.         OS_WRITEHANDLE
  884.         jr cmd_copy0
  885.        
  886. close_file1
  887. close_file1_handle=$+1
  888.         ld b,0
  889.         OS_CLOSEHANDLE
  890.         ret
  891.        
  892. cmd_copy_close_file2
  893. cmd_copy_close_file2_handle=$+1
  894.         ld b,0
  895.         OS_CLOSEHANDLE
  896.         ld de,filenamebuf;wordbuf;filenametext
  897.         OS_GETFILETIME ;ix=date, hl=time
  898.         ld de,filenamebuf2;wordbuf2
  899.         OS_SETFILETIME
  900.         ret
  901.        
  902.         else ;CP/M-like functions
  903.        
  904.         ld de,filenamebuf;wordbuf
  905.         ld hl,fcb_filename
  906.         OS_PARSEFNAME
  907.        
  908.         ld de,fcb
  909.         OS_FOPEN
  910.         or a
  911.         jp nz,cmd_error_wrongfile
  912.         ld hl,cmd_copy_close_fcb
  913.         push hl
  914.        
  915.         ld de,filenamebuf2;wordbuf2
  916.         ld hl,fcb2_filename
  917.         OS_PARSEFNAME
  918.        
  919.         ld de,fcb2
  920.         OS_FCREATE
  921.         or a
  922.         jp nz,cmd_error_cant_copy
  923.         ld hl,cmd_copy_close_fcb2
  924.         push hl
  925.        
  926. cmd_copy0
  927.         ld de,copybuf
  928.         OS_SETDTA
  929.         ld de,fcb
  930.         OS_FREAD
  931.         cp 128
  932.         ret z ;яЁюўшЄрыш 0 срщЄ
  933.         xor 128
  934.         ld l,a
  935.         ld h,0
  936.         push hl
  937.         ld de,copybuf
  938.         OS_SETDTA
  939.         pop hl
  940.         ld de,fcb2
  941.         OS_FWRITE_NBYTES
  942.         or a
  943.         jr z,cmd_copy0
  944.         ld hl,tcantwrite
  945.         jp cmderror
  946.        
  947. cmd_copy_close_fcb2
  948.         ld de,fcb2
  949.         OS_FCLOSE
  950.         ret
  951.  
  952. cmd_copy_close_fcb
  953.         ld de,fcb
  954.         OS_FCLOSE
  955.         ret
  956.  
  957.         endif
  958.        
  959. cmd_error_cant_copy
  960.         ld hl,tcantcopy
  961.         jp cmderror
  962.        
  963. cmd_exit
  964.         QUIT
  965.        
  966. cmd_rem
  967.         ret
  968.        
  969. cmd_mem
  970.         ld hl,tfree
  971.         call prtext
  972.         ld b,0
  973. cmd_mem0
  974.         push bc
  975.         OS_NEWPAGE
  976.         pop bc
  977.         or a
  978.         jr nz,cmd_mem_del
  979.         inc b
  980.         push de
  981.         jr cmd_mem0
  982. cmd_mem_del
  983.         ld c,b
  984.         inc b
  985.         dec b
  986.         jr z,cmd_mem_q
  987. cmd_mem_del0
  988.         pop de
  989.         push bc
  990.         OS_DELPAGE
  991.         pop bc
  992.         djnz cmd_mem_del0
  993. cmd_mem_q
  994. ;c=free pages
  995.         ld l,c
  996.         ld h,0
  997.         call prword
  998.         jp prcrlf
  999.  
  1000. cmd_drop
  1001.         ld hl,(execcmd_pars)
  1002.         ld a,(hl)
  1003.         or a
  1004.         jp z,cmd_error_nopars
  1005.         xor a
  1006.         ld d,a
  1007. cmd_drop_par0
  1008.         add a,d
  1009.         ld e,a ;id
  1010.         add a,a
  1011.         add a,a
  1012.         add a,e
  1013.         add a,a
  1014.         ld d,a ;d=e*10
  1015.         ld a,(hl)
  1016.         inc hl
  1017.         sub '0'
  1018.         cp 10
  1019.         jr c,cmd_drop_par0
  1020.         ;e=id
  1021.         OS_DROPAPP
  1022.         or a
  1023.         ret z
  1024.         ld hl,twrongid
  1025.         jp cmderror
  1026.        
  1027. cmd_proc
  1028.         ld e,1 ;no id 0
  1029. cmd_proc0
  1030.         push de
  1031.         OS_GETAPPMAINPAGES ;d,e,h,l=pages in 0000,4000,8000,c000, c=flags
  1032.         or a
  1033.         jr nz,cmd_proc_skip
  1034.         ld a,d
  1035.         pop de
  1036.         push de
  1037.          push bc
  1038.         push af
  1039.         ex de,hl
  1040.         ld h,0
  1041.         call prword
  1042.         ld a,' '
  1043.         PRCHAR
  1044.         pop af ;main page
  1045.         SETPG32KHIGH
  1046.          pop bc ;c=flags
  1047.          push bc
  1048.          bit factive,c
  1049.          ld a,'-'
  1050.          jr z,$+4
  1051.          ld a,'+'
  1052.          PRCHAR
  1053.          pop bc
  1054.          push bc
  1055.          bit fgfx,c
  1056.          ld a,' '
  1057.          jr z,$+4
  1058.          ld a,'g'
  1059.          PRCHAR
  1060.          pop bc
  1061.           bit fwaiting,c
  1062.           ld a,' '
  1063.           jr z,$+4
  1064.           ld a,'w'
  1065.           PRCHAR
  1066.          ld a,' '
  1067.          PRCHAR
  1068.         ld hl,0xc000+COMMANDLINE
  1069.         call prtext
  1070.         call prcrlf
  1071. cmd_proc_skip
  1072.         pop de
  1073.         inc e
  1074.         ld a,e
  1075.         inc a ;no id #ff
  1076.         jr nz,cmd_proc0
  1077.         ret
  1078.  
  1079. cmd_date
  1080.         OS_GETTIME ;ix=date, hl=time
  1081.         push hl
  1082.         push ix
  1083.         pop hl ;date
  1084.         call prdate
  1085.         ld a,' '
  1086.         PRCHAR
  1087.         pop hl ;time
  1088.         call prtime
  1089.         jp prcrlf
  1090.        
  1091. cmd_t0
  1092. cmd_t1
  1093. cmd_t2
  1094. cmd_t3
  1095. cmd_t4
  1096. cmd_t5
  1097. cmd_t6
  1098. cmd_t7
  1099.         ld a,(wordbuf)
  1100.         sub '0'
  1101.         call cmdsetdrive
  1102.         or a
  1103.         ret z
  1104.         ld hl,tdrivenotfound
  1105.         jp cmderror
  1106.        
  1107. cmderror
  1108.         push hl
  1109.         ld e,#42
  1110.         OS_SETCOLOR
  1111.         pop hl
  1112.         call prtext
  1113.         ld e,COLOR
  1114.         OS_SETCOLOR
  1115. prcrlf
  1116.         ld a,#0d
  1117.         PRCHAR
  1118.         ld a,#0a
  1119.         PRCHAR
  1120.         ret
  1121.        
  1122. cmdsetdrive
  1123.         ;ld (curdrive),a
  1124.         ld e,a
  1125.         OS_SETDRV
  1126.         ret
  1127.  
  1128. cmd_type
  1129.         ld hl,(execcmd_pars)
  1130.         ld a,(hl)
  1131.         or a
  1132.         jp z,cmd_error_nopars
  1133.         ld de,wordbuf
  1134.         call getword ;hl=terminator/space addr
  1135.  
  1136.         ld de,wordbuf ;de=drive/path/file
  1137.         OS_OPENHANDLE
  1138.         or a
  1139.         jp nz,cmd_error_wrongfile
  1140.         ld a,b
  1141.         ld (close_file1_handle),a
  1142.         ld hl,close_file1
  1143.         push hl
  1144.        
  1145. cmd_type0
  1146. ;B = file handle, DE = Buffer address, HL = Number of bytes to read
  1147.         push bc
  1148.         ld de,cmd_type_buf
  1149.         ld hl,1
  1150.         OS_READHANDLE
  1151. ;HL = Number of bytes actually read, A=error
  1152.         pop bc
  1153.         ld a,h
  1154.         or l
  1155.         ret z ;0 bytes remain
  1156.         push bc
  1157. cmd_type_buf=$+1
  1158.         ld a,0
  1159.         PRCHAR
  1160.         pop bc
  1161.         jr cmd_type0
  1162.        
  1163. cmd_echo
  1164.         ld hl,(execcmd_pars)
  1165.         call prtext
  1166.         jp prcrlf
  1167.        
  1168. cmd_pause
  1169.         YIELDGETKEYLOOP
  1170.          cp key_redraw
  1171.          jr z,cmd_pause
  1172.         ret
  1173.  
  1174. cmd_copydir
  1175.         ld hl,(execcmd_pars)
  1176.         ld a,(hl)
  1177.         or a
  1178.         jp z,cmd_error_nopars
  1179.         ld de,wordbuf
  1180.         call getword ;hl=terminator/space addr
  1181.         call skipspaces
  1182.         ld a,(hl)
  1183.         or a
  1184.         jp z,cmd_error_notenoughpars
  1185.         ld de,wordbuf2
  1186.         call getword ;hl=terminator/space addr
  1187.  
  1188. cmd_copydir_go
  1189.         ld hl,wordbuf
  1190.         call prtext
  1191.         ld a,'>'
  1192.         PRCHAR
  1193.         ld hl,wordbuf2
  1194.         call prtext
  1195.         call prcrlf
  1196.        
  1197.         ld de,wordbuf2
  1198.         OS_MKDIR
  1199.  
  1200.         ld bc,0 ;эюьхЁ Їрщыр т фшЁхъЄюЁшш
  1201. cmd_copydir0
  1202.         push bc
  1203.         ld de,cmdprompt
  1204.         OS_CHDIR
  1205.         ld de,wordbuf
  1206.         OS_CHDIR
  1207.         pop bc
  1208.         push bc
  1209.         call getdirfcb_bc
  1210.         pop bc
  1211.         ret nz ;jr nz,cmd_copydirq
  1212.  
  1213.         ld a,(fcb_filename)
  1214.         cp '.'
  1215.         jr z,cmd_copydir0_skip
  1216.         ld a,(fcb+FCB_FATTRIB)
  1217.         and FATTRIB_DIR
  1218.         jr nz,cmd_copydir0_recursive
  1219.        
  1220.         push bc
  1221.         ld hl,fcb_filename
  1222.         ld de,filenamebuf
  1223.         call cpmname_to_dotname
  1224.         call open_setdir2_create_copy
  1225.         pop bc
  1226. cmd_copydir0_skip
  1227.         inc bc
  1228.         jr cmd_copydir0
  1229. ;cmd_copydirq
  1230.         ;ret
  1231.  
  1232.         macro STRPUSH
  1233. ;hl=string addr
  1234.         xor a
  1235.         push af
  1236.          ld a,(hl)
  1237.          inc hl
  1238.          or a
  1239.          push af
  1240.         jr nz,$-4
  1241.         pop af
  1242. ;т ёЄхъх ыхцшЄ \0, ЄхъёЄ (схч ЄхЁьшэрЄюЁр)
  1243.         endm
  1244.        
  1245.         macro STRPOP
  1246. ;hl=string addr
  1247.         ld d,h
  1248.         ld e,l
  1249.          pop af
  1250.          ld (hl),a
  1251.          inc hl
  1252.          or a
  1253.         jr nz,$-4
  1254.         ex de,hl
  1255.         call strmirror
  1256.         endm
  1257.        
  1258. strmirror
  1259. ;hl=string addr
  1260.         ld d,h
  1261.         ld e,l
  1262.         call strlen
  1263.         ld b,h
  1264.         ld c,l
  1265. ;de=эрўрыю, bc=hl=фышэр
  1266.         ;ld h,b
  1267.         ;ld l,c
  1268.         add hl,de ;hl=ъюэхЎ+1
  1269.         srl b
  1270.         rr c ;bc=wid/2
  1271. mirrorbytes0
  1272.         dec hl
  1273.         ld a,(de)
  1274.         ldi
  1275.         dec hl
  1276.         ld (hl),a
  1277.         jp pe,mirrorbytes0
  1278.         ret
  1279.        
  1280. cmd_copydir0_recursive
  1281. ;recursive copydir <wordbuf>/<filename> <wordbuf2>/<filename>
  1282.         push bc
  1283.         ld hl,wordbuf
  1284.         STRPUSH
  1285.         ld hl,wordbuf2
  1286.         STRPUSH
  1287.         ;ld hl,cmdprompt
  1288.         ;STRPUSH
  1289.  
  1290.         ld hl,wordbuf
  1291.         ld bc,0
  1292.         xor a
  1293.         cpir
  1294.         dec hl ;hl=terminator addr
  1295.         ld (hl),'/'
  1296.         inc hl
  1297.         ex de,hl
  1298.         ld hl,fcb_filename
  1299.         ;ld de,filenamebuf
  1300.         call cpmname_to_dotname
  1301.        
  1302.         ld hl,wordbuf2
  1303.         ld bc,0
  1304.         xor a
  1305.         cpir
  1306.         dec hl ;hl=terminator addr
  1307.         ld (hl),'/'
  1308.         inc hl
  1309.         ex de,hl
  1310.         ld hl,fcb_filename
  1311.         ;ld de,filenamebuf
  1312.         call cpmname_to_dotname
  1313.        
  1314.         call cmd_copydir_go
  1315.  
  1316. ;restore dirnames, file #
  1317.         ;ld hl,cmdprompt
  1318.         ;STRPOP
  1319.         ld hl,wordbuf2
  1320.         STRPOP
  1321.         ld hl,wordbuf
  1322.         STRPOP
  1323.         pop bc
  1324.         jr cmd_copydir0_skip
  1325.        
  1326. open_setdir2_create_copy
  1327.         ;open....
  1328.         ld de,filenamebuf;wordbuf ;de=drive/path/file
  1329.         OS_OPENHANDLE
  1330.         or a
  1331.         jp nz,cmd_error_wrongfile
  1332.         ld a,b
  1333.         ld (close_file1_handle),a
  1334.         ld hl,close_file1
  1335.         push hl
  1336.  
  1337.         ;set dir2...
  1338.         ld de,cmdprompt
  1339.         OS_CHDIR
  1340.         ld de,wordbuf2
  1341.         OS_CHDIR
  1342.  
  1343.         ;create....
  1344.         ld de,filenamebuf;2;wordbuf2 ;de=drive/path/file
  1345.         OS_CREATEHANDLE
  1346.         or a
  1347.         jp nz,cmd_error_cant_copy
  1348.         ld a,b
  1349.         ld (cmd_copy_close_file2_handle),a
  1350.         ld hl,cmd_copy_close_file2
  1351.         push hl
  1352.  
  1353.         ;copy....
  1354.         jp cmd_copy0
  1355.        
  1356.        
  1357. getdirfcb_bc
  1358. ;bc=file number in current dir to read to fcb
  1359. ;nz=error
  1360.         push bc
  1361.         ld de,fcb
  1362.         OS_SETDTA
  1363.         ld de,fcbmask
  1364.         OS_FSEARCHFIRST ;de = pointer to unopened FCB (filename with ????????), read matching FCB to DTA
  1365.         pop bc
  1366.         or a
  1367.         ret nz
  1368.        
  1369. getdirfcb_bc0
  1370.         ld a,b
  1371.         or c
  1372.         ret z
  1373.         dec bc
  1374.         push bc
  1375.         ld de,fcb
  1376.         OS_SETDTA
  1377.         ld de,fcbmask
  1378.         OS_FSEARCHNEXT ;(NOT CP/M!!!)de = pointer to unopened FCB (filename with ????????), read matching FCB to DTA
  1379.         pop bc
  1380.         or a
  1381.         jr z,getdirfcb_bc0
  1382.         ret
  1383.        
  1384.        
  1385. ;hl = poi to filename in string
  1386. findlastslash.
  1387. nfopenfnslash.
  1388.         ld d,h
  1389.         ld e,l ;de = after last slash
  1390. ;find last slash
  1391. nfopenfnslash0.
  1392.         ld a,[hl]
  1393.         inc hl
  1394.         or a
  1395.         jr z,nfopenfnslashq.
  1396.         cp '/'
  1397.         jr nz,nfopenfnslash0.
  1398.         jr nfopenfnslash.
  1399. nfopenfnslashq.
  1400. ;de = after last slash
  1401.         ret
  1402.  
  1403. commandslist
  1404.         dw cmd_dir
  1405.         db "dir",0
  1406.         dw cmd_t0
  1407.         db "0:",0
  1408.         dw cmd_t1
  1409.         db "1:",0
  1410.         dw cmd_t2
  1411.         db "2:",0
  1412.         dw cmd_t3
  1413.         db "3:",0
  1414.         dw cmd_t4
  1415.         db "4:",0
  1416.         dw cmd_t5
  1417.         db "5:",0
  1418.         dw cmd_t6
  1419.         db "6:",0
  1420.         dw cmd_t7
  1421.         db "7:",0
  1422.         dw cmd_del
  1423.         db "del",0
  1424.         dw cmd_exit
  1425.         db "exit",0
  1426.         dw cmd_cd
  1427.         db "cd",0
  1428.         dw cmd_copy
  1429.         db "copy",0
  1430.         dw cmd_rem
  1431.         db "rem",0
  1432.         dw cmd_md
  1433.         db "md",0
  1434.         dw cmd_ren
  1435.         db "ren",0
  1436.         dw cmd_mem
  1437.         db "mem",0
  1438.         dw cmd_proc
  1439.         db "proc",0
  1440.         dw cmd_drop
  1441.         db "drop",0
  1442.         dw cmd_date
  1443.         db "date",0
  1444.         dw cmd_start
  1445.         db "start",0
  1446.         dw cmd_copydir
  1447.         db "copydir",0
  1448.         dw cmd_type
  1449.         db "type",0
  1450.         dw cmd_echo
  1451.         db "echo",0
  1452.         dw cmd_pause
  1453.         db "pause",0
  1454.        
  1455.         dw -1 ;ъюэхЎ ЄрсышЎ√ ъюьрэф
  1456.  
  1457. tunknowncommand
  1458.         db "Unknown command",0
  1459. tdrivenotfound
  1460.         db "Drive not found",0
  1461. tnopars
  1462.         db "No parameters",0
  1463. tnotenoughpars
  1464.         db "Not enough parameters",0
  1465. tcantcopy
  1466.         db "Can't copy",0
  1467. tcantwrite
  1468.         db "Can't write",0
  1469. twrongpath
  1470.         db "Wrong path",0
  1471. twrongfile
  1472.         db "Wrong file",0
  1473. tcantmakedir
  1474.         db "Can't make the directory",0
  1475. tcantrename
  1476.         db "Can't rename",0
  1477. t_files_crlf
  1478.         db " files",#0d,#0a,0
  1479. tfree
  1480.         db "free pages=",0
  1481. twrongid
  1482.         db "Wrong ID",0
  1483.        
  1484. oldtimer
  1485.         dw 0
  1486.        
  1487. wordbuf
  1488.         ds MAXCMDSZ+1
  1489. wordbuf2
  1490.         ds MAXCMDSZ+1
  1491. filenamebuf
  1492.         ds MAXCMDSZ+1
  1493. filenamebuf2
  1494.         ds MAXCMDSZ+1
  1495.  
  1496. fcb
  1497.         ds FCB_sz
  1498. fcb_filename=fcb+FCB_FNAME        
  1499.  
  1500. fcbmask
  1501.         db 0
  1502.         db "???????????"
  1503.         ds FCB_sz-11-1
  1504. fcbmask_filename=fcbmask+FCB_FNAME
  1505.  
  1506. fcb2
  1507.         ds FCB_sz
  1508. fcb2_filename=fcb2+FCB_FNAME        
  1509.  
  1510. fcb_bat
  1511.         ds FCB_sz
  1512. fcb_bat_filename=fcb_bat+FCB_FNAME        
  1513.  
  1514. oldpath ;TODO єсЁрЄ№ (ъюуфр сєфхЄ loadapp ўхЁхч OPENHANDLE)
  1515.         ds MAXPATH_sz;MAXCMDSZ+1
  1516.  
  1517. sysdir
  1518.         ds MAXPATH_sz
  1519.        
  1520. oldcmd
  1521.         ds MAXCMDSZ+1
  1522.        
  1523. copybuf
  1524.         ds 128
  1525. copybuf_sz=$-copybuf
  1526.  
  1527.         align 256
  1528. file_buf
  1529.         ds 128
  1530. file_buf_end=$-1
  1531.  
  1532.         include "../_sdk/prdword.asm"
  1533.         include "../_sdk/loadpage.asm"
  1534.         include "../_sdk/cmdpr.asm"
  1535.  
  1536. cmd_end
  1537.  
  1538.         display "cmd size ",/d,cmd_end-cmd_begin," bytes"
  1539.  
  1540.         savebin "cmd.com",cmd_begin,cmd_end-cmd_begin
  1541.        
  1542.         ;LABELSLIST "..\us\user.l"
  1543.