+++ /dev/null
-unit StringIO;\r
-interface\r
-\r
-type\r
- characters = Set of Char;\r
-\r
-function Capitalize(str: String): String;\r
-function Upper(str: String): String;\r
-function Lower(str: String): String;\r
-function iCASE(str: String): String;\r
-function RotStrL(str1,str2: String; shift: Byte): String;\r
-function RotStrR(str1,str2: String; shift: Byte): String;\r
-function ExpStrL(str: String; size: Byte; chr: Char): String;\r
-function ExpStrR(str: String; size: Byte; chr: Char): String;\r
-function DietStr(str: String; size: Byte): String;\r
-function CutStr(str: String): String;\r
-function FlipStr(str: String): String;\r
-function FilterStr(str: String; chr0,chr1: Char): String;\r
-function FilterStr2(str: String; chr0: characters; chr1: Char): String;\r
-function Num2str(num: Longint; base: Byte): String;\r
-function Str2num(str: String; base: Byte): Longint;\r
-\r
-type\r
- tINPUT_STR_SETTING = Record\r
- insert_mode,\r
- replace_enabled,\r
- append_enabled: Boolean;\r
- character_set,\r
- valid_chars,\r
- word_characters: characters;\r
- terminate_keys: array[1..50] of Word\r
- end;\r
-type\r
- tINPUT_STR_ENVIRONMENT = Record\r
- keystroke: Word;\r
- locate_pos: Byte;\r
- end;\r
-const\r
- is_setting: tINPUT_STR_SETTING =\r
- (insert_mode: TRUE;\r
- replace_enabled: TRUE;\r
- append_enabled: TRUE;\r
- character_set: [#$20..#$0ff];\r
- valid_chars: [#$20..#$0ff];\r
- word_characters: ['A'..'Z','a'..'z','0'..'9','_'];\r
- terminate_keys: ($011b,$1c0d,$0000,$0000,$0000,\r
- $0000,$0000,$0000,$0000,$0000,\r
- $0000,$0000,$0000,$0000,$0000,\r
- $0000,$0000,$0000,$0000,$0000,\r
- $0000,$0000,$0000,$0000,$0000,\r
- $0000,$0000,$0000,$0000,$0000,\r
- $0000,$0000,$0000,$0000,$0000,\r
- $0000,$0000,$0000,$0000,$0000,\r
- $0000,$0000,$0000,$0000,$0000,\r
- $0000,$0000,$0000,$0000,$0000));\r
-var\r
- is_environment: tINPUT_STR_ENVIRONMENT;\r
-\r
-function InputStr(s: String; x,y,ln,ln1: Byte; atr1,atr2: Byte): String;\r
-function SameName(str1,str2: String): Boolean;\r
-function PathOnly(path: String): String;\r
-function NameOnly(path: String): String;\r
-function BaseNameOnly(path: String): String;\r
-function ExtOnly(path: String): String;\r
-\r
-implementation\r
-\r
-uses\r
- DOS,TxtScrIO;\r
-\r
-function Capitalize(str: String): String; assembler;\r
-asm\r
- mov esi,[str]\r
- mov edi,@result\r
- mov al,[esi]\r
- inc esi\r
- mov [edi],al\r
- inc edi\r
- xor ecx,ecx\r
- mov cl,al\r
- jecxz @@4\r
- mov al,[esi]\r
- inc esi\r
- cmp al,'a'\r
- jb @@0\r
- cmp al,'z'\r
- ja @@0\r
- sub al,20h\r
-@@0: mov [edi],al\r
- inc edi\r
-@@1: mov ah,al\r
- mov al,[esi]\r
- inc esi\r
- cmp ah,' '\r
- jnz @@2\r
- cmp al,'a'\r
- jb @@2\r
- cmp al,'z'\r
- ja @@2\r
- sub al,20h\r
- jmp @@3\r
-@@2: cmp al,'A'\r
- jb @@3\r
- cmp al,'Z'\r
- ja @@3\r
- add al,20h\r
-@@3: mov [edi],al\r
- inc edi\r
- loop @@1\r
-@@4:\r
-end;\r
-\r
-function Upper(str: String): String; assembler;\r
-asm\r
- mov esi,[str]\r
- mov edi,@result\r
- mov al,[esi]\r
- inc esi\r
- mov [edi],al\r
- inc edi\r
- xor ecx,ecx\r
- mov cl,al\r
- jecxz @@3\r
-@@1: mov al,[esi]\r
- inc esi\r
- cmp al,'a'\r
- jb @@2\r
- cmp al,'z'\r
- ja @@2\r
- sub al,20h\r
-@@2: mov [edi],al\r
- inc edi\r
- loop @@1\r
-@@3:\r
-end;\r
-\r
-function Lower(str: String): String; assembler;\r
-asm\r
- mov esi,[str]\r
- mov edi,@result\r
- mov al,[esi]\r
- inc esi\r
- mov [edi],al\r
- inc edi\r
- xor ecx,ecx\r
- mov cl,al\r
- jecxz @@3\r
-@@1: mov al,[esi]\r
- inc esi\r
- cmp al,'A'\r
- jb @@2\r
- cmp al,'Z'\r
- ja @@2\r
- add al,20h\r
-@@2: mov [edi],al\r
- inc edi\r
- loop @@1\r
-@@3:\r
-end;\r
-\r
-function iCase(str: String): String; assembler;\r
-asm\r
- mov esi,[str]\r
- mov edi,@result\r
- mov al,[esi]\r
- inc esi\r
- mov [edi],al\r
- inc edi\r
- xor ecx,ecx\r
- mov cl,al\r
- jecxz @@5\r
- push edi\r
- push ecx\r
-@@1: mov al,[esi]\r
- inc esi\r
- cmp al,'a'\r
- jb @@2\r
- cmp al,'z'\r
- ja @@2\r
- sub al,20h\r
-@@2: mov [edi],al\r
- inc edi\r
- loop @@1\r
- pop ecx\r
- pop edi\r
-@@3: mov al,[edi]\r
- cmp al,'i'-20h\r
- jnz @@4\r
- add al,20h\r
-@@4: mov [edi],al\r
- inc edi\r
- loop @@3\r
-@@5:\r
-end;\r
-\r
-function RotStrL(str1,str2: String; shift: Byte): String;\r
-begin\r
- RotStrL := Copy(str1,shift+1,Length(str1)-shift)+\r
- Copy(str2,1,shift);\r
-end;\r
-\r
-function RotStrR(str1,str2: String; shift: Byte): String;\r
-begin\r
- RotStrR := Copy(str2,Length(str2)-shift+1,shift)+\r
- Copy(str1,1,Length(str1)-shift);\r
-end;\r
-\r
-function ExpStrL(str: String; size: Byte; chr: Char): String; assembler;\r
-asm\r
- mov esi,[str]\r
- mov edi,@result\r
- cld\r
- xor ecx,ecx\r
- lodsb\r
- cmp al,size\r
- jge @@1\r
- mov ah,al\r
- mov al,size\r
- stosb\r
- mov al,ah\r
- mov cl,size\r
- sub cl,al\r
- mov al,chr\r
- rep stosb\r
- mov cl,ah\r
- rep movsb\r
- jmp @@2\r
-@@1: stosb\r
- mov cl,al\r
- rep movsb\r
-@@2:\r
-end;\r
-\r
-function ExpStrR(str: String; size: Byte; chr: Char): String; assembler;\r
-asm\r
- mov esi,[str]\r
- mov edi,@result\r
- cld\r
- xor ecx,ecx\r
- lodsb\r
- cmp al,size\r
- jge @@1\r
- mov ah,al\r
- mov al,size\r
- stosb\r
- mov cl,ah\r
- rep movsb\r
- mov al,ah\r
- mov cl,size\r
- sub cl,al\r
- mov al,chr\r
- rep stosb\r
- jmp @@2\r
-@@1: stosb\r
- mov cl,al\r
- rep movsb\r
-@@2:\r
-end;\r
-\r
-function DietStr(str: String; size: Byte): String;\r
-begin\r
- If (Length(str) <= size) then\r
- begin\r
- DietStr := str;\r
- EXIT;\r
- end;\r
-\r
- Repeat\r
- Delete(str,size DIV 2,1)\r
- until (Length(str)+3 = size);\r
-\r
- Insert('...',str,size DIV 2);\r
- DietStr := str\r
-end;\r
-\r
-function CutStr(str: String): String;\r
-begin\r
- While (str[0] <> #0) and (str[1] in [#00,#32]) do Delete(str,1,1);\r
- While (str[0] <> #0) and (str[Length(str)] in [#00,#32]) do Delete(str,Length(str),1);\r
- CutStr := str;\r
-end;\r
-\r
-function FlipStr(str: String): String; assembler;\r
-asm\r
- mov esi,[str]\r
- mov edi,@result\r
- mov al,[esi]\r
- inc esi\r
- mov [edi],al\r
- inc edi\r
- dec edi\r
- xor ecx,ecx\r
- mov cl,al\r
- jecxz @@2\r
- add edi,ecx\r
-@@1: mov al,[esi]\r
- inc esi\r
- mov [edi],al\r
- dec edi\r
- loop @@1\r
-@@2:\r
-end;\r
-\r
-function FilterStr(str: String; chr0,chr1: Char): String; assembler;\r
-asm\r
- mov esi,[str]\r
- mov edi,@result\r
- mov al,[esi]\r
- inc esi\r
- mov [edi],al\r
- inc edi\r
- xor ecx,ecx\r
- mov cl,al\r
- jecxz @@3\r
-@@1: mov al,[esi]\r
- inc esi\r
- cmp al,chr0\r
- jnz @@2\r
- mov al,chr1\r
-@@2: mov [edi],al\r
- inc edi\r
- loop @@1\r
-@@3:\r
-end;\r
-\r
-const\r
- _treat_char: array[$80..$a5] of Char =\r
- 'CueaaaaceeeiiiAAE_AooouuyOU_____aiounN';\r
-\r
-function FilterStr2(str: String; chr0: characters; chr1: Char): String;\r
-\r
-var\r
- temp: Byte;\r
-\r
-begin\r
- For temp := 1 to Length(str) do\r
- If NOT (str[temp] in chr0) then\r
- If (str[temp] >= #$80) and (str[temp] <= #$a5) then\r
- str[temp] := _treat_char[BYTE(str[temp])]\r
- else If (str[temp] = #0) then str[temp] := ' '\r
- else str[temp] := chr1;\r
- FilterStr2 := str;\r
-end;\r
-\r
-function Num2str(num: Longint; base: Byte): String; assembler;\r
-\r
-const\r
- hexa: array[0..PRED(16)+32] of Char = '0123456789ABCDEF'+\r
- #0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0;\r
-asm\r
- xor eax,eax\r
- xor edx,edx\r
- xor edi,edi\r
- xor esi,esi\r
- mov eax,num\r
- xor ebx,ebx\r
- mov bl,base\r
- cmp bl,2\r
- jb @@3\r
- cmp bl,16\r
- ja @@3\r
- mov edi,32\r
-@@1: dec edi\r
- xor edx,edx\r
- div ebx\r
- mov esi,edx\r
- mov dl,byte ptr [hexa+esi]\r
- mov byte ptr [hexa+edi+16],dl\r
- and eax,eax\r
- jnz @@1\r
- mov esi,edi\r
- mov ecx,32\r
- sub ecx,edi\r
- mov edi,@result\r
- mov al,cl\r
- stosb\r
-@@2: mov al,byte ptr [hexa+esi+16]\r
- stosb\r
- inc esi\r
- loop @@2\r
- jmp @@4\r
-@@3: mov edi,@result\r
- xor al,al\r
- stosb\r
-@@4:\r
-end;\r
-\r
-const\r
- digits: array[0..35] of Char = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\r
-\r
-function Digit2index(digit: Char): Byte;\r
-\r
-var\r
- index: Byte;\r
-\r
-begin\r
- digit := UpCase(digit);\r
- index := 15;\r
- While (index > 0) and (digit <> digits[index]) do Dec(index);\r
- Digit2index := Index;\r
-end;\r
-\r
-function position_value(position,base: Byte): Longint;\r
-\r
-var\r
- value: Longint;\r
- index: Byte;\r
-\r
-begin\r
- value := 1;\r
- For index := 2 to position do value := value*base;\r
- position_value := value;\r
-end;\r
-\r
-function Str2num(str: String; base: Byte): Longint;\r
-\r
-var\r
- value: Longint;\r
- index: Byte;\r
-\r
-begin\r
- value := 0;\r
- For index := 1 to Length(str) do\r
- Inc(value,Digit2index(str[index])*\r
- position_value(Length(str)-index+1,base));\r
- Str2num := value;\r
-end;\r
-\r
-function InputStr(s: String; x,y,ln,ln1: Byte; atr1,atr2: Byte): String;\r
-\r
-var\r
- appn,for1st,qflg,ins: Boolean;\r
- cloc,xloc,xint,mx,attr: Byte;\r
- key: Word;\r
- cur: Longint;\r
- s1,s2: String;\r
-\r
-function LookupKey(key: Word; var table; size: Byte): Boolean; assembler;\r
-asm\r
- mov esi,[table]\r
- xor ecx,ecx\r
- mov cl,size\r
- mov al,1\r
- jecxz @@3\r
-@@1: lodsw\r
- cmp ax,key\r
- jz @@2\r
- loop @@1\r
-@@2: xor al,al\r
- jecxz @@3\r
- mov al,1\r
-@@3:\r
-end;\r
-\r
-function more(value1,value2: Byte): Byte; assembler;\r
-asm\r
- mov al,value1\r
- cmp al,value2\r
- jnb @@1\r
- mov al,value2\r
-@@1:\r
-end;\r
-\r
-begin\r
- s := Copy(s,1,ln);\r
- If (is_environment.locate_pos > ln1) then\r
- is_environment.locate_pos := ln1;\r
- If (is_environment.locate_pos > Length(s)+1) then\r
- is_environment.locate_pos := Length(s);\r
-\r
- cloc := is_environment.locate_pos;\r
- xloc := is_environment.locate_pos;\r
- xint := x;\r
- qflg := FALSE;\r
- ins := is_setting.insert_mode;\r
- appn := NOT is_setting.append_enabled;\r
-\r
- Dec(x);\r
- cur := GetCursor;\r
- If ins then ThinCursor else WideCursor;\r
- s1 := s;\r
- If (BYTE(s1[0]) > ln1) then s1[0] := CHR(ln1);\r
-\r
- ShowStr(Ptr(v_seg,v_ofs)^,xint,y,ExpStrR('',ln1,' '),atr1);\r
- ShowStr(Ptr(v_seg,v_ofs)^,xint,y,s1,atr2);\r
- for1st := TRUE;\r
-\r
- Repeat\r
- s2 := s1;\r
- If (xloc = 1) then s1 := Copy(s,cloc,ln1)\r
- else s1 := Copy(s,cloc-xloc+1,ln1);\r
-\r
- If NOT appn then attr := atr2\r
- else attr := atr1;\r
-\r
- If appn and for1st then\r
- begin\r
- ShowStr(Ptr(v_seg,v_ofs)^,xint,y,ExpStrR(s1,ln1,' '),atr1);\r
- for1st := FALSE;\r
- end;\r
-\r
- If (s2 <> s1) then\r
- ShowStr(Ptr(v_seg,v_ofs)^,xint,y,ExpStrR(s1,ln1,' '),atr1);\r
-\r
- If (ln1 < ln) then\r
- If (cloc-xloc > 0) and (Length(s) > 0) then\r
- ShowStr(Ptr(v_seg,v_ofs)^,xint,y,'\11',(attr AND $0f0)+$0f)\r
- else If (cloc-xloc = 0) and (Length(s) <> 0) then\r
- ShowStr(Ptr(v_seg,v_ofs)^,xint,y,s[1],attr)\r
- else\r
- ShowStr(Ptr(v_seg,v_ofs)^,xint,y,' ',atr1);\r
-\r
- If (ln1 < ln) then\r
- If (cloc-xloc+ln1 < Length(s)) then\r
- ShowStr(Ptr(v_seg,v_ofs)^,xint+ln1-1,y,'\10',(attr AND $0f0)+$0f)\r
- else If (cloc-xloc+ln1 = Length(s)) then\r
- ShowStr(Ptr(v_seg,v_ofs)^,xint+ln1-1,y,s[Length(s)],attr)\r
- else\r
- ShowStr(Ptr(v_seg,v_ofs)^,xint+ln1-1,y,' ',atr1);\r
-\r
- GotoXY(x+xloc,y);\r
- asm xor ah,ah; int 16h; mov key,ax end;\r
- If LookupKey(key,is_setting.terminate_keys,50) then qflg := TRUE;\r
-\r
- If NOT qflg then\r
- Case LO(key) of\r
- $09: appn := TRUE;\r
- $19: begin appn := TRUE; s := ''; cloc := 1; xloc := 1; end;\r
-\r
- $14: begin\r
- appn := TRUE;\r
- While (s[cloc] in is_setting.word_characters) and\r
- (cloc <= Length(s)) do Delete(s,cloc,1);\r
-\r
- While NOT (s[cloc] in is_setting.word_characters) and\r
- (cloc <= Length(s)) do Delete(s,cloc,1);\r
- end;\r
-\r
- $7f: begin\r
- appn := TRUE;\r
- While (s[cloc-1] in is_setting.word_characters) and\r
- (cloc > 1) do\r
- begin\r
- Dec(cloc); Delete(s,cloc,1);\r
- If (xloc > 1) then Dec(xloc);\r
- end;\r
-\r
- While NOT (s[cloc-1] in is_setting.word_characters) and\r
- (cloc > 1) do\r
- begin\r
- Dec(cloc); Delete(s,cloc,1);\r
- If (xloc > 1) then Dec(xloc);\r
- end;\r
- end;\r
-\r
- $11: begin appn := TRUE; Delete(s,cloc,Length(s)); end;\r
-\r
- $08: begin\r
- appn := TRUE;\r
- If (cloc > 1) then\r
- begin\r
- If (xloc > 1) then Dec(xloc);\r
- Dec(cloc); Delete(s,cloc,1);\r
- end;\r
- end;\r
-\r
- $00: begin\r
- If (HI(key) in [$73,$74,$4b,$4d,$52,$47,$4f]) then\r
- appn := TRUE;\r
-\r
- Case (HI(key)) of\r
- $73: begin\r
- While (s[cloc] in is_setting.word_characters) and\r
- (cloc > 1) do\r
- begin\r
- Dec(cloc);\r
- If (xloc > 1) then Dec(xloc);\r
- end;\r
-\r
- While NOT (s[cloc] in is_setting.word_characters) and\r
- (cloc > 1) do\r
- begin\r
- Dec(cloc);\r
- If (xloc > 1) then Dec(xloc);\r
- end;\r
- end;\r
-\r
- $74: begin\r
- While (s[cloc] in is_setting.word_characters) and\r
- (cloc < Length(s)) do\r
- begin\r
- Inc(cloc);\r
- If (xloc < ln1) then Inc(xloc);\r
- end;\r
-\r
- While NOT (s[cloc] in is_setting.word_characters) and\r
- (cloc < Length(s)) do\r
- begin\r
- Inc(cloc);\r
- If (xloc < ln1) then Inc(xloc);\r
- end;\r
- end;\r
-\r
- $4b: begin\r
- If (cloc > 1) then Dec(cloc);\r
- If (xloc > 1) then Dec(xloc);\r
- end;\r
-\r
- $4d: begin\r
- If (cloc < Length(s)) or ((cloc = Length(s)) and\r
- ((Length(s) < more(ln,ln1)))) then\r
- Inc(cloc);\r
- If (xloc < ln1) and (xloc <= Length(s)) then Inc(xloc);\r
- end;\r
-\r
- $53: begin\r
- appn := TRUE;\r
- If (cloc <= Length(s)) then Delete(s,cloc,1);\r
- end;\r
-\r
- $52: If is_setting.replace_enabled then\r
- begin\r
- ins := NOT ins;\r
- If ins then ThinCursor else WideCursor;\r
- end;\r
-\r
- $47: begin cloc := 1; xloc := 1; end;\r
-\r
- $4f: begin\r
- If (Length(s) < more(ln,ln1)) then cloc := Succ(Length(s))\r
- else cloc := Length(s);\r
- If (cloc < ln1) then xloc := cloc else xloc := ln1;\r
- end;\r
- end;\r
- end;\r
-\r
- else If NOT (LO(key) in [$09,$19,$0d,$14,$0b,$7f]) and\r
- (CHR(LO(key)) in characters(is_setting.character_set)) then\r
- begin\r
- If NOT appn then begin s := ''; cloc := 1; xloc := 1; end;\r
- appn := TRUE;\r
- If ins and (Length(s) < ln) then\r
- begin\r
- Insert(CHR(LO(key)),s,cloc);\r
- s := FilterStr2(s,is_setting.valid_chars,'_');\r
- If (cloc < ln) then Inc(cloc);\r
- If (xloc < ln) and (xloc < ln1) then Inc(xloc)\r
- end\r
- else\r
- If (Length(s) < ln) or NOT ins then\r
- begin\r
- If (cloc > Length(s)) and (Length(s) < ln) then\r
- Inc(BYTE(s[0]));\r
-\r
- s[cloc] := CHR(LO(key));\r
- s := FilterStr2(s,is_setting.valid_chars,'_');\r
- If (cloc < ln) then Inc(cloc);\r
- If (xloc < ln) and (xloc < ln1) then Inc(xloc);\r
- end;\r
- end;\r
- end;\r
- until qflg;\r
-\r
-// SetCursor(cur);\r
- If (cloc = 0) then is_environment.locate_pos := 1\r
- else is_environment.locate_pos := cloc;\r
- is_environment.keystroke := key;\r
- InputStr := s;\r
-end;\r
-\r
-function SameName(str1,str2: String): Boolean; assembler;\r
-\r
-var\r
- LastW: Word;\r
-\r
-asm\r
- xor eax,eax\r
- xor ecx,ecx\r
- mov esi,[str1]\r
- mov edi,[str2]\r
- xor ah,ah\r
- mov al,[esi]\r
- inc esi\r
- mov cx,ax\r
- mov al,[edi]\r
- inc edi\r
- mov bx,ax\r
- or cx,cx\r
- jnz @@1\r
- or bx,bx\r
- jz @@13\r
- jmp @@14\r
- xor dh,dh\r
-@@1: mov al,[esi]\r
- inc esi\r
- cmp al,'*'\r
- jne @@2\r
- dec cx\r
- jz @@13\r
- mov dh,1\r
- mov LastW,cx\r
- jmp @@1\r
-@@2: cmp al,'?'\r
- jnz @@3\r
- inc edi\r
- or bx,bx\r
- je @@12\r
- dec bx\r
- jmp @@12\r
-@@3: or bx,bx\r
- je @@14\r
- cmp al,'['\r
- jne @@11\r
- cmp word ptr [esi],']?'\r
- je @@9\r
- mov ah,byte ptr [edi]\r
- xor dl,dl\r
- cmp byte ptr [esi],'!'\r
- jnz @@4\r
- inc esi\r
- dec cx\r
- jz @@14\r
- inc dx\r
-@@4: mov al,[esi]\r
- inc esi\r
- dec cx\r
- jz @@14\r
- cmp al,']'\r
- je @@7\r
- cmp ah,al\r
- je @@6\r
- cmp byte ptr [esi],'-'\r
- jne @@4\r
- inc esi\r
- dec cx\r
- jz @@14\r
- cmp ah,al\r
- jae @@5\r
- inc esi\r
- dec cx\r
- jz @@14\r
- jmp @@4\r
-@@5: mov al,[esi]\r
- inc esi\r
- dec cx\r
- jz @@14\r
- cmp ah,al\r
- ja @@4\r
-@@6: or dl,dl\r
- jnz @@14\r
- inc dx\r
-@@7: or dl,dl\r
- jz @@14\r
-@@8: cmp al,']'\r
- je @@10\r
-@@9: mov al,[esi]\r
- inc esi\r
- cmp al,']'\r
- loopne @@9\r
- jne @@14\r
-@@10: dec bx\r
- inc edi\r
- jmp @@12\r
-@@11: cmp [edi],al\r
- jne @@14\r
- inc edi\r
- dec bx\r
-@@12: xor dh,dh\r
- dec cx\r
- jnz @@1\r
- or bx,bx\r
- jnz @@14\r
-@@13: mov al,1\r
- jmp @@16\r
-@@14: or dh,dh\r
- jz @@15\r
- jecxz @@15\r
- or bx,bx\r
- jz @@15\r
- inc edi\r
- dec bx\r
- jz @@15\r
- mov ax,LastW\r
- sub ax,cx\r
- add cx,ax\r
- sub esi,eax\r
- dec esi\r
- jmp @@1\r
-@@15: mov al,0\r
-@@16:\r
-end;\r
-\r
-var\r
- dir: DirStr;\r
- name: NameStr;\r
- ext: ExtStr;\r
-\r
-function PathOnly(path: String): String;\r
-begin\r
- FSplit(path,dir,name,ext);\r
- PathOnly := dir;\r
-end;\r
-\r
-function NameOnly(path: String): String;\r
-begin\r
- FSplit(path,dir,name,ext);\r
- NameOnly := name+ext;\r
-end;\r
-\r
-function BaseNameOnly(path: String): String;\r
-begin\r
- FSplit(path,dir,name,ext);\r
- BaseNameOnly := name;\r
-end;\r
-\r
-function ExtOnly(path: String): String;\r
-begin\r
- FSplit(path,dir,name,ext);\r
- Delete(ext,1,1);\r
- ExtOnly := ext;\r
-end;\r
-\r
-begin\r
- is_environment.locate_pos := 1;\r
-end.\r