;****************************************************************************
; FNDMOD.M68    -       "Find Module" subroutine
;
;       Written by:     Dave Heyliger - AMUS Staff
;
;       Purpose:        To search user memory for the specified module
;                       that may or may not be in their memory partition
;
;       Usage:          XCALL FNDMOD,module,result
;
;               where   module is MAP1,S,30     (module name in string format)
;                       result is MAP1,F        (1 = "true" ; 0 = "false")
;
;       Sample BASIC program:
;
;               module = "BOGUS.MOD"
;               XCALL FNDMOD,module,result
;               IF result = 0 THEN PRINT "module not found, fella!" &
;                             ELSE PRINT "module found!"
;
;****************************************************************************

       OBJNAM  .SBR                            ;final result is FNDMOD.SBR

       SEARCH  SYS                             ;get the regulars
       SEARCH  SYSSYM
       SEARCH  TRM

       ;define version number
       VMAJOR = 1                              ;original by Dave Heyliger
       VMINOR = 0                              ; version 1.0(100)
       VEDIT = 100.

       ;define some workspace - A4 default pointer
       .OFINI                                  ;a variable buffer
       .OFDEF  BUFFER,30.                      ;"oversized" buffer space
       .OFSIZ  IMPSIZ                          ;definitions done

       PHDR    -1,0,PH$REE!PH$REU              ;good programming!

       ;error checking first:
       CMPW    @A3,#2                          ;2 arguments?
       BNE     10$                             ;nope, error
       CMPW    2(A3),#2                        ;first argument a string?
       BNE     10$                             ;nope, error
       CMPW    12.(A3),#4                      ;second argument float. pt?
       BEQ     20$                             ;yup, looks good

       ;error in input, inform the user
10$:    TYPECR  <Usage: XCALL FNDMOD,module,result>
       TYPECR  <       where module is a string>
       TYPECR  <       and result is floating point.>
       RTN

       ;input looks good - let's get on with it!
20$:    MOV     4(A3),A2                        ;A2 points to module string
       FILNAM  BUFFER(A4),MOD                  ;default extension is .MOD
       SRCH    @A4,A0,F.USR                    ;look only in users memory
       BEQ     40$                             ;found it!

       ;didn't find the module - set result to "0" in floating point notation
       MOV     #0,D1                           ;"0" = false
30$:    MOV     16(A3),A0                       ;A0 points to variable
       FLTOF   D1,@A0                          ;set result to false
       RTN

       ;found the module - set result to "1" in floating point notation
40$:    MOV     #1,D1                           ;"1" = found
       BR      30$                             ;continue w/ above code

       END