?login_element?

Subversion Repositories NedoOS

Rev

Rev 1509 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1509 Rev 1518
Line 223... Line 223...
223
        inc hl
223
        inc hl
224
        add hl,bc
224
        add hl,bc
225
        inc hl ;пропускаем терминатор
225
        inc hl ;пропускаем терминатор
226
        jr findline_lines0
226
        jr findline_lines0
227
       
227
       
228
readnum_
228
readnum_dehl_
229
;out: hlde=num, hl'=text, CY=error
229
;out: dehl=num, hl'=text, CY=error
230
        exx
230
        exx
231
        ld a,(hl)
231
        ld a,(hl)
232
        exx
232
        exx
233
        sub '0'
233
        sub '0'
234
        cp 10 ;NC = не число
234
        cp 10 ;NC = не число
235
        ccf ;CY = не число
235
        ccf ;CY = не число
236
        ret c ;error
236
        ret c ;error
237
readnum
237
readnum_dehl
238
;out: hlde=num, hl'=text, CY=error
238
;out: dehl=num, hl'=text, CY=error
239
        ld hl,0
239
        ld hl,0
240
        ld de,0 ;накопитель
240
        ld de,0 ;накопитель
241
readnum0
241
readnum0
242
        exx
242
        exx
243
        ld a,(hl)
243
        ld a,(hl)
Line 246... Line 246...
246
        cp 10 ;NC = конец числа
246
        cp 10 ;NC = конец числа
247
        jr nc,readnumq
247
        jr nc,readnumq
248
        exx
248
        exx
249
        inc hl
249
        inc hl
250
        exx
250
        exx
251
         push hl ;HSW
251
         push de ;HSW
252
         push de ;LSW
252
         push hl ;LSW
253
        sla e
253
        add hl,hl
254
        rl d
254
        rl e
255
        adc hl,hl ;*2
255
        rl d ;*2
256
        sla e
256
        add hl,hl
257
        rl d
257
        rl e
258
        adc hl,hl ;*4
258
        rl d ;*4
259
         pop bc ;LSW
259
         pop bc ;LSW
260
         ex de,hl
-
 
261
         add hl,bc
260
         add hl,bc
262
         ex de,hl
-
 
263
         pop bc ;HSW
261
         pop bc ;HSW
-
 
262
         ex de,hl
264
         adc hl,bc ;*5
263
         adc hl,bc ;*5
265
        sla e
264
         ex de,hl
-
 
265
        add hl,hl
266
        rl d
266
        rl e
267
        adc hl,hl ;*10
267
        rl d ;*10
268
        add a,e
268
        add a,l
269
        ld e,a
269
        ld l,a
270
        ld a,d
270
        ld a,h
271
        adc a,0
271
        adc a,0
272
        ld d,a
272
        ld h,a
273
        jr nc,$+3
273
        jr nc,$+3
274
        inc hl
274
        inc de
275
        jr readnum0
275
        jr readnum0
276
readnumq
276
readnumq
277
        call eatspaces
277
        call eatspaces
278
        or a ;NC=OK
278
        or a ;NC=OK
279
        ret
279
        ret
Line 296... Line 296...
296
add_or_run_line
296
add_or_run_line
297
;добавляет в программу строку в cmdbuf
297
;добавляет в программу строку в cmdbuf
298
        ld hl,cmdbuf
298
        ld hl,cmdbuf
299
        exx
299
        exx
300
        call eatspaces
300
        call eatspaces
301
        call readnum_ ;hlde=linenum, hl'=text, CY=error
301
        call readnum_dehl_ ;dehl=linenum, hl'=text, CY=error
-
 
302
        ex de,hl ;de номер
302
        jp c,cmd_run0;runline
303
        jp c,cmd_run0;runline
303
        exx
304
        exx
304
        ld a,(hl)
305
        ld a,(hl)
305
        exx
306
        exx
306
        or a
307
        or a
Line 377... Line 378...
377
       
378
       
378
        ret
379
        ret
379
       
380
       
380
delline
381
delline
381
;de=linenum
382
;de=linenum
382
        call findline ;hl=адрес строки или (progend)
383
        call findline ;de номер ;hl=адрес строки или (progend)
