/* * Set task space */ SYSCALL ER _tk_set_tsp( ID tskid, T_TSKSPC *pk_tskspc ) { TCB *tcb; ER ercd = E_OK; UINT prid; INT i; CHECK_TSKID_SELF(tskid); BEGIN_CRITICAL_SECTION; tcb = get_tcb_self(tskid); if ( tcb->state == TS_NONEXIST) { ercd = E_NOEXS; } else { ercd = mp_check_domain_and_protection_tsk(tskid, tcb->tskid, tcb->tskatr); if ( ercd != E_OK ) { goto error_exit; } /* When it is the currently running task, switch the current space */ prid = get_prid(); for ( i = 0; i < num_proc; i++ ) { if ( (i != prid) && (tcb == ctxtsk[i]) ) { ercd = E_OBJ; break; } } if ( ercd != E_OBJ ) { tcb->tskctxb.uatb = pk_tskspc->uatb; tcb->tskctxb.lsid = pk_tskspc->lsid; if ( ctxtsk[prid] == tcb ) { change_space(tcb->tskctxb.uatb, tcb->tskctxb.lsid); } } } error_exit: END_CRITICAL_NO_DISPATCH; return ercd; }
int main() { fp = fopen("log.txt", "w"); log_time(); fprintf(fp, "Start Programm\n"); int target_floor, target_room; int view_flag = 1; building *building_list = (building *) malloc(sizeof(building)); log_time(); fprintf(fp, "init building_list\n"); init(building_list); add_floor(building_list, FALSE); add_room(building_list, FALSE); add_room(building_list, FALSE); add_room(building_list, FALSE); while (1) { fflush(fp); if (view_flag) view_building(building_list, TRUE); else { view_room(building_list, target_floor, target_room); } switch (input_cmd()) { case 1: { // [1] 건물 확장 switch (input_extend_cmd()) { case 1: { // [1] 층 확장 add_floor(building_list, TRUE); break; } case 2: { // [2] 방 확장 add_room(building_list, TRUE); break; } } break; } case 2: { // [2] View 변환 if (view_flag) { printf("특정 방 내부 보여주기 로 View가 변환되었습니다.\n"); printf("층과 호수를 입력하세요\n"); if (tts_flag) { system("pico2wave -w test.wav \"Translated the view into the specific room viewing.\""); system("aplay -q test.wav"); system("pico2wave -w test.wav \"Input floor number and room number\""); system("aplay -q test.wav"); } scanf("%d %d", &target_floor, &target_room); view_flag = 0; } else { printf("전체 방 보여주기 로 View가 변환되었습니다.\n"); if (tts_flag) { system("pico2wave -w test.wav \"Translated the view into the total room viewing.\""); system("aplay -q test.wav"); } view_flag = 1; } break; } case 3: { // [3] 방 별 칸 변환 change_space(building_list); break; } case 4: { // [4] 칸 별 사람 이름 변환 change_name(building_list); break; } case 5: { search_name(building_list); break; } case 6: { // [6] TTS ON/OFF if (tts_flag) { printf("TTS를 사용하지않습니다.\n"); tts_flag = 0; } else { printf("TTS를 사용합니다.\n"); system("pico2wave -w test.wav \"From now, Use text to speach.\""); system("aplay -q test.wav"); tts_flag = 1; } break; } case 7: { // [5] 종료 printf("\n프로그램을 종료합니다.\n"); if (tts_flag) { system("pico2wave -w test.wav \"Exit Program.\""); system("aplay -q test.wav"); } return 0; break; } } } return 0; }