?login_element?

Subversion Repositories NedoOS

Rev

Rev 1484 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  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.         ex de,hl
  83.         add hl,bc
  84.         ex de,hl
  85.         jr nc,$+3
  86.         inc hl
  87.         pop af ;NZ = bytes to read != bytes actually read
  88.  
  89.         pop bc
  90.  
  91.         ;or a
  92.         jr z,nvview_load0
  93. ;hlde=true file size (for TRDOSFS)
  94.         ld (filesize),de
  95.         ld (filesizeHSW),hl
  96.        
  97.         OS_CLOSEHANDLE
  98.        
  99.         ;ld hl,text
  100.         ;call prtext
  101. noautoload
  102.         ld hl,(texted_filenameaddr)
  103.         ld de,tshown_filename
  104. ;copy hl->de no more than TSPACES_FILENAME_SZ bytes
  105.         ld b,TSPACES_FILENAME_SZ
  106.         call strcopy_maxb
  107.  
  108.         call textview
  109.         QUIT
  110.  
  111. strcopy_maxb
  112. ;copy hl->de no more than b bytes
  113. strcopy_maxb0
  114.         ld a,(hl)
  115.         or a
  116.         ret z
  117.         ld (de),a
  118.         inc hl
  119.         inc de
  120.         djnz strcopy_maxb0
  121.         ret
  122.  
  123. ;out: hl=after terminator
  124.         if 1==1
  125. prtext
  126. ;hl=text
  127.         push hl
  128.         call strlen ;hl=length
  129.         pop de ;de=text
  130.         push de
  131.         push hl
  132.         call sendchars
  133.         pop hl
  134.         pop de
  135.         add hl,de
  136.         inc hl ;out: hl=after terminator
  137.         ret
  138.  
  139. strlen
  140. ;hl=str
  141. ;out: hl=length
  142.         ld bc,0 ;чтобы точно найти терминатор
  143.         xor a
  144.         cpir ;найдём обязательно, если длина=0, то bc=-1 и т.д.
  145.         ld hl,-1
  146.         or a
  147.         sbc hl,bc
  148.         ret
  149.         else
  150. prtext
  151. prtext0
  152.         ld a,(hl)
  153.         inc hl
  154.         or a
  155.         ret z
  156.         push hl
  157.         PRCHAR_
  158.         pop hl
  159.         jp prtext0
  160.         endif
  161.        
  162. skipword
  163. ;hl=string
  164. ;out: hl=terminator/space addr
  165. getword0
  166.         ld a,(hl)
  167.         or a
  168.         ret z
  169.         cp ' '
  170.         ret z
  171.         inc hl
  172.         jr getword0
  173.  
  174. skipspaces
  175. ;hl=string
  176. ;out: hl=after last space
  177.         ld a,(hl)
  178.         cp ' '
  179.         ret nz
  180.         inc hl
  181.         jr skipspaces
  182.  
  183. nv_setxy
  184. ;de=yx (kept)
  185. ;keeps hl
  186.         push de
  187.         push hl
  188.         push ix
  189.         SETXY_
  190.         pop ix
  191.         pop hl
  192.         pop de
  193.         ret
  194.        
  195. minhl_bc_tobc
  196.         or a
  197.         sbc hl,bc
  198.         add hl,bc
  199.         ret nc ;bc<=hl
  200.         ld b,h
  201.         ld c,l
  202.         ret
  203.  
  204. texted_build
  205.         ;OS_GETSTDINOUT ;e=stdin, d=stdout, h=stderr
  206.         ;ld a,d
  207.         ;ld (stdouthandle_wasatstart),a
  208.         ;ld a,e
  209.         ;ld (stdinhandle_wasatstart),a
  210.  
  211. ;keep current path
  212.         ld de,curpath
  213.         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
  214. ;new app, get pages for new app, load cmd with command line from cmdbuf
  215.         call loadapp ;NZ=error ;e=id
  216. ;run cmd
  217.         push de
  218.         OS_RUNAPP
  219.         pop de
  220. ;wait for finish
  221.         WAITPID ;не должно быть, если команда была .bat!
  222.        ;ld (lastresult),hl
  223.  
  224. ;set current path
  225.         ld de,curpath
  226.         OS_CHDIR
  227.         jp setredrawflag
  228.        
  229. loadapp
  230. ;set system path
  231.         OS_SETSYSDRV
  232.         ld de,tcmd
  233.         OS_OPENHANDLE
  234.         or a
  235.          push af
  236.         ld a,b
  237.         ld (curhandle),a
  238.          pop af
  239.         ret nz ;jr nz,execcmd_error ;NC!
  240.        
  241. ;set path for newapp
  242.         ld de,curpath
  243.         OS_CHDIR
  244.        
  245.         OS_NEWAPP ;на момент создания должна быть включена текущая директория!!!
  246.         or a
  247.         ret nz ;error ;NC!
  248. ;dehl=номера страниц в 0000,4000,8000,c000 нового приложения, b=id, a=error
  249.        push bc ;b=id
  250.         ld a,d
  251.         SETPGC000
  252.         push de
  253.         push hl
  254.         ld hl,cmdbuf
  255.         ld de,0xc000+COMMANDLINE
  256.         call strcopy
  257.         pop hl
  258.         pop de
  259.         call readfile_pages_dehl
  260.         ld a,(curhandle)
  261.         ld b,a
  262.         OS_CLOSEHANDLE
  263.        pop de ;d=id
  264.         ld e,d ;e=id
  265.         xor a
  266.         ret ;Z
  267.  
  268. strcopy
  269. ;hl->de
  270. strcopy0
  271.         ld a,(hl)
  272.         ldi
  273.         or a
  274.         jr nz,strcopy0
  275.         ret
  276.  
  277. readfile_pages_dehl
  278.         ld a,d
  279.         SETPGC000
  280.         ld a,0xc100/256
  281.         call cmd_loadpage
  282.         ret nz
  283.         ld a,e
  284.         call cmd_loadfullpage
  285.         ret nz
  286.         ld a,h
  287.         call cmd_loadfullpage
  288.         ret nz
  289.         ld a,l
  290. cmd_loadfullpage
  291.         SETPGC000
  292.         ld a,0xc000/256
  293. cmd_loadpage
  294. ;out: a=error, bc=bytes read
  295. ;keeps hl,de
  296.         push de
  297.         push hl
  298.         ld d,a
  299.         xor a
  300.         ld l,a
  301.         ld e,a
  302.         sub d
  303.         ld h,a ;de=buffer, hl=size
  304.         call readcurhandle
  305.         ld b,h
  306.         ld c,l
  307.         pop hl
  308.         pop de
  309.         or a
  310.         ret
  311.  
  312. readcurhandle
  313. curhandle=$+1
  314.         ld b,0
  315.         OS_READHANDLE
  316.         ret
  317.  
  318. textedhgt
  319.         db 0
  320. curpath
  321.         ds MAXPATH_sz
  322. tcmd
  323.         db "cmd.com",0
  324. cmdbuf
  325.         db "cmd build.bat",0
  326.  
  327. winquit
  328.         dw 0x0a1f ;de=yx
  329.         dw 0x0613 ;bc=hgt,wid
  330.         db 3 ;next line
  331.         db "Text not saved!",0
  332.         db 3 ;next line
  333.         db "     Quit?",0
  334.         db 0 ;end of window
  335.  
  336. prword
  337. ;hl=num
  338.         push hl
  339.         pop iy
  340.         ld de,prdwordbuf
  341.         push de
  342.         exx
  343.         ld a,' '
  344.         ld (prnumdwordcmd_zero_sym),a
  345.         ld hl,0
  346.         call prword_hliy ;de'=buf
  347.         pop de
  348.         ld hl,5
  349.         jp sendchars
  350.  
  351.         include "../_sdk/prdword.asm"
  352.         include "textview.asm"
  353.         include "text_mem.asm"
  354.  
  355.         include "../_sdk/textwindow.asm"
  356. setdrawtablesneeded
  357. getmarkedfiles
  358.         ret
  359.         include "../_sdk/texteditln.asm"
  360.  
  361. strdelch
  362. ;delete char at (hl-1), shift string left
  363. ;keeps ix
  364. editcmd_bs0
  365.         ld a,(hl)
  366.         dec hl
  367.         ld (hl),a
  368.         inc hl
  369.         inc hl
  370.         or a
  371.         jr nz,editcmd_bs0
  372.         ret
  373.  
  374. strinsch
  375. ;insert char E at (hl), shift string right
  376. ;keeps ix
  377. editcmd_ins0
  378.         ld a,(hl)
  379.         ld (hl),e
  380.         ld e,a
  381.         inc hl
  382.         or a
  383.         jr nz,editcmd_ins0
  384.         ld (hl),a
  385.         ret
  386.  
  387.         include "../_sdk/stdio.asm"
  388.  
  389. filesize
  390.         dw 0
  391. filesizeHSW
  392.         dw 0
  393.  
  394. defaultfilename
  395.         db "1.txt",0
  396.        
  397. cmd_end
  398.  
  399.         display "Size ",/d,cmd_end-cmd_begin," bytes"
  400.  
  401.         savebin "texted.com",cmd_begin,cmd_end-cmd_begin
  402.        
  403.         LABELSLIST "../../us/user.l",1
  404.