Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1 | daniel-mar | 1 | unit SFXBehavior; |
2 | |||
3 | interface |
||
4 | |||
5 | uses |
||
6 | SysUtils; |
||
7 | |||
8 | type |
||
9 | TConflictBehavior = (cbAvoid, cbOverwrite, cbNewer, cbAsk); |
||
10 | |||
11 | TCommentPresentation = (cpNone, cpBeforeExtracting, cpAfterExtracting); |
||
12 | |||
13 | TExtractionTarget = (etExtractHere, etDesktop, etAsk); |
||
14 | |||
15 | TZIPBehavior = record |
||
16 | ConflictBehavior: TConflictBehavior; |
||
17 | CommentPresentation: TCommentPresentation; |
||
18 | ExtractionTarget: TExtractionTarget; |
||
19 | end; |
||
20 | |||
21 | function ReadBehavior(c: string): TZIPBehavior; |
||
22 | function StripBehavior(c: string): string; |
||
23 | function BehaviorStrings(bh: TZipBehavior): string; |
||
24 | function RelocateBehaviorStringsToEnd(c: string): string; |
||
25 | |||
26 | implementation |
||
27 | |||
28 | const |
||
29 | C_SIGNATURE = 'ViaThinkSoft AutoSFX Archive Configuration'; |
||
30 | |||
31 | C_ASFX_CB_OVR = 'AutoSFX Conflict Behavior: Overwrite all'; |
||
32 | C_ASFX_CB_NEW = 'AutoSFX Conflict Behavior: Overwrite older'; |
||
33 | C_ASFX_CB_ASK = 'AutoSFX Conflict Behavior: Ask'; |
||
34 | C_ASFX_CB_AVO = 'AutoSFX Conflict Behavior: Avoid'; |
||
35 | |||
36 | C_ASFX_CP_BEF = 'AutoSFX Comment Presentation: Before extracting'; |
||
37 | C_ASFX_CP_AFT = 'AutoSFX Comment Presentation: After extracting'; |
||
38 | C_ASFX_CP_NON = 'AutoSFX Comment Presentation: None'; |
||
39 | |||
40 | C_ASFX_ET_HER = 'AutoSFX Extraction Target: Extract here'; |
||
41 | C_ASFX_ET_DES = 'AutoSFX Extraction Target: Extract to Desktop'; |
||
42 | C_ASFX_ET_ASK = 'AutoSFX Extraction Target: Choose directory'; |
||
43 | |||
44 | EINRUECK = '> '; // Optional |
||
45 | |||
46 | const |
||
47 | CB_DEFAULT = cbAvoid; |
||
48 | CP_DEFAULT = cpNone; |
||
49 | ET_DEFAULT = etExtractHere; |
||
50 | |||
51 | function ReadBehavior(c: string): TZIPBehavior; |
||
52 | |||
53 | function Vorkommen(s: string): boolean; |
||
54 | begin |
||
55 | s := AnsiLowerCase(s); |
||
56 | result := AnsiPos(s, c) > 0; |
||
57 | end; |
||
58 | |||
59 | begin |
||
60 | result.ConflictBehavior := CB_DEFAULT; |
||
61 | result.CommentPresentation := CP_DEFAULT; |
||
62 | result.ExtractionTarget := ET_DEFAULT; |
||
63 | |||
64 | c := AnsiLowerCase(c); |
||
65 | |||
66 | if Vorkommen(C_ASFX_CB_OVR) then |
||
67 | begin |
||
68 | result.ConflictBehavior := cbOverwrite; |
||
69 | end |
||
70 | else if Vorkommen(C_ASFX_CB_NEW) then |
||
71 | begin |
||
72 | result.ConflictBehavior := cbNewer; |
||
73 | end |
||
74 | else if Vorkommen(C_ASFX_CB_ASK) then |
||
75 | begin |
||
76 | result.ConflictBehavior := cbAsk; |
||
77 | end |
||
78 | else if Vorkommen(C_ASFX_CB_AVO) then |
||
79 | begin |
||
80 | result.ConflictBehavior := cbAvoid; |
||
81 | end; |
||
82 | |||
83 | if Vorkommen(C_ASFX_CP_BEF) then |
||
84 | begin |
||
85 | result.CommentPresentation := cpBeforeExtracting; |
||
86 | end |
||
87 | else if Vorkommen(C_ASFX_CP_AFT) then |
||
88 | begin |
||
89 | result.CommentPresentation := cpAfterExtracting; |
||
90 | end |
||
91 | else if Vorkommen(C_ASFX_CP_NON) then |
||
92 | begin |
||
93 | result.CommentPresentation := cpNone; |
||
94 | end; |
||
95 | |||
96 | if Vorkommen(C_ASFX_ET_HER) then |
||
97 | begin |
||
98 | result.ExtractionTarget := etExtractHere; |
||
99 | end |
||
100 | else if Vorkommen(C_ASFX_ET_DES) then |
||
101 | begin |
||
102 | result.ExtractionTarget := etDesktop; |
||
103 | end |
||
104 | else if Vorkommen(C_ASFX_ET_ASK) then |
||
105 | begin |
||
106 | result.ExtractionTarget := etAsk; |
||
107 | end; |
||
108 | end; |
||
109 | |||
110 | function StripBehavior(c: string): string; |
||
111 | |||
112 | procedure StripIt(s: string); |
||
113 | begin |
||
114 | c := StringReplace(c, EINRUECK + s+#13#10, '', [rfReplaceAll, rfIgnoreCase]); |
||
115 | c := StringReplace(c, EINRUECK + s+#13, '', [rfReplaceAll, rfIgnoreCase]); |
||
116 | c := StringReplace(c, EINRUECK + s+#10, '', [rfReplaceAll, rfIgnoreCase]); |
||
117 | c := StringReplace(c, EINRUECK + s, '', [rfReplaceAll, rfIgnoreCase]); |
||
118 | |||
119 | c := StringReplace(c, s+#13#10, '', [rfReplaceAll, rfIgnoreCase]); |
||
120 | c := StringReplace(c, s+#13, '', [rfReplaceAll, rfIgnoreCase]); |
||
121 | c := StringReplace(c, s+#10, '', [rfReplaceAll, rfIgnoreCase]); |
||
122 | c := StringReplace(c, s, '', [rfReplaceAll, rfIgnoreCase]); |
||
123 | end; |
||
124 | |||
125 | begin |
||
126 | StripIt(C_SIGNATURE); |
||
127 | |||
128 | StripIt(C_ASFX_CB_AVO); |
||
129 | StripIt(C_ASFX_CB_OVR); |
||
130 | StripIt(C_ASFX_CB_NEW); |
||
131 | StripIt(C_ASFX_CB_ASK); |
||
132 | |||
133 | StripIt(C_ASFX_CP_NON); |
||
134 | StripIt(C_ASFX_CP_BEF); |
||
135 | StripIt(C_ASFX_CP_AFT); |
||
136 | |||
137 | StripIt(C_ASFX_ET_HER); |
||
138 | StripIt(C_ASFX_ET_DES); |
||
139 | StripIt(C_ASFX_ET_ASK); |
||
140 | |||
141 | result := c; |
||
142 | end; |
||
143 | |||
144 | function BehaviorStrings(bh: TZipBehavior): string; |
||
145 | begin |
||
146 | result := C_SIGNATURE + #13#10 + EINRUECK; |
||
147 | |||
148 | case bh.ConflictBehavior of |
||
149 | cbAvoid: result := result + C_ASFX_CB_AVO; |
||
150 | cbOverwrite: result := result + C_ASFX_CB_OVR; |
||
151 | cbNewer: result := result + C_ASFX_CB_NEW; |
||
152 | cbAsk: result := result + C_ASFX_CB_ASK; |
||
153 | end; |
||
154 | |||
155 | result := result + #13#10 + EINRUECK; |
||
156 | |||
157 | case bh.CommentPresentation of |
||
158 | cpNone: result := result + C_ASFX_CP_NON; |
||
159 | cpBeforeExtracting: result := result + C_ASFX_CP_BEF; |
||
160 | cpAfterExtracting: result := result + C_ASFX_CP_AFT; |
||
161 | end; |
||
162 | |||
163 | result := result + #13#10 + EINRUECK; |
||
164 | |||
165 | case bh.ExtractionTarget of |
||
166 | etExtractHere: result := result + C_ASFX_ET_HER; |
||
167 | etDesktop: result := result + C_ASFX_ET_DES; |
||
168 | etAsk: result := result + C_ASFX_ET_ASK; |
||
169 | end; |
||
170 | |||
171 | result := result + #13#10; |
||
172 | end; |
||
173 | |||
174 | function RelocateBehaviorStringsToEnd(c: string): string; |
||
175 | var |
||
176 | bh: TZIPBehavior; |
||
177 | begin |
||
178 | bh := ReadBehavior(c); |
||
179 | c := StripBehavior(c); |
||
180 | c := TrimRight(c); |
||
181 | c := c + #13#10 + #13#10; |
||
182 | c := c + BehaviorStrings(bh); |
||
183 | result := c; |
||
184 | end; |
||
185 | |||
186 | end. |