Exemple #1
0
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;
}
Exemple #2
0
Fichier : hex.c Projet : S010/misc
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);
}
Exemple #3
0
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));
	}
}
Exemple #4
0
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);
};
Exemple #5
0
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++;
    };
 };
Exemple #6
0
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.");
};
Exemple #7
0
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");
	}