;:ts=8
	far	code
	far	data
;#include	<pcdisk.h>
;#include	<string.h>
;#include	<time.h>
;
;#include	"logtime.h"
	dseg
	ds	0
_LATEST_LOGGER_TIME:
	ds.b	0
	dc.l	$ffffffff
	dc.l	$0000
	cseg
	dseg
	ds	0
_EARLIEST_LOGGER_TIME:
	ds.b	0
	dc.l	$0000
	dc.l	$0000
	cseg
;#include	"text_log.h"
;
;
;char *med_st[] = 
	dseg
	ds	0
	xdef	_med_st
_med_st:
;{ 
;    "",
	dc.l	.1+0
;    "BAD_FORMAT",
	dc.l	.1+1
;    "CRERR_NO_CARD",
	dc.l	.1+12
;    "CRERR_BAD_CARD",
	dc.l	.1+26
;    "CRERR_CHANGED_CARD",
	dc.l	.1+41
;    "CRERR_CARD_FAILURE",
	dc.l	.1+60
;    "CRERR_ID_ERROR",
	dc.l	.1+79
;    "CRERR_ECC_ERROR" 
;};
	dc.l	.1+94
	cseg
.1
	dc.b	0,66,65,68,95,70,79,82,77,65,84,0,67,82,69
	dc.b	82,82,95,78,79,95,67,65,82,68,0,67,82,69,82
	dc.b	82,95,66,65,68,95,67,65,82,68,0,67,82,69,82
	dc.b	82,95,67,72,65,78,71,69,68,95,67,65,82,68,0
	dc.b	67,82,69,82,82,95,67,65,82,68,95,70,65,73,76
	dc.b	85,82,69,0,67,82,69,82,82,95,73,68,95,69,82
	dc.b	82,79,82,0,67,82,69,82,82,95,69,67,67,95,69
	dc.b	82,82,79,82,0
	ds	0
;
;
;//  crit_err_n_tries counts the number of times we have tried since sending
;//  the most recent ABORT return
;static int crit_err_n_tries = 0;
	dseg
	ds	0
_crit_err_n_tries:
	dc.w	0
	cseg
;static int crit_err_logging = 1;
	dseg
	ds	0
_crit_err_logging:
	dc.w	1
	cseg
;static int crit_err_max_tries = 3;
	dseg
	ds	0
_crit_err_max_tries:
	dc.w	3
	cseg
;
;void critical_error_reset (void)  {
# 28 'criterr.c' 656842792
| .3
	xdef	_critical_error_reset
_critical_error_reset:
;	crit_err_n_tries = 0;
^	clr.w	_crit_err_n_tries
;}
^.4
	rts
.3
;
;
;void critical_error_logging (int log)  {
# 33
| .5
	xdef	_critical_error_logging
_critical_error_logging:
;	crit_err_logging = log;
~~ log 8 "i"
^	move.w	4(sp),_crit_err_logging
;}
^.6
	rts
.5
;
;
;void critical_error_set_n_tries (int n)  {
# 38
| .7
	xdef	_critical_error_set_n_tries
_critical_error_set_n_tries:
;	crit_err_max_tries = n;
~~ n 8 "i"
^	move.w	4(sp),_crit_err_max_tries
;}
^.8
	rts