383
        ld bc,(progend)
384
        ld bc,(progend)
384
        or a
385
        or a
385
        sbc hl,bc
386
        sbc hl,bc
386
        add hl,bc
387
        add hl,bc
387
        ret z
388
        ret z
Line 754... Line 755...
754
        ld a,h
755
        ld a,h
755
        cpl
756
        cpl
756
        ld h,a
757
        ld h,a
757
        ret
758
        ret
758
       
759
       
759
 
-
 
760
neghlde
760
negdebc
761
        xor a
761
        xor a
762
        sub e
762
        sub c
-
 
763
        ld c,a
-
 
764
        ld a,0
-
 
765
        sbc a,b
-
 
766
        ld b,a
-
 
767
        ld a,0
-
 
768
        sbc a,e
763
        ld e,a
769
        ld e,a
764
        ld a,0
770
        ld a,0
765
        sbc a,d
771
        sbc a,d
766
        ld d,a
772
        ld d,a
-
 
773
        ret
-
 
774
negdehl
767
        ld a,0
775
        xor a
768
        sbc a,l
776
        sub l
769
        ld l,a
777
        ld l,a
770
        ld a,0
778
        ld a,0
771
        sbc a,h
779
        sbc a,h
772
        ld h,a
780
        ld h,a
773
        ret
-
 
774
 
-
 
775
negbcde
-
 
776
        xor a
781
        ld a,0
777
        sub e
782
        sbc a,e
778
        ld e,a
783
        ld e,a
779
        ld a,0
784
        ld a,0
780
        sbc a,d
785
        sbc a,d
781
        ld d,a
786
        ld d,a
782
        ld a,0
-
 
783
        sbc a,c
-
 
784
        ld c,a
-
 
785
        ld a,0
-
 
786
        sbc a,b
-
 
787
        ld b,a
-
 
788
        ret
787
        ret
789
 
788
 
790
prlinenum_tomem
789
prlinenum_tomem
-
 
790
;de=num
791
        ld bc,prdword_digit_tomem
791
        ld bc,prdword_digit_tomem
792
        ld (prdword_digit_prchar_jp),bc
792
        ld (prdword_digit_prchar_jp),bc
793
        ld hl,0
793
        ld hl,0
-
 
794
        ex de,hl
794
        jr prdword_subr
795
        jr _prdword_subr ;dehl=num
795
       
796
       
796
prword_de
797
prword_de
797
;de=num
798
;de=num
798
        ld hl,0
799
        ld hl,0
-
 
800
        ex de,hl
799
prdword_hlde
801
prdword_dehl
800
;hlde=num
802
;dehl=num
801
        ld bc,prdword_digit_toscr
803
        ld bc,prdword_digit_toscr
802
        ld (prdword_digit_prchar_jp),bc
804
        ld (prdword_digit_prchar_jp),bc
803
        bit 7,h
805
        bit 7,d
804
        jr z,prdword_hlde_positive
806
        jr z,prdword_positive
805
        ld a,'-'
807
        ld a,'-'
806
        call prdword_digit_prchar
808
        call prdword_digit_prchar
807
        call neghlde
809
        call negdehl
808
prdword_hlde_positive
810
prdword_positive
809
prdword_subr
811
_prdword_subr
810
        ld a,' '
812
        ld a,' '
811
        ld (prnumdwordcmd_zero),a
813
        ld (prnumdwordcmd_zero),a
812
        ld lx,0
814
        ld lx,0
813
        ld bc,1000000000/65536
815
        ld bc,1000000000/65536
814
        ld a,1000000000/256&#ff
816
        ld a,1000000000/256&#ff
815
        call prdword_digit
817
        call prdword_digit
816
        ld bc,100000000/65536
818
        ld bc,100000000/65536
817
        ld a,100000000/256&#ff
819
        ld a,100000000/256&#ff
818
        call prdword_digit
820
        call prdword_digit
819
        ld a,h
-
 
820
        ld lx,a
821
        ld lx,d
821
        ld h,l
-
 
822
        ld l,d
-
 
823
        ld d,e
822
        ld d,e
-
 
823
        ld e,h
-
 
824
        ld h,l
824
        ld bc,10000000/256
