?login_element?

Subversion Repositories NedoOS

Rev

Rev 1518 | Blame | Compare with Previous | Last modification | View Log | Download

  1.         DEVICE ZXSPECTRUM128
  2.         include "../_sdk/sys_h.asm"
  3.  
  4. TSPACES_FILENAME_SZ=42;41
  5. PRSTDIO=1
  6.         if PRSTDIO
  7. _COLOR=0x0007;0x07
  8. _COLOR_RED=0x0107;0x17
  9.         else
  10. _COLOR=0x07
  11. _COLOR_RED=0x17
  12.         endif
  13.  
  14.         org PROGSTART
  15. cmd_begin
  16.         ld sp,0x4000 ;не должен опускаться ниже #3b00! иначе возможна порча OS
  17.         call initstdio
  18.         ld a,(stdiohgt)
  19.         dec a
  20.         ld (textedhgt),a
  21.         ;ld e,6 ;textmode
  22.         ;OS_SETGFX
  23.  
  24.         ;YIELD ;чтобы cmd мог доделать свои дела на экране
  25.        
  26.         ;ld e,COLOR
  27.         ;OS_CLS
  28.        
  29.         ld hl,twinto866
  30. mktwinto866_0
  31.         ld e,(hl)
  32.         ld d,t866towin/256
  33.         ld a,l
  34.         ld (de),a
  35.         inc l
  36.         jr nz,mktwinto866_0
  37.  
  38.         ld hl,COMMANDLINE ;command line
  39.         call skipword
  40.         call skipspaces
  41.         ld a,(hl)
  42.         or a
  43.         jr z,noautoload
  44. ;command line = "texted <file to load>"
  45.         ld (texted_filenameaddr),hl
  46.         ex de,hl ;de=drive/path/file
  47.         OS_OPENHANDLE
  48. ;b=new file handle
  49.  
  50.         ld hl,0
  51.         ld de,0
  52. nvview_load0 ;TODO сделать как в nvview
  53.         push bc
  54.         push de
  55.         push hl
  56.         call reservepage
  57.         pop hl
  58.         pop de
  59.         pop bc
  60.         ret nz ;no memory
  61.         ;ld a,#c000/256
  62.         ;call cmd_loadpage
  63.  
  64.         push bc
  65.        
  66.         push de
  67.         push hl
  68.         ld de,0xc000
  69.         ld hl,0x4000
  70. ;B = file handle, DE = Buffer address, HL = Number of bytes to read
  71.         OS_READHANDLE
  72. ;HL = Number of bytes actually read, A=error
  73.         ld b,h
  74.         ld c,l
  75.         ld hl,0x4000
  76.         or a
  77.         sbc hl,bc ;NZ = bytes to read != bytes actually read
  78.         pop hl
  79.         pop de
  80.  
  81.         push af ;NZ = bytes to read != bytes actually read
  82.         add hl,bc
  83.         jr nc,$+3
  84.         inc de
  85.         pop af ;NZ = bytes to read != bytes actually read
  86.  
  87.         pop bc
  88.  
  89.         ;or a
  90.         jr z,nvview_load0
  91. ;dehl=true file size (for TRDOSFS)
  92.         ld (filesize),hl
  93.         ld (filesizeHSW),de
  94.        
  95.         OS_CLOSEHANDLE
  96.        
  97.         ;ld hl,text
  98.         ;call prtext
  99. noautoload
  100.         ld hl,(texted_filenameaddr)
  101.         ld de,tshown_filename
  102. ;copy hl->de no more than TSPACES_FILENAME_SZ bytes
  103.         ld b,TSPACES_FILENAME_SZ
  104.         call strcopy_maxb
  105.  
  106.         call textview
  107.         QUIT
  108.  
  109. strcopy_maxb
  110. ;copy hl->de no more than b bytes
  111. strcopy_maxb0
  112.         ld a,(hl)
  113.         or a
  114.         ret z
  115.         ld (de),a
  116.         inc hl
  117.         inc de
  118.         djnz strcopy_maxb0
  119.         ret
  120.  
  121. ;out: hl=after terminator
  122.         if 1==1
  123. prtext
  124. ;hl=text
  125.         push hl
  126.         call strlen ;hl=length
  127.         pop de ;de=text
  128.         push de
  129.         push hl
  130.         call sendchars
  131.         pop hl
  132.         pop de
  133.         add hl,de
  134.         inc hl ;out: hl=after terminator
  135.         ret
  136.  
  137. strlen
  138. ;hl=str
  139. ;out: hl=length
  140.         ld bc,0 ;чтобы точно найти терминатор
  141.         xor a
  142.         cpir ;найдём обязательно, если длина=0, то bc=-1 и т.д.
  143.         ld hl,-1
  144.         or a
  145.         sbc hl,bc
  146.         ret
  147.         else
  148. prtext
  149. prtext0
  150.         ld a,(hl)
  151.         inc hl
  152.         or a
  153.         ret z
  154.         push hl
  155.         PRCHAR_
  156.         pop hl
  157.         jp prtext0
  158.         endif
  159.        
  160. skipword
  161. ;hl=string
  162. ;out: hl=terminator/space addr
  163. getword0
  164.         ld a,(hl)
  165.         or a
  166.         ret z
  167.         cp ' '
  168.         ret z
  169.         inc hl
  170.         jr getword0
  171.  
  172. skipspaces
  173. ;hl=string
  174. ;out: hl=after last space
  175.         ld a,(hl)
  176.         cp ' '
  177.         ret nz
  178.         inc hl
  179.         jr skipspaces
  180.  
  181. nv_setxy
  182. ;de=yx (kept)
  183. ;keeps hl
  184.         push de
  185.         push hl
  186.         push ix
  187.         SETXY_
  188.         pop ix
  189.         pop hl
  190.         pop de
  191.         ret
  192.        
  193. minhl_bc_tobc
  194.         or a
  195.         sbc hl,bc
  196.         add hl,bc
  197.         ret nc ;bc<=hl
  198.         ld b,h
  199.         ld c,l
  200.         ret
  201.  
  202. texted_build
  203.         ;OS_GETSTDINOUT ;e=stdin, d=stdout, h=stderr
  204.         ;ld a,d
  205.         ;ld (stdouthandle_wasatstart),a
  206.         ;ld a,e
  207.         ;ld (stdinhandle_wasatstart),a
  208.  
  209. ;keep current path
  210.         ld de,curpath
  211.         OS_GETPATH ;DE = Pointer to MAXPATH_sz byte buffer ;out: DE = Filled in with whole path string (WITH DRIVE! Finished by slash only if root dir), HL = Pointer to start of last item
  212. ;new app, get pages for new app, load cmd with command line from cmdbuf
  213.         call loadapp ;NZ=error ;e=id
  214. ;run cmd
  215.         push de
  216.         OS_RUNAPP
  217.         pop de
  218. ;wait for finish
  219.         WAITPID ;не должно быть, если команда была .bat!
  220.        ;ld (lastresult),hl
  221.  
  222. ;set current path
  223.         ld de,curpath
  224.         OS_CHDIR
  225.         jp setredrawflag
  226.        
  227. loadapp
  228. ;set system path
  229.         OS_SETSYSDRV
  230.         ld de,tcmd
  231.         OS_OPENHANDLE
  232.         or a
  233.          push af
  234.         ld a,b
  235.         ld (curhandle),a
  236.          pop af
  237.         ret nz ;jr nz,execcmd_error ;NC!
  238.        
  239. ;set path for newapp
  240.         ld de,curpath
  241.         OS_CHDIR
  242.        
  243.         OS_NEWAPP ;на момент создания должна быть включена текущая директория!!!
  244.         or a
  245.         ret nz ;error ;NC!
  246. ;dehl=номера страниц в 0000,4000,8000,c000 нового приложения, b=id, a=error
  247.        push bc ;b=id
  248.         ld a,d
  249.         SETPGC000
  250.         push de
  251.         push hl
  252.         ld hl,cmdbuf
  253.         ld de,0xc000+COMMANDLINE
  254.         call strcopy
  255.         pop hl
  256.         pop de
  257.         call readfile_pages_dehl
  258.         ld a,(curhandle)
  259.         ld b,a
  260.         OS_CLOSEHANDLE
  261.        pop de ;d=id
  262.         ld e,d ;e=id
  263.         xor a
  264.         ret ;Z
  265.  
  266. strcopy
  267. ;hl->de
  268. strcopy0
  269.         ld a,(hl)
  270.         ldi
  271.         or a
  272.         jr nz,strcopy0
  273.         ret
  274.  
  275. readfile_pages_dehl
  276.         ld a,d
  277.         SETPGC000
  278.         ld a,0xc100/256
  279.         call cmd_loadpage
  280.         ret nz
  281.         ld a,e
  282.         call cmd_loadfullpage
  283.         ret nz
  284.         ld a,h
  285.         call cmd_loadfullpage
  286.         ret nz
  287.         ld a,l
  288. cmd_loadfullpage
  289.         SETPGC000
  290.         ld a,0xc000/256
  291. cmd_loadpage
  292. ;out: a=error, bc=bytes read
  293. ;keeps hl,de
  294.         push de
  295.         push hl
  296.         ld d,a
  297.         xor a
  298.         ld l,a
  299.         ld e,a
  300.         sub d
  301.         ld h,a ;de=buffer, hl=size
  302.         call readcurhandle
  303.         ld b,h
  304.         ld c,l
  305.         pop hl
  306.         pop de
  307.         or a
  308.         ret
  309.  
  310. readcurhandle
  311. curhandle=$+1
  312.         ld b,0
  313.         OS_READHANDLE
  314.         ret
  315.  
  316. textedhgt
  317.         db 0
  318. curpath
  319.         ds MAXPATH_sz
  320. tcmd
  321.         db "cmd.com",0
  322. cmdbuf
  323.         db "cmd build.bat",0
  324.  
  325. winquit
  326.         dw 0x0a1f ;de=yx
  327.         dw 0x0613 ;bc=hgt,wid
  328.         db 3 ;next line
  329.         db "Text not saved!",0
  330.         db 3 ;next line
  331.         db "     Quit?",0
  332.         db 0 ;end of window
  333.  
  334. prword
  335. ;hl=num
  336.         ld bc,prdwordbuf
  337.         push bc
  338.         call prword_hl_tobc ;bc'=buf
  339.         pop de
  340.         ld hl,5
  341.         jp sendchars
  342.  
  343.         include "../_sdk/prdword.asm"
  344.         include "textview.asm"
  345.         include "text_mem.asm"
  346.  
  347. playtextloop
  348.         db "  "
  349. playtextloopend ;нельзя определить конец проигрывания по playtextloop+1 - он сразу после декодирования пробела до его проигрывания
  350.         db 0
  351.        
  352.         include "../_sdk/say.asm"
  353.  
  354.         include "../_sdk/textwindow.asm"
  355. setdrawtablesneeded
  356. getmarkedfiles
  357.         ret
  358.         include "../_sdk/texteditln.asm"
  359.  
  360. strdelch
  361. ;delete char at (hl-1), shift string left
  362. ;keeps ix
  363. editcmd_bs0
  364.         ld a,(hl)
  365.         dec hl
  366.         ld (hl),a
  367.         inc hl
  368.         inc hl
  369.         or a
  370.         jr nz,editcmd_bs0
  371.         ret
  372.  
  373. strinsch
  374. ;insert char E at (hl), shift string right
  375. ;keeps ix
  376. editcmd_ins0
  377.         ld a,(hl)
  378.         ld (hl),e
  379.         ld e,a
  380.         inc hl
  381.         or a
  382.         jr nz,editcmd_ins0
  383.         ld (hl),a
  384.         ret
  385.  
  386.         include "../_sdk/stdio.asm"
  387.  
  388. filesize
  389.         dw 0
  390. filesizeHSW
  391.         dw 0
  392.  
  393. defaultfilename
  394.         db "1.txt",0
  395.        
  396. cmd_end
  397. textforplay
  398.         ds 256
  399.         db 0
  400.  
  401.         display "Size ",/d,cmd_end-cmd_begin," bytes"
  402.  
  403.         savebin "texted.com",cmd_begin,cmd_end-cmd_begin
  404.        
  405.         LABELSLIST "../../us/user.l",1
  406.