;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; Insert Insert a record in the list ; ; Acquire arecord from the freelist, read data from user then ; ; link it into the list ; ; ; ; Entry jal insert ; ; ; ; uses r1,r2 ; ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .seg Code insMsg .ascii "City already exits\r\n\0" insCity .ascii "City: \0" insCount .ascii "Country: \0" insLat .ascii "Latitude: \0" insLong .ascii "Longitude: \0" .align 2 .seg Data InsertR31 .space 4 InsertR3 .space 4 InsertR4 .space 4 InsertR5 .space 4 .seg Code insert sw InsertR31,r31 ;Save r31 sw InsertR3,r3 ;Save r3 sw InsertR4,r4 ;Save r4 sw InsertR5,r5 ;Save r5 lw r3,freeList ;r3=->first record in freeList addui r1,r0,insCity jal StrPut addui r1,r3,ofsName addui r2,r0,20 ;ofsCountry-ofsName jal StrGet ;Read city addui r1,r3,ofsName jal find bnez r1,InsertDup addui r1,r0,insCount jal StrPut addui r1,r3,ofsCountry addui r2,r0,20 ;ofsLat-ofsCountry jal StrGet ;Read country addui r1,r0,insLat jal StrPut addui r1,r3,ofsLat addui r2,r0,4 ;ofsLong-ofsLat jal StrGet ;Read Lat jal StrToInt ;Convert Lat to int sw ofsLat(r3),r1 addui r1,r0,insLong jal StrPut addui r1,r3,ofsLong addui r2,r0,4 ;52-ofsLong jal StrGet ;Read Long jal StrToInt ;Convert Long to int sw ofsLong(r3),r1 InsertAddList lw r4,cityList ;r4=first record in cityList addi r5,r0,cityList ;r5=->first record in cityList InsertWhile beqz r4,InsertRecord ;r4=->null addi r1,r4,ofsName ;r1=->CityRecord.CityName addi r2,r3,ofsName ;r2=->CityName jal StrCmp ;Compare CityName, CityRecord.CityName ;beqz r1,InsertDup ; sgt r1,r1,r0 ;s>0 bt r1,InsertRecord InsertNextRec add r5,r0,r4 ;r5=->Current record lw r4,ofsNext(r4) ;r4=->CityList.next j InsertWhile InsertRecord lw r2,(r3) ;r2=->freeList.next sw freeList,r2 ;freeList=->freeList.next sw ofsNext(r5),r3 ;PreviousRecord->NewRecord sw ofsNext(r3),r4 ;NewRecord->NextRecord j InsertEnd InsertDup addui r1,r0,insMsg jal StrPut ;Print "City already exits" InsertEnd lw r31,InsertR31 ;Restore r31 lw r3,InsertR3 ;Restore r3 lw r4,InsertR4 ;Restore r4 lw r5,InsertR5 ;Restore r5 jr r31