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