Вложений: 1
Библиотека обработки текстов
Здравствуйте, друзья!
Мне удалось на днях закончить написание Библиотеки обработки текстов для PL65 :)
Я опубликовал соответствующее видео на Youtube.
Вот ссылка:
https://www.youtube.com/playlist?lis...xcsQqkHaMotUB4
Код Библиотеки:
Код:
!====================================!
! TEXT.LIB !
! Text Functions Library for PL65 !
! Programming Language !
!------------------------------------!
! Evgeny Zolotarev,(aka 576XE), 2023 !
!====================================!
POINTER sP BYTE sV BASED sP
BYTE wV BASED sP
!====================================!
FUNC Left$(INT sA,sL,n)
STRING out$[256] INT i
BEGIN
FOR i=0 TO n DO
sP=sA+i out$[i,i]=CHR$(sV)
NEXT
END out$
!------------------------------------!
FUNC Mid$(INT sA,sL,m,n)
STRING out$[256] INT i
BEGIN
sA=sA+m-1
FOR i=0 TO n DO
sP=sA+i out$[i,i]=CHR$(sV)
NEXT
END out$
!------------------------------------!
FUNC Right$(INT sA,sL,n)
STRING out$[256] INT i
BEGIN
sA=sA+sL-n
FOR i=0 TO n DO
sP=sA+i out$[i,i]=CHR$(sV)
NEXT
END out$
!------------------------------------!
FUNC Pos(INT pA,pL,sA,sL)
POINTER pP BYTE pV BASED pP
INT i,j,psn BYTE f
BEGIN
IF pL<=sL THEN
sL=sL-pL+1
i=0 j=0
! While Fail ...
! Repeating along the String
REPEAT
f=$FF
! If Success...
! Indexing along the Pattern
FOR j=0 TO pL-1 DO
sP=sA+i+j pP=pA+j
IF sV<>pV THEN f=0 ENDIF
NEXT
i=i+1
UNTIL (i=sL OR f<>0)
IF f<>0 THEN psn=i ELSE psn=0
ENDIF
ELSE psn=0 ENDIF
END psn
!------------------------------------!
FUNC Conc$(INT sA,sL,pA,pL)
STRING out$[256] INT i,j
BEGIN
FOR i=0 TO sL DO
sP=sA+i out$[i,i]=CHR$(sV)
NEXT
FOR j=0 TO pL DO
sP=pA+j out$[i+j,i+j]=CHR$(sV)
NEXT
i=sL out$[i,i]=" "
END out$
!------------------------------------!
FUNC Ins$(INT pA,pL,sA,sL,m)
STRING out$[256],a$[256],b$[256]
INT n
BEGIN
a$=Left$(sA,sL,m) b$=Right$(sA,sL,sL-m-1)
n=LEN(a$)+pL+1
a$=Conc$(a$,pA,pL)
out$=Conc$(a$,b$)
END out$
!------------------------------------!
FUNC Del$(INT sA,sL,m,n)
STRING a$[256],b$[256],out$[256] INT i
BEGIN
a$=Left$(sA,sL,m) b$=Right$(sA,sL,sL-m-n)
out$=Conc$(a$,b$)
i=LEN(a$) out$[i,i]=" "
sP=.out-2 wV=sL-n+1
END out$
!------------------------------------!
FUNC Inv$(INT sA,sL,m,n)
STRING out$[256] INT i
BEGIN
out$=Mid$(sA,sL,1,sL)
FOR i=0 TO n-1 DO
sP=.out+m-1+i sV=sV+128
NEXT
END out$
!------------------------------------!
FUNC Upper$(INT sA,sL,m,n)
STRING out$[256] INT i
BEGIN
out$=Mid$(sA,sL,1,sL)
FOR i=0 TO n-1 DO
sP=.out+m-1+i
IF sV>$60 AND sV<$7B
THEN sV=sV-$20 ENDIF
NEXT
END out$
!------------------------------------!
FUNC Lower$(INT sA,sL,m,n)
STRING out$[256] INT i
BEGIN
out$=Mid$(sA,sL,1,sL)
FOR i=0 TO n-1 DO
sP=.out+m-1+i
IF sV>$40 AND sV<$5B
THEN sV=sV+$20 ENDIF
NEXT
END out$
!====================================!
ENDFILE
Вот код проверочной программы:
Код:
!====================================!
! TEXT.PRG !
! Text Functions Program for PL65 !
! Programming Language !
!------------------------------------!
! Evgeny Zolotarev,(aka 576XE), 2023 !
!====================================!
INCLUDE TERMINAL.LIB
INCLUDE TEXT.LIB
!====================================!
MAIN()
STRING s$[256],p$[256],a$[256],out$[256] INT psn,m,n
BEGIN
s$="Moscow Alma-Ata Petersburg Evpatoria Feodosia Simeiz Konakovo"
p$="Alma-Ata" a$="Syktyvkar"
m=15 n=12
CR()
WRTSTR("Left$ - ") WRTLN(Left$(s$,6))
WRTSTR("Mid$ - ") WRTLN(Mid$(s$,8,8))
WRTSTR("Right$ - ") WRTLN(Right$(s$,8))
CR()
psn=Pos(p$,s$) WRTSTR("Pos - ") WRITE(psn) CR()
CR()
WRTSTR("Conc$ - ") WRTLN(Conc$(p$,a$))
out$=Ins$(a$,s$,m) WRTSTR("Ins$ -") WRTLN(out$)
out$=Del$(s$,m,n) WRTSTR("Del$ -") WRTLN(out$)
m=17 n=10
CR()
WRTSTR("Inv$ - ") WRTLN(Inv$(s$,m,n))
WRTSTR("Upper$ - ") WRTLN(Upper$(s$,m,n))
WRTSTR("Lower$ - ") WRTLN(Lower$(s$,m,n))
END
!====================================!
Вложение 78787
Пользуйтесь наздоровье :)
zen