825
        ld bc,10000000/256
825
        ld a,10000000&#ff ;0x989680
826
        ld a,10000000&#ff ;0x989680
826
        call prdword_digit
827
        call prdword_digit
827
        ld bc,1000000/256
828
        ld bc,1000000/256
828
        ld a,1000000&#ff
829
        ld a,1000000&#ff
Line 840... Line 841...
840
        ld a,100&#ff
841
        ld a,100&#ff
841
        call prdword_digit
842
        call prdword_digit
842
        ld bc,10/256
843
        ld bc,10/256
843
        ld a,10&#ff
844
        ld a,10&#ff
844
        call prdword_digit
845
        call prdword_digit
845
        ld a,d
846
        ld a,h
846
        add a,'0'
847
        add a,'0'
847
prdword_digit_prchar
848
prdword_digit_prchar
848
prdword_digit_prchar_jp=$+1
849
prdword_digit_prchar_jp=$+1
849
        jp prdword_digit_tomem
850
        jp prdword_digit_tomem
850
prdword_digit_toscr
851
prdword_digit_toscr
Line 861... Line 862...
861
        ld (hl),a
862
        ld (hl),a
862
        inc hl
863
        inc hl
863
        exx
864
        exx
864
        ret
865
        ret
865
prdword_digit
866
prdword_digit
866
;hlde=num
867
;deh[l]=num
867
;bca0=divisor
868
;bca0=divisor
868
        push de
869
        push hl
-
 
870
        ex de,hl
869
        ld e,a
871
        ld e,a
870
        ld a,d
872
        ld a,d
871
        ld d,'0'-1
873
        ld d,'0'-1
872
;hla0=num
874
;hla0=num
873
;bce0=divisor
875
;bce0=divisor
Line 882... Line 884...
882
        add a,e
884
        add a,e
883
        adc hl,bc
885
        adc hl,bc
884
        jr nc,$+4
886
        jr nc,$+4
885
        inc lx
887
        inc lx
886
         ld c,d ;digit
888
         ld c,d ;digit
-
 
889
        ex de,hl
887
        pop de
890
        pop hl
888
        ld d,a ;hlde=num
891
        ld h,a ;dehl=num
889
         ld a,c ;digit
892
         ld a,c ;digit
890
        cp '0'
893
        cp '0'
891
        jr nz,prnumdwordcmd_nozero
894
        jr nz,prnumdwordcmd_nozero
892
prnumdwordcmd_zero=$+1
895
prnumdwordcmd_zero=$+1
893
        ld a,' '
896
        ld a,' '
Line 921... Line 924...
921
        ret
924
        ret
922
        endif
925
        endif
923
       
926
       
924
;getvar_int
927
;getvar_int
925
;a=name (char)
928
;a=name (char)
926
;out: hlde
929
;out: dehl
927
        ;call findvar_int ;hl=addr
930
        ;call findvar_int ;hl=addr
928
getint
931
getint
929
        ld e,(hl)
932
        ld e,(hl)
930
        inc hl
933
        inc hl
931
        ld d,(hl)
934
        ld d,(hl)
932
        inc hl
935
        inc hl
933
        ld a,(hl)
936
        ld a,(hl)
934
        inc hl
937
        inc hl
935
        ld h,(hl)
938
        ld h,(hl)
936
        ld l,a
939
        ld l,a
-
 
940
        ex de,hl
937
        ret
941
        ret
938
 
942
 
939
;getvar_str
943
;getvar_str
940
;a=name (char)
944
;a=name (char)
941
;out: hl=straddr (first byte = len (0..255))
945
;out: hl=straddr (first byte = len (0..255))
942
        ;call findvar_str ;hl=addr
946
        ;call findvar_str ;hl=addr
943
        ;ret
947
        ;ret
944
 
948
 
945
setvar_int
949
setvar_int
946
;a=name (char), hlde=value
950
;a=name (char), dehl=value
-
 
951
        ex de,hl
947
        push hl
952
        push hl
948
        call findvar_int ;hl=addr
953
        call findvar_int ;hl=addr
949
        ld (hl),e
954
        ld (hl),e
950
        inc hl
955
        inc hl
951
        ld (hl),d
956
        ld (hl),d