?login_element?

Subversion Repositories NedoOS

Rev

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

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