     1                                  ; ****************************************************************************
     2                                  ; ls386.s (ls0.s) - Retro Unix 386 v1 - /bin/ls - list file or directory
     3                                  ; ----------------------------------------------------------------------------
     4                                  ; RETRO UNIX 386 (Retro Unix == Turkish Rational Unix)
     5                                  ; Operating System Project (v0.2) by ERDOGAN TAN (Beginning: 24/12/2013)
     6                                  ;
     7                                  ; [ Last Modification: 07/10/2015 ] ; 22/01/2022 (BugFix)
     8                                  ;
     9                                  ; Derived from 'ls0.asm' source code file of 'Retro UNIX 8086 v1'
    10                                  ; operating system project, /bin/ls source code by Erdogan Tan
    11                                  ; (19/11/2013-29/11/2013)
    12                                  ;
    13                                  ; Derived from 'ls.s' file of original UNIX operating system
    14                                  ; (v1.0 for PDP-11)
    15                                  ; ****************************************************************************
    16                                  ; ls386.s (23/09/2015, Retro UNIX 386 v1, NASM 2.11, 32 bit version)
    17                                  ; LS0.ASM, 19/11/2013 - 29/11/2013 (Retro UNIX 8086 v1, MASM 6.11) 
    18                                  
    19                                  ; Assembler: NASM 2.11
    20                                  ; 	nasm ls0.s, -l ls0.txt, -o ls0 -Z error.txt
    21                                  ; -----
    22                                  ;   --- unixcopy.com utility & fd0.img (1.44MB diskette) image file ---
    23                                  ;	(c:\runix386\> unixcopy fd0.img)
    24                                  ;	((FD0.IMG!/> fromdos ls0 /bin/ls))
    25                                  ;	((FD0.IMG!/> ?)) -for unixcopy commands help-  	
    26                                  
    27                                  ; 22/01/2022 - (puid, euids) BugFix
    28                                  
    29                                  ; 06/10/2015
    30                                  ; 05/10/2015
    31                                  ; 23/09/2015
    32                                  
    33                                  ; UNIX v1 system calls
    34                                  _rele 	equ 0
    35                                  _exit 	equ 1
    36                                  _fork 	equ 2
    37                                  _read 	equ 3
    38                                  _write	equ 4
    39                                  _open	equ 5
    40                                  _close 	equ 6
    41                                  _wait 	equ 7
    42                                  _creat 	equ 8
    43                                  _link 	equ 9
    44                                  _unlink	equ 10
    45                                  _exec	equ 11
    46                                  _chdir	equ 12
    47                                  _time 	equ 13
    48                                  _mkdir 	equ 14
    49                                  _chmod	equ 15
    50                                  _chown	equ 16
    51                                  _break	equ 17
    52                                  _stat	equ 18
    53                                  _seek	equ 19
    54                                  _tell 	equ 20
    55                                  _mount	equ 21
    56                                  _umount	equ 22
    57                                  _setuid	equ 23
    58                                  _getuid	equ 24
    59                                  _stime	equ 25
    60                                  _quit	equ 26	
    61                                  _intr	equ 27
    62                                  _fstat	equ 28
    63                                  _emt 	equ 29
    64                                  _mdate 	equ 30
    65                                  _stty 	equ 31
    66                                  _gtty	equ 32
    67                                  _ilgins	equ 33
    68                                  _sleep	equ 34 ; Retro UNIX 8086 v1 feature only !
    69                                  _msg	equ 35 ; Retro UNIX 386 v1 feature only !
    70                                  _geterr	equ 36 ; Retro UNIX 386 v1 feature only !
    71                                  
    72                                  %macro sys 1-4
    73                                      ; 03/09/2015	
    74                                      ; 13/04/2015
    75                                      ; Retro UNIX 386 v1 system call.		
    76                                      %if %0 >= 2   
    77                                          mov ebx, %2
    78                                          %if %0 >= 3    
    79                                              mov ecx, %3
    80                                              %if %0 = 4
    81                                                 mov edx, %4   
    82                                              %endif
    83                                          %endif
    84                                      %endif
    85                                      mov eax, %1
    86                                      int 30h	   
    87                                  %endmacro
    88                                  
    89                                  ; Retro UNIX 386 v1 system call format:
    90                                  ; sys systemcall (eax) <arg1 (ebx)>, <arg2 (ecx)>, <arg3 (edx)>
    91                                  
    92                                  [BITS 32] ; We need 32-bit intructions for protected mode
    93                                  
    94                                  [ORG 0] 
    95                                  
    96                                  START_CODE:	; / ls -- list file or directory
    97                                  
    98                                  		;.globl	flush
    99                                  		;.globl	fopen
   100                                  		;.globl	getw
   101                                  		;.globl	getc
   102                                  		;.globl	putc
   103                                  		;.globl	ctime
   104                                  		;.globl	end
   105                                  
   106                                  	;mov	eax, _end + 512
   107                                  	;and	al, 0FEh
   108                                  	;cmp	eax, esp
   109                                  	;jna	short S1
   110                                  	;mov	esp, eax
   111                                  ;S1:	 
   112                                  	;mov 	ebx, eax
   113                                  
   114                                   	; Retro UNIX 8086 v1 modification:
   115                                  	;  'sys break' is not needed to extend 
   116                                  	;  current user core memory
   117                                  	;  (because of 8086 segmentation and 32 kB 
   118                                  	;   memory allocation);
   119                                  	;  but, it is needed to clear/reset
   120                                  	;  user core memory beyond of (after) previous
   121                                  	;  'u.break' which depends on executable
   122                                  	;  file size; because 'bss'
   123                                  	;  data is not in current executable file
   124                                  	; ('BSS' is an external data structure after
   125                                  	;  the last byte of the executable file).			  	 
   126                                  	 
   127                                  	; clear bss area
   128                                  	; (It is not necessary to clear bss area 
   129                                  	; because Retro UNIX 386 v1 kernel will clear
   130                                  	; this bss area during memory page allocation.)
   131                                  	;mov 	ecx, _end
   132                                  	;mov 	edi, bss_start
   133                                  	;sub	ecx, edi
   134                                  	;shr 	cx, 2
   135                                  	;sub	eax, eax
   136                                  	;rep 	stosd 	
   137                                  
   138                                  	; sys break
   139                                  	; clears memory from 'bss' to 'bss._end+512'	
   140 00000000 BB[44150000]            	mov	ebx, _end + 512
   141                                  	sys 	_break
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77                              <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79                              <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000005 B811000000          <1>  mov eax, %1
    86 0000000A CD30                <1>  int 30h
   142                                  		; sys break; end+512.
   143                                  	sys	_write, 1, nl, 2
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 0000000C BB01000000          <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 00000011 B9[AA080000]        <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 00000016 BA02000000          <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 0000001B B804000000          <1>  mov eax, %1
    86 00000020 CD30                <1>  int 30h
   144                                  	;	
   145 00000022 66891D[2E0B0000]        	mov	[obuf], bx ; 1
   146                                  		; mov $1,obuf
   147 00000029 89E6                    	mov	esi, esp
   148                                  		; mov sp,r5
   149 0000002B AD                      	lodsd
   150 0000002C 48                      	dec 	eax
   151 0000002D 66A3[D0080000]          	mov	[count], ax
   152                                  		; mov (r5)+,count
   153                                  		; tst (r5)+
   154                                  		; dec count
   155 00000033 66A3[D2080000]          	mov	[ocount], ax
   156                                  		; mov count,ocount
   157                                  		; bgt loop
   158                                  		; mov $dotp,r5
   159 00000039 7672                    	jna	short B0	
   160                                  	;and	eax, eax
   161                                  	;jnz	short S2	
   162                                  	;jz	short B0
   163                                  	;mov	esi, dotp
   164                                  	;jmp	short sloop
   165                                  ;S2:	
   166 0000003B AD                      	lodsd
   167                                  sloop:	;loop:
   168 0000003C AD                      	lodsd
   169 0000003D 89C3                    	mov	ebx, eax
   170                                  		;mov (r5)+,r4
   171 0000003F 803B2D                  	cmp	byte [ebx], '-'
   172                                  		; cmpb (r4)+,$'-
   173 00000042 7552                    	jne	short A1
   174                                  		; bne 1f
   175 00000044 43                      	inc	ebx
   176 00000045 66FF0D[D2080000]        	dec	word [ocount]
   177                                  		; dec ocount
   178                                  A3: ;3:
   179 0000004C 8A03                    	mov	al, [ebx]
   180                                  		; movb (r4)+,r0
   181 0000004E 43                      	inc	ebx
   182 0000004F 08C0                    	or	al, al
   183 00000051 7448                    	jz	short eloop
   184                                  		; beq eloop
   185 00000053 3C6C                    	cmp	al, 'l'
   186                                  		; cmp r0,$'l
   187 00000055 7509                    	jne	short S3
   188                                  		; bne 4f
   189 00000057 66FF05[D4080000]        	inc	word [longf]
   190                                  		; inc longf
   191 0000005E EBEC                    	jmp	short A3
   192                                  		; br 3b
   193                                  S3: ;4:
   194 00000060 3C74                    	cmp	al, 't'
   195                                  		; cmpb r0,$'t
   196 00000062 750C                    	jne	short S4
   197                                  		; bne 4f
   198 00000064 C705[E0080000]0E00-     	mov	dword [sortoff], 14
   198 0000006C 0000               
   199                                  		; mov $14.,sortoff
   200 0000006E EBDC                    	jmp	short A3
   201                                  		; br 3b
   202                                  S4: ;4:
   203 00000070 3C61                    	cmp	al, 'a'
   204                                  		; cmpb r0,$'a
   205 00000072 7509                            jne     short S5
   206                                  		; bne 4f
   207 00000074 66FF05[D6080000]        	inc	word [allflg]
   208                                  		; inc allflg
   209 0000007B EBCF                    	jmp	short A3
   210                                  S5: ;4:
   211 0000007D 3C73                    	cmp	al, 's'
   212                                  		; cmpb r0,$'s
   213 0000007F 7508                    	jne	short S6
   214                                  		; bne 4f
   215 00000081 FE05[D5080000]          	inc 	byte [longf+1]
   216                                  		; incb longf+1
   217 00000087 EBC3                    	jmp	short A3
   218                                  		; br 3b
   219                                  S6: ;4:
   220 00000089 3C64                    	cmp	al, 'd'
   221                                  		; cmpb r0,$'d
   222 0000008B 75BF                    	jne	short A3
   223                                  		; bne 3b
   224 0000008D 66FF05[D8080000]        	inc	word [dirflg]
   225                                  		; inc dirflg
   226 00000094 EBB6                    	jmp	short A3
   227                                  		; br 3b
   228                                  A1: ;1:
   229                                  	;dec	ebx
   230                                  		; dec r4
   231 00000096 E82A000000              	call	do
   232                                  		; jsr pc,do
   233                                  eloop:
   234 0000009B 66FF0D[D0080000]        	dec	word [count]
   235                                  		; dec count
   236 000000A2 7F98                    	jg	short sloop
   237                                  		; bgt loop
   238 000000A4 A1[9C080000]            	mov	eax, [dnp]
   239 000000A9 21C0                    	and	eax, eax	
   240                                  		;tst dnp
   241 000000AB 7507                    	jnz	short S7	
   242                                  		; bne 1f
   243                                  B0:
   244 000000AD BE[A0080000]            	mov	esi, dotp
   245                                  		; mov $dotp,r5
   246 000000B2 EB88                    	jmp	short sloop
   247                                  		; br loop
   248                                  S7: ;1:
   249 000000B4 BE[2E0B0000]            	mov	esi, obuf
   250 000000B9 E852050000              	call	flush
   251                                  		; jsr r5,flush; obuf
   252                                  	sys	_exit
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77                              <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79                              <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000000BE B801000000          <1>  mov eax, %1
    86 000000C3 CD30                <1>  int 30h
   253                                  		; sys exit
   254                                  
   255                                  ;; 20 bytes listing (source) data
   256                                  ;; structure:
   257                                  ;; offset
   258                                  ;; 0-7   : file name
   259                                  ;; 8-9   : flags
   260                                  ;; 10-11 : nlinks, uid
   261                                  ;; 12-13 : size
   262                                  ;; 14-15-16-17 : mtime
   263                                  ;; 18-19 : inode number 
   264                                  
   265                                  do:
   266 000000C5 56                      	push	esi ; r5
   267 000000C6 29C0                    	sub 	eax, eax
   268 000000C8 A3[DC080000]            	mov	[tblocks], eax ; 0
   269                                  		; clr tblocks
   270 000000CD BD[44130000]            	mov	ebp, _end
   271                                  		; mov $end,r1
   272 000000D2 BF[E4080000]            	mov	edi, filnam
   273                                  		; mov $filnam,r3
   274 000000D7 891D[9C080000]          	mov	[dnp], ebx
   275                                  		; mov r4,dnp
   276 000000DD 89DE                    	mov	esi, ebx ; r4
   277 000000DF 66A3[DA080000]          	mov	[isadir], ax ; 0
   278                                  		; clr isadir
   279 000000E5 663905[D8080000]        	cmp	[dirflg], ax ; 0
   280                                  		; tst dirflg
   281                                  	;ja	nondir 
   282                                  		; bne nondir
   283                                  	; 22/01/2022
   284 000000EC 7605                    	jna	short do_stat
   285 000000EE E9C0000000              	jmp	nondir
   286                                  do_stat:
   287                                  	;mov	ebx, [dnp]
   288 000000F3 B9[04090000]            	mov	ecx, statb
   289                                  	sys	_stat
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77                              <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79                              <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000000F8 B812000000          <1>  mov eax, %1
    86 000000FD CD30                <1>  int 30h
   290                                  		; sys stat; dnp: 0; statb
   291 000000FF 731B                    	jnc	short B1
   292                                  		; bec 1f
   293                                  	; EBX = file name address
   294 00000101 BE[0D010000]            	mov	esi, S8
   295                                  do_err:
   296 00000106 E8AF020000              	call	questf
   297 0000010B 5E                      	pop	esi
   298 0000010C C3                      	retn
   299                                  		;jsr r5,questf; < nonexistent\n\0>; .even
   300                                  		; rts pc
   301                                  S8:
   302 0000010D 206E6F6E6578697374-     	db	' nonexistent', 0Dh, 0Ah, 0
   302 00000116 656E740D0A00       
   303                                  
   304                                  B1: ;1:
   305                                  	;test	word [statb+2], 4000h
   306 0000011C F605[07090000]40        	test	byte [statb+3], 40h
   307                                  		; bit $40000,statb+2 /test directory
   308                                  	;jz	nondir
   309                                  		; beq nondir
   310                                  	; 22/01/2022
   311 00000123 7505                    	jnz	short B8 ; yes
   312                                  	; not directory
   313 00000125 E989000000              	jmp	nondir
   314                                  B8:
   315 0000012A 66FF05[DA080000]        	inc	word [isadir]
   316                                  		; inc isadir
   317                                  	;mov	eax, ebx
   318                                  		; mov r4,r0
   319 00000131 57                      	push	edi
   320 00000132 BF[26090000]            	mov	edi, dbuf
   321 00000137 E8F7040000              	call	fopen
   322                                  		; jsr r5,fopen; dbuf
   323 0000013C 5F                      	pop	edi
   324 0000013D 7315                    	jnc	short B2
   325                                  		; bcc 1f
   326                                  	; EBX = file name address
   327 0000013F BE[46010000]            	mov	esi, S9
   328 00000144 EBC0                    	jmp	short do_err
   329                                  	;call	questf
   330                                  	;pop	esi
   331                                  	;retn
   332                                  		; jsr r5,questf; < unreadable\n\0>; .even
   333                                  		; rts pc
   334                                  S9:
   335 00000146 20756E726561646162-     	db	' unreadable', 0Dh, 0Ah, 0
   335 0000014F 6C650D0A00         
   336                                  B2:
   337                                  	; mov	esi, ebx ; r4
   338                                  S10: ;1:
   339 00000154 AC                      	lodsb	  
   340 00000155 AA                      	stosb	 
   341                                  		;movb (r4)+,(r3)+
   342 00000156 08C0                    	or	al, al
   343 00000158 75FA                    	jnz	short S10
   344                                  		; bne 1b
   345 0000015A 4F                      	dec	edi
   346                                  		; dec r3
   347                                  	;
   348 0000015B 807FFF2F                	cmp 	byte [edi-1],'/'		
   349                                  		; cmpb -1(r3),$'/
   350 0000015F 7403                    	je	short B3
   351                                  		; beq 1f
   352 00000161 B02F                    	mov	al, '/'
   353 00000163 AA                      	stosb
   354                                  		; movb $'/,(r3)+
   355                                  B3: ;1:
   356                                  	;mov	ebx, dbuf
   357 00000164 BE[26090000]            	mov	esi, dbuf
   358                                  S11:
   359 00000169 E8DA040000              	call	getw
   360                                  		; jsr r5,getw; dbuf
   361 0000016E 726C                    	jc	short pass2
   362                                  		; bcs pass2
   363                                  	; 22/01/2022
   364 00000170 29C9                    	sub	ecx, ecx
   365 00000172 B104                    	mov	cl, 4
   366                                  	;mov	ecx, 4
   367                                  		; mov $4,-(sp)
   368                                  	; 22/01/2022
   369 00000174 21C0                    	and	eax, eax
   370                                  	;and	ax, ax
   371                                  		; tst r0
   372 00000176 750B                    	jnz	short B5
   373                                  		; bne 2f
   374                                  B4: ;3:
   375 00000178 51                      	push	ecx
   376                                  	; mov	esi, dbuf
   377 00000179 E8CA040000              	call	getw
   378                                  		; jsr r5,getw; dbuf
   379 0000017E 59                      	pop	ecx
   380 0000017F E2F7                    	loop	B4
   381                                  		; dec (sp)
   382                                  		; bne 3b
   383                                  		; tst (sp)+
   384 00000181 EBE6                    	jmp 	short S11
   385                                  	;jmp	short B3
   386                                  		; br 1b
   387                                  B5: ;2:
   388                                  	; EDI == r2
   389                                  		; mov r3,r2
   390 00000183 57                      	push	edi ; r3 (filnam +'/'+1)
   391                                  B6: ;2:
   392                                  	;; copying file name 
   393                                  	;; to listing (source) data address (ebp)
   394                                  	;; (offset 0-7)
   395                                  	;; and filnam (edi)
   396                                  	;
   397 00000184 51                      	push	ecx
   398                                  	; mov	esi, dbuf
   399 00000185 E8BE040000              	call	getw
   400                                  		; jsr r5,getw; dbuf
   401 0000018A 66894500                	mov	[ebp], ax
   402 0000018E 45                      	inc	ebp
   403 0000018F 45                      	inc	ebp
   404                                  		; mov r0,(r1)+
   405 00000190 66AB                    	stosw
   406                                  	;stosb
   407                                  		; movb r0,(r2)+
   408                                  	;xchg	al, ah
   409                                  		; swab r0
   410                                  	;stosb
   411                                  		; movb r0,(r2)+
   412 00000192 59                      	pop	ecx
   413 00000193 E2EF                    	loop	B6
   414                                  		; dec (sp)
   415                                  		; bne 2b
   416                                  		; tst (sp)+
   417 00000195 31C0                    	xor	eax, eax ; 0
   418 00000197 AA                      	stosb
   419                                  		; clrb (r2)+
   420 00000198 5F                      	pop	edi ; r3
   421 00000199 663905[D6080000]        	cmp	[allflg], ax ; 0
   422                                  		; tst allflg
   423 000001A0 770A                    	ja	short B7
   424                                  		; bne 2f
   425 000001A2 803F2E                  	cmp	byte [edi], '.'
   426                                  		; cmpb (r3),$'.
   427 000001A5 7505                    	jne	short B7
   428                                  		; bne 2f
   429 000001A7 83ED08                  	sub	ebp, 8
   430                                  		; sub $8.,r1
   431 000001AA EBBD                    	jmp	short S11
   432                                  	;jmp	short B3
   433                                  		; br 1b
   434                                  B7: ;2:
   435                                  	;; copying 12 bytes inode data to
   436                                  	;; listing (source) data from offset
   437                                  	;; 8 to offset 19 (of 20 data bytes)
   438                                  	; 
   439 000001AC E864030000              	call	gstat
   440                                  		; jsr r5,gstat
   441 000001B1 EBB1                    	jmp	short B3
   442                                  		; br 1b
   443                                  
   444                                  nondir:
   445                                  	; mov	esi, ebx ; r4
   446 000001B3 89FB                    	mov	ebx, edi ; offset filnam
   447                                  	;mov	r3,r2
   448                                  S12: ;1:
   449                                  	; ESI points to file name (input)
   450 000001B5 AC                      	lodsb
   451 000001B6 AA                      	stosb
   452                                  		; movb (r4)+,(r2)+
   453 000001B7 20C0                    	and	al, al
   454 000001B9 75FA                    	jnz	short S12
   455                                  		; bne 1b
   456                                  S13: ;1:
   457 000001BB 39DF                    	cmp	edi, ebx ; offset filnam	
   458                                  		; cmp r2,r3
   459 000001BD 7607                    	jna	short S14
   460                                  		; blos	1f
   461 000001BF 4F                      	dec	edi
   462 000001C0 803F2F                  	cmp	byte [edi], '/'
   463                                                  ; cmpb -(r2),$'/
   464 000001C3 75F6                            jne     short S13
   465                                  		; bne 1b
   466 000001C5 47                      	inc	edi
   467                                  		; inc r2
   468                                  	;; EDI points to last name 
   469                                  	;; of the path (after "/")
   470                                  S14: ;1:
   471                                  	; 22/01/2022
   472 000001C6 31C9                    	xor	ecx, ecx
   473 000001C8 B108                    	mov	cl, 8
   474                                  	;mov	ecx, 8
   475                                  		; mov $8.,-(sp)
   476                                  ndloop: ;1:
   477 000001CA 8A07                    	mov	al, [edi]
   478 000001CC 884500                  	mov	[ebp], al
   479 000001CF 45                      	inc	ebp
   480                                  		; movb (r2)+,(r1)+
   481                                  		; bne 2f
   482                                  		; dec r2
   483 000001D0 08C0                    	or	al, al
   484 000001D2 7401                    	jz	short S15
   485 000001D4 47                      	inc	edi
   486                                  S15:
   487 000001D5 E2F3                    	loop	ndloop
   488 000001D7 E839030000              	call	gstat ; fill/get 12 bytes listing data
   489                                  	;jmp	short pass2
   490                                  S16: ;2:
   491                                  		; dec (sp)	
   492                                  		; bne 1b
   493                                  		; jsr r5,gstat
   494                                  		; tst (sp)+
   495                                  
   496                                  pass2:
   497 000001DC 0FB71D[26090000]        	movzx	ebx, word [dbuf]
   498                                  		; mov dbuf,r0
   499                                  	sys	_close
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77                              <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79                              <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000001E3 B806000000          <1>  mov eax, %1
    86 000001E8 CD30                <1>  int 30h
   500                                  		; sys close
   501 000001EA 89D9                    	mov	ecx, ebx ; file descriptor
   502 000001EC BB[44130000]            	mov	ebx, _end
   503                                  		; mov $end,r2
   504 000001F1 39DD                    	cmp	ebp, ebx  ; ebp >= _end (= last word + 4)
   505                                  		; cmp r1,r2
   506 000001F3 7502                    	jne	short C1
   507                                  		; bne 1f
   508 000001F5 5E                      	pop	esi ; r5
   509 000001F6 C3                      	retn
   510                                  		; rts pc
   511                                  C1: ;1:
   512                                  ; sorting begins here
   513                                  		; mov r5,-(sp)
   514 000001F7 89EF                    	mov 	edi, ebp ; current end of listing words (+4)
   515 000001F9 55                      	push	ebp ; r1 
   516                                  		; mov r1,-(sp)
   517                                  	; EBX will point to mtime or file name (+14 or 0)
   518                                  	; offset of 20 bytes listing (source) data 
   519 000001FA 031D[E0080000]          	add	ebx, [sortoff] 
   520                                  		; add sortoff,r2
   521                                  C2: ;1:
   522 00000200 89D8                    	mov	eax, ebx
   523 00000202 AB                      	stosd
   524                                  		; mov r2,(r1)+
   525 00000203 83C314                  	add	ebx, 20	; EBX now points to next 20 bytes
   526                                  		; add $20.,r2
   527 00000206 39EB                    	cmp	ebx, ebp ; is EBX passed the data limit ?
   528                                  		; cmp r2,(sp)
   529 00000208 72F6                    	jb	short C2
   530                                  		; blo 1b
   531                                  S17:
   532 0000020A 89EB                    	mov	ebx, ebp
   533                                  		; mov (sp),r2
   534 0000020C 83EF04                  	sub	edi, 4
   535                                  		; tst -(r1)
   536                                  C3: ;1:
   537 0000020F 89FA                    	mov	edx, edi ; r1
   538                                  S18:
   539                                  	;mov	ebp, ebx
   540                                  		; mov r2,r3
   541                                  C4: ;2:
   542 00000211 83C504                  	add	ebp, 4
   543                                  		; tst (r3)+
   544 00000214 39D5                    	cmp	ebp, edx
   545                                  		; cmp r3,r1
   546 00000216 7724                    	ja	short C7
   547                                  		; bhi 2f
   548 00000218 8B33                    	mov	esi, [ebx] ; file name 1 or time 1
   549                                  		; mov (r2),r4
   550 0000021A 8B7D00                  	mov	edi, [ebp] ; file name 2 or time 2
   551                                  		; mov (r3),r5
   552 0000021D 833D[E0080000]00                cmp     dword [sortoff], 0
   553                                  		; tst sortoff
   554 00000224 7605                    	jna	short C5
   555                                  		; beq 4f
   556                                  
   557                                  ; sorting by modification time
   558 00000226 A7                      	cmpsd
   559 00000227 7209                    	jb	short C6
   560                                  		; cmp (r4)+,(r5)+
   561                                  		; blo 3f
   562                                  		; bhi 2b
   563                                  		; cmp (r4)+,(r5)+
   564                                  		; blo 3f
   565 00000229 EBE6                    	jmp	short C4
   566                                  		; br 2b
   567                                  
   568                                  ; sorting by file name
   569                                  C5: ;4:
   570                                  	; ?
   571                                  	;; mov	ecx, 8
   572                                  ;C5x: ;4:
   573 0000022B A6                      	cmpsb	
   574                                  		; cmpb (r4)+,(r5)+
   575 0000022C 7704                    	ja	short C6
   576                                  		; bhi 3f
   577 0000022E 72E1                    	jb	short C4
   578                                  		; blo 2b
   579                                  	;dec	ecx ; ?
   580                                  		; dec r0
   581                                  	;jnz	short C5x ; ?
   582                                  	;jmp	short C5x
   583 00000230 EBF9                    	jmp	short C5
   584                                  		; br 4b
   585                                  C6: ;3:
   586                                  	; 05/10/2015
   587                                  	; (xchg	[ebx],[ebp]) ; 22/01/2022
   588 00000232 8B4500                  	mov	eax, [ebp]
   589 00000235 8703                    	xchg	eax, [ebx]
   590 00000237 894500                  	mov	[ebp], eax
   591                                  		; mov (r2),-(sp)
   592                                  		; mov (r3),(r2)
   593                                  		; mov (sp)+,(r3)
   594 0000023A EBD5                    	jmp	short C4
   595                                  		; br 2b
   596                                  C7: ;2:
   597 0000023C 83C304                  	add	ebx, 4
   598                                  		; tst (r2)+
   599 0000023F 39D3                    	cmp	ebx, edx
   600                                  		; cmp r2,r1
   601                                  	;jb	short S18
   602                                  	;jb	short C3
   603                                  		; blo 1b
   604                                  	;
   605 00000241 7304                    	jnb	short C8
   606 00000243 89DD                    	mov	ebp, ebx
   607 00000245 EBCA                            jmp     short S18
   608                                  C8: ;1:
   609                                  ; end of sorting
   610 00000247 5D                      	pop	ebp ; r1 -> r2
   611                                  		; mov (sp)+,r2
   612                                  		; mov (sp)+,r5
   613                                  	
   614                                  	; BP = R2
   615                                  pass3:
   616                                  	; DX = R1 -> 'eol:' points to end of the list
   617 00000248 8915[C9080000]          	mov	[eol], edx ; save dx/r1
   618                                  	;
   619 0000024E 66833D[D2080000]01      	cmp	word [ocount], 1
   620                                  		; cmp ocount,$1
   621 00000256 7E1F                    	jng	short E1
   622                                  		; ble 1f
   623 00000258 66833D[DA080000]00      	cmp	word [isadir], 0
   624                                  		; tst isadir
   625 00000260 7648                    	jna	short E2
   626                                  		; beq 2f
   627 00000262 8B35[9C080000]          	mov	esi, [dnp]
   628                                  		; mov dnp,0f
   629 00000268 E840010000              	call	pstring
   630                                  		; jsr r5,pstring; 0:..
   631 0000026D BE[C5080000]            	mov	esi, colon
   632                                  		; jsr r5,pstring; colon
   633 00000272 E836010000              	call	pstring
   634                                  E1: ;1:
   635 00000277 66833D[D4080000]00      	cmp	word [longf], 0
   636                                  		; tst longf
   637                                          ;jna	E10
   638                                  	;	; beq 1f
   639                                  	; 22/01/2022
   640 0000027F 7705                    	ja	short E16
   641 00000281 E99E000000              	jmp	E10
   642                                  E16:
   643 00000286 BE[AD080000]            	mov	esi, totmes
   644 0000028B E81D010000              	call	pstring
   645                                  		; jsr r5,pstring; totmes
   646 00000290 A1[DC080000]            	mov	eax, [tblocks]
   647                                  		; mov tblocks,r0
   648                                  	;mov	ebx, 4
   649                                  	; 22/01/2022
   650 00000295 29DB                    	sub	ebx, ebx
   651 00000297 B304                    	mov	bl, 4
   652 00000299 E809030000              	call	decimal
   653                                  		; jsr r5,decimal; 4
   654 0000029E BE[AA080000]            	mov	esi, nl
   655 000002A3 E805010000              	call	pstring
   656                                  		; jsr r5,pstring; nl
   657 000002A8 EB09                            jmp     short S19
   658                                  E2: ;2:
   659 000002AA 803D[D4080000]00        	cmp	byte [longf], 0
   660                                  		; tstb longf
   661 000002B1 7671                    	jna	short E10
   662                                  		; beq 1f
   663                                  S19:	
   664 000002B3 BB[B9080000]            	mov	ebx, passwd
   665                                  		; mov $passwd,r0
   666 000002B8 BF[3C110000]            	mov	edi, iobuf
   667 000002BD E871030000              	call	fopen
   668                                  		; jsr r5,fopen; iobuf
   669 000002C2 7260                    	jc	short E10
   670                                  		; bes 1f
   671 000002C4 BF[3C0D0000]            	mov	edi, uidbuf
   672                                  		; mov $uidbuf,r3
   673                                  E3: ;3:
   674                                  E4: ;2:
   675 000002C9 BE[3C110000]            	mov	esi, iobuf
   676                                  S20:
   677 000002CE E888030000              	call	getc
   678                                  		; jsr r5,getc; iobuf
   679 000002D3 723B                    	jc	short E9
   680                                  		; bes 3f
   681                                  E17:
   682 000002D5 AA                      	stosb
   683                                  		; movb r0,(r3)+
   684 000002D6 3C3A                    	cmp	al, ':'
   685                                  		; cmpb r0,$':
   686                                  	; 21/01/2022
   687 000002D8 75F4                    	jne	short S20
   688                                  	;jne	short E4
   689                                  		; bne 2b
   690                                  E5: ;2:
   691                                  	;mov	esi, iobuf
   692 000002DA E87C030000              	call	getc
   693                                  		; jsr r5,getc; iobuf
   694 000002DF 3C3A                    	cmp	al, ':'
   695                                  		; cmpb r0,$':
   696 000002E1 75F7                    	jne	short E5
   697                                  		; bne 2b
   698                                  E6: ;2:
   699                                  	;mov	esi, iobuf
   700 000002E3 E873030000              	call	getc
   701                                  		; jsr r5,getc; iobuf
   702 000002E8 3C3A                    	cmp	al, ':'
   703                                  		; cmpb r0,$':
   704 000002EA 7403                    	je	short E7
   705                                  		; beq 2f ; 22/01/2022
   706 000002EC AA                      	stosb
   707                                  		; movb r0,(r3)+
   708 000002ED EBF4                    	jmp	short E6
   709                                  		; br 2b
   710                                  E7: ;2:
   711 000002EF B00D                    	mov	al, 0Dh
   712 000002F1 AA                      	stosb
   713                                  		; movb $'\n,(r3)+
   714 000002F2 81FF[3C110000]          	cmp	edi, euidbuf
   715                                  		; cmp r3,$euidbuf
   716 000002F8 7316                    	jnb	short E9
   717                                  		; bhis 3f
   718                                  E8: ;2:
   719                                  	;mov	esi, iobuf
   720 000002FA E85C030000              	call	getc
   721                                  		; jsr r5,getc; iobuf
   722 000002FF 3C0D                    	cmp	al, 0Dh ; end of line 
   723                                  		; cmpb r0,$'\n
   724 00000301 75F7                    	jne	short E8
   725                                  		; bne 2b
   726                                  	;jmp	short E3
   727                                  		; br 3b
   728                                  	;
   729                                  	; 22/01/2022
   730                                  	; (msdos/windows 'passwd' text file, CRLF)
   731 00000303 E853030000              	call	getc
   732 00000308 7206                    	jc	short E9
   733 0000030A 3C0A                    	cmp	al, 0Ah ; LF
   734 0000030C 75C7                    	jne	short E17
   735                                  	;
   736 0000030E EBBE                    	jmp	short S20
   737                                  E9: ;3:
   738 00000310 893D[A4080000]          	mov	[euids], edi
   739                                  		; mov r3,euids
   740                                  	; 07/10/2015 (32 bit modification)
   741                                  	; Retro UNIX 8086 v1 modification !!!
   742 00000316 0FB71D[3C110000]        	movzx	ebx,  word [iobuf]
   743                                  	; ??? (file descriptor ???)
   744                                  	; Original unix v1 'ls.s' has/had source
   745                                  	; code defect here !!!
   746                                  	sys	_close
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77                              <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79                              <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 0000031D B806000000          <1>  mov eax, %1
    86 00000322 CD30                <1>  int 30h
   747                                  		; sys close
   748                                  E10: ;1:
   749                                  	; BP = R2
   750                                  	; [eol]  = end of the list 
   751                                  	;       (= r1 in original unix v1 'ls.s')
   752 00000324 3B2D[C9080000]          	cmp	ebp, [eol]
   753                                  		; cmp r2,r1
   754 0000032A 772F                    	ja	short E14
   755                                  		; bhi 1f
   756 0000032C 8B7500                  	mov	esi, [ebp]
   757 0000032F 83C504                  	add	ebp, 4
   758                                  		; mov (r2)+,r3
   759 00000332 2B35[E0080000]          	sub	esi, [sortoff]
   760                                  		; sub sortoff,r3
   761                                  	;;
   762                                  	;; ESI points to filename offset (0)
   763                                  	;; of the listing (source) data (20 bytes)
   764                                  	;
   765 00000338 E83E000000              	call	pentry
   766                                  		; jsr r5,pentry
   767                                  	;
   768                                  	; 22/01/2022
   769 0000033D 29C9                    	sub	ecx, ecx
   770 0000033F B108                    	mov	cl, 8
   771                                  	;mov	ecx, 8
   772                                  		; mov $8.,-(sp)
   773                                  	;; print/write file name (on the end of
   774                                  	;; the listing row (after time string)
   775                                  E11: ;2:
   776 00000341 AC                      	lodsb
   777                                  		; movb (r3)+,r0
   778 00000342 08C0                    	or	al, al
   779 00000344 7409                            jz      short E13
   780                                  		; beq 2f
   781 00000346 51                      	push	ecx
   782                                  	;mov	ebx, obuf
   783 00000347 E8A5020000              	call	putc
   784                                  		; jsr r5,putc; obuf
   785 0000034C 59                      	pop	ecx
   786 0000034D E2F2                    	loop	E11
   787                                  		; dec (sp)
   788                                  		; bne 2b
   789                                  E13: ;2:
   790                                  		; tst (sp)+
   791 0000034F BE[AA080000]            	mov	esi, nl ; new line
   792 00000354 E854000000              	call	pstring	
   793                                  		; jsr r5,pstring; nl
   794 00000359 EBC9                    	jmp	short E10
   795                                  		; br 1b
   796                                  E14: ;1:
   797 0000035B 66833D[D2080000]01      	cmp	word [ocount], 1
   798                                  		; cmp ocount,$1
   799 00000363 7E14                    	jng	short E15
   800                                  		; ble 1f
   801 00000365 66833D[DA080000]00      	cmp	word [isadir], 0
   802                                  		; tst isadir
   803 0000036D 740A                    	je	short E15
   804                                  		; beq 1f
   805 0000036F BE[AA080000]            	mov	esi, nl
   806 00000374 E834000000              	call	pstring
   807                                  		; jsr r5,pstring; nl
   808                                  E15: ;1:
   809 00000379 5E                      	pop 	esi	; r5	
   810 0000037A C3                      	retn
   811                                  		; rts pc
   812                                  
   813                                  pentry:
   814                                  		;mov r2,-(sp)
   815 0000037B 803D[D4080000]00        	cmp	byte [longf], 0
   816                                  		; tstb longf
   817 00000382 7741                    	ja	short listl
   818                                  		; bne listl
   819 00000384 803D[D5080000]00        	cmp	byte [longf+1], 0
   820                                  		; tstb longf+1
   821 0000038B 7701                    	ja	short S21
   822                                  		; bne 2f
   823                                  		; mov (sp)+,r2
   824 0000038D C3                      	retn
   825                                  		; rts r5
   826                                  S21: ;2:
   827 0000038E 0FB7460C                	movzx	eax, word [esi+12]
   828                                  		; mov 12.(r3),r0
   829                                  	; 22/01/2022
   830                                  	; eax = file size
   831 00000392 E84B020000              	call	calcb
   832                                  		; jsr r5,calcb
   833 00000397 56                      	push	esi
   834                                  	;mov	ebx, 3
   835                                  	; 22/01/2022
   836 00000398 29DB                    	sub	ebx, ebx
   837 0000039A B303                    	mov	bl, 3
   838 0000039C E806020000              	call	decimal
   839                                  		; jsr r5,decimal; 3
   840 000003A1 E802000000              	call	_pstring
   841                                  		; jsr r5,pstring; space
   842                                  		; mov (sp)+,r2
   843 000003A6 5E                      	pop	esi
   844 000003A7 C3                      	retn
   845                                  		; rts r5
   846                                  
   847                                  _pstring:
   848 000003A8 BE[B7080000]            	mov	esi, space
   849                                  
   850                                  pstring:
   851                                  		; mov r5,-(sp)
   852                                  		; mov (r5),r5
   853                                  S22: ;1:
   854 000003AD AC                      	lodsb
   855                                  		; movb (r5)+,r0
   856 000003AE 20C0                    	and	al, al
   857 000003B0 7407                    	jz	short S23
   858                                  		; beq 1f
   859                                  	;mov	ebx, obuf
   860 000003B2 E83A020000              	call	putc	
   861                                  		; jsr r5,putc; obuf
   862 000003B7 EBF4                    	jmp	short S22
   863                                  		; br 1b
   864                                  S23: ;1:
   865 000003B9 C3                      	retn
   866                                  		; mov (sp)+,r5
   867                                  		; tst (r5)+
   868                                  		; rts r5
   869                                  
   870                                  questf:
   871 000003BA 56                      	push	esi
   872 000003BB 89DE                    	mov	esi, ebx
   873                                  		; mov r4,0f
   874 000003BD E8EBFFFFFF              	call	pstring
   875                                  		; jsr r5,pstring; 0:..
   876 000003C2 5E                      	pop	esi
   877                                  		; mov r5,0f
   878                                  	;call	pstring
   879                                  		; jsr r5,pstring; 0:..
   880                                  	;retn
   881                                  	;
   882 000003C3 EBE8                    	jmp	short pstring
   883                                  ;1:
   884                                  		; tstb	(r5)+
   885                                  		; bne	1b
   886                                  		; inc	r5
   887                                  		; bic	$1,r5
   888                                  		; rts	r5
   889                                  listl:
   890                                  	; 06/10/2015 (32 bit modifications)
   891 000003C5 0FB74612                	movzx	eax, word [esi+18]
   892                                                  ; mov 18.(r3),r0  / inode
   893 000003C9 56                      	push	esi ; r3
   894                                  	;mov	ebx, 4
   895                                  	; 22/01/2022
   896 000003CA 31DB                    	xor	ebx, ebx
   897 000003CC B304                    	mov	bl, 4
   898 000003CE E8D4010000              	call	decimal
   899                                  		; jsr r5,decimal; 4
   900 000003D3 E8D0FFFFFF              	call	_pstring
   901                                  		; jsr r5,pstring; space
   902                                  
   903 000003D8 5E                      	pop	esi ; r3
   904 000003D9 89F7                    	mov	edi, esi
   905                                  		; mov r3,r4
   906 000003DB 83C708                  	add	edi, 8
   907                                  		; add $8.,r4 / get to flags
   908                                  F0:
   909 000003DE F6470110                	test	byte [edi+1], 10h
   910                                  	;test	word [edi], 1000h
   911                                  		; bit $10000,(r4) /large
   912 000003E2 7404                    	jz	short F1
   913                                  		; beq 2f
   914 000003E4 B06C                    	mov	al, 'l'
   915                                  	; 22/01/2022
   916                                  	;call	mode
   917                                  		; jsr r5,mode; 'l
   918 000003E6 EB02                    	jmp	short F2
   919                                  		; br 3f
   920                                  F1: ;2:
   921 000003E8 B073                    	mov	al, 's'
   922                                  F2:
   923 000003EA E802020000              	call	mode
   924                                  		; jsr r5,mode; 's
   925                                  ;F2: ;3:
   926 000003EF F6470140                	test	byte [edi+1], 40h
   927                                  	;test	word [edi], 4000h 
   928                                  		; bit $40000,(r4) /directory
   929 000003F3 7404                    	jz	short F3
   930                                  		; beq 2f
   931 000003F5 B064                    	mov	al, 'd'
   932                                  	; 22/01/2022
   933                                  	;call	mode
   934                                  		; jsr r5,mode; 'd
   935 000003F7 EB12                    	jmp	short F6
   936                                  		; br 3f
   937                                  F3: ;2:
   938 000003F9 F60720                  	test	byte [edi], 20h 
   939                                  		; bit $40,(r4)  /set uid
   940 000003FC 7404                    	jz	short F4
   941                                  		; beq 2f
   942 000003FE B075                    	mov	al, 'u'
   943                                  	; 22/01/2022
   944                                  	;call	mode
   945                                  		; jsr r5,mode; 'u
   946 00000400 EB09                    	jmp	short F6
   947                                  		; br 3f
   948                                  F4: ;2:
   949                                  	; 22/01/2022
   950 00000402 B02D                    	mov	al, '-'
   951 00000404 F60710                  	test	byte [edi], 10h
   952                                  		; bit $20,(r4)   /executable
   953 00000407 7402                    	jz	short F5
   954                                  		; beq 2f
   955 00000409 B078                    	mov	al, 'x'
   956                                  	; 22/01/2022
   957                                  	;call	mode
   958                                  		; jsr r5,mode; 'x
   959                                  	;jmp	short F6
   960                                  		; br 3f
   961                                  F5: ;2:
   962                                  	; 22/01/2022
   963                                  	;call	_mode
   964                                  		; jsr r5,mode; '-
   965                                  F6: ;3:
   966                                  	; 22/01/2022
   967 0000040B E8E1010000              	call	mode
   968 00000410 B02D                    	mov	al, '-'
   969                                  	;
   970 00000412 F60708                  	test	byte [edi], 8
   971                                  		; bit $10,(r4)  /read owner
   972 00000415 7402                    	jz	short F7
   973                                  		; beq 2f
   974 00000417 B072                    	mov	al, 'r'
   975                                  	; 22/01/2022
   976                                  F7:
   977 00000419 E8D3010000              	call	mode
   978                                  		; jsr r5,mode; 'r
   979                                  	;jmp	short F8
   980                                  		; br 3f
   981                                  ;F7: ;2:
   982                                  	; 22/01/2022
   983                                  	;call	_mode
   984                                                  ; jsr r5, mode; '-
   985                                  F8: ;3:
   986                                  	; 22/01/2022
   987 0000041E B02D                    	mov	al, '-'
   988                                  	;
   989 00000420 F60704                  	test	byte [edi], 4
   990                                  		; bit $4,(r4)  /write owner
   991 00000423 7402                    	jz	short F9
   992                                  		; beq 2f
   993 00000425 B077                    	mov	al, 'w'
   994                                  	; 22/01/2022
   995                                  F9:
   996 00000427 E8C5010000              	call	mode
   997                                  		; jsr r5,mode; 'w
   998                                  	;jmp	short F10
   999                                  		; br 3f
  1000                                  ;F9: ;2:
  1001                                  	;call	_mode
  1002                                  		; jsr r5,mode; '-
  1003                                  F10: ;3:
  1004                                  	; 22/01/2022
  1005 0000042C B02D                    	mov	al, '-'
  1006                                  	;
  1007 0000042E F60702                  	test	byte [edi], 2
  1008                                  		; bit $2,(r4)  /read non-owner
  1009 00000431 7402                    	jz	short F11
  1010                                  		; beq 2f
  1011 00000433 B072                    	mov	al, 'r'
  1012                                  	; 22/01/2022
  1013                                  F11:
  1014 00000435 E8B7010000              	call	mode
  1015                                  		; jsr r5,mode; 'r
  1016                                  	;jmp	short F12
  1017                                  		; br 3f
  1018                                  ;F11: ;2:
  1019                                  	;call	_mode
  1020                                  		; jsr r5,mode; '-
  1021                                  F12: ;3:
  1022                                  	; 22/01/2022
  1023 0000043A B02D                    	mov	al, '-'
  1024                                  	;
  1025 0000043C F60701                  	test	byte [edi], 1 ; (r4)
  1026                                  		; bit $1,(r4)+  /write non-owner
  1027 0000043F 7402                    	jz	short F13
  1028                                  		; beq 2f
  1029 00000441 B077                    	mov	al, 'w'
  1030                                  F13:
  1031 00000443 E8A9010000              	call	mode
  1032                                  		; jsr r5,mode; 'w
  1033                                  	;jmp	short F14
  1034                                  		; br 3f
  1035                                  ;F13: ;2:
  1036                                  	;call	_mode
  1037                                  		; jsr r5,mode; '-
  1038                                  F14: ;3:
  1039 00000448 56                      	push	esi ; r3
  1040 00000449 E85AFFFFFF              	call	_pstring
  1041                                  		; jsr r5,pstring; space
  1042                                  	; inc 	edi, 4 ;; (r4)+
  1043                                  	; inc 	edi ;;
  1044 0000044E 89FE                    	mov	esi, edi
  1045 00000450 66AD                    	lodsw	; (r4)+
  1046                                  	; 22/01/2022
  1047 00000452 29C0                    	sub	eax, eax
  1048 00000454 AC                      	lodsb	;; nlinks	
  1049                                  	;movzx	eax, al
  1050                                  		; movb (r4)+,r0
  1051                                  	;mov	ebx, 2
  1052                                  	; 22/01/2022
  1053 00000455 31DB                    	xor	ebx, ebx
  1054 00000457 B302                    	mov	bl, 2
  1055 00000459 E841010000              	call	_decimal
  1056                                  		; jsr r5,decimal; 2
  1057 0000045E AC                      	lodsb	;; uid
  1058                                  		; movb (r4)+,r2
  1059 0000045F E833000000              	call	puid
  1060                                  		; jsr pc,puid
  1061 00000464 66AD                    	lodsw	;; size
  1062                                  		; mov (r4)+,r0
  1063                                  	;movzx	eax, ax
  1064                                          ;mov	ebx, 5
  1065                                  	; 22/01/2022
  1066 00000466 31DB                    	xor	ebx, ebx
  1067 00000468 B305                    	mov	bl, 5
  1068 0000046A E830010000              	call	_decimal
  1069                                  		; jsr r5,decimal; 5
  1070 0000046F 56                              push    esi
  1071 00000470 E833FFFFFF              	call	_pstring
  1072                                  		; jsr r5,pstring; space
  1073 00000475 5E                              pop     esi
  1074                                  		; mov r1,-(sp)
  1075 00000476 8B1D[C9080000]                  mov     ebx, [eol] ;r1
  1076 0000047C AD                              lodsd   ; mtime
  1077                                         		; mov (r4)+,r0
  1078                                  		; mov (r4)+,r1
  1079                                  		; sub $16.,sp
  1080                                  		; mov sp,r2
  1081                                          ; EAX = unix time (epoch)
  1082 0000047D E815020000              	call	ctime
  1083                                  		; jsr pc,ctime
  1084                                  		; mov sp,r2
  1085                                  	;mov	ecx, 25
  1086                                  	; 12/01/2022
  1087 00000482 29C9                    	sub	ecx, ecx
  1088 00000484 B119                    	mov	cl, 25
  1089                                  	;;mov	ecx, 15
  1090                                  		; mov $15.,-(sp)
  1091 00000486 BE[7C080000]            	mov	esi, cbuf
  1092                                  F15: ;1:
  1093 0000048B 51                      	push	ecx
  1094 0000048C AC                      	lodsb
  1095                                  		; movb (r2)+,r0
  1096                                  	;mov	ebx, obuf
  1097 0000048D E85F010000              	call	putc
  1098                                  		; jsr r5,putc; obuf
  1099 00000492 59                      	pop	ecx
  1100 00000493 E2F6                    	loop	F15
  1101                                  		; dec (sp)
  1102                                  		; bne 1b
  1103                                  		; add $18.,sp
  1104                                  		; mov (sp)+,r1
  1105                                  	;call	_pstring
  1106                                  		; jsr r5,pstring; space
  1107                                  		; mov (sp)+,r2
  1108 00000495 5E                      	pop	esi ; r3
  1109 00000496 C3                      	retn
  1110                                  		; rts r5
  1111                                  
  1112                                  puid:
  1113                                  	; 22/01/2022 (BugFix)
  1114                                  	; 06/10/2015 (32 bit modifications)
  1115                                  	; print user name
  1116                                  	; AL = user id/number
  1117                                  	;
  1118 00000497 56                      	push	esi ; r4 ; 22/01/2022
  1119                                  G0:
  1120                                  	; 22/01/2022
  1121                                  	;push	eax ; r2
  1122                                  	;	; mov r1,-(sp)
  1123 00000498 BE[3C0D0000]            	mov 	esi, uidbuf
  1124                                  		; mov $uidbuf,r1
  1125                                  G1: ;1:
  1126                                  	; 22/01/2022
  1127 0000049D 50                      	push	eax ; r2
  1128                                  		; mov r1,-(sp)
  1129                                  	;cmp	esi, [euids] ; 22/01/2022
  1130                                  		; cmp r1,euids
  1131                                  	;jnb	short G8
  1132                                  		; bhis 1f
  1133 0000049E 56                      	push	esi ; 0:
  1134                                  		; mov r1,0f
  1135                                  G2: ;2:
  1136 0000049F AC                      	lodsb
  1137 000004A0 20C0                    	and	al, al	
  1138                                  		; tstb (r1)+
  1139 000004A2 7409                    	jz 	short G3
  1140                                  		; beq 3f
  1141 000004A4 3C3A                    	cmp	al, ':'
  1142                                  		; cmpb -1(r1),$':
  1143 000004A6 75F7                    	jne	short G2
  1144                                  		; bne 2b
  1145 000004A8 30C0                    	xor	al, al ; 0
  1146 000004AA 8846FF                  	mov	[esi-1], al  ;0
  1147                                  		; clrb -1(r1)
  1148                                  G3: ;3:
  1149 000004AD 31DB                    	xor	ebx, ebx
  1150                                  		; clr -(sp)
  1151                                  	;mov	ecx, 10
  1152 000004AF B10A                    	mov	cl, 10
  1153                                  G4: ;3:
  1154 000004B1 AC                      	lodsb
  1155                                  		; movb (r1)+,r0
  1156 000004B2 2C30                    	sub	al, '0'
  1157                                  		; sub $'0,r0
  1158 000004B4 3C09                    	cmp	al, 9
  1159                                  		; cmp r0,$9.
  1160 000004B6 770A                    	ja	short G5
  1161                                  		; bhi 3f
  1162                                  		; mov r1,-(sp)
  1163                                  	; 07/10/2015
  1164 000004B8 0FB6C0                  	movzx	eax, al 
  1165 000004BB 93                      	xchg	eax, ebx
  1166                                  		; mov 2(sp),r1
  1167 000004BC F7E1                    	mul	ecx	
  1168                                  		; mpy $10.,r1
  1169 000004BE 01C3                    	add	ebx, eax
  1170                                  		; add r0,r1
  1171                                  		; mov r1,2(sp)
  1172                                  		; mov (sp)+,r1
  1173 000004C0 EBEF                    	jmp	short G4
  1174                                  		; br 3b
  1175                                  G5: ;3:
  1176                                  	;pop	esi ; 0:
  1177                                  	; 22/01/2022
  1178                                  	; (esi = r1)
  1179 000004C2 5A                      	pop	edx ; 0:
  1180 000004C3 58                      	pop	eax ; r2
  1181                                  		; mov (sp)+,r0
  1182 000004C4 39C3                    	cmp	ebx, eax	
  1183                                  		; cmp r0,r2
  1184                                  	;jne	short G1
  1185                                  		; bne 1b
  1186 000004C6 7424                            je      short S24
  1187                                  	; 22/01/2022
  1188                                  	; (esi = r1)
  1189 000004C8 3B35[A4080000]          	cmp	esi, [euids] ; 22/01/2022
  1190 000004CE 72CD                    	jb	short G1
  1191                                  	;jmp	short G8
  1192                                  G8:
  1193 000004D0 50                      	push	eax ; r2/UID
  1194 000004D1 E8D2FEFFFF              	call	_pstring
  1195                                  		;jsr r5,pstring; space
  1196 000004D6 58                      	pop	eax
  1197                                  		; mov r2,r0
  1198                                  	;mov	ebx, 3
  1199                                  	; 22/01/2022
  1200 000004D7 29DB                    	sub	ebx, ebx
  1201 000004D9 B303                    	mov	bl, 3
  1202 000004DB E8C7000000              	call	decimal
  1203                                  		; jsr r5,decimal; 3
  1204 000004E0 BE[B4080000]            	mov	esi, space3
  1205 000004E5 E8C3FEFFFF              	call	pstring
  1206                                  		; jsr r5,pstring; space3
  1207 000004EA 5E                      	pop	esi ; r4 ; 22/01/2022
  1208                                  		; mov (sp)+,r1
  1209 000004EB C3                      	retn
  1210                                  		; rts pc
  1211                                  S24:
  1212                                  	;push	esi ; 0:
  1213                                  	; 22/01/2022
  1214 000004EC 52                      	push	edx ; 0:
  1215 000004ED E8B6FEFFFF              	call	_pstring
  1216                                  		; jsr r5,pstring; space
  1217 000004F2 5E                      	pop	esi ; 0:
  1218 000004F3 56                      	push	esi ; 0:
  1219 000004F4 E8B4FEFFFF              	call	pstring
  1220                                  		; jsr r5,pstring; 0:..
  1221 000004F9 5E                      	pop	esi ; 0:
  1222                                  		; mov 0b,r1
  1223                                  	; 22/01/2022
  1224 000004FA 31C9                    	xor	ecx, ecx
  1225 000004FC B106                    	mov	cl, 6
  1226                                  	;mov	cx, 6
  1227                                  		; mov $6,-(sp)
  1228                                  G6: ;3:
  1229 000004FE AC                      	lodsb
  1230                                  		; tstb (r1)+
  1231 000004FF 20C0                    	and	al, al
  1232 00000501 7406                    	jz	short G7
  1233                                  		; beq 3f
  1234 00000503 FEC9                    	dec	cl
  1235                                  		; dec (sp)
  1236                                  	;jmp	short G6
  1237                                  	;	; br 3b
  1238                                  	; 22/01/2022
  1239                                  	; (max. 5 chars of uid will be usable here)
  1240 00000505 75F7                    	jnz	short G6
  1241 00000507 FEC1                    	inc	cl
  1242                                  G7: ;3:
  1243                                  	;push	cx
  1244                                  	; 22/01/2022
  1245 00000509 51                      	push	ecx
  1246 0000050A E899FEFFFF              	call	_pstring
  1247                                  		; jsr r5,pstring; space
  1248                                  	;pop	cx
  1249 0000050F 59                      	pop	ecx
  1250                                  	; 22/01/2022
  1251 00000510 49                      	dec	ecx
  1252                                  	;dec	cx
  1253                                  		; dec (sp)
  1254                                  	;jg	short G7
  1255                                  	;	; bgt 3b
  1256                                  	; 22/01/2022
  1257 00000511 75F6                    	jnz	short G7
  1258                                  		; tst (sp)+
  1259 00000513 5E                      	pop	esi ; r4 ; 20/01/2022
  1260                                  		; mov (sp)+,r1
  1261 00000514 C3                      	retn
  1262                                  		; rts pc
  1263                                  ;G8: ;1:
  1264                                  		;jsr r5,pstring; space
  1265                                  		; mov r2,r0
  1266                                  		; jsr r5,decimal; 3
  1267                                  		; jsr r5,pstring; space3
  1268                                  		; mov (sp)+,r1
  1269                                  		; rts pc
  1270                                  
  1271                                  ;_mode:
  1272                                  ;	mov	al, '-'
  1273                                  ;mode:
  1274                                  	; AL = mode char
  1275                                  		;mov	(r5)+,r0
  1276                                  	;mov	ebx, obuf
  1277                                  ;	call	putc
  1278                                  		; jsr r5,putc; obuf
  1279                                  ;	retn
  1280                                  		; rts r5
  1281                                  
  1282                                  gstat:
  1283                                  	; 06/10/2015 (32 bit modifications)
  1284 00000515 55                      	push	ebp
  1285                                  		; mov r1,-(sp)
  1286 00000516 81C500020000            	add	ebp, 512
  1287                                  		; add $512.,r1
  1288 0000051C 3B2D[98080000]          	cmp	ebp, [brk]
  1289                                  		; cmp r1,0f
  1290 00000522 720F                    	jb	short D1
  1291                                  		; blo 1f
  1292 00000524 892D[98080000]          	mov	[brk], ebp
  1293                                  		; mov r1,0f
  1294                                  	sys	_break, ebp ; sys _break, brk
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 0000052A 89EB                <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79                              <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 0000052C B811000000          <1>  mov eax, %1
    86 00000531 CD30                <1>  int 30h
  1295                                  		; sys break; 0: end+512.
  1296                                  D1: ;1:
  1297 00000533 5D                      	pop	ebp
  1298                                  		; mov (sp)+,r1
  1299 00000534 31C0                    	xor	eax, eax
  1300                                  	; Detailed (Long) listing
  1301 00000536 663905[D4080000]        	cmp	[longf], ax ;0
  1302                                  		; tst longf
  1303 0000053D 7708                    	ja	short D2
  1304                                  		; bne 2f
  1305                                  	; Sorting by modification time
  1306 0000053F 3905[E0080000]          	cmp	[sortoff], eax ;0
  1307                                  		; tst sortoff
  1308 00000545 761D                    	jna	short D4
  1309                                  		; beq 1f
  1310                                  D2: ;2:
  1311                                          sys     _stat, filnam, statb
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00000547 BB[E4080000]        <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 0000054C B9[04090000]        <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000551 B812000000          <1>  mov eax, %1
    86 00000556 CD30                <1>  int 30h
  1312                                  		; sys stat; filnam; statb
  1313 00000558 731C                    	jnc	short D3
  1314                                  		; bec 2f
  1315                                  		; mov r4,-(sp)
  1316                                  	;mov	ebx, filnam
  1317                                  		; mov $filnam,r4
  1318 0000055A BE[68050000]            	mov	esi, S25
  1319 0000055F E856FEFFFF              	call	questf
  1320                                  		; jsr r5,questf; < unstatable\n\0>; .even
  1321                                  		; mov (sp)+,r4
  1322                                  D4:
  1323 00000564 83C50C                  	add	ebp, 12 ; 20-8 ; 22/01/2022
  1324                                  		; add $12.,r1
  1325 00000567 C3                      	retn
  1326                                  		; rts r5
  1327                                  S25:
  1328 00000568 20756E737461746162-     	db	' unstatable', 0Dh, 0Ah, 0
  1328 00000571 6C650D0A00         
  1329                                  
  1330                                  D3: ;2:
  1331 00000576 57                      	push	edi
  1332 00000577 89EF                    	mov	edi, ebp
  1333 00000579 BE[06090000]            	mov	esi, statb + 2
  1334                                  		; mov $statb+2,r0
  1335 0000057E A5                      	movsd
  1336                                  		; mov (r0)+,(r1)+  /flags
  1337                                  		; mov (r0)+,(r1)+  /nlinks, uid
  1338                                  		; mov r0,-(sp)
  1339 0000057F 0FB706                  	movzx	eax, word [esi]
  1340                                  		; mov (r0),r0
  1341                                  	; eax = file (directory) size
  1342 00000582 E85B000000              	call	calcb
  1343                                  		; jsr r5,calcb
  1344 00000587 0105[DC080000]          	add	[tblocks], eax
  1345                                  		; add r0,tblocks
  1346                                  		; mov (sp)+,r0
  1347 0000058D 66A5                    	movsw
  1348                                  		; mov (r0)+,(r1)+  /size
  1349 0000058F 83C614                  	add	esi, 20
  1350                                  		; add $20.,r0 	   /dska, ctim
  1351 00000592 A5                      	movsd
  1352                                  		; mov (r0)+,(r1)+  /mtim
  1353                                  		; mov (r0)+,(r1)+
  1354 00000593 66A1[04090000]          	mov	ax, [statb]
  1355 00000599 66AB                    	stosw
  1356                                  		; mov statb,(r1)+ /inode
  1357 0000059B 89FD                    	mov	ebp, edi
  1358 0000059D 5F                      	pop	edi
  1359 0000059E C3                      	retn
  1360                                  		; rts r5
  1361                                  ;D4: ;1:
  1362                                  ;	add	ebp, 12
  1363                                  		; add $12.,r1
  1364                                  ;	retn
  1365                                  		; rts	r5
  1366                                  
  1367                                  _decimal:
  1368 0000059F 56                      	push	esi
  1369 000005A0 E802000000              	call	decimal
  1370 000005A5 5E                      	pop	esi
  1371 000005A6 C3                      	retn
  1372                                  	
  1373                                  decimal: 
  1374                                  ; convert number to decimal number chars
  1375                                  	; 5/10/2015 (32 bit modifications)
  1376                                  	; EAX = number to be converted
  1377                                  	; EBX = number of digits (=4)
  1378                                  		; mov r1,-(sp)
  1379                                  		; mov r2,-(sp)
  1380                                  		; mov r3,-(sp)
  1381                                  	;push	edi
  1382 000005A7 31D2                    	xor	edx, edx
  1383                                  	; 22/01/2022
  1384 000005A9 29C9                    	sub	ecx, ecx 
  1385 000005AB B10A                    	mov	cl, 10
  1386 000005AD 89CE                    	mov	esi, ecx ; esi = 10
  1387 000005AF B106                    	mov	cl, 6
  1388                                  	;mov	ecx, 6
  1389                                  		; mov $6,r2
  1390 000005B1 BF[3C0D0000]            	mov	edi, numbuf + 6
  1391                                  		; mov $numbuf+6,r3
  1392                                  	; 12/01/2022
  1393                                  	;mov	esi, 10
  1394                                  S26: ;1:
  1395                                  	;and	eax, eax
  1396                                  	;jz	short S27
  1397                                  		;mov r0,r1
  1398                                  	;xor 	edx, edx
  1399                                  		; clr r0
  1400                                  	;mov	esi, 10		
  1401                                  		; dvd $10.,r0
  1402 000005B6 F7F6                    	div	esi
  1403                                  ;S27:
  1404 000005B8 80C230                  	add	dl, '0'
  1405                                  		; add $'0,r1
  1406 000005BB 4F                      	dec	edi
  1407 000005BC 8817                    	mov	[edi], dl
  1408                                  		; movb r1,-(r3)
  1409 000005BE 30D2                    	xor	dl, dl
  1410 000005C0 E2F4                    	loop	S26
  1411                                  		; sob r2,1b
  1412 000005C2 B020                    	mov	al, 20h ; space
  1413 000005C4 B105                    	mov	cl, 5
  1414                                  S28: ;1:
  1415                                  	;cmp	edi, numbuf + 5
  1416                                  		; cmp r3,$numbuf+5
  1417                                  	;je	short S29
  1418                                  		; beq 1f
  1419 000005C6 803F30                  	cmp	byte [edi], '0'
  1420                                  		; cmpb (r3),$'0
  1421 000005C9 7503                    	jne	short S29
  1422                                  		; bne 1f
  1423                                  	;mov	al, 20h
  1424 000005CB AA                      	stosb
  1425                                  		; movb $' ,(r3)+
  1426                                  	;jmp	short S28
  1427                                  		; br 1b
  1428 000005CC E2F8                    	loop	S28
  1429                                  S29: ;1:
  1430 000005CE BE[3C0D0000]            	mov	esi, numbuf + 6
  1431                                  		; mov $numbuf+6,r1
  1432 000005D3 29DE                    	sub	esi, ebx
  1433                                  		; sub (r5),r1
  1434                                  	;mov	ecx, ebx
  1435 000005D5 88D9                    	mov	cl, bl
  1436                                  		; mov (r5)+,-(sp)
  1437                                  S30: ;1:
  1438 000005D7 51                      	push	ecx
  1439 000005D8 AC                      	lodsb
  1440                                  		; movb (r1)+,r0
  1441                                  	;mov	ebx, obuf	
  1442 000005D9 E813000000              	call	putc
  1443                                  		; jsr r5,putc; obuf
  1444 000005DE 59                      	pop	ecx
  1445 000005DF E2F6                    	loop	S30
  1446                                  		; dec (sp)
  1447                                  		; bne 1b
  1448                                  		; tst (sp)+
  1449                                  		; mov (sp)+,r3
  1450                                  		; mov (sp)+,r2
  1451                                  		; mov (sp)+,r1
  1452                                  	;pop	edi
  1453 000005E1 C3                      	retn
  1454                                  		; rts r5
  1455                                  
  1456                                  calcb:
  1457                                  	; 06/10/2015 (32 bit modifications)
  1458                                  	; calculate number of blocks
  1459                                  	;
  1460                                  	; eax = file (directory) size ; 22/01/2022
  1461 000005E2 05FF010000              	add	eax, 511
  1462 000005E7 C1E809                  	shr	eax, 9 ; (eax+511)/512
  1463                                  		; add $511.,r0
  1464                                  		; clrb r0
  1465                                  		; swab r0
  1466                                  		; asr r0
  1467                                  	; eax = (size+511)/512
  1468                                  	; large file ? (>=4096 bytes)
  1469 000005EA 83F808                  	cmp	eax, 8
  1470                                  		; cmp r0,$8
  1471 000005ED 7201                    	jb	short S31
  1472                                  		; blo 1f
  1473                                  	; add indirect block
  1474 000005EF 40                      	inc	eax	
  1475                                  		; inc r0
  1476                                  S31: ;1:
  1477                                      ;1: ; ?
  1478 000005F0 C3                      	retn
  1479                                  		; rts r5
  1480                                  
  1481                                  	; 22/01/2022
  1482                                  ;_mode:
  1483                                  ;	mov	al, '-'
  1484                                  mode:
  1485                                  	; AL = mode char
  1486                                  		;mov	(r5)+,r0
  1487                                  	;mov	ebx, obuf
  1488                                  ;	call	putc
  1489                                  		; jsr r5,putc; obuf
  1490                                  ;	retn
  1491                                  		; rts r5
  1492                                  
  1493                                  ; 'putc' procedure
  1494                                  ; is derived from 'put.s'
  1495                                  ; file of original UNIX v5
  1496                                  ;
  1497                                  ; write characters on output file
  1498                                  putc:
  1499                                  	; AL = character to be written
  1500                                  	; obuf = output buffer
  1501                                  	;; EBX = buffer address
  1502 000005F1 56                      	push 	esi
  1503                                  		;mov r1,-(sp)
  1504 000005F2 BE[2E0B0000]            	mov 	esi, obuf
  1505                                  	;mov	esi, ebx
  1506                                  		;mov (r5)+,r1
  1507                                  S32: ;1:
  1508 000005F7 66FF4E02                	dec	word [esi+2]
  1509                                  		; dec 2(r1)
  1510 000005FB 7909                    	jns	short S33
  1511                                  		; bge 1f
  1512 000005FD 50                      	push	eax	
  1513                                  		; mov r0,-(sp)
  1514 000005FE E80D000000              	call	fl
  1515                                  		; jsr pc,fl
  1516 00000603 58                      	pop	eax
  1517                                  		; mov (sp)+,r0
  1518 00000604 EBF1                    	jmp	short S32
  1519                                  		; br 1b
  1520                                  S33: ;1:
  1521 00000606 8B5E04                  	mov	ebx, [esi+4]
  1522 00000609 8803                    	mov	[ebx], al
  1523                                  		; movb r0,*4(r1)
  1524 0000060B FF4604                  	inc	dword [esi+4]
  1525                                  		; inc 4(r1)
  1526 0000060E 5E                      	pop	esi
  1527                                  		; mov (sp)+,r1
  1528 0000060F C3                      	retn
  1529                                  		; rts r5
  1530                                  
  1531                                  
  1532                                  ; 'flush' procedure
  1533                                  ; is derived from 'put.s'
  1534                                  ; file of original UNIX v5
  1535                                  
  1536                                  flush:
  1537                                  		; mov r0,-(sp)
  1538                                  		; mov r1,-(sp)
  1539                                  		; mov (r5)+,r1
  1540                                  		; jsr pc,fl
  1541                                  		; mov (sp)+,r1
  1542                                  		; mov (sp)+,r0
  1543                                  		; rts r5
  1544                                  fl:
  1545                                  	;mov	ecx, esi
  1546                                  	;	; mov r1,r0
  1547                                  	;add	ecx, 8
  1548                                  	;	; add $6,r0
  1549                                  	; 22/01/2022
  1550                                  	;lea	ecx, [esi+8]
  1551 00000610 31C9                    	xor	ecx, ecx
  1552 00000612 B108                    	mov	cl, 8
  1553 00000614 01F1                    	add	ecx, esi
  1554                                  	;push	ecx		; Buffer data address
  1555                                  		; mov r0,-(sp)
  1556                                  		; mov r0,0f
  1557 00000616 8B5604                  	mov	edx, [esi+4]	; Buffer offset
  1558                                  		; mov 4(r1),0f+2
  1559 00000619 09D2                    	or	edx, edx		   	
  1560 0000061B 740C                    	jz	short S34
  1561                                  		; beq 1f
  1562 0000061D 29CA                    	sub	edx, ecx	; Byte count
  1563                                  		; sub (sp),0f+2
  1564 0000061F 0FB71E                  	movzx	ebx, word [esi] ; File descriptor (=1)
  1565                                  		; mov (r1),r0
  1566                                  	sys	_write ; sys _write, ebx, ecx, edx
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77                              <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79                              <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000622 B804000000          <1>  mov eax, %1
    86 00000627 CD30                <1>  int 30h
  1567                                  		; sys 0; 9f
  1568                                  ;.data
  1569                                  ;9:
  1570                                  ;		; sys write; 0:..; ..
  1571                                  ;.text
  1572                                  S34: ;1:
  1573                                  	;pop	ecx
  1574 00000629 894E04                  	mov	[esi+4], ecx ; Begin. of buf. data
  1575                                  		; mov (sp)+,4(r1)
  1576 0000062C 66C746020002            	mov	word [esi+2], 512 ; Buffer data size
  1577                                  		; mov $512.,2(r1)
  1578 00000632 C3                      	retn
  1579                                  		; rts	pc
  1580                                  
  1581                                  ; 'getw', 'getc' and 'fopen' procedures
  1582                                  ; are derived from 'get.s'
  1583                                  ; file of original UNIX v5
  1584                                  
  1585                                  ; open a file for use by get(c|w)
  1586                                  ;
  1587                                  fopen:
  1588                                  	; EBX = file name offset
  1589                                  	; EDI = buffer offset
  1590                                  	;
  1591 00000633 31C9                    	xor 	ecx, ecx ; 0 => open for read	
  1592                                  	sys 	_open ; sys _open, ebx, ecx (0)
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77                              <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79                              <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000635 B805000000          <1>  mov eax, %1
    86 0000063A CD30                <1>  int 30h
  1593 0000063C 7203                    	jc	short S35
  1594 0000063E 66AB                    	stosw  ; file descriptor (in buffer offset 0)
  1595 00000640 C3                      	retn
  1596                                  S35:
  1597 00000641 66B8FFFF                	mov	ax, 0FFFFh ; -1
  1598 00000645 66AB                    	stosw
  1599                                  	;stc
  1600 00000647 C3                      	retn
  1601                                  
  1602                                  ; get words from input file
  1603                                  ;
  1604                                  getw:
  1605                                  	;mov 	esi, ebx
  1606 00000648 E80E000000              	call	getc
  1607 0000064D 720B                    	jc	short S36
  1608                                  
  1609                                  	; 22/01/2022
  1610                                  	;push	ax
  1611 0000064F 50                      	push	eax
  1612 00000650 E806000000              	call	getc	
  1613                                  	;;pop	dx
  1614                                  	;pop	edx
  1615                                  	;mov	ah, dl
  1616                                  	;xchg 	ah, al
  1617                                  	; 22/01/2022
  1618 00000655 88442401                	mov	[esp+1], al
  1619 00000659 58                      	pop	eax
  1620                                  S36:
  1621 0000065A C3                      	retn
  1622                                  
  1623                                  ; get characters from input file
  1624                                  ;
  1625                                  getc:
  1626                                  	; ESI = buffer address
  1627 0000065B 668B4602                	mov	ax, [esi+2] ; char count
  1628 0000065F 6621C0                  	and	ax, ax
  1629 00000662 751D                    	jnz	short gch1
  1630                                  gch0:
  1631                                  	;mov	ecx, esi
  1632                                  	;add	ecx, 8  ; read buffer address
  1633                                  	; 22/01/2022
  1634                                  	;lea	ecx, [esi+8]
  1635 00000664 29C9                    	sub	ecx, ecx
  1636 00000666 B108                    	mov	cl, 8
  1637 00000668 01F1                    	add	ecx, esi ; buffer data address
  1638 0000066A 0FB71E                  	movzx	ebx, word [esi]
  1639 0000066D 894E04                  	mov 	[esi+4], ecx ; char offset
  1640                                  	;xor	ax, ax
  1641                                  	;mov	[esi+2], ax ; 0
  1642                                  	;mov 	edx, 512  
  1643                                  	; 12/01/2022
  1644 00000670 31D2                    	xor	edx, edx
  1645 00000672 B602                    	mov	dh, 2 ; edx = 512
  1646                                  	sys	_read  ; sys _read, ebx, ecx, edx
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77                              <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79                              <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000674 B803000000          <1>  mov eax, %1
    86 00000679 CD30                <1>  int 30h
  1647 0000067B 7216                    	jc	short gch2
  1648 0000067D 09C0                    	or	eax, eax
  1649 0000067F 7414                    	jz	short gch3
  1650                                  gch1:
  1651 00000681 6648                    	dec	ax
  1652 00000683 66894602                	mov	[esi+2], ax
  1653 00000687 8B5E04                  	mov	ebx, [esi+4]
  1654 0000068A 31C0                    	xor	eax, eax ; 12/01/2022
  1655 0000068C 8A03                    	mov	al, [ebx]
  1656 0000068E 43                      	inc	ebx
  1657 0000068F 895E04                  	mov	[esi+4], ebx
  1658                                  	;xor	ah, ah
  1659 00000692 C3                      	retn 	
  1660                                  gch2:
  1661                                  	;xor	ax, ax
  1662                                  	; 12/01/2022
  1663 00000693 29C0                    	sub	eax, eax
  1664                                  gch3:
  1665 00000695 F9                      	stc
  1666 00000696 C3                      	retn
  1667                                  
  1668                                  ;/ getw/getc -- get words/characters from input file
  1669                                  ;/ fopen -- open a file for use by get(c|w)
  1670                                  ;/
  1671                                  ;/ calling sequences --
  1672                                  ;/
  1673                                  ;/   mov $filename,r0
  1674                                  ;/   jsr r5,fopen; ioptr
  1675                                  ;/
  1676                                  ;/  on return ioptr buffer is set up or error bit is set if
  1677                                  ;/  file could not be opened.
  1678                                  ;/
  1679                                  ;/   jsr r5,get(c|w)1; ioptr
  1680                                  ;/
  1681                                  ;/  on return char/word is in r0; error bit is
  1682                                  ;/  set on error or end of file.
  1683                                  ;/
  1684                                  ;/  ioptr is the address of a 518-byte buffer
  1685                                  ;/  whose layout is as follows:
  1686                                  ;/
  1687                                  ;/  ioptr: .=.+2    / file descriptor
  1688                                  ;	   .=.+2  /// buffer size (This is noted by Erdogan Tan; 19/11/2013)	
  1689                                  ;/         .=.+2    / charact+2  / pointer to next character (reset if no. chars=0)
  1690                                  ;/         .=.+512. / the buffer
  1691                                  
  1692                                  ;	.globl	getc,getw,fopen
  1693                                  
  1694                                  ;fopen:
  1695                                  ;	mov	r1,-(sp)
  1696                                  ;	mov	(r5)+,r1
  1697                                  ;	mov	r0,0f
  1698                                  ;	sys	0; 9f
  1699                                  ;.data
  1700                                  ;9:
  1701                                  ;	sys	open; 0:..; 0
  1702                                  ;.text
  1703                                  ;	bes	1f
  1704                                  ;	mov	r0,(r1)+
  1705                                  ;	clr	(r1)+
  1706                                  ;	mov	(sp)+,r1
  1707                                  ;	rts	r5
  1708                                  ;1:
  1709                                  ;	mov	$-1,(r1)
  1710                                  ;	mov	(sp)+,r1
  1711                                  ;	sec
  1712                                  ;	rts	r5
  1713                                  ;
  1714                                  ;.data
  1715                                  ;getw:
  1716                                  ;	mov	(r5),9f
  1717                                  ;	mov	(r5)+,8f
  1718                                  ;	jsr	r5,getc; 8:..
  1719                                  ;	bec	1f
  1720                                  ;	rts	r5
  1721                                  ;1:
  1722                                  ;	mov	r0,-(sp)
  1723                                  ;	jsr	r5,getc; 9:..
  1724                                  ;	swab	r0
  1725                                  ;	bis	(sp)+,r0
  1726                                  ;	rts	r5
  1727                                  ;.text
  1728                                  ;
  1729                                  ;getc:
  1730                                  ;	mov	r1,-(sp)
  1731                                  ;	mov	(r5)+,r1
  1732                                  ;	dec	2(r1)
  1733                                  ;	bge	1f
  1734                                  ;	mov	r1,r0
  1735                                  ;	add	$6,r0
  1736                                  ;	mov	r0,0f
  1737                                  ;	mov	r0,4(r1)
  1738                                  ;	mov	(r1),r0
  1739                                  ;	sys	0; 9f
  1740                                  ;.data
  1741                                  ;9:
  1742                                  ;	sys	read; 0:..; 512.
  1743                                  ;.text
  1744                                  ;	bes	2f
  1745                                  ;	tst	r0
  1746                                  ;	bne	3f
  1747                                  ;2:
  1748                                  ;	mov	(sp)+,r1
  1749                                  ;	sec
  1750                                  ;	rts	r5
  1751                                  ;3:
  1752                                  ;	dec	r0
  1753                                  ;	mov	r0,2(r1)
  1754                                  ;1:
  1755                                  ;	clr	r0
  1756                                  ;	bisb	*4(r1),r0
  1757                                  ;	inc	4(r1)
  1758                                  ;	mov	(sp)+,r1
  1759                                  ;	rts	r5
  1760                                  
  1761                                  %include 'ctime386.inc' ; 24/11/2013
  1762                              <1> ; ****************************************************************************
  1763                              <1> ; ctime386.inc (Retro Unix 386 v1 - /bin/ls - list file or directory)
  1764                              <1> ; ----------------------------------------------------------------------------
  1765                              <1> ; RETRO UNIX 386 (Retro Unix == Turkish Rational Unix)
  1766                              <1> ; Operating System Project (v0.2) by ERDOGAN TAN (Beginning: 24/12/2013)
  1767                              <1> ;
  1768                              <1> ; [ Last Modification: 06/10/2015 ]
  1769                              <1> ;
  1770                              <1> ; Derived from 'CTIME.INC' source code file of 'Retro UNIX 8086 v1'
  1771                              <1> ; operating system project, /bin/ls source code by Erdogan Tan
  1772                              <1> ; (28/11/2013)
  1773                              <1> ;
  1774                              <1> ; Derived from 'ctime.c' file of original UNIX v5 (usr/source/s3/ctime.c)
  1775                              <1> ;
  1776                              <1> ; ls386.s (ls0.s) 23/09/2015 - 06/10/2015
  1777                              <1> ; include ctime386.inc
  1778                              <1> ;
  1779                              <1> ; ****************************************************************************
  1780                              <1> 
  1781                              <1> ; Assembler: NASM 2.11
  1782                              <1> 
  1783                              <1> ;timezone equ 5*60*60
  1784                              <1> 
  1785                              <1> 
  1786                              <1> ctime:  ; ctime(at)
  1787                              <1> 	; int *at;
  1788                              <1> 	; {
  1789                              <1> 	; 	return(asctime(localtime(at)));
  1790                              <1> 	; }
  1791                              <1> 
  1792                              <1> 	; EAX = unix epoch time (in seconds)
  1793                              <1> 
  1794                              <1> 	;call localtime
  1795                              <1> 	;call asctime
  1796                              <1> 
  1797                              <1> 	;retn
  1798                              <1>   
  1799                              <1> localtime:
  1800                              <1> 	; localtime(tim)
  1801                              <1> 	; int tim[];
  1802                              <1> 	; 	{
  1803                              <1> 	;		register int *t, *ct, dayno;
  1804                              <1> 	;	int daylbegin, daylend;
  1805                              <1> 	;	int copyt[2];
  1806                              <1> 	;	t = copyt;
  1807                              <1> 	;	t[0] = tim[0];
  1808                              <1> 	;	t[1] = tim[1];
  1809                              <1> 	;	dpadd(t, -timezone);
  1810                              <1> 	;	ct = gmtime(t);
  1811                              <1> 	;	dayno = ct[YDAY];
  1812                              <1> 	;	if (nixonflg && (ct[YEAR]>74 || ct[YEAR]==74 && (dayno > 5 ||
  1813                              <1> 	;	    dayno==5 && ct[HOUR]>=2))) {
  1814                              <1> 	;		daylight =| 1;
  1815                              <1> 	;		daylbegin = -1;
  1816                              <1> 	;		daylend = 367;
  1817                              <1> 	;	} else {
  1818                              <1> 	;		daylbegin = sunday(ct, 119);	/* last Sun in Apr */
  1819                              <1> 	;		daylend = sunday(ct, 303);	/* last Sun in Oct */
  1820                              <1> 	;	}
  1821                              <1> 	;	if (daylight &&
  1822                              <1> 	;	    (dayno>daylbegin || (dayno==daylbegin && ct[HOUR]>=2)) &&
  1823                              <1> 	;	    (dayno<daylend || (dayno==daylend && ct[HOUR]<1))) {
  1824                              <1> 	;		dpadd(t, 1*60*60);
  1825                              <1> 	;		ct = gmtime(t);
  1826                              <1> 	;		ct[ISDAY]++;
  1827                              <1> 	;	}
  1828                              <1> 	;	return(ct);
  1829                              <1> 	;	}
  1830                              <1> 
  1831                              <1> 	;sub	eax, timezone	
  1832                              <1> 
  1833                              <1> 	;push	eax
  1834                              <1> 
  1835 00000697 E885000000          <1> 	call 	gmtime
  1836                              <1> ; if (nixonflg && (ct[YEAR]>74 || ct[YEAR]==74 && (dayno > 5 ||
  1837                              <1> ;     dayno==5 && ct[HOUR]>=2))) {
  1838                              <1> 	;cmp	byte [nixonflg], 0
  1839                              <1> 	;jna	short lt1
  1840                              <1> 	;cmp	word [year], 1974
  1841                              <1> 	;jb	short lt1
  1842                              <1> 	;ja	short lt0
  1843                              <1> 	;cmp	word [yday], 5
  1844                              <1> 	;jb	short lt1
  1845                              <1> 	;ja	short lt0 
  1846                              <1> 	;cmp	word [hour], 2
  1847                              <1> 	;jb	short lt1
  1848                              <1> ; nixonflag > 0
  1849                              <1> ;lt0:
  1850                              <1> 	;mov	word [daylight], 1
  1851                              <1> 	;mov	word [daylbegin], -1
  1852                              <1> 	;mov	word [daylend], 367
  1853                              <1> ;	;jmp	short lt2
  1854                              <1> 
  1855                              <1> ; } else {
  1856                              <1> ;lt1:
  1857                              <1> ;	mov	cx, 119
  1858                              <1> ;	call	sunday ; sunday(ct, 119); /* last Sun in Apr */
  1859                              <1> ;	mov	[daylbegin], cx
  1860                              <1> ;	mov	cx, 303
  1861                              <1> ;	call	sunday ; sunday(ct, 303); /* last Sun in Oct */	
  1862                              <1> ;	mov	[daylend], cx
  1863                              <1> ;lt2:
  1864                              <1> ; if (daylight &&
  1865                              <1> ;    (dayno>daylbegin || (dayno==daylbegin && ct[HOUR]>=2)) &&
  1866                              <1> ;    (dayno<daylend || (dayno==daylend && ct[HOUR]<1))) {
  1867                              <1> 
  1868                              <1> ;	pop	eax
  1869                              <1> 
  1870                              <1> 	;cmp	byte [daylight], 0
  1871                              <1> 	;jna	short lt5
  1872                              <1> 	
  1873                              <1> 	;mov	cx, [yday]
  1874                              <1> 
  1875                              <1> 	;cmp	cx, [daylbegin]
  1876                              <1> 	;jb	short lt5
  1877                              <1> 	;ja	short lt3
  1878                              <1> 	;cmp	word [hour], 2
  1879                              <1> 	;jb	short lt5
  1880                              <1> 	;jmp	short lt4
  1881                              <1> ;lt3:
  1882                              <1> 	;cmp	cx, [daylend]
  1883                              <1> 	;jb	short lt4
  1884                              <1> 	;ja	short lt5
  1885                              <1> 	;cmp	word [hour], 1
  1886                              <1> 	;jnb	short lt5
  1887                              <1> ;lt4:
  1888                              <1> 	;add	eax, 1*60*60
  1889                              <1> 	;call	gmtime
  1890                              <1> 	;inc	word [isday]
  1891                              <1> ;lt5:
  1892                              <1> ;	}
  1893                              <1> ;	return(ct);
  1894                              <1> ;	}
  1895                              <1> 
  1896                              <1> 	;retn
  1897                              <1> 
  1898                              <1> 
  1899                              <1> asctime:
  1900                              <1> 	; asctime(t)
  1901                              <1> 	;int *t;
  1902                              <1> 	;{
  1903                              <1> 	;	register char *cp, *ncp;
  1904                              <1> 	;	register int *tp;
  1905                              <1> 	;
  1906                              <1> 	;	cp = cbuf;
  1907                              <1> 	;	for (ncp = "Day Mon 00 00:00:00 1900\n"; *cp++ = *ncp++;);
  1908                              <1> 	;	ncp = &"SunMonTueWedThuFriSat"[3*t[6]];
  1909                              <1> 	;	cp = cbuf;
  1910                              <1> 	;	*cp++ = *ncp++;
  1911                              <1> 	;	*cp++ = *ncp++;
  1912                              <1> 	;	*cp++ = *ncp++;
  1913                              <1> 	;	cp++;
  1914                              <1> 	;	tp = &t[4];
  1915                              <1> 	;	ncp = &"JanFebMarAprMayJunJulAugSepOctNovDec"[(*tp)*3];
  1916                              <1> 	;	*cp++ = *ncp++;
  1917                              <1> 	;	*cp++ = *ncp++;
  1918                              <1> 	;	*cp++ = *ncp++;
  1919                              <1> 	;	cp = numb(cp, *--tp);
  1920                              <1> 	;	cp = numb(cp, *--tp+100);
  1921                              <1> 	;	cp = numb(cp, *--tp+100);
  1922                              <1> 	;	cp = numb(cp, *--tp+100);
  1923                              <1> 	;	cp =+ 2;
  1924                              <1> 	;	cp = numb(cp, t[YEAR]);
  1925                              <1> 	;	return(cbuf);
  1926                              <1> 	;}
  1927                              <1> 	
  1928                              <1> 	;;mov	edi, cbuf
  1929                              <1> 	;;mov	esi, ncp0
  1930                              <1> 	;;mov	ecx, 13
  1931                              <1> 	;;movsw	
  1932                              <1> 	;
  1933 0000069C BF[7C080000]        <1> 	mov	edi, cbuf	
  1934                              <1> 	;movzx	esi, word [wday]
  1935                              <1> 	;shl	si, 2
  1936                              <1> 	;add	esi, ncp1
  1937                              <1> 	;movsd
  1938 000006A1 0FB735[12080000]    <1> 	movzx	esi, word [month]
  1939 000006A8 66C1E602            <1> 	shl	si, 2
  1940 000006AC 81C6[48080000]      <1> 	add	esi, ncp2 - 4
  1941 000006B2 A5                  <1> 	movsd
  1942                              <1> 	;movzx eax, word [day]
  1943 000006B3 66A1[10080000]      <1> 	mov	ax, [day]
  1944                              <1> 	;mov	cx, 10
  1945 000006B9 B10A                <1> 	mov	cl, 10
  1946 000006BB E831010000          <1> 	call	numb
  1947 000006C0 B020                <1>  	mov	al, 20h
  1948 000006C2 AA                  <1> 	stosb
  1949                              <1> 	;
  1950 000006C3 66A1[14080000]      <1> 	mov	ax, [year]
  1951 000006C9 B564                <1> 	mov	ch, 100
  1952 000006CB F6F5                <1> 	div	ch
  1953 000006CD 6650                <1> 	push	ax ;
  1954 000006CF 6698                <1> 	cbw ; century (19, 20)
  1955 000006D1 E81B010000          <1> 	call	numb
  1956 000006D6 6658                <1> 	pop	ax
  1957 000006D8 88E0                <1> 	mov	al, ah
  1958 000006DA 6698                <1> 	cbw ;	year (0 to 99)
  1959 000006DC E810010000          <1> 	call	numb
  1960 000006E1 B020                <1> 	mov 	al, 20h
  1961 000006E3 AA                  <1> 	stosb
  1962                              <1> 	;
  1963 000006E4 0FB735[16080000]    <1>         movzx   esi, word [wday]
  1964 000006EB 66C1E602            <1> 	shl	si, 2
  1965 000006EF 81C6[30080000]      <1> 	add	esi, ncp1
  1966 000006F5 A5                  <1> 	movsd
  1967                              <1> 	;
  1968 000006F6 66A1[0E080000]      <1> 	mov	ax, [hour]
  1969 000006FC E8F0000000          <1> 	call	numb
  1970 00000701 B03A                <1>  	mov	al, ':'
  1971 00000703 AA                  <1> 	stosb
  1972 00000704 66A1[0C080000]      <1> 	mov	ax, [minute]
  1973 0000070A E8E2000000          <1> 	call	numb
  1974 0000070F B03A                <1>  	mov	al, ':'
  1975 00000711 AA                  <1> 	stosb
  1976 00000712 66A1[0A080000]      <1> 	mov	ax, [second]
  1977 00000718 E8D4000000          <1> 	call	numb
  1978 0000071D B020                <1>  	mov	al, 20h
  1979 0000071F AA                  <1> 	stosb
  1980                              <1> 	;mov	ax, [year]
  1981                              <1> 	;mov	ch, 100
  1982                              <1> 	;div	ch
  1983                              <1> 	;push	ax ;
  1984                              <1> 	;cbw ; century (19, 20)
  1985                              <1> 	;call	numb
  1986                              <1> 	;pop	ax
  1987                              <1> 	;mov	al, ah
  1988                              <1> 	;cbw ;	year (0 to 99)
  1989                              <1> 	;call	numb
  1990                              <1> 	;mov	al, 20h
  1991                              <1> 	;stosb
  1992                              <1> 	;xor	al, al
  1993                              <1> 	;stosb
  1994                              <1> 
  1995 00000720 C3                  <1> 	retn
  1996                              <1> 
  1997                              <1> gmtime:
  1998                              <1> 	; 24/11/2013 (yday, wday)
  1999                              <1> 	; Retro UNIX 8086 v1 - UNIX.ASM (20/06/2013)
  2000                              <1> 	; Retro UNIX 8086 v1 feature/procedure only!
  2001                              <1> 	; 'convert_from_epoch' procedure prototype: 
  2002                              <1> 	; 	            UNIXCOPY.ASM, 10/03/2013
  2003                              <1> 	; 30/11/2012
  2004                              <1> 	; Derived from DALLAS Semiconductor
  2005                              <1> 	; Application Note 31 (DS1602/DS1603)
  2006                              <1> 	; 6 May 1998
  2007                              <1> 	;
  2008                              <1> 	; INPUT:
  2009                              <1> 	; DX:AX = Unix (Epoch) Time
  2010                              <1> 	;
  2011                              <1> 	; ((Modified registers: AX, DX, CX, BX))  
  2012                              <1> 	;
  2013 00000721 31D2                <1> 	xor edx, edx
  2014 00000723 B93C000000          <1> 	mov ecx, 60
  2015 00000728 F7F1                <1> 	div ecx
  2016                              <1> 	;mov [imin], eax     	  ; whole minutes
  2017                              <1> 				  ; since 1/1/1970
  2018 0000072A 668915[0A080000]    <1> 	mov [second], dx  	  ; leftover seconds
  2019                              <1> 	; mov ecx, 60
  2020 00000731 29D2                <1> 	sub edx, edx
  2021 00000733 F7F1                <1> 	div ecx
  2022                              <1> 	;mov [ihrs], eax   	  ; whole hours
  2023                              <1> 				  ; since 1/1/1970
  2024 00000735 668915[0C080000]    <1> 	mov [minute], dx  	  ; leftover minutes
  2025                              <1> 	;mov ecx, 24
  2026 0000073C 31D2                <1> 	xor edx, edx
  2027 0000073E B118                <1> 	mov cl, 24
  2028 00000740 F7F1                <1> 	div ecx
  2029                              <1> 	;mov [iday], ax  	  ; whole days
  2030                              <1> 				  ; since 1/1/1970
  2031 00000742 66A3[16080000]      <1> 	mov [wday], ax 		  ; 24/11/2013	
  2032 00000748 668915[0E080000]    <1> 	mov [hour], dx   	  ; leftover hours
  2033 0000074F 05DB020000          <1> 	add eax, 365+366	  ; whole day since
  2034                              <1> 				  ; 1/1/1968 	
  2035                              <1> 	;mov [iday], ax
  2036 00000754 50                  <1> 	push eax
  2037 00000755 66B9B505            <1> 	mov cx, (4*365)+1	  ; 4 years = 1461 days
  2038 00000759 29D2                <1> 	sub edx, edx
  2039 0000075B F7F1                <1> 	div ecx
  2040 0000075D 59                  <1> 	pop ecx
  2041                              <1> 	;mov [lday], ax  	  ; count of quadyrs (4 years)
  2042 0000075E 52                  <1> 	push edx
  2043                              <1> 	;mov [qday], dx           ; days since quadyr began
  2044 0000075F 6683FA3C            <1> 	cmp dx, 31 + 29           ; if past feb 29 then
  2045 00000763 F5                  <1> 	cmc			  ; add this quadyr's leap day
  2046 00000764 83D000              <1> 	adc eax, 0		  ; to # of qadyrs (leap days)
  2047                              <1> 	;mov [lday], ax  	  ; since 1968			  
  2048                              <1> 	;mov cx, [iday]
  2049 00000767 91                  <1> 	xchg ecx, eax		  ; CX = lday, AX = iday		  
  2050 00000768 29C8                <1> 	sub eax, ecx		  ; iday - lday
  2051                              <1> 	;mov ecx, 365
  2052 0000076A 66B96D01            <1> 	mov cx, 365
  2053 0000076E 31D2                <1> 	xor edx, edx		  ; DX  = 0
  2054                              <1> 	; EAX = iday-lday
  2055 00000770 F7F1                <1> 	div ecx
  2056                              <1> 	;mov [iyrs], ax		  ; whole years since 1968
  2057                              <1> 	; jday = iday - (iyrs*365) - lday
  2058                              <1> 	;mov [jday], dx  	  ; days since 1/1 of current year
  2059                              <1> 	;add eax, 1968		  ; compute year
  2060 00000772 05B0070000          <1> 	add eax, 1968
  2061 00000777 66A3[14080000]      <1> 	mov [year], ax
  2062 0000077D 89C3                <1> 	mov ebx, eax		
  2063                              <1> 	;mov ax, [qday]
  2064 0000077F 58                  <1> 	pop eax
  2065 00000780 663D6D01            <1> 	cmp ax, 365		  ; if qday <= 365 and qday >= 60	
  2066 00000784 7709                <1> 	ja short L1		  ; jday = jday +1
  2067 00000786 6683F83C            <1> 	cmp ax, 60	          ; if past 2/29 and leap year then
  2068 0000078A F5                  <1>         cmc			  ; add a leap day to the # of whole
  2069 0000078B 6683D200            <1> 	adc dx, 0		  ; days since 1/1 of current year
  2070                              <1> L1:			
  2071                              <1> 	;mov [jday], dx
  2072                              <1> 	;mov [yday], dx 	  ; 24/11/2013	
  2073 0000078F 66B90C00            <1> 	mov cx, 12		  ; estimate month
  2074 00000793 6687CA              <1> 	xchg cx, dx		  ; CX = jday, DX = month 	
  2075 00000796 66B86E01            <1> 	mov ax, 366		  ; mday, max. days since 1/1 is 365
  2076 0000079A 6683E303            <1> 	and bx, 11b		  ; year mod 4	(and bx, 3) 
  2077                              <1> L2:	; Month calculation	  ; 0 to 11  (11 to 0)	
  2078 0000079E 6639C1              <1> 	cmp cx, ax		  ; mday = # of days passed from 1/1
  2079 000007A1 731D                <1> 	jnb short L3
  2080 000007A3 664A                <1> 	dec dx			  ; month = month - 1
  2081 000007A5 66D1E2              <1> 	shl dx, 1 
  2082 000007A8 668B82[18080000]    <1> 	mov ax, [edx+DMonth] 	  ; # elapsed days at 1st of month
  2083 000007AF 66D1EA              <1> 	shr dx, 1		  ; dx = month - 1 (0 to 11)
  2084 000007B2 6683FA01            <1> 	cmp dx, 1		  ; if month > 2 and year mod 4  = 0	
  2085 000007B6 76E6                <1> 	jna short L2		  ; then mday = mday + 1
  2086 000007B8 08DB                <1> 	or bl, bl		  ; if past 2/29 and leap year then
  2087 000007BA 75E2                <1> 	jnz short L2		  ; add leap day (to mday)
  2088 000007BC 6640                <1> 	inc ax			  ; mday = mday + 1
  2089 000007BE EBDE                <1> 	jmp short L2
  2090                              <1> L3:
  2091 000007C0 6642                <1> 	inc dx 			  ; -> dx = month, 1 to 12
  2092 000007C2 668915[12080000]    <1> 	mov [month], dx
  2093 000007C9 6629C1              <1> 	sub cx, ax		  ; day = jday - mday + 1	
  2094 000007CC 6641                <1> 	inc cx 			  
  2095 000007CE 66890D[10080000]    <1> 	mov [day], cx
  2096                              <1> 	
  2097                              <1> 	; eax, ebx, ecx, edx are changed at return
  2098                              <1> 	; output ->
  2099                              <1> 	; [year], [month], [day], [hour], [minute], [second]
  2100                              <1> 	; [yday] -> 24/11/2013
  2101                              <1> 	; [wday] -> 24/11/2013
  2102                              <1> 	;
  2103                              <1> 	; 24/11/2013
  2104 000007D5 66A1[16080000]      <1> 	mov	ax, [wday] ; [iday]
  2105 000007DB 6631D2              <1> 	xor	dx, dx
  2106 000007DE 6683C004            <1> 	add	ax, 4
  2107                              <1> 	; NOTE: January 1, 1970 was THURSDAY
  2108                              <1> 	; ch = 0
  2109 000007E2 B107                <1> 	mov	cl, 7
  2110 000007E4 66F7F1              <1> 	div	cx
  2111 000007E7 668915[16080000]    <1> 	mov	[wday], dx ; week of the day,  0 to 6 
  2112                              <1> 	; 0 = sunday ... 6 = saturday
  2113                              <1> 	;mov	word [isday], 0
  2114                              <1> 
  2115 000007EE C3                  <1> 	retn
  2116                              <1> 
  2117                              <1> 
  2118                              <1> ;sunday:
  2119                              <1> 	; sunday(at, ad)
  2120                              <1> 	; 	int *at;
  2121                              <1> 	;	 {
  2122                              <1> 	; 	register int *t, d;
  2123                              <1> 	; 	t = at;
  2124                              <1> 	; 	d = ad;
  2125                              <1> 	; 	d = ad + dysize(t[YEAR]) - 365;
  2126                              <1> 	; 	return(d - (d - t[YDAY] + t[WDAY] + 700) % 7);
  2127                              <1> 	; 	}
  2128                              <1> 
  2129                              <1> 	;mov	dx, [year]
  2130                              <1> 	;call	dysize
  2131                              <1> 	;sub	ax, 365
  2132                              <1> 	; add 	cx, ax
  2133                              <1> ;	test	word [year], 11b
  2134                              <1> ;	jnz	short sunday1
  2135                              <1> 	; CX = 119 (77h) or CX = 303 (12Fh)
  2136                              <1> 	;inc	cx
  2137                              <1> ;	inc	cl
  2138                              <1> ;sunday1:
  2139                              <1> ;	mov	ax, cx
  2140                              <1> ;	add	ax, [wday]
  2141                              <1> 	;adc	ax, 700
  2142                              <1> ;	add	ax, 700
  2143                              <1> ;	sub	ax, [yday]
  2144                              <1> 	;xor	dx, dx
  2145                              <1> ;	mov	bx, 7
  2146                              <1> 	;div	bx
  2147                              <1> ;	div	bl
  2148                              <1> ;	sub	cx, bx
  2149                              <1> ;	retn
  2150                              <1> 
  2151                              <1> ;dysize:
  2152                              <1> ; dysize(y)
  2153                              <1> ;	{
  2154                              <1> ;	if((y%4) == 0)
  2155                              <1> ;		return(366);
  2156                              <1> ;	return(365);
  2157                              <1> ;	}
  2158                              <1> 
  2159                              <1> ;	mov 	ax, 365	
  2160                              <1> ;	test 	dx, 11b
  2161                              <1> ;	jnz 	short dysize1
  2162                              <1> ;	;inc 	ax
  2163 000007EF FEC0                <1> 	inc 	al			
  2164                              <1> ;dysize1:	
  2165                              <1> ;	retn 
  2166                              <1> 		
  2167                              <1> 
  2168                              <1> numb:   ; AX = 0 to 99
  2169                              <1> 	;
  2170                              <1> 	; numb(acp, n)
  2171                              <1> 	; {
  2172                              <1> 	;	register char *cp;
  2173                              <1> 	;
  2174                              <1> 	;	cp = acp;
  2175                              <1> 	;	cp++;
  2176                              <1> 	;	if (n>=10)
  2177                              <1> 	;	   *cp++ = (n/10)%10 + '0';
  2178                              <1> 	;	else
  2179                              <1> 	;	   *cp++ = ' ';
  2180                              <1> 	;	*cp++ = n%10 + '0';
  2181                              <1> 	;	return(cp);
  2182                              <1> 	; }
  2183                              <1> 	;
  2184                              <1> 	;mov	cl, 10
  2185 000007F1 6683F80A            <1> 	cmp 	ax, 10
  2186 000007F5 7306                <1> 	jnb	short nb1
  2187 000007F7 88C4                <1> 	mov	ah, al
  2188 000007F9 30C0                <1> 	xor	al, al ; 0
  2189 000007FB EB04                <1> 	jmp	short nb2
  2190                              <1> nb1:	
  2191 000007FD F6F1                <1> 	div	cl
  2192 000007FF 88E2                <1> 	mov	dl, ah
  2193                              <1> 	
  2194                              <1> nb2:	
  2195 00000801 0430                <1> 	add	al, '0'
  2196 00000803 AA                  <1> 	stosb	; digit 1
  2197 00000804 88E0                <1> 	mov	al, ah
  2198 00000806 0430                <1> 	add	al, '0'
  2199 00000808 AA                  <1> 	stosb	; digit 2
  2200 00000809 C3                  <1> 	retn
  2201                              <1> 
  2202                              <1> 
  2203                              <1> ;;; DATA
  2204                              <1> 
  2205                              <1> ;daylight: db 1 ; int daylight 1; /* Allow daylight conversion */
  2206                              <1> ;nixonflg: db 0 ; int nixonflg 0; /* Daylight time all year around */
  2207                              <1> ;daylbegin: dw 0
  2208                              <1> ;daylend: dw 0
  2209                              <1> 
  2210                              <1> 
  2211                              <1> ct:
  2212                              <1> ; 24/11/2013 (re-order)
  2213                              <1> ;
  2214                              <1> ; Retro UNIX 8086 v1 - UNIX.ASM
  2215                              <1> ; 09/04/2013 epoch variables
  2216                              <1> ; Retro UNIX 8086 v1 Prototype: UNIXCOPY.ASM, 10/03/2013
  2217                              <1> ;
  2218                              <1> 
  2219 0000080A 0000                <1> second: dw 0
  2220 0000080C 0000                <1> minute: dw 0
  2221 0000080E 0000                <1> hour: dw 0
  2222 00000810 0100                <1> day: dw 1
  2223 00000812 0100                <1> month: dw 1
  2224 00000814 B207                <1> year: dw 1970
  2225 00000816 0000                <1> wday: dw 0 ; 24/11/2013
  2226                              <1> ;yday: dw 0 ; 24/11/2013
  2227                              <1> ;isday: dw 0 ; 24/11/2013
  2228                              <1> 
  2229                              <1> DMonth:
  2230 00000818 0000                <1> dw 0
  2231 0000081A 1F00                <1> dw 31
  2232 0000081C 3B00                <1> dw 59
  2233 0000081E 5A00                <1> dw 90
  2234 00000820 7800                <1> dw 120
  2235 00000822 9700                <1> dw 151
  2236 00000824 B500                <1> dw 181
  2237 00000826 D400                <1> dw 212
  2238 00000828 F300                <1> dw 243
  2239 0000082A 1101                <1> dw 273
  2240 0000082C 3001                <1> dw 304
  2241 0000082E 4E01                <1> dw 334
  2242                              <1> 
  2243                              <1> ;ncp0: db "Day Mon 00 00:00:00 1970", 0, 0
  2244 00000830 53756E204D6F6E2054- <1> ncp1: db "Sun Mon Tue Wed Thu Fri Sat "
  2244 00000839 756520576564205468- <1>
  2244 00000842 752046726920536174- <1>
  2244 0000084B 20                  <1>
  2245 0000084C 4A616E20466562204D- <1> ncp2: db "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec "
  2245 00000855 617220417072204D61- <1>
  2245 0000085E 79204A756E204A756C- <1>
  2245 00000867 204175672053657020- <1>
  2245 00000870 4F6374204E6F762044- <1>
  2245 00000879 656320              <1>
  2246                              <1> 
  2247                              <1> cbuf: 	; char cbuf[26]
  2248 0000087C 00<rep 1Ah>         <1> 	times 26 db 0
  2249                              <1> 
  2250                              <1> 
  2251                              <1> ;; ctime.c (Unix v5)
  2252                              <1> ;
  2253                              <1> ;#
  2254                              <1> ;/*
  2255                              <1> ; * This routine converts time as follows.
  2256                              <1> ; * The epoch is 0000 Jan 1 1970 GMT.
  2257                              <1> ; * The argument time is in seconds since then.
  2258                              <1> ; * The localtime(t) entry returns a pointer to an array
  2259                              <1> ; * containing
  2260                              <1> ; *  seconds (0-59)
  2261                              <1> ; *  minutes (0-59)
  2262                              <1> ; *  hours (0-23)
  2263                              <1> ; *  day of month (1-31)
  2264                              <1> ; *  month (0-11)
  2265                              <1> ; *  year-1970
  2266                              <1> ; *  weekday (0-6, Sun is 0)
  2267                              <1> ; *  day of the year
  2268                              <1> ; *  daylight savings flag
  2269                              <1> ; *
  2270                              <1> ; * The routine corrects for daylight saving
  2271                              <1> ; * time and will work in any time zone provided
  2272                              <1> ; * "timezone" is adjusted to the difference between
  2273                              <1> ; * Greenwich and local standard time (measured in seconds).
  2274                              <1> ; * In places like Michigan "daylight" must
  2275                              <1> ; * be initialized to 0 to prevent the conversion
  2276                              <1> ; * to daylight time.
  2277                              <1> ; *
  2278                              <1> ; * "nixonflg,", if set to 1, will
  2279                              <1> ; * cause daylight savings time all year around
  2280                              <1> ; * independently of "daylight".
  2281                              <1> ; *
  2282                              <1> ; * The routine does not work
  2283                              <1> ; * in Saudi Arabia which runs on Solar time.
  2284                              <1> ; *
  2285                              <1> ; * asctime(tvec))
  2286                              <1> ; * where tvec is produced by localtime
  2287                              <1> ; * returns a ptr to a character string
  2288                              <1> ; * that has the ascii time in the form
  2289                              <1> ; *	Thu Jan 01 00:00:00 1970n0\; *	01234567890123456789012345
  2291                              <1> ; *	0	  1	    2
  2292                              <1> ; *
  2293                              <1> ; * ctime(t) just calls localtime, then asctime.
  2294                              <1> ; */
  2295                              <1> ;char	cbuf[26];
  2296                              <1> ;int	dmsize[12]
  2297                              <1> ;{
  2298                              <1> ;	31,
  2299                              <1> ;	28,
  2300                              <1> ;	31,
  2301                              <1> ;	30,
  2302                              <1> ;	31,
  2303                              <1> ;	30,
  2304                              <1> ;	31,
  2305                              <1> ;	31,
  2306                              <1> ;	30,
  2307                              <1> ;	31,
  2308                              <1> ;	30,
  2309                              <1> ;	31
  2310                              <1> ;};
  2311                              <1> ;
  2312                              <1> ;int timezone	5*60*60;
  2313                              <1> ;int tzname[]
  2314                              <1> ;{
  2315                              <1> ;	"EST",
  2316                              <1> ;	"EDT",
  2317                              <1> ;};
  2318                              <1> ;int	daylight 1;	/* Allow daylight conversion */
  2319                              <1> ;int	nixonflg 0;	/* Daylight time all year around */
  2320                              <1> ;
  2321                              <1> ;#define SEC	0
  2322                              <1> ;#define MIN	1
  2323                              <1> ;#define HOUR	2
  2324                              <1> ;#define MDAY	3 
  2325                              <1> ;#define MON	4
  2326                              <1> ;#define YEAR	5
  2327                              <1> ;#define WDAY	6
  2328                              <1> ;#define YDAY	7
  2329                              <1> ;#define ISDAY	8
  2330                              <1> ;
  2331                              <1> ;ctime(at)
  2332                              <1> ;int *at;
  2333                              <1> ;{
  2334                              <1> ;	return(asctime(localtime(at)));
  2335                              <1> ;}
  2336                              <1> ;
  2337                              <1> ;localtime(tim)
  2338                              <1> ;int tim[];
  2339                              <1> ;{
  2340                              <1> ;	register int *t, *ct, dayno;
  2341                              <1> ;	int daylbegin, daylend;
  2342                              <1> ;	int copyt[2];
  2343                              <1> ;
  2344                              <1> ;	t = copyt;
  2345                              <1> ;	t[0] = tim[0];
  2346                              <1> ;	t[1] = tim[1];
  2347                              <1> ;	dpadd(t, -timezone);
  2348                              <1> ;	ct = gmtime(t);
  2349                              <1> ;	dayno = ct[YDAY];
  2350                              <1> ;	if (nixonflg && (ct[YEAR]>74 || ct[YEAR]==74 && (dayno > 5 ||
  2351                              <1> ;	    dayno==5 && ct[HOUR]>=2))) {
  2352                              <1> ;		daylight =| 1;
  2353                              <1> ;		daylbegin = -1;
  2354                              <1> ;		daylend = 367;
  2355                              <1> ;	} else {
  2356                              <1> ;		daylbegin = sunday(ct, 119);	/* last Sun in Apr */
  2357                              <1> ;		daylend = sunday(ct, 303);	/* last Sun in Oct */
  2358                              <1> ;	}
  2359                              <1> ;	if (daylight &&
  2360                              <1> ;	    (dayno>daylbegin || (dayno==daylbegin && ct[HOUR]>=2)) &&
  2361                              <1> ;	    (dayno<daylend || (dayno==daylend && ct[HOUR]<1))) {
  2362                              <1> ;		dpadd(t, 1*60*60);
  2363                              <1> ;		ct = gmtime(t);
  2364                              <1> ;		ct[ISDAY]++;
  2365                              <1> ;	}
  2366                              <1> ;	return(ct);
  2367                              <1> ;}
  2368                              <1> ;
  2369                              <1> ;sunday(at, ad)
  2370                              <1> ;int *at;
  2371                              <1> ;{
  2372                              <1> ;	register int *t, d;
  2373                              <1> ;
  2374                              <1> ;	t = at;
  2375                              <1> ;	d = ad;
  2376                              <1> ;	d = ad + dysize(t[YEAR]) - 365;
  2377                              <1> ;	return(d - (d - t[YDAY] + t[WDAY] + 700) % 7);
  2378                              <1> ;}
  2379                              <1> ;
  2380                              <1> ;gmtime(tim)
  2381                              <1> ;int tim[];
  2382                              <1> ;{
  2383                              <1> ;	register int d0, d1;
  2384                              <1> ;	register *tp;
  2385                              <1> ;	static xtime[9];
  2386                              <1> ;	extern int ldivr;
  2387                              <1> ;
  2388                              <1> ;	/*
  2389                              <1> ;	 * break initial number into
  2390                              <1> ;	 * multiples of 8 hours.
  2391                              <1> ;	 * (28800 = 60*60*8)
  2392                              <1> ;	 */
  2393                              <1> ;
  2394                              <1> ;	d0 = ldiv(tim[0], tim[1], 28800);
  2395                              <1> ;	d1 = ldivr;
  2396                              <1> ;	tp = &xtime[0];
  2397                              <1> ;
  2398                              <1> ;	/*
  2399                              <1> ;	 * generate hours:minutes:seconds
  2400                              <1> ;	 */
  2401                              <1> ;
  2402                              <1> ;	*tp++ = d1%60;
  2403                              <1> ;	d1 =/ 60;
  2404                              <1> ;	*tp++ = d1%60;
  2405                              <1> ;	d1 =/ 60;
  2406                              <1> ;	d1 =+ (d0%3)*8;
  2407                              <1> ;	d0 =/ 3;
  2408                              <1> ;	*tp++ = d1;
  2409                              <1> ;
  2410                              <1> ;	/*
  2411                              <1> ;	 * d0 is the day number.
  2412                              <1> ;	 * generate day of the week.
  2413                              <1> ;	 */
  2414                              <1> ;
  2415                              <1> ;	xtime[WDAY] = (d0+4)%7;
  2416                              <1> ;
  2417                              <1> ;	/*
  2418                              <1> ;	 * year number
  2419                              <1> ;	 */
  2420                              <1> ;	for(d1=70; d0 >= dysize(d1); d1++)
  2421                              <1> ;		d0 =- dysize(d1);
  2422                              <1> ;	xtime[YEAR] = d1;
  2423                              <1> ;	xtime[YDAY] = d0;
  2424                              <1> ;
  2425                              <1> ;	/*
  2426                              <1> ;	 * generate month
  2427                              <1> ;	 */
  2428                              <1> ;
  2429                              <1> ;	if (dysize(d1)==366)
  2430                              <1> ;		dmsize[1] = 29;
  2431                              <1> ;	for(d1=0; d0 >= dmsize[d1]; d1++)
  2432                              <1> ;		d0 =- dmsize[d1];
  2433                              <1> ;	dmsize[1] = 28;
  2434                              <1> ;	*tp++ = d0+1;
  2435                              <1> ;	*tp++ = d1;
  2436                              <1> ;	xtime[ISDAY] = 0;
  2437                              <1> ;	return(xtime);
  2438                              <1> ;}
  2439                              <1> ;
  2440                              <1> ;asctime(t)
  2441                              <1> ;int *t;
  2442                              <1> ;{
  2443                              <1> ;	register char *cp, *ncp;
  2444                              <1> ;	register int *tp;
  2445                              <1> ;
  2446                              <1> ;	cp = cbuf;
  2447                              <1> ;	for (ncp = "Day Mon 00 00:00:00 1900\n"; *cp++ = *ncp++;);
  2448                              <1> ;	ncp = &"SunMonTueWedThuFriSat"[3*t[6]];
  2449                              <1> ;	cp = cbuf;
  2450                              <1> ;	*cp++ = *ncp++;
  2451                              <1> ;	*cp++ = *ncp++;
  2452                              <1> ;	*cp++ = *ncp++;
  2453                              <1> ;	cp++;
  2454                              <1> ;	tp = &t[4];
  2455                              <1> ;	ncp = &"JanFebMarAprMayJunJulAugSepOctNovDec"[(*tp)*3];
  2456                              <1> ;	*cp++ = *ncp++;
  2457                              <1> ;	*cp++ = *ncp++;
  2458                              <1> ;	*cp++ = *ncp++;
  2459                              <1> ;	cp = numb(cp, *--tp);
  2460                              <1> ;	cp = numb(cp, *--tp+100);
  2461                              <1> ;	cp = numb(cp, *--tp+100);
  2462                              <1> ;	cp = numb(cp, *--tp+100);
  2463                              <1> ;	cp =+ 2;
  2464                              <1> ;	cp = numb(cp, t[YEAR]);
  2465                              <1> ;	return(cbuf);
  2466                              <1> ;}
  2467                              <1> ;
  2468                              <1> ;dysize(y)
  2469                              <1> ;{
  2470                              <1> ;	if((y%4) == 0)
  2471                              <1> ;		return(366);
  2472                              <1> ;	return(365);
  2473                              <1> ;}
  2474                              <1> ;
  2475                              <1> ;
  2476                              <1> ;numb:
  2477                              <1> ;	
  2478                              <1> ;
  2479                              <1> ;numb(acp, n)
  2480                              <1> ;{
  2481                              <1> ;	register char *cp;
  2482                              <1> ;	cp = acp;
  2483                              <1> ;	cp++;
  2484                              <1> ;	if (n>=10)
  2485                              <1> ;		*cp++ = (n/10)%10 + '0';
  2486                              <1> ;	else
  2487                              <1> ;		*cp++ = ' ';
  2488                              <1> ;	*cp++ = n%10 + '0';
  2489                              <1> ;	return(cp);
  2490                              <1> ;}
  2491                              <1> ;
  1762                                  
  1763 00000896 A101                    dw 417
  1764                                  
  1765 00000898 [44150000]              brk:	dd _end + 512 ; (gstat:)
  1766                                  
  1767                                  ; directory name pointer
  1768 0000089C 00000000                dnp:	dd 0 ; (do:)
  1769                                  
  1770 000008A0 [A8080000]              dotp:	dd dot
  1771                                  	;dotp:	dot
  1772 000008A4 [3C0D0000]              euids:	dd uidbuf
  1773                                  	; euids: uidbuf
  1774 000008A8 2E00                    dot:	db '.', 0		
  1775                                  	;dot:  <.\0>
  1776 000008AA 0D0A00                  nl:	db 0Dh, 0Ah, 0
  1777                                  	; nl:  <\n\0>
  1778 000008AD 746F74616C2000          totmes: db 'total ', 0
  1779                                  	; totmes: <total \0>
  1780 000008B4 202020                  space3: db 20h, 20h, 20h
  1781                                  	; space3: <  >
  1782 000008B7 2000                    space:	db 20h, 0
  1783                                  	; space: < \0>
  1784 000008B9 2F6574632F70617373-     passwd: db '/etc/passwd', 0
  1784 000008C2 776400             
  1785                                  	; passwd: </etc/passwd\0>
  1786 000008C5 3A0D0A00                colon:	db ':', 0Dh, 0Ah, 0
  1787                                  	; colon: <:\n\0>
  1788                                  
  1789 000008C9 00000000                eol:	dd 0 ; (pass3:)
  1790                                  
  1791 000008CD 90<rep 3h>              align 4
  1792                                  
  1793                                  bss_start:
  1794                                  
  1795                                  ABSOLUTE bss_start
  1796                                  ;EVEN
  1797                                  ;bss:
  1798 000008D0 ????                    	count:	  resw 1
  1799 000008D2 ????                    	ocount:   resw 1
  1800 000008D4 ????                    	longf:	  resw 1
  1801 000008D6 ????                    	allflg:   resw 1
  1802 000008D8 ????                    	dirflg:	  resw 1
  1803 000008DA ????                    	isadir:   resw 1 
  1804 000008DC ????????                	tblocks:  resd 1
  1805 000008E0 ????????                	sortoff:  resd 1
  1806 000008E4 <res 20h>               	filnam:   resb 32
  1807 00000904 <res 22h>               	statb:	  resb 34
  1808 00000926 <res 208h>              	dbuf:	  resb 520 
  1809                                  	; 2 byte file descriptor, 2 byte buffer data size,
  1810                                  	; 4 byte buffer offset, 512 byte buffer data
  1811 00000B2E <res 208h>              	obuf:	  resb 520
  1812 00000D36 ????????????            	numbuf:   resb 6
  1813 00000D3C <res 400h>              	uidbuf:   resb 1024
  1814                                  	euidbuf:  
  1815 0000113C <res 208h>              	iobuf:	  resb 520
  1816                                  
  1817                                  alignb 4
  1818                                  	_end:
  1819                                  
  1820                                  	; .even
  1821                                  
  1822                                  	;.bss
  1823                                  
  1824                                  	;count:	  .=.+2
  1825                                  	;ocount:  .=.+2
  1826                                  	;longf:	  .=.+2
  1827                                  	;sortoff: .=.+2
  1828                                  	;allflg:  .=.+2
  1829                                  	;dirflg:  .=.+2
  1830                                  	;isadir:  .=.+2 
  1831                                  	;filnam:  .=.+32.
  1832                                  	;statb:	  .=.+34.
  1833                                  	;dbuf:	  .=.+518.
  1834                                  	;obuf:	  .=.+518.
  1835                                  	;numbuf:  .=.+6
  1836                                  	;tblocks: .=.+2
  1837                                  	;uidbuf:  .=.+1024.
  1838                                  	;euidbuf:
  1839                                  	;iobuf:	  .=.+518.