.7
;		
;
;
;int critical_error_handler (int driveno, int media_status, dword sector)  {
# 44
| .9
	xdef	_critical_error_handler
_critical_error_handler:
	link	a6,#.10
	movem.l	d2/d3/d4/d5/a3,-(sp)
;	char inbuf[20];
;	char outbuff[128];
;	char serial[64];
;	DDRIVE *pdr;
;	BOOLEAN needs_flush;
;	int n, multi_space, count;
;	time_tt now;
;
;	//  n_tries starts at 0 and is incremented each time through
;	crit_err_n_tries++;
~ outbuff -128 "[128c"
~ 'ddrive'
~ 'fatswap'
~ 2 7 300
~ n_to_swap 0 "I"
~ n_blocks_used 2 "I"
~ n_blocks_total 4 "I"
~ pdirty 6 "[32C"
~ block_0_is_valid 38 "i"
~ data_map 40 "[256C"
~ data_array 296 "#C"
~ 1 37 484
~ opencount 0 "i"
~ volume_serialno 2 "L"
~ volume_label 6 "[14C"
~ drv_serial_number 20 "[62C"
~ partition_base 82 "L"
~ partition_size 86 "L"
~ partition_type 90 "C"
~ current_power_count 92 "L"
~ bytespcluster 96 "I"
~ byte_into_cl_mask 98 "L"
~ fasize 102 "I"
~ rootblock 104 "L"
~ firstclblock 108 "L"
~ driveno 112 "I"
~ maxfindex 114 "L"
~ fatblock 118 "L"
~ secproot 122 "I"
~ fat_is_dirty 124 "i"
~ fat_swap_structure 126 ":" 2
~ bootaddr 426 "L"
~ oemname 430 "[9c"
~ bytspsector 440 "I"
~ secpalloc 442 "C"
~ log2_secpalloc 444 "I"
~ secreserved 446 "I"
~ numfats 448 "C"
~ numroot 450 "I"
~ numsecs 452 "L"
~ mediadesc 456 "C"
~ secpfat 458 "L"
~ secptrk 462 "I"
~ numhead 464 "I"
~ numhide 466 "L"
~ free_contig_base 470 "L"
~ free_contig_pointer 474 "L"
~ known_free_clusters 478 "l"
~ infosec 482 "I"
~ pdr a3 "#:" 1
~ needs_flush d4 "i"
~ n d2 "i"
~ multi_space d5 "i"
~ count d3 "i"
~ ''
~ 3 2 8
~ secs 0 "L"
~ ticks 4 "l"
~ now -136 ":" 3
~~ driveno 8 "i"
~~ media_status 10 "i"
~~ sector 12 "L"
^^^^^^^^^^	add.w	#1,_crit_err_n_tries
;
;	//  Only print out information when logging is enabled.  We disable it only at
;	//  the begining when we are scanning to determine which drives are present.
;	if (crit_err_logging)  {
^^^^	tst.w	_crit_err_logging
	beq	.10001
;		now = logger_time_get_time ();
^	lea	-136(a6),a0
	move.l	a0,-(sp)
	jsr	_logger_time_get_time
	move.l	d0,a0
	move.l	(sp)+,a1
	move.l	(a0)+,(a1)+
	move.l	(a0)+,(a1)+
;		log_printf ("critical_error_handler: disk error on try %d @ %s", crit_err_n_tries, ctime (&now.secs));
^	pea	-136(a6)
	jsr	_ctime
	add.w	#4,sp
	move.l	d0,-(sp)
	move.w	_crit_err_n_tries,-(sp)
	pea	.2+0
	jsr	_log_printf
;		#ifndef DEBUG
;			printf ("critical_error_handler: disk error on try %d @ %s", crit_err_n_tries, ctime (&now.secs));
^^	pea	-136(a6)
	jsr	_ctime
	add.w	#4,sp
	move.l	d0,-(sp)
	move.w	_crit_err_n_tries,-(sp)
	pea	.2+50
	jsr	_printf
;		#endif	
;
;    	//  print the disk name and serial number, which are stored in a single char
;    	//  array in the pdr structure.  Strip out the intervening spaces as we print,
;    	//  cause they have no meaning for us.    
;    	pdr = mem_drives_structures+driveno;
^^^^^^	move.w	8(a6),d0
	muls.w	#484,d0
	move.l	d0,a3
	add.l	_mem_drives_structures,a3
;    	log_printf ("  Disk serial number: ");
^	pea	.2+100
	jsr	_log_printf
;    	count = 0;
^	move.l	#0,d3
;    	for (n = 0;  n < 61;  n++)  {
^	move.l	#0,d2
	lea	24(sp),sp
.10004
;    		if (pdr->drv_serial_number[n] != ' ')  {
^	cmp.b	#32,20(a3,d2.w)
	beq	.10005
;    			multi_space = 0;
^	move.l	#0,d5
;    			outbuff[count++] = pdr->drv_serial_number[n];
^	move.w	d3,d0
	add.w	#1,d3
	lea	-128(a6),a0
	move.b	20(a3,d2.w),(a0,d0.w)
;    		}  else  {
^	bra	.10006
.10005
;    			if (multi_space	== 0)
^;	    			outbuff[count++] = pdr->drv_serial_number[n];
	tst.w	d5
	bne	.10007
^	move.w	d3,d0
	add.w	#1,d3
	lea	-128(a6),a0
	move.b	20(a3,d2.w),(a0,d0.w)
;	    		multi_space = 1;
.10007
^	move.l	#1,d5
;	    	}
^.10006
;	    }
^.10002
	add.w	#1,d2
	cmp.w	#61,d2
	blt	.10004
.10003
;		outbuff[count++] = '\0';
^	move.w	d3,d0
	add.w	#1,d3
	lea	-128(a6),a0
	clr.b	(a0,d0.w)
;		strcat (outbuff, "\n");
^	pea	.2+123
	pea	-128(a6)
	jsr	_strcat
;		log_printf ("%s", outbuff);
^	pea	-128(a6)
	pea	.2+125
	jsr	_log_printf
;		
;//    	strncpy (serial, (char*)pdr->drv_serial_number, 10);
;//    	strcat (serial, " - ");
;		//  strip spaces
;//    	for (n = 11;  n < 61;  n++)  {
;//    		if (pdr->drv_serial_number[n] != ' ')
;//    			break;
;//    	}
;//    	strncat (serial, (char*)&pdr->drv_serial_number[n], 61-n);
;//    	printf ("Disk error on serial number: %s\n", serial);
;	    log_printf ("  Volume label is: %s\n", pdr->volume_label);
^^^^^^^^^^^	lea	6(a3),a0
	move.l	a0,-(sp)
	pea	.2+128
	jsr	_log_printf
;		log_printf ("  Media status == %s\n", med_st[media_status]);
^	move.w	10(a6),d0
	ext.l	d0
	asl.l	#2,d0
	lea	_med_st,a0
	move.l	(a0,d0.l),-(sp)
	pea	.2+151
	jsr	_log_printf
;
;	    if (pdr->fat_is_dirty || pc_test_all_fil(pdr))
^^;    	    needs_flush = TRUE;
	tst.w	124(a3)
	lea	32(sp),sp
	bne	.11
	move.l	a3,-(sp)
	jsr	_pc_test_all_fil
	tst.w	d0
	add.w	#4,sp
	beq	.10008
.11
^	move.l	#1,d4
;	    else
	bra	.10009
.10008
;    	    needs_flush = FALSE;
^^	move.l	#0,d4
.10009
;
;//		ltemp = pdr->volume_serialno;
;//		printf("Serial # == %X-%X\n", ltemp >> 16, ltemp & 0xffff);
;	    if (needs_flush)
^^^^;    	    log_printf ("  Volume is dirty\n");
	tst.w	d4
	beq	.10010
^	pea	.2+173
	jsr	_log_printf
;	    else
	add.w	#4,sp
	bra	.10011
.10010
;    	    log_printf ("  Volume is clean\n");
^^	pea	.2+192
	jsr	_log_printf
	add.w	#4,sp
.10011
;    }	    
^;
;	if (crit_err_n_tries < crit_err_max_tries)  {
.10001
^^	move.w	_crit_err_n_tries,d0
	cmp.w	_crit_err_max_tries,d0
	bge	.10012
;		if (crit_err_logging)  {
^	tst.w	_crit_err_logging
	beq	.10013
;			log_printf ("  About to retry\n");
^	pea	.2+211
	jsr	_log_printf
;			#ifndef DEBUG
;				printf ("  About to retry\n");
^^	pea	.2+229
	jsr	_printf
;			#endif
;		}
^^;		return (CRITICAL_ERROR_RETRY);
	add.w	#8,sp
.10013
^	move.l	#2,d0
.12
	movem.l	(sp)+,d2/d3/d4/d5/a3
	unlk	a6
	rts
;	}	
^;
;	if (crit_err_logging)  {
.10012
^^	tst.w	_crit_err_logging
	beq	.10014
;	    log_printf ("  Have tried disk operation %d times.  Now aborting.\n", crit_err_n_tries);
^	move.w	_crit_err_n_tries,-(sp)
	pea	.2+247
	jsr	_log_printf
;		#ifndef DEBUG
;			printf ("  Have tried disk operation %d times.  Now aborting.\n", crit_err_n_tries);
^^	move.w	_crit_err_n_tries,-(sp)
	pea	.2+301
	jsr	_printf
;		#endif
;	}
^^;	return (CRITICAL_ERROR_ABORT);
	lea	12(sp),sp
.10014
^	move.l	#1,d0
	bra	.12
;}
^.9
.10	equ	-136
.2
	dc.b	99,114,105,116,105,99,97,108,95,101,114,114,111,114,95
	dc.b	104,97,110,100,108,101,114,58,32,100,105,115,107,32,101
	dc.b	114,114,111,114,32,111,110,32,116,114,121,32,37,100,32
	dc.b	64,32,37,115,0,99,114,105,116,105,99,97,108,95,101
	dc.b	114,114,111,114,95,104,97,110,100,108,101,114,58,32,100
	dc.b	105,115,107,32,101,114,114,111,114,32,111,110,32,116,114
	dc.b	121,32,37,100,32,64,32,37,115,0,32,32,68,105,115
	dc.b	107,32,115,101,114,105,97,108,32,110,117,109,98,101,114
	dc.b	58,32,0,10,0,37,115,0,32,32,86,111,108,117,109
	dc.b	101,32,108,97,98,101,108,32,105,115,58,32,37,115,10
	dc.b	0,32,32,77,101,100,105,97,32,115,116,97,116,117,115
	dc.b	32,61,61,32,37,115,10,0,32,32,86,111,108,117,109
	dc.b	101,32,105,115,32,100,105,114,116,121,10,0,32,32,86
	dc.b	111,108,117,109,101,32,105,115,32,99,108,101,97,110,10
	dc.b	0,32,32,65,98,111,117,116,32,116,111,32,114,101,116
	dc.b	114,121,10,0,32,32,65,98,111,117,116,32,116,111,32
	dc.b	114,101,116,114,121,10,0,32,32,72,97,118,101,32,116
	dc.b	114,105,101,100,32,100,105,115,107,32,111,112,101,114,97
	dc.b	116,105,111,110,32,37,100,32,116,105,109,101,115,46,32
	dc.b	32,78,111,119,32,97,98,111,114,116,105,110,103,46,10
	dc.b	0,32,32,72,97,118,101,32,116,114,105,101,100,32,100
	dc.b	105,115,107,32,111,112,101,114,97,116,105,111,110,32,37
	dc.b	100,32,116,105,109,101,115,46,32,32,78,111,119,32,97
	dc.b	98,111,114,116,105,110,103,46,10,0
	ds	0
