home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / security / login_1 / s / readonly next >
Text File  |  1995-08-29  |  1KB  |  60 lines

  1. ; vi:ts=8:sw=8:nosi:ai
  2. ;
  3. ; Copyright (C) 1994 Alun Jones, auj@aber.ac.uk
  4. ;
  5. ; This source code is freeware.
  6. ;
  7. ; readonly.s - Makes a variable read-only. The value of the variable
  8. ;              is read and a code variable of the same name is created.
  9. ;              The value is then stored in this variable, whose write
  10. ;              function is disallowed.
  11. ; Usage: readonly variable$name
  12.  
  13. .ABSOLUTE
  14. .PROC    main
  15.  
  16.     MOV    R0, R1            ; Variable name ptr
  17.     ADR    R1, buffer
  18.     MOV    R2, #100
  19.     MOV    R3, #0
  20.     MOV    R4, #3
  21.     SWI    XOS_ReadVarVal
  22.     MOVVS    PC, R14
  23.  
  24.     ADR    R1, code
  25.     ADR    R1, code        ; Code start ptr
  26.     ADR    R3, endcode
  27.     SUB    R3, R3, R1        ; Code length
  28.     ADD    R2, R2, R3        ; Code + buffer length
  29.     MOV    R3, #0            ; Context ptr
  30.     MOV    R4, #10            ; Code variable
  31.     SWI    XOS_SetVarVal
  32.     MOV    PC, R14
  33.  
  34. code    B    write            ; Branch to code write
  35.  
  36. read    STMFD    R13!, {R1,R3, R14}
  37.     ADR    R0, buffer
  38.     MOV    R2, R0
  39. count    LDRB    R1, [R2], #1
  40.     CMP    R1, #" "
  41.     BGE    count
  42.     SUB    R2, R2, #1
  43.     SUB    R2, R2, R0
  44.     LDMFD    R13!, {R1,R3, PC}
  45.  
  46. write
  47.     ORR    R14, R14, #10000000
  48.     ADR    R0, ErrMess
  49.     MOVS    PC, R14
  50.     LDMFD    R13!, {PC}
  51.  
  52. ErrMess    .WORD    0
  53.     .STRING    "Variable is readonly"
  54. endcode
  55.  
  56. buffer    .BLOCK    100, 0
  57.     .ALIGN
  58. .END
  59.