home *** CD-ROM | disk | FTP | other *** search
/ RISC DISC 2 / RISC_DISC_2.iso / pd_share / utilities / cli / pgp2 / src / s / gjmlow < prev    next >
Encoding:
Text File  |  1995-06-08  |  1.8 KB  |  113 lines

  1. ; low-level routines for PGP (file handling etc)
  2. ;
  3.  
  4. r0 RN 0
  5. r1 RN 1
  6. r2 RN 2
  7. r3 RN 3
  8. r4 RN 4
  9. r5 RN 5
  10. sp RN 13
  11. lr RN 14
  12. pc RN 15
  13.  
  14. XOS_Bit        EQU &20000
  15. SWI_OS_WriteC    EQU &00000
  16. SWI_OS_ReadC    EQU &00004
  17. SWI_OS_Byte    EQU &00006
  18. SWI_OS_File    EQU &00008
  19. SWI_OS_Args    EQU &00009
  20. SWI_OS_GBPB    EQU &0000C
  21. SWI_OS_EnterOS    EQU &00016
  22.  
  23.     AREA |A$$Code|, CODE, READONLY
  24.  
  25.     EXPORT access
  26.     EXPORT strlwr
  27.     EXPORT read
  28.     EXPORT getch
  29.     EXPORT fileno
  30.     EXPORT lseek
  31.     EXPORT write
  32.     EXPORT ro_flush_input
  33.     EXPORT ioc_t1
  34.     EXPORT putch
  35.  
  36. fileno    LDR r0,[r0,#20]
  37.     MOVS pc,lr
  38.  
  39. strlwr    LDRB r1,[r0],#1
  40.     CMP r1,#0
  41.     MOVEQS pc,lr
  42.     SUB r2,r1,#97
  43.     CMP r2,#26
  44.     ORRLO r1,r1,#32
  45.     STRLOB r1,[r0,#-1]
  46.     B strlwr
  47.  
  48. read    STMFD sp!,{r4,r5,lr}
  49.     MOV r5,r1
  50.     MOV r3,r2
  51.     MOV r2,r1
  52.     MOV r1,r0
  53.     MOV r0,#4
  54.     SWI XOS_Bit+SWI_OS_GBPB
  55.     SUB r0,r2,r5
  56.     LDMFD sp!,{r4,r5,pc}^
  57.  
  58. write    STMFD sp!,{r4,r5,lr}
  59.     MOV r5,r1
  60.     MOV r3,r2
  61.     MOV r2,r1
  62.     MOV r1,r0
  63.     MOV r0,#2
  64.     SWI XOS_Bit+SWI_OS_GBPB
  65.     SUB r0,r2,r5
  66.     LDMFD sp!,{r4,r5,pc}^
  67.  
  68. lseek    MOV r3,r1    ; offset in r3
  69.     MOV r1,r0    ; handle in r1
  70.     CMP r2,#2
  71.     BNE notend    ; assume seek_set !
  72.     MOV r0,#2
  73.     SWI XOS_Bit+SWI_OS_Args
  74.     ADD r3,r3,r2    ; now offset from start in r3
  75. notend    MOV r2,r3
  76.     MOV r0,#1
  77.     SWI XOS_Bit+SWI_OS_Args
  78.     MOVS pc,lr
  79.  
  80. getch    SWI XOS_Bit+SWI_OS_ReadC
  81.     MOVS pc,lr
  82.  
  83. access    STMFD sp!,{r4,r5,lr}
  84.     MOV r1,r0        ; assume access(...,0) i.e. does it exist?
  85.     MOV r0,#17
  86.     SWI XOS_Bit+SWI_OS_File
  87.     CMP r0,#0
  88.     MOVEQ r0,#1
  89.     MOVNE r0,#0
  90.     LDMFD sp!,{r4,r5,pc}^
  91.  
  92. ro_flush_input
  93.     MOV r0,#15
  94.     MOV r1,#1
  95.     SWI XOS_Bit+SWI_OS_Byte
  96.     MOVS pc,lr
  97.  
  98. ioc_t1    STMFD sp!,{lr}
  99.     SWI XOS_Bit+SWI_OS_EnterOS    ; SVC mode to use IOC
  100.     MOV r2,#&3200000    ; IOC base
  101.     STRB r2,[r2,#&5C]    ; prepare for reading
  102.     LDRB r1,[r2,#&50]    ; read low byte
  103.     LDRB r0,[r2,#&54]    ; read high byte
  104.     ADD r0,r1,r0,LSL#8    ; total
  105.     TEQP pc,#0        ; return to USR mode
  106.     MOV r0,r0        ; no-op to settle down
  107.     LDMFD sp!,{pc}^
  108.  
  109. putch    SWI XOS_Bit+SWI_OS_WriteC
  110.     MOVS pc,lr
  111.  
  112.     END
  113.