home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 5 / DATAFILE_PDCD5.iso / utilities / m / makedrawf / Source / s / syscalls < prev   
Text File  |  1995-05-11  |  4KB  |  140 lines

  1. ; s.syscalls
  2.  
  3.         GET h.asmregs
  4.  
  5. X_Bit            EQU 0x020000
  6. Font_FindFont        EQU 0x040081
  7. Font_LoseFont        EQU 0x040082
  8. Font_ScanString        EQU 0x0400A1
  9. Draw_ProcessPath    EQU 0x040700
  10. OS_GSTrans        EQU 0x000027
  11. OS_File            EQU 0x000008
  12. OS_ReadMonotonicTime    EQU 0x000042
  13.  
  14.         AREA |A$$code|, CODE, READONLY
  15.  
  16. ; int findfont(char *name, int xsz, int ysz, int xres, int yres);
  17. ;  xsz,ysz in 16ths of a point
  18. ;  xres,yres in dpi
  19. ;  returns font handle, or 0 if not found
  20.  
  21.         EXPORT findfont
  22. findfont
  23.         STMFD   sp!,{r4,r5,lr}
  24.         LDR     r5,[sp,#12] ; 5th arg
  25.         MOV     r4,r3
  26.         MOV     r3,r2
  27.         MOV     r2,r1
  28.         MOV     r1,r0
  29.         SWI     X_Bit+Font_FindFont
  30.         MOVVS   r0,#0
  31.         LDMFD   sp!,{r4,r5,pc}^
  32.  
  33. ; void losefont(int handle);
  34.  
  35.         EXPORT losefont
  36. losefont
  37.         CMP     r0,#0
  38.         SWINE   X_Bit+Font_LoseFont
  39.         MOVS    pc,lr
  40.  
  41. ; void stringbbox(int handle, char *string, int *bbox, int flags, int *mx);
  42. ;  fills in bounding box, in millipoints, at bbox[5..8]
  43. ;  stuff in bbox[0..4] is from Font_ScanString, if you care.
  44. ;  This assumes the baseline starts at (0,0).
  45. ;  The "flags" word should have bit 0 set iff kerning, and bit 1 set
  46. ;  iff right-to-left.
  47. ;  matrix should be 0 if none, else point to one. (See PRMs for format.)
  48.  
  49.         EXPORT stringbbox
  50. stringbbox
  51.     MOV ip,sp
  52.         STMFD   sp!,{r4-r6,lr}
  53.     LDR    r6, [ip]            ; ->matrix
  54.         MOV     r5, r2              ; coordinate block
  55.         TST     r3, #1
  56.         MOVEQ   r2, #(1<<5)         ; no kerning
  57.         MOVNE   r2, #(1<<5)+(1<<9)  ; kerning
  58.         TST     r3, #2
  59.         ORRNE   r2, r2, #(1<<10)    ; right to left
  60.         ORR     r2, r2, #(1<<18)    ; return bounding box
  61.     CMP    r6, #0
  62.     ORRNE    r2, r2, #(1<<6)     ; matrix used
  63.         MVN     r3, #&80000000
  64.         MVN     r4, #&80000000
  65.     MOV    ip, #0
  66.         STR     ip, [r5]            ; no extra offset on space
  67.         STR     ip, [r5,#4]
  68.         STR     ip, [r5,#8]         ; or between letters
  69.         STR     ip, [r5,#12]
  70.         MVN     ip, #0
  71.         STR     ip, [r5,#16]        ; no split character
  72.         SWI     X_Bit+Font_ScanString
  73.         LDMFD   sp!,{r4-r6,pc}^
  74.  
  75. ; int processpath(8 args);
  76. ;  calls the SWI Draw_ProcessPath with the arguments in the registers
  77. ;  and returns the resulting value of r0
  78.  
  79.     EXPORT processpath
  80. processpath
  81.     MOV    ip,sp
  82.     STMFD    sp!,{r4-r7,lr}
  83.     LDMIA    ip,{r4-r7}
  84.     SWI    X_Bit+Draw_ProcessPath
  85.     LDMFD    sp!,{r4-r7,pc}^
  86.  
  87. ; int gstrans(char *str, char *buf, int len);
  88. ;  calls OS_GSTrans on the string in str, putting output in buffer at buf
  89. ;  of length len.
  90. ;  Returns 0 for success, 1 for buffer overflow, 2 for bad string.
  91.  
  92.     EXPORT gstrans
  93. gstrans    SWI    X_Bit+OS_GSTrans
  94.     MOV    r0,#0
  95.     MOVCS    r0,#1
  96.     MOVVS    r0,#2
  97.     MOVS    pc,lr
  98.  
  99. ; int file_size(char *name);
  100. ;  returns -1 for failure.
  101.  
  102.     EXPORT file_size
  103. file_size
  104.     STMFD sp!,{r4,r5,lr}
  105.     MOV r1,r0
  106.     MOV r0,#17
  107.     SWI X_Bit+OS_File
  108.     MVNVS r0,#0    ; error?
  109.     LDMVSFD sp!,{r4,r5,pc}^
  110.     TST r0,#1    ; file or image file?
  111.     MVNEQ r0,#0    ; no, so return -1
  112.     MOVNE r0,r4    ; yes, so return length
  113.     LDMNEFD sp!,{r4,r5,pc}^
  114.  
  115. ; int load_file(char *name, void *address);
  116. ;  returns file length for success, -1 for failure.
  117.  
  118.     EXPORT load_file
  119. load_file
  120.     STMFD sp!,{r4,r5,lr}
  121.     MOV r2,r1    ; address in r2
  122.     MOV r1,r0    ; filename in r1
  123.     MOV r0,#16    ; load named file, no path
  124.     MOV r3,#0    ; use address in r2
  125.     SWI X_Bit+OS_File    ; NB this zaps r4,r5
  126.     MVNVS r0,#0    ; -1 if failure
  127.     MOVVC r0,r4    ; file length
  128.     LDMFD sp!,{r4,r5,pc}^
  129.  
  130. ; int mono_time(void);
  131. ;  return the result of calling SWI OS_ReadMonotonicTime.
  132. ;  Useful for seeding random number generators.
  133.  
  134.     EXPORT mono_time
  135. mono_time
  136.     SWI    X_Bit+OS_ReadMonotonicTime
  137.     MOVS    pc,lr
  138.  
  139.         END
  140.