MODULE UrlEncoder
 
; HL - pointer to line in gopher page
 
; C - flag set when it's file
 
isFile:
 
.findServerLoop
 
    ld a, (hl) : and a : jr z, .notFile : inc hl
 
    cp 13 : jr z, .notFile
 
    cp 9  : jr z, .skipPath
 
    jr .findServerLoop
 
.skipPath
 
    ld a, (hl) : and a : jr z, .notFile : inc hl
 
    cp 13 : jr z, .notFile
 
    cp 9  : jr z, .compareServer
 
    jr .skipPath
 
.compareServer
 
    ld a, (hl) : cp "f" : jr nz, .notFile : inc hl
 
    ld a, (hl) : cp "i" : jr nz, .notFile : inc hl
 
    ld a, (hl) : cp "l" : jr nz, .notFile : inc hl
 
    ld a, (hl) : cp "e" : jr nz, .notFile : inc hl
 
    ld a, (hl) : cp 9   : jr nz, .notFile : inc hl
 
    ld a, 1
 
    ret
 
.notFile
 
    xor a
 
    ret
 
 
 
; Is enough fields to encode
 
; HL - pointer to line in gopher page
 
; C - flag set when there is enough fields
 
isValidGopherRow:
 
    ld a, (hl) : and a : jr z, isFile.notFile : inc hl
 
    cp 13 : jr z, isFile.notFile
 
    cp 9  : jr z, .skipPath
 
    jr isValidGopherRow
 
.skipPath
 
    ld a, (hl) : and a : jr z, isFile.notFile : inc hl
 
    cp 13 : jr z, isFile.notFile
 
    cp 9  : jr z, .skipHost
 
    jr .skipPath
 
.skipHost
 
    ld a, (hl) : and a : jr z, isFile.notFile : inc hl
 
    cp 13 : jr z, isFile.notFile
 
    cp 9 :  jr z, .isValid
 
    jr .skipHost
 
.isValid:
 
    scf
 
    ret
 
 
 
extractPath:
 
    ld hl, historyBlock.locator, de, nameBuffer, bc, #ff : ldir
 
    ret
 
 
 
extractHostName:
 
    ld hl, historyBlock.host, de, hostName, bc, 64 : ldir
 
    ret 
 
    
 
    ENDMODULE
 
    
 
nameBuffer ds #ff, 0   
 
     
 
         db 0
 
hostName ds 64