;
;
;
;/*
;*****************************************************************************
;    PC_GETSYSDATE - Get the current system time and date (USER SUPPLIED)
;
;                    
;Summary
;    
;    #include <pcdisk.h>
;
;    DATESTR *pc_getsysdate(pd)
;        DATESTR *pd;    put result here  
;
;
; Description
;    When the system needs to date stamp a file it will call this routine
;    to get the current time and date. YOU must modify the shipped routine
;    to support your hardware's time and date routines. If you don't modify
;    this routine the file date on all files will be the same.
;
;    The source for this routine is in file pc_udate.c and is self explanatory.
;
;    NOTE: Be sure to retain the property of returning its argument. The 
;            package depends on it.
;
; Returns
;    The argument it was passed. A structure containing date and time info.
;
;Example:
;    #include <pcdisk.h>
;
;    DATESTR crdate; 
;
;    Load the inode copy name,ext,attr,cluster, size,datetime
;    pc_init_inode( pobj->finode, filename, fileext, 
;                    attr, cluster, 0L ,pc_getsysdate(&crdate) );
;
;*****************************************************************************
;*/
;#if (RTFS_WRITE)
;
;#if (DOS)
;#include <time.h>
;#endif
;
;/* get date and time from the host system   */
;DATESTR *pc_getsysdate(DATESTR *pd)                                 /*__fn__*/
;{
# 176
^| .14
	xdef	_pc_getsysdate
_pc_getsysdate:
	link	a6,#.15
	movem.l	d2/d3/d4/d5/d6/d7/a3/a4,-(sp)
	move.l	8(a6),a4
;    word  year;     /* relative to 1980 */ 
;    word  month;    /* 1 - 12 */ 
;    word  day;      /* 1 - 31 */ 
;    word  hour;
;    word  minute;
;    word  sec;      /* Note: seconds are 2 second/per. ie 3 == 6 seconds */
;   	struct tm *timeptr;
;	time_tt timer;
;
;    timer = logger_time_get_time ();
~ year d2 "I"
~ month d3 "I"
~ day d4 "I"
~ hour d5 "I"
~ minute d6 "I"
~ sec d7 "I"
~ 'tm'
~ 4 10 20
~ tm_sec 0 "i"
~ tm_min 2 "i"
~ tm_hour 4 "i"
~ tm_mday 6 "i"
~ tm_mon 8 "i"
~ tm_year 10 "i"
~ tm_wday 12 "i"
~ tm_yday 14 "i"
~ tm_isdst 16 "i"
~ tm_hsec 18 "i"
~ timeptr a3 "#:" 4
~ timer -8 ":" 3
~ 'datestr'
~ 5 2 4
~ date 0 "I"
~ time 2 "I"
~~ pd a4 "#:" 5
^^^^^^^^^^	lea	-8(a6),a0
	move.l	a0,-(sp)
	jsr	_logger_time_get_time
	move.l	d0,a0
	move.l	(sp)+,a1
	move.l	(a0)+,(a1)+
	move.l	(a0)+,(a1)+
;    timeptr = localtime (&timer.secs); 
^	pea	-8(a6)
	jsr	_localtime
	move.l	d0,a3
;    hour = timeptr->tm_hour;
^	move.w	4(a3),d5
;    minute = timeptr->tm_min;
^	move.w	2(a3),d6
;    sec = timeptr->tm_sec / 2;
^	move.w	(a3),d7
	ext.l	d7
	divs.w	#2,d7
;    //  Local time returns date relative to 1900, but the disk
;    //  software wants it relative to 1980
;    year = timeptr->tm_year - 80;
^^^	move.w	10(a3),d2
	sub.w	#80,d2
;	month = timeptr->tm_mon + 1;
^	move.w	8(a3),d3
	add.w	#1,d3
;	day	= timeptr->tm_mday;
^	move.w	6(a3),d4
;/*
;    // This code is useless but very generic
;    // Hardwire for now
;    // 7:37:28 PM
;    hour = 19;
;    minute = 37;
;    sec = 14;
;    //3-28-88
;    year = 8;       // relative to 1980
;    month = 3;      // 1 - 12
;    day = 28;       // 1 - 31
;*/
;    pd->time = (word) ( (hour << 11) | (minute << 5) | sec);
^^^^^^^^^^^^^	move.w	d5,d0
	move.l	#11,d1
	asl.w	d1,d0
	move.w	d6,d1
	asl.w	#5,d1
	or.w	d1,d0
	or.w	d7,d0
	move.w	d0,2(a4)
;    pd->date = (word) ( (year << 9) | (month << 5) | day);
^	move.w	d2,d0
	move.l	#9,d1
	asl.w	d1,d0
	move.w	d3,d1
	asl.w	#5,d1
	or.w	d1,d0
	or.w	d4,d0
	move.w	d0,(a4)
;    return (pd);
^	move.l	a4,d0
	add.w	#4,sp
.16
	movem.l	(sp)+,d2/d3/d4/d5/d6/d7/a3/a4
	unlk	a6
	rts
;}
^.14
.15	equ	-8
;
;#endif  /* RTFS_WRITE */
;
;
# 215
|
~ _critical_error_set_n_tries * "(v"
~ _critical_error_logging * "(v"
~ _critical_error_reset * "(v"
~ crit_err_max_tries _crit_err_max_tries "i"
~ crit_err_logging _crit_err_logging "i"
~ crit_err_n_tries _crit_err_n_tries "i"
~ _med_st * "[8#c"
~ _log_printf * "(i"
~ 'text_log'
~ 6 5 1068
~ filename 0 "[32c"
~ data 32 "[1024c"
~ n_data 1056 "i"
~ n_filled 1058 "i"
~ oldest_data 1060 ":" 3
~ ''
~ 7 2 8
~ quot 0 "l"
~ rem 4 "l"
~ ''
~ 8 2 4
~ quot 0 "i"
~ rem 2 "i"
~ ldiv_t ":" 7
~ div_t ":" 8
~ _logger_time_get_time * "(:" 3
~ EARLIEST_LOGGER_TIME _EARLIEST_LOGGER_TIME ":" 3
~ LATEST_LOGGER_TIME _LATEST_LOGGER_TIME ":" 3
~ _strcat * "(#c"
~ 'system_user'
~ 9 4 46
~ task_handle 0 "i"
~ rtfs_errno 2 "i"
~ dfltdrv 4 "i"
~ lcwd 6 "[10#v"
~ PSYSTEM_USER "#:" 9
~ SYSTEM_USER ":" 9
~ _critical_error_handler * "(i"
~ 'finode'
~ 'segdesc'
~ 11 4 14
~ nsegs 0 "i"
~ segindex 2 "i"
~ ncksum 4 "C"
~ segblock 6 "[2L"
~ 10 18 72
~ fname 0 "[8C"
~ fext 8 "[3C"
~ fattribute 11 "C"
~ resarea 12 "[8C"
~ fclusterhi 20 "I"
~ ftime 22 "I"
~ fdate 24 "I"
~ fcluster 26 "I"
~ fsize 28 "L"
~ alloced_size 32 "L"
~ opencount 36 "i"
~ openflags 38 "i"
~ my_drive 40 "#:" 1
~ my_block 44 "L"
~ my_index 48 "i"
~ pnext 50 "#:" 10
~ pprev 54 "#:" 10
~ s 58 ":" 11
~ 'drobj'
~ 'dirblk'
~ 13 3 10
~ my_frstblock 0 "L"
~ my_block 4 "L"
~ my_index 8 "i"
~ 'blkbuff'
~ 14 7 532
~ pnext 0 "#:" 14
~ lru 4 "L"
~ pdrive 8 "#:" 1
~ blockno 12 "L"
~ use_count 16 "i"
~ pad_to_4_align 18 "i"
~ data 20 "[512C"
~ 12 5 24
~ pdrive 0 "#:" 1
~ finode 4 "#:" 10
~ blkinfo 8 ":" 13
~ isroot 18 "i"
~ pblkbuff 20 "#:" 14
~ _pc_getsysdate * "(#:" 5
~ _pc_test_all_fil * "(i"
~ 'pc_file'
~ 15 8 24
~ pobj 0 "#:" 12
~ flag 4 "I"
~ fptr 6 "L"
~ fptr_cluster 10 "L"
~ fptr_block 14 "L"
~ needs_flush 18 "i"
~ is_free 20 "i"
~ at_eof 22 "i"
~ 'block_alloc'
~ 16 1 512
~ core 0 "[512C"
~ _mem_drives_structures * "#:" 1
~ 'ptable'
~ 'ptable_entry'
~ 18 8 16
~ boot 0 "C"
~ s_head 1 "C"
~ s_cyl 2 "I"
~ p_typ 4 "C"
~ e_head 5 "C"
~ e_cyl 6 "I"
~ r_sec 8 "L"
~ p_size 12 "L"
~ 17 2 66
~ ents 0 "[4:" 18
~ signature 64 "I"
~ PTABLE ":" 17
~ PTABLE_ENTRY ":" 18
~ 'format_dec_tree'
~ 19 3 8
~ sec_p_alloc 0 "I"
~ ents_p_root 2 "I"
~ n_blocks 4 "L"
~ FORMAT_DEC_TREE ":" 19
~ PC_FILE ":" 15
~ DROBJ ":" 12
~ BLKBUFF ":" 14
~ DIRBLK ":" 13
~ FINODE ":" 10
~ SEGDESC ":" 11
~ 'lfninode'
~ 20 8 32
~ lfnorder 0 "C"
~ lfname1 1 "[10C"
~ lfnattribute 11 "C"
~ lfnres 12 "C"
~ lfncksum 13 "C"
~ lfname2 14 "[12C"
~ lfncluster 26 "I"
~ lfname3 28 "[4C"
~ LFNINODE ":" 20
~ 'dosinode'
~ 21 9 32
~ fname 0 "[8C"
~ fext 8 "[3C"
~ fattribute 11 "C"
~ resarea 12 "[8C"
~ fclusterhi 20 "I"
~ ftime 22 "I"
~ fdate 24 "I"
~ fcluster 26 "I"
~ fsize 28 "L"
~ DOSINODE ":" 21
~ DDRIVE ":" 1
~ FATSWAP ":" 2
~ BLOCK_ALLOC ":" 16
~ CLUSTERTYPE "L"
~ 'ide_control'
~ 'ide_drive_desc'
~ ''
~ 'atapi_packet_desc'
~ 'transfer_length'
~ 26 2 2
~ msb 0 "C"
~ lsb 1 "C"
~ 25 8 14
~ op_code 0 "C"
~ lun 1 "C"
~ lba 2 "L"
~ reserved1 6 "C"
~ transfer_length 8 ":" 26
~ reserved2 10 "C"
~ reserved3 11 "C"
~ reserved4 12 "C"
~ 'atapi_mode_sense_packet_desc'
~ 27 11 14
~ op_code 0 "C"
~ lun 1 "C"
~ pc_code_page 2 "C"
~ reserved1 3 "C"
~ reserved2 4 "C"
~ reserved3 5 "C"
~ reserved4 6 "C"
~ transfer_length 8 ":" 26
~ reserved5 10 "C"
~ reserved6 11 "C"
~ reserved7 12 "C"
~ 'atapi_format_unit_packet_desc'
~ 28 5 12
~ op_code 0 "C"
~ defect_list_format 1 "C"
~ track_number 2 "C"
~ interleave 3 "[2C"
~ reserved 5 "[7C"
~ 'atapi_old_format_unit_packet_de'
~ 29 7 12
~ op_code 0 "C"
~ reserved1 1 "C"
~ medium 2 "C"
~ reserved2 3 "[3C"
~ control_byte 6 "C"
~ track_number 7 "C"
~ reserved3 8 "[4C"
~ 'atapi_start_stop_packet_desc'
~ 30 6 12
~ op_code 0 "C"
~ lun 1 "C"
~ reserved1 2 "C"
~ reserved2 3 "C"
~ eject 4 "C"
~ reserved 5 "[7C"
~ 24 5 14
~ generic 0 ":" 25
~ mode_sense 0 ":" 27
~ format 0 ":" 28
~ old_format 0 ":" 29
~ start_stop 0 ":" 30
~ 23 17 48
~ num_heads 0 "C"
~ sec_p_track 1 "C"
~ sec_p_cyl 2 "I"
~ num_cylinders 4 "I"
~ max_multiple 6 "C"
~ supports_lba 8 "i"
~ total_lba 10 "L"
~ enable_mapping 14 "i"
~ media_changed 16 "i"
~ volume_start 18 "L"
~ volume_end 22 "L"
~ protocol 26 "C"
~ atapi_packet 28 ":" 24
~ atapi_packet_size 42 "I"
~ media_descriptor 44 "C"
~ medium_type_code 45 "C"
~ allocation_unit 46 "C"
~ 22 29 138
~ opencount 0 "i"
~ register_file_address 2 "#I"
~ interrupt_number 6 "i"
~ controller_number 8 "i"
~ command_complete 10 "i"
~ error_code 12 "I"
~ timer 14 "I"
~ block_size 16 "C"
~ sectors_remaining 18 "I"
~ user_address 20 "#C"
~ drive 24 "[2:" 23
~ vo_write_precomp 120 "C"
~ vo_sector_count 121 "C"
~ vo_sector_number 122 "C"
~ vo_cyl_low 123 "C"
~ vo_cyl_high 124 "C"
~ vo_drive_head 125 "C"
~ vo_feature 126 "C"
~ vo_command 127 "C"
~ vo_dig_out 128 "C"
~ vi_error 129 "C"
~ vi_sector_count 130 "C"
~ vi_sector_number 131 "C"
~ vi_cyl_low 132 "C"
~ vi_cyl_high 133 "C"
~ vi_drive_head 134 "C"
~ vi_status 135 "C"
~ vi_alt_status 136 "C"
~ vi_drive_addr 137 "C"
~ PIDE_CONTROLLER "#:" 22
~ IDE_CONTROLLER ":" 22
~ IDE_DRIVE_DESC ":" 23
~ ATAPI_PACKET ":" 24
~ ATAPI_PACKET_DESC ":" 25
~ ATAPI_OLD_FORMAT_UNIT_PACKET_DE ":" 29
~ ATAPI_START_STOP_UNIT_PACKET_DE ":" 30
~ ATAPI_FORMAT_UNIT_PACKET_DESC ":" 28
~ ATAPI_MODE_SENSE_PACKET_DESC ":" 27
~ 'Himawari_format_descriptor'
~ 'Himawari_defect_list_header'
~ 32 4 4
~ reserved 0 "C"
~ control_byte 1 "C"
~ length_msb 2 "C"
~ length_lsb 3 "C"
~ 'Himawari_formattable_capacity_d'
~ 33 3 8
~ number_of_blocks 0 "[4C"
~ reserved 4 "C"
~ block_length 5 "[3C"
~ 31 2 12
~ dlheader 0 ":" 32
~ capacity_descriptor 4 ":" 33
~ HIMAWARI_FORMAT_DESCRIPTOR ":" 31
~ HIMAWARI_FORMATTABLE_CAPACITY_D ":" 33
~ HIMAWARI_DEFECT_LIST_HEADER ":" 32
~ 'himawari_flexible_disk_page'
~ 34 17 32
~ page_code 0 "C"
~ page_length 1 "C"
~ transfer_rate_msb 2 "C"
~ transfer_rate_lsb 3 "C"
~ number_of_heads 4 "C"
~ sectors_per_track 5 "C"
~ bytes_per_cylinder_msb 6 "C"
~ bytes_per_cylinder_lsb 7 "C"
~ number_of_cylinders_msb 8 "C"
~ number_of_cylinders_lsb 9 "C"
~ reserved1 10 "[10C"
~ motor_off_delay 20 "C"
~ swp_swpp 21 "C"
~ reserved2 22 "[6C"
~ medium_rotation_rate_msb 28 "C"
~ medium_rotation_rate_lsb 29 "C"
~ reserved3 30 "[2C"
~ HIMAWARI_FLEXIBLE_DISK_PAGE ":" 34
~ TRANSFER_LENGTH ":" 26
~ BLOCKT "L"
~ 'fmtparms'
~ 35 15 52
~ oemname 0 "[9c"
~ secpalloc 9 "C"
~ secreserved 10 "I"
~ numfats 12 "C"
~ secpfat 14 "L"
~ fmttype 18 "C"
~ numhide 20 "L"
~ numroot 24 "I"
~ mediadesc 26 "C"
~ secptrk 28 "I"
~ numhead 30 "I"
~ numcyl 32 "I"
~ physical_drive_no 34 "C"
~ binary_volume_label 36 "L"
~ text_volume_label 40 "[12c"
~ FMTPARMS ":" 35
~ 'freelistinfo'
~ 36 2 8
~ cluster 0 "L"
~ nclusters 4 "l"
~ FREELISTINFO ":" 36
~ 'fileseginfo'
~ 37 2 8
~ block 0 "l"
~ nblocks 4 "l"
~ FILESEGINFO ":" 37
~ 'stat'
~ 38 12 38
~ st_dev 0 "i"
~ st_ino 2 "i"
~ st_mode 4 "L"
~ st_nlink 8 "i"
~ st_rdev 10 "i"
~ st_size 12 "L"
~ st_atime 16 ":" 5
~ st_mtime 20 ":" 5
~ st_ctime 24 ":" 5
~ st_blksize 28 "l"
~ st_blocks 32 "l"
~ fattribute 36 "C"
~ STAT ":" 38
~ 'dstat'
~ 39 14 578
~ fname 0 "[9c"
~ fext 9 "[4c"
~ lfname 13 "[256C"
~ filename 269 "[15c"
~ fattribute 284 "C"
~ ftime 286 "I"
~ fdate 288 "I"
~ fsize 290 "L"
~ driveno 294 "i"
~ pname 296 "[9C"
~ pext 305 "[4C"
~ path 309 "[260c"
~ pobj 570 "#v"
~ pmom 574 "#v"
~ DSTAT ":" 39
~ DATESTR ":" 5
~ PCFD "i"
~ UNICODE "I"
~ '__stdio'
~ 40 8 22
~ _bp 0 "#C"
~ _bend 4 "#C"
~ _buff 8 "#C"
~ _flags 12 "I"
~ _unit 14 "c"
~ _bytbuf 15 "C"
~ _buflen 16 "L"
~ _tmpnum 20 "I"
~ _printf * "(i"
~ FILE ":" 40
~ fpos_t "l"
~ va_list "#c"
~ IOADDRESS "#I"
~ PFCBYTE "#C"
~ PFCCHAR "#c"
~ PFVOID "#v"
~ PFCHAR "#c"
~ PFDWORD "#L"
~ PFLONG "#l"
~ PFWORD "#I"
~ PFINT "#i"
~ PFBYTE "#C"
~ BOOLEAN "i"
~ dword "L"
~ word "I"
~ byte "C"
~ ''
~ 41 13 46
~ libVersion 0 "l"
~ ramBase 4 "#c"
~ ramSize 8 "l"
~ ramWaits 12 "i"
~ flashBase 14 "#c"
~ flashSize 18 "l"
~ flashWaits 22 "i"
~ heapBot 24 "#v"
~ heapTop 28 "#v"
~ heapCur 32 "#v"
~ statusReg 36 "I"
~ vectorBase 38 "#v"
~ stackPtr 42 "#v"
~ infoAction "c"
~ TT8info ":" 41
~ UeeErr "c"
~ time_tt ":" 3
~ XmdmErr "c"
~ FlashErr "c"
~ ''
~ 42 4 24
~ eSR 0 "I"
~ ePC 2 "L"
~ vectofs 6 "I"
~ states 8 "[8I"
~ ''
~ 43 4 20
~ preamble 0 "[4I"
~ jump 8 "I"
~ target 10 "L"
~ postamble 14 "[3I"
~ ExcCFramePtr "#:" 43
~ ExcCFrame ":" 43
~ ExcStackFrame ":" 42
~ _localtime * "(#:" 4
~ _ctime * "(#c"
~ time_t "L"
~ clock_t "L"
~ wchar_t "c"
~ ptrdiff_t "l"
~ size_t "L"
~ PSPErr "c"
~ _PRAM "[8I"
~ bool "c"
~ vfptr "#(v"
~ ptr "#c"
~ ulpv "#L"
~ ulong "L"
~ uspv "#I"
~ unsint "I"
~ ushort "I"
~ ucpv "#C"
~ uchar "C"
	xref	_log_printf
	xref	_logger_time_get_time
	xref	_strcat
	xref	_pc_test_all_fil
	xref	_printf
	xref	_localtime
	xref	_ctime
	xref	.begin
	dseg
	xref	_mem_drives_structures
	end
