{$APPTYPE CONSOLE} var T: Text; F: File; S, OS, KeyName: String; C: Cardinal; Count, Code, Key: Integer; Total: Integer = 0; const NumKeysToSave = 10; KeyNames: array[1..NumKeysToSave] of String = ('Up', 'Down', 'Left', 'Right', 'Jump', 'Fire', 'Duck', 'Switch', 'Reload', 'Reset'); var Frame: set of 1..NumKeysToSave; FrameW: Word absolute Frame; begin if ParamCount<>2 then begin WriteLn('Usage: ', ParamStr(0), ' Input.hmds Output.hmd'); Halt(1); end; Assign(T, ParamStr(1)); Reset(T); Assign(F, ParamStr(2)); ReWrite(F, 1); C := 0; BlockWrite(F, C, 4); while not EoF(T) do begin ReadLn(T, S); OS := S; if Pos('#', S)<>0 then S := Copy(S, 1, Pos('#', S)-1); while (Length(S)>0) and (S[Length(S)] in [' ', #9]) do S := Copy(S, 1, Length(S)-1); if (Pos(#9, S)=0) then Continue; Val(Copy(S, 1, Pos(#9, S)-1), Count, Code); if Code<>0 then begin WriteLn('Bad count: ', S); Halt(1); end; Frame := []; Delete(S, 1, Pos(#9, S)); if S<>'None' then begin S := S + '+'; while S<>'' do begin KeyName := Copy(S, 1, Pos('+', S)-1); Delete(S, 1, Pos('+', S)); Key := 0; for C := Low(KeyNames) to High(KeyNames) do if KeyNames[C] = KeyName then Key := C; if Key = 0 then begin WriteLn('Bad key name: ', KeyName); Halt(1); end; Frame := Frame + [Key]; end; end; //WriteLn(Count, 'x', FrameW); WriteLn(Total, #9, OS); Inc(Total, Count); for C := 1 to Count do BlockWrite(F, Frame, SizeOf(Frame)); end; Close(F); Close(T); end.