//THIS FILE WILL SOON BE REMOVED
//SEE https://github.com/Verlio-H/silkTools FOR THE PROGRAMS


//Login (/boot):
IMM R1 8
SCAL MALLOC R1
BIMM R1 ["login: " 0]
SCAL FREE R1
IMM R1 16
SCAL MALLOC R1
IMM R2 0xA
PSH R2
IMM R2 16
PSH R2
SCAL GETS R1
PSH R1
SCAL STROSVAR USERNAME
SCAL FREE R1
IMM R1 36
SCAL MALLOC R1
BIMM R1 ["\nWelcome to URCL-OS version 3.0.0!\n\n" 0]
SCAL PUTS R1
SCAL FREE R1
SCAL GETPID R2
PSH R2
SCAL STROSVAR CPP
IMM R2 7
SCAL MALLOC R2
BIMM R2 ["bin" 0]
PSH R0
ADD R3 R2 R0
SCAL RDIR R2
PSH R2
SCAL STROSVAR PATH
BIMM R3 ["bin/sh" 0]
PSH R0
SCAL RDIR R3
PSH R3
SCAL STROSVAR SHELL
SCAL EXEC R3

//Shell (/bin/sh):
.Shell_Start
IMM R4 .Shell_Error
IMM R6 1
PSH R6
SCAL STROSVAR ECHO
SCAL LODOSVAR USERNAME
POP R1
SCAL PUTS R1
SCAL PUTCI ' '
IMM R2 32
ADD R1 R2 R0
SCAL MALLOC R1
SCAL LODOSVAR ERROR
POP R5
BGE R4 R5 R6
PSH R2
SCAL GETDIRNAME R1 //gets dir with cap of 32 long
SCAL PUTS R1 //prints it lol
SCAL FREE R1
SCAL PUTCI '$'
SCAL PUTCI ' '
IMM R1 64
SCAL MALLOC R1
SCAL LODOSVAR ERROR
POP R5
BGE R4 R5 R6
IMM R2 0xA
PSH R2
PSH R1
SCAL GETS R1 //stores string into mem[R1] with limit of 64 length
SCAL LODOSVAR PATH //get bin location
SCAL RDIR R1 //returns the location of the requested file
PSH R1
SCAL LODOSVAR ERROR
POP R5
BGE R4 R5 R6
SCAL FORK R1
IMM R4 .Shell_Exec
BRE R4 R1 R0
SCAL WAITPID R1
SCAL LODOSVAR EXIT
POP R1
IMM R2 0xFFFE
IMM R4 .Shell_Start
BGE R4 R2 R1 //continue if exit code wasn't -1
SCAL EXIT R0
.Shell_Exec
SCAL PUTCI '\n'
POP R1
SCAL EXEC R1

.Shell_Error
IMM R1 8
SCAL MALLOC R1
BIMM R1 ["Error\n" 0]
SCAL PUTS R1
SCAL FREE R1
PSH R0
SCAL STROSVAR ERROR
BGE R0 R0 R0 //jmp to start

//cd: (/bin/cd)
IMM R4 0x20
PSH R4
IMM R4 1
PSH R4
ADD R1 R2 R0 //1202
SCAL NTHSTRING R2
SCAL LODOSVAR ERROR
POP R3
IMM R5 .Cd_Error
BGE R5 R3 R4
IMM R4 0xFFFF
PSH R4
SCAL RDIR R2 //pointer to the directory yes majic
SCAL LODOSVAR ERROR
POP R3
IMM R4 1
BGE R5 R3 R4
SCAL CHDIR R2
SCAL FREE R1 //114F
SCAL EXIT R0

.Cd_Error
SCAL FREE R1 //114F
IMM R1 7
PSH R0
SCAL STROSVAR ERROR
SCAL MALLOC R1
BIMM R1 ["Error\n" 0]
SCAL PUTS R1
SCAL FREE R1
SCAL EXIT R4 //exit code 1

//ls: (/bin/ls)
IMM R4 0x20
PSH R4
IMM R4 1
PSH R4
SCAL NTHSTRING R2
SCAL LODOSVAR ERROR
POP R3
IMM R5 .Ls_Error
BGE R5 R3 R4
IMM R4 0xFFFF
PSH R4
SCAL OPEN R2
PSH R2
IMM R4 4
SCAL LSEEK R4
IMM R12 .Pwd_Error
.Loop
MOV R5 R4
SCAL MALLOC R5
SCAL LODOSVAR ERROR
POP R7
IMM R9 1
BGE R12 R5 R9
PSH R4
PSH R5
SCAL READ R2
LOD R6 R5
IMM R7 .EndOfDir
BRE R7 R6 R0
IMM R7 3
ADD R5 R5 R7
LOD R8 R5 //addr
IMM R7 8
BSR R9 R6 R7 //length of name
IMM R7 0xFF
AND R6 R6 R7 //first char
SCAL PUTC R6
IMM R7 .OneLetter
BRE R7 R9 R0 
SUB R8 R8 R9
IMM R11 1
.Loop2
LOD R10 R8
SCAL PUTC R10
INC R8 R8
DEC R9 R9
BGE .Loop2 R9 R11
.OneLetter
SCAL FREE R5
SCAL PUTCI '\n'
IMM R7 .Loop
BRE .Loop R0 R0

.EndOfDir
SCAL FREE R5
SCAL CLOSE R2
SCAL PUTCI '\n'
SCAL EXIT R0

.Ls_Error
IMM R1 7
SCAL MALLOC R1
BIMM R1 ["Error\n" 0]
SCAL PUTS R1
SCAL FREE R1
IMM R4 1
SCAL EXIT R4 //exit code 1

//cat: (/bin/cat)
IMM R4 0x20
PSH R4
IMM R4 1
PSH R4
SCAL NTHSTRING R2
SCAL LODOSVAR ERROR
POP R3
IMM R5 .Cat_Error
BGE R5 R3 R4
SCAL OPEN R2
SCAL FLEN R2
POP R3 //length of file
MOV R4 R3
IMM R6 1
SCAL MALLOC R3
SCAL LODOSVAR ERROR
POP R7
BGE R5 R7 R6
PSH R4
PSH R3
SCAL READ R2
SCAL PUTS R3
SCAL EXIT R0

.Cat_Error
IMM R1 7
SCAL MALLOC R1
BIMM R1 ["Error\n" 0]
SCAL PUTS R1
SCAL FREE R1
IMM R4 1
SCAL EXIT R4 //exit code 1

//pwd: (/bin/pwd) (my crappy version like in urclos2)
IMM R2 32
ADD R1 R2 R0
SCAL MALLOC R1
SCAL LODOSVAR ERROR
POP R5
IMM R4 .Pwd_Error
BGE R4 R5 R6
PSH R2
SCAL GETDIRNAME R1 //gets dir with cap of 32 long
SCAL PUTS R1
SCAL PUTCI '\n'
SCAL FREE R1
SCAL EXIT R0

//touch: (/bin/touch)

//ls: (/bin/ls) (new)
//open dir (R3)
//for file in dir
//get file name header
//  if file name = 0 then exit
//get file location
PSH 4
SCAL LSEEK R3
SCAL READ R3
//cd to location
IMM R2 32
ADD R1 R2 R0
SCAL MALLOC R1
SCAL GETDIRNAME R1
SCAL PUTS R1
SCAL FREE R1