 ;Compiled codeconventions ;
 ;Registers:
 ;
 ;RB         8    Called address     ;can be used witho
 ;RL         12   Caller's static
 ;RTS        11   Top of stack (empty word above)
 ;RP         10   Frame pointer
 ;RG         9    Global base
 ;RGB        7    Special global base
 ;
 ;There is an upwards-growing stack, addressed by two r
 ;frame pointer, RTS the top of stack+1 free word point
 ;RG points at the base of the global vector; RGB addre
 ;within the library.
 ;
 ;On procedure entry, RB holds the address of the calle
 ;be preserved.  RL holds the address of the caller's s
 ;preserved.  R14 holds the link: this must be written
 ;return.  R1 to R4 hold the first four arguments, with
 ;above RTS in the usual way. Thus, a general procedure
 ;        STMEA   rts!, {rb, rp, rl, r14} ; save linkag
 ;        SUB     rp, rts, #16            ; new frame p
 ;        STMEA   rts!, {a1, ...}         ; arguments
 ;           ...
 ;        MOV     rts, rp                 ; unwind our
 ;        LDMIB   rp, {rp, rl, pc}^       ; no need to
 ;
 ;R0 to R6 and RB(8) may be used without saving their v
 ;moreover it is accessible from BCPL through the name
 ;from BCPL has the side-effect of updating R6).  R6 an
 ;untouched by the library, and by BCPL code which does
 ;
 ;On return, a1 holds value received.


         .include  "regnames"
         .include  "swinames"
         Result2 = 52
         Mb      = 202                  ;249 used by applications

         .AREA     Code
Start:   .ascii     "BCPL"
         .LONG     Globinits-Start
         .ascii    "MesHglas"
         .ASCII    "23 May 93 00-00-00  "
         .LONG     0
         .long     -1
         .ascic    "HGlasOn"
HourglassOn:
          swi       Hourglass_On+XOS
          mov       pc, lr
          .long     -1
          .ascic    "HGlasOf"
HourglassOff:
          swi       Hourglass_Off+XOS
          mov       pc, lr
          .long     -1
          .ascic    "HGlasSm"
HourglassSmash:
          mov       r0, a1
          swi       Hourglass_Smash+XOS
          mov       pc, lr
          .long     -1
          .ascic    "HGlasSt"
HourglassStart:
          mov       r0, a1
          swi       Hourglass_Start+XOS
          mov       pc, lr
          .long     -1
          .ascic    "HGlass%"
HourglassPercentage:
          mov       r0, a1
          swi       Hourglass_Percentage+XOS
          mov       pc, lr
          .long     -1
          .ascic    "HGlasLe"
HourglassLEDs:
          mov       r0, a1
          mov       a2, a1
          swi       Hourglass_LEDs+XOS
          mov       pc, lr
;Hourglass_Colours :    Wb+58; Squash_Compress :
;Squash_Decompress :    Wb+60;
          .long     -1
          .ascic     "MtFinfo"
MessageTransFileInfo:
;          mov       a1, a1, lsl #2
;          add       a1, a1, #1
          swi       MessageTrans_Fileinfo+XOS
          str       r0, [ rg, #Result2 ]
          mov       a1, a2
          mov       pc, lr
          .long     -1
          .ascic     "MtOpenF"
MessageTransOpenFile:
          mov       r0, a1
;          mov       a1, a2, lsl #2
;          add       a1, a1, #1          ; wot if in Rm
          mov       a1, a2
          mov       a2, a3
          swi       MessageTrans_Openfile+XOS
          mov       r0, #0
          mvncs     r0, #0
          str       r0, [ rg, #Result2 ]
          mov       pc, lr
          .long     -1
          .ascic     "MtLookp"
MessageTransLookup:
          ldr       r0, [pc, #Lookswi-$-8]
LookC:    str       r0, [pc, #Lswi-$-8]
          mov       r0, a1
          mov       a1, a2
          mov       a2, a3
          str       rgb, [pc, #srgb-$-8]
          mov       rb, a4, lsl #2
          ldmia     rb, {a3-rgb }
Lswi:     swi       MessageTrans_Lookup+XOS
          str       r3, [ rg, #Result2 ]
          ldr       rgb, [pc, #srgb-$-8]
          mov       a1, r2
          mov       pc, lr
Lookswi:  swi       MessageTrans_Lookup+XOS
GSLookswi:swi       MessageTrans_GSLookup+XOS
srgb:     .long     0
         .long     -1
          .ascic     "MtMenus"
MessageTransMakeMenus:
          mov       r0, a1
          mov       a1, a2
          mov       a2, a3
          mov       a3, a4
          swi       MessageTrans_MakeMenus+XOS
          str       r3, [ rg, #Result2 ]
          mov       a1, a2
          mov       pc, lr
          .long     -1
          .ascic     "MtClose"
MessageTransCloseFile:
          mov       r0, a1
          swi       MessageTrans_CloseFile+XOS
          mov       pc, lr
          .long     -1
          .ascic     "MtToken"
MessageTransEnumerateTokens:
          mov       r0, a1
          mov       a1, a2
          mov       a2, a3
          mov       rb, a4, lsl #2
          ldmia     rb, {a3-a4 }
          swi       MessageTrans_EnumerateTokens+XOS
          mov       a1, a2
          mov       pc, lr
          .long     -1
          .ascic     "MtErrLp"
MessageTransErrorLookup:
          mov       r0, a1        ; Error Block
          mov       a1, a2        ; file descriptor
          mov       a2, a3        ; result buffer
          str       rgb, [pc, #srgb-$-8]
          mov       rb, a4, lsl #2
          ldmia     rb, {a3-rgb }
          swi       MessageTrans_ErrorLookup+XOS
          ldr       rgb, [pc, #srgb-$-8]
          mov       a1, r0
          mov       pc, lr
          .long     -1
          .ascic     "MtGSLkp"
MessageTransGSLookup:
          ldr       r0, [pc, #GSLookswi-$-8]
          b         LookC
          .long     -1
          .ascic     "MtCpErr"
MessageTransCopyError:
          mov       r0, a1
          swi       MessageTrans_CopyError+XOS
          mov       a1, r0
          mov       pc, lr
Globinits:
          .long     Mb+0
          .long     HourglassOn - Start
          .long     Mb+1
          .long     HourglassOff - Start
          .long     Mb+2
          .long     HourglassSmash - Start
          .long     Mb+3
          .long     HourglassStart - Start
          .long     Mb+4
          .long     HourglassPercentage - Start
          .long     Mb+5
          .long     HourglassLEDs - Start
          .long     Mb+9
          .long     MessageTransFileInfo - Start
          .long     Mb+10
          .long     MessageTransOpenFile - Start
          .long     Mb+11
          .long     MessageTransLookup - Start
          .long     Mb+12
          .long     MessageTransMakeMenus - Start
          .long     Mb+13
          .long     MessageTransCloseFile - Start
          .long     Mb+14
          .long     MessageTransEnumerateTokens - Start
          .long     Mb+15
          .long     MessageTransErrorLookup - Start
          .long     Mb+16
          .long     MessageTransGSLookup - Start
          .long     Mb+17
          .long     MessageTransCopyError - Start
          .long     Mb+17
          .long     0
          .LONG  0x12345678
          .LONG  Globinits + 4 - Start
          .LONG  Globinits + 12 - Start
          .LONG  Globinits + 20 - Start
          .LONG  Globinits + 28 - Start
          .LONG  Globinits + 36 - Start
          .LONG  Globinits + 44 - Start
          .LONG  Globinits + 52 - Start
          .LONG  Globinits + 60 - Start
          .LONG  Globinits + 68 - Start
          .LONG  Globinits + 76 - Start
          .LONG  Globinits + 84 - Start
          .LONG  Globinits + 92 - Start
          .LONG  Globinits + 100 - Start
          .LONG  Globinits + 108 - Start
          .LONG  Globinits + 116 - Start
          .LONG  0x87654321
;         .LONG  Globinits + 124 - Start
;         .LONG  Globinits + 132 - Start
;         .LONG  Globinits + 140 - Start
;         .LONG  Globinits + 148 - Start
;         .LONG  Globinits + 156 - Start
;         .LONG  Globinits + 164 - Start
;         .LONG  Globinits + 172 - Start
;         .LONG  Globinits + 180 - Start
;         .LONG  Globinits + 188 - Start
;         .LONG  Globinits + 196 - Start
;         .LONG  Globinits + 204 - Start
;         .LONG  Globinits + 212 - Start
;         .LONG  Globinits + 220 - Start
;         .LONG  Globinits + 228 - Start
;         .LONG  Globinits + 236 - Start
;         .LONG  Globinits + 244 - Start
;         .LONG  Globinits + 252 - Start
;         .LONG  Globinits + 260 - Start
;         .LONG  Globinits + 268 - Start
;         .LONG  Globinits + 276 - Start
;         .LONG  Globinits + 284 - Start
;         .LONG  Globinits + 292 - Start
;         .LONG  Globinits + 300 - Start
;         .LONG  Globinits + 308 - Start
;         .LONG  Globinits + 316 - Start
;         .LONG  Globinits + 324 - Start
;         .LONG  Globinits + 332 - Start
;         .LONG  Globinits + 340 - Start
;         .LONG  Globinits + 348 - Start
;         .LONG  Globinits + 356 - Start
;         .LONG  Globinits + 364 - Start
;         .LONG  Globinits + 372 - Start
;         .LONG  Globinits + 380 - Start
;         .LONG  Globinits + 388 - Start
;         .LONG  Globinits + 396 - Start
;         .LONG  Globinits + 404 - Start
;         .LONG  Globinits + 492 - Start
;Hourglass_On :         Wb+52; Hourglass_Off :
;Hourglass_Smash :      WB+54; Hourglass_Start :
;Hourglass_Percentage : Wb+56; Hourglass_LEDs :
;Hourglass_Colours :    Wb+58; Squash_Compress :
;Squash_Decompress :    Wb+60; MessageTrans_Fileinfo :
;MessageTrans_Openfile :Wb+62; MessageTrans_lookup :
;MessageTrans_MakeMenus:Wb+64; MessageTrans_CloseFile:
;MessageTrans_EnumerateTokens : Wb+66
;                              MessageTrans_ErrorLooku
;MessageTrans_GSLookup :Wb+68; MessageTrans_CopyError:
