diff --git a/src/apps/bin/keymap/Keymap.cpp b/src/apps/bin/keymap/Keymap.cpp index da2395a6ff..b64bdf3c80 100644 --- a/src/apps/bin/keymap/Keymap.cpp +++ b/src/apps/bin/keymap/Keymap.cpp @@ -693,6 +693,30 @@ Keymap::Save(entry_ref &ref) } +const char header_header[] = +"/*\tHaiku \t*/" +"/*\n" +" This file is generated automatically. Don't edit ! \n" +"*/\n"; + + + +void +Keymap::SaveAsHeader(entry_ref &ref) +{ + status_t err; + + BFile file(&ref, B_WRITE_ONLY | B_CREATE_FILE | B_ERASE_FILE ); + if ((err = file.InitCheck()) != B_OK) { + printf("error %s\n", strerror(err)); + return; + } + + file.Write(header_header, strlen(header_header)); + +} + + /* we need to know if a key is a modifier key to choose a valid key when several are pressed together */ diff --git a/src/apps/bin/keymap/Keymap.h b/src/apps/bin/keymap/Keymap.h index 094f4c30b7..da9da2c8d6 100644 --- a/src/apps/bin/keymap/Keymap.h +++ b/src/apps/bin/keymap/Keymap.h @@ -29,6 +29,7 @@ public: status_t LoadSource(FILE *f); status_t LoadSourceFromRef(entry_ref &ref); void SaveAsCurrent(); + void SaveAsHeader(entry_ref &ref); status_t Use(); void Dump(); bool IsModifierKey(uint32 keyCode); diff --git a/src/apps/bin/keymap/key_map.cpp b/src/apps/bin/keymap/key_map.cpp index 14d2a6a4bf..e9b8f90c63 100644 --- a/src/apps/bin/keymap/key_map.cpp +++ b/src/apps/bin/keymap/key_map.cpp @@ -26,6 +26,7 @@ static void usage(char *prog) " -l # load key map from standard input\n" " -r # restore system default key map\n" " -c # compile source keymap to binary\n" +" -h # compile source keymap to header\n" " -o # change output file to output_file (default:keymap.out)\n" , prog); } @@ -70,7 +71,15 @@ int main(int argc, char **argv) keymap.Save(output_ref); return 0; - } else + } else if (operation == 'h') { + entry_ref ref; + get_ref_for_path(argv[i], &ref); + Keymap keymap; + keymap.LoadSourceFromRef(ref); + + keymap.SaveAsHeader(output_ref); + return 0; + } else break; } }