Rev 68 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
68 | daniel-mar | 1 | program testuser; |
2 | |||
3 | {$APPTYPE CONSOLE} |
||
4 | |||
5 | {$R *.res} |
||
6 | |||
7 | uses |
||
8 | SysUtils, |
||
9 | Functions in 'Functions.pas'; |
||
10 | |||
11 | type |
||
12 | EInvalidName = class(Exception); |
||
13 | |||
14 | const |
||
15 | C_TEMPLATES: array[0..5] of String = |
||
16 | ('USER', 'COMP', 'SID', 'HOME', 'HOMESHARE', 'HOMECOMP'); |
||
17 | |||
18 | resourcestring |
||
19 | C_TEMPLATE_MARKER = ':%s:'; |
||
20 | C_EQUAL = '%s = %s'; |
||
21 | |||
22 | function _GetArgExpect(param1: string): string; |
||
23 | resourcestring |
||
24 | LNG_EXCEPTION = 'Unknown value "%s"'; |
||
25 | begin |
||
26 | if param1 = C_TEMPLATES[0] then |
||
27 | begin |
||
28 | result := Functions.GetUserName; |
||
29 | end |
||
30 | else if param1 = C_TEMPLATES[1] then |
||
31 | begin |
||
32 | result := Functions.GetComputerName; |
||
33 | end |
||
34 | else if param1 = C_TEMPLATES[2] then |
||
35 | begin |
||
36 | result := Functions.GetCurrentUserSid; |
||
37 | end |
||
38 | else if param1 = C_TEMPLATES[3] then |
||
39 | begin |
||
40 | result := Functions.GetHomeDir; |
||
41 | end |
||
42 | else if param1 = C_TEMPLATES[4] then |
||
43 | begin |
||
44 | result := ExpandEnvironmentStrings('%HOMESHARE%'); |
||
45 | if result = '%HOMESHARE%' then result := ''; |
||
46 | end |
||
47 | else if param1 = C_TEMPLATES[5] then |
||
48 | begin |
||
49 | result := Functions.GetHomeDir; |
||
50 | if result <> '' then |
||
51 | begin |
||
52 | result := '\\' + GetComputerName + '\' + StringReplace(result, ':', '$', []); |
||
53 | end; |
||
54 | end |
||
55 | else |
||
56 | begin |
||
57 | raise EInvalidName.CreateFmt(LNG_EXCEPTION, [param1]); |
||
58 | end; |
||
59 | end; |
||
60 | |||
61 | function _MaxTemplateLen: integer; |
||
62 | var |
||
63 | i, L: integer; |
||
64 | begin |
||
65 | result := -1; |
||
66 | for i := Low(C_TEMPLATES) to High(C_TEMPLATES) do |
||
67 | begin |
||
68 | L := Length(Format(C_TEMPLATE_MARKER, [C_TEMPLATES[i]])); |
||
69 | if L > result then result := L; |
||
70 | end; |
||
71 | end; |
||
72 | |||
73 | procedure _ShowSyntax; |
||
74 | resourcestring |
||
75 | LNG_SYNTAX_1 = 'Syntax:' + #13#10 + '%s [templateString] [comparisonValue]'; |
||
76 | LNG_SYNTAX_2 = 'templateString may contain following variables:'; |
||
77 | LNG_SYNTAX_3 = 'If comparisonValue is provided, the value will be compared with templateString ' + #13#10 + |
||
78 | 'where variables are resolved. The ExitCode will be 0 if the values match ' + #13#10 + |
||
79 | '(case insensitive) or 1 if the value does not match.' + #13#10#13#10 + |
||
80 | 'If comparisonValue is not provided, the value will be printed and the program' + #13#10 + |
||
81 | 'terminates with ExitCode 0.'; |
||
82 | var |
||
83 | i: integer; |
||
84 | s: string; |
||
85 | maxLen: integer; |
||
86 | begin |
||
87 | WriteLn(Format(LNG_SYNTAX_1, [UpperCase(ExtractFileName(ParamStr(0)))])); |
||
88 | WriteLn(''); |
||
89 | WriteLn(LNG_SYNTAX_2); |
||
90 | maxLen := _MaxTemplateLen; |
||
91 | for i := Low(C_TEMPLATES) to High(C_TEMPLATES) do |
||
92 | begin |
||
93 | s := C_TEMPLATES[i]; |
||
94 | WriteLn(Format(C_EQUAL, [EnforceLength(Format(C_TEMPLATE_MARKER, [s]), |
||
95 | maxLen, ' ', true), _GetArgExpect(s)])); |
||
96 | end; |
||
97 | WriteLn(''); |
||
98 | WriteLn(LNG_SYNTAX_3); |
||
99 | WriteLn(''); |
||
100 | end; |
||
101 | |||
102 | function _Expand(AInput: string): string; |
||
103 | var |
||
104 | i: integer; |
||
105 | s: string; |
||
106 | begin |
||
107 | result := AInput; |
||
108 | for i := Low(C_TEMPLATES) to High(C_TEMPLATES) do |
||
109 | begin |
||
110 | s := C_TEMPLATES[i]; |
||
111 | result := StringReplace(result, Format(C_TEMPLATE_MARKER, [s]), |
||
112 | _GetArgExpect(s), [rfIgnoreCase, rfReplaceAll]); |
||
113 | end; |
||
114 | end; |
||
115 | |||
116 | function _Main: integer; |
||
117 | var |
||
118 | arg2expect: string; |
||
119 | begin |
||
120 | result := 0; |
||
121 | |||
122 | if (ParamCount() = 0) or (ParamCount() > 2) or (ParamStr(1) = '/?') then |
||
123 | begin |
||
124 | _ShowSyntax; |
||
125 | result := 2; |
||
126 | Exit; |
||
127 | end; |
||
128 | |||
129 | arg2expect := _Expand(ParamStr(1)); |
||
130 | |||
131 | if ParamCount() = 1 then |
||
132 | begin |
||
133 | WriteLn(Format(C_EQUAL, [ParamStr(1), arg2expect])); |
||
134 | end |
||
135 | else if ParamCount() = 2 then |
||
136 | begin |
||
137 | if not StrICmp(ParamStr(2), arg2expect) then result := 1; |
||
138 | end; |
||
139 | end; |
||
140 | |||
141 | begin |
||
142 | ExitCode := _Main; |
||
143 | end. |