home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 9 / FreshFishVol9-CD2.bin / bbs / util / apppp-1.1.lha / AppPP / AppPP.S.pp / AppPP.S
Text File  |  1994-07-26  |  121KB  |  4,252 lines

  1.  
  2. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  3. *                                    *
  4. *                                    *
  5. *             * * * *                        *
  6. *            *      *                        *
  7. *           *     *   _________________________________________    *
  8. *          *     *   /                         /    *
  9. *         *     *   /  Code Source Assembleur de AppPP v1.1  /    *
  10. *         *     *   /                       /    *
  11. *  * * * *     *     *   /  Assembly Source Code of  AppPP v1.1   /    *
  12. *   *     *   *     *    /                     /    *
  13. *    *     * *     *   /         - by BURNAND Patrick -        /    *
  14. *     *     *      *   /                           /    *
  15. *      *     *    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯        *
  16. *    * * * * *                            *
  17. *                                    *
  18. *                                    *
  19. *                                    *
  20. *   Ce code source est distribué avec le package AppPP et ne doit pas    *
  21. *   être distribué autrement.  Il doit toujours être maintenu dans sa    *
  22. *   forme originale et non-modifiée. Ce fichier est distribué pour l'    *
  23. *   apprentisage et comme example seulement. Vous avez l'autorisation    *
  24. *   d'imprimer  ce  fichier,  mais  vous  n'avez  pas  le droit de le    *
  25. *   distribuer  sous forme d'imprimé.   Si vous voulez faire d'autres    *
  26. *   usages  de ce code source,  contacter l'auteur.    Mon adresse se    *
  27. *   trouve dans la doc de ce programme.                    *
  28. *                                    *
  29. *                                    *
  30. *   This  source  code  is distributed with the AppPP package and may    *
  31. *   not be distrbuted by another way.    It  must  always  be kept in    *
  32. *   original and unmodifed form.   This file is distributed for lear-    *
  33. *   ning purposes and as example only.  You are allowed to print this    *
  34. *   file but you aren't allowed to distribute it in printed form.  If    *
  35. *   you     want  to  make others uses of this source code,  contact the    *
  36. *   author.  My adress can be found in the doc file of this program.    *
  37. *                                    *
  38. *                                    *
  39. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  40.  
  41.  
  42.  
  43.  
  44. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  45. *   Définition des constantes.  (Ne prend pas de place dans le code)  * *
  46. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  47.  
  48. ExecBase               =          4
  49.  
  50. OpenScreenTagList      =       -612
  51. OpenWindowTagList      =       -606
  52. CloseScreen            =        -66
  53. CloseWindow            =        -72
  54. PrintIText             =       -216
  55. LockPubScreen          =       -510
  56. UnlockPubScreen        =       -516
  57. SetMenuStrip           =       -264
  58. ClearMenuStrip         =        -54
  59. EasyRequestArgs        =     -$024c
  60. GetVisualInfoA         =       -126
  61. FreeVisualInfo         =       -132
  62. CreateContext          =       -114
  63. CreateGadgetA          =        -30
  64. GT_RefreshWindow       =        -84
  65. FreeGadgets            =        -36
  66. CreateMenusA           =        -48
  67. LayoutMenusA           =        -66
  68. FreeMenus              =        -54
  69. OpenDiskFont           =        -30
  70. CloseFont              =        -78
  71. DrawBevelBoxA          =       -120
  72. FreeClass              =       -714
  73. NewObjectA             =       -636
  74. DisposeObject          =       -642
  75. TextLength             =        -54
  76. CopyMem                =       -624
  77. FindTagItem            =        -30
  78. IntuiTextLength        =       -330
  79. FindTask               =     -$0126
  80. Forbid                 =       -132
  81. Permit                 =       -138
  82. OpenLibrary            =       -552
  83. CloseLibrary           =       -414
  84. SetTaskPri             =     -$012c
  85. AllocFileRequest       =     -$001e
  86. FreeFileRequest        =     -$0024
  87. RequestFile            =     -$002a
  88. AllocAslRequest        =     -$0030
  89. FreeAslRequest         =     -$0036
  90. AslRequest             =     -$003c
  91. WaitPort               =     -$0180
  92. GT_GetIMsg             =     -$0048
  93. GT_ReplyIMsg           =     -$004e
  94. GT_BeginRefresh        =     -$005a
  95. GT_EndRefresh          =     -$0060
  96. GT_SetGadgetAttrsA     =     -$002a
  97. GetDiskObjectNew       =     -$0084
  98. CreateMsgPort          =     -$029a
  99. DeleteMsgPort          =     -$02a0
  100. AddAppIconA            =     -$003c
  101. RemoveAppIcon          =     -$0042
  102. GetMsg                 =     -$0174
  103. ReplyMsg               =     -$017a
  104. FreeMem                =     -$00d2
  105. AllocMem               =     -$00c6
  106. CurrentDir             =     -$007e
  107. OpenFromLock           =     -$017a
  108. Open                   =     -$001e
  109. Close                  =     -$0024
  110. Read                   =     -$002a
  111. Write                  =     -$0030
  112. DeleteFile             =     -$0048
  113. FPutS                  =     -$0156
  114. FPutC                  =     -$0138
  115. PutStr                 =     -$03b4
  116. Flush                  =     -$0168
  117. AllocDosObject         =     -$00e4
  118. FreeDosObject          =     -$00ea
  119. Examine                =     -$0066
  120. GetProgramDir          =     -$0258
  121. NameFromLock           =     -$0192
  122. AddPart                =     -$0372
  123. Lock                   =     -$0054
  124. UnLock                 =     -$005a
  125. Output                 =     -$003c
  126. Delay                  =     -$00c6
  127.  
  128. ; -- PowerPacker.library --
  129. ppLoadData             =     -$001e
  130. ppDecrunchBuffer       =     -$0024
  131. ppCalcChecksum         =     -$002A
  132. ppCalcPasskey          =     -$0030
  133. ppDecrypt              =     -$0036
  134. ppGetPassword          =     -$003C
  135. ppAllocCrunchInfo      =     -$0060
  136. ppFreeCrunchInfo       =     -$0066
  137. ppCrunchBuffer         =     -$006C
  138. ppWriteDataHeader      =     -$0072
  139. ppEnterPassword        =     -$0078
  140. ppErrorMessage         =     -$0084
  141.  
  142. ; -- Icon.library --
  143. GetDiskObject          =     -$004e
  144. PutDiskObject          =     -$0054
  145. FreeDiskObject         =     -$005a
  146. DeleteDiskObject       =     -$008a
  147.  
  148.  
  149. ;________________________________________________________________________
  150.  
  151.  
  152. ; -- MenuItem --
  153. CheckIt                =       $0001
  154. ItemText               =       $0002
  155. CommSeq                =       $0004
  156. MenuToggle             =       $0008
  157. ItemEnabled            =       $0010
  158. HighFlags              =       $00c0
  159. HighImage              =       $0000
  160. HighComp               =       $0040
  161. HighBox                =       $0080
  162. HighNone               =       $00c0
  163. Checked                =       $0100
  164. IsDrawn                =       $1000
  165. HighItem               =       $2000
  166. MenuToggled            =       $4000
  167.  
  168. ; -- Requester --
  169. PointRel               =       $0001
  170. PreDrawn               =       $0002
  171. NoisyReq               =       $0004
  172. SimpleReq              =       $0010
  173. UserReqImage           =       $0020
  174. NoReqBackFill          =       $0040
  175. ReqOffWindow           =       $1000
  176. ReqActive              =       $2000
  177. SysRequest             =       $4000
  178. DeferRefresh           =       $8000
  179.  
  180. ; -- Gadget --
  181. GFLG_GadHighBits       =       $0003
  182. GFLG_GadGhComp         =       $0000
  183. GFLG_GadGhBox          =       $0001
  184. GFLG_GadGhImage        =       $0002
  185. GFLG_GadGhNone         =       $0003
  186. GFLG_GadgImage         =       $0004
  187. GFLG_RelBottom         =       $0008
  188. GFLG_RelRight          =       $0010
  189. GFLG_RelWidth          =       $0020
  190. GFLG_RelHeight         =       $0040
  191. GFLG_Selected          =       $0080
  192. GFLG_Disabled          =       $0100
  193. GFLG_LabelMask         =       $3000
  194. GFLG_LabelIText        =       $0000
  195. GFLG_LabelString       =       $1000
  196. GFLG_LabelImage        =       $2000
  197. GFLG_TabCycle          =       $0200
  198. GFLG_StringExtend      =       $0400
  199. GACT_RelVerify         =       $0001
  200. GACT_Immediate         =       $0002
  201. GACT_EndGadget         =       $0004
  202. GACT_FollowMouse       =       $0008
  203. GACT_RightBorder       =       $0010
  204. GACT_LeftBorder        =       $0020
  205. GACT_TopBorder         =       $0040
  206. GACT_BottomBorder      =       $0080
  207. GACT_BorderSniff       =       $8000
  208. GACT_ToggleSelect      =       $0100
  209. GACT_BoolExtend        =       $2000
  210. GACT_StringLeft        =       $0000
  211. GACT_StringCenter      =       $0200
  212. GACT_StringRight       =       $0400
  213. GACT_LongInt           =       $0800
  214. GACT_AltKeymap         =       $1000
  215. GACT_StringExtend      =       $2000
  216. GACT_ActiveGadget      =       $4000
  217. GTYP_GadgetType        =       $fc00
  218. GTYP_SysGadget         =       $8000
  219. GTYP_ScrGadget         =       $4000
  220. GTYP_GzzGadget         =       $2000
  221. GTYP_ReqGadget         =       $1000
  222. GTYP_Sizing            =       $0010
  223. GTYP_WDragging         =       $0020
  224. GTYP_SDragging         =       $0030
  225. GTYP_WUpFront          =       $0040
  226. GTYP_SUpFront          =       $0050
  227. GTYP_WDownBack         =       $0060
  228. GTYP_SDownBack         =       $0070
  229. GTYP_Close             =       $0080
  230. GTYP_BoolGadget        =       $0001
  231. GTYP_Gadget0002        =       $0002
  232. GTYP_PropGadget        =       $0003
  233. GTYP_StrGadget         =       $0004
  234. GTYP_CustomGadget      =       $0005
  235. GTYP_GTYPMask          =       $0004
  236.  
  237. ; -- BoolInfo --
  238. BoolMask               =       $0001
  239.  
  240. ; -- IDCMPMessage --
  241. IDCMP_SizeVerify       =   $00000001
  242. IDCMP_NewSize          =   $00000002
  243. IDCMP_RefreshWindow    =   $00000004
  244. IDCMP_MouseButtons     =   $00000008
  245. IDCMP_MouseMove        =   $00000010
  246. IDCMP_GadgetDown       =   $00000020
  247. IDCMP_GadgetUp         =   $00000040
  248. IDCMP_ReqSet           =   $00000080
  249. IDCMP_MenuPick         =   $00000100
  250. IDCMP_CloseWindow      =   $00000200
  251. IDCMP_RawKey           =   $00000400
  252. IDCMP_ReqVerify        =   $00000800
  253. IDCMP_ReqClear         =   $00001000
  254. IDCMP_MenuVerify       =   $00002000
  255. IDCMP_NewPrefs         =   $00004000
  256. IDCMP_DiskInserted     =   $00008000
  257. IDCMP_DiskRemoved      =   $00010000
  258. IDCMP_WBenchMessage    =   $00020000
  259. IDCMP_ActiveWindow     =   $00040000
  260. IDCMP_InactiveWindow   =   $00080000
  261. IDCMP_DeltaMove        =   $00100000
  262. IDCMP_VanillaKey       =   $00200000
  263. IDCMP_Intuiticks       =   $00400000
  264. IDCMP_IDCMPUpdate      =   $00800000
  265. IDCMP_MenuHelp         =   $01000000
  266. IDCMP_ChangeWindow     =   $02000000
  267. IDCMP_LonelyMessage    =   $80000000
  268. MenuHot                =       $0001
  269. MenuCancel             =       $0002
  270. MenuWaiting            =       $0003
  271. OkOk                   =   MenuHot
  272. OkAbort                =       $0004
  273. OkCancel               =   MenuCancel
  274. WBenchOpen             =       $0001
  275. WBenchClose            =       $0002
  276.  
  277. ; -- NewWindow --
  278. WFLG_SizeGadget        =       $0001
  279. WFLG_DragBar           =       $0002
  280. WFLG_DepthGadget       =       $0004
  281. WFLG_CloseGadget       =       $0008
  282. WFLG_SizeBright        =       $0010
  283. WFLG_SizeBottom        =       $0020
  284. WFLG_RefreshBits       =       $00c0
  285. WFLG_Smart_Refresh     =       $0000
  286. WFLG_Simple_Refresh    =       $0040
  287. WFLG_Super_Bitmap      =       $0080
  288. WFLG_Other_Refresh     =       $00c0
  289. WFLG_BackDrop          =       $0100
  290. WFLG_ReportMouse       =       $0200
  291. WFLG_GimmeZeroZero     =       $0400
  292. WFLG_BorderLess        =       $0800
  293. WFLG_Activate          =       $1000
  294. WFLG_WindowActive      =       $2000
  295. WFLG_InRequest         =       $4000
  296. WFLG_MenuState         =       $8000
  297. WFLG_RmbTrap           =   $00010000
  298. WFLG_NoCareRefresh     =   $00020000
  299. WFLG_WindowRefresh     =   $01000000
  300. WFLG_WBenchWindow      =   $02000000
  301. WFLG_WindowTicked      =   $04000000
  302. SuperUnused            =   $fcfc0000
  303. WFLG_NwExtended        =   $00040000
  304. WFLG_Visitor           =   $08000000
  305. WFLG_Zoomed            =   $10000000
  306. WFLG_HasZoom           =   $20000000
  307. DefaultMouseQueue      =           5
  308.  
  309. ; -- IntuiText --
  310. It_LeftEdge            =           4
  311. It_TopEdge             =           6
  312. It_ITextFont           =           8
  313. It_SIZEOF              =          20
  314.  
  315. ;-- RastPort --
  316. rp_Font                =          52
  317.  
  318.  
  319. ; -- GadTools --
  320. Generic_Kind           =           0
  321. Button_Kind            =           1
  322. CheckBox_Kind          =           2
  323. Integer_Kind           =           3
  324. ListView_Kind          =           4
  325. MX_Kind                =           5
  326. Number_Kind            =           6
  327. Cycle_Kind             =           7
  328. Palette_Kind           =           8
  329. Scroller_Kind          =           9
  330. Slider_Kind            =          11
  331. String_Kind            =          12
  332. Text_Kind              =          13
  333. Num_Kinds              =          14
  334. ButtonIDCMP            =   IDCMP_GadgetUp
  335. CheckBoxIDCMP          =   IDCMP_GadgetUp
  336. IntegerIDCMP           =   IDCMP_GadgetUp
  337. ;ListViewIDCMP          =   IDCMP_GadgetUp!IDCMP_GadgetDown!IDCMP_MouseMove!IDCMP_ArrowIDCMP
  338. MxIDCMP                =   IDCMP_GadgetDown
  339. NumberIDCMP            =   0
  340. CycleIDCMP             =   IDCMP_GadgetUp
  341. PaletteIDCMP           =   IDCMP_GadgetUp
  342. ScrollerIDCMP          =   IDCMP_GadgetUp!IDCMP_GadgetDown!IDCMP_MouseMove ;IDCMP_ArrowIDCMP!IDCMP_ScrollerIDCMP
  343. SliderIDCMP            =   IDCMP_GadgetUp!IDCMP_GadgetDown!IDCMP_MouseMove
  344. StringIDCMP            =   IDCMP_GadgetUp
  345. TextIDCMP              =   0
  346. GadToolsBit            =       $8000
  347. PlaceText_Left         =       $0001
  348. PlaceText_Right        =       $0002
  349. PlaceText_Above        =       $0004
  350. PlaceText_Below        =       $0008
  351. PlaceText_In           =       $0010
  352. Ng_HighLabel           =       $0020
  353. Nm_Title               =           1
  354. Nm_Item                =           2
  355. Nm_Sub                 =           3
  356. Nm_End                 =           0
  357. Menu_Image             =         128
  358. Nm_BarLabel            =          -1
  359. Ga_TabCycle            =   $80030024
  360. GtMX_Labels            =   $80080009
  361. GtBB_Recessed          =   $80080033
  362. GT_VisualInfo          =   $80080034
  363. GTCB_Checked           =   $80080004
  364. GTNM_Number            =   $8008000d
  365. GTNM_Border            =   $8008003a
  366. GTTX_Text              =   $8008000b
  367. GTTX_CopyText          =   $8008000c
  368. GTCY_Labels            =   $8008000e
  369. GTCY_Active            =   $8008000f
  370. GTSL_Min               =   $80080026
  371. GTSL_Max               =   $80080027
  372. GTSL_Level             =   $80080028
  373. GTSL_MaxLevelLen       =   $80080029
  374. GTSL_LevelFormat       =   $8008002a
  375. GTSL_LevelPlace        =   $8008002b
  376. GTSL_DispFunc          =   $8008002c
  377. GTST_String            =   $8008002d
  378. GTST_MaxChars          =   $8008002e
  379. GTIN_Number            =   $8008002F
  380. GTIN_MaxChars          =   $80080030
  381. GTTX_Border            =   $80080039
  382.  
  383. ; -- IntuiMessage --
  384. IMsg_Class             =          20
  385. IMsg_Code              =          24
  386. IMsg_Qualifier         =          26
  387. IMsg_IAdress           =          28
  388.  
  389. ; -- Gadget --
  390. SpecialInfo            =          34
  391. GadgetID               =          38
  392.  
  393. ; -- Intuition --
  394. LOrient_None           =   $00000000
  395. LOrient_Horiz          =   $00000001
  396. LOrient_Vert           =   $00000002
  397. GA_Immediate           =   $80030015
  398. GA_RelVerify           =   $80030016
  399. GA_Disabled            =   $8003000e
  400. PGA_FreeDom            =   $80031001
  401.  
  402. ; -- Asl --
  403. ASL_Hail               =   $80080001
  404. ASL_Window             =   $80080002
  405. ASL_File               =   $80080008
  406. ASL_Dir                =   $80080009
  407. ASL_OKText             =   $80080012
  408. ASL_CancelText         =   $80080013
  409. ASL_FuncFlags          =   $80080014
  410. ASL_ExtFlags1          =   $80080016
  411.  
  412. ; -- AslRequestStruct --
  413. rf_File                =           4
  414. rf_Dir                 =           8
  415.  
  416. ; -- TagItem --
  417. Tag_Done               =          0
  418. Tag_User               =  $80000000
  419.  
  420. ; -- Screen --
  421. sc_Width               =         12
  422. sc_Height              =         14
  423. sc_WBorTop             =         35
  424. sc_WBorLeft            =         36
  425. sc_WBorRight           =         37
  426. sc_WBorBottom          =         38
  427. sc_Font                =         40
  428. sc_RastPort            =         84
  429.  
  430. ; -- ExtNewWindow --
  431. WA_Left                =  $80000064
  432. WA_Top                 =  $80000065
  433. WA_Width               =  $80000066
  434. WA_Height              =  $80000067
  435. WA_IDCMP               =  $8000006a
  436. WA_Flags               =  $8000006b
  437. WA_Gadgets             =  $8000006c
  438. WA_Title               =  $8000006e
  439. WA_AutoAdjust          =  $80000090
  440.  
  441. ; -- TextAttr --
  442. Ta_Name                =          0
  443. Ta_YSize               =          4
  444. Ta_Style               =          6
  445. Ta_Flags               =          7
  446.  
  447. ; -- GraphicsBase --
  448. DefaultFont            =        154
  449.  
  450. ; -- TextFont --
  451. tf_Message__ln_Name    =         10
  452. tf_YSize               =         20
  453. tf_XSize               =         24
  454.  
  455. ; -- NewGadget --
  456. gng_SizeOf             =         30
  457. gng_LeftEdge           =          0
  458. gng_TopEdge            =          2
  459. gng_Width              =          4
  460. gng_Height             =          6
  461. gng_GadgetText         =          8
  462. gng_TextAttr           =         12
  463. gng_GadgetID           =         16
  464. gng_Flags              =         18
  465. gng_VisualInfo         =         22
  466. gng_UserData           =         26
  467.  
  468. ; -- PowerPacker --
  469. Decr_Col0              =          0
  470. Decr_Col1              =          1
  471. Decr_Pointer           =          2
  472. Decr_Scroll            =          3
  473. Decr_None              =          4
  474. SpeedUp_BuffLarge      =          0
  475. SpeedUp_BuffMedium     =          1
  476. SpeedUp_BuffSmall      =          2
  477. Crun_Fast              =          0
  478. Crun_Mediocre          =          1
  479. Crun_Good              =          2
  480. Crun_VeryGood          =          3
  481. Crun_Best              =          4
  482.  
  483. ; -- Window --
  484. Wd_RPort               =         50
  485. Wd_BorderLeft          =         54
  486. Wd_BorderTop           =         55
  487. Wd_BorderRight         =         56
  488. Wd_BorderBottom        =         57
  489. Wd_BorderRPort         =         58
  490. wd_IFont               =        128
  491.  
  492. ; -- StringInfo --
  493. Buffer                 =          0
  494. UndoBuffer             =          4
  495. BufferPos              =          8
  496. MaxChars               =         10
  497. LongInt                =         28
  498.  
  499.  
  500. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  501. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  502.  
  503. GD_Working_Crunch      =   0
  504. GD_Working_Decrunch    =   1
  505. GD_Working_Nothing     =   2
  506. GD_Working_Skip        =   3
  507. GD_Working_Stop        =   4
  508. GD_Working_Status      =   5
  509. GD_Working_Name        =   6
  510. GD_Working_Length      =   7
  511. GD_Working_Dest        =   8
  512.  
  513. GD_Config_UseAltPath   =   0
  514. GD_Config_Eff          =   1
  515. GD_Config_Buf          =   2
  516. GD_Config_DecrEff      =   3
  517. GD_Config_Save         =   4
  518. GD_Config_Use          =   5
  519. GD_Config_Cancel       =   6
  520. GD_Config_Quit         =   7
  521. GD_Config_Get          =   8
  522. GD_Config_About        =   9
  523. GD_Config_CopyIcons    =   10
  524. GD_Config_Add_pp       =   11
  525. GD_Config_Rem_pp       =   12
  526. GD_Config_Priority     =   13
  527. GD_Config_AppIconX     =   14
  528. GD_Config_AppIconY     =   15
  529. GD_Config_AltPath      =   16
  530.  
  531. GD_About_Inter         =   0
  532.  
  533. Working_CNT            =   9        ; Nombres de gadgets
  534. Config_CNT             =  17
  535. About_CNT              =   1
  536. GadgetMaxNumber        =  17
  537.  
  538. Working_TNUM           =   0
  539. Config_TNUM            =   0
  540. About_TNUM             =   6
  541.  
  542. WorkingLeft            =  98        ; Working Window
  543. WorkingTop             =  88
  544. WorkingWidth           = 361
  545. WorkingHeight          = 159
  546.  
  547. Working0_Left          =  12        ; Working BevelBox 0
  548. Working0_Top           =  33
  549. Working0_Width         = 337
  550. Working0_Height        = 115
  551.  
  552. Working1_Left          =   3        ; Working BevelBox 1
  553. Working1_Top           =   4
  554. Working1_Width         = 353
  555. Working1_Height        = 151
  556.  
  557. ConfigLeft             = 120        ; Config Window
  558. ConfigTop              =  83
  559. ConfigWidth            = 306
  560. ConfigHeight           = 259
  561.  
  562. Config0_Left           =   4        ; Config BevelBox 0
  563. Config0_Top            =  85
  564. Config0_Width          = 298
  565. Config0_Height         =  56
  566.  
  567. Config1_Left           =   4        ; Config BevelBox 1
  568. Config1_Top            =   5
  569. Config1_Width          = 298
  570. Config1_Height         =  74
  571.  
  572. Config2_Left           =   4        ; Config BevelBox 2
  573. Config2_Top            = 147
  574. Config2_Width          = 298
  575. Config2_Height         =  81
  576.  
  577. AboutLeft              = 209        ; About Window
  578. AboutTop               =  49
  579. AboutWidth             = 352
  580. AboutHeight            = 198
  581.  
  582. About0_Left            =   5        ; About BevelBox 0
  583. About0_Top             =   6
  584. About0_Width           = 341
  585. About0_Height          = 155
  586.  
  587. FileNameBufferL        = 256
  588. FileNameBufferLL       = 264
  589. ConfigBufferL          = 488
  590.  
  591. ; -- ConfigBuffer --
  592. CP_Config_Version      =   0    ; >   0
  593. CP_Config_UseAltPath   =   1    ; >   1
  594. CP_Config_Efficiency   =   2    ; >   2
  595. CP_Config_Buffer       =   3    ; >   3
  596. CP_Config_Effect       =   4    ; >   4
  597. CP_Config_Priority     =   6    ; >   7
  598.  
  599. CP_Config_AltPath      =  14    ; > 269
  600. CP_Config_CopyIcons    = 270    ; > 270
  601. CP_Config_Add_pp       = 271    ; > 271
  602. CP_Config_Rem_pp       = 272    ; > 272
  603.  
  604. CP_Config_AppIconX     = 274    ; > 277
  605. CP_Config_AppIconY     = 278    ; > 281
  606.  
  607. CP_Config_F            = 488
  608.  
  609.  
  610.  
  611. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  612. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  613. * *                           * * * * * * * * * * * * * * * * * * * * * *
  614. * *   Programme Principal.    * * * * * * * * * * * * * * * * * * * * * *
  615. * *                           * * * * * * * * * * * * * * * * * * * * * *
  616. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  617. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  618.  
  619.  
  620.     Movem.l    d2-d7/a2-a6,-(sp)
  621.     Bsr.s    StartUp0        ; Message du Wb | Ouvrir librairies
  622.     Tst.b    d0            ; Erreur ?
  623.     Bne.s    StartUpFail        ; Oui, terminer
  624.  
  625.     Bsr.w    LoadConfig        ; Charger le fichier de config
  626.     Cmp.b    #2,d0            ; Plus de mémoire ?
  627.     Beq.s    StartUpFail        ; Oui, tout fermer et quitter
  628.     Cmp.b    #1,d0            ; Erreur de fichier ?
  629.     Bne.s    LoadConfigOk        ; Non, continuer
  630.     Bsr.w    ConfigPanel        ; Oui, panneau de configuration
  631.     Cmp.b    #2,CP_QuitByte        ; L'utilisateur veut quitter ?
  632.     Beq.s    StartUpFail        ; Oui, tout fermer
  633.     LoadConfigOk:
  634.  
  635.     Bsr.w    StartUp1        ; Installer AppIcon
  636.     Tst.b    d0            ; Erreur ?
  637.     Bne.s    StartUpFail        ; Oui, terminer
  638.  
  639.     Bsr.w    WaitAppMsg        ; Traitement des AppMsg
  640.  
  641.     StartUpFail:
  642.     Bsr.w    CloseAll        ; Tout Fermer
  643.     Movem.l    (sp)+,d2-d7/a2-a6
  644. ;    Illegal
  645.     Moveq    #0,d0            ; ReturnCode
  646.     Rts                ; Quitter
  647.  
  648.  
  649.  
  650. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  651. *   Version d'AppPP.  Cette chaîne s'affiche avec la commande Version.  *
  652. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  653.  
  654.     dc.b    '$VER:AppPP_1.0',0,0
  655.  
  656. StartUp0:
  657.  
  658. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  659. *  S'occupe de prendre le message du Wb.  * * * * * * * * * * * * * * * *
  660. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  661.  
  662.     Move.l    ExecBase,a6
  663.     Suba.l    a1,a1            ; Notre processus
  664.     Jsr    FindTask(a6)        ; Obtenir un pointeur sur processus
  665.     Move.l    d0,OwnTask        ; Sauver Task
  666.  
  667.     Move.l    d0,a3
  668.     Tst.l    $ac(a3)            ; Process->pr_CLI  =?  0
  669.     Bne.w    SU0_Fail        ; Non, lancé depuis le CLI, on quitte
  670.  
  671.     S_WaitWbMsg:            ; Oui, on continue
  672.     Lea    $5c(a3),a0        ; Process->pr_MsgPort
  673.     Jsr    WaitPort(a6)        ; Attendre l'arrivée d'un message
  674.  
  675.     Lea    $5c(a3),a0        ; Process->pr_MsgPort
  676.     Jsr    GetMSG(a6)        ; Prendre le message sur le port
  677.     Move.l    d0,WbMsg
  678.     Beq.s    S_WaitWbMsg
  679.  
  680.  
  681. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  682. *  Ouvrir toutes les librairies dont on a besoin.   * * * * * * * * * * *
  683. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  684.  
  685.     Move.l    ExecBase,a6
  686.     Lea    IconName,a1
  687.     Moveq    #37,d0
  688.     Jsr    OpenLibrary(a6)
  689.     Move.l    d0,IconBase
  690.     Beq.s    SU0_Fail
  691.  
  692.     Lea    WorkbenchName,a1
  693.     Moveq    #37,d0
  694.     Jsr    OpenLibrary(a6)
  695.     Move.l    d0,WorkbenchBase
  696.     Beq.s    SU0_Fail
  697.  
  698.     Lea    DosName,a1
  699.     Moveq    #36,d0
  700.     Jsr    OpenLibrary(a6)
  701.     Move.l    d0,DosBase
  702.     Beq.s    SU0_Fail
  703.  
  704.     Lea    GadtoolsName,a1
  705.     Moveq    #36,d0
  706.     Jsr    OpenLibrary(a6)
  707.     Move.l    d0,GadtoolsBase
  708.     Beq.s    SU0_Fail
  709.  
  710.     Lea    IntuitionName,a1
  711.     Moveq    #36,d0
  712.     Jsr    OpenLibrary(a6)
  713.     Move.l    d0,IntuitionBase
  714.     Beq.s    SU0_Fail
  715.  
  716.     Lea    ppName,a1
  717.     Moveq    #35,d0
  718.     Jsr    OpenLibrary(a6)
  719.     Move.l    d0,ppBase
  720.     Beq.s    SU0_Fail
  721.  
  722.     Lea    GraphicsName,a1
  723.     Moveq    #36,d0
  724.     Jsr    OpenLibrary(a6)
  725.     Move.l    d0,GraphicsBase
  726.     Beq.s    SU0_Fail
  727.  
  728.     Move.b    #0,d0
  729.  
  730. SU0_End:
  731.     Rts
  732.  
  733. SU0_Fail:
  734.     Move.b    #1,d0
  735.     Bra.s    SU0_End
  736.  
  737.  
  738. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  739. *  Installer l'AppIcon dans le WB.  (Utilise l'icône du programme)  * * *
  740. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  741.  
  742. StartUp1:
  743.  
  744.     Move.l    ExecBase,a6
  745.     Move.l    #$1,d1            ; PublicMem
  746.     Move.l    #FileNameBufferLL,d0    ; Allouer un tampon pour le nom
  747.     Jsr    AllocMem(a6)
  748.     Move.l    d0,FileNameBuffer
  749.     Beq.w    SU1_Fail
  750.     Addq.l    #4,FileNameBuffer    ; 4 octets de sécurité
  751.  
  752.     Move.l    DosBase,a6
  753.     Jsr    GetProgramDir(a6)    ; Obtenir un Lock sur le répertoire
  754.     Move.l    d0,DirLock
  755.  
  756.     Move.l    DirLock,d1        ; Lock sur le répertoire
  757.     Move.l    FileNameBuffer,d2    ; Adresse du tampon
  758.     Move.l    #FileNameBufferL,d3    ; Longueur
  759.     Jsr    NameFromLock(a6)    ; Obtenir le nom du répertoire de démarrage
  760.     Tst.l    d0            ; NameFromLock Ok ?
  761.     Bne.s    S_NameFromLock_Ok    ; Oui, on continue
  762.     Bsr.w    FreeFileNameBuffer    ; Non, libérer le tampon
  763.     Bra.w    SU1_Fail        ; Terminer le programme
  764.     S_NameFromLock_Ok:
  765.  
  766.     Move.l    FileNameBuffer,d1    ; DirName
  767.     Move.l    #ProgramName,d2        ; FileName
  768.     Move.l    #FileNameBufferL,d3    ; Size
  769.     Jsr    AddPart(a6)        ; rassembler le dir et le nom de fichier
  770.     Tst.l    d0            ; AddPart Ok ?
  771.     Bne.s    S_AddPart_Ok        ; Oui, on continue
  772.     Bsr.w    FreeFileNameBuffer    ; Libérer le tampon
  773.     Bra.s    SU1_Fail        ; Terminer le programme
  774.     S_AddPart_Ok:
  775.  
  776.     Move.l    IconBase,a6
  777. ;!!!!    Move.l    #Object,a0        ; Provisoire
  778.     Move.l    FileNameBuffer,a0    ; Nom du programme
  779.     Jsr    GetDiskObjectNew(a6)    ; Obtenir la structure AppDiskObject
  780.     Move.l    d0,AppDiskObject
  781.     Bsr.w    FreeFileNameBuffer    ; Libérer le tampon
  782.     Tst.l    AppDiskObject        ; Obtention du AppDiskObject Ok ?
  783.     Beq.s    SU1_Fail        ; Non, terminer le programme
  784.  
  785.     Move.l    AppDiskObject,a0
  786.     Move.l    ConfigBuffer0,a1
  787.     Move.w    #0,48(a0)        ; DiskObject->do_Type = 0
  788.     Move.l    CP_Config_AppIconX(a1),58(a0);DiskObject->do_CurrentX
  789.     Move.l    CP_Config_AppIconY(a1),62(a0);DiskObject->do_CurrentY
  790.  
  791.  
  792. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  793. *  Créer un port message pour la gestion de l'AppIcon.  * * * * * * * * *
  794. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  795.  
  796.     Move.l    ExecBase,a6
  797.     Jsr    CreateMsgPort(a6)    
  798.     Move.l    d0,AppMsgPort
  799.     Beq.s    SU1_Fail
  800.  
  801.  
  802. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  803. *  Installer l'AppIcon dans le WB.  * * * * * * * * * * * * * * * * * * *
  804. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  805.  
  806.     Bsr.w    InstallAppIcon
  807.     Tst.l    AppIcon
  808.     Beq.s    SU1_Fail
  809.  
  810.  
  811. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  812. *  Modifier la priorité de la tâche ne fonction des prefs.  * * * * * * *
  813. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  814.  
  815.     Move.l    OwnTask,a1            ; Task
  816.     Move.l    ConfigBuffer0,a0
  817.     Move.w    CP_Config_Priority(a0),d0; Nouvelle priorité
  818.     Move.l    ExecBase,a6
  819.     Jsr    SetTaskPri(a6)        ; Modifier priorité
  820.  
  821.     Move.b    #0,d0
  822. SU1_End:
  823.     Rts
  824.  
  825. SU1_Fail:
  826.     Move.b    #1,d0
  827.     Bra.s    SU1_End
  828.  
  829.  
  830. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  831. *                                    *
  832. *  DESCRIPTION:                                *
  833. *    Loadconfig:                            *
  834. *        Alloue un tampon et charge le fichier de config. Si    *
  835. *        la version de la config ne correspond pas, affiche un    *
  836. *        message approprié.                    *
  837. *  INPUT:                                *
  838. *    Loadconfig:                            *
  839. *  OUTPUT:                                *
  840. *    LoadConfig:                            *
  841. *        d0        = 1 pas de fichier ou version ancienne    *
  842. *                = 0 fichier ok ou version future    *
  843. *                = 2 pas de mémoire            *
  844. *                                    *
  845. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  846.  
  847. LoadConfig:
  848.  
  849.     Move.l    ExecBase,a6
  850.     Move.l    #$10001,d1        ; PublicMem
  851.     Move.l    #ConfigBufferL,d0
  852.     Jsr    AllocMem(a6)        ; Allouer un tampon pour la config
  853.     Move.l    d0,ConfigBuffer0    ; Buffer de config 0
  854.     Beq.s    LC_Fail2        ; buffer pas ok
  855.  
  856.     Move.l    DosBase,a6
  857.     Move.l    #1005,d2        ; Lecture
  858.     Move.l    #ConfigFileName0,d1    ; Se trouve dans Env:
  859.     Jsr    Open(a6)        ; Ouvrir le fichier
  860.     Move.l    d0,ConfigFileName0_FH    ; Ouverture à échoué ?
  861.     Beq.s    LC_Fail1        ; Oui, erreur de fichier
  862.  
  863.     Move.l    d0,d1            ;!!  ConfigFileName0_FH
  864.     Move.l    ConfigBuffer0,d2    ; Buffer de config 0
  865.     Move.l    #ConfigBufferL,d3    ; 488 bytes
  866.     Jsr    Read(a6)        ; Lire le Fichier
  867.     Move.l    d0,d4
  868.     Move.l    ConfigFileName0_FH,d1    ; Refermer le fichier Config 0
  869.     Jsr    Close(a6)
  870.     Cmp.l    #488,d4            ; Le fichier a 488 bytes ?
  871.     Bne.s    LC_Fail1        ; Non, Erreur de lecture
  872.  
  873.     Move.l    ConfigBuffer0,a0
  874.     Move.b    CP_Config_Version(a0),d0; Version de AppPP
  875.     Cmp.b    #2,d0            ; = Version 1.1
  876.     Beq.s    LC_VersionOk        ; Oui, config actuelle
  877.     Cmp.b    #1,d0            ; = Version 1.0
  878.     Bne.s    LC_FutureVersion    ; Non, version future
  879.     Lea    LC_OldVersion_EasyT,a0    ; Oui, 
  880.     Bsr    EasyRequest_Com        ; Afficher avertissement
  881.     Bra.s    LC_Fail1        ; Retourner 1
  882.     LC_FutureVersion:
  883.     Lea    LC_FutureVersion_EasyT,a0; Version future
  884.     Bsr    EasyRequest_Com        ; Afficher avertissement
  885. ;!!    Bra.s    LC_VersionOk        ; Pas besoin du ConfigPanel
  886.     LC_VersionOk:
  887.  
  888.     Move.b    #0,d0            ; Lecture ok
  889. LC_AllOk:
  890.     Rts
  891.  
  892. LC_Fail1:
  893.     Move.b    #1,d0            ; Erreur de fichier
  894.     Bra.s    LC_AllOk
  895.  
  896. LC_Fail2:
  897.     Move.b    #2,d0            ; Plus de mémoire
  898.     Bra.s    LC_AllOk
  899.  
  900.  
  901. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  902. *                                    *
  903. *  DESCRIPTION:                                *
  904. *    WaitAppMsg:                            *
  905. *        Attend et prélève l' AppMessage    et prépare le pgm à    *
  906. *        boucler dans NextFile.  AppMessage est ensuite rendu.    *
  907. *  INPUT:                                *
  908. *    WaitAppMsg:                            *
  909. *        AppMsgPort    =  Port message crée l'AppIcon.        *
  910. *  OUTPUT:                                *
  911. *    WaitAppMsg:                            *
  912. *        Msg.l        =  AppMessage                *
  913. *        FileNumer.l    =  Nombre de fichiers  *  8        *
  914. *                                    *
  915. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  916.  
  917.  
  918. WaitAppMsg:
  919.     Move.l    ExecBase,a6
  920.     Move.l    AppMsgPort,a0
  921.     Jsr    WaitPort(a6)        ; Attente d'un message
  922.  
  923. GetAppMessage:
  924.     Move.l    #0,FileCount        ; Fichiers Traités  =  0
  925.  
  926.     Move.l    AppMsgPort,a0
  927.     Move.l    ExecBase,a6
  928.     Jsr    GetMsg(a6)        ; On prend le Message
  929.     Move.l    d0,Msg
  930.     Beq.s    WaitAppMsg
  931.  
  932.     Move.l    d0,a0            ;!! AppMessage
  933.     Lea    30(a0),a1        ; AppMessage->NumArgs
  934.     Move.l    (a1),d1            ;
  935.     Mulu    #8,d1            ; Nb de fichiers * 8
  936.     Move.l    d1,FileNumber        ; Nb * 8 dans FileNumber.l
  937.     Bne.s    GAM_NoConfigPanel    ; Nb <> 0    Oui, pas de ConfigPanel
  938.     Move.l    ConfigBuffer0,a0
  939.     Move.l    CP_Config_AppIconX(a0),d2; Sauver anciennes valeurs
  940.     Move.l    CP_Config_AppIconY(a0),d3
  941.     Bsr.w    ConfigPanel        ; Nb =? 0    Oui, ConfigPanel
  942.     Cmp.b    #2,CP_QuitByte        ; L'utilisateur veut quitter ?
  943.     Beq.s    GAM_NoSetAppIconPos    ; Oui, ne pas déplacer l'AppIcon
  944.     Move.l    ConfigBuffer0,a0
  945.     Move.l    CP_Config_AppIconX(a0),d4; Nouvelles valeurs
  946.     Move.l    CP_Config_AppIconY(a0),d5
  947.     Cmp.l    d2,d4            ; Ancien X  =?  Nouveau X
  948.     Bne.s    GAM_SetAppIconPos    ; Non, déplacer AppIcon
  949.     Cmp.l    d3,d5            ; Ancien Y  =?  Nouveau Y
  950.     Bne.s    GAM_SetAppIconPos    ; Non, déplacer AppIcon
  951.     Bra.s    GAM_NoSetAppIconPos    ; X&Y inchangés, pas de déplacement
  952.     GAM_SetAppIconPos:
  953.     Move.l    ExecBase,a6
  954.     Move.l    Msg,a1            ; AppMessage
  955.     Jsr    ReplyMsg(a6)        ; rendre message de l'ancienne AppIcon
  956.     Move.l    #0,Msg
  957.     Bsr.w    EvtlRemoveAppIcon    ; Enlève l'AppIcon existante
  958.     Move.l    AppDiskObject,a0
  959.     Move.w    #0,48(a0)        ; DiskObject->do_Type = 0
  960.     Move.l    d4,58(a0)        ; DiskObject->do_CurrentX
  961.     Move.l    d5,62(a0)        ; DiskObject->do_CurrentY
  962.     Bsr.w    InstallAppIcon        ; Nouvelle AppIcon
  963.     Tst.l    AppIcon            ; AppIcon ok
  964.     Bne.s    GAM_NoSetAppIconPos    ; Oui, continuer
  965.     Move.b    #2,CP_QuitByte        ; Non, quitter
  966.     GAM_NoSetAppIconPos:
  967.     Bra.w    ReplyMessage        ; Rendre le message
  968.     GAM_NoConfigPanel:
  969.  
  970.     Move.b    #2,GUI_
  971.     Bsr.w    SetupScreen_
  972.     Tst.b    d0
  973.     Bne.w    Crunch_Request_Err    ; Erreur
  974.     Move.w    #WorkingLeft,Left
  975.     Move.w    #WorkingTop,Top
  976.     Move.w    #WorkingWidth,Width
  977.     Move.w    #WorkingHeight,Height
  978.     Bsr.w    OpenWindow_        ; Affichage de la Fenêtre "Quoi faire"
  979.     Move.l    Wnd,WorkingWnd
  980.     Tst.b    d0
  981.     Bne.w    Crunch_Request_Err    ; Erreur
  982.  
  983.     Move.l    #NormalBevelbox,Bevelbox_TagList
  984.     Move.w    #Working0_Top,BevelTop
  985.     Move.w    #Working0_Left,BevelLeft
  986.     Move.w    #Working0_Width,BevelWidth
  987.     Move.w    #Working0_Height,BevelHeight
  988.     Bsr.w    Render1            ; Dessiner la Bevelbox
  989.     Move.l    #InverseBevelbox,Bevelbox_TagList
  990.     Move.w    #Working1_Top,BevelTop
  991.     Move.w    #Working1_Left,BevelLeft
  992.     Move.w    #Working1_Width,BevelWidth
  993.     Move.w    #Working1_Height,BevelHeight
  994.     Bsr.w    Render1            ; Dessiner la Bevelbox
  995.  
  996. ;!!    Move.l    WorkingWnd,Wnd
  997.     Move.b    #$ff,UserResponse
  998.     Bsr.w    WaitMessages        ; Attendre réponse de l'utilisateur
  999.     Move.b    UserResponse,Working_CrunchUserResponse
  1000. ;!!    Move.l    WorkingWnd,Wnd
  1001.     Bsr.w    GM_RepIMessage
  1002.  
  1003.     Cmp.b    #3,Working_CrunchUserResponse; L'utilisateur ne veut rien faire ?
  1004.     Bne.s    GAM__de_crunch        ; Non, Continuer
  1005. ;!!    Move.l    WorkingWnd,Wnd        ; Oui, fermer interface
  1006.     Bsr.w    IMessageLoop
  1007.     Bsr.w    CloseWindow_
  1008.     Bsr.w    CloseDownScreen_
  1009.     Bra.w    ReplyMessage
  1010.     GAM__de_crunch:            ; Crunch|Decrunch
  1011.  
  1012.  
  1013. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1014. *  Disabler Crunch, Decrunch et Nothing.  Enabler Skip et Stop.   * * * *
  1015. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1016.  
  1017.     Move.l    GadtoolsBase,a6
  1018.     Move.l    WorkingWnd,a4
  1019.     Lea    WorkingGadgets,a5
  1020.     Move.l    a4,a1            ; Window Ptr
  1021.     Suba.l    a2,a2            ; Req  (not implemented)
  1022.     Move.l    0*4(a5),a0        ; Gadget 0  =  Crunch
  1023.     Lea    GAM_WorkingGad0Attrs,a3
  1024.     Jsr    GT_SetGadgetAttrsA(a6)
  1025.  
  1026.     Move.l    a4,a1            ; Window Ptr
  1027.     Suba.l    a2,a2            ; Req  (not implemented)
  1028.     Move.l    1*4(a5),a0        ; Gadget 1  =  Decrunch
  1029.     Lea    GAM_WorkingGad1Attrs,a3
  1030.     Jsr    GT_SetGadgetAttrsA(a6)
  1031.  
  1032.     Move.l    a4,a1            ; Window Ptr
  1033.     Suba.l    a2,a2            ; Req  (not implemented)
  1034.     Move.l    2*4(a5),a0        ; Gadget 2  =  Nothing
  1035.     Lea    GAM_WorkingGad2Attrs,a3
  1036.     Jsr    GT_SetGadgetAttrsA(a6)
  1037.  
  1038.     Move.l    a4,a1            ; Window Ptr
  1039.     Suba.l    a2,a2            ; Req  (not implemented)
  1040.     Move.l    3*4(a5),a0        ; Gadget 3  =  Skip
  1041.     Lea    GAM_WorkingGad3Attrs,a3
  1042.     Jsr    GT_SetGadgetAttrsA(a6)
  1043.     
  1044.     Move.l    a4,a1            ; Window Ptr
  1045.     Suba.l    a2,a2            ; Req  (not implemented)
  1046.     Move.l    4*4(a5),a0        ; Gadget 4  =  Stop
  1047.     Lea    GAM_WorkingGad4Attrs,a3
  1048.     Jsr    GT_SetGadgetAttrsA(a6)
  1049.  
  1050.  
  1051. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1052. *  Allouer une structure CrunchInfo en fonction des Prefs.  * * * * * * *
  1053. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1054.  
  1055.     Move.l    ConfigBuffer0,a0
  1056.     Moveq    #0,d0
  1057.     Moveq    #0,d1
  1058.     Move.b    CP_Config_Efficiency(a0),d0    
  1059.     Move.b    CP_Config_Buffer(a0),d1
  1060.     Cmp.b    #2,d1            ; Désir Large = 2
  1061.     Beq.s    GAM_SetPrefs0
  1062.     Cmp.b    #0,d1            ; Désir Small = 0
  1063.     Beq.s    GAM_SetPrefs1
  1064.     Bra.s    GAM_SetPrefsF        ; Désir Medium = PP Medium = 1
  1065.     GAM_SetPrefs0:
  1066.     Moveq    #SpeedUp_BuffLarge,d1    ; PP Large = 0
  1067.     Bra.s    GAM_SetPrefsF
  1068.     GAM_setPrefs1:
  1069.     Moveq    #SpeedUp_BuffSmall,d1    ; PP Small = 2
  1070. ;!!    Bra.s    GAM_SetPrefsF
  1071.     GAM_SetPrefsF:
  1072.     Suba.l    a0,a0            ; Allocation de CrunchInfo
  1073.     Suba.l    a1,a1            ; pour la fonction
  1074.     Move.l    ppBase,a6
  1075.     Jsr    ppAllocCrunchInfo(a6)    ; powerpacker.library/CrunchBuffer()
  1076.     Move.l    d0,CrunchInfo
  1077.     Tst.l    d0
  1078.     Beq.w    AllocCrunchInfo_Err
  1079.  
  1080.  
  1081. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1082. *  Allouer un tampon pour le nom de fichier pour NextFile.  * * * * * * *
  1083. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1084.  
  1085.     Move.l    ExecBase,a6
  1086.     Move.l    #FileNameBufferLL,d0
  1087.     Move.l    #1,d1
  1088.     Jsr    AllocMem(a6)        ; Allouer un tampon pour le nom du
  1089.     Move.l    d0,FileNameBuffer    ; fichier
  1090.     Beq.w    AllocMem_Err
  1091.     Addq.l    #4,FileNameBuffer
  1092.  
  1093.  
  1094. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1095. *                                    *
  1096. *  DESCRIPTION:                                *
  1097. *    NextFile:                            *
  1098. *        Traite les fichiers en boucle jusqu'à ce qu'il n'y en    *
  1099. *        ait plus à traiter.  S'occupe intégralement des erreurs.*
  1100. *        Détermine si le fichier est compacté et se branche à    *
  1101. *        DataCrunched ou DataNotCrunched suivant les cas.    *
  1102. *  INPUT:                                *
  1103. *    NextFile:                            *
  1104. *        Msg        =  AppMessage                *
  1105. *        FileNameBuffer    =  Pointeur sur le tampon du nom.    *
  1106. *        FileCount    =  Doit être égal à zéro        *
  1107. *  OUTPUT:                                *
  1108. *    NextFile:                            *
  1109. *                                    *
  1110. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1111.  
  1112. NextFile:                ; Fichier suivant
  1113.     Move.l    FileCount,d0
  1114.     Move.l    Msg,a0
  1115.     Lea    34(a0),a1
  1116.     Move.l    (a1),a0
  1117.     Adda.l    d0,a0            ; Trouver le Lock sur le répertoire
  1118.     Move.l    (a0),DirLock
  1119.  
  1120.     Move.l    DosBase,a6
  1121.     Move.l    DirLock,d1
  1122.     Move.l    FileNameBuffer,d2    ; Obtenir le nom du Path
  1123.     Move.l    #FileNameBufferL,d3    ; Le nom est mis dans le tampon
  1124.     Jsr    NameFromLock(a6)    ; prévu où pointe FileNameBuffer
  1125.  
  1126.     Move.l    FileCount,d0
  1127.     Move.l    Msg,a0
  1128.     Lea    34(a0),a1
  1129.     Move.l    (a1),a0
  1130.     Adda.l    d0,a0            ; Chercher le nom du fichier
  1131.     Move.l    4(a0),d2
  1132.     Move.l    d2,FileName        ; Sauver l'adresse du nom dans FileName
  1133.     Move.l    #FileNameBufferL,d3
  1134.     Move.l    FileNameBuffer,d1
  1135.     Jsr    AddPart(a6)        ; Concaténer le nom du dir avec le nom de fichier
  1136.  
  1137.     Move.l    FileName,a0
  1138.     Move.l    a0,d0
  1139.     Calculate_StrLengthB:
  1140.     Cmp.b    #0,(a0)+
  1141.     Bne.s    Calculate_StrLengthB    ; Calculer la longueur de la
  1142.     Suba.l    d0,a0            ; chaîne FileName
  1143.     Move.l    a0,d1
  1144.     Move.b    d1,FileName_StrLength
  1145.  
  1146.     Cmp.b    #1,FileName_StrLength    ; répertoire? -> chaîne de 1 byte
  1147.     Beq.s    NF_NoFileNameWriting    ; Oui, ne pas écrire FileName
  1148.     Move.l    GadtoolsBase,a6
  1149.     Move.l    WorkingWnd,a1        ; Struct Window en a1
  1150.     Suba.l    a2,a2            ; Req = 0
  1151.     Lea    WriteTextTags,a3    ; Tags en a3
  1152.     Move.l    FileName,4(a3)        ; Adresse du nom à GTTX_Text
  1153.     Lea    WorkingGadgets,a0
  1154.     Move.l    6*4(a0),a0        ; Name Gadget
  1155.     Jsr    GT_SetGadgetAttrsA(a6)    ; Afficher nom du fichier
  1156.     NF_NoFileNameWriting:
  1157.  
  1158.     Move.l    DosBase,a6
  1159.     Move.l    FileNameBuffer,d1
  1160.     Move.l    #1005,d2        ; Obtenir un Lock sur le nom du
  1161.     Jsr    Lock(a6)        ; fichier avec Path complet
  1162.     Move.l    d0,FileLock        ; Lock Ok ?
  1163.     Bne.s    NF_Lock_Ok            ; Oui, on continue
  1164.     Lea    NF_LockErr_EasyT,a0
  1165.     Bsr.w    EasyRequest_Com
  1166.     Bra.w    NoDecrunch
  1167.     NF_Lock_Ok:    
  1168.  
  1169.     Moveq    #2,d1            ; Type de DosObject
  1170.     Moveq    #0,d2            ; TagList
  1171.     Move.l    DosBase,a6
  1172.     Jsr    AllocDosObject(a6)    ; On alloue une structure pour la
  1173.     Move.l    d0,DosObject        ; fonction Examine()
  1174.     Beq.w    AllocDosObject_Err
  1175.  
  1176.     Move.l    FileLock,d1
  1177.     Move.l    DosObject,d2
  1178.     Jsr    Examine(a6)        ; On Examine() le fichier d'après
  1179.     Move.l    DosObject,a0        ;  le Lock trouvé précédemment.
  1180.     Tst.l    d0
  1181.     Bne.s    NF_Examine_Ok        ; Examine() est ok, on continue
  1182.     Move.l    DosObject,d2
  1183.     Moveq    #2,d1            ; Libérer la structure DosObject
  1184.     Jsr    FreeDosObject(a6)
  1185.     Move.l    FileLock,d1
  1186.     Jsr    UnLock(a6)        ; On délock la fichier
  1187.     Lea    NF_ExamineErr_EasyT,a0    ; Avertir
  1188.     Bsr.w    EasyRequest_Com
  1189.     Bra.w    NoDecrunch
  1190.     NF_Examine_Ok:
  1191.     Move.l    124(a0),FileLength    ; FileInfoBlock->fib_Size
  1192.  
  1193.     Move.l    FileLock,d1
  1194.     Jsr    UnLock(a6)        ; On délock le fichier.
  1195.  
  1196.     Move.l    DosObject,a0
  1197.     Tst.l    4(a0)            ; Est-ce un répertoire ?
  1198.     Blt.s    IsAFile            ; Si non, on le continue.
  1199.     Move.l    #Working_DirErrT,WTT_Text; Adresse du nom à GTTX_Text
  1200.     Bsr.w    SetWorkingGad5Attrs    ; Oui, afficher DirErrT
  1201.     Bra.w    NoDecrunch        ; Terminer le traitement du fichier
  1202.     IsAFile:
  1203.  
  1204.     Move.l    DosBase,a6
  1205.     Move.l    DosObject,d2
  1206.     Moveq    #2,d1
  1207.     Jsr    FreeDosObject(a6)    ; Libérer la structure DosObject
  1208.  
  1209.     Move.l    #0,SBuffer        ; On vide le tampon de 4 octets
  1210.  
  1211.     Move.l    #1005,d2        ; Mode_OldFile
  1212.     Move.l    FileNameBuffer,d1
  1213.     Jsr    Open(a6)        ; On Open() le fichier en question
  1214.     Move.l    d0,FileHandle        ; Gestionnaire dans FileHandle
  1215.     Bne.s    FileOpen_Ok        ; Ok, on continue.
  1216.     Lea    OpenReadErr_EasyT,a0
  1217.     Bsr.w    EasyRequest_Com        ; Erreur, Avertir
  1218.     Bra.w    NoDecrunch        ; Fin du traitement du fichier
  1219.     FileOpen_Ok:            ; Pas d'erreur, on continue
  1220.  
  1221.     Move.l    #Working_ScanningT,WTT_Text; GTTX_Text  =  Adresse du texte
  1222.     Bsr.w    SetWorkingGad5Attrs    ; Ecrire Scanning
  1223.  
  1224.     Move.l    GadtoolsBase,a6
  1225.     Lea    WorkingGadgets,a0
  1226.     Move.l    7*4(a0),a0        ; Source Gadget
  1227.     Move.l    WorkingWnd,a1        ; Struct Window en a1
  1228.     Suba.l    a2,a2            ; Req = 0
  1229.     Lea    WriteNumberTags,a3    ; Tags en a3
  1230.     Move.l    FileLength,WNT_Number    ; Longueur du fichier
  1231.     Jsr    GT_SetGadgetAttrsA(a6)    ; Afficher longueur du fichier
  1232.  
  1233.     Bsr.w    GetWorkingMessage    ; Vérifier si gadget est appuyé
  1234.     Cmp.b    #4,Working_UserResponse    ; Skip File ?
  1235.     Beq.s    NextFile_Skip1        ; Oui, on se branche à la routine
  1236.     Cmp.b    #5,Working_UserResponse    ; Stop All ?
  1237.     Beq.w    NextFile_Stop1        ; Oui, on se branche à la routine
  1238.  
  1239.     Move.l    DosBase,a6
  1240.     Move.l    FileHandle,d1
  1241.     Move.l    #SBuffer,d2        ; On lit les 4 premiers octets du
  1242.     Move.l    #4,d3            ; fichier
  1243.     Jsr    Read(a6)        ; On écrit dans SBuffer
  1244.     Move.l    d0,d4            ; Nb de bytes lus
  1245.     Move.l    FileHandle,d1        ; Fermer le fichier
  1246.     Jsr    Close(a6)
  1247.     Cmp.l    #4,d4            ; Erreur de lecture du fichier ?
  1248.     Beq.s    FileNotEmpty        ; Non, on continue
  1249.     Lea    NF_ReadErr_EasyT,a0
  1250.     Bsr.w    EasyRequest_Com
  1251.     Bra.w    NoDecrunch        ; Passer au fichier suivant
  1252.     FileNotEmpty:
  1253.  
  1254.     Move.l    SBuffer,d1        ; On vérifie le contenu de SBuffer
  1255.     Cmp.l    #'PP20',d1        ; = 'PP20' => compacté normalement
  1256.     Beq.s    NF_PP20
  1257.     Cmp.l    #'PX20',d1        ; = 'PX20' => compacté avec passe
  1258.     Beq.s    NF_PX20
  1259.     Bsr.w    DataNotCrunched        ; Non Compacté
  1260.     Bra.s    NF_TreatementOk
  1261.     NF_PP20:
  1262.     NF_PX20:
  1263.     Bsr.w    DataCrunched        ; Compacté
  1264. ;!!    Bra.s    NF_TreatementOk
  1265.     NF_TreatementOk:
  1266.     Bra.s    NoDecrunch
  1267.  
  1268.                     ; Traitement des stops.
  1269.     NextFile_Skip1:            ;
  1270.     Move.l    DosBase,a6
  1271.     Move.l    FileHandle,d1
  1272.     Jsr    Close(a6)        ; Fermer le fichier
  1273.     Move.l    #Working_SkipT,WTT_Text    ; GTTX_Text  =  Adresse du texte
  1274.     Bsr.w    SetWorkingGad5Attrs
  1275.     Bra.s    NoDecrunch        ; Traitement terminé
  1276.     NextFile_Stop1:            ;
  1277.     Move.l    DosBase,a6
  1278.     Move.l    FileHandle,d1
  1279.     Jsr    Close(a6)        ; Fermer le fichier
  1280.     Move.l    #Working_StopT,WTT_Text    ; GTTX_Text  =  Adresse du texte
  1281.     Bsr.w    SetWorkingGad5Attrs
  1282.     Bra.s    FreeBuffers        ; Arrêt total
  1283.                     ; Traitement des erreurs graves.
  1284.     AllocDosObject_Err:
  1285.     Move.l    DosBase,a6
  1286.     Move.l    FileLock,d1        ; on délock le fichier
  1287.     Jsr    UnLock(a6)
  1288.     Bsr.w    FreeFileNameBuffer    ; Libérer le tampon FileNameBuffer
  1289.     AllocMem_Err:
  1290.     Move.l    ppBase,a6
  1291.     Move.l    CrunchInfo,a0
  1292.     Jsr    ppFreeCrunchInfo(a6)    ; Libérer la structure CrunchInfo
  1293.     AllocCrunchInfo_Err:
  1294.     Crunch_Request_Err:
  1295.     Bsr.w    CloseWindow_
  1296.     Bsr.w    CloseDownScreen_
  1297.     Move.b    #2,CP_QuitByte
  1298.     Bra.s    ReplyMessage
  1299.  
  1300.  
  1301. NoDecrunch:                ; Fin du traitement du fichier
  1302.     Add.l    #8,FileCount        ; On ajoute 8 au nbre de fichiers
  1303.     Move.l    FileNumber,d0        ; traités (facilite l'accès au message)
  1304.     Cmp.l    FileCount,d0        ; Nbre traités  =?  Nbre total
  1305.     Beq.s    FreeBuffers        ; Si oui, traitement terminé
  1306.     Bra.w    NextFile        ; Si non, fichier suivant
  1307.  
  1308. FreeBuffers:
  1309.     Move.l    DosBase,a6
  1310.     Lea    Finished_EasyT,a0
  1311.     Bsr.w    EasyRequest_Com
  1312.     Move.l    WorkingWnd,Wnd
  1313.     Bsr.w    IMessageLoop
  1314.     Bsr.w    CloseWindow_        ; Fin du traitement _des_ fichiers
  1315.     Bsr.w    CloseDownScreen_    ; On ferme l'interface
  1316.     Bsr.w    FreeFileNameBuffer    ; Libérer le tampon
  1317.     Move.l    ppBase,a6
  1318.     Move.l    CrunchInfo,a0        ; Libérer la structure CrunchInfo
  1319.     Jsr    ppFreeCrunchInfo(a6)
  1320.  
  1321. ReplyMessage:
  1322.     Move.l    Msg,a1
  1323.     Cmp.l    #0,a1
  1324.     Beq.s    NF_RM_NoMsg
  1325.     Move.l    ExecBase,a6
  1326.     Jsr    ReplyMsg(a6)        ; Renvoie l'AppMessage au système
  1327.     Move.l    #0,Msg
  1328.     NF_RM_NoMsg:
  1329.  
  1330. NF_NextAppMessage:
  1331.     Cmp.b    #2,CP_QuitByte
  1332.     Bne.w    GetAppMessage
  1333.     Rts
  1334.  
  1335.  
  1336. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1337. *                                    *
  1338. *  DESCRIPTION:                                *
  1339. *    DataNotCrunched:                        *
  1340. *        Teste si l'utilisateur veut compacter.  Si oui,        *
  1341. *        effectue le compactage et sauve le fichier.        *
  1342. *        S'occupe intégralement du traitement des erreurs.    *
  1343. *  INPUT:                                *
  1344. *    DataNotCrunched:                        *
  1345. *        Working_CrunchUserResponse=  1 pour compacter        *
  1346. *        FileLength        =  Longueur du fichier        *
  1347. *        FileNameBuffer        =  APTR sur le nom de fichier    *
  1348. *  OUTPUT:                                *
  1349. *    DataNotCrunched:                        *
  1350. *                                    *
  1351. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1352.  
  1353.  
  1354. DataNotCrunched:            ; Fichier non compacté
  1355.     Cmp.b    #1,Working_CrunchUserResponse; Veut-on le compacter ?
  1356.     Beq.s    DataNotCrunched_Ok    ; Oui, on traite le fichier
  1357.     Move.l    #Working_NotCrunchedErrT,WTT_Text; GTTX_Text  =  Adresse du texte
  1358.     Bsr.w    SetWorkingGad5Attrs
  1359.     Bra.w    DNC_End            ; Fichier suivant
  1360.     DataNotCrunched_Ok:
  1361.  
  1362.     Move.l    ExecBase,a6
  1363.     Move.l    FileLength,d0
  1364.     Move.l    #$1,d1            ; PublicMem
  1365.     Jsr    AllocMem(a6)        ; On alloue un tampon de la longueur
  1366.     Move.l    d0,FileBuffer        ; du fichier
  1367.     Bne.s    DNC_AllocMem_Ok        ; Allocation Ok, on continue
  1368.     Move.l    DosBase,a6
  1369.     Lea    DNC_NoMemErr_EasyT,a0
  1370.     Bsr.w    EasyRequest_Com        ; Non, avertir
  1371.     Bra.w    DNC_End            ; Pas de compact, Fichier suivant
  1372.     DNC_AllocMem_Ok:
  1373.  
  1374.     Move.l    DosBase,a6
  1375.     Move.l    FileNameBuffer,d1
  1376.     Move.l    #1005,d2        ; Fichier existant
  1377.     Jsr    Open(a6)        ; On Open() le fichier
  1378.     Move.l    d0,FileHandle
  1379.     Bne.s    DNC_Open_Ok        ; Ouverture Ok
  1380.     Lea    OpenReadErr_EasyT,a0
  1381.     Bsr.w    EasyRequest_Com
  1382.     Bra.w    DNC_End1
  1383.     DNC_Open_Ok:            ; On continue
  1384.  
  1385.     Move.l    #Working_LoadingT,WTT_Text; GTTX_Text  =  Adresse du texte
  1386.     Bsr.w    SetWorkingGad5Attrs
  1387.  
  1388.     Bsr.w    GetWorkingMessage    ; On vérifie si gadget appuyé.
  1389.     Cmp.b    #4,Working_UserResponse
  1390.     Beq.w    DNC_Skip1
  1391.     Cmp.b    #5,Working_UserResponse
  1392.     Beq.w    DNC_Stop1
  1393.  
  1394.     Move.l    DosBase,a6
  1395.     Move.l    FileHandle,d1
  1396.     Move.l    FileBuffer,d2        ; On remplit le tampon avec le
  1397.     Move.l    FileLength,d3        ; contenu du fichier qu'on Read()
  1398.     Jsr    Read(a6)
  1399.     Move.l    d0,d4
  1400.     Move.l    FileHandle,d1
  1401.     Jsr    Close(a6)        ; On referme le fichier
  1402.     Cmp.l    FileLength,d4        ; Longueur égale ?
  1403.     Beq.s    DNC_Read_Ok        ; Oui, on continue
  1404.     Lea    DNC_ReadErr_EasyT,a0
  1405.     Bsr.w    EasyRequest_Com
  1406.     Bra.w    DNC_End1
  1407.     DNC_Read_Ok:
  1408.  
  1409.     Bsr.w    GetWorkingMessage    ; On vérifie si gadget appuyé.
  1410.     Cmp.b    #4,Working_UserResponse
  1411.     Beq.w    DNC_Skip2
  1412.     Cmp.b    #5,Working_UserResponse
  1413.     Beq.w    DNC_Stop2
  1414.  
  1415.     Move.l    #Working_CrunchingT,WTT_Text; GTTX_Text  =  Adresse du texte
  1416.     Bsr.w    SetWorkingGad5Attrs
  1417.  
  1418.     Move.l    ppBase,a6
  1419.     Move.l    FileLength,d0        ; Length en d0
  1420.     Move.l    CrunchInfo,a0        ; CrunchInfo en a0
  1421.     Move.l    FileBuffer,a1        ; Buffer en a1
  1422.     Jsr    ppCrunchBuffer(a6)    ; On compacte le tampon
  1423.     Move.l    d0,ppLength        ; Longueur compacté ou code d'erreur
  1424.     Cmp.l    #-1,d0            ; Buffer OverFlow ?
  1425.     Bne.s    DNC_OverFlow_Ok        ; Non, on continue
  1426.     Move.l    #Working_DNC_OverFlowT,WTT_Text; GTTX_Text  =  Adresse du texte
  1427.     Bsr.w    SetWorkingGad5Attrs
  1428.     Bra.w    DNC_End1
  1429.     DNC_OverFlow_Ok:
  1430.     Cmp.l    #0,d0            ; Crunch Aborted ?
  1431.     Bne.s    DNC_Aborted_Ok        ; Non, on continue
  1432.     Move.l    #Working_DNC_AbortedT,WTT_Text; GTTX_Text  =  Adresse du texte
  1433.     Bsr.w    SetWorkingGad5Attrs
  1434.     Bra.w    DNC_End1
  1435.     DNC_Aborted_Ok:
  1436.  
  1437.     Move.l    GadtoolsBase,a6
  1438.     Lea    WorkingGadgets,a0
  1439.     Move.l    8*4(a0),a0        ; Source Gadget
  1440.     Move.l    WorkingWnd,a1        ; Struct Window en a1
  1441.     Suba.l    a2,a2            ; Req = 0
  1442.     Lea    WriteNumberTags,a3    ; Tags en a3
  1443.     Move.l    ppLength,WNT_Number    ; Longueur du fichier
  1444.     Jsr    GT_SetGadgetAttrsA(a6)    ; Afficher longueur compacté
  1445.  
  1446.     Bsr.w    GetWorkingMessage    ; On vérifie si gadget appuyé.
  1447.     Cmp.b    #4,Working_UserResponse
  1448.     Beq.w    DNC_Skip3
  1449.     Cmp.b    #5,Working_UserResponse
  1450.     Beq.w    DNC_Stop3
  1451.                     ; Ouvrir le fichier en écriture
  1452.     Bsr.w    OpenSaveFile        ; selon preferences
  1453.  
  1454.     Move.l    DosBase,a6
  1455.     Cmp.l    #0,FileHandle        ; Ouverture réussie ?
  1456.     Bne.s    DNC_OpenSaveFile_Ok    ; Oui, on continue
  1457.     Lea    OpenWriteErr_EasyT,a0
  1458.     Bsr.w    EasyRequest_Com        ; Non, on avertit l'utilisateur
  1459.     Bra.s    DNC_End1        ; Libérer la mémoire et continuer
  1460.     DNC_OpenSaveFile_Ok:        ; Overture Ok, on continue
  1461.  
  1462.     Move.l    #Working_SavingT,WTT_Text; GTTX_Text  =  Adresse du texte
  1463.     Bsr.w    SetWorkingGad5Attrs
  1464.  
  1465.     Move.l    FileHandle,d0        ; FH en d0
  1466.     Moveq    #0,d1
  1467.     Move.l    ConfigBuffer0,a0
  1468.     Move.b    CP_Config_Efficiency(a0),d1;Efficiency en d1
  1469.     Moveq    #0,d2            ; Crypt = 0
  1470.     Moveq    #0,d3
  1471.     Move.l    ppBase,a6
  1472.     Jsr    ppWriteDataHeader(a6)    ; On écrit l'entête 'PP20'
  1473.     Tst.l    d0            ; Ecriture à échoué ?
  1474.     Bne.s    DNC_DataHeader_Ok    ; Non, on continue
  1475.     Lea    WriteErr_EasyT,a0
  1476.     Bsr.w    EasyRequest_Com        ; Oui, on avertit l'utilisateur
  1477.     Bra.s    DNC_End2        ; Préparer à quitter la routine
  1478.     DNC_DataHeader_Ok:
  1479.  
  1480.     Move.l    DosBase,a6
  1481.     Move.l    FileHandle,d1
  1482.     Move.l    FileBuffer,d2        ; On écrit le contenu du tampon
  1483.     Move.l    ppLength,d3        ; On Write() la longueur compact.
  1484.     Jsr    Write(a6)
  1485.     Cmp.l    ppLength,d0        ; Erreur d'écriture ?
  1486.     Beq.s    DNC_Write_Ok        ; Non, on continue
  1487.     Lea    WriteErr_EasyT,a0
  1488.     Bsr.w    EasyRequest_Com        ; Oui, avertir l'utilisateur
  1489.     Bra.s    DNC_End2        ; Préparer à quitter la routine
  1490.     DNC_Write_Ok:
  1491.     Move.l    FileHandle,d1
  1492.     Jsr    Close(a6)
  1493. ;!!    Bra.s    DNC_End1
  1494.  
  1495.     DNC_End1:
  1496.     Move.l    ExecBase,a6
  1497.     Move.l    FileBuffer,a1        ; Libérer la mémoire du fichier
  1498.     Move.l    FileLength,d0
  1499.     Jsr    FreeMem(a6)
  1500. ;!!    Bra.s    DNC_End
  1501.     DNC_End:
  1502.     Rts                ; Compacatage terminé
  1503.  
  1504.     DNC_End2:
  1505.     Move.l    DosBase,a6
  1506.     Move.l    FileHandle,d1        ; Fermer le fichier
  1507.     Jsr    Close(a6)
  1508.     Bra.s    DNC_End1        ; Terminer et quitter la routine
  1509.  
  1510.  
  1511.     DNC_Skip_Com:
  1512.     Move.l    DosBase,a6
  1513.     Move.l    FileHandle,d1
  1514.     Jsr    Close(a6)
  1515.     Rts
  1516.     DNC_Stop1:
  1517.     Bsr.s    DNC_Skip_Com
  1518.     Bra.s    DNC_Stop2        
  1519.     DNC_Skip1:
  1520.     Bsr.s    DNC_Skip_Com
  1521. ;!!    Bra.s    DNC_Skip2
  1522.     DNC_Skip2:
  1523.     DNC_Skip3:
  1524.     Move.l    #Working_SkipT,WTT_Text    ; GTTX_Text  =  Adresse du texte
  1525.     Bsr.w    SetWorkingGad5Attrs
  1526.     Bra.s    DNC_End1        ; Traitement terminé
  1527.     DNC_Stop2:
  1528.     DNC_Stop3:    
  1529.     Move.l    #Working_StopT,WTT_Text    ; GTTX_Text  =  Adresse du texte
  1530.     Bsr.w    SetWorkingGad5Attrs
  1531.     Move.l    FileNumber,FileCount    ; Dernier fichier traité
  1532.     Subq.l    #8,FileCount
  1533.     Bra.s    DNC_End1        ; Libérer la mémoire et terminer
  1534.  
  1535.  
  1536. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1537. *                                    *
  1538. *  DESCRIPTION:                                *
  1539. *    DataCrunched:                            *
  1540. *        Teste si l'utilisateur veut décompacter.  Si oui,    *
  1541. *        effectue le décompactage et sauve le fichier.        *
  1542. *        S'occupe intégralement du traitement des erreurs    *
  1543. *  INPUT:                                *
  1544. *    DataCrunched:                            *
  1545. *        Working_CrunchUserResponse=  2 pour décompacter        *
  1546. *        FileNameBuffer        =  APTR sur le nom du fichier    *
  1547. *  OUTPUT:                                *
  1548. *    DataCrunched:                            *
  1549. *                                    *
  1550. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1551.  
  1552. DataCrunched:                ; Fichier compacté
  1553.     Cmp.b    #2,Working_CrunchUserResponse; Veut-on le décompacter ?
  1554.     Beq.s    DataCrunched_Ok        ; Oui, on continue
  1555.     Move.l    #Working_CrunchedErrT,WTT_Text; GTTX_Text  =  Adresse du texte
  1556.     Bsr.w    SetWorkingGad5Attrs
  1557.     Bra.w    DC_End
  1558.     DataCrunched_Ok:
  1559.  
  1560.     Move.l    #Working_DC_LoadDecrT,WTT_Text; GTTX_Text  =  Adresse du texte
  1561.     Bsr.w    SetWorkingGad5Attrs
  1562.  
  1563.     Bsr.w    GetWorkingMessage    ; On vérifie si gadget appuyé.
  1564.     Cmp.b    #4,Working_UserResponse
  1565.     Beq.w    DC_Skip1
  1566.     Cmp.b    #5,Working_UserResponse
  1567.     Beq.w    DC_Stop1
  1568.  
  1569.     Move.l    ppBase,a6
  1570.     Moveq    #0,d0
  1571.     Move.l    ConfigBuffer0,a0
  1572.     Move.b    CP_Config_Effect(a0),d0    ; Decr_Effect en d0
  1573.     Move.l    FileNameBuffer,a0    ; Buffer sur le nom du fichier
  1574.     Move.l    #$1,d1            ; MemType: Public
  1575.     Lea    Buffer_,a1        ; Adresse de la variable du tampon
  1576.     Lea    Len_,a2            ; Adresse de la variable de la longueur
  1577.     Move.l    #0,a3            ; Pass Requester: None
  1578.     Jsr    ppLoadData(a6)        ; On décompacte le fichier
  1579.     Tst.b    d0            ; Erreur ?
  1580.     Beq.w    ppLoadData_Ok        ; Non, on continue
  1581.     Cmp.b    #-1,d0
  1582.     Beq.s    ppLD_OpenErr
  1583.     Cmp.b    #-2,d0
  1584.     Beq.s    ppLD_ReadErr        ; Oui, suivant le type
  1585.     Cmp.b    #-3,d0            ; d'erreur, on écrit
  1586.     Beq.s    ppLD_NoMemErr        ; un message approprié
  1587.     Cmp.b    #-4,d0
  1588.     Beq.s    ppLD_CryptErr
  1589.     Cmp.b    #-5,d0
  1590.     Beq.s    ppLD_PassErr
  1591.     Cmp.b    #-6,d0
  1592.     Beq.s    ppLD_UnknownPP
  1593.     Cmp.b    #-7,d0
  1594.     Beq.s    ppLD_EmptyErr
  1595.     ppLD_OpenErr:
  1596.     Lea    OpenReadErr_EasyT,a0
  1597.     Bra.s    ppLoadData_Err
  1598.     ppLD_ReadErr:
  1599.     Lea    DC_ReadErr_EasyT,a0
  1600.     Bra.s    ppLoadData_Err
  1601.     ppLD_NoMemErr:
  1602.     Lea    DC_NoMemErr_EasyT,a0
  1603.     Bra.s    ppLoadData_Err
  1604.     ppLD_CryptErr:
  1605.     Lea    DC_CryptErr_EasyT,a0
  1606.     Bra.s    ppLoadData_Err
  1607.     ppLD_PassErr:
  1608.     Lea    DC_PassErr_EasyT,a0
  1609.     Bra.s    ppLoadData_Err
  1610.     ppLD_UnknownPP:
  1611.     Lea    DC_UnknownPPErr_EasyT,a0
  1612.     Bra.s    ppLoadData_Err
  1613.     ppLD_EmptyErr:
  1614.     Lea    DC_EmptyErr_EasyT,a0
  1615. ;!!    Bra.s    ppLoadData_Err
  1616.     ppLoadData_Err:
  1617.     Bsr.w    EasyRequest_Com
  1618.     Bra.w    DC_End
  1619.     ppLoadData_Ok:            ; pas d'erreur, on continue
  1620.  
  1621.     Move.l    GadtoolsBase,a6
  1622.     Lea    WorkingGadgets,a0
  1623.     Move.l    8*4(a0),a0        ; Source Gadget
  1624.     Move.l    WorkingWnd,a1        ; Struct Window en a1
  1625.     Suba.l    a2,a2            ; Req = 0
  1626.     Lea    WriteNumberTags,a3    ; Tags en a3
  1627.     Move.l    Len_,WNT_Number        ; Longueur du fichier
  1628.     Jsr    GT_SetGadgetAttrsA(a6)    ; Afficher longueur décompacté
  1629.  
  1630.     Bsr.w    GetWorkingMessage    ; On vérifie si gadget appuyé.
  1631.     Cmp.b    #4,Working_UserResponse
  1632.     Beq.w    DC_Skip2
  1633.     Cmp.b    #5,Working_UserResponse
  1634.     Beq.w    DC_Stop2
  1635.  
  1636.     Bsr.w    OpenSaveFile        ; Ouvrir le fichier pour sauver
  1637.  
  1638.     Cmp.l    #0,FileHandle        ; Ouverture réussie ?
  1639.     Bne.s    DC_OpenSaveFile_Ok    ; Oui, on continue
  1640.     Lea    OpenWriteErr_EasyT,a0
  1641.     Bsr.w    EasyRequest_Com        ; Non, on avertit l'utilisateur
  1642.     Bra.s    DC_End1            ; Libérer la mémoire et continuer
  1643.     DC_OpenSaveFile_Ok:        ; Overture Ok, on continue
  1644.  
  1645.     Move.l    #Working_SavingT,WTT_Text; GTTX_Text  =  Adresse du texte
  1646.     Bsr.w    SetWorkingGad5Attrs
  1647.  
  1648.     Move.l    DosBase,a6
  1649.     Move.l    FileHandle,d1
  1650.     Move.l    Buffer_,d2
  1651.     Move.l    Len_,d3            ; On écrit le contenu du tampon
  1652.     Jsr    Write(a6)        ; décompacté
  1653.     Move.l    d0,d4
  1654.     Move.l    FileHandle,d1
  1655.     Jsr    Close(a6)        ; Fermer le fichier
  1656.     Cmp.l    Len_,d4            ; Ecriture Ok ?
  1657.     Beq.s    DC_Write_Ok        ; Oui, continue
  1658.     Lea    WriteErr_EasyT,a0
  1659.     Bsr.w    EasyRequest_Com        ; On avertit l'utilisateur
  1660. ;!!    Bra.s    DC_End1            ; Libérer la mémoire et continuer
  1661.     DC_Write_Ok:
  1662.  
  1663.     DC_End1:
  1664.     Move.l    ExecBase,a6
  1665.     Move.l    Buffer_,a1        ; Adresse du buffer
  1666.     Move.l    Len_,d0            ; Longueur décomp
  1667.     Jsr    FreeMem(a6)        ; Libérer tampon décomp
  1668.     DC_End:
  1669.     Rts
  1670.  
  1671.  
  1672.     DC_Skip_Com:
  1673.     Move.l    #Working_StopT,WTT_Text    ; GTTX_Text = Adresse du texte
  1674.     Bsr.s    SetWorkingGad5Attrs
  1675.     Rts
  1676.     DC_Stop_Com:
  1677.     Bsr.s    DC_Skip_Com
  1678.     Move.l    FileNumber,FileCount    ; Dernier fichier traité
  1679.     Subq.l    #8,FileCount
  1680.     Rts
  1681.     DC_Skip1:
  1682.     Bsr.s    DC_Skip_Com
  1683.     Bra.s    DC_End            ; Fichier suivant
  1684.     DC_Stop1:
  1685.     Bsr.s    DC_Stop_Com
  1686.     Bra.s    DC_End            ; Terminer
  1687.     DC_Skip2:
  1688.     Bsr.s    DC_Skip_Com
  1689.     Bra.s    DC_End1            ; Traitement terminé
  1690.     DC_Stop2:
  1691.     Bsr.s    DC_Stop_Com
  1692.     Bra.s    DC_End1            ; Libérer la mémoire et terminer
  1693.  
  1694.  
  1695. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1696. *                                    *
  1697. *  FUNCTION:                                *
  1698. *    SetWorkingGad5Attrs:                        *
  1699. *        Remplace les nombreux appel à SetGadgetsAttrsA pour    *
  1700. *        le Gadget 5 de l'interface Working.            *
  1701. *  INPUT:                                *
  1702. *    SetWorkingGad5Attrs:                        *
  1703. *        WriteTextTags->WTT_Text = APTR sur le texte        *
  1704. *        WorkingWnd        = Structure Window        *
  1705. *        WorkingGadgets        = Pointeur sur set de gadgets    *
  1706. *  OUTPUT:                                *
  1707. *    SetWorkingGad5Attrs:                        *
  1708. *                                    *
  1709. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1710.  
  1711.  
  1712. SetWorkingGad5Attrs:
  1713.     Move.l    GadtoolsBase,a6
  1714.     Lea    WorkingGadgets,a0
  1715.     Move.l    5*4(a0),a0        ; Status Gadget
  1716.     Lea    WriteTextTags,a3    ; Tags en a3
  1717.     Move.l    WorkingWnd,a1        ; Struct Window en a1
  1718.     Suba.l    a2,a2            ; Req = 0
  1719.     Jsr    GT_SetGadgetAttrsA(a6)    ; Afficher nom du fichier
  1720.     Rts
  1721.  
  1722.  
  1723. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1724. *                                    *
  1725. *  DESCRIPTION:                                *
  1726. *    FreeFileNameBuffer:                        *
  1727. *        Remplace les nombreuses routines qui libère le        *
  1728. *        tampon FileNameBuffer                    *
  1729. *  INPUT:                                *
  1730. *    FreeFileNameBuffer:                        *
  1731. *        FileNameBuffer    =  APTR sur le tampon            *
  1732. *        FileNameBufferLL=  Longueur du tampon            *
  1733. *  OUTPUT:                                *
  1734. *    FreeFileNameBuffer:                        *
  1735. *                                    *
  1736. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1737.  
  1738.  
  1739. FreeFileNameBuffer:
  1740.     Move.l    ExecBase,a6
  1741.     Move.l    FileNameBuffer,a1    ; Adresse du tampon
  1742.     Suba.l    #4,a1
  1743.     Move.l    #FileNameBufferLL,d0    ; Longueur
  1744.     Jsr    FreeMem(a6)
  1745.     Move.l    #0,FileNameBuffer    ; FileNameBuffer vide
  1746.     Rts
  1747.  
  1748.  
  1749. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1750. *                                    *
  1751. *  DESCRIPTION:                                *
  1752. *    InstallAppIcon:                            *
  1753. *        Installe l'AppIcon dans le Wb                *
  1754. *  INPUT:                                *
  1755. *    InstallAppIcon:                            *
  1756. *        WorkbenchBase.l    =                    *
  1757. *        AppIconText.l    =  APTR sur le nom de l'AppIcon        *
  1758. *        AppMsgPort.l    =  Port message prévu pour l'Appicon    *
  1759. *        AppDiskObject.l    =  APTR sur un DiskObject pour AppIcon    *
  1760. *  OUTPUT:                                *
  1761. *    InstallAppIcon:                            *
  1762. *        AppIcon.l    =  AppIcon                *
  1763. *                                    *
  1764. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1765.  
  1766. InstallAppIcon:
  1767.  
  1768.     Move.l    WorkbenchBase,a6
  1769.     Moveq    #0,d0
  1770.     Moveq    #0,d1
  1771.     Lea    AppIconText,a0
  1772.     Move.l    AppMsgPort,a1
  1773.     Move.l    #0,a2
  1774.     Move.l    AppDiskobject,a3
  1775.     Move.l    #0,a4
  1776.     Jsr    AddAppIconA(a6)
  1777.     Move.l    d0,AppIcon
  1778.  
  1779.     Rts
  1780.  
  1781.  
  1782. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1783. *                                    *
  1784. *  DESCRIPTION:                                *
  1785. *    EvtlRemoveAppIcon:                        *
  1786. *        Enlève l'AppIcon dans le Wb, si AppIcon n'est pas NULL    *
  1787. *  INPUT:                                *
  1788. *    EvtlRemoveAppIcon:                        *
  1789. *        WorkbenchBase.l    =                    *
  1790. *        AppIcon.l    =  APTR sur l'AppIcon ou NULL        *
  1791. *  OUTPUT:                                *
  1792. *    EvtlRemoveAppIcon:                        *
  1793. *                                    *
  1794. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1795.  
  1796. EvtlRemoveAppIcon:
  1797.     Move.l    AppIcon,a0
  1798.     Cmp.l    #0,a0
  1799.     Beq.s    EvtlRemoveAppiconF
  1800.     Move.l    WorkbenchBase,a6
  1801.     Jsr    RemoveAppIcon(a6)    ; On enléve l'AppIcon
  1802.     Move.l    #0,AppIcon
  1803.     EvtlRemoveAppiconF:
  1804.     Rts
  1805.  
  1806.  
  1807. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1808. *                                    *
  1809. *  DESCRIPTION:                                *
  1810. *    OpenSaveFile:                            *
  1811. *        Ouvre le fichier de sauvegarde.  Tient compte des    *
  1812. *        préférences de l'utilisateur.  Copie éventuellement    *
  1813. *        l'icône du fichier.                    *
  1814. *  INPUT:                                *
  1815. *    OpenSaveFile:                            *
  1816. *        Working_CrunchUserResponse                *
  1817. *                =  1 pour compacter            *
  1818. *                =  2 pour décompacter            *
  1819. *        FileNameBuffer    =  APTR sur le nom du fichier avec path    *
  1820. *        FileName    =  APTR sur le nom du fichier        *
  1821. *  OUTPUT:                                *
  1822. *    OpenSaveFile:                            *
  1823. *        FileHandle    =  Gestionnaire de fichier  ou  0    *
  1824. *                                    *
  1825. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1826.  
  1827.  
  1828. OpenSaveFile:
  1829.     Move.l    #0,FileHandle        ; Si erreur, reste = à 0
  1830.  
  1831.     Move.l    ExecBase,a6
  1832.     Move.l    #FileNameBufferLL,d0    ; 256 Bytes
  1833.     Move.l    #$1,d1            ; PublicMem
  1834.     Jsr    AllocMem(a6)        ; Allouer un tampon
  1835.     Move.l    d0,OSF_FileNameBuffer    ; Buffer alloué
  1836.     Beq.w    OSF_End            ; Non, on quitte
  1837.     Addq.l    #4,OSF_FileNameBuffer
  1838.  
  1839.     Move.l    ConfigBuffer0,a0
  1840.     Tst.b    CP_Config_UseAltPath(a0); Utiliser AltPath ?
  1841.     Beq.s    OSF_NoAltPath        ; Non, on OverWrite le fichier
  1842.     Bsr.w    OSF_AddPart        ; Alt Path + Nom
  1843.     Tst.l    d0            ; AddPart Ok ?
  1844.     Beq.w    OSF_End1        ; Non, pas d'ouverture de fichier
  1845.     OSF_NoAltPath:
  1846.     Move.l    ConfigBuffer0,a0
  1847.     Tst.b    CP_Config_UseAltPath(a0); Utiliser AltPath ?
  1848.     Bne.s    OSF_NoCopyAll        ; Oui, on continue
  1849.     Bsr.w    OSF_CopyAll        ; Non, copier tout le nom de fichier
  1850.     OSF_NoCopyAll:
  1851.  
  1852.     Cmp.b    #1,Working_CrunchUserResponse; Compactage ?
  1853.     Bne.s    OSF_NoEvtlAddpp        ; Non, continuer
  1854.         Move.l    ConfigBuffer0,a0
  1855.         Tst.b    CP_Config_Add_pp(a0)    ; Ajouter '.pp'
  1856.         Bne.s    OSF_Addpp        ; Oui, continuer
  1857.             Tst.b    CP_Config_UseAltPath(a0)
  1858.             Bne.s    OSF_NoAddpp_UseAltPath
  1859.                 Bsr.w    OSF_CopyAll
  1860.                 Move.b    #2,d0        ; Pas d'opération Icon
  1861.             Bra.s    OSF_NoAddpp_UseAltPathF
  1862.             OSF_NoAddpp_UseAltPath:
  1863.                 Bsr.w    OSF_AddPart
  1864.                 Move.b    #0,d0        ; Copier et ne pas effacer 
  1865.             OSF_NoAddpp_UseAltPathF:
  1866.         Bra.s    OSF_AddppF
  1867.         OSF_Addpp:
  1868.             Move.l    ConfigBuffer0,a0
  1869.             Tst.b    CP_Config_UseAltPath(a0)    ; Utiliser 'Alt Path'
  1870.             Bne.s    OSF_Addpp_UseAltPath        ; Oui, continuer
  1871.                 Bsr.w    OSF_CopyAll        ; Copier tout le nom
  1872.                 Bsr.w    OSF_DoAddpp
  1873.                 Move.l    DosBase,a6
  1874.                 Move.l    FileNameBuffer,d1    ; Fichier source
  1875.                 Jsr    DeleteFile(a6)        ; Effacer le fichier
  1876.                 Move.b    #1,d0            ; Copier et effacer
  1877.             Bra.s    OSF_Addpp_UseAltPathF
  1878.             OSF_Addpp_UseAltPath:
  1879.                 Bsr.w    OSF_AddPart        ; Copier 'AltPath' et merger FileName
  1880.                 Bsr.w    OSF_DoAddpp
  1881.                 Move.b    #0,d0            ; Copier et ne pas effacer
  1882.             OSF_Addpp_UseAltPathF:
  1883.         OSF_AddppF:
  1884.     Bra.s    OSF_NoEvtlRempp
  1885.     OSF_NoEvtlAddpp:
  1886.     Cmp.b    #2,Working_CrunchUserResponse; Décompactage ?
  1887.     Bne.s    OSF_NoEvtlRempp
  1888.         Move.l    ConfigBuffer0,a0
  1889.         Tst.b    CP_Config_Rem_pp(a0)
  1890.         Bne.s    OSF_Rempp
  1891.             Tst.b    CP_Config_UseAltPath(a0)
  1892.             Bne.s    OSF_NoRempp_UseAltPath
  1893.                 Bsr.w    OSF_CopyAll
  1894.                 Move.b    #2,d0            ; Pas d'opération Icon
  1895.             Bra.s    OSF_NoRempp_UseAltPathF
  1896.             OSF_NoRempp_UseAltPath:
  1897.                 Bsr.w    OSF_AddPart
  1898.                 Move.b    #0,d0            ; Copier et ne pas effacer
  1899.             OSF_NoRempp_UseAltPathF:
  1900.         Bra.s    OSF_RemppF
  1901.         OSF_Rempp:
  1902.             Move.l    ConfigBuffer0,a0
  1903.             Tst.b    CP_Config_UseAltPath(a0)
  1904.             Bne.s    OSF_Rempp_UseAltPath
  1905.                 Bsr.w    OSF_CopyAll
  1906.                 Bsr.w    OSF_DoRempp
  1907.                 Tst.b    d0
  1908.                 Beq.s    OSF_Rempp_NoUseAltPath_Nopp
  1909.                 Move.l    DosBase,a6
  1910.                 Move.l    FileNameBuffer,d1    ; Fichier source
  1911.                 Jsr    DeleteFile(a6)        ; Effacer le fichier
  1912.                 Move.b    #1,d0            ; Copier et effacer
  1913.                 Bra.s    OSF_Rempp_NoUseAltPath_NoppF
  1914.                 OSF_Rempp_NoUseAltPath_Nopp:
  1915.                 Move.b    #2,d0            ; Pas d'opération Icon
  1916.                 OSF_Rempp_NoUseAltPath_NoppF:
  1917.             Bra.s    OSF_Rempp_UseAltPathF
  1918.             OSF_Rempp_UseAltPath:
  1919.                 Bsr.w    OSF_AddPart
  1920.                 Bsr.w    OSF_DoRempp
  1921.             ;    Bra.s    OSF_Rempp_UseAltPath_NoppF
  1922.                 OSF_Rempp_UseAltPath_Nopp:
  1923.                 OSF_Rempp_UseAltPath_NoppF:
  1924.                 Move.b    #0,d0            ; Copier et ne pas effacer
  1925.             OSF_Rempp_UseAltPathF:
  1926.         OSF_RemppF:
  1927.     OSF_NoEvtlRempp:
  1928.  
  1929.     Move.b    d0,d4
  1930.     Cmp.b    #2,d4
  1931.     Beq.s    OSF_CopyIconF            ; Pas d'opération Icon
  1932.         Move.l    IconBase,a6
  1933.         Move.l    FileNameBuffer,a0    ; Ancien nom
  1934.         Jsr    GetDiskObject(a6)    ; Lire Icône
  1935.         Move.l    d0,d5            ; DiskObject
  1936.         Beq.s    OSF_CopyIconF        ; Si erreur, fin de la copie
  1937.  
  1938.         Cmp.b    #0,d4            ; Effacer icône
  1939.         Beq.s    OSF_DelDiskObjectF    ; Non, continuer
  1940.         Move.l    FileNameBuffer,a0    ; Ancien nom
  1941.         Jsr    DeleteDiskObject(a6)    ; Effacer icône
  1942.         OSF_DelDiskObjectF:
  1943.  
  1944.         Move.l    ConfigBuffer0,a0
  1945.         Tst.b    CP_Config_UseAltPath(a0); AltPath = 0
  1946.         Beq.s    OSF_PutDiskObject    ; Oui, toujours copier icône
  1947.         Tst.b    CP_Config_CopyIcons(a0)    ; L'utilisateur veut copier l'icône ?
  1948.         Beq.s    OSF_PutDiskObjectF    ; Non, sauter la sauvegarde
  1949.         OSF_PutDiskObject:
  1950.         Move.l    d5,a1            ;!! DiskObject
  1951.         Move.l    OSF_FileNameBuffer,a0    ; Nouveau nom
  1952.         Jsr    PutDiskObject(a6)    ; Écrire icône
  1953.         OSF_PutDiskObjectF:
  1954.         Move.l    d5,a0            ;!! DiskObject
  1955.         Jsr    FreeDiskObject(a6)    ; Libérer la mémoire
  1956.     OSF_CopyIconF:
  1957.  
  1958.     Move.l    DosBase,a6
  1959.     Move.l    OSF_FileNameBuffer,d1    ; Tampon
  1960.     Move.l    #1006,d2        ; Mode_NewFile
  1961.     Jsr    Open(a6)        ; Routine d'ouverture du fichier
  1962.     Move.l    d0,FileHandle        ; en écriture.
  1963.  
  1964. OSF_End1:
  1965.     Move.l    ExecBase,a6
  1966.     Move.l    OSF_FileNameBuffer,a1    ; Tampon
  1967.     Suba.l    #4,a1
  1968.     Move.l    #FileNameBufferLL,d0    ; Longueur
  1969.     Jsr    FreeMem(a6)        ; Libérer le tampon
  1970. OSF_End:
  1971.     Rts                ; Return
  1972.  
  1973.  
  1974. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1975. *  Ajoute le nom de fichier au Alt Path.  * * * * * * * * * * * * * * * *
  1976. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1977.  
  1978. OSF_AddPart:
  1979. ;    Movem.l    a6/d2-d3,-(sp)
  1980.     Move.l    ExecBase,a6
  1981.     Move.l    ConfigBuffer0,a0    ; Source en a0
  1982.     Adda.l    #CP_Config_AltPath,a0    ; ConfigBuffer->AltPath
  1983.     Move.l    OSF_FileNameBuffer,a1    ; Dest en a1
  1984.     Move.l    #FileNameBufferL,d0    ; Longueur à copier en d0
  1985.     Jsr    CopyMem(a6)        ; Copier le Alt Path
  1986.  
  1987.     Move.l    DosBase,a6
  1988.     Move.l    OSF_FileNameBuffer,d1    ; Dir + destination
  1989.     Move.l    FileName,d2        ; Fichier
  1990.     Move.l    #FileNameBufferL,d3    ; Longueur à ne pas dépasser
  1991.     Jsr    AddPart(a6)        ; Rassembler le dir et le fichier
  1992. ;    Movem.l    (sp)+,a6/d2-d3
  1993.     Rts
  1994.  
  1995.  
  1996. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1997. *  Copie l'entier du nom de fichier du 1er dans 2ème tampon.  * * * * * *
  1998. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1999.  
  2000. OSF_CopyAll:
  2001. ;    Move.l    a6,-(sp)
  2002.     Move.l    ExecBase,a6
  2003.     Move.l    FileNameBuffer,a0    ; Source en a0
  2004.     Move.l    OSF_FileNameBuffer,a1    ; Dest en a1
  2005.     Move.l    #FileNameBufferL,d0    ; Lomgueur à copier
  2006.     Jsr    CopyMem(a6)        ; Copier l'ensemble du nom
  2007. ;    Move.l    (sp)+,a6
  2008.     Rts
  2009.  
  2010.  
  2011. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2012. *  Ajouter .pp au nom de fichier.   * * * * * * * * * * * * * * * * * * *
  2013. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2014.  
  2015. OSF_DoAddpp:
  2016.     Move.l    OSF_FileNameBuffer,a0
  2017.     Bsr.s    OSF_findZero        ; Avancer jusqu'à 0
  2018.     Move.b    #'.',(a0)+
  2019.     Move.b    #'p',(a0)+
  2020.     Move.b    #'p',(a0)+
  2021.     Move.b    #0,(a0)            ; Ajouter '.pp',0
  2022.     Rts
  2023.  
  2024.  
  2025. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2026. *  Enlève .pp au nom de fichier.  * * * * * * * * * * * * * * * * * * * *
  2027. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2028.  
  2029. OSF_DoRempp:
  2030.     Move.l    OSF_FileNameBuffer,a0
  2031.     Bsr.s    OSF_FindZero        ; Anvacner jusqu'à 0
  2032.     Cmp.b    #'p',-(a0)        ; fin = '.pp'
  2033.     Bne.s    OSF_NoRempp        ; Non, retourner 0
  2034.     Cmp.b    #'p',-(a0)
  2035.     Bne.s    OSF_NoRempp
  2036.     Cmp.b    #'.',-(a0)
  2037.     Bne.s    OSF_NoRempp
  2038.     Move.b    #0,(a0)            ; Oui, remplacer '.' par 0
  2039.     Move.b    #1,d0            ;  Retourner 1
  2040.     Bra.s    OSF_DoRemppF
  2041.     OSF_NoRempp:
  2042.     Move.b    #0,d0
  2043.     OSF_DoRemppF:
  2044.     Rts
  2045.  
  2046.  
  2047. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2048. *  Avancer jusqu'à trouver le caractère 0.  * * * * * * * * * * * * * * *
  2049. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2050.  
  2051. OSF_FindZero:
  2052.     Addq.l    #1,a0
  2053.     Tst.b    (a0)
  2054.     Bne.s    OSF_FindZero
  2055.     Rts
  2056.  
  2057.  
  2058. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2059. *                                    *
  2060. *  FUNCTION:                                *
  2061. *    EasyRequest_Com:                        *
  2062. *        Remplace les fréquents appel à                *
  2063. *        Intuition/EasyRequestArgs() avec des valeurs pas défaut    *
  2064. *  INPUT:                                *
  2065. *    EasyRequest_Com:                        *
  2066. *        a0.l        =  APTR sur le Text du Requester    *
  2067. *  OUTPUT:                                *
  2068. *    EasyRequest_Com:                        *
  2069. *                                    *
  2070. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2071.  
  2072.  
  2073. EasyRequest_Com:
  2074.     Move.l    IntuitionBase,a6
  2075.     Lea    Def_EasyStruct,a1    ; Structure par défaut
  2076.     Move.l    a0,12(a1)        ; EasyStruct->ES_Text
  2077.     Suba.l    a2,a2            ; IDCMP_Ptr = 0
  2078.     Suba.l    a3,a3            ; ArgList = 0
  2079.     Suba.l    a0,a0            ; Window = Default
  2080.     Jsr    EasyRequestArgs(a6)    ; Avertir
  2081.     Rts
  2082.  
  2083.  
  2084. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2085. *                                    *
  2086. *  DESCRIPTION:                                *
  2087. *    ConfigPanel:                            *
  2088. *        S'occupe intégralement de la configuration du pgm    *
  2089. *        Sauve les résultats et traite les erreurs.        *
  2090. *  INPUT:                                *
  2091. *    ConfigPanel:                            *
  2092. *  OUTPUT:                                *
  2093. *    ConfigPanel:                            *
  2094. *        QuitByte:                        *
  2095. *            =  0 = Continuer                *
  2096. *            =  2 =  Quitter                    *
  2097. *                                    *
  2098. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2099.  
  2100.  
  2101. ConfigPanel:
  2102.     Movem.l    d2-d7/a2-a6,-(sp)
  2103.     Move.l    ExecBase,a6
  2104.     Move.l    #$10001,d1
  2105.     Move.l    #ConfigBufferL,d0    ; Allouer un tampon pour la config
  2106.     Jsr    AllocMem(a6)
  2107.     Move.l    d0,ConfigBuffer        ; Buffer ok ?
  2108.     Beq.w    CP_NoPanelErr0        ; Non, quitter le ConfigPanel
  2109.  
  2110.     Move.l    ConfigBuffer0,a0    ; Copier un tampon dans l'autre
  2111.     Move.l    ConfigBuffer,a1        ; Dest
  2112.     Move.l    #ConfigBufferL,d0    ; Longueur
  2113.     Jsr    CopyMem(a6)
  2114.  
  2115.     Move.l    ConfigBuffer,a0        ; !!!!
  2116.     Move.b    #2,CP_Config_Version(a0); Version de AppPP (Release 1.1)
  2117.  
  2118.     Move.b    CP_Config_UseAltPath(a0),CGT_Check0; État du CHECKBOX 'Use Alt Path'
  2119.     Move.b    CP_Config_CopyIcons(a0),CGT_Check1; État du CheckBox 'Copy Icons'
  2120.     Move.b    CP_Config_Add_pp(a0),CGT_Check2; État du CheckBox 'Add #?.pp'
  2121.     Move.b    CP_Config_Rem_pp(a0),CGT_Check3; État du CheckBox 'Rem #?.pp'
  2122.     Move.w    CP_Config_Priority(a0),CGT_Slid0; Niveau du slider 'Priority'
  2123.     Move.l    CP_Config_AppIconX(a0),CGT_Int0; Integer 'X'
  2124.     Move.l    CP_Config_AppIconY(a0),CGT_Int1; Integer 'Y'
  2125.     Move.b    CP_Config_Efficiency(a0),CGT_Cycle0; Modifier la TagValue 'Efficiency'
  2126.     Move.b    CP_Config_Buffer(a0),CGT_Cycle1; Modifier la TagValue 'Buffer'
  2127.     Move.b    CP_Config_Effect(a0),CGT_Cycle2; Modifier la TagValue 'Effect'
  2128.     Adda.l    #CP_Config_AltPath,a0
  2129.     Move.l    a0,CGT_String0        ; TagValue du Text0  (APTR)
  2130.  
  2131.     Move.b    #3,GUI_            ; Interface du ConfigPanel
  2132.     Bsr.w    SetupScreen_
  2133.     Tst.b    d0
  2134.     Bne.w    CP_NoPanelErr1
  2135.     Move.w    #ConfigLeft,Left    ; Dimensions de la fenêtre
  2136.     Move.w    #ConfigTop,Top
  2137.     Move.w    #ConfigWidth,Width
  2138.     Move.w    #ConfigHeight,Height
  2139.     Bsr.w    OpenWindow_        ; Ouverture de la fenêtre
  2140.     Move.l    Wnd,ConfigWnd
  2141.     Tst.b    d0
  2142.     Bne.w    CP_NoPanelErr1
  2143.  
  2144.     Move.l    #InverseBevelbox,Bevelbox_Taglist
  2145.     Move.w    #Config0_Top,BevelTop
  2146.     Move.w    #Config0_Left,BevelLeft
  2147.     Move.w    #Config0_Width,BevelWidth
  2148.     Move.w    #Config0_Height,BevelHeight
  2149.     Bsr.w    Render1            ; Dessin de la BevelBox
  2150.  
  2151.     Move.l    #InverseBevelbox,Bevelbox_Taglist
  2152.     Move.w    #Config1_Top,BevelTop
  2153.     Move.w    #Config1_Left,BevelLeft
  2154.     Move.w    #Config1_Width,BevelWidth
  2155.     Move.w    #Config1_Height,BevelHeight
  2156.     Bsr.w    Render1
  2157.  
  2158.     Move.l    #InverseBevelbox,Bevelbox_Taglist
  2159.     Move.w    #Config2_Top,BevelTop
  2160.     Move.w    #Config2_Left,BevelLeft
  2161.     Move.w    #Config2_Width,BevelWidth
  2162.     Move.w    #Config2_Height,BevelHeight
  2163.     Bsr.w    Render1
  2164.  
  2165. CP_WaitGadget:
  2166.     Move.b    #3,GUI_
  2167.     Move.b    #$ff,UserResponse
  2168.     Move.l    ConfigWnd,Wnd
  2169.     Bsr.w    WaitMessages        ; Attendre pression d'un gadget
  2170.     Move.l    Gt_IMsg,-(sp)        ; Sauver Message de GUI_ 3
  2171.  
  2172.     Move.w    Code,d1
  2173.     Move.l    ConfigBuffer,a0
  2174.     Move.l    IAdress,a1
  2175.     Move.l    ExecBase,a6
  2176.  
  2177.     Move.b    UserResponse,d0        ; Switch (UserResponse) ... Case ..
  2178.     Cmp.b    #1,d0            ; CHECKBOX 'Use Alt Path'
  2179.     Beq.w    CP_Act1
  2180.     Cmp.b    #2,d0            ; CYCLE 'Efficiency'
  2181.     Beq.w    CP_Act2
  2182.     Cmp.b    #3,d0            ; CYCLE 'Buffer'
  2183.     Beq.w    CP_Act3
  2184.     Cmp.b    #4,d0            ; CYCLE 'Effect'
  2185.     Beq.w    CP_Act4
  2186.     Cmp.b    #5,d0            ; BUTTOM 'Save'
  2187.     Beq.w    CP_Act5
  2188.     Cmp.b    #6,d0            ; BUTTON 'Use'
  2189.     Beq.w    CP_Act6
  2190.     Cmp.b    #7,d0            ; BUTTON 'Cancel'
  2191.     Beq.w    CP_Act7
  2192.     Cmp.b    #8,d0            ; BUTTON 'Quit'
  2193.     Beq.w    CP_Act8
  2194.     Cmp.b    #9,d0            ; BUTTON 'Get'
  2195.     Beq.w    CP_Act9
  2196.     Cmp.b    #10,d0            ; BUTTON 'About'
  2197.     Beq.w    CP_Act10
  2198.     Cmp.b    #11,d0            ; CHECKBOX 'Copy Icons'
  2199.     Beq.w    CP_Act11
  2200.     Cmp.b    #12,d0            ; CheckBox 'Add #?.pp'
  2201.     Beq.w    CP_Act12
  2202.     Cmp.b    #13,d0            ; CheckBox 'Rem #?.pp'
  2203.     Beq.w    CP_Act13
  2204.     Cmp.b    #14,d0            ; Slider 'Priority'
  2205.     Beq.w    CP_Act14
  2206.     Cmp.b    #15,d0            ; Integer 'X'
  2207.     Beq.w    CP_Act15
  2208.     Cmp.b    #16,d0            ; Integer 'Y'
  2209.     Beq.w    CP_Act16
  2210.     Cmp.b    #17,d0            ; String 'Alt Path'
  2211.     Beq.w    CP_Act17
  2212.     Bra.w    CP_ActF            ; Possibilité non-prévue
  2213.  
  2214.  
  2215. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2216. *   Utilise-t-on le chemin alternatif?  Ecrit dans le tampon.   * * * * *
  2217. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2218.  
  2219. CP_Act1:            ; CHECKBOX 'Use Alt Path'
  2220.     Eor.b    #%1,CP_Config_UseAltPath(a0); Inverser TRUE/FALSE dans Config
  2221.     Eor.b    #%1,CGT_Check0        ; TRUE/FASLE du TagValue du CHECKBOX 'Use Alt Path'
  2222.     Move.b    #0,CP_QuitByte        ; Continuer ConfigPanel
  2223.     Bra.w    CP_ActF            ; Break;
  2224.  
  2225.  
  2226. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2227. *   Choix de l'efficacité. On écrit le n° au bon endroit dans le buffer *
  2228. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2229.  
  2230. CP_Act2:            ; CYCLE Efficiency
  2231.     Move.b    d1,CP_Config_Efficiency(a0); Code dans ConfigBuffer
  2232.     Move.b    #0,CP_QuitByte        ; Continuer ConfigPanel
  2233.     Bra.w    CP_ActF            ; Break;
  2234.  
  2235.  
  2236. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2237. *   Choix du tampon. On écrit le n° au bon endroit dans le buffer.  * * *
  2238. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2239.  
  2240. CP_Act3:            ; CYCLE Buffer
  2241.     Move.b    d1,CP_Config_Buffer(a0)    ; Code dans ConfigBuffer
  2242.     Move.b    #0,CP_QuitByte        ; Continuer ConfigPanel
  2243.     Bra.w    CP_ActF            ; Break;
  2244.  
  2245.  
  2246. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2247. *   Choix de l'effet. On écrit le n° au bon endroit dans le buffer  * * *
  2248. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2249.  
  2250. CP_Act4:            ; CYCLE Effect
  2251.     Move.b    d1,CP_Config_Effect(a0)    ; Code dans ConfigBuffer
  2252.     Move.b    #0,CP_QuitByte        ; Continuer ConfigPanel
  2253.     Bra.w    CP_ActF            ; Break;
  2254.  
  2255.  
  2256. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2257. *  Sauve les préférences dans Env et Envarc.  * * * * * * * * * * * * * *
  2258. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2259.  
  2260. CP_Act5:            ; BUTTON Save
  2261.                     ; Copier le 1er tampon dans le 2ème
  2262. ;!!    Move.l    ConfigBuffer,a0        ; Source
  2263.     Move.l    ConfigBuffer0,a1    ; Destination
  2264.     Move.l    #ConfigBufferL,d0    ; Longueur à copier
  2265.     Jsr    CopyMem(a6)
  2266.  
  2267.     Move.l    DosBase,a6
  2268.     Move.l    #ConfigFileName0,d1
  2269.     Move.l    #1006,d2
  2270.     Jsr    Open(a6)        ; Ouvrir le fichier config dans Env:
  2271.     Move.l    d0,ConfigFileName0_FH    ; Ouverture Ok ?
  2272.     Bne.s    CP_Act5_OpenRamConfig_Ok; Oui, on continue
  2273.     Lea    SaveEnvConfigErr_EasyT,a0
  2274.     Bsr.w    EasyRequest_Com
  2275.     Bra.s    CP_Act5_OpenRamConfig_Err; et on ne sauve pas le fichier.
  2276.     CP_Act5_OpenRamConfig_Ok:    
  2277.     Move.l    d0,d1            ;!!
  2278.     Move.l    ConfigBuffer0,d2
  2279.     Move.l    #ConfigBufferL,d3    ; Ecrire le tampon
  2280.     Jsr    Write(a6)
  2281.     Move.l    d0,d4            ; Nb de bytes écrits en d4
  2282.     Move.l    ConfigFileName0_FH,d1
  2283.     Jsr    Close(a6)        ; Fermer le fichier
  2284.     Cmp.l    #ConfigBufferL,d4    ; Ecriture Ok ?
  2285.     Beq.s    CP_Act5_WriteRamConfig_Ok; Oui, on continue
  2286.     Move.l    #ConfigFileName0,d1    ; Non, Effacer le fichier
  2287.     Jsr    DeleteFile(a6)
  2288.     Lea    SaveEnvConfigErr_EasyT,a0
  2289.     Bsr.w    EasyRequest_Com
  2290.     CP_Act5_WriteRamConfig_Ok:
  2291.     CP_Act5_OpenRamConfig_Err:
  2292.  
  2293.     Move.l    DosBase,a6
  2294.     Move.l    #1006,d2
  2295.     Move.l    #ConfigFileName1,d1    ; Ouvrir le fichier Config dans EnvArc:
  2296.     Jsr    Open(a6)
  2297.     Move.l    d0,ConfigFileName0_FH    ; Ouverture Ok ?
  2298.     Bne.s    CP_Act5_OpenDiskConfig_Ok; Oui, on continue
  2299.     Lea    SaveEnvarcConfigErr_EasyT,a0
  2300.     Bsr.w    EasyRequest_Com
  2301.     Bra.s    CP_Act5_OpenDiskConfig_Err
  2302.     CP_Act5_OpenDiskConfig_Ok:
  2303.     Move.l    d0,d1            ;!!
  2304.     Move.l    ConfigBuffer0,d2
  2305.     Move.l    #ConfigBufferL,d3
  2306.     Jsr    Write(a6)        ; Ecrire le tampon dans le fichier
  2307.     Move.l    d0,d4            ; Nb de bytes écrits en d4
  2308.     Move.l    ConfigFileName0_FH,d1    ; Fermer le fichier
  2309.     Jsr    Close(a6)
  2310.     Cmp.l    #ConfigBufferL,d4    ; Ecriture Ok ?
  2311.     Beq.s    CP_Act5_WriteDiskConfig_Ok; Oui, on continue
  2312.     Move.l    #ConfigFileName1,d1    ; Non, effacer le fichier
  2313.     Jsr    DeleteFile(a6)
  2314.     Lea    SaveEnvarcConfigErr_EasyT,a0
  2315.     Bsr.w    EasyRequest_Com
  2316.     CP_Act5_WriteDiskConfig_Ok:
  2317.     CP_Act5_OpenDiskConfig_Err:
  2318.  
  2319.     Move.b    #1,CP_QuitByte        ; Continuer ConfigPanel
  2320.     Bra.w    CP_ActF            ; Break
  2321.  
  2322.  
  2323. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2324. *  Sauve les préferences dans un tampon. (pas dans un fichier)  * * * * *
  2325. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2326.  
  2327. CP_Act6:            ; BUTTON Use
  2328.                     ; Copier le 1er tampon dans le 2ème
  2329. ;!!    Move.l    ConfigBuffer,a0        ; Source
  2330.     Move.l    ConfigBuffer0,a1    ; Destination
  2331.     Move.l    #ConfigBufferL,d0    ; Longueur à copier
  2332.     Jsr    CopyMem(a6)
  2333.  
  2334.     Move.b    #1,CP_QuitByte        ; Continuer ConfigPanel
  2335.     Bra.w    CP_ActF            ; break
  2336.  
  2337.  
  2338. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2339. *  Ferme l'interface Config sans tenir compte des changements.  * * * * *
  2340. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2341.  
  2342. CP_Act7:            ; BUTTON Cancel
  2343.     Move.b    #1,CP_QuitByte        ; Continuer ConfigPanel
  2344.     Bra.w    CP_ActF            ; break
  2345.  
  2346.  
  2347. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2348. *  Termine le programme.  * * * * * * * * * * * * * * * * * * * * * * * *
  2349. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2350.  
  2351. CP_Act8:            ; BUTTON Quit
  2352.     Move.b    #2,CP_QuitByte        ; Continuer ConfigPanel
  2353.     Bra.w    CP_ActF            ; break
  2354.  
  2355.  
  2356. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2357. *  Execute la requête de fichier pour le chemin AltPath.  * * * * * * * *
  2358. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2359.  
  2360. CP_Act9:            ; BUTTON Get
  2361.     Lea    AslName,a1    
  2362.     Moveq    #36,d0
  2363.     Move.l    ExecBase,a6
  2364.     Jsr    OpenLibrary(a6)        ; Ouvrir la librairie Asl
  2365.     Move.l    d0,AslBase    
  2366.     Bne.s    CP9_AslOk        ; Ouverture a réussi
  2367.     Lea    AslLibraryErr_EasyT,a0    ; Erreur, avertir
  2368.     Bsr.w    EasyRequest_Com
  2369.     Bra.w    CP_NoAsl
  2370.     CP9_Aslok:
  2371.  
  2372.     Move.l    d0,a6            ;!!
  2373.     Moveq    #0,d0            ; Type = File Requester
  2374.     Lea    Config_AslPTags,a1
  2375.     Jsr    AllocAslRequest(a6)    ; Alloue la structure File Request
  2376.     Move.l    d0,AslRequestStruct
  2377.     Beq.w    CP_NoRequest        ; Structure non-disponible
  2378.  
  2379.     Move.l    d0,a0            ;!!  Request en a0
  2380.     Lea    Config_AslPTags,a1
  2381.     Jsr    AslRequest(a6)        ; Affiche la requête
  2382.     Tst.l    d0            ; Résultat ( 0L = (Cancel|Fail) )
  2383.     Beq.s    CP_CancelRequester
  2384.                     ; Utiliser les résultats
  2385.     Move.l    AslRequestStruct,a0
  2386.     Move.l    rf_Dir(a0),a1        ; adresse du nom du répertoire
  2387.     Move.l    ConfigBuffer,a0
  2388.     Adda.l    #CP_Config_AltPath,a0    ; ConfigBuffer->AltPath
  2389.     Move.l    #255-1,d0
  2390.     CP_Act9_CopyString:
  2391.     Subq.l    #1,d0            ; Nb de bytes copiés =? 254
  2392.     Beq.s    CP_Act9_CopyStringF    ; Oui, limiter à 254
  2393.     Move.b    (a1)+,(a0)+        ; Copier la chaîne du nom de fichier
  2394.     Tst.b    (a1)            ;  jusqu'à 0
  2395.     Bne.s    CP_Act9_CopyString    ; Chaîne pas finie, continer à copier
  2396.     CP_Act9_CopyStringF:
  2397.     Move.b    #0,(a0)            ; Terminer la chaîne
  2398.  
  2399.     Move.l    GadtoolsBase,a6
  2400.     Move.l    #ConfigGadgets+64,a0    ; 17 ème gadget (String)
  2401.     Move.l    (a0),a0
  2402.     Move.l    ConfigWnd,a1
  2403.     Move.l    #0,a2
  2404.     Lea    WriteStringTags,a3    ; Afficher le nouveau String
  2405.     Move.l    a3,a4            ; Pointeur sur les Tags
  2406.     Addq.l    #4,a4            ; Pointeur sur la donnée du tag
  2407.     Move.l    ConfigBuffer,a5        ; Pointeur sur la config
  2408.     Adda.l    #CP_Config_AltPath,a5    ; Pointeur sur le nom du fichier
  2409.     Move.l    a5,(a4)            ; Adresse du nom dans la donnée du Tag
  2410.     Jsr    GT_SetGadgetAttrsA(a6)
  2411.  
  2412.     CP_CancelRequester:        ; Cancel ou Fail
  2413.     Move.l    AslBase,a6
  2414.     Move.l    AslRequestStruct,a0    ; Libère la structure
  2415.     Jsr    FreeAslRequest(a6)
  2416.     CP_NoRequest:            ; Pas de structure Request
  2417.     Move.l    ExecBase,a6
  2418.     Move.l    AslBase,a1
  2419.     Jsr    CloseLibrary(a6)
  2420.     CP_NoAsl:            ; Ouverture de Asl a échoué
  2421.     Move.b    #0,CP_QuitByte        ; Continuer ConfigPanel
  2422.     Bra.w    CP_ActF            ; Break;
  2423.  
  2424.  
  2425. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2426. *  Ouvre l'interface About. * * * * * * * * * * * * * * * * * * * * * * *
  2427. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2428.  
  2429. CP_Act10:            ; BUTTON About
  2430.     Move.b    #4,GUI_
  2431.     Move.w    #AboutLeft,Left
  2432.     Move.w    #AboutTop,Top
  2433.     Move.w    #AboutWidth,Width
  2434.     Move.w    #AboutHeight,Height
  2435.     Bsr.w    OpenWindow_
  2436.     Move.l    Wnd,AboutWnd
  2437.     Tst.b    d0
  2438.     Bne.s    CP_Act10_OpenWindowErr
  2439.  
  2440.     Move.l    #NormalBevelbox,Bevelbox_Taglist
  2441.     Move.w    #About0_Top,BevelTop
  2442.     Move.w    #About0_Left,BevelLeft
  2443.     Move.w    #About0_Width,BevelWidth
  2444.     Move.w    #About0_Height,BevelHeight
  2445.     Bsr.w    Render1
  2446.  
  2447.     Move.b    #$ff,UserResponse
  2448. ;    Move.l    AboutWnd,Wnd
  2449.     Bsr.w    WaitMessages
  2450. ;    Move.b    UserResponse,About_UserResponse
  2451. ;    Move.l    AboutWnd,Wnd
  2452.     Bsr.w    GM_RepIMessage
  2453.     Bsr.w    IMessageLoop
  2454. CP_Act10_OpenWindowErr:
  2455.     Bsr.w    CloseWindow_
  2456.     Move.b    #0,CP_QuitByte        ; Continuer ConfigPanel
  2457.     Bra.w    CP_ActF            ; Break;
  2458.  
  2459.  
  2460. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2461. *  Copie-t-on l'icône ? * * * * * * * * * * * * * * * * * * * * * * * * *
  2462. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2463.  
  2464. CP_Act11:            ; CheckBox 'Copy Icons'
  2465.     Eor.b    #%1,CP_Config_CopyIcons(a0); Inverser TRUE/FALSE dans Config
  2466.     Eor.b    #%1,CGT_Check1        ; TRUE/FASLE du TagValue du CHECKBOX 'Copy Icons'
  2467.     Move.b    #0,CP_QuitByte        ; Continuer ConfigPanel
  2468.     Bra.w    CP_ActF            ; Break;
  2469.  
  2470.  
  2471. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2472. *  Ajoute-t-on #?.pp ?  * * * * * * * * * * * * * * * * * * * * * * * * *
  2473. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2474.  
  2475. CP_Act12:            ; CheckBox 'Add #?.pp'
  2476.     Eor.b    #%1,CP_Config_Add_pp(a0); Inverser TRUE/FALSE dans Config
  2477.     Eor.b    #%1,CGT_Check2        ; TRUE/FASLE du TagValue du CHECKBOX 'Add #?.pp'
  2478.     Move.b    #0,CP_QuitByte        ; Continuer ConfigPanel
  2479.     Bra.w    CP_ActF            ; Break;
  2480.  
  2481.  
  2482. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2483. *  Enlève-t-on #?.pp ?  * * * * * * * * * * * * * * * * * * * * * * * * *
  2484. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2485.  
  2486. CP_Act13:            ; CheckBox 'Rem #?.pp'
  2487.     Eor.b    #%1,CP_Config_Rem_pp(a0); Inverser TRUE/FALSE dans Config
  2488.     Eor.b    #%1,CGT_Check2        ; TRUE/FASLE du TagValue du CHECKBOX 'Rem #?.pp'
  2489.     Move.b    #0,CP_QuitByte        ; Continuer ConfigPanel
  2490.     Bra.s    CP_ActF            ; Break;
  2491.  
  2492.  
  2493. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2494. *  Choix de la Priorité.  * * * * * * * * * * * * * * * * * * * * * * * *
  2495. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2496.  
  2497. CP_Act14:            ; Slider 'Priority'
  2498.     Move.w    d1,CP_Config_Priority(a0); Sauver dans ConfigBuffer
  2499.     Move.w    d1,d0            ;!! Nouvelle priorité
  2500.     Move.l    ExecBase,a6
  2501.     Move.l    OwnTask,a1            ; Task
  2502.     Jsr    SetTaskPri(a6)        ; Modifier priorité
  2503.     Move.b    #0,CP_QuitByte        ; Continuer ConfigPanel
  2504.     Bra.s    CP_ActF            ; Break;
  2505.  
  2506.  
  2507. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2508. *  Choix de la position X de l'icône. * * * * * * * * * * * * * * * * * *
  2509. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2510.  
  2511. CP_Act15:            ; Integer 'X'
  2512.     Move.l    SpecialInfo(a1),a1    ; IAdress->SpecialInfo
  2513.     Move.l    LongInt(a1),d0        ; SpecialInfo->LongInt
  2514.     Move.l    d0,CP_Config_AppIconX(a0); Sauver dans ConfigBuffer
  2515.     Move.b    #0,CP_QuitByte        ; Continuer ConfigPanel
  2516.     Bra.s    CP_ActF            ; Break;
  2517.  
  2518.  
  2519. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2520. *  Choix de la position Y de l'icône. * * * * * * * * * * * * * * * * * *
  2521. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2522.  
  2523. CP_Act16:            ; Integer 'Y'
  2524.     Move.l    SpecialInfo(a1),a1    ; IAdress->SpecialInfo
  2525.     Move.l    LongInt(a1),d0        ; SpecialInfo->LongInt
  2526.     Move.l    d0,CP_Config_AppIconY(a0); Sauver dans ConfigBuffer
  2527.     Move.b    #0,CP_QuitByte        ; Continuer ConfigPanel
  2528.     Bra.s    CP_ActF            ; Break;
  2529.  
  2530.  
  2531. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2532. *  Choix du Alt Path. * * * * * * * * * * * * * * * * * * * * * * * * * *
  2533. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2534.  
  2535. CP_Act17:            ; String 'Alt Path'
  2536.     Move.l    SpecialInfo(a1),a1    ; IAdress->SpecialInfo
  2537.     Move.l    Buffer(a1),a1        ; SpecialInfo->Buffer
  2538.     Adda.l    #CP_Config_AltPath,a0    ; ConfigBuffer->AltPath
  2539.     Move.l    #255-1,d0
  2540.     CP_Act17_CopyString:
  2541.     Subq.l    #1,d0            ; Nb de bytes copiés =? 254
  2542.     Beq.s    CP_Act17_CopyStringF    ; Oui, limiter à 254
  2543.     Move.b    (a1)+,(a0)+        ; Copier la chaîne du nom de fichier
  2544.     Tst.b    (a1)            ;  jusqu'à 0
  2545.     Bne.s    CP_Act17_CopyString    ; Chaîne pas finie, continer à copier
  2546.     CP_Act17_CopyStringF:
  2547.     Move.b    #0,(a0)            ; Terminer la chaîne
  2548.     Move.b    #0,CP_QuitByte        ; Continuer ConfigPanel
  2549. ;!!    Bra.s    CP_ActF            ; Break;
  2550.  
  2551.  
  2552.  
  2553.  
  2554. CP_ActF:
  2555.     Move.b    #3,GUI_
  2556.     Move.l    (sp)+,Gt_IMsg        ; Recharger message de GUI_ 3
  2557.     Move.l    ConfigWnd,Wnd
  2558.     Bsr.w    GM_RepIMessage
  2559.     Tst.b    CP_QuitByte
  2560.     Bne.s    CP_ClosePanel
  2561.  
  2562.     Bra.w    CP_WaitGadget        ; Attendre la pression d'un autre gadget
  2563.  
  2564. CP_ClosePanel:
  2565.     Move.l    ConfigWnd,Wnd
  2566.     Bsr.w    IMessageLoop
  2567. CP_NoPanelErr1:
  2568.     Move.l    ConfigWnd,Wnd
  2569.     Bsr.w    CloseWindow_
  2570.     Bsr.w    CloseDownScreen_
  2571.     Bsr.s    CP_FreeConfigBuffer
  2572. CP_NoPanelErr0:
  2573.     Movem.l    (sp)+,d2-d7/a2-a6
  2574.     Rts
  2575.  
  2576. CP_FreeConfigBuffer:
  2577.     Move.l    ExecBase,a6
  2578.     Move.l    ConfigBuffer,a1
  2579.     Move.l    #ConfigBufferL,d0
  2580.     Jsr    FreeMem(a6)
  2581.     Rts
  2582.  
  2583.  
  2584. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2585. *                                    *
  2586. *  DESCRIPTION:                                *
  2587. *    GetWorkingMessage:                        *
  2588. *        Vérifie si un gadget de l'interface Working à été    *
  2589. *        appyué.                            *
  2590. *  INPUT:                                *
  2591. *  OUTPUT:                                *
  2592. *        UserResponse  =  Numéro du gadget appuyé + 1  ou  $ff    *
  2593. *                                    *
  2594. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2595.  
  2596.  
  2597. GetWorkingMessage:
  2598.     Move.l    WorkingWnd,Wnd
  2599.     Move.b    #$ff,UserResponse
  2600.     Bsr.s    GetMessage
  2601.     Move.b    UserResponse,Working_UserResponse
  2602.     Rts
  2603.  
  2604.  
  2605. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2606. *                                    *
  2607. *  DESCRIPTION:                                *
  2608. *    WaitMessages:                            *
  2609. *        Attend que l'utilisateur appuye un gadget et renvoie    *
  2610. *        le code correspondant.                    *
  2611. *    GetMessage:                            *
  2612. *        Renvoie le gadget appuyé, mais n'attend pas.        *
  2613. *        Retourne immédiatement.                    *
  2614. *    IMessageLoop:                            *
  2615. *        Va chercher tous les messages sur le port et renvoie    *
  2616. *        la réponse immédiatement.                *
  2617. *    GM_RepIMessage:                            *
  2618. *        Renvoie le message au port de la fenêtre        *
  2619. *  INPUT:                                *
  2620. *    WaitMessages:                            *
  2621. *        Wnd        =  WindowPtr                *
  2622. *        UserResponse    =  $ff                    *
  2623. *    GetMessage:                            *
  2624. *        Wnd        =  WindowPtr                *
  2625. *        UserResponse    =  $ff                    *
  2626. *    IMessageLoop:                            *
  2627. *    GM_RepIMessage:                            *
  2628. *        Gt_IMsg.l    =  Message reçu avec Gt_GetIMsg        *
  2629. *  OUTPUT:                                *
  2630. *    WaitMessages:                            *
  2631. *        UserResponse.b    =  Numéro du gadget + 1            *
  2632. *        IMsg_Code    =  IMsg->Code                *
  2633. *        Gt_IMsg.l    =  Gadtools IMsg            *
  2634. *    GetMessage:                            *
  2635. *        UserResponse.b    =  Numéro du gadget + 1  ou  $ff    *
  2636. *        Code        =  Éventuel IMsg_Code            *
  2637. *        Gt_IMsg.l    =  Éventuel Gadtools IMsg        *
  2638. *    IMessageLoop:                            *
  2639. *    GM_RepIMessage:                            *
  2640. *                                    *
  2641. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2642.  
  2643.  
  2644. WaitMessages:                ; Attendre la reponse de l'utilisateur
  2645.     Move.b    #0,UserResponse
  2646.     Move.l    Wnd,a0
  2647.     Move.l    86(a0),a0
  2648.     Move.l    ExecBase,a6
  2649.     Jsr    WaitPort(a6)        ; On Attend un message sur le port
  2650.     Move.b    #0,UserResponse        ; Wait: UserResponse = 0
  2651.  
  2652. GetMessage:
  2653.     Move.l    Wnd,a0
  2654.     Move.l    86(a0),a0        ; L'attente est finie.
  2655.     Move.l    GadtoolsBase,a6
  2656.     Jsr    GT_GetIMsg(a6)        ; On prélève le message
  2657.     Move.l    d0,Gt_IMsg        ; Message
  2658.     Bne.s    TestIMessage_F        ; Réponse OK ? --> sauver réponse
  2659.                     ; Réponse pas OK.
  2660.     Cmp.b    #$ff,UserResponse    ; Message attendu ?
  2661.     Bne.s    WaitMessages        ; Oui, on retourne attendre.
  2662.     Beq.s    WM_RefreshF        ; Non, on sort.
  2663.     TestIMessage_F:            ; Le message est OK.
  2664.  
  2665.     Move.l    d0,a0            ; Structure IMsg
  2666.     Move.l    IMsg_Class(a0),d1    ; IMsg->Class
  2667.     Move.w    IMsg_Code(a0),Code    ; IMsg->Code
  2668.     Move.l    IMsg_IAdress(a0),a0    ; IMsg->IAdress
  2669.     Move.l    a0,IAdress
  2670.     Moveq    #0,d0            
  2671.     Move.w    GadgetID(a0),d0        ; IMsg->IAdress->GadgetID
  2672.     Addq.b    #1,d0            ; Numéro du gadget  +  1
  2673.     Move.b    d0,UserResponse
  2674.  
  2675.     Btst    #2,d1            ; IDCMP_RefreshWindow ?
  2676.     Beq.s    WM_RefreshF        ; Non, on continue
  2677.     Move.l    GadToolsBase,a6        ; Oui, rafraîchir la fenêtre
  2678.     Move.l    Wnd,a0
  2679.     Jsr    GT_BeginRefresh(a6)
  2680.     Move.l    Wnd,a0
  2681.     Moveq    #1,d0            ; Complete = TRUE
  2682.     Jsr    GT_EndRefresh(a6)
  2683.     WM_RefreshF:    
  2684.     Rts
  2685.  
  2686. GM_RepIMessage:
  2687.     Move.l    GadToolsBase,a6
  2688.     Move.l    Gt_IMsg,a1
  2689.     Jsr    GT_ReplyIMsg(a6)    ; On renvoie le message au port.
  2690.     Move.l    #0,Gt_IMsg
  2691.  
  2692.     GM_IReturn:
  2693.     Rts                ; On retourne
  2694.  
  2695.  
  2696. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2697. *  Prend les messages en boucle.  * * * * * * * * * * * * * * * * * * * *
  2698. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2699.  
  2700. IMessageLoop:                ; L'utilisateur a déjà répondu.
  2701.     Move.l    GadToolsBase,a6        ; On boucle jusqu'à plus de Msg
  2702.     Move.l    Wnd,a0
  2703.     MOve.l    86(a0),a3        ; Window->UserPort
  2704. IML_Loop:
  2705.     Move.l    a3,a0
  2706.     Jsr    Gt_GetIMsg(a6)
  2707.     Move.l    d0,a1            ; Lorsqu'il y plus de message,
  2708.     Beq.s    IML_Return            ; on sort de la boucle.
  2709.     Jsr    Gt_ReplyIMsg(a6)
  2710.     Bra.s    IML_Loop
  2711. IML_Return:
  2712.     Rts
  2713.  
  2714.  
  2715. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2716. *                                    *
  2717. *  DESCRIPTION:                                *
  2718. *    CloseAll:                            *
  2719. *        Ferme tout ce qui est ouvert au démarrage        *
  2720. *  INPUT:                                *
  2721. *  OUTPUT:                                *
  2722. *                                    *
  2723. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2724.  
  2725. CloseAll:
  2726.  
  2727.     Move.l    ConfigBuffer0,a1
  2728.     Cmp.l    #0,a1
  2729.     Beq.s    CA_NoFreeMem
  2730.     Move.l    ExecBase,a6
  2731.     Move.l    #ConfigBufferL,d0
  2732.     Jsr    FreeMem(a6)
  2733.     CA_NoFreeMem:
  2734.  
  2735.     Bsr.w    EvtlRemoveAppIcon
  2736.  
  2737.     Move.l    AppMsgPort,a0
  2738.     Cmpa.l    #0,a0
  2739.     Beq.s    CA_NoDeletemsgport
  2740.     Move.l    ExecBase,a6
  2741.     Jsr    DeleteMsgPort(a6)    ; On ferme le message-port
  2742.     CA_NoDeletemsgport:
  2743.  
  2744.     Move.l    AppDiskObject,a0    ; Libération de la structure
  2745.     Cmp.l    #0,a0
  2746.     Beq.s    CA_NoAppDiskobject
  2747.     Move.l    IconBase,a6
  2748.     Jsr    FreeDiskObject(a6)    ; DiskObject
  2749.     CA_NoAppDiskobject:
  2750.  
  2751.     Move.l    DiskObject,a0        ; Libération de la structure
  2752.     Cmp.l    #0,a0
  2753.     Beq.s    CA_NoDiskobject
  2754.     Move.l    IconBase,a6
  2755.     Jsr    FreeDiskObject(a6)    ; DiskObject
  2756.     CA_NoDiskobject:
  2757.  
  2758.     Move.l    ExecBase,a6
  2759.     Move.l    GraphicsBase,a1
  2760.     Cmp.l    #0,a1
  2761.     Beq.s    CA_NoGraphicsbase
  2762.     Jsr    CloseLibrary(a6)
  2763.     Move.l    #0,GraphicsBase
  2764.     CA_NoGraphicsbase:
  2765.  
  2766.     Move.l    ppBase,a1
  2767.     Cmp.l    #0,a1
  2768.     Beq.s    CA_NoPpbase
  2769.     Jsr    CloseLibrary(a6)
  2770.     Move.l    #0,ppBase
  2771.     CA_NoPpbase:
  2772.  
  2773.     Move.l    IntuitionBase,a1    ; On ferme toutes les
  2774.     Cmp.l    #0,a1
  2775.     Beq.s    CA_NoIntuitionbase
  2776.     Jsr    CloseLibrary(a6)    ; libraries.
  2777.     Move.l    #0,IntuitionBase
  2778.     CA_NoIntuitionbase:
  2779.  
  2780.     Move.l    GadtoolsBase,a1
  2781.     Cmp.l    #0,a1
  2782.     Beq.s    CA_NoGadtoolsbase
  2783.     Jsr    CloseLibrary(a6)
  2784.     Move.l    #0,GadtoolsBase
  2785.     CA_NoGadtoolsbase:
  2786.  
  2787.     Move.l    DosBase,a1
  2788.     Cmp.l    #0,a1
  2789.     Beq.s    CA_NoDosbase
  2790.     Jsr    CloseLibrary(a6)
  2791.     Move.l    #0,DosBase
  2792.     CA_NoDosbase:
  2793.  
  2794.     Move.l    WorkbenchBase,a1
  2795.     Cmp.l    #0,a1
  2796.     Beq.s    CA_NoWorkbenchbase
  2797.     Jsr    CloseLibrary(a6)
  2798.     Move.l    #0,WorkbenchBase
  2799.     CA_NoWorkbenchbase:
  2800.  
  2801.     Move.l    IconBase,a1
  2802.     Cmp.l    #0,a1
  2803.     Beq.s    CA_NoIconbase
  2804.     Jsr    CloseLibrary(a6)
  2805.     Move.l    #0,IconBase
  2806.     CA_NoIconbase:
  2807.  
  2808.     Move.l    WbMsg,a1        ; Rendre le Startup-Message
  2809.     Cmp.l    #0,a1
  2810.     Beq.s    CA_NoWbmsg
  2811.     Jsr    ReplyMsg(a6)
  2812.     Move.l    #0,WBMsg
  2813.     CA_NoWbMsg:
  2814.     Rts                ; Fin du programme...
  2815.  
  2816.  
  2817. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2818. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2819. * *                                      * *
  2820. * *                                      * *
  2821. * *          * * * * * * * * * * * * * * * * * *              * *
  2822. * *         *  CODE GENERE PAR GADTOOLSBOX 2.0  *              * *
  2823. * *          * * * * * * * * * * * * * * * * * *              * *
  2824. * *                                      * *
  2825. * *                                      * *
  2826. * *       Il a été largement modifé afin de pouvoir supporter          * *
  2827. * *     plusieurs interfaces (question d'optimisation)  et pour      * *
  2828. * *    enlever un bug (rien de grave, uniquement de la cosmétique)    * *
  2829. * *                                      * *
  2830. * *    Malgré que GadtoolsBox souffre encore de pas mal de défauts    * *
  2831. * *   de jeunesse  et que le code source généré souffre de beaucoup   * *
  2832. * *       de manques que j'ai du combler (GadtoolsBox génère          * *
  2833. * *    l'interface au sens pûrement graphique du terme, mais ne      * *
  2834. * *     gère pas les gadgets),  il m'a permit de comprendre le          * *
  2835. * *   fonctionnement de la Gadtools.library  qui est le seul moyen    * *
  2836. * *   de programmer convenablement une interface graphique, à part    * *
  2837. * *    MUI, qui est vraiment le top (Même sur Macintosh, il n'y a     * *
  2838. * *              rien de comparable!)                  * *
  2839. * *                                      * *
  2840. * *   De toute façon,  un grand Merci à Jan van den Baard, l'auteur   * *
  2841. * *  de GadtoolsBox,  pous son immense service rendu à la communauté  * *
  2842. * *     Amiga.  Grâce à lui, donner une interface graphique à un     * *
  2843. * *     n'est, sur Amiga, plus un luxe, ni une perte de temps...     * *
  2844. * *                                      * *
  2845. * *                                      * *
  2846. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2847. *                                    *
  2848. *  DESCRIPTION:                                *
  2849. *    SetupScreen_:                            *
  2850. *        Fait un Intuition.library/LockPubScreen() afin        *
  2851. *        d'ouvrir la fenêtre sans risque et un            *
  2852. *        Gadtools.library/GetVisualInfo()            *
  2853. *    OpenWindow_:                            *
  2854. *        Ouvre la fenêtre en fonction des paramètres d'entrée    *
  2855. *        Crée les gadgets et d'une manière Font-Adaptive        *
  2856. *    CloseWindow_:                            *
  2857. *        Referme la fenêtre et libère les gadgets        *
  2858. *    CloseDownSreen_:                        *
  2859. *        Fait un Intuition.library/UnlockPubscreen()        *
  2860. *  INPUT:                                *
  2861. *    SetupScreen_:                            *
  2862. *    OpenWindow_:                            *
  2863. *        Width.w        =  Largeur de la fenêtre        *
  2864. *        Height.w    =  Hauteur de la fenêtre        *
  2865. *        Top.w        =  Distance du haut            *
  2866. *        Left.w        =  Distance de gauche            *
  2867. *        GUI_.b        =  Numéro d'interface            *
  2868. *        OffX.w        =  Offset de gauche (généralement nul)    *
  2869. *        OffY.w        =  Offset du haut (généralement nul)    *
  2870. *    CloseWindow_:                            *
  2871. *        Wnd.l        =  Pointeur sur Window            *
  2872. *        GList.l        =  Pointeur sur la liste de gadget    *
  2873. *    CloseDownScreen_:                        *
  2874. *        VisualInfo.l    =                      *
  2875. *        Scr.l        =  Pointeur l'écran locké        *
  2876. *  OUTPUT:                                *
  2877. *    SetupScreen_:                            *
  2878. *        VisualInfo.l    =                      *
  2879. *        Scr.l        =  Pointeur sur l'écran locké        *
  2880. *    OpenWindow_:                            *
  2881. *        Wnd.l        =  Pointeur sur Window            *
  2882. *        GList.l        =  NULL                    *
  2883. *    CloseWindow_:                            *
  2884. *        Wnd.l        =  0                    *
  2885. *        GList.l        =  0                    *
  2886. *    CloseDownScreen_:                        *
  2887. *        Scr.l        =  0                    *
  2888. *        VisualInfo.l    =  0                    *
  2889. *                                    *
  2890. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2891.  
  2892.  
  2893. ComputeY:
  2894.     move.l    d1,-(sp)
  2895.     Move.w    FontY,d1
  2896.     mulu    d1,d0
  2897.     addq.w    #6,d0
  2898.     Divu    #12,d0
  2899.     move.l    (sp)+,d1
  2900.     rts
  2901. ComputeX:
  2902.     Move.l    d1,-(sp)
  2903.     Move.w    FontX,d1
  2904.     ComputeItX:
  2905.     mulu    d1,d0
  2906.     addq.w    #4,d0
  2907.     Divu    #8,d0
  2908.     move.l    (sp)+,d1
  2909.     rts
  2910.  
  2911. ComputeFont:
  2912.     Move.l    a2,-(sp)
  2913.     Move.l    GraphicsBase,a1
  2914.     Move.l    DefaultFont(a1),a1
  2915.     Move.l    #Attr,a0
  2916.     Move.l    a0,Font
  2917.     Move.w    tf_XSize(a1),FontX
  2918.     Move.w    tf_YSize(a1),FontY
  2919.  
  2920.     Move.l    tf_Message__ln_Name(a1),ta_Name(a0)        ; Remplace LN_NAME    ; move.l LN_NAME(a1),ta_Name(a0)
  2921.     Move.w    tf_YSize(a1),ta_YSize(a0)
  2922.  
  2923.     Move.l    GraphicsBase,a1
  2924.     Move.l    DefaultFont(a1),a1
  2925.     Move.l    Scr,a0
  2926.  
  2927.     move.b  sc_WBorLeft(a0),d0
  2928.     ext.w   d0
  2929.     move.w  d0,OffX
  2930.     Moveq    #0,d0
  2931.     Move.l    sc_RastPort+rp_Font(a0),a2    ; Screen->RastPort Font
  2932.     Move.w    tf_YSize(a2),d0
  2933.     addq.w  #1,d0
  2934.     add.b   sc_WBorTop(a0),d0
  2935.     move.w  d0,OffY
  2936.     tst.w   d2
  2937.     beq.s   ComputeFont_F
  2938.     tst.w   d3
  2939.     beq.s   ComputeFont_F
  2940.     move.w  d2,d0
  2941.     Bsr.w     ComputeX
  2942.     add.w   OffX,d0
  2943.     add.b   sc_WBorRight(a0),d0
  2944.     cmp.w   sc_Width(a0),d0
  2945.     bhi.s   ComputeFont_UseTopaz
  2946.     move.w  d3,d0
  2947.     Bsr.w     ComputeY
  2948.     add.w   OffY,d0
  2949.     add.b   sc_WBorBottom(a0),d0
  2950.     cmp.w   sc_Height(a0),d0
  2951.     bhi.s   ComputeFont_UseTopaz
  2952. ComputeFont_F:
  2953.     Move.l    (sp)+,a2
  2954.     rts
  2955. ComputeFont_UseTopaz:
  2956.     move.l  Font,a0
  2957.     move.l  #TopazName,ta_Name(a0)
  2958.     move.w  #8,FontY
  2959.     move.w  #8,FontX
  2960.     move.w  #8,ta_YSize(a0)
  2961.     Bra.s    ComputeFont_F
  2962.  
  2963.  
  2964. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2965. *  LockPubScreen et alloue VisualInfo.  * * * * * * * * * * * * * * * * *
  2966. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2967.  
  2968. SetupScreen_:
  2969.     movem.l d2/d3/a2/a6,-(sp)
  2970.     move.l  IntuitionBase,a6
  2971.     move.l  PubScreenName,a0
  2972.     jsr     LockPubScreen(a6)        ; Empêche la fermeture de l'écran
  2973.     move.l  d0,Scr
  2974.     tst.l   d0
  2975.     beq.s   SError            ; Screen Error
  2976.     moveq   #0,d2
  2977.     moveq   #0,d3
  2978.     Bsr.w     ComputeFont
  2979.     move.l  Scr,a0
  2980.     move.l  GadToolsBase,a6
  2981.     lea.l   TD,a1
  2982.     jsr     GetVisualInfoA(a6)        ; Sert à remplir NewGadget
  2983.     move.l  d0,VisualInfo
  2984.     tst.l   d0
  2985.     beq.s   VError            ; Visual Error
  2986.     move.b   #0,d0            ; 0 = ok, on continue
  2987. SetupScreen__Done:
  2988.     movem.l (sp)+,d2/d3/a2/a6
  2989.     rts
  2990. SError:
  2991. VError:
  2992.     move.b   #1,d0            ; Screen Error : 1 en d0
  2993.     bra.s   SetupScreen__Done
  2994.  
  2995. ;    move.b   #2,d0            ; Visual Error : 2 en d0
  2996. ;    bra.s   SetupScreen__Done
  2997.  
  2998.  
  2999. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  3000. *  UnlockPubScreen et libère la structure VisualInfo  * * * * * * * * * *
  3001. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  3002.  
  3003. CloseDownScreen_:
  3004.     movem.l a6,-(sp)
  3005.     move.l  IntuitionBase,a6
  3006.     move.l  getImage,a0
  3007.     cmpa.l  #0,a0
  3008.     beq.s   NoObj
  3009.     jsr     DisposeObject(a6)
  3010. NoObj:
  3011.     move.l  getClass,a0
  3012.     cmpa.l  #0,a0
  3013.     beq.s   NoCls
  3014.     jsr     FreeClass(a6)
  3015. NoCls:
  3016.     move.l  GadToolsBase,a6
  3017.     move.l  VisualInfo,a0
  3018.     cmpa.l  #0,a0
  3019.     beq.s   NoVisualInfo
  3020.     jsr     FreeVisualInfo(a6)
  3021.     move.l  #0,VisualInfo
  3022. NoVisualInfo:
  3023.     move.l  IntuitionBase,a6
  3024.     suba.l  a0,a0
  3025.     move.l  Scr,a1
  3026.     cmpa.l  #0,a1
  3027.     beq.s   NoScreen
  3028.     jsr     UnlockPubScreen(a6)
  3029.     move.l  #0,Scr
  3030. NoScreen:
  3031.     movem.l (sp)+,a6
  3032.     rts
  3033.  
  3034.  
  3035. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  3036. *  Affiche les textes en boucle.  * * * * * * * * * * * * * * * * * * * *
  3037. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  3038.  
  3039. Render0:
  3040.     movem.l d2-d5/a2/a6,-(sp)
  3041.     move.l  Wnd,a0
  3042.     move.w  Width,d2
  3043.     move.w  Height,d3
  3044.     Bsr.w     ComputeFont
  3045.     moveq   #0,d3
  3046. ;    Cmp.b    #1,GUI_
  3047. ;    Beq.s    Render0GUI_1
  3048. ;    Cmp.b    #2,GUI_
  3049. ;    Beq.s    Render0GUI_2
  3050. ;    Cmp.b    #3,GUI_
  3051. ;    Beq.s    Render0GUI_3
  3052. ;    Cmp.b    #4,GUI_
  3053. ;    Beq.s    Render0GUI_4
  3054. ;    Render0GUI_1:
  3055. ;    Lea.l    CrunchText0,a2
  3056. ;    Bra.s    Render0GUI_F
  3057. ;    Render0GUI_2:
  3058. ;    Lea.l    WorkingText0,a2
  3059. ;    Bra.s    Render0GUI_F
  3060. ;    Render0GUI_3:
  3061. ;    Lea.l    ConfigText0,a2
  3062. ;    Bra.s    Render0GUI_F
  3063. ;    Render0GUI_4:
  3064.     Lea.l    AboutText0,a2
  3065. ;!!    Bra.s    Render0GUI_F
  3066. ;    Render0GUI_F:
  3067.  
  3068.     CrunchTLoop:
  3069.     move.l  ExecBase,a6
  3070.     lea.l   BufIText,a1
  3071.     move.l  a2,a0
  3072.     move.l  d3,d0
  3073.     mulu    #it_SIZEOF,d0
  3074.     add.l   d0,a0
  3075.     moveq   #it_SIZEOF,d0
  3076.     jsr     CopyMem(a6)
  3077.     lea.l   BufIText,a0
  3078.     move.l  IntuitionBase,a6
  3079.     move.l  Font,it_ITextFont(a0)
  3080.     jsr     IntuiTextLength(a6)
  3081.     asr.l   #1,d0
  3082.     move.l  d0,-(sp)
  3083.     lea.l   BufIText,a0
  3084.     move.w  it_LeftEdge(a0),d0
  3085.     Bsr.w     ComputeX
  3086.     add.w   OffX,d0
  3087.     ext.l   d0
  3088.     sub.l   (sp)+,d0
  3089.     move.w  d0,it_LeftEdge(a0)
  3090.     move.w  it_TopEdge(a0),d0
  3091.     Bsr.w     ComputeY
  3092.     add.w   OffY,d0
  3093.     move.l  Font,a1
  3094.     move.w  ta_YSize(a1),d1
  3095.     asr.w   #1,d1
  3096.     sub.w   d1,d0
  3097.     move.w  d0,it_TopEdge(a0)
  3098.     move.l  a0,a1
  3099.     move.l  Wnd,a0
  3100.     move.l  wd_RPort(a0),a0
  3101.     moveq   #0,d0
  3102.     moveq   #0,d1
  3103.     jsr     PrintIText(a6)
  3104.     addq.l  #1,d3
  3105. ;    Cmp.b    #1,GUI_
  3106. ;    Beq.s    CrunchTLoopGUI_1
  3107. ;    Cmp.b    #2,GUI_
  3108. ;    Beq.s    CrunchTLoopGUI_2
  3109. ;    Cmp.b    #3,GUI_
  3110. ;    Beq.s    CrunchTLoopGUI_3
  3111. ;    Cmp.b    #4,GUI_
  3112. ;    Beq.s    CrunchTLoopGUI_4
  3113. ;    CrunchTLoopGUI_1:
  3114. ;    Cmp.w    #Crunch_TNUM,d3
  3115. ;    Bmi    CrunchTLoop
  3116. ;    Bra.s    CrunchTLoopGUI_F
  3117. ;    CrunchTLoopGUI_2:
  3118. ;    Cmp.w    #Working_TNUM,d3
  3119. ;    Bmi    CrunchTLoop
  3120. ;    Bra.s    CrunchTLoopGUI_F
  3121. ;    CrunchTLoopGUI_3:
  3122. ;    Cmp.w    #Config_TNUM,d3
  3123. ;    Bmi    CrunchTLoop
  3124. ;    Bra.s    CrunchTLoopGUI_F
  3125. ;    CrunchTLoopGUI_4:
  3126.     Cmp.w    #About_TNUM,d3
  3127.     Bmi    CrunchTLoop
  3128. ;!!    Bra.s    CrunchTLoopGUI_F
  3129.     CrunchTLoopGUI_F:
  3130.     movem.l (sp)+,d2-d5/a2/a6
  3131.     rts
  3132.  
  3133.  
  3134. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  3135. *                                    *
  3136. *  FUNCTION:                                *
  3137. *    Render1:                            *
  3138. *        Dessine une Bevel Box dans la fenêtre en s'adaptant    *
  3139. *        au fontes à la manière GadtoolsBox            *
  3140. *  INPUT:                                *
  3141. *    Render1:                            *
  3142. *        Wnd.l        =  Pointeur sur Window            *
  3143. *        Width.w        =  Dimension avant calculation        *
  3144. *        Height.w    =  Dimension avant calculation        *
  3145. *        VisualInfo.l    =  Pointeur sur stucture VisualInfo    *
  3146. *        Bevelbox_TagList.l=Pointeur sur une TagList        *
  3147. *        BevelTop.w    =  Bevelbox Top avant calculation    *
  3148. *        BevelLeft.w    =  Bevelbox Left avant calculation    *
  3149. *        BevelWidth.w    =  Bevelbox Width avant calculation    *
  3150. *        BevelHeight.w    =  Bevelbox Height avant calculation    *
  3151. *  OUTPUT:                                *
  3152. *    Render1:                            *
  3153. *                                    *
  3154. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  3155.  
  3156. Render1:
  3157.     Movem.l    d2-d3/a6,-(sp)
  3158.     move.l  Wnd,a0
  3159.     move.w  Width,d2
  3160.     move.w  Height,d3
  3161.     jsr     ComputeFont
  3162.     Move.l  VisualInfo,NormalBevelbox+4
  3163.     Move.l  VisualInfo,InverseBevelbox+4
  3164.  
  3165.     Moveq    #0,d0
  3166.     Move.w    BevelTop,d0        ; Top en d0
  3167.     Bsr.w    ComputeY
  3168.     Add.w    OffY,d0            ; Ajouter Offset
  3169.     Move.l    d0,d1            ; Top + Offset  en  d1
  3170.     Move.w    BevelWidth,d0        ; Width en d0
  3171.     Bsr.w    ComputeX
  3172.     Move.l    d0,d2            ; Top + Offset  en  d2
  3173.     Move.w    BevelHeight,d0        ; Height en d0
  3174.     Bsr.w    ComputeY
  3175.     Move.l    d0,d3            ; Top + Offset  en  d3
  3176.     Move.w    BevelLeft,d0        ; Left en d0
  3177.     Bsr.w    ComputeX
  3178.     Add.w    OffX,d0            ; Left + Offset en d0
  3179.  
  3180.     Move.l    GadToolsBase,a6
  3181.     Move.l    Wnd,a0
  3182.     Move.l    wd_RPort(a0),a0        ; RastPort en a0
  3183.     Move.l    Bevelbox_Taglist,a1    ; TagList en a1
  3184.     Jsr    DrawBevelBoxA(a6)
  3185.     Movem.l    (sp)+,d2-d3/a6
  3186.     Rts
  3187.  
  3188.  
  3189. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  3190. *  Ouvre la fenêtre et crée les gadgets.  * * * * * * * * * * * * * * * *
  3191. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  3192.  
  3193. OpenWindow_:
  3194.     movem.l d2-d4/a2-a4/a6,-(sp)
  3195.     Move.l    #0,Wnd        ; 
  3196.     move.l  Scr,a0
  3197.     moveq   #0,d3
  3198.     moveq   #0,d2
  3199.     move.w  Width,d2
  3200.     move.w  Height,d3
  3201.     Bsr.w     ComputeFont
  3202.     move.l  Scr,a0
  3203.     move.l  d2,d0
  3204.     Bsr.w     ComputeX
  3205.     move.l  d0,d4
  3206.     move.w  Left,d2
  3207.     add.w   d2,d0
  3208.     add.w   OffX,d0
  3209.     Add.b    sc_WBorRight(a0),d0
  3210.     cmp.w   sc_Width(a0),d0
  3211.     bls.s   CrunchWindowOk
  3212.     move.w  sc_Width(a0),d0
  3213.     sub.w   d4,d0
  3214.     move.w  d0,d2
  3215. CrunchWindowOk:
  3216.     move.l  d3,d0
  3217.     Bsr.w     ComputeY
  3218.     move.l  d0,d4
  3219.     move.w  Top,d3
  3220.     add.w   d3,d0
  3221.     add.w   OffY,d0
  3222.     Add.b    sc_WBorBottom(a0),d0
  3223.     cmp.w   sc_Height(a0),d0
  3224.     bls.s   CrunchHeightOk
  3225.     move.w  sc_Height(a0),d0
  3226.     sub.w   d4,d0
  3227.     move.w  d0,d3
  3228. CrunchHeightOk:
  3229.     Move.l    GadToolsBase,a6
  3230. ;    Cmp.b    #1,GUI_
  3231. ;    Beq.s    CrunchHeightOkGUI_1    ; Mettre les bons Tags en a4
  3232. ;    Cmp.b    #2,GUI_
  3233. ;    Beq.s    CrunchHeightOkGUI_2
  3234.     Cmp.b    #3,GUI_
  3235.     Beq.s    CrunchHeightOkGUI_3
  3236.     Cmp.b    #4,GUI_
  3237.     Beq.s    CrunchHeightOkGUI_4
  3238. ;    CrunchHeightOkGUI_1:
  3239. ;    Lea.l    CrunchGTags,a4
  3240. ;    Lea.l    CrunchGList,a0
  3241. ;    Jsr    CreateContext(a6)    ; ContextData en d0
  3242. ;    Move.l    d0,a3
  3243. ;    Tst.l    d0
  3244. ;    Beq.w    CrunchCError        ; Erreur de ContextData
  3245. ;    Movem.l    d2-d3,-(sp)
  3246. ;    Moveq    #0,d3            ; Nb de gadgets crées  =  0
  3247. ;    Lea    CrunchGTags,a4
  3248. ;    Bra.s    CrunchHeightOkGUI_F
  3249.     CrunchHeightOkGUI_2:
  3250.     Lea.l    WorkingGTags,a4
  3251.     Lea.l    WorkingGList,a0
  3252.     Jsr    CreateContext(a6)    ; ContextData en d0
  3253.     Move.l    d0,a3
  3254.     Tst.l    d0
  3255.     Beq.w    CrunchCError        ; Erreur de ContextData
  3256.     Movem.l    d2-d3,-(sp)
  3257.     Moveq    #0,d3            ; Nombre de gadgets crées  =  0
  3258.     Lea    WorkingGTags,a4
  3259.     Bra.s    CrunchHeightOkGUI_F
  3260.     CrunchHeightOkGUI_3:
  3261.     Lea.l    ConfigGTags,a4
  3262.     Lea.l    ConfigGList,a0
  3263.     Jsr    CreateContext(a6)    ; ContextData en d0
  3264.     Move.l    d0,a3
  3265.     Tst.l    d0
  3266.     Beq.w    CrunchCError        ; Erreur de ContextData
  3267.     Movem.l    d2-d3,-(sp)
  3268.     Moveq    #0,d3            ; Nombre de gadgets crées  =  0
  3269.     Lea    ConfigGTags,a4
  3270.     Bra.s    CrunchHeightOkGUI_F
  3271.     CrunchHeightOkGUI_4:
  3272.     Lea.l    AboutGTags,a4
  3273.     Lea.l    AboutGList,a0
  3274.     Jsr    CreateContext(a6)    ; ContextData en d0
  3275.     Move.l    d0,a3
  3276.     Tst.l    d0
  3277.     Beq.w    CrunchCError        ; Erreur de ContextData
  3278.     Movem.l    d2-d3,-(sp)
  3279.     Moveq    #0,d3            ; Nombre de gadgets crées  =  0
  3280.     Lea    AboutGTags,a4
  3281. ;!!    Bra.s    CrunchHeightOkGUI_F
  3282.     CrunchHeightOkGUI_F:
  3283.  
  3284.  
  3285. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  3286. *  GadgetLoop: Crée les gadgets en boucle.  * * * * * * * * * * * * * * *
  3287. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  3288.  
  3289. CrunchGL:                ; Gadget Loop
  3290.     move.l  ExecBase,a6
  3291. ;    Cmp.b    #1,GUI_
  3292. ;    Beq.s    CrunchGl0GUI_1
  3293. ;    Cmp.b    #2,GUI_
  3294. ;    Beq.s    CrunchGl0GUI_2
  3295.     Cmp.b    #3,GUI_
  3296.     Beq.s    CrunchGl0GUI_3
  3297.     Cmp.b    #4,GUI_
  3298.     Beq.s    CrunchGl0GUI_4
  3299. ;    CrunchGl0GUI_1:
  3300. ;    Lea.l    CrunchNGads,a0
  3301. ;    Bra.s    CrunchGl0GUI_F
  3302.     CrunchGl0GUI_2:
  3303.     Lea.l    WorkingNGads,a0        ; Structure NewGadget en a0
  3304.     Bra.s    CrunchGl0GUI_F
  3305.     CrunchGl0GUI_3:
  3306.     Lea.l    ConfigNGads,a0
  3307.     Bra.s    CrunchGl0GUI_F
  3308.     CrunchGl0GUI_4:
  3309.     Lea.l    AboutNGads,a0
  3310. ;!!    Bra.s    CrunchGl0GUI_F
  3311.     CrunchGl0GUI_F:
  3312.     move.l  d3,d0            ; Nombre de gadget affichés
  3313.     mulu    #gng_SIZEOF,d0        ; à copier = Taille gadget * Size
  3314.     add.l   d0,a0            ; Adresse source en a0
  3315.     lea.l   BufNewGad,a1        ; Adresse dest en a1
  3316.     moveq   #gng_SIZEOF,d0        ; Nombre de bytes à copier
  3317.     jsr     CopyMem(a6)            ; Copier le gadget dans le tampon
  3318.     lea.l   BufNewGad,a0
  3319.     move.l  VisualInfo,gng_VisualInfo(a0); VisualInfo doit être initialisé
  3320.     move.l  Font,gng_TextAttr(a0)    ; TextAttr doit ête initialisé
  3321.     move.w  gng_LeftEdge(a0),d0
  3322.     Bsr.w     ComputeX
  3323.     add.w   OffX,d0
  3324.     move.w  d0,gng_LeftEdge(a0)
  3325.     move.w  gng_TopEdge(a0),d0
  3326.     Bsr.w     ComputeY
  3327.     add.w   OffY,d0
  3328.     move.w  d0,gng_TopEdge(a0)
  3329.     move.w  gng_Width(a0),d0
  3330.     Bsr.w     ComputeX
  3331.     move.w  d0,gng_Width(a0)
  3332.     move.w  gng_Height(a0),d0
  3333.     Bsr.w     ComputeY
  3334.     move.w  d0,gng_Height(a0)
  3335.     move.l  GadToolsBase,a6
  3336. ;    Cmp.b    #1,GUI_
  3337. ;    Beq.s    CrunchGl1GUI_1
  3338. ;    Cmp.b    #2,GUI_
  3339. ;    Beq.s    CrunchGl1GUI_2
  3340.     Cmp.b    #3,GUI_
  3341.     Beq.s    CrunchGl1GUI_3
  3342.     Cmp.b    #4,GUI_
  3343.     Beq.s    CrunchGl1GUI_4
  3344. ;    CrunchGl1GUI_1:
  3345. ;    Lea.l    CrunchGTypes,a0
  3346. ;    Bra.s    CrunchGl1GUI_F
  3347.     CrunchGl1GUI_2:
  3348.     Lea.l    WorkingGTypes,a0    ; GadgetType en a0
  3349.     Bra.s    CrunchGl1GUI_F
  3350.     CrunchGl1GUI_3:
  3351.     Lea.l    ConfigGTypes,a0
  3352.     Bra.s    CrunchGl1GUI_F
  3353.     CrunchGl1GUI_4:
  3354.     Lea.l    AboutGTypes,a0
  3355. ;!!    Bra.s    CrunchGl1GUI_F
  3356.     CrunchGl1GUI_F:
  3357.     moveq   #0,d0
  3358.     move.l  d3,d1            ; Nombre de gadget crés en d1
  3359.     asl.l   #1,d1            ; Multiplier par 2
  3360.     add.l   d1,a0            ; GadgetType suivant (.w)
  3361.     move.w  (a0),d0            ; Kind en d0
  3362.     move.l  a3,a0            ; Context ou Previous en a0
  3363.     lea.l   BufNewGad,a1        ; Gadget copié en a1 (NewGad)
  3364.     move.l  a4,a2            ; Taglist en a2
  3365.     jsr     CreateGadgetA(a6)        ; Créer le gadget
  3366.     tst.l   d0                ; Création ok ?
  3367.     bne.s   CrunchCreateOK        ; Oui, continue
  3368.     movem.l (sp)+,d2-d3
  3369.     Bra.w    CrunchCError        ; Non, on se branche à l'erreur
  3370. CrunchCreateOK:
  3371.     move.l  d0,a3        ; Gadget crée devient le précédent
  3372.     move.l  d3,d0            ; Nombre de gadget crés en d0
  3373.     asl.l   #2,d0            ; Mulitplier le nb par 4
  3374. ;    Cmp.b    #1,GUI_
  3375. ;    Beq.s    CrunchCreateOkGUI_1
  3376. ;    Cmp.b    #2,GUI_
  3377. ;    Beq.s    CrunchCreateOkGUI_2
  3378.     Cmp.b    #3,GUI_
  3379.     Beq.s    CrunchCreateOkGUI_3
  3380.     Cmp.b    #4,GUI_
  3381.     Beq.s    CrunchCreateOkGUI_4
  3382. ;    CrunchCreateOkGUI_1:
  3383. ;    Lea.l    CrunchGadgets,a0
  3384. ;    Bra.s    CrunchCreateOkGUI_F
  3385.     CrunchCreateOkGUI_2:
  3386.     Lea.l    WorkingGadgets,a0    ; GadgetType en a0
  3387.     Bra.s    CrunchCreateOkGUI_F
  3388.     CrunchCreateOkGUI_3:
  3389.     Lea.l    ConfigGadgets,a0
  3390.     Bra.s    CrunchCreateOkGUI_F
  3391.     CrunchCreateOkGUI_4:
  3392.     Lea.l    AboutGadgets,a0
  3393. ;!!    Bra.s    CrunchCreateOkGUI_F
  3394.     CrunchCreateOkGUI_F:
  3395.     add.l   d0,a0            ; Avancer du   nb de gadget * 4
  3396.     move.l  a3,(a0)            ; Sauver le gadget à la bonne place
  3397. CrunchTagLoop:
  3398.     tst.l   (a4)            ; Taglist contient TAG_DONE ?
  3399.     beq.s   CrunchDN            ; Oui, on continue
  3400.     addq.w  #8,a4            ; Non, on boucle jusqu'à obtenir
  3401.     bra.s   CrunchTagLoop        ;  TAG_DONE
  3402. CrunchDN:
  3403.     addq.w  #4,a4            ; Taglist = TAG_DONE + 4
  3404.     addq.w  #1,d3            ; Nb de gadget crées + 1
  3405. ;    Cmp.b    #1,GUI_
  3406. ;    Beq.s    CrunchDn0GUI_1
  3407.     Cmp.b    #2,GUI_
  3408.     Beq.s    CrunchDn0GUI_2
  3409.     Cmp.b    #3,GUI_
  3410.     Beq.w    CrunchDn0GUI_3
  3411.     Cmp.b    #4,GUI_
  3412.     Beq.w    CrunchDn0GUI_4
  3413.     CrunchDn0GUI_Com0:
  3414.     Move.l    Scr,a0
  3415.     Move.w    Width,d0
  3416.     Bsr.w    ComputeX
  3417.     Add.w    OffX,d0
  3418.     Add.b    sc_WBorRight(a0),d0
  3419.     Rts
  3420.     CrunchDn0GUI_Com1:
  3421.     Move.w    Height,d0
  3422.     Bsr.w    ComputeY
  3423.     Add.w    OffY,d0
  3424.     Add.b    sc_WBorBottom(a0),d0
  3425.     Rts
  3426. ;    CrunchDn0GUI_1:
  3427. ;    Cmp.w    #Crunch_CNT,d3        ; Est-ce égal au nombre de gadget total
  3428. ;    Bmi    CrunchGL        ; Inférieur, on crée le gadget suivant
  3429. ;    Movem.l    (sp)+,d2-d3
  3430. ;    Ext.l    d2
  3431. ;    Ext.l    d3
  3432. ;    Move.l    CrunchGList,CrunchWG+4
  3433. ;    Move.l    d2,CrunchL+4
  3434. ;    Move.l    d3,CrunchT+4
  3435. ;    Bsr.s    CrunchDn0GUI_Com0
  3436. ;    Move.l    d0,CrunchW+4
  3437. ;    Bsr.s    CrunchDn0GUI_Com1
  3438. ;    Move.l    d0,CrunchH+4
  3439. ;    Lea.l    CrunchWindowTags,a1
  3440. ;    Bra.s    CrunchDn0GUI_F2
  3441.     CrunchDn0GUI_2:
  3442.     Cmp.w    #Working_CNT,d3
  3443.     Bmi    CrunchGL
  3444.     Movem.l    (sp)+,d2-d3
  3445.     Ext.l    d2
  3446.     Ext.l    d3
  3447.     Move.l    WorkingGlist,WorkingWG+4
  3448.     Move.l    d2,WorkingL+4
  3449.     Move.l    d3,WorkingT+4
  3450.     Bsr.s    CrunchDn0GUI_Com0
  3451.     Move.l    d0,WorkingW+4
  3452.     Bsr.s    CrunchDn0GUI_Com1
  3453.     Move.l    d0,WorkingH+4
  3454.     Lea.l    WorkingWindowTags,a1
  3455.     Bra.w    CrunchDn0GUI_F2
  3456.     CrunchDn0GUI_3:
  3457.     Cmp.w    #Config_CNT,d3
  3458.     Bmi    CrunchGL
  3459.     Movem.l    (sp)+,d2-d3
  3460.     Ext.l    d2
  3461.     Ext.l    d3
  3462.     Move.l    ConfigGlist,ConfigWG+4
  3463.     Move.l    d2,ConfigL+4
  3464.     Move.l    d3,ConfigT+4
  3465.     Bsr.w    CrunchDn0GUI_Com0
  3466.     Move.l    d0,ConfigW+4
  3467.     Bsr.w    CrunchDn0GUI_Com1
  3468.     Move.l    d0,ConfigH+4
  3469.     Lea.l    ConfigWindowTags,a1
  3470.     Bra.s    CrunchDn0GUI_F2
  3471.     CrunchDn0GUI_4:
  3472.     Cmp.w    #About_CNT,d3
  3473.     Bmi    CrunchGL
  3474.     Movem.l    (sp)+,d2-d3
  3475.     Ext.l    d2
  3476.     Ext.l    d3
  3477.     Move.l    AboutGList,AboutWG+4
  3478.     Move.l    d2,AboutL+4
  3479.     Move.l    d3,AboutT+4
  3480.     Bsr.w    CrunchDn0GUI_Com0
  3481.     Move.l    d0,AboutW+4
  3482.     Bsr.w    CrunchDn0GUI_Com1
  3483.     Move.l    d0,AboutH+4
  3484.     Lea.l    AboutWindowTags,a1
  3485.     Bra.w    CrunchDn0GUI_F2
  3486.     CrunchDn0GUI_F1:
  3487.     CrunchDn0GUI_F2:
  3488.     move.l  IntuitionBase,a6
  3489.     suba.l  a0,a0
  3490.     jsr     OpenWindowTagList(a6)
  3491.     move.l  d0,Wnd
  3492.     tst.l   d0
  3493.     beq.s   CrunchWError
  3494.     move.l  GadToolsBase,a6
  3495.     move.l  Wnd,a0
  3496.     suba.l  a1,a1
  3497.     jsr     GT_RefreshWindow(a6)
  3498. ;    Cmp.b    #1,GUI_            ; Si pas de texte, se brancher à F2
  3499. ;    Beq.s    CrunchDn5GUI_F1
  3500.     Cmp.b    #2,GUI_
  3501.     Beq.s    CrunchDn5GUI_F2
  3502.     Cmp.b    #3,GUI_
  3503.     Beq.s    CrunchDn5GUI_F2
  3504. ;    Cmp.b    #4,GUI_
  3505. ;!!    Beq.s    CrunchDn5GUI_F1
  3506.     CrunchDn5GUI_F1:
  3507.     Bsr.w    Render0
  3508.     CrunchDn5GUI_F2:
  3509.     move.b   #0,d0
  3510. CrunchDone:
  3511.     movem.l (sp)+,d2-d4/a2-a4/a6
  3512.     rts
  3513. CrunchCError:
  3514. CrunchGError:
  3515. CrunchWError:
  3516.     move.b   #1,d0
  3517.     bra.s   CrunchDone
  3518.  
  3519. ;    move.b   #2,d0
  3520. ;    bra.s   CrunchDone
  3521. ;
  3522. ;    move.b   #4,d0
  3523. ;    bra.s   CrunchDone
  3524.  
  3525.  
  3526. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  3527. *  Ferme la fenêtre et libère les gadgets * * * * * * * * * * * * * * * *
  3528. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  3529.  
  3530. CloseWindow_:
  3531.     movem.l a2/a6,-(sp)
  3532.     move.l  IntuitionBase,a6
  3533.     move.l  Wnd,a0
  3534.     cmpa.l  #0,a0
  3535.     beq.s   CrunchNWnd
  3536.     jsr     CloseWindow(a6)
  3537.     move.l  #0,Wnd
  3538. CrunchNWnd:
  3539.     Move.l    GadtoolsBase,a6
  3540. ;    Cmp.b    #1,GUI_
  3541. ;    Beq.s    CrunchNWndGUI1
  3542. ;    Cmp.b    #2,GUI_
  3543. ;    Beq.s    CrunchNWndGUI2
  3544.     Cmp.b    #3,GUI_
  3545.     Beq.s    CrunchNWndGUI3
  3546.     Cmp.b    #4,GUI_
  3547.     Beq.s    CrunchNWndGUI4
  3548. ;    CrunchNWndGUI1:
  3549. ;    Move.l    CrunchGList,a0    
  3550. ;    Cmpa.l    #0,a0
  3551. ;    Beq.s    CrunchNGads
  3552. ;    Jsr    FreeGadgets(a6)
  3553. ;    Move.l    #0,CrunchGList
  3554. ;    Bra.s    CrunchNWndGUI_F
  3555.     CrunchNWndGUI2:
  3556.     Move.l    WorkingGList,a0
  3557.     Cmpa.l    #0,a0
  3558.     Beq.s    CrunchNGads
  3559.     Jsr    FreeGadgets(a6)
  3560.     Move.l    #0,WorkingGList
  3561.     Bra.s    CrunchNWndGUI_F
  3562.     CrunchNWndGUI3:
  3563.     Move.l    ConfigGList,a0
  3564.     Cmpa.l    #0,a0
  3565.     Beq.s    CrunchNGads
  3566.     Jsr    FreeGadgets(a6)
  3567.     Move.l    #0,ConfigGList
  3568.     Bra.s    CrunchNWndGUI_F
  3569.     CrunchNWndGUI4:
  3570.     Move.l    AboutGList,a0
  3571.     Cmpa.l    #0,a0
  3572.     Beq.s    CrunchNGads
  3573.     Jsr    FreeGadgets(a6)
  3574.     Move.l    #0,AboutGList
  3575. ;!!    Bra.s    CrunchNWndGUI_F
  3576.     CrunchNWndGUI_F:
  3577. CrunchNGads:
  3578.     movem.l (sp)+,a2/a6
  3579.     rts
  3580.  
  3581.  
  3582. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  3583. *  Textes, TagLists, GadgetTypes, etc...  * * * * * * * * * * * * * * * *
  3584. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  3585.  
  3586. IconName:        dc.b    'icon.library',0
  3587. WorkbenchName:        dc.b    'workbench.library',0
  3588. DosName:        dc.b    'dos.library',0
  3589. GadtoolsName:        dc.b    'gadtools.library',0
  3590. IntuitionName:        dc.b    'intuition.library',0
  3591. ppName:            dc.b    'powerpacker.library',0
  3592. GraphicsName:        dc.b    'graphics.library',0
  3593. AslName:        dc.b    'asl.library',0
  3594. WorkingWTitle:        dc.b    ' AppPP  Working Window ',0
  3595. ConfigWTitle:        DC.B    ' AppPP  Config Window',0
  3596. Config_AslPTagsWndText:    dc.b    ' AppPP  File Requester Window',0
  3597. AboutWTitle:        DC.B    ' AppPP  About Window',0
  3598. Def_EasyStruct_Title:    dc.b    ' AppPP Request',0
  3599. ProgramName:
  3600. AppIconText:        dc.b    'AppPP',0
  3601. ConfigFileName0:    dc.b    'Env:AppPP.Prefs',0
  3602. ConfigFileName1:    dc.b    'Envarc:AppPP.Prefs',0
  3603. Working_CrunchText:    DC.B    'Crunch',0
  3604. Working_DecrunchText:    DC.B    'Decrunch',0
  3605. Working_NothingText:    DC.B    'Do Nothing',0
  3606. Working_SkipText:    DC.B    'Skip File',0
  3607. Working_StopText:    DC.B    'Stop All !',0
  3608. Working_StatusText:    DC.B    'Status',0
  3609. Working_NameText:    DC.B    'Name  ',0
  3610. Working_LengthText:    DC.B    'Source',0
  3611. Working_DestText:    DC.B    'Dest ',0
  3612. Config_AltPathString:    DC.B    'Ram Disk:',0
  3613. Config_AltPathText:    dc.b    'Alt Path',0
  3614. Config_UseAltPathText:    DC.B    'Use Alt Path',0
  3615. Config_EffText:        DC.B    'Efficiency',0
  3616. Config_BufText:        DC.B    'Buffer Size',0
  3617. Config_DecrEffText:    DC.B    'Decrunch Eff',0
  3618. Config_EffLab0:        DC.B    'Fast',0
  3619. Config_EffLab1:        DC.B    'Mediocre',0
  3620. Config_EffLab3:        DC.B    'Very '
  3621. Config_EffLab2:        DC.B    'Good',0
  3622. Config_EffLab4:        DC.B    'Best',0
  3623. Config_BufLab0:        DC.B    'Small',0
  3624. Config_BufLab1:        DC.B    'Medium',0
  3625. Config_BufLab2:        DC.B    'Large',0
  3626. Config_DecrEffLab0:    DC.B    'Color 0',0
  3627. Config_DecrEffLab1:    DC.B    'Color 1',0
  3628. Config_DecrEffLab2:    DC.B    'Pointer',0
  3629. Config_DecrEffLab3:    DC.B    'Scroll',0
  3630. Config_DecrEffLab4:    DC.B    '« None »',0
  3631. Config_SaveText:    DC.B    'Save',0
  3632. Config_UseText:        DC.B    'Use',0
  3633. Config_CancelText:    DC.B    'Cancel',0
  3634. Config_QuitText:    DC.B    'Quit',0
  3635. Config_GetText:        DC.B    'Get',0
  3636. Config_AboutText:    DC.B    'About',0
  3637. Config_AppIconXText:    DC.B    'AppIcon   X',0
  3638. Config_AppIconYText:    DC.B    'Y',0
  3639. Config_CopyIconsText:    DC.B    'Copy Icons',0
  3640. Config_Add_ppText:    DC.B    'Add #?.pp',0
  3641. Config_Rem_ppText:    DC.B    'Rem #?.pp',0
  3642. Config_AslPTagsDirText:    dc.b    'Ram Disk:',0
  3643. Config_PriorityText:    DC.B    'Priority',0
  3644. Config_PriorityFormat:    dc.b    '%2ld',0
  3645. About_InterText:    DC.B    'Interesting !',0
  3646. About_IText0:        DC.B    '- AppPP v1.1 -',0
  3647. About_IText1:        DC.B    'By BURNAND Patrick',0
  3648. About_IText2:        DC.B    'A Program to Power(De)Pack',0
  3649. About_IText3:        DC.B    'for the Great WB 2.04+',0
  3650. About_IText4:        DC.B    'Please read the doc !',0
  3651. About_IText5:        DC.B    'Techno is a developement Tool !',0
  3652. SaveEnvConfigErr_EasyT:    dc.b    " Cannot save",10
  3653.             dc.b    "Configuration",10
  3654.             dc.b    "   to Env:",0
  3655. SaveEnvarcConfigErr_EasyT:dc.b    " Cannot save",10
  3656.             dc.b    'Configuration',10
  3657.             dc.b    ' to  Envarc:',0
  3658. NF_LockErr_EasyT:    dc.b    "Can't Lock() file.",0
  3659. NF_ExamineErr_EasyT:    dc.b    "Can't Examine() file.",0
  3660. OpenReadErr_EasyT:    dc.b    "Can't Open()",10
  3661.             dc.b    "source  file",0
  3662. OpenWriteErr_EasyT:    dc.b    "Can't Open()",10
  3663.             dc.b    " dest file.",0
  3664. DC_EmptyErr_EasyT:
  3665. NF_ReadErr_EasyT:    dc.b    "  File  is empty or",10
  3666.             dc.b    "smaller than 4 bytes.",10
  3667.             dc.b    ' Not (De)Crunchable.',0
  3668. DNC_ReadErr_EasyT:    dc.b    "Error while Reading",10
  3669.             dc.b    "file. Can't crunch.",0
  3670. DC_ReadErr_EasyT:    dc.b    " Error while Reading",10
  3671.             dc.b    "file. Can't decrunch.",0
  3672. DNC_NoMemErr_EasyT:    dc.b    "Can't  AllocMem()",10
  3673.             dc.b    "to  crunch  File.",0
  3674. DC_NoMemErr_EasyT:    dc.b    "Can't  AllocMem()",10
  3675.             dc.b    "to decrunch File.",0
  3676. DC_UnknownPPErr_EasyT:    dc.b    "  Unknown Powerpacker",10
  3677.             dc.b    "Format. Can't decrunch.",0
  3678. DC_CryptErr_EasyT:    dc.b    " File is Crypted.  Use",10
  3679.             dc.b    "Powerpacker to decrunch",0
  3680. DC_PassErr_EasyT:    dc.b    "Wrong PassWord.",10
  3681.             dc.b    "Can't decrunch.",0
  3682. WriteErr_EasyT:        dc.b    "Write() Error.",10
  3683.             dc.b    " Can't  save.",0
  3684. Finished_EasyT:        dc.b    "Work finished.",0
  3685. AslLibraryErr_EasyT:    dc.b    "  Can't access",10
  3686.             dc.b    "Asl.library v36+",0
  3687. LC_OldVersion_EasyT:    dc.b    "AppPP v1.0  Config File loaded !",10
  3688.             dc.b    "  Please configure now the new",10
  3689.             dc.b    "   items of the Config Panel.",0
  3690. LC_FutureVersion_EasyT:    dc.b    "AppPP future version Config File",10
  3691.             dc.b    "loaded !  All the items of AppPP",10
  3692.             dc.b    "v1.1 are recognized. Other items",10
  3693.             dc.b    "    will be kept unmodified.",0
  3694. Def_EasyStruct_GadText:    dc.b    'Ok',0
  3695. Working_WaitingT:    DC.B    'Waiting',0
  3696. Working_ScanningT:    dc.b    'Scanning ',0
  3697. Working_LoadingT:    dc.b    "Loading ",0
  3698. Working_CrunchingT:    dc.b    'Crunching ',0
  3699. Working_DC_LoadDecrT:    dc.b    "Loading & Decrunching",0
  3700. Working_SavingT:    dc.b    'Saving',0
  3701.  
  3702. WBName:            dc.b    'Workbench',0
  3703. TopazName:        dc.b    'topaz.font',0
  3704.  
  3705. Working_DirErrT:    dc.b    "Skipping directory ...",0
  3706. Working_SkipT:        dc.b    '** Skipping File.',0
  3707. Working_StopT:        dc.b    '** Aborting All !',0
  3708. Working_NotCrunchedErrT:dc.b    "File is not Crunched.",0
  3709. Working_CrunchedErrT:    dc.b    "File is already Crunched.",0
  3710. Working_DNC_OverFlowT:    dc.b    "Buffer Overflow",10,0
  3711. Working_DNC_AbortedT:    dc.b    "Crunching Aborted.",0
  3712. FileName_StrLength:    dc.b    0
  3713. UserResponse:        dc.b    0
  3714. Working_CrunchUserResponse:dc.b    0
  3715. Working_UserResponse:    dc.b    0
  3716. ;Config_UserResponse:    dc.b    0
  3717. ;About_UserResponse:    dc.b    0
  3718. GUI_:            dc.b    0
  3719. CP_QuitByte:        dc.b    0
  3720. OSF_DelIconByte:    dc.b    0
  3721.  
  3722. Remplissage:    dc.b    0        ; Pur obtenir une adresse paire
  3723.  
  3724. WorkingGTypes:
  3725.         DC.W    BUTTON_KIND
  3726.         DC.W    BUTTON_KIND
  3727.         DC.W    BUTTON_KIND
  3728.         DC.W    BUTTON_KIND
  3729.         DC.W    BUTTON_KIND
  3730.         DC.W    TEXT_KIND
  3731.         DC.W    TEXT_KIND
  3732.         DC.W    NUMBER_KIND
  3733.         DC.W    NUMBER_KIND
  3734.  
  3735. ConfigGTypes:
  3736.         DC.W    CHECKBOX_KIND
  3737.         DC.W    CYCLE_KIND
  3738.         DC.W    CYCLE_KIND
  3739.         DC.W    CYCLE_KIND
  3740.         DC.W    BUTTON_KIND
  3741.         DC.W    BUTTON_KIND
  3742.         DC.W    BUTTON_KIND
  3743.         DC.W    BUTTON_KIND
  3744.         DC.W    BUTTON_KIND
  3745.         DC.W    BUTTON_KIND
  3746.         DC.W    CHECKBOX_KIND
  3747.         DC.W    CHECKBOX_KIND
  3748.         DC.W    CHECKBOX_KIND
  3749.         DC.W    SLIDER_KIND
  3750.         DC.W    INTEGER_KIND
  3751.         DC.W    INTEGER_KIND
  3752.         DC.W    STRING_KIND
  3753.  
  3754. AboutGTypes:
  3755.         DC.W    BUTTON_KIND
  3756.  
  3757. WorkingNGads:
  3758.         DC.W    12,9,109,19
  3759.         DC.L    Working_CrunchText,0
  3760.         DC.W    GD_Working_Crunch
  3761.         DC.L    PLACETEXT_IN,0,0
  3762.         DC.W    124,9,113,19
  3763.         DC.L    Working_DecrunchText,0
  3764.         DC.W    GD_Working_Decrunch
  3765.         DC.L    PLACETEXT_IN,0,0
  3766.         DC.W    240,9,109,19
  3767.         DC.L    Working_NothingText,0
  3768.         DC.W    GD_Working_Nothing
  3769.         DC.L    PLACETEXT_IN,0,0
  3770.         DC.W    20,39,157,21
  3771.         DC.L    Working_SkipText,0
  3772.         DC.W    GD_Working_Skip
  3773.         DC.L    PLACETEXT_IN,0,0
  3774.         DC.W    184,39,157,21
  3775.         DC.L    Working_StopText,0
  3776.         DC.W    GD_Working_Stop
  3777.         DC.L    PLACETEXT_IN,0,0
  3778.         DC.W    80,93,261,21
  3779.         DC.L    Working_StatusText,0
  3780.         DC.W    GD_Working_Status
  3781.         DC.L    PLACETEXT_LEFT,0,0
  3782.         DC.W    80,67,261,21
  3783.         DC.L    Working_NameText,0
  3784.         DC.W    GD_Working_Name
  3785.         DC.L    PLACETEXT_LEFT,0,0
  3786.         DC.W    80,119,97,21
  3787.         DC.L    Working_LengthText,0
  3788.         DC.W    GD_Working_Length
  3789.         DC.L    PLACETEXT_LEFT,0,0
  3790.         DC.W    244,119,97,21
  3791.         DC.L    Working_DestText,0
  3792.         DC.W    GD_Working_Dest
  3793.         DC.L    PLACETEXT_LEFT,0,0
  3794.  
  3795. ConfigNGads:
  3796.         DC.W    268,33,26,11
  3797.         DC.L    Config_UseAltPathText,0
  3798.         DC.W    GD_Config_UseAltPath
  3799.         DC.L    PLACETEXT_LEFT!NG_HIGHLABEL,0,0
  3800.  
  3801.         DC.W    125,153,169,19
  3802.         DC.L    Config_EffText,0
  3803.         DC.W    GD_Config_Eff
  3804.         DC.L    PLACETEXT_LEFT,0,0
  3805.  
  3806.         DC.W    125,178,169,19
  3807.         DC.L    Config_BufText,0
  3808.         DC.W    GD_Config_Buf
  3809.         DC.L    PLACETEXT_LEFT,0,0
  3810.  
  3811.         DC.W    125,203,169,19
  3812.         DC.L    Config_DecrEffText,0
  3813.         DC.W    GD_Config_DecrEff
  3814.         DC.L    PLACETEXT_LEFT,0,0
  3815.  
  3816.         DC.W    4,235,57,19
  3817.         DC.L    Config_SaveText,0
  3818.         DC.W    GD_Config_Save
  3819.         DC.L    PLACETEXT_IN,0,0
  3820.  
  3821.         DC.W    64,235,57,19
  3822.         DC.L    Config_UseText,0
  3823.         DC.W    GD_Config_Use
  3824.         DC.L    PLACETEXT_IN,0,0
  3825.  
  3826.         DC.W    124,235,57,19
  3827.         DC.L    Config_CancelText,0
  3828.         DC.W    GD_Config_Cancel
  3829.         DC.L    PLACETEXT_IN,0,0
  3830.  
  3831.         DC.W    184,235,57,19
  3832.         DC.L    Config_QuitText,0
  3833.         DC.W    GD_Config_Quit
  3834.         DC.L    PLACETEXT_IN,0,0
  3835.  
  3836.         DC.W    261,55,33,18
  3837.         DC.L    Config_GetText,0
  3838.         DC.W    GD_Config_Get
  3839.         DC.L    PLACETEXT_IN,0,0
  3840.  
  3841.         DC.W    244,235,57,19
  3842.         DC.L    Config_AboutText,0
  3843.         DC.W    GD_Config_About
  3844.         DC.L    PLACETEXT_IN,0,0
  3845.  
  3846.         DC.W    268,13,26,11
  3847.         DC.L    Config_CopyIconsText,0
  3848.         DC.W    GD_Config_CopyIcons
  3849.         DC.L    PLACETEXT_LEFT,0,0
  3850.  
  3851.         DC.W    96,13,26,11
  3852.         DC.L    Config_Add_ppText,0
  3853.         DC.W    GD_Config_Add_pp
  3854.         DC.L    PLACETEXT_LEFT,0,0
  3855.  
  3856.         DC.W    96,33,26,11
  3857.         DC.L    Config_Rem_ppText,0
  3858.         DC.W    GD_Config_Rem_pp
  3859.         DC.L    PLACETEXT_LEFT,0,0
  3860.  
  3861.         DC.W    125,118,141,15
  3862.         DC.L    Config_PriorityText,0
  3863.         DC.W    GD_Config_Priority
  3864.         DC.L    PLACETEXT_LEFT,0,0
  3865.  
  3866.         DC.W    125,92,65,18
  3867.         DC.L    Config_AppIconXText,0
  3868.         DC.W    GD_Config_AppIconX
  3869.         DC.L    PLACETEXT_LEFT,0,0
  3870.  
  3871.         DC.W    229,92,65,18
  3872.         DC.L    Config_AppIconYText,0
  3873.         DC.W    GD_Config_AppIconY
  3874.         DC.L    PLACETEXT_LEFT,0,0
  3875.  
  3876.         DC.W    96,55,161,18
  3877.         DC.L    Config_AltPathText,0
  3878.         DC.W    GD_Config_AltPath
  3879.         DC.L    PLACETEXT_LEFT,0,0
  3880.  
  3881. AboutNGads:
  3882.         DC.W    85,167,181,23
  3883.         DC.L    About_InterText,0
  3884.         DC.W    GD_About_Inter
  3885.         DC.L    PLACETEXT_IN,0,0
  3886.  
  3887. PubScreenName:        dc.l    WBName
  3888.  
  3889.  
  3890. WorkingWindowTags:
  3891.     WorkingL:
  3892.         DC.L    WA_Left,0
  3893.     WorkingT:
  3894.         DC.L    WA_Top,0
  3895.     WorkingW:
  3896.         DC.L    WA_Width,0
  3897.     WorkingH:
  3898.         DC.L    WA_Height,0
  3899.         DC.L    WA_IDCMP,BUTTONIDCMP!IDCMP_REFRESHWINDOW
  3900.         DC.L    WA_Flags,WFLG_DRAGBAR!WFLG_DEPTHGADGET!WFLG_SMART_REFRESH!Wflg_Activate
  3901.     WorkingWG:
  3902.         DC.L    WA_Gadgets,0
  3903.         DC.L    WA_Title,WorkingWTitle
  3904.         DC.L    WA_AutoAdjust,1
  3905.         DC.L    TAG_DONE
  3906.  
  3907. ConfigWindowTags:
  3908.     ConfigL:
  3909.         DC.L    WA_Left,0
  3910.     ConfigT:
  3911.         DC.L    WA_Top,0
  3912.     ConfigW:
  3913.         DC.L    WA_Width,0
  3914.     ConfigH:
  3915.         DC.L    WA_Height,0
  3916.         DC.L    WA_IDCMP,CHECKBOXIDCMP!CYCLEIDCMP!BUTTONIDCMP!SLIDERIDCMP!INTEGERIDCMP!STRINGIDCMP!IDCMP_REFRESHWINDOW
  3917.         DC.L    WA_Flags,WFLG_DRAGBAR!WFLG_DEPTHGADGET!WFLG_SMART_REFRESH!Wflg_Activate
  3918.     ConfigWG:
  3919.         DC.L    WA_Gadgets,0
  3920.         DC.L    WA_Title,ConfigWTitle
  3921.         DC.L    WA_AutoAdjust,1
  3922.         DC.L    TAG_DONE
  3923.  
  3924. AboutWindowTags:
  3925.     AboutL:
  3926.         DC.L    WA_Left,0
  3927.     AboutT:
  3928.         DC.L    WA_Top,0
  3929.     AboutW:
  3930.         DC.L    WA_Width,0
  3931.     AboutH:
  3932.         DC.L    WA_Height,0
  3933.         DC.L    WA_IDCMP,BUTTONIDCMP!IDCMP_REFRESHWINDOW
  3934.         DC.L    WA_Flags,WFLG_DRAGBAR!WFLG_DEPTHGADGET!WFLG_SMART_REFRESH!WFLG_ACTIVATE
  3935.     AboutWG:
  3936.         DC.L    WA_Gadgets,0
  3937.         DC.L    WA_Title,AboutWTitle
  3938.         DC.L    WA_AutoAdjust,1
  3939.         DC.L    TAG_DONE
  3940.  
  3941. WorkingGTags:
  3942.         DC.L    TAG_DONE        ; Crunch
  3943.         DC.L    TAG_DONE        ; Decrunch
  3944.         DC.L    TAG_DONE        ; Do Nothing
  3945.         DC.L    GA_Disabled,1
  3946.         DC.L    TAG_DONE        ; Skip File
  3947.         DC.L    GA_Disabled,1
  3948.         DC.L    TAG_DONE        ; Stop All !
  3949.         DC.L    GTTX_Text,Working_WaitingT
  3950.         DC.L    GTTX_Border,1
  3951.         DC.L    TAG_DONE        ; Status
  3952.         DC.L    GTTX_Border,1
  3953.         DC.L    TAG_DONE        ; Name
  3954.         DC.L    GTNM_Number,0
  3955.         DC.L    GTNM_Border,1
  3956.         DC.L    TAG_DONE        ; Source
  3957.         DC.L    GTNM_Number,0
  3958.         DC.L    GTNM_Border,1
  3959.         DC.L    TAG_DONE        ; Dest
  3960.  
  3961. ConfigGTags:
  3962.         DC.L    GTCB_Checked
  3963.         dc.b    0,0,0
  3964.     CGT_Check0:                ; CheckBox 'Use Alt Path':  1 = Checked
  3965.         dc.b    1
  3966.         DC.L    TAG_DONE
  3967.  
  3968.         DC.L    GTCY_Labels,Config_EffLabels
  3969.         DC.L    GTCY_Active
  3970.         dc.b    0,0,0
  3971.     CGT_Cycle0:                ; Cycle 'Efficiency':  0, 1, 2, 3, 4 ; Fast, Mediocre, Good, Very Good, Best
  3972.         dc.b    4
  3973.         DC.L    TAG_DONE
  3974.  
  3975.         DC.L    GTCY_Labels,Config_BufLabels
  3976.         DC.L    GTCY_Active
  3977.         dc.b    0,0,0
  3978.     CGT_Cycle1:                ; Cycle 'Buffer':  0, 1, 2 ; Small, Medium, Large
  3979.         dc.b    2
  3980.         DC.L    TAG_DONE
  3981.  
  3982.         DC.L    GTCY_Labels,Config_DecrEffLabels
  3983.         DC.L    GTCY_Active
  3984.         dc.b    0,0,0
  3985.     CGT_Cycle2:                ; Cycle 'Effect': 0, 1, 2, 3, 4 ; Color 0, Color 1, Pointer, Scroll, « None »
  3986.         dc.b    4
  3987.         DC.L    TAG_DONE
  3988.  
  3989.         DC.L    TAG_DONE
  3990.         DC.L    TAG_DONE
  3991.         DC.L    TAG_DONE
  3992.         DC.L    TAG_DONE
  3993.         DC.L    TAG_DONE
  3994.         DC.L    TAG_DONE
  3995.  
  3996.         DC.L    GTCB_Checked
  3997.         dc.b    0,0,0
  3998.     CGT_Check1:                ; CheckBox 'Copy Icons':  1 = Checked
  3999.         dc.b    1
  4000.         DC.L    TAG_DONE
  4001.  
  4002.         dc.l    GTCB_Checked
  4003.         dc.b    0,0,0
  4004.     CGT_Check2:                ; CheckBox 'Add #?.pp':  1 = Checked
  4005.         dc.b    0
  4006.         DC.L    TAG_DONE
  4007.  
  4008.         DC.L    GTCB_Checked
  4009.         dc.b    0,0,0
  4010.     CGT_Check3:                ; CheckBox 'Rem #?.pp':  1 = Checked
  4011.         dc.b    1
  4012.         DC.L    TAG_DONE
  4013.  
  4014.         DC.L    GTSL_Min,-5        ; Slider 'Priority'
  4015.         DC.L    GTSL_Max,1
  4016.         DC.L    GTSL_MaxLevelLen,1
  4017.         DC.L    GTSL_LevelFormat,Config_PriorityFormat
  4018.         DC.L    GTSL_LevelPlace,PLACETEXT_RIGHT
  4019.         DC.L    PGA_Freedom,LORIENT_HORIZ
  4020.         DC.L    GA_Immediate,1
  4021.         DC.L    GA_RelVerify,1
  4022.         dc.l    GTSL_Level
  4023.         dc.w    0
  4024.     CGT_Slid0:
  4025.         dc.w    0
  4026.         DC.L    TAG_DONE
  4027.  
  4028.         DC.L    GTIN_Number        ; Integer 'X'
  4029.     CGT_Int0:
  4030.         dc.l    0
  4031.         DC.L    GTIN_MaxChars,4
  4032.         DC.L    TAG_DONE
  4033.  
  4034.         DC.L    GTIN_Number        ; Integer 'Y'
  4035.     CGT_Int1:
  4036.         dc.l    0
  4037.         DC.L    GTIN_MaxChars,4
  4038.         DC.L    TAG_DONE
  4039.  
  4040.         dc.l    GTST_String        ; String 'Alt Path'
  4041.     CGT_String0:
  4042.         dc.l    0
  4043.         DC.L    GTST_MaxChars,256
  4044.         DC.L    TAG_DONE
  4045.  
  4046. AboutGTags:
  4047.         DC.L    TAG_DONE
  4048.  
  4049. GAM_WorkingGad0Attrs:
  4050. GAM_WorkingGad1Attrs:
  4051. GAM_WorkingGad2Attrs:
  4052.         dc.l    Ga_Disabled,1
  4053.         dc.l    Tag_Done
  4054. GAM_WorkingGad3Attrs:
  4055. GAM_WorkingGad4Attrs:
  4056.         dc.l    Ga_Disabled,0
  4057.         dc.l    Tag_Done
  4058.  
  4059. WriteTextTags:
  4060.         dc.l    GTTX_Text
  4061.     WTT_Text:
  4062.         dc.l    0
  4063.         dc.l    Tag_Done
  4064.  
  4065. WriteStringTags:
  4066.         dc.l    GTST_String
  4067.     WST_String:
  4068.         dc.l    0
  4069.         dc.l    Tag_Done
  4070.  
  4071. WriteNumberTags:
  4072.         dc.l    GTNM_Number
  4073.     WNT_Number:
  4074.         dc.l    0
  4075.         dc.l    Tag_Done
  4076.  
  4077. Config_AslPTags:
  4078.         dc.l    ASL_Hail,Config_AslPTagsWndText
  4079.         dc.l    ASL_Dir,Config_AslPTagsDirText
  4080.         dc.l    ASL_ExtFlags1,1
  4081.         dc.l    Tag_Done
  4082.  
  4083. Def_EasyStruct:
  4084.         dc.l    20            ;  0  SizeOf
  4085.         dc.l    0            ;  4  Flags
  4086.         dc.l    Def_EasyStruct_Title    ;  8  WindowTitle (APTR)
  4087.         dc.l    0            ; 12  Adresse du texte du requester
  4088.         dc.l    Def_EasyStruct_GadText    ; 16  Adresse du texte des gadgets
  4089.  
  4090. NormalBevelbox:    DC.L    GT_VisualInfo,0,TAG_DONE
  4091. InverseBevelBox:DC.L    GT_VisualInfo,0,GTBB_Recessed,1,TAG_DONE
  4092.  
  4093. AboutText0:    DC.B    2,0
  4094.         DC.B    0
  4095.         DC.B    0
  4096.         DC.W    175,25
  4097.         DC.L    0
  4098.         DC.L    About_IText0
  4099.         DC.L    0
  4100.  
  4101. AboutText1:    DC.B    2,0
  4102.         DC.B    0
  4103.         DC.B    0
  4104.         DC.W    175,41
  4105.         DC.L    0
  4106.         DC.L    About_IText1
  4107.         DC.L    0
  4108.  
  4109. AboutText2:    DC.B    2,0
  4110.         DC.B    0
  4111.         DC.B    0
  4112.         DC.W    175,70
  4113.         DC.L    0
  4114.         DC.L    About_IText2
  4115.         DC.L    0
  4116.  
  4117. AboutText3:    DC.B    2,0
  4118.         DC.B    0
  4119.         DC.B    0
  4120.         DC.W    175,85
  4121.         DC.L    0
  4122.         DC.L    About_IText3
  4123.         DC.L    0
  4124.  
  4125. AboutText4:    DC.B    2,0
  4126.         DC.B    0
  4127.         DC.B    0
  4128.         DC.W    175,113
  4129.         DC.L    0
  4130.         DC.L    About_IText4
  4131.         DC.L    0
  4132.  
  4133. AboutText5:    DC.B    2,0
  4134.         DC.B    0
  4135.         DC.B    0
  4136.         DC.W    175,137
  4137.         DC.L    0
  4138.         DC.L    About_IText5
  4139.         DC.L    0
  4140.  
  4141. Config_EffLabels:
  4142.         DC.L    Config_EffLab0
  4143.         DC.L    Config_EffLab1
  4144.         DC.L    Config_EffLab2
  4145.         DC.L    Config_EffLab3
  4146.         DC.L    Config_EffLab4
  4147.         DC.L    0
  4148.  
  4149. Config_BufLabels:
  4150.         DC.L    Config_BufLab0
  4151.         DC.L    Config_BufLab1
  4152.         DC.L    Config_BufLab2
  4153.         DC.L    0
  4154.  
  4155. Config_DecrEffLabels:
  4156.         DC.L    Config_DecrEffLab0
  4157.         DC.L    Config_DecrEffLab1
  4158.         DC.L    Config_DecrEffLab2
  4159.         DC.L    Config_DecrEffLab3
  4160.         DC.L    Config_DecrEffLab4
  4161.         DC.L    0
  4162.  
  4163. BufNewGad:        dc.w    0,0,0,0
  4164.             dc.l    0,0
  4165.             dc.w    0
  4166.             dc.l    0,0,0
  4167. BufIText:        dc.b    0,0,0,0
  4168.             dc.w    0,0
  4169.             dc.l    0,0,0
  4170. Attr:            dc.l    0
  4171.             dc.w    0
  4172.             dc.b    0,0
  4173. Left:            dc.w    0
  4174. Top:            dc.w    0
  4175. Width:            dc.w    0
  4176. Height:            dc.w    0
  4177. BevelLeft:        dc.w    0
  4178. BevelTop:        dc.w    0
  4179. BevelWidth:        dc.w    0
  4180. BevelHeight:        dc.w    0
  4181. FontX:            dc.w    0
  4182. FontY:            dc.w    0
  4183. OffX:            dc.w    0
  4184. OffY:            dc.w    0
  4185. Code:            dc.w    0
  4186.                     ; Si il y a simultanément 2 interfaces,
  4187. WorkingGList:                ; prévoir un tampon par interface
  4188. ConfigGList:        dc.l    0    ; Sinon, le même tampon est utilisé à
  4189. AboutGlist:        dc.l    0    ; chaque fois
  4190. WorkingGadgets:                ; Même remarque que si dessus
  4191. ConfigGadgets:        blk.l    GadgetMaxNumber,0
  4192. AboutGadgets:        blk.l    About_CNT,0
  4193. TD:            dc.l    TAG_DONE
  4194. IAdress:        dc.l    0
  4195. Bevelbox_Taglist:    dc.l    0
  4196. IconBase:        dc.l    0
  4197. WorkbenchBase:        dc.l    0
  4198. DosBase:        dc.l    0
  4199. GadtoolsBase:        dc.l    0
  4200. IntuitionBase:        dc.l    0
  4201. ppBase:            dc.l    0
  4202. GraphicsBase:        dc.l    0
  4203. AslBase:        dc.l    0
  4204. DiskObject:        dc.l    0
  4205. AppIcon:        dc.l    0
  4206. AppMsgPort:        dc.l    0
  4207. AppDiskObject:        dc.l    0
  4208. Msg:            dc.l    0
  4209. WbMsg:            dc.l    0
  4210. FileCount:        dc.l    0
  4211. FileNumber:        dc.l    0
  4212. CrunchInfo:        dc.l    0
  4213. DirLock:        dc.l    0
  4214. FileLock:        dc.l    0
  4215. FileName:        dc.l    0
  4216. FileNameBuffer:        dc.l    0
  4217. OSF_FileNameBuffer:    dc.l    0
  4218. ConfigBuffer:        dc.l    0
  4219. ConfigBuffer0:        dc.l    0
  4220. ConfigFileName0_FH:    dc.l    0
  4221. ConfigFileName1_FH:    dc.l    0
  4222. DosObject:        dc.l    0
  4223. FileLength:        dc.l    0
  4224. SBuffer:        dc.l    0
  4225. FileHandle:        dc.l    0
  4226. FileBuffer:        dc.l    0
  4227. ppLength:        dc.l    0
  4228. Buffer_:        dc.l    0
  4229. Len_:            dc.l    0
  4230. Message:        dc.l    0
  4231. Gt_IMsg:        dc.l    0
  4232. Scr:            dc.l    0
  4233. VisualInfo:        dc.l    0
  4234. Wnd:            dc.l    0
  4235. WorkingWnd:
  4236. ConfigWnd:        dc.l    0
  4237. AboutWnd:        dc.l    0
  4238. Font:            dc.l    0
  4239. GetImage:        dc.l    0
  4240. GetClass:        dc.l    0
  4241. AslRequestStruct:    dc.l    0
  4242. OwnTask:        dc.l    0
  4243.  
  4244. Debug:            dc.l    0
  4245.  
  4246. Object:            dc.b    'Env:Sys/def_tool',0
  4247.  
  4248. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  4249. *  Fin du source.   * * * * * * * * * * * * * * * * * * * * * * * * * * *
  4250. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  4251.  
  4252.