home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 6 / AACD06.ISO / AACD / CDROM / GetCDDB / src / NEWGET~1.BB2 < prev   
Text File  |  2000-01-07  |  15KB  |  643 lines

  1. ;newgetcddb.bb2
  2.  
  3. VER$="$VER: GetCDDB V0.08 (23.12.99)"
  4. version$="GetCDDB v0.08b"
  5. v$="0.08B"
  6.  
  7. INCDIR "misc:data_/data/blitz_projects/getcddb/"
  8. XINCLUDE GetCDDB_BigFunc.bb2
  9. XINCLUDE GetCDDB_Consts.bb2
  10. XINCLUDE GetCDDB_MiscFuncs.bb2
  11.  
  12. WBStartup ; start from Workbench
  13. ;NoCli ; no default CLI
  14.  
  15. ;------------------------------------------------------------------------=
  16. .InitialiseVars
  17.  
  18. LoadFont 0,"XEN.font",8
  19. Use IntuiFont 0
  20. FindScreen screennum; get current screen
  21. ;Lets grab the screen's structure...
  22. *scr.Screen = Peek.l(Addr Screen(screennum))
  23. CaseSense 0
  24.  
  25. ;This routine will create the GetFile gadgets image...
  26. Gosub _MakeGetFileShapes
  27.  
  28. MaxLen discpath$=255
  29. discpath$=ProgsDir{}
  30. oldpath$=discpath$
  31.  
  32. ;scsidev$="scsi.device" ; don't make it default any more - OK unless
  33.  
  34. Gosub getconfig
  35.  
  36. Dim genrelist$(100)
  37. If Exists(ProgsDir{}+"CDDB.genres") ;for genres cycle gadget
  38.   If ReadFile(0,ProgsDir{}+"CDDB.genres")
  39.     FileInput 0
  40.     genre$=""
  41.     i.b=0
  42.     Repeat
  43.       inputstr$=Edit$(80)
  44.       If Len(inputstr$)>0
  45.         genre$+inputstr$+"|"
  46.         genrelist$(i)=inputstr$
  47.         If inputstr$="rock"
  48.           genre_num.b=i.b
  49.         EndIf
  50.         i+1
  51.       EndIf
  52.     Until Eof(0)
  53.   EndIf
  54. Else
  55.   genre$="blues|classical|country|data|folk|jazz|misc|newage|reggae|rock|soundtrack"
  56.   genrelist$(0)="blues"
  57.   genrelist$(1)="classical"
  58.   genrelist$(2)="country"
  59.   genrelist$(3)="data"
  60.   genrelist$(4)="folk"
  61.   genrelist$(5)="jazz"
  62.   genrelist$(6)="misc"
  63.   genrelist$(7)="newage"
  64.   genrelist$(8)="reggae"
  65.   genrelist$(9)="rock"
  66.   genrelist$(10)="soundtrack"
  67. EndIf
  68.  
  69. If NOT MakeCommodity("GetCDDB",version$,"Download CDID files from the Internet") Then End
  70. ;If NOT CreateCxBroker{"GetCDDB",version$,"Download CDID file from the Internet",0} Then End
  71.  
  72. If GetIconInfo(0,ProgsName{})
  73.   If IconTool$(0,"CX_POPUP")="YES"
  74.     cx_popup.b=-1
  75.     noreq.b=0
  76.   Else
  77.     cx_popup.b=0
  78.     noreq=-1
  79.   EndIf
  80.   hotkey$=IconTool$(0,"CX_POPKEY")
  81.   If IconTool$(0,"AUTO_GET")="NO"
  82.     enabled.b=0
  83.     SetCxStatus 0
  84.   Else
  85.     enabled.b=-1
  86.   EndIf
  87.   If IconTool$(0,"OVERWRITE")="YES"
  88.     overwrite.b=-1
  89.   Else
  90.     overwrite.b=0
  91.   EndIf
  92. Else
  93.   cx_popup.b=-1
  94.   noreq=0
  95.   hotkey$="ctrl lalt i"
  96. EndIf
  97. r.b=SetHotKey(0,hotkey$)
  98.  
  99.  
  100. ;If UCase$(ToolString{ProgsDir{}+ProgsName{},"CX_POPUP"})="YES"
  101. ;  cx_popup.b=-1
  102. ;  noreq.b=0
  103. ;Else
  104. ;  cx_popup.b=0
  105. ;  noreq=-1
  106. ;EndIf
  107. ;hotkey$=ToolString{ProgsName{},"CX_POPKEY"}
  108. ;If Len(hotkey$)>0
  109. ;  If SetHotKey(#_POPKEY,hotkey$)
  110. ;  Else
  111. ;  EndIf
  112. ;Else ; use default
  113. ;  If SetHotKey(#_POPKEY,"ctrl lalt i")
  114. ;  EndIf
  115. ;EndIf
  116. ;If UCase$(ToolString{ProgsName{},"AUTO_GET"})="NO"
  117. ;  enabled.b=0
  118. ;  SetCxStatus 0
  119. ;Else
  120. ;  enabled.b=-1
  121. ;EndIf
  122. ;If UCase$(ToolString{ProgsName{},"OVERWRITE"})="YES"
  123. ;  overwrite.b=-1
  124. ;Else
  125. ;  overwrite.b=0
  126. ;EndIf
  127.  
  128. ;--------------------------------------------------------------------
  129. ; Creates arexx port
  130. .arexx
  131.   If FindPort_ ("GETCDDB")
  132.     ErrorReq{"Something is masquerading as GetCDDB on your system"}
  133.     End
  134.   EndIf
  135.  
  136.   Port.l=CreateMsgPort("GETCDDB")
  137.   If Port.l=0
  138.     ErrorReq{"Unable to open message port"}
  139.     DeleteMsgPort Port.l
  140.     End
  141.  EndIf
  142.  
  143. ;------------------------------------------------------------------
  144. .InitialiseNEWTYPES
  145. ;
  146. #GT_TagBase = (1LSL31)+$80000 ; defined for use with BevelBox
  147. NEWTYPE.listview
  148.   flag.w
  149.   server$
  150. End NEWTYPE
  151.  
  152. Dim List serverlist.listview(100)
  153.  
  154. If AddItem(serverlist())
  155.   serverlist()\server="cddb.cddb.com"
  156. EndIf
  157. ;
  158. ;------------------------------------------------------------------
  159. .InitGads
  160. ;
  161. GTMX #_MAIN_WIN,#_CDPLAYER_MX,106,10,17,8,"",$1|$40,"OptyCDPlayer|SPlayer",num.b
  162. GTString #_MAIN_WIN,#_EMAIL_STRING,105,34,130,15,"Email Address:",$1,256,email$
  163. GTString #_MAIN_WIN,#_DEVICE_STRING,105,54,130,15,"Device:",$1,256,scsidev$
  164. GTTags $80080030,10
  165. GTInteger #_MAIN_WIN,#_UNIT_INTEGER,105,74,130,15,"Unit:",$1,scsiid
  166. GTShape #_MAIN_WIN,#_DISCDIR,216,95,0,0,1
  167. GTString #_MAIN_WIN,#_DISC_STRING,105,94,102,15,"Disc Dir:",$1,256,discpath$
  168. GTButton #_MAIN_WIN,#_RETRIEVE_BUTTON,136,11,60,15,"Retrieve",$10
  169. GTCycle #_MAIN_WIN,#_GENRE_CYCLE,105,114,130,15,"Genre:",$1,genre$,genre_num.b
  170. GTText #_MAIN_WIN,#_STATUS_TEXT,105,134,130,15,"Status:",0,"Ready..."
  171. GTButton #_MAIN_WIN,#_HIDE_BUTTON,203,11,30,15,"Hide",$10
  172.  
  173. ;GTButton #_SERVER_WIN,#_OK_BUTTON,100,90,60,15,"OK",$10
  174. GTTags #GTLV_ShowSelected,GTGadPtr(#_SERVER_WIN,#_SERVER_LIST)
  175. GTListView #_SERVER_WIN,#_SERVER_LIST,10,10,220,90,"",0,serverlist(),0
  176.  
  177. .InitMenus
  178. GTMenuTitle 0,#_PROJECT_MENU,"Project"
  179. GTMenuItem 0,%1001,0,#_AUTO_ITEM,"Auto Get"
  180. GTMenuItem 0,0,0,#_GENRE_ITEM,"Update Genres"
  181. GTMenuItem 0,#NM_ITEMDISABLED,0,#_SERVER_ITEM,"Get Server List"
  182. GTMenuItem 0,0,0,3
  183. GTMenuItem 0,0,0,#_HIDE_ITEM,"Hide"
  184. GTMenuItem 0,0,0,#_QUIT_ITEM,"Quit"
  185.  
  186. mainwin_x.w=10
  187. mainwin_y.w=15
  188. serverwin_x.w=10
  189. serverwin_y.w=15
  190.  
  191. If cx_popup.b=-1
  192.   Gosub OpenWindow
  193. EndIf
  194.  
  195. .Main
  196.  
  197. currentid$=GetCurrentId{}
  198.  
  199. ;Wait
  200. Repeat
  201.   Wait
  202.   winEvent.l=Event
  203.   CXmsg.l=CommodityEvent
  204.   Rmsg.l=RexxEvent(Port.l)
  205.  
  206.   If Rmsg.l
  207.     If IsRexxMsg(Rmsg.l)
  208.       Gosub HandleARexx
  209.     EndIf
  210.   EndIf
  211.   If CXmsg.l ; exchange message
  212.     Gosub HandleCX
  213.   EndIf
  214.   If winEvent
  215.     Gosub HandleIDCMP
  216.   EndIf
  217. Until winEvent=512 AND EventWindow=#_MAIN_WIN
  218. Gosub _quit
  219.  
  220.  
  221. ;
  222. ;---------------------------------------------------------------
  223. .OpenWindow
  224. ;
  225. ;DefaultIDCMP $024C077E ; set the IDCMP tags for window
  226.   DefaultIDCMP $40|$100|$200|$8000
  227.   Window #_MAIN_WIN,mainwin_x,mainwin_y,270,171,$20100e,version$,0,1
  228.   AttachGTList #_MAIN_WIN,#_MAIN_WIN
  229.   mainwinopen.b=-1
  230.   noreq.b=0
  231.   SetStatus{"Ready..."}
  232.   CreateMenuStrip 0
  233.   GTSetMenu 0
  234.   GTSetMenuChecked 0,#_PROJECT_MENU,#_AUTO_ITEM,enabled.b
  235.  
  236.   If serverwinwasopen.b=-1
  237.     Gosub OpenServerWindow
  238.   EndIf
  239. Return
  240.  
  241. .CloseWin
  242.   If serverwinopen.b=-1
  243.     Gosub CloseServerWin
  244.     serverwinwasopen.b=-1
  245.   Else
  246.     serverwinwasopen.b=0
  247.   EndIf
  248. ;  mainwin_x=WindowX
  249. ;  mainwin_y=WindowY
  250.   Free Window #_MAIN_WIN
  251.   DetachGTList #_MAIN_WIN
  252.   mainwinopen.b=0
  253.   noreq.b=-1
  254. Return
  255.  
  256. ;------------------------------------------------------------------------=
  257. .OpenServerWindow
  258.  
  259.   DefaultIDCMP $40|$200
  260.   Window #_SERVER_WIN,serverwin_x,serverwin_y,250,120,$20100e,"Select Server...",0,1
  261.   AttachGTList #_SERVER_WIN,#_SERVER_WIN
  262.   serverwinopen.b=-1
  263.   winlock.l=LockWindow{#_MAIN_WIN}
  264. Return
  265.  
  266. ;------------------------------------------------------------------------=
  267. .CloseServerWin
  268.   UnlockWindow{#_MAIN_WIN,winlock}
  269. ;  serverwin_x=WindowX
  270. ;  serverwin_y=WindowY
  271.   Free Window #_SERVER_WIN
  272.   DetachGTList #_SERVER_WIN
  273.   serverwinopen.b=0
  274. Return
  275.  
  276. ;------------------------------------------------------------------------=
  277. ._quit ; this can be used to build custom exit
  278. ;
  279. email$=GTGetString(#_MAIN_WIN,#_EMAIL_STRING)
  280. scsiid=GTGetInteger(#_MAIN_WIN,#_UNIT_INTEGER)
  281. scsidev$=GTGetString(#_MAIN_WIN,#_DEVICE_STRING)
  282. If Len(scsidev$)=0 Then scsidev$="scsi.device"
  283. discpath$=GTGetString(#_MAIN_WIN,#_DISC_STRING)
  284.  
  285. If mainwinopen.b=-1
  286.   Gosub CloseWin
  287. EndIf
  288. Free GTList #_MAIN_WIN
  289. Free GTList #_SERVER_WIN
  290. Free Screen screennum
  291. DeleteMsgPort Port.l
  292.  
  293. If WriteFile(0,ProgsDir{}+"GetCDDB.config")
  294.   FileOutput 0
  295.   NPrint email$
  296.   NPrint scsidev$
  297.   NPrint Str$(scsiid)
  298.   NPrint discpath$
  299.   NPrint cd_num.b
  300.   CloseFile 0
  301. EndIf
  302.  
  303.  
  304. End
  305. ; quit now!
  306. ;
  307. ;
  308. ;--------------------------------------------------------------
  309.  
  310. .Do_Retrieve
  311. Function.b Retrieve{genre$}
  312.  
  313.   SHARED scsidev$
  314.   SHARED scsiid
  315. ;  SHARED genrelist()
  316.   SHARED cdnum.b
  317.   SHARED genre_num.b
  318.   SHARED overwrite.b
  319.   SHARED discpath$
  320.   SHARED TOCCDID$
  321.  
  322.   If NOT Len(genre$)
  323.     genre$="rock"
  324.   EndIf
  325.  
  326.   If Exists(discpath$+TOCCDID$) AND overwrite.b=0 ;already got
  327.     SetStatus{"Operation successful"}
  328.     Function Return 0
  329.   EndIf
  330.  
  331.   email$=GTGetString(#_MAIN_WIN,#_EMAIL_STRING)
  332.   If Instr(email$,"@")=0 OR Len(email$)<3
  333.     ErrorReq{"Please supply a valid email address"}
  334.   Else
  335.     scsiid=GTGetInteger(#_MAIN_WIN,#_UNIT_INTEGER)
  336.     scsidev$=GTGetString(#_MAIN_WIN,#_DEVICE_STRING)
  337. ;    If Len(scsidev$)=0 Then scsidev$="scsi.device"
  338.     discpath$=GetDiscPath{}
  339. ;    cd_num.b=GTGetAttrs(#_MAIN_WIN,#_CDPLAYER_MX,#GTMX_Active)
  340.     If NOT cd_num.b
  341.       cdplayer$="optycdplayer"
  342.     Else
  343.       cdplayer$="splayer"
  344.     EndIf
  345.     ;genre$=genrelist$(genre_num.b)
  346.     res.b=GetCDDB{email$,scsidev$,scsiid,cdplayer$, LCase$(genre$)}
  347.  
  348.     If res.b<>-1
  349.       Select res.b
  350.         Case #_NOENTRY_ERROR
  351.           SetStatus{"No entry found"}
  352.         Default
  353.           SetStatus{"Operation failed"}
  354.       End Select
  355.       Function Return res.b
  356.     Else
  357.       SetStatus{"Operation successful"}
  358.       Function Return 0
  359.     EndIf
  360.   EndIf
  361. End Function
  362. ;Return
  363. ;------------------------------------------------------------
  364. .HandleIDCMP
  365.  
  366. Select EventWindow
  367.  
  368. Case #_SERVER_WIN
  369.   Select winEvent
  370.     Case $40
  371.       Select GadgetHit
  372.         Case #_SERVER_LIST
  373.           list_num.b=EventCode
  374.       End Select
  375.  
  376.     Case $200
  377.       Gosub CloseServerWin
  378.   End Select
  379.  
  380. Case #_MAIN_WIN
  381.   Select winEvent
  382.     Case $800000
  383.       Gosub HandleCX
  384.     Case $40
  385.       Select GadgetHit
  386.         Case #_DISCDIR ; Action for discdir here
  387.           ._discdir
  388.           a$=ASLPathRequest{"Select CDDA disc directory...",discpath$}
  389.  
  390.           If a$="nil:" ; our flag for "cancel" button pressed
  391.             a$=oldpath$
  392.           EndIf
  393.           GTSetString #_MAIN_WIN,#_DISC_STRING,a$
  394.           discpath$=a$
  395.           oldpath$=a$
  396.  
  397.         Case #_DISC_STRING ; Action for disc_string here
  398.           ._disc_string
  399.           discpath$=GTGetString(#_MAIN_WIN,#_DISC_STRING)
  400.  
  401.         Case #_RETRIEVE_BUTTON ; Action for retrieve_button here
  402.           res.b=Retrieve{genrelist$(genre_num.b)}
  403.  
  404.         Case #_GENRE_CYCLE ; Action for genre_cycle here
  405.           ._genre_cycle
  406.           genre_num.b=EventCode
  407.  
  408.         Case #_CDPLAYER_MX
  409.           ._cdplayer_mx
  410.           cd_num.b=EventCode
  411.  
  412.         Case #_HIDE_BUTTON
  413.           If mainwinopen.b=-1
  414.             Gosub CloseWin
  415.           EndIf
  416.  
  417.         Case #_DEVICE_STRING
  418.           scsidev$=GTGetString(#_MAIN_WIN,#_DEVICE_STRING)
  419.  
  420.         Case #_UNIT_INTEGER
  421.           scsiid=GTGetInteger(#_MAIN_WIN,#_UNIT_INTEGER)
  422.  
  423.       End Select
  424.  
  425.     Case $100
  426.       Select MenuHit
  427.         Case #_PROJECT_MENU
  428.           Select ItemHit
  429.             Case #_AUTO_ITEM
  430.               If GTMenuChecked(0,0,#_AUTO_ITEM)=-1
  431.                 Gosub _enable
  432.               Else
  433.                 Gosub _disable
  434.               EndIf
  435.             Case #_GENRE_ITEM
  436.               email$=GTGetString(#_MAIN_WIN,#_EMAIL_STRING)
  437.               server$="cddb.cddb.com"
  438.               cddbfile$="t:cddb.tmp"
  439.               If GetCDDBGenres{server$, cddbfile$, ProgsDir{}+"cddb.genres", email$}=-1
  440.                 SetStatus{"Update complete"}
  441.               Else
  442.                 SetStatus{"Update failed"}
  443.               EndIf
  444.               ;gosub update genres
  445.             Case #_SERVER_ITEM
  446.               Gosub OpenServerWindow
  447.               ;gosub get server list
  448.             Case #_HIDE_ITEM
  449.               If mainwinopen.b=-1
  450.                 Gosub CloseWin
  451.               EndIf
  452.             Case #_QUIT_ITEM
  453.               Gosub _quit
  454.           End Select
  455.       End Select
  456.  
  457.     Case $8000
  458.       If enabled.b=-1
  459.         ;check for new disc
  460.         newid$=GetCurrentId{}
  461.         discpath$=GetDiscPath{}
  462.         If newid$<>currentid$
  463.           ;we have a new disc
  464.           res.b=Retrieve{genrelist$(genre_num.b)}
  465.           currentid$=newid$
  466.         EndIf
  467.       EndIf
  468.   End Select ;#_MAIN_WIN
  469. End Select
  470.  
  471. Return
  472. ;--------------------------------------------------------------------
  473. ; Processes inputs from Exchange
  474.  
  475. .HandleCX
  476.  
  477. If HotKeyHit=0 ;our pop key has been hit
  478.   If mainwinopen.b=0
  479.     Gosub OpenWindow
  480.   Else
  481.     Activate #_MAIN_WIN
  482.   EndIf
  483. EndIf
  484.  
  485. Select ExchangeMessage
  486.  
  487.   Case #CXCMD_APPEAR
  488.     If mainwinopen.b=0
  489.       Gosub OpenWindow
  490.     Else
  491.       Activate #_MAIN_WIN
  492.     EndIf
  493.  
  494.   Case #CXCMD_DISAPPEAR
  495.     If mainwinopen.b=0
  496.       Gosub OpenWindow
  497.     Else
  498.       Activate #_MAIN_WIN
  499.     EndIf
  500.  
  501.   Case #CXCMD_DISABLE
  502.     Gosub _disable
  503.  
  504.   Case #CXCMD_ENABLE
  505.     Gosub _enable
  506.  
  507.   Case #CXCMD_KILL
  508.     Gosub _quit
  509.  
  510.   Case #CXCMD_UNIQUE
  511.     If mainwinopen.b=0
  512.       Gosub OpenWindow
  513.     Else
  514.       Activate #_MAIN_WIN
  515.     EndIf
  516. End Select
  517.  
  518. Return
  519.  
  520. ;--------------------------------------------------------------
  521. .HandleARexx
  522.  
  523. RxCmd$=GetRexxCommand(Rmsg,1)
  524.  
  525. res.b=1 ;default - if command is not recognised then it will return this
  526.  
  527. Select UCase$(RxCmd$)
  528.   Case "HIDE"
  529.     If mainwinopen.b=-1
  530.       Gosub CloseWin
  531.     EndIf
  532.     res.b=0
  533.  
  534.   Case "ENABLE"
  535.     Gosub _enable
  536.     res.b=0
  537.  
  538.   Case "DISABLE"
  539.     Gosub _disable
  540.     res.b=0
  541.  
  542.   Case "QUIT"
  543.     ReplyRexxMsg Rmsg,0,0,""
  544.     Gosub _quit
  545.  
  546. End Select
  547.  
  548. If Instr(RxCmd$,"RETRIEVE ")
  549.   genre$=LCase$(Replace$(RxCmd$,"RETRIEVE ",""))
  550.   res.b=Retrieve{genre$}
  551.   Select res.b
  552.     Case -1
  553.       res.b=0
  554.     Case #_READ_ERROR
  555.       res.b=2
  556.     Case #_WRITE_ERROR
  557.       res.b=3
  558.     Case #_FILE_ERROR
  559.       res.b=4
  560.     Case #_ARGS_ERROR
  561.       res.b=5
  562.     Case #_HTTP_ERROR
  563.       res.b=6
  564.     Case #_TCP_ERROR
  565.       res.b=7
  566.     Case #_CD_ERROR
  567.       res.b=8
  568.     Case #_NOENTRY_ERROR
  569.       res.b=9
  570.     Case #_SERVER_ERROR
  571.       res.b=10
  572.     Case #_CLIENT_ERROR
  573.       res.b=11
  574.     Case #_UNEXPECTED_ERROR
  575.       res.b=12
  576.   End Select
  577. EndIf
  578.  
  579. ReplyRexxMsg Rmsg,res.b,0,""
  580.  
  581. Return
  582. ;
  583. ._MakeGetFileShapes
  584. ;
  585. ; This is the engine to produce the
  586. ; GetFile shape. It will put the data
  587. ; into shape 0 and shape 1.
  588. BitMap 0,20,14,2
  589. For t = 0 To 1
  590.     Line 0,0,0,13,2-t : Line 1,0,1,13,2-t
  591.     Line 0,0,18,0,2-t
  592.     Line 18,0,18,13,1+t : Line 19,0,19,13,1+t
  593.     Line 0,13,18,13,1+t
  594.     Line 4,4,4,9,1 : Line 5,4,5,9,1
  595.     Line 4,10,14,10,1
  596.     Line 6,4,8,4,1 : Line 6,5,9,5,1
  597.     Line 15,10,15,7,1
  598.     Line 9,6,15,6,1
  599.     Plot 9,3,1 : Plot 10,2,1
  600.     Line 10,2,13,2,1 : Line 15,5,15,4,1 : Plot 14,3,1
  601.     GetaShape t,0,0,20,14
  602.     Cls 3
  603. Next
  604. Free BitMap 0
  605. ; These shapes can now be used in a
  606. ; GTShape gadget to produce the
  607. ; finished article.
  608. ; Shape 0 is the GadgetRender Image and
  609. ; Shape 1 is the SelectRender Image.
  610. ; NB. Changing values in the above graphics
  611. ; routine could lead to serious problems.
  612. ; You are advised to leave WELL ALONE!
  613. Return
  614. ;
  615.  
  616. .getconfig
  617.  
  618. If Exists(ProgsDir{}+"GetCDDB.config")
  619.   If ReadFile(0,ProgsDir{}+"GetCDDB.config")
  620.     FileInput 0
  621.     email$=Edit$(80)
  622.     scsidev$=Edit$(80)
  623.     scsiid=Value{Edit$(80)}
  624.     discpath$=Edit$(80)
  625.     num.b=Value{Edit$(80)}
  626.     CloseFile 0
  627.   Else
  628.     ErrorReq{"Unable to open config file"}
  629.   EndIf
  630. EndIf
  631.  
  632. Return
  633.  
  634. ._enable
  635.   SetCxStatus -1
  636.   enabled.b=-1
  637. Return
  638.  
  639. ._disable
  640.   SetCxStatus 0
  641.   enabled.b=0
  642. Return
  643.