home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / database / rroutine.zip / RROUTINE.ASM next >
Assembly Source File  |  1988-07-16  |  4KB  |  182 lines

  1. ;------------------------------------------------------------------------------
  2. ; Filename: EricRtn.ASM
  3. ; Program.: Clipper Extended Library
  4. ; Authors.: Eric Eisenhower
  5. ; Notes...: User-defined dBASE functions in 8086 assembly for Clipper.
  6. ; R&R Support Routines
  7. ;    RRPrn(n)    ::= Returns name of printer n from rr.cnf file
  8.    PUBLIC RRPrn
  9.  
  10. ; Clipper return value calls
  11.    EXTRN  __PARINFO:FAR ; fetch info on paramaters passed to me
  12.    EXTRN  __PARC:FAR    ; fetch character string
  13.    EXTRN  __PARDS:FAR   ; fetch date type from date string "YYYYMMDD"
  14.    EXTRN  __PARL:FAR    ; fetch logical true or false
  15.    EXTRN  __PARNI:FAR   ; fetch word as numeric
  16.    EXTRN  __PARNL:FAR   ; fetch double word as numeric
  17.    EXTRN  __PARND:FAR   ; fetch floating point as numeric
  18.  
  19.    EXTRN  __RETC:FAR    ; return character string
  20.    EXTRN  __RETDS:FAR   ; return date type from date string "YYYYMMDD"
  21.    EXTRN  __RETL:FAR    ; return logical true or false
  22.    EXTRN  __RETNI:FAR   ; return word as numeric
  23.    EXTRN  __RETNL:FAR   ; return double word as numeric
  24.    EXTRN  __RETND:FAR   ; return floating point as numeric
  25.  
  26. ; Macroes
  27.  
  28. CallDos MACRO    dosfunc        ;Call dos
  29.     MOV    AH,dosfunc
  30.     INT    21h
  31.     ENDM
  32.  
  33. RestR    MACRO        ;Restore registers
  34.     POP    ES
  35.     POP    DS
  36.     POP    BP
  37.     ENDM
  38.  
  39. SaveR    MACRO        ;Save registers
  40.     PUSH    BP
  41.     MOV    BP,SP
  42.     PUSH    DS
  43.     PUSH    ES
  44.     ENDM
  45.  
  46. Spooler MACRO SpoolFunc
  47.     MOV    AH,01
  48.     MOV    AL,SpoolFunc
  49.     INT    47
  50.     ENDM
  51.  
  52. RetInt  MACRO   Reg    ;Return Integer
  53.     PUSH    Reg
  54.     CALL    __RETNI
  55.     POP    Reg
  56.     ENDM
  57.  
  58. RetLog  MACRO   Reg    ;Return Logical
  59.     PUSH    Reg
  60.     CALL    __RETL
  61.     POP    Reg
  62.     ENDM
  63.  
  64. RetChar MACRO   Reg1,Reg2    ;Return Character
  65.     PUSH    Reg1
  66.     PUSH    Reg2
  67.     CALL    __RETC
  68.     ADD    SP,4
  69.     ENDM
  70.  
  71. GetChar MACRO    num        ;Get character parameter
  72.     MOV    AX,num        ;Get parameter <num> by
  73.     PUSH    AX        ;putting <num> on the stack
  74.     CALL    __PARC        ;Get character parameter
  75.     ADD    SP,2        ;Fix up stack
  76.     ENDM            ;DX:AX points to ASCIIZ string
  77.  
  78. GetInt    MACRO    num        ;Get character parameter
  79.     MOV    AX,num        ;Get parameter <num> by
  80.     PUSH    AX        ;putting <num> on the stack
  81.     CALL    __PARNI        ;Get character parameter
  82.     ADD    SP,2        ;Fix up stack
  83.     ENDM            ;AX:BX points to ASCIIZ string
  84.  
  85. DGROUP  GROUP   DATASG  ; Clipper's Data Segment
  86.  
  87. ; the 'public' in the next statement combines the datasg
  88. ; to Clipper's DGROUP group
  89. DATASG  SEGMENT PUBLIC  'DATA'
  90. RRCNF    DB    'RR.CNF',00,'$'    ; rr.cnf configuration file
  91. RRRTYPE    DW    ?
  92. RRRLEN    DW    ?
  93. RRPRINT DW    15 DUP (?)
  94.  
  95. DATASG  ENDS            ; end of datasg (in DGROUP)
  96.  
  97. _PROG SEGMENT    'CODE'
  98.  
  99.     ASSUME CS:_PROG,DS:DATASG,ES:DATASG
  100.  
  101. ;--
  102. ;  RRPrn()
  103. ;  Syntax: RRPrn(n)
  104. ;  Return: Name of printer n from rr.cnf file
  105.  
  106. RRPrn    PROC FAR
  107.     SaveR
  108.     GetInt    1
  109.     PUSH    AX        ; Save it temporarily
  110.  
  111.     MOV    AX,SEG RRCNF
  112.     MOV    DS,AX
  113.     MOV    RRPRINT,0000h    ;Clear out return value
  114.     MOV    DX,OFFSET RRCNF
  115.     MOV    AL,00        ;read only
  116.     CallDos 3dH        ;Open file
  117.     JC    RRBAD
  118.     MOV    BX,AX        ;file handle
  119.  
  120. RREADh:
  121.     MOV    CX,04            ;read 4 bytes
  122.     MOV    DX,OFFSET RRRTYPE    ;buffer
  123.     CallDos 3Fh            ;read
  124.     JC    RRCLOSE
  125.     CMP    AX,04            ;Did we get four bytes? (is it EOF)
  126.     JC    RRCLOSE
  127.     CMP    RRRTYPE,0104h        ;Is record type Printer name?
  128. RREADh2:
  129.  
  130.     JE    RRREADp            ;Yes? goto readp (read printer name)
  131.     MOV    CX,0            ;
  132.     MOV    DX,RRRLEN        ;read rest of record
  133.     MOV    AL,1
  134.     CallDos 42h
  135.     JC    RRCLOSE
  136.     JMP    RREADh
  137.  
  138. RRREADp:
  139.     POP    AX
  140.     DEC    AX
  141.     PUSH    AX
  142.     CMP    AX,0
  143.     JG    RREADh2
  144.     MOV    CX,RRRLEN        ;read ? bytes
  145.     MOV    DX,OFFSET RRPRINT    ;buffer
  146.     MOV    SI,DX
  147.     ADD    SI,RRRLEN
  148.     MOV    BYTE PTR [SI],00h    ; null terminate byte
  149.     INC    SI
  150.     MOV    BYTE PTR [SI],00h    ; null terminate byte
  151.     CallDos 3Fh            ;read
  152.  
  153. RRCLOSE:
  154.     CallDos 3eH        ;Close file
  155.     JMP    RROK
  156.  
  157. RRBAD:    MOV    BX,AX
  158.     JMP    RRDONE
  159.  
  160. RROK:    MOV    BX,0
  161.  
  162.     
  163. RRDONE:
  164.     POP    BX    ;get rid of param
  165.     MOV    AX,DS
  166.     MOV    BX,OFFSET RRPRINT
  167.     INC    BX
  168.     RestR
  169.     RetChar    AX,BX
  170.  
  171.     RET
  172.  
  173. RRPrn    ENDP
  174.  
  175.  
  176. _PROG ENDS
  177.  
  178.     END
  179.  
  180. ; EOF EricRtn.asm -----------------------------------------------------------
  181.  
  182.