int print_number(int fd, va_list ap, char c) { int written = 0; switch (c) { case 's': written = print_str(fd, va_arg(ap, char *)); break; case 'd': written = print_dec(fd, va_arg(ap, uint64_t)); break; case 'o': written = print_oct(fd, va_arg(ap, uint64_t)); break; case 'x': written = print_hex(fd, va_arg(ap, uint64_t)); break; case 'c': written = print_chr(fd, va_arg(ap, uint64_t)); break; default: fputc(fd, c); written++; } return written; }
static void hex(const char *s) { unsigned long long i = 0; switch (s[0]) { case 'b': case 'B': i = read_bin(s + 1); break; case 'x': case 'X': i = read_hex(s + 1); break; case '0': if (s[1] == '\0') i = read_dec(s); else if (s[1] == 'x' || s[1] == 'X') i = read_hex(s + 2); else i = read_oct(s + 1); break; default: if (isdigit(*s)) i = read_dec(s); else usage(); break; } print_bin(i); print_chr(i); print_dec(i); print_hex(i); print_oct(i); }
static void stats_print_dec(unsigned int val, int digits, bool zero_pad) { char buffer[32]; char *p = buffer; while (val || digits > 0) { if (val) *(p++) = '0' + val % 10; else *(p++) = zero_pad ? '0' : ' '; val = val / 10; digits--; } while (p != buffer) { if (p[-1] == ' ' && p[-2] == ' ') p[-1] = '.'; print_chr(*(--p)); } }
FILE *g_fopen_excl(const char *filename, const char *mode, const char *description, int excl) { void *file_pointer; HFILE fd; APIRET ret; struct open_mode_table *entry = mode_table; int modes = OPEN_ACCESS_READWRITE; int openflags = OPEN_SHARE_DENYNONE; ULONG action; HFILE handle; USHORT rc; int waiting_temp=0; int time_init = time(NULL); if (checkblacklist(filename)) return NULL; while (entry->mode_string) { if (!strcmp(mode,entry->mode_string)) { modes = entry->modes; openflags = entry->openflags; break; } entry++; } switch (excl) { case PRIVATE_ACCESS: modes |= OPEN_SHARE_DENYREADWRITE; break; case PRIVATE_READ_ACCESS: modes |= OPEN_SHARE_DENYREAD; break; case PRIVATE_WRITE_ACCESS: modes |= OPEN_SHARE_DENYWRITE; break; default: modes |= OPEN_SHARE_DENYNONE; break; } while ((rc = DosOpen(filename,&handle,&action,0,FILE_NORMAL,openflags,modes,NULL)) !=0) { if ((time(NULL)-time_init) > 8) return (NULL); //if (rc == ERROR_FILE_NOT_FOUND) // return (NULL); if (rc != ERROR_SHARING_VIOLATION) return (NULL); DosSleep(500); if (!waiting_temp) print_string("Waiting..."); else { print_chr('.'); waiting_temp++; } } if (waiting_temp) print_cr(); file_pointer = fdopen(handle,mode); if (file_pointer) { if (add_file_entry(file_pointer,tswitch,filename,0,description)==-1) { fclose(file_pointer); file_pointer = NULL; } } else DosClose(handle); return (file_pointer); };
void global_newscan(int *board_num, struct board_info *new_board, struct bbs_board_info *bbs_info, char *directory, struct bbs_user_account *bbs_user, int *mail_pieces) { int cur_board = 1; int is_still_boards = 1; struct board_info test_board; char tempdirectory[30]; char s[250]; int state; int key_pr; int key; int num_new_msg; int skip; while (is_still_boards) { if (state=load_board_info(cur_board,&test_board,tempdirectory)) { if (state==2) is_still_boards = 0; } else { enter_board(cur_board,new_board,bbs_info,directory, bbs_user,mail_pieces); *board_num = cur_board; if ((num_new_msg=is_new_messages(bbs_info,*mail_pieces,bbs_user)) && (bbs_user->newscan)) { check_for_privates(); print_cr(); sprintf(s,"#|*f2|*h1%02d|*r1 [|*f2|*h1%s|*r1] New: |*f4|*h1%02d|*r1 [|*h1R|*h0]ead [|*h1S|*h0]kip [|*h1Q|*h0]uit: ",cur_board,new_board->title,num_new_msg); skip = 0; switch (get_hot_key_prompt(s,"RSQP",'R',1)) { case 'R' : new_messages(directory,bbs_info,mail_pieces, new_board,cur_board,bbs_user); break; case 'P' : break; case 'S' : skip=1; break; case 'Q' : is_still_boards=0; break; } if (!skip) { print_cr(); sprintf(s,"#|*f2|*h1%02d|*r1 [|*f2|*h1%s|*r1] Post on board? [|*h1Y|*h0/|*h1N|*h0/|*h1Q|*h0] ",cur_board,new_board->title,num_new_msg); special_code(1,tswitch); print_string(s); special_code(0,tswitch); key_pr = 1; while (key_pr) { key=wait_ch(); if (key>'Z') key -= 32; if (key == 'Y') { print_chr('Y'); print_cr(); key_pr = 0; send_a_bbs_message(*board_num,new_board,*mail_pieces,bbs_info); find_bbs(directory,bbs_info,mail_pieces,new_board->limit_messages); }; if (key == 'Q') { print_chr('Q'); print_cr(); key_pr = 0; is_still_boards = 0; }; if ((key == 13) || (key == 'N')) { print_chr('N'); print_cr(); key = 'N'; key_pr = 0; }; }; }; }; }; cur_board++; }; };
void list_bbs(char *directory, struct bbs_board_info *bbs_info, int num_files,struct bbs_user_account *bbs_user) { int file; int anyfile = 1; int key; int abort=0; char user_l[80]; char date_l[80]; char subject_l[120]; char num_l[120]; int count=0; FILE *fileptr; print_cr(); file=num_files; while ((file>0) && (!abort)) { file--; lock_dos(); if (open_bbs_file(directory,bbs_info,file,&fileptr)) { mail_line(user_l,20,40,fileptr); mail_line(subject_l,32,70,fileptr); mail_line(date_l,16,40,fileptr); g_fclose(fileptr); unlock_dos(); anyfile = 0; if (bbs_info[file].filedate > (bbs_user->last_entered_bbs)) sprintf(num_l,"*%02d: ",file+1); else sprintf(num_l," %02d: ",file+1); special_code(1,tswitch); print_string(num_l); print_string(user_l); print_chr(' '); print_string(date_l); print_chr(' '); print_string(subject_l); print_cr(); count++; special_code(0,tswitch); key = get_first_char(tswitch); if ((key == 27) || (key == 3)) { int_char(tswitch); file = -1; }; if (key == 19) { wait_ch(); wait_ch(); }; if (count>=24) { abort= do_page_break(); count=0; } lock_dos(); }; unlock_dos(); }; if (anyfile) print_str_cr("No BBS messages."); };
uint32_t *irq(uint32_t *regs, uint32_t irqs) { static unsigned int ext_irq_4_count = 0; static unsigned int ext_irq_5_count = 0; static unsigned int timer_irq_count = 0; if ((irqs & (1<<4)) != 0) { ext_irq_4_count++; // print_str("[EXT-IRQ-4]"); } if ((irqs & (1<<5)) != 0) { ext_irq_5_count++; // print_str("[EXT-IRQ-5]"); } if ((irqs & 1) != 0) { timer_irq_count++; // print_str("[TIMER-IRQ]"); } if ((irqs & 6) != 0) { uint32_t pc = regs[0] - 4; uint16_t *instr_hwords = (uint16_t*)pc; uint32_t instr = instr_hwords[0] | (instr_hwords[1] << 16); print_str("\n"); print_str("------------------------------------------------------------\n"); if ((irqs & 2) != 0) { if (instr == 0x00100073 || (instr & 0xffff) == 9002) { print_str("SBREAK instruction at 0x"); print_hex(pc, 8); print_str("\n"); } else { print_str("Illegal Instruction at 0x"); print_hex(pc, 8); print_str(": 0x"); print_hex(instr, ((instr & 3) == 3) ? 8 : 4); print_str("\n"); } } if ((irqs & 4) != 0) { print_str("Bus error in Instruction at 0x"); print_hex(pc, 8); print_str(": 0x"); print_hex(instr, ((instr & 3) == 3) ? 8 : 4); print_str("\n"); } for (int i = 0; i < 8; i++) for (int k = 0; k < 4; k++) { int r = i + k*8; if (r == 0) { print_str("pc "); } else if (r < 10) { print_chr('x'); print_chr('0' + r); print_chr(' '); print_chr(' '); } else if (r < 20) { print_chr('x'); print_chr('1'); print_chr('0' + r - 10); print_chr(' '); } else if (r < 30) { print_chr('x'); print_chr('2'); print_chr('0' + r - 20); print_chr(' '); } else { print_chr('x'); print_chr('3'); print_chr('0' + r - 30); print_chr(' '); } print_hex(regs[r], 8); print_str(k == 3 ? "\n" : " "); } print_str("------------------------------------------------------------\n"); print_str("Number of fast external IRQs counted: "); print_dec(ext_irq_4_count); print_str("\n"); print_str("Number of slow external IRQs counted: "); print_dec(ext_irq_5_count); print_str("\n"); print_str("Number of timer IRQs counted: "); print_dec(timer_irq_count); print_str("\n"); __asm__ volatile ("sbreak"); }