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
Wrap
Text File
|
1994-07-26
|
121KB
|
4,252 lines
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* *
* * * * * *
* * * *
* * * _________________________________________ *
* * * / / *
* * * / Code Source Assembleur de AppPP v1.1 / *
* * * / / *
* * * * * * * / Assembly Source Code of AppPP v1.1 / *
* * * * * / / *
* * * * * / - by BURNAND Patrick - / *
* * * * / / *
* * * ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ *
* * * * * * *
* *
* *
* *
* Ce code source est distribué avec le package AppPP et ne doit pas *
* être distribué autrement. Il doit toujours être maintenu dans sa *
* forme originale et non-modifiée. Ce fichier est distribué pour l' *
* apprentisage et comme example seulement. Vous avez l'autorisation *
* d'imprimer ce fichier, mais vous n'avez pas le droit de le *
* distribuer sous forme d'imprimé. Si vous voulez faire d'autres *
* usages de ce code source, contacter l'auteur. Mon adresse se *
* trouve dans la doc de ce programme. *
* *
* *
* This source code is distributed with the AppPP package and may *
* not be distrbuted by another way. It must always be kept in *
* original and unmodifed form. This file is distributed for lear- *
* ning purposes and as example only. You are allowed to print this *
* file but you aren't allowed to distribute it in printed form. If *
* you want to make others uses of this source code, contact the *
* author. My adress can be found in the doc file of this program. *
* *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Définition des constantes. (Ne prend pas de place dans le code) * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ExecBase = 4
OpenScreenTagList = -612
OpenWindowTagList = -606
CloseScreen = -66
CloseWindow = -72
PrintIText = -216
LockPubScreen = -510
UnlockPubScreen = -516
SetMenuStrip = -264
ClearMenuStrip = -54
EasyRequestArgs = -$024c
GetVisualInfoA = -126
FreeVisualInfo = -132
CreateContext = -114
CreateGadgetA = -30
GT_RefreshWindow = -84
FreeGadgets = -36
CreateMenusA = -48
LayoutMenusA = -66
FreeMenus = -54
OpenDiskFont = -30
CloseFont = -78
DrawBevelBoxA = -120
FreeClass = -714
NewObjectA = -636
DisposeObject = -642
TextLength = -54
CopyMem = -624
FindTagItem = -30
IntuiTextLength = -330
FindTask = -$0126
Forbid = -132
Permit = -138
OpenLibrary = -552
CloseLibrary = -414
SetTaskPri = -$012c
AllocFileRequest = -$001e
FreeFileRequest = -$0024
RequestFile = -$002a
AllocAslRequest = -$0030
FreeAslRequest = -$0036
AslRequest = -$003c
WaitPort = -$0180
GT_GetIMsg = -$0048
GT_ReplyIMsg = -$004e
GT_BeginRefresh = -$005a
GT_EndRefresh = -$0060
GT_SetGadgetAttrsA = -$002a
GetDiskObjectNew = -$0084
CreateMsgPort = -$029a
DeleteMsgPort = -$02a0
AddAppIconA = -$003c
RemoveAppIcon = -$0042
GetMsg = -$0174
ReplyMsg = -$017a
FreeMem = -$00d2
AllocMem = -$00c6
CurrentDir = -$007e
OpenFromLock = -$017a
Open = -$001e
Close = -$0024
Read = -$002a
Write = -$0030
DeleteFile = -$0048
FPutS = -$0156
FPutC = -$0138
PutStr = -$03b4
Flush = -$0168
AllocDosObject = -$00e4
FreeDosObject = -$00ea
Examine = -$0066
GetProgramDir = -$0258
NameFromLock = -$0192
AddPart = -$0372
Lock = -$0054
UnLock = -$005a
Output = -$003c
Delay = -$00c6
; -- PowerPacker.library --
ppLoadData = -$001e
ppDecrunchBuffer = -$0024
ppCalcChecksum = -$002A
ppCalcPasskey = -$0030
ppDecrypt = -$0036
ppGetPassword = -$003C
ppAllocCrunchInfo = -$0060
ppFreeCrunchInfo = -$0066
ppCrunchBuffer = -$006C
ppWriteDataHeader = -$0072
ppEnterPassword = -$0078
ppErrorMessage = -$0084
; -- Icon.library --
GetDiskObject = -$004e
PutDiskObject = -$0054
FreeDiskObject = -$005a
DeleteDiskObject = -$008a
;________________________________________________________________________
; -- MenuItem --
CheckIt = $0001
ItemText = $0002
CommSeq = $0004
MenuToggle = $0008
ItemEnabled = $0010
HighFlags = $00c0
HighImage = $0000
HighComp = $0040
HighBox = $0080
HighNone = $00c0
Checked = $0100
IsDrawn = $1000
HighItem = $2000
MenuToggled = $4000
; -- Requester --
PointRel = $0001
PreDrawn = $0002
NoisyReq = $0004
SimpleReq = $0010
UserReqImage = $0020
NoReqBackFill = $0040
ReqOffWindow = $1000
ReqActive = $2000
SysRequest = $4000
DeferRefresh = $8000
; -- Gadget --
GFLG_GadHighBits = $0003
GFLG_GadGhComp = $0000
GFLG_GadGhBox = $0001
GFLG_GadGhImage = $0002
GFLG_GadGhNone = $0003
GFLG_GadgImage = $0004
GFLG_RelBottom = $0008
GFLG_RelRight = $0010
GFLG_RelWidth = $0020
GFLG_RelHeight = $0040
GFLG_Selected = $0080
GFLG_Disabled = $0100
GFLG_LabelMask = $3000
GFLG_LabelIText = $0000
GFLG_LabelString = $1000
GFLG_LabelImage = $2000
GFLG_TabCycle = $0200
GFLG_StringExtend = $0400
GACT_RelVerify = $0001
GACT_Immediate = $0002
GACT_EndGadget = $0004
GACT_FollowMouse = $0008
GACT_RightBorder = $0010
GACT_LeftBorder = $0020
GACT_TopBorder = $0040
GACT_BottomBorder = $0080
GACT_BorderSniff = $8000
GACT_ToggleSelect = $0100
GACT_BoolExtend = $2000
GACT_StringLeft = $0000
GACT_StringCenter = $0200
GACT_StringRight = $0400
GACT_LongInt = $0800
GACT_AltKeymap = $1000
GACT_StringExtend = $2000
GACT_ActiveGadget = $4000
GTYP_GadgetType = $fc00
GTYP_SysGadget = $8000
GTYP_ScrGadget = $4000
GTYP_GzzGadget = $2000
GTYP_ReqGadget = $1000
GTYP_Sizing = $0010
GTYP_WDragging = $0020
GTYP_SDragging = $0030
GTYP_WUpFront = $0040
GTYP_SUpFront = $0050
GTYP_WDownBack = $0060
GTYP_SDownBack = $0070
GTYP_Close = $0080
GTYP_BoolGadget = $0001
GTYP_Gadget0002 = $0002
GTYP_PropGadget = $0003
GTYP_StrGadget = $0004
GTYP_CustomGadget = $0005
GTYP_GTYPMask = $0004
; -- BoolInfo --
BoolMask = $0001
; -- IDCMPMessage --
IDCMP_SizeVerify = $00000001
IDCMP_NewSize = $00000002
IDCMP_RefreshWindow = $00000004
IDCMP_MouseButtons = $00000008
IDCMP_MouseMove = $00000010
IDCMP_GadgetDown = $00000020
IDCMP_GadgetUp = $00000040
IDCMP_ReqSet = $00000080
IDCMP_MenuPick = $00000100
IDCMP_CloseWindow = $00000200
IDCMP_RawKey = $00000400
IDCMP_ReqVerify = $00000800
IDCMP_ReqClear = $00001000
IDCMP_MenuVerify = $00002000
IDCMP_NewPrefs = $00004000
IDCMP_DiskInserted = $00008000
IDCMP_DiskRemoved = $00010000
IDCMP_WBenchMessage = $00020000
IDCMP_ActiveWindow = $00040000
IDCMP_InactiveWindow = $00080000
IDCMP_DeltaMove = $00100000
IDCMP_VanillaKey = $00200000
IDCMP_Intuiticks = $00400000
IDCMP_IDCMPUpdate = $00800000
IDCMP_MenuHelp = $01000000
IDCMP_ChangeWindow = $02000000
IDCMP_LonelyMessage = $80000000
MenuHot = $0001
MenuCancel = $0002
MenuWaiting = $0003
OkOk = MenuHot
OkAbort = $0004
OkCancel = MenuCancel
WBenchOpen = $0001
WBenchClose = $0002
; -- NewWindow --
WFLG_SizeGadget = $0001
WFLG_DragBar = $0002
WFLG_DepthGadget = $0004
WFLG_CloseGadget = $0008
WFLG_SizeBright = $0010
WFLG_SizeBottom = $0020
WFLG_RefreshBits = $00c0
WFLG_Smart_Refresh = $0000
WFLG_Simple_Refresh = $0040
WFLG_Super_Bitmap = $0080
WFLG_Other_Refresh = $00c0
WFLG_BackDrop = $0100
WFLG_ReportMouse = $0200
WFLG_GimmeZeroZero = $0400
WFLG_BorderLess = $0800
WFLG_Activate = $1000
WFLG_WindowActive = $2000
WFLG_InRequest = $4000
WFLG_MenuState = $8000
WFLG_RmbTrap = $00010000
WFLG_NoCareRefresh = $00020000
WFLG_WindowRefresh = $01000000
WFLG_WBenchWindow = $02000000
WFLG_WindowTicked = $04000000
SuperUnused = $fcfc0000
WFLG_NwExtended = $00040000
WFLG_Visitor = $08000000
WFLG_Zoomed = $10000000
WFLG_HasZoom = $20000000
DefaultMouseQueue = 5
; -- IntuiText --
It_LeftEdge = 4
It_TopEdge = 6
It_ITextFont = 8
It_SIZEOF = 20
;-- RastPort --
rp_Font = 52
; -- GadTools --
Generic_Kind = 0
Button_Kind = 1
CheckBox_Kind = 2
Integer_Kind = 3
ListView_Kind = 4
MX_Kind = 5
Number_Kind = 6
Cycle_Kind = 7
Palette_Kind = 8
Scroller_Kind = 9
Slider_Kind = 11
String_Kind = 12
Text_Kind = 13
Num_Kinds = 14
ButtonIDCMP = IDCMP_GadgetUp
CheckBoxIDCMP = IDCMP_GadgetUp
IntegerIDCMP = IDCMP_GadgetUp
;ListViewIDCMP = IDCMP_GadgetUp!IDCMP_GadgetDown!IDCMP_MouseMove!IDCMP_ArrowIDCMP
MxIDCMP = IDCMP_GadgetDown
NumberIDCMP = 0
CycleIDCMP = IDCMP_GadgetUp
PaletteIDCMP = IDCMP_GadgetUp
ScrollerIDCMP = IDCMP_GadgetUp!IDCMP_GadgetDown!IDCMP_MouseMove ;IDCMP_ArrowIDCMP!IDCMP_ScrollerIDCMP
SliderIDCMP = IDCMP_GadgetUp!IDCMP_GadgetDown!IDCMP_MouseMove
StringIDCMP = IDCMP_GadgetUp
TextIDCMP = 0
GadToolsBit = $8000
PlaceText_Left = $0001
PlaceText_Right = $0002
PlaceText_Above = $0004
PlaceText_Below = $0008
PlaceText_In = $0010
Ng_HighLabel = $0020
Nm_Title = 1
Nm_Item = 2
Nm_Sub = 3
Nm_End = 0
Menu_Image = 128
Nm_BarLabel = -1
Ga_TabCycle = $80030024
GtMX_Labels = $80080009
GtBB_Recessed = $80080033
GT_VisualInfo = $80080034
GTCB_Checked = $80080004
GTNM_Number = $8008000d
GTNM_Border = $8008003a
GTTX_Text = $8008000b
GTTX_CopyText = $8008000c
GTCY_Labels = $8008000e
GTCY_Active = $8008000f
GTSL_Min = $80080026
GTSL_Max = $80080027
GTSL_Level = $80080028
GTSL_MaxLevelLen = $80080029
GTSL_LevelFormat = $8008002a
GTSL_LevelPlace = $8008002b
GTSL_DispFunc = $8008002c
GTST_String = $8008002d
GTST_MaxChars = $8008002e
GTIN_Number = $8008002F
GTIN_MaxChars = $80080030
GTTX_Border = $80080039
; -- IntuiMessage --
IMsg_Class = 20
IMsg_Code = 24
IMsg_Qualifier = 26
IMsg_IAdress = 28
; -- Gadget --
SpecialInfo = 34
GadgetID = 38
; -- Intuition --
LOrient_None = $00000000
LOrient_Horiz = $00000001
LOrient_Vert = $00000002
GA_Immediate = $80030015
GA_RelVerify = $80030016
GA_Disabled = $8003000e
PGA_FreeDom = $80031001
; -- Asl --
ASL_Hail = $80080001
ASL_Window = $80080002
ASL_File = $80080008
ASL_Dir = $80080009
ASL_OKText = $80080012
ASL_CancelText = $80080013
ASL_FuncFlags = $80080014
ASL_ExtFlags1 = $80080016
; -- AslRequestStruct --
rf_File = 4
rf_Dir = 8
; -- TagItem --
Tag_Done = 0
Tag_User = $80000000
; -- Screen --
sc_Width = 12
sc_Height = 14
sc_WBorTop = 35
sc_WBorLeft = 36
sc_WBorRight = 37
sc_WBorBottom = 38
sc_Font = 40
sc_RastPort = 84
; -- ExtNewWindow --
WA_Left = $80000064
WA_Top = $80000065
WA_Width = $80000066
WA_Height = $80000067
WA_IDCMP = $8000006a
WA_Flags = $8000006b
WA_Gadgets = $8000006c
WA_Title = $8000006e
WA_AutoAdjust = $80000090
; -- TextAttr --
Ta_Name = 0
Ta_YSize = 4
Ta_Style = 6
Ta_Flags = 7
; -- GraphicsBase --
DefaultFont = 154
; -- TextFont --
tf_Message__ln_Name = 10
tf_YSize = 20
tf_XSize = 24
; -- NewGadget --
gng_SizeOf = 30
gng_LeftEdge = 0
gng_TopEdge = 2
gng_Width = 4
gng_Height = 6
gng_GadgetText = 8
gng_TextAttr = 12
gng_GadgetID = 16
gng_Flags = 18
gng_VisualInfo = 22
gng_UserData = 26
; -- PowerPacker --
Decr_Col0 = 0
Decr_Col1 = 1
Decr_Pointer = 2
Decr_Scroll = 3
Decr_None = 4
SpeedUp_BuffLarge = 0
SpeedUp_BuffMedium = 1
SpeedUp_BuffSmall = 2
Crun_Fast = 0
Crun_Mediocre = 1
Crun_Good = 2
Crun_VeryGood = 3
Crun_Best = 4
; -- Window --
Wd_RPort = 50
Wd_BorderLeft = 54
Wd_BorderTop = 55
Wd_BorderRight = 56
Wd_BorderBottom = 57
Wd_BorderRPort = 58
wd_IFont = 128
; -- StringInfo --
Buffer = 0
UndoBuffer = 4
BufferPos = 8
MaxChars = 10
LongInt = 28
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
GD_Working_Crunch = 0
GD_Working_Decrunch = 1
GD_Working_Nothing = 2
GD_Working_Skip = 3
GD_Working_Stop = 4
GD_Working_Status = 5
GD_Working_Name = 6
GD_Working_Length = 7
GD_Working_Dest = 8
GD_Config_UseAltPath = 0
GD_Config_Eff = 1
GD_Config_Buf = 2
GD_Config_DecrEff = 3
GD_Config_Save = 4
GD_Config_Use = 5
GD_Config_Cancel = 6
GD_Config_Quit = 7
GD_Config_Get = 8
GD_Config_About = 9
GD_Config_CopyIcons = 10
GD_Config_Add_pp = 11
GD_Config_Rem_pp = 12
GD_Config_Priority = 13
GD_Config_AppIconX = 14
GD_Config_AppIconY = 15
GD_Config_AltPath = 16
GD_About_Inter = 0
Working_CNT = 9 ; Nombres de gadgets
Config_CNT = 17
About_CNT = 1
GadgetMaxNumber = 17
Working_TNUM = 0
Config_TNUM = 0
About_TNUM = 6
WorkingLeft = 98 ; Working Window
WorkingTop = 88
WorkingWidth = 361
WorkingHeight = 159
Working0_Left = 12 ; Working BevelBox 0
Working0_Top = 33
Working0_Width = 337
Working0_Height = 115
Working1_Left = 3 ; Working BevelBox 1
Working1_Top = 4
Working1_Width = 353
Working1_Height = 151
ConfigLeft = 120 ; Config Window
ConfigTop = 83
ConfigWidth = 306
ConfigHeight = 259
Config0_Left = 4 ; Config BevelBox 0
Config0_Top = 85
Config0_Width = 298
Config0_Height = 56
Config1_Left = 4 ; Config BevelBox 1
Config1_Top = 5
Config1_Width = 298
Config1_Height = 74
Config2_Left = 4 ; Config BevelBox 2
Config2_Top = 147
Config2_Width = 298
Config2_Height = 81
AboutLeft = 209 ; About Window
AboutTop = 49
AboutWidth = 352
AboutHeight = 198
About0_Left = 5 ; About BevelBox 0
About0_Top = 6
About0_Width = 341
About0_Height = 155
FileNameBufferL = 256
FileNameBufferLL = 264
ConfigBufferL = 488
; -- ConfigBuffer --
CP_Config_Version = 0 ; > 0
CP_Config_UseAltPath = 1 ; > 1
CP_Config_Efficiency = 2 ; > 2
CP_Config_Buffer = 3 ; > 3
CP_Config_Effect = 4 ; > 4
CP_Config_Priority = 6 ; > 7
CP_Config_AltPath = 14 ; > 269
CP_Config_CopyIcons = 270 ; > 270
CP_Config_Add_pp = 271 ; > 271
CP_Config_Rem_pp = 272 ; > 272
CP_Config_AppIconX = 274 ; > 277
CP_Config_AppIconY = 278 ; > 281
CP_Config_F = 488
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * *
* * Programme Principal. * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Movem.l d2-d7/a2-a6,-(sp)
Bsr.s StartUp0 ; Message du Wb | Ouvrir librairies
Tst.b d0 ; Erreur ?
Bne.s StartUpFail ; Oui, terminer
Bsr.w LoadConfig ; Charger le fichier de config
Cmp.b #2,d0 ; Plus de mémoire ?
Beq.s StartUpFail ; Oui, tout fermer et quitter
Cmp.b #1,d0 ; Erreur de fichier ?
Bne.s LoadConfigOk ; Non, continuer
Bsr.w ConfigPanel ; Oui, panneau de configuration
Cmp.b #2,CP_QuitByte ; L'utilisateur veut quitter ?
Beq.s StartUpFail ; Oui, tout fermer
LoadConfigOk:
Bsr.w StartUp1 ; Installer AppIcon
Tst.b d0 ; Erreur ?
Bne.s StartUpFail ; Oui, terminer
Bsr.w WaitAppMsg ; Traitement des AppMsg
StartUpFail:
Bsr.w CloseAll ; Tout Fermer
Movem.l (sp)+,d2-d7/a2-a6
; Illegal
Moveq #0,d0 ; ReturnCode
Rts ; Quitter
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Version d'AppPP. Cette chaîne s'affiche avec la commande Version. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
dc.b '$VER:AppPP_1.0',0,0
StartUp0:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* S'occupe de prendre le message du Wb. * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Move.l ExecBase,a6
Suba.l a1,a1 ; Notre processus
Jsr FindTask(a6) ; Obtenir un pointeur sur processus
Move.l d0,OwnTask ; Sauver Task
Move.l d0,a3
Tst.l $ac(a3) ; Process->pr_CLI =? 0
Bne.w SU0_Fail ; Non, lancé depuis le CLI, on quitte
S_WaitWbMsg: ; Oui, on continue
Lea $5c(a3),a0 ; Process->pr_MsgPort
Jsr WaitPort(a6) ; Attendre l'arrivée d'un message
Lea $5c(a3),a0 ; Process->pr_MsgPort
Jsr GetMSG(a6) ; Prendre le message sur le port
Move.l d0,WbMsg
Beq.s S_WaitWbMsg
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Ouvrir toutes les librairies dont on a besoin. * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Move.l ExecBase,a6
Lea IconName,a1
Moveq #37,d0
Jsr OpenLibrary(a6)
Move.l d0,IconBase
Beq.s SU0_Fail
Lea WorkbenchName,a1
Moveq #37,d0
Jsr OpenLibrary(a6)
Move.l d0,WorkbenchBase
Beq.s SU0_Fail
Lea DosName,a1
Moveq #36,d0
Jsr OpenLibrary(a6)
Move.l d0,DosBase
Beq.s SU0_Fail
Lea GadtoolsName,a1
Moveq #36,d0
Jsr OpenLibrary(a6)
Move.l d0,GadtoolsBase
Beq.s SU0_Fail
Lea IntuitionName,a1
Moveq #36,d0
Jsr OpenLibrary(a6)
Move.l d0,IntuitionBase
Beq.s SU0_Fail
Lea ppName,a1
Moveq #35,d0
Jsr OpenLibrary(a6)
Move.l d0,ppBase
Beq.s SU0_Fail
Lea GraphicsName,a1
Moveq #36,d0
Jsr OpenLibrary(a6)
Move.l d0,GraphicsBase
Beq.s SU0_Fail
Move.b #0,d0
SU0_End:
Rts
SU0_Fail:
Move.b #1,d0
Bra.s SU0_End
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Installer l'AppIcon dans le WB. (Utilise l'icône du programme) * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
StartUp1:
Move.l ExecBase,a6
Move.l #$1,d1 ; PublicMem
Move.l #FileNameBufferLL,d0 ; Allouer un tampon pour le nom
Jsr AllocMem(a6)
Move.l d0,FileNameBuffer
Beq.w SU1_Fail
Addq.l #4,FileNameBuffer ; 4 octets de sécurité
Move.l DosBase,a6
Jsr GetProgramDir(a6) ; Obtenir un Lock sur le répertoire
Move.l d0,DirLock
Move.l DirLock,d1 ; Lock sur le répertoire
Move.l FileNameBuffer,d2 ; Adresse du tampon
Move.l #FileNameBufferL,d3 ; Longueur
Jsr NameFromLock(a6) ; Obtenir le nom du répertoire de démarrage
Tst.l d0 ; NameFromLock Ok ?
Bne.s S_NameFromLock_Ok ; Oui, on continue
Bsr.w FreeFileNameBuffer ; Non, libérer le tampon
Bra.w SU1_Fail ; Terminer le programme
S_NameFromLock_Ok:
Move.l FileNameBuffer,d1 ; DirName
Move.l #ProgramName,d2 ; FileName
Move.l #FileNameBufferL,d3 ; Size
Jsr AddPart(a6) ; rassembler le dir et le nom de fichier
Tst.l d0 ; AddPart Ok ?
Bne.s S_AddPart_Ok ; Oui, on continue
Bsr.w FreeFileNameBuffer ; Libérer le tampon
Bra.s SU1_Fail ; Terminer le programme
S_AddPart_Ok:
Move.l IconBase,a6
;!!!! Move.l #Object,a0 ; Provisoire
Move.l FileNameBuffer,a0 ; Nom du programme
Jsr GetDiskObjectNew(a6) ; Obtenir la structure AppDiskObject
Move.l d0,AppDiskObject
Bsr.w FreeFileNameBuffer ; Libérer le tampon
Tst.l AppDiskObject ; Obtention du AppDiskObject Ok ?
Beq.s SU1_Fail ; Non, terminer le programme
Move.l AppDiskObject,a0
Move.l ConfigBuffer0,a1
Move.w #0,48(a0) ; DiskObject->do_Type = 0
Move.l CP_Config_AppIconX(a1),58(a0);DiskObject->do_CurrentX
Move.l CP_Config_AppIconY(a1),62(a0);DiskObject->do_CurrentY
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Créer un port message pour la gestion de l'AppIcon. * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Move.l ExecBase,a6
Jsr CreateMsgPort(a6)
Move.l d0,AppMsgPort
Beq.s SU1_Fail
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Installer l'AppIcon dans le WB. * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Bsr.w InstallAppIcon
Tst.l AppIcon
Beq.s SU1_Fail
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Modifier la priorité de la tâche ne fonction des prefs. * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Move.l OwnTask,a1 ; Task
Move.l ConfigBuffer0,a0
Move.w CP_Config_Priority(a0),d0; Nouvelle priorité
Move.l ExecBase,a6
Jsr SetTaskPri(a6) ; Modifier priorité
Move.b #0,d0
SU1_End:
Rts
SU1_Fail:
Move.b #1,d0
Bra.s SU1_End
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* DESCRIPTION: *
* Loadconfig: *
* Alloue un tampon et charge le fichier de config. Si *
* la version de la config ne correspond pas, affiche un *
* message approprié. *
* INPUT: *
* Loadconfig: *
* OUTPUT: *
* LoadConfig: *
* d0 = 1 pas de fichier ou version ancienne *
* = 0 fichier ok ou version future *
* = 2 pas de mémoire *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
LoadConfig:
Move.l ExecBase,a6
Move.l #$10001,d1 ; PublicMem
Move.l #ConfigBufferL,d0
Jsr AllocMem(a6) ; Allouer un tampon pour la config
Move.l d0,ConfigBuffer0 ; Buffer de config 0
Beq.s LC_Fail2 ; buffer pas ok
Move.l DosBase,a6
Move.l #1005,d2 ; Lecture
Move.l #ConfigFileName0,d1 ; Se trouve dans Env:
Jsr Open(a6) ; Ouvrir le fichier
Move.l d0,ConfigFileName0_FH ; Ouverture à échoué ?
Beq.s LC_Fail1 ; Oui, erreur de fichier
Move.l d0,d1 ;!! ConfigFileName0_FH
Move.l ConfigBuffer0,d2 ; Buffer de config 0
Move.l #ConfigBufferL,d3 ; 488 bytes
Jsr Read(a6) ; Lire le Fichier
Move.l d0,d4
Move.l ConfigFileName0_FH,d1 ; Refermer le fichier Config 0
Jsr Close(a6)
Cmp.l #488,d4 ; Le fichier a 488 bytes ?
Bne.s LC_Fail1 ; Non, Erreur de lecture
Move.l ConfigBuffer0,a0
Move.b CP_Config_Version(a0),d0; Version de AppPP
Cmp.b #2,d0 ; = Version 1.1
Beq.s LC_VersionOk ; Oui, config actuelle
Cmp.b #1,d0 ; = Version 1.0
Bne.s LC_FutureVersion ; Non, version future
Lea LC_OldVersion_EasyT,a0 ; Oui,
Bsr EasyRequest_Com ; Afficher avertissement
Bra.s LC_Fail1 ; Retourner 1
LC_FutureVersion:
Lea LC_FutureVersion_EasyT,a0; Version future
Bsr EasyRequest_Com ; Afficher avertissement
;!! Bra.s LC_VersionOk ; Pas besoin du ConfigPanel
LC_VersionOk:
Move.b #0,d0 ; Lecture ok
LC_AllOk:
Rts
LC_Fail1:
Move.b #1,d0 ; Erreur de fichier
Bra.s LC_AllOk
LC_Fail2:
Move.b #2,d0 ; Plus de mémoire
Bra.s LC_AllOk
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* DESCRIPTION: *
* WaitAppMsg: *
* Attend et prélève l' AppMessage et prépare le pgm à *
* boucler dans NextFile. AppMessage est ensuite rendu. *
* INPUT: *
* WaitAppMsg: *
* AppMsgPort = Port message crée l'AppIcon. *
* OUTPUT: *
* WaitAppMsg: *
* Msg.l = AppMessage *
* FileNumer.l = Nombre de fichiers * 8 *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
WaitAppMsg:
Move.l ExecBase,a6
Move.l AppMsgPort,a0
Jsr WaitPort(a6) ; Attente d'un message
GetAppMessage:
Move.l #0,FileCount ; Fichiers Traités = 0
Move.l AppMsgPort,a0
Move.l ExecBase,a6
Jsr GetMsg(a6) ; On prend le Message
Move.l d0,Msg
Beq.s WaitAppMsg
Move.l d0,a0 ;!! AppMessage
Lea 30(a0),a1 ; AppMessage->NumArgs
Move.l (a1),d1 ;
Mulu #8,d1 ; Nb de fichiers * 8
Move.l d1,FileNumber ; Nb * 8 dans FileNumber.l
Bne.s GAM_NoConfigPanel ; Nb <> 0 Oui, pas de ConfigPanel
Move.l ConfigBuffer0,a0
Move.l CP_Config_AppIconX(a0),d2; Sauver anciennes valeurs
Move.l CP_Config_AppIconY(a0),d3
Bsr.w ConfigPanel ; Nb =? 0 Oui, ConfigPanel
Cmp.b #2,CP_QuitByte ; L'utilisateur veut quitter ?
Beq.s GAM_NoSetAppIconPos ; Oui, ne pas déplacer l'AppIcon
Move.l ConfigBuffer0,a0
Move.l CP_Config_AppIconX(a0),d4; Nouvelles valeurs
Move.l CP_Config_AppIconY(a0),d5
Cmp.l d2,d4 ; Ancien X =? Nouveau X
Bne.s GAM_SetAppIconPos ; Non, déplacer AppIcon
Cmp.l d3,d5 ; Ancien Y =? Nouveau Y
Bne.s GAM_SetAppIconPos ; Non, déplacer AppIcon
Bra.s GAM_NoSetAppIconPos ; X&Y inchangés, pas de déplacement
GAM_SetAppIconPos:
Move.l ExecBase,a6
Move.l Msg,a1 ; AppMessage
Jsr ReplyMsg(a6) ; rendre message de l'ancienne AppIcon
Move.l #0,Msg
Bsr.w EvtlRemoveAppIcon ; Enlève l'AppIcon existante
Move.l AppDiskObject,a0
Move.w #0,48(a0) ; DiskObject->do_Type = 0
Move.l d4,58(a0) ; DiskObject->do_CurrentX
Move.l d5,62(a0) ; DiskObject->do_CurrentY
Bsr.w InstallAppIcon ; Nouvelle AppIcon
Tst.l AppIcon ; AppIcon ok
Bne.s GAM_NoSetAppIconPos ; Oui, continuer
Move.b #2,CP_QuitByte ; Non, quitter
GAM_NoSetAppIconPos:
Bra.w ReplyMessage ; Rendre le message
GAM_NoConfigPanel:
Move.b #2,GUI_
Bsr.w SetupScreen_
Tst.b d0
Bne.w Crunch_Request_Err ; Erreur
Move.w #WorkingLeft,Left
Move.w #WorkingTop,Top
Move.w #WorkingWidth,Width
Move.w #WorkingHeight,Height
Bsr.w OpenWindow_ ; Affichage de la Fenêtre "Quoi faire"
Move.l Wnd,WorkingWnd
Tst.b d0
Bne.w Crunch_Request_Err ; Erreur
Move.l #NormalBevelbox,Bevelbox_TagList
Move.w #Working0_Top,BevelTop
Move.w #Working0_Left,BevelLeft
Move.w #Working0_Width,BevelWidth
Move.w #Working0_Height,BevelHeight
Bsr.w Render1 ; Dessiner la Bevelbox
Move.l #InverseBevelbox,Bevelbox_TagList
Move.w #Working1_Top,BevelTop
Move.w #Working1_Left,BevelLeft
Move.w #Working1_Width,BevelWidth
Move.w #Working1_Height,BevelHeight
Bsr.w Render1 ; Dessiner la Bevelbox
;!! Move.l WorkingWnd,Wnd
Move.b #$ff,UserResponse
Bsr.w WaitMessages ; Attendre réponse de l'utilisateur
Move.b UserResponse,Working_CrunchUserResponse
;!! Move.l WorkingWnd,Wnd
Bsr.w GM_RepIMessage
Cmp.b #3,Working_CrunchUserResponse; L'utilisateur ne veut rien faire ?
Bne.s GAM__de_crunch ; Non, Continuer
;!! Move.l WorkingWnd,Wnd ; Oui, fermer interface
Bsr.w IMessageLoop
Bsr.w CloseWindow_
Bsr.w CloseDownScreen_
Bra.w ReplyMessage
GAM__de_crunch: ; Crunch|Decrunch
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Disabler Crunch, Decrunch et Nothing. Enabler Skip et Stop. * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Move.l GadtoolsBase,a6
Move.l WorkingWnd,a4
Lea WorkingGadgets,a5
Move.l a4,a1 ; Window Ptr
Suba.l a2,a2 ; Req (not implemented)
Move.l 0*4(a5),a0 ; Gadget 0 = Crunch
Lea GAM_WorkingGad0Attrs,a3
Jsr GT_SetGadgetAttrsA(a6)
Move.l a4,a1 ; Window Ptr
Suba.l a2,a2 ; Req (not implemented)
Move.l 1*4(a5),a0 ; Gadget 1 = Decrunch
Lea GAM_WorkingGad1Attrs,a3
Jsr GT_SetGadgetAttrsA(a6)
Move.l a4,a1 ; Window Ptr
Suba.l a2,a2 ; Req (not implemented)
Move.l 2*4(a5),a0 ; Gadget 2 = Nothing
Lea GAM_WorkingGad2Attrs,a3
Jsr GT_SetGadgetAttrsA(a6)
Move.l a4,a1 ; Window Ptr
Suba.l a2,a2 ; Req (not implemented)
Move.l 3*4(a5),a0 ; Gadget 3 = Skip
Lea GAM_WorkingGad3Attrs,a3
Jsr GT_SetGadgetAttrsA(a6)
Move.l a4,a1 ; Window Ptr
Suba.l a2,a2 ; Req (not implemented)
Move.l 4*4(a5),a0 ; Gadget 4 = Stop
Lea GAM_WorkingGad4Attrs,a3
Jsr GT_SetGadgetAttrsA(a6)
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Allouer une structure CrunchInfo en fonction des Prefs. * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Move.l ConfigBuffer0,a0
Moveq #0,d0
Moveq #0,d1
Move.b CP_Config_Efficiency(a0),d0
Move.b CP_Config_Buffer(a0),d1
Cmp.b #2,d1 ; Désir Large = 2
Beq.s GAM_SetPrefs0
Cmp.b #0,d1 ; Désir Small = 0
Beq.s GAM_SetPrefs1
Bra.s GAM_SetPrefsF ; Désir Medium = PP Medium = 1
GAM_SetPrefs0:
Moveq #SpeedUp_BuffLarge,d1 ; PP Large = 0
Bra.s GAM_SetPrefsF
GAM_setPrefs1:
Moveq #SpeedUp_BuffSmall,d1 ; PP Small = 2
;!! Bra.s GAM_SetPrefsF
GAM_SetPrefsF:
Suba.l a0,a0 ; Allocation de CrunchInfo
Suba.l a1,a1 ; pour la fonction
Move.l ppBase,a6
Jsr ppAllocCrunchInfo(a6) ; powerpacker.library/CrunchBuffer()
Move.l d0,CrunchInfo
Tst.l d0
Beq.w AllocCrunchInfo_Err
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Allouer un tampon pour le nom de fichier pour NextFile. * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Move.l ExecBase,a6
Move.l #FileNameBufferLL,d0
Move.l #1,d1
Jsr AllocMem(a6) ; Allouer un tampon pour le nom du
Move.l d0,FileNameBuffer ; fichier
Beq.w AllocMem_Err
Addq.l #4,FileNameBuffer
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* DESCRIPTION: *
* NextFile: *
* Traite les fichiers en boucle jusqu'à ce qu'il n'y en *
* ait plus à traiter. S'occupe intégralement des erreurs.*
* Détermine si le fichier est compacté et se branche à *
* DataCrunched ou DataNotCrunched suivant les cas. *
* INPUT: *
* NextFile: *
* Msg = AppMessage *
* FileNameBuffer = Pointeur sur le tampon du nom. *
* FileCount = Doit être égal à zéro *
* OUTPUT: *
* NextFile: *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
NextFile: ; Fichier suivant
Move.l FileCount,d0
Move.l Msg,a0
Lea 34(a0),a1
Move.l (a1),a0
Adda.l d0,a0 ; Trouver le Lock sur le répertoire
Move.l (a0),DirLock
Move.l DosBase,a6
Move.l DirLock,d1
Move.l FileNameBuffer,d2 ; Obtenir le nom du Path
Move.l #FileNameBufferL,d3 ; Le nom est mis dans le tampon
Jsr NameFromLock(a6) ; prévu où pointe FileNameBuffer
Move.l FileCount,d0
Move.l Msg,a0
Lea 34(a0),a1
Move.l (a1),a0
Adda.l d0,a0 ; Chercher le nom du fichier
Move.l 4(a0),d2
Move.l d2,FileName ; Sauver l'adresse du nom dans FileName
Move.l #FileNameBufferL,d3
Move.l FileNameBuffer,d1
Jsr AddPart(a6) ; Concaténer le nom du dir avec le nom de fichier
Move.l FileName,a0
Move.l a0,d0
Calculate_StrLengthB:
Cmp.b #0,(a0)+
Bne.s Calculate_StrLengthB ; Calculer la longueur de la
Suba.l d0,a0 ; chaîne FileName
Move.l a0,d1
Move.b d1,FileName_StrLength
Cmp.b #1,FileName_StrLength ; répertoire? -> chaîne de 1 byte
Beq.s NF_NoFileNameWriting ; Oui, ne pas écrire FileName
Move.l GadtoolsBase,a6
Move.l WorkingWnd,a1 ; Struct Window en a1
Suba.l a2,a2 ; Req = 0
Lea WriteTextTags,a3 ; Tags en a3
Move.l FileName,4(a3) ; Adresse du nom à GTTX_Text
Lea WorkingGadgets,a0
Move.l 6*4(a0),a0 ; Name Gadget
Jsr GT_SetGadgetAttrsA(a6) ; Afficher nom du fichier
NF_NoFileNameWriting:
Move.l DosBase,a6
Move.l FileNameBuffer,d1
Move.l #1005,d2 ; Obtenir un Lock sur le nom du
Jsr Lock(a6) ; fichier avec Path complet
Move.l d0,FileLock ; Lock Ok ?
Bne.s NF_Lock_Ok ; Oui, on continue
Lea NF_LockErr_EasyT,a0
Bsr.w EasyRequest_Com
Bra.w NoDecrunch
NF_Lock_Ok:
Moveq #2,d1 ; Type de DosObject
Moveq #0,d2 ; TagList
Move.l DosBase,a6
Jsr AllocDosObject(a6) ; On alloue une structure pour la
Move.l d0,DosObject ; fonction Examine()
Beq.w AllocDosObject_Err
Move.l FileLock,d1
Move.l DosObject,d2
Jsr Examine(a6) ; On Examine() le fichier d'après
Move.l DosObject,a0 ; le Lock trouvé précédemment.
Tst.l d0
Bne.s NF_Examine_Ok ; Examine() est ok, on continue
Move.l DosObject,d2
Moveq #2,d1 ; Libérer la structure DosObject
Jsr FreeDosObject(a6)
Move.l FileLock,d1
Jsr UnLock(a6) ; On délock la fichier
Lea NF_ExamineErr_EasyT,a0 ; Avertir
Bsr.w EasyRequest_Com
Bra.w NoDecrunch
NF_Examine_Ok:
Move.l 124(a0),FileLength ; FileInfoBlock->fib_Size
Move.l FileLock,d1
Jsr UnLock(a6) ; On délock le fichier.
Move.l DosObject,a0
Tst.l 4(a0) ; Est-ce un répertoire ?
Blt.s IsAFile ; Si non, on le continue.
Move.l #Working_DirErrT,WTT_Text; Adresse du nom à GTTX_Text
Bsr.w SetWorkingGad5Attrs ; Oui, afficher DirErrT
Bra.w NoDecrunch ; Terminer le traitement du fichier
IsAFile:
Move.l DosBase,a6
Move.l DosObject,d2
Moveq #2,d1
Jsr FreeDosObject(a6) ; Libérer la structure DosObject
Move.l #0,SBuffer ; On vide le tampon de 4 octets
Move.l #1005,d2 ; Mode_OldFile
Move.l FileNameBuffer,d1
Jsr Open(a6) ; On Open() le fichier en question
Move.l d0,FileHandle ; Gestionnaire dans FileHandle
Bne.s FileOpen_Ok ; Ok, on continue.
Lea OpenReadErr_EasyT,a0
Bsr.w EasyRequest_Com ; Erreur, Avertir
Bra.w NoDecrunch ; Fin du traitement du fichier
FileOpen_Ok: ; Pas d'erreur, on continue
Move.l #Working_ScanningT,WTT_Text; GTTX_Text = Adresse du texte
Bsr.w SetWorkingGad5Attrs ; Ecrire Scanning
Move.l GadtoolsBase,a6
Lea WorkingGadgets,a0
Move.l 7*4(a0),a0 ; Source Gadget
Move.l WorkingWnd,a1 ; Struct Window en a1
Suba.l a2,a2 ; Req = 0
Lea WriteNumberTags,a3 ; Tags en a3
Move.l FileLength,WNT_Number ; Longueur du fichier
Jsr GT_SetGadgetAttrsA(a6) ; Afficher longueur du fichier
Bsr.w GetWorkingMessage ; Vérifier si gadget est appuyé
Cmp.b #4,Working_UserResponse ; Skip File ?
Beq.s NextFile_Skip1 ; Oui, on se branche à la routine
Cmp.b #5,Working_UserResponse ; Stop All ?
Beq.w NextFile_Stop1 ; Oui, on se branche à la routine
Move.l DosBase,a6
Move.l FileHandle,d1
Move.l #SBuffer,d2 ; On lit les 4 premiers octets du
Move.l #4,d3 ; fichier
Jsr Read(a6) ; On écrit dans SBuffer
Move.l d0,d4 ; Nb de bytes lus
Move.l FileHandle,d1 ; Fermer le fichier
Jsr Close(a6)
Cmp.l #4,d4 ; Erreur de lecture du fichier ?
Beq.s FileNotEmpty ; Non, on continue
Lea NF_ReadErr_EasyT,a0
Bsr.w EasyRequest_Com
Bra.w NoDecrunch ; Passer au fichier suivant
FileNotEmpty:
Move.l SBuffer,d1 ; On vérifie le contenu de SBuffer
Cmp.l #'PP20',d1 ; = 'PP20' => compacté normalement
Beq.s NF_PP20
Cmp.l #'PX20',d1 ; = 'PX20' => compacté avec passe
Beq.s NF_PX20
Bsr.w DataNotCrunched ; Non Compacté
Bra.s NF_TreatementOk
NF_PP20:
NF_PX20:
Bsr.w DataCrunched ; Compacté
;!! Bra.s NF_TreatementOk
NF_TreatementOk:
Bra.s NoDecrunch
; Traitement des stops.
NextFile_Skip1: ;
Move.l DosBase,a6
Move.l FileHandle,d1
Jsr Close(a6) ; Fermer le fichier
Move.l #Working_SkipT,WTT_Text ; GTTX_Text = Adresse du texte
Bsr.w SetWorkingGad5Attrs
Bra.s NoDecrunch ; Traitement terminé
NextFile_Stop1: ;
Move.l DosBase,a6
Move.l FileHandle,d1
Jsr Close(a6) ; Fermer le fichier
Move.l #Working_StopT,WTT_Text ; GTTX_Text = Adresse du texte
Bsr.w SetWorkingGad5Attrs
Bra.s FreeBuffers ; Arrêt total
; Traitement des erreurs graves.
AllocDosObject_Err:
Move.l DosBase,a6
Move.l FileLock,d1 ; on délock le fichier
Jsr UnLock(a6)
Bsr.w FreeFileNameBuffer ; Libérer le tampon FileNameBuffer
AllocMem_Err:
Move.l ppBase,a6
Move.l CrunchInfo,a0
Jsr ppFreeCrunchInfo(a6) ; Libérer la structure CrunchInfo
AllocCrunchInfo_Err:
Crunch_Request_Err:
Bsr.w CloseWindow_
Bsr.w CloseDownScreen_
Move.b #2,CP_QuitByte
Bra.s ReplyMessage
NoDecrunch: ; Fin du traitement du fichier
Add.l #8,FileCount ; On ajoute 8 au nbre de fichiers
Move.l FileNumber,d0 ; traités (facilite l'accès au message)
Cmp.l FileCount,d0 ; Nbre traités =? Nbre total
Beq.s FreeBuffers ; Si oui, traitement terminé
Bra.w NextFile ; Si non, fichier suivant
FreeBuffers:
Move.l DosBase,a6
Lea Finished_EasyT,a0
Bsr.w EasyRequest_Com
Move.l WorkingWnd,Wnd
Bsr.w IMessageLoop
Bsr.w CloseWindow_ ; Fin du traitement _des_ fichiers
Bsr.w CloseDownScreen_ ; On ferme l'interface
Bsr.w FreeFileNameBuffer ; Libérer le tampon
Move.l ppBase,a6
Move.l CrunchInfo,a0 ; Libérer la structure CrunchInfo
Jsr ppFreeCrunchInfo(a6)
ReplyMessage:
Move.l Msg,a1
Cmp.l #0,a1
Beq.s NF_RM_NoMsg
Move.l ExecBase,a6
Jsr ReplyMsg(a6) ; Renvoie l'AppMessage au système
Move.l #0,Msg
NF_RM_NoMsg:
NF_NextAppMessage:
Cmp.b #2,CP_QuitByte
Bne.w GetAppMessage
Rts
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* DESCRIPTION: *
* DataNotCrunched: *
* Teste si l'utilisateur veut compacter. Si oui, *
* effectue le compactage et sauve le fichier. *
* S'occupe intégralement du traitement des erreurs. *
* INPUT: *
* DataNotCrunched: *
* Working_CrunchUserResponse= 1 pour compacter *
* FileLength = Longueur du fichier *
* FileNameBuffer = APTR sur le nom de fichier *
* OUTPUT: *
* DataNotCrunched: *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
DataNotCrunched: ; Fichier non compacté
Cmp.b #1,Working_CrunchUserResponse; Veut-on le compacter ?
Beq.s DataNotCrunched_Ok ; Oui, on traite le fichier
Move.l #Working_NotCrunchedErrT,WTT_Text; GTTX_Text = Adresse du texte
Bsr.w SetWorkingGad5Attrs
Bra.w DNC_End ; Fichier suivant
DataNotCrunched_Ok:
Move.l ExecBase,a6
Move.l FileLength,d0
Move.l #$1,d1 ; PublicMem
Jsr AllocMem(a6) ; On alloue un tampon de la longueur
Move.l d0,FileBuffer ; du fichier
Bne.s DNC_AllocMem_Ok ; Allocation Ok, on continue
Move.l DosBase,a6
Lea DNC_NoMemErr_EasyT,a0
Bsr.w EasyRequest_Com ; Non, avertir
Bra.w DNC_End ; Pas de compact, Fichier suivant
DNC_AllocMem_Ok:
Move.l DosBase,a6
Move.l FileNameBuffer,d1
Move.l #1005,d2 ; Fichier existant
Jsr Open(a6) ; On Open() le fichier
Move.l d0,FileHandle
Bne.s DNC_Open_Ok ; Ouverture Ok
Lea OpenReadErr_EasyT,a0
Bsr.w EasyRequest_Com
Bra.w DNC_End1
DNC_Open_Ok: ; On continue
Move.l #Working_LoadingT,WTT_Text; GTTX_Text = Adresse du texte
Bsr.w SetWorkingGad5Attrs
Bsr.w GetWorkingMessage ; On vérifie si gadget appuyé.
Cmp.b #4,Working_UserResponse
Beq.w DNC_Skip1
Cmp.b #5,Working_UserResponse
Beq.w DNC_Stop1
Move.l DosBase,a6
Move.l FileHandle,d1
Move.l FileBuffer,d2 ; On remplit le tampon avec le
Move.l FileLength,d3 ; contenu du fichier qu'on Read()
Jsr Read(a6)
Move.l d0,d4
Move.l FileHandle,d1
Jsr Close(a6) ; On referme le fichier
Cmp.l FileLength,d4 ; Longueur égale ?
Beq.s DNC_Read_Ok ; Oui, on continue
Lea DNC_ReadErr_EasyT,a0
Bsr.w EasyRequest_Com
Bra.w DNC_End1
DNC_Read_Ok:
Bsr.w GetWorkingMessage ; On vérifie si gadget appuyé.
Cmp.b #4,Working_UserResponse
Beq.w DNC_Skip2
Cmp.b #5,Working_UserResponse
Beq.w DNC_Stop2
Move.l #Working_CrunchingT,WTT_Text; GTTX_Text = Adresse du texte
Bsr.w SetWorkingGad5Attrs
Move.l ppBase,a6
Move.l FileLength,d0 ; Length en d0
Move.l CrunchInfo,a0 ; CrunchInfo en a0
Move.l FileBuffer,a1 ; Buffer en a1
Jsr ppCrunchBuffer(a6) ; On compacte le tampon
Move.l d0,ppLength ; Longueur compacté ou code d'erreur
Cmp.l #-1,d0 ; Buffer OverFlow ?
Bne.s DNC_OverFlow_Ok ; Non, on continue
Move.l #Working_DNC_OverFlowT,WTT_Text; GTTX_Text = Adresse du texte
Bsr.w SetWorkingGad5Attrs
Bra.w DNC_End1
DNC_OverFlow_Ok:
Cmp.l #0,d0 ; Crunch Aborted ?
Bne.s DNC_Aborted_Ok ; Non, on continue
Move.l #Working_DNC_AbortedT,WTT_Text; GTTX_Text = Adresse du texte
Bsr.w SetWorkingGad5Attrs
Bra.w DNC_End1
DNC_Aborted_Ok:
Move.l GadtoolsBase,a6
Lea WorkingGadgets,a0
Move.l 8*4(a0),a0 ; Source Gadget
Move.l WorkingWnd,a1 ; Struct Window en a1
Suba.l a2,a2 ; Req = 0
Lea WriteNumberTags,a3 ; Tags en a3
Move.l ppLength,WNT_Number ; Longueur du fichier
Jsr GT_SetGadgetAttrsA(a6) ; Afficher longueur compacté
Bsr.w GetWorkingMessage ; On vérifie si gadget appuyé.
Cmp.b #4,Working_UserResponse
Beq.w DNC_Skip3
Cmp.b #5,Working_UserResponse
Beq.w DNC_Stop3
; Ouvrir le fichier en écriture
Bsr.w OpenSaveFile ; selon preferences
Move.l DosBase,a6
Cmp.l #0,FileHandle ; Ouverture réussie ?
Bne.s DNC_OpenSaveFile_Ok ; Oui, on continue
Lea OpenWriteErr_EasyT,a0
Bsr.w EasyRequest_Com ; Non, on avertit l'utilisateur
Bra.s DNC_End1 ; Libérer la mémoire et continuer
DNC_OpenSaveFile_Ok: ; Overture Ok, on continue
Move.l #Working_SavingT,WTT_Text; GTTX_Text = Adresse du texte
Bsr.w SetWorkingGad5Attrs
Move.l FileHandle,d0 ; FH en d0
Moveq #0,d1
Move.l ConfigBuffer0,a0
Move.b CP_Config_Efficiency(a0),d1;Efficiency en d1
Moveq #0,d2 ; Crypt = 0
Moveq #0,d3
Move.l ppBase,a6
Jsr ppWriteDataHeader(a6) ; On écrit l'entête 'PP20'
Tst.l d0 ; Ecriture à échoué ?
Bne.s DNC_DataHeader_Ok ; Non, on continue
Lea WriteErr_EasyT,a0
Bsr.w EasyRequest_Com ; Oui, on avertit l'utilisateur
Bra.s DNC_End2 ; Préparer à quitter la routine
DNC_DataHeader_Ok:
Move.l DosBase,a6
Move.l FileHandle,d1
Move.l FileBuffer,d2 ; On écrit le contenu du tampon
Move.l ppLength,d3 ; On Write() la longueur compact.
Jsr Write(a6)
Cmp.l ppLength,d0 ; Erreur d'écriture ?
Beq.s DNC_Write_Ok ; Non, on continue
Lea WriteErr_EasyT,a0
Bsr.w EasyRequest_Com ; Oui, avertir l'utilisateur
Bra.s DNC_End2 ; Préparer à quitter la routine
DNC_Write_Ok:
Move.l FileHandle,d1
Jsr Close(a6)
;!! Bra.s DNC_End1
DNC_End1:
Move.l ExecBase,a6
Move.l FileBuffer,a1 ; Libérer la mémoire du fichier
Move.l FileLength,d0
Jsr FreeMem(a6)
;!! Bra.s DNC_End
DNC_End:
Rts ; Compacatage terminé
DNC_End2:
Move.l DosBase,a6
Move.l FileHandle,d1 ; Fermer le fichier
Jsr Close(a6)
Bra.s DNC_End1 ; Terminer et quitter la routine
DNC_Skip_Com:
Move.l DosBase,a6
Move.l FileHandle,d1
Jsr Close(a6)
Rts
DNC_Stop1:
Bsr.s DNC_Skip_Com
Bra.s DNC_Stop2
DNC_Skip1:
Bsr.s DNC_Skip_Com
;!! Bra.s DNC_Skip2
DNC_Skip2:
DNC_Skip3:
Move.l #Working_SkipT,WTT_Text ; GTTX_Text = Adresse du texte
Bsr.w SetWorkingGad5Attrs
Bra.s DNC_End1 ; Traitement terminé
DNC_Stop2:
DNC_Stop3:
Move.l #Working_StopT,WTT_Text ; GTTX_Text = Adresse du texte
Bsr.w SetWorkingGad5Attrs
Move.l FileNumber,FileCount ; Dernier fichier traité
Subq.l #8,FileCount
Bra.s DNC_End1 ; Libérer la mémoire et terminer
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* DESCRIPTION: *
* DataCrunched: *
* Teste si l'utilisateur veut décompacter. Si oui, *
* effectue le décompactage et sauve le fichier. *
* S'occupe intégralement du traitement des erreurs *
* INPUT: *
* DataCrunched: *
* Working_CrunchUserResponse= 2 pour décompacter *
* FileNameBuffer = APTR sur le nom du fichier *
* OUTPUT: *
* DataCrunched: *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
DataCrunched: ; Fichier compacté
Cmp.b #2,Working_CrunchUserResponse; Veut-on le décompacter ?
Beq.s DataCrunched_Ok ; Oui, on continue
Move.l #Working_CrunchedErrT,WTT_Text; GTTX_Text = Adresse du texte
Bsr.w SetWorkingGad5Attrs
Bra.w DC_End
DataCrunched_Ok:
Move.l #Working_DC_LoadDecrT,WTT_Text; GTTX_Text = Adresse du texte
Bsr.w SetWorkingGad5Attrs
Bsr.w GetWorkingMessage ; On vérifie si gadget appuyé.
Cmp.b #4,Working_UserResponse
Beq.w DC_Skip1
Cmp.b #5,Working_UserResponse
Beq.w DC_Stop1
Move.l ppBase,a6
Moveq #0,d0
Move.l ConfigBuffer0,a0
Move.b CP_Config_Effect(a0),d0 ; Decr_Effect en d0
Move.l FileNameBuffer,a0 ; Buffer sur le nom du fichier
Move.l #$1,d1 ; MemType: Public
Lea Buffer_,a1 ; Adresse de la variable du tampon
Lea Len_,a2 ; Adresse de la variable de la longueur
Move.l #0,a3 ; Pass Requester: None
Jsr ppLoadData(a6) ; On décompacte le fichier
Tst.b d0 ; Erreur ?
Beq.w ppLoadData_Ok ; Non, on continue
Cmp.b #-1,d0
Beq.s ppLD_OpenErr
Cmp.b #-2,d0
Beq.s ppLD_ReadErr ; Oui, suivant le type
Cmp.b #-3,d0 ; d'erreur, on écrit
Beq.s ppLD_NoMemErr ; un message approprié
Cmp.b #-4,d0
Beq.s ppLD_CryptErr
Cmp.b #-5,d0
Beq.s ppLD_PassErr
Cmp.b #-6,d0
Beq.s ppLD_UnknownPP
Cmp.b #-7,d0
Beq.s ppLD_EmptyErr
ppLD_OpenErr:
Lea OpenReadErr_EasyT,a0
Bra.s ppLoadData_Err
ppLD_ReadErr:
Lea DC_ReadErr_EasyT,a0
Bra.s ppLoadData_Err
ppLD_NoMemErr:
Lea DC_NoMemErr_EasyT,a0
Bra.s ppLoadData_Err
ppLD_CryptErr:
Lea DC_CryptErr_EasyT,a0
Bra.s ppLoadData_Err
ppLD_PassErr:
Lea DC_PassErr_EasyT,a0
Bra.s ppLoadData_Err
ppLD_UnknownPP:
Lea DC_UnknownPPErr_EasyT,a0
Bra.s ppLoadData_Err
ppLD_EmptyErr:
Lea DC_EmptyErr_EasyT,a0
;!! Bra.s ppLoadData_Err
ppLoadData_Err:
Bsr.w EasyRequest_Com
Bra.w DC_End
ppLoadData_Ok: ; pas d'erreur, on continue
Move.l GadtoolsBase,a6
Lea WorkingGadgets,a0
Move.l 8*4(a0),a0 ; Source Gadget
Move.l WorkingWnd,a1 ; Struct Window en a1
Suba.l a2,a2 ; Req = 0
Lea WriteNumberTags,a3 ; Tags en a3
Move.l Len_,WNT_Number ; Longueur du fichier
Jsr GT_SetGadgetAttrsA(a6) ; Afficher longueur décompacté
Bsr.w GetWorkingMessage ; On vérifie si gadget appuyé.
Cmp.b #4,Working_UserResponse
Beq.w DC_Skip2
Cmp.b #5,Working_UserResponse
Beq.w DC_Stop2
Bsr.w OpenSaveFile ; Ouvrir le fichier pour sauver
Cmp.l #0,FileHandle ; Ouverture réussie ?
Bne.s DC_OpenSaveFile_Ok ; Oui, on continue
Lea OpenWriteErr_EasyT,a0
Bsr.w EasyRequest_Com ; Non, on avertit l'utilisateur
Bra.s DC_End1 ; Libérer la mémoire et continuer
DC_OpenSaveFile_Ok: ; Overture Ok, on continue
Move.l #Working_SavingT,WTT_Text; GTTX_Text = Adresse du texte
Bsr.w SetWorkingGad5Attrs
Move.l DosBase,a6
Move.l FileHandle,d1
Move.l Buffer_,d2
Move.l Len_,d3 ; On écrit le contenu du tampon
Jsr Write(a6) ; décompacté
Move.l d0,d4
Move.l FileHandle,d1
Jsr Close(a6) ; Fermer le fichier
Cmp.l Len_,d4 ; Ecriture Ok ?
Beq.s DC_Write_Ok ; Oui, continue
Lea WriteErr_EasyT,a0
Bsr.w EasyRequest_Com ; On avertit l'utilisateur
;!! Bra.s DC_End1 ; Libérer la mémoire et continuer
DC_Write_Ok:
DC_End1:
Move.l ExecBase,a6
Move.l Buffer_,a1 ; Adresse du buffer
Move.l Len_,d0 ; Longueur décomp
Jsr FreeMem(a6) ; Libérer tampon décomp
DC_End:
Rts
DC_Skip_Com:
Move.l #Working_StopT,WTT_Text ; GTTX_Text = Adresse du texte
Bsr.s SetWorkingGad5Attrs
Rts
DC_Stop_Com:
Bsr.s DC_Skip_Com
Move.l FileNumber,FileCount ; Dernier fichier traité
Subq.l #8,FileCount
Rts
DC_Skip1:
Bsr.s DC_Skip_Com
Bra.s DC_End ; Fichier suivant
DC_Stop1:
Bsr.s DC_Stop_Com
Bra.s DC_End ; Terminer
DC_Skip2:
Bsr.s DC_Skip_Com
Bra.s DC_End1 ; Traitement terminé
DC_Stop2:
Bsr.s DC_Stop_Com
Bra.s DC_End1 ; Libérer la mémoire et terminer
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* FUNCTION: *
* SetWorkingGad5Attrs: *
* Remplace les nombreux appel à SetGadgetsAttrsA pour *
* le Gadget 5 de l'interface Working. *
* INPUT: *
* SetWorkingGad5Attrs: *
* WriteTextTags->WTT_Text = APTR sur le texte *
* WorkingWnd = Structure Window *
* WorkingGadgets = Pointeur sur set de gadgets *
* OUTPUT: *
* SetWorkingGad5Attrs: *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
SetWorkingGad5Attrs:
Move.l GadtoolsBase,a6
Lea WorkingGadgets,a0
Move.l 5*4(a0),a0 ; Status Gadget
Lea WriteTextTags,a3 ; Tags en a3
Move.l WorkingWnd,a1 ; Struct Window en a1
Suba.l a2,a2 ; Req = 0
Jsr GT_SetGadgetAttrsA(a6) ; Afficher nom du fichier
Rts
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* DESCRIPTION: *
* FreeFileNameBuffer: *
* Remplace les nombreuses routines qui libère le *
* tampon FileNameBuffer *
* INPUT: *
* FreeFileNameBuffer: *
* FileNameBuffer = APTR sur le tampon *
* FileNameBufferLL= Longueur du tampon *
* OUTPUT: *
* FreeFileNameBuffer: *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
FreeFileNameBuffer:
Move.l ExecBase,a6
Move.l FileNameBuffer,a1 ; Adresse du tampon
Suba.l #4,a1
Move.l #FileNameBufferLL,d0 ; Longueur
Jsr FreeMem(a6)
Move.l #0,FileNameBuffer ; FileNameBuffer vide
Rts
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* DESCRIPTION: *
* InstallAppIcon: *
* Installe l'AppIcon dans le Wb *
* INPUT: *
* InstallAppIcon: *
* WorkbenchBase.l = *
* AppIconText.l = APTR sur le nom de l'AppIcon *
* AppMsgPort.l = Port message prévu pour l'Appicon *
* AppDiskObject.l = APTR sur un DiskObject pour AppIcon *
* OUTPUT: *
* InstallAppIcon: *
* AppIcon.l = AppIcon *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
InstallAppIcon:
Move.l WorkbenchBase,a6
Moveq #0,d0
Moveq #0,d1
Lea AppIconText,a0
Move.l AppMsgPort,a1
Move.l #0,a2
Move.l AppDiskobject,a3
Move.l #0,a4
Jsr AddAppIconA(a6)
Move.l d0,AppIcon
Rts
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* DESCRIPTION: *
* EvtlRemoveAppIcon: *
* Enlève l'AppIcon dans le Wb, si AppIcon n'est pas NULL *
* INPUT: *
* EvtlRemoveAppIcon: *
* WorkbenchBase.l = *
* AppIcon.l = APTR sur l'AppIcon ou NULL *
* OUTPUT: *
* EvtlRemoveAppIcon: *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
EvtlRemoveAppIcon:
Move.l AppIcon,a0
Cmp.l #0,a0
Beq.s EvtlRemoveAppiconF
Move.l WorkbenchBase,a6
Jsr RemoveAppIcon(a6) ; On enléve l'AppIcon
Move.l #0,AppIcon
EvtlRemoveAppiconF:
Rts
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* DESCRIPTION: *
* OpenSaveFile: *
* Ouvre le fichier de sauvegarde. Tient compte des *
* préférences de l'utilisateur. Copie éventuellement *
* l'icône du fichier. *
* INPUT: *
* OpenSaveFile: *
* Working_CrunchUserResponse *
* = 1 pour compacter *
* = 2 pour décompacter *
* FileNameBuffer = APTR sur le nom du fichier avec path *
* FileName = APTR sur le nom du fichier *
* OUTPUT: *
* OpenSaveFile: *
* FileHandle = Gestionnaire de fichier ou 0 *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
OpenSaveFile:
Move.l #0,FileHandle ; Si erreur, reste = à 0
Move.l ExecBase,a6
Move.l #FileNameBufferLL,d0 ; 256 Bytes
Move.l #$1,d1 ; PublicMem
Jsr AllocMem(a6) ; Allouer un tampon
Move.l d0,OSF_FileNameBuffer ; Buffer alloué
Beq.w OSF_End ; Non, on quitte
Addq.l #4,OSF_FileNameBuffer
Move.l ConfigBuffer0,a0
Tst.b CP_Config_UseAltPath(a0); Utiliser AltPath ?
Beq.s OSF_NoAltPath ; Non, on OverWrite le fichier
Bsr.w OSF_AddPart ; Alt Path + Nom
Tst.l d0 ; AddPart Ok ?
Beq.w OSF_End1 ; Non, pas d'ouverture de fichier
OSF_NoAltPath:
Move.l ConfigBuffer0,a0
Tst.b CP_Config_UseAltPath(a0); Utiliser AltPath ?
Bne.s OSF_NoCopyAll ; Oui, on continue
Bsr.w OSF_CopyAll ; Non, copier tout le nom de fichier
OSF_NoCopyAll:
Cmp.b #1,Working_CrunchUserResponse; Compactage ?
Bne.s OSF_NoEvtlAddpp ; Non, continuer
Move.l ConfigBuffer0,a0
Tst.b CP_Config_Add_pp(a0) ; Ajouter '.pp'
Bne.s OSF_Addpp ; Oui, continuer
Tst.b CP_Config_UseAltPath(a0)
Bne.s OSF_NoAddpp_UseAltPath
Bsr.w OSF_CopyAll
Move.b #2,d0 ; Pas d'opération Icon
Bra.s OSF_NoAddpp_UseAltPathF
OSF_NoAddpp_UseAltPath:
Bsr.w OSF_AddPart
Move.b #0,d0 ; Copier et ne pas effacer
OSF_NoAddpp_UseAltPathF:
Bra.s OSF_AddppF
OSF_Addpp:
Move.l ConfigBuffer0,a0
Tst.b CP_Config_UseAltPath(a0) ; Utiliser 'Alt Path'
Bne.s OSF_Addpp_UseAltPath ; Oui, continuer
Bsr.w OSF_CopyAll ; Copier tout le nom
Bsr.w OSF_DoAddpp
Move.l DosBase,a6
Move.l FileNameBuffer,d1 ; Fichier source
Jsr DeleteFile(a6) ; Effacer le fichier
Move.b #1,d0 ; Copier et effacer
Bra.s OSF_Addpp_UseAltPathF
OSF_Addpp_UseAltPath:
Bsr.w OSF_AddPart ; Copier 'AltPath' et merger FileName
Bsr.w OSF_DoAddpp
Move.b #0,d0 ; Copier et ne pas effacer
OSF_Addpp_UseAltPathF:
OSF_AddppF:
Bra.s OSF_NoEvtlRempp
OSF_NoEvtlAddpp:
Cmp.b #2,Working_CrunchUserResponse; Décompactage ?
Bne.s OSF_NoEvtlRempp
Move.l ConfigBuffer0,a0
Tst.b CP_Config_Rem_pp(a0)
Bne.s OSF_Rempp
Tst.b CP_Config_UseAltPath(a0)
Bne.s OSF_NoRempp_UseAltPath
Bsr.w OSF_CopyAll
Move.b #2,d0 ; Pas d'opération Icon
Bra.s OSF_NoRempp_UseAltPathF
OSF_NoRempp_UseAltPath:
Bsr.w OSF_AddPart
Move.b #0,d0 ; Copier et ne pas effacer
OSF_NoRempp_UseAltPathF:
Bra.s OSF_RemppF
OSF_Rempp:
Move.l ConfigBuffer0,a0
Tst.b CP_Config_UseAltPath(a0)
Bne.s OSF_Rempp_UseAltPath
Bsr.w OSF_CopyAll
Bsr.w OSF_DoRempp
Tst.b d0
Beq.s OSF_Rempp_NoUseAltPath_Nopp
Move.l DosBase,a6
Move.l FileNameBuffer,d1 ; Fichier source
Jsr DeleteFile(a6) ; Effacer le fichier
Move.b #1,d0 ; Copier et effacer
Bra.s OSF_Rempp_NoUseAltPath_NoppF
OSF_Rempp_NoUseAltPath_Nopp:
Move.b #2,d0 ; Pas d'opération Icon
OSF_Rempp_NoUseAltPath_NoppF:
Bra.s OSF_Rempp_UseAltPathF
OSF_Rempp_UseAltPath:
Bsr.w OSF_AddPart
Bsr.w OSF_DoRempp
; Bra.s OSF_Rempp_UseAltPath_NoppF
OSF_Rempp_UseAltPath_Nopp:
OSF_Rempp_UseAltPath_NoppF:
Move.b #0,d0 ; Copier et ne pas effacer
OSF_Rempp_UseAltPathF:
OSF_RemppF:
OSF_NoEvtlRempp:
Move.b d0,d4
Cmp.b #2,d4
Beq.s OSF_CopyIconF ; Pas d'opération Icon
Move.l IconBase,a6
Move.l FileNameBuffer,a0 ; Ancien nom
Jsr GetDiskObject(a6) ; Lire Icône
Move.l d0,d5 ; DiskObject
Beq.s OSF_CopyIconF ; Si erreur, fin de la copie
Cmp.b #0,d4 ; Effacer icône
Beq.s OSF_DelDiskObjectF ; Non, continuer
Move.l FileNameBuffer,a0 ; Ancien nom
Jsr DeleteDiskObject(a6) ; Effacer icône
OSF_DelDiskObjectF:
Move.l ConfigBuffer0,a0
Tst.b CP_Config_UseAltPath(a0); AltPath = 0
Beq.s OSF_PutDiskObject ; Oui, toujours copier icône
Tst.b CP_Config_CopyIcons(a0) ; L'utilisateur veut copier l'icône ?
Beq.s OSF_PutDiskObjectF ; Non, sauter la sauvegarde
OSF_PutDiskObject:
Move.l d5,a1 ;!! DiskObject
Move.l OSF_FileNameBuffer,a0 ; Nouveau nom
Jsr PutDiskObject(a6) ; Écrire icône
OSF_PutDiskObjectF:
Move.l d5,a0 ;!! DiskObject
Jsr FreeDiskObject(a6) ; Libérer la mémoire
OSF_CopyIconF:
Move.l DosBase,a6
Move.l OSF_FileNameBuffer,d1 ; Tampon
Move.l #1006,d2 ; Mode_NewFile
Jsr Open(a6) ; Routine d'ouverture du fichier
Move.l d0,FileHandle ; en écriture.
OSF_End1:
Move.l ExecBase,a6
Move.l OSF_FileNameBuffer,a1 ; Tampon
Suba.l #4,a1
Move.l #FileNameBufferLL,d0 ; Longueur
Jsr FreeMem(a6) ; Libérer le tampon
OSF_End:
Rts ; Return
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Ajoute le nom de fichier au Alt Path. * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
OSF_AddPart:
; Movem.l a6/d2-d3,-(sp)
Move.l ExecBase,a6
Move.l ConfigBuffer0,a0 ; Source en a0
Adda.l #CP_Config_AltPath,a0 ; ConfigBuffer->AltPath
Move.l OSF_FileNameBuffer,a1 ; Dest en a1
Move.l #FileNameBufferL,d0 ; Longueur à copier en d0
Jsr CopyMem(a6) ; Copier le Alt Path
Move.l DosBase,a6
Move.l OSF_FileNameBuffer,d1 ; Dir + destination
Move.l FileName,d2 ; Fichier
Move.l #FileNameBufferL,d3 ; Longueur à ne pas dépasser
Jsr AddPart(a6) ; Rassembler le dir et le fichier
; Movem.l (sp)+,a6/d2-d3
Rts
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copie l'entier du nom de fichier du 1er dans 2ème tampon. * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
OSF_CopyAll:
; Move.l a6,-(sp)
Move.l ExecBase,a6
Move.l FileNameBuffer,a0 ; Source en a0
Move.l OSF_FileNameBuffer,a1 ; Dest en a1
Move.l #FileNameBufferL,d0 ; Lomgueur à copier
Jsr CopyMem(a6) ; Copier l'ensemble du nom
; Move.l (sp)+,a6
Rts
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Ajouter .pp au nom de fichier. * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
OSF_DoAddpp:
Move.l OSF_FileNameBuffer,a0
Bsr.s OSF_findZero ; Avancer jusqu'à 0
Move.b #'.',(a0)+
Move.b #'p',(a0)+
Move.b #'p',(a0)+
Move.b #0,(a0) ; Ajouter '.pp',0
Rts
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Enlève .pp au nom de fichier. * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
OSF_DoRempp:
Move.l OSF_FileNameBuffer,a0
Bsr.s OSF_FindZero ; Anvacner jusqu'à 0
Cmp.b #'p',-(a0) ; fin = '.pp'
Bne.s OSF_NoRempp ; Non, retourner 0
Cmp.b #'p',-(a0)
Bne.s OSF_NoRempp
Cmp.b #'.',-(a0)
Bne.s OSF_NoRempp
Move.b #0,(a0) ; Oui, remplacer '.' par 0
Move.b #1,d0 ; Retourner 1
Bra.s OSF_DoRemppF
OSF_NoRempp:
Move.b #0,d0
OSF_DoRemppF:
Rts
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Avancer jusqu'à trouver le caractère 0. * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
OSF_FindZero:
Addq.l #1,a0
Tst.b (a0)
Bne.s OSF_FindZero
Rts
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* FUNCTION: *
* EasyRequest_Com: *
* Remplace les fréquents appel à *
* Intuition/EasyRequestArgs() avec des valeurs pas défaut *
* INPUT: *
* EasyRequest_Com: *
* a0.l = APTR sur le Text du Requester *
* OUTPUT: *
* EasyRequest_Com: *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
EasyRequest_Com:
Move.l IntuitionBase,a6
Lea Def_EasyStruct,a1 ; Structure par défaut
Move.l a0,12(a1) ; EasyStruct->ES_Text
Suba.l a2,a2 ; IDCMP_Ptr = 0
Suba.l a3,a3 ; ArgList = 0
Suba.l a0,a0 ; Window = Default
Jsr EasyRequestArgs(a6) ; Avertir
Rts
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* DESCRIPTION: *
* ConfigPanel: *
* S'occupe intégralement de la configuration du pgm *
* Sauve les résultats et traite les erreurs. *
* INPUT: *
* ConfigPanel: *
* OUTPUT: *
* ConfigPanel: *
* QuitByte: *
* = 0 = Continuer *
* = 2 = Quitter *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ConfigPanel:
Movem.l d2-d7/a2-a6,-(sp)
Move.l ExecBase,a6
Move.l #$10001,d1
Move.l #ConfigBufferL,d0 ; Allouer un tampon pour la config
Jsr AllocMem(a6)
Move.l d0,ConfigBuffer ; Buffer ok ?
Beq.w CP_NoPanelErr0 ; Non, quitter le ConfigPanel
Move.l ConfigBuffer0,a0 ; Copier un tampon dans l'autre
Move.l ConfigBuffer,a1 ; Dest
Move.l #ConfigBufferL,d0 ; Longueur
Jsr CopyMem(a6)
Move.l ConfigBuffer,a0 ; !!!!
Move.b #2,CP_Config_Version(a0); Version de AppPP (Release 1.1)
Move.b CP_Config_UseAltPath(a0),CGT_Check0; État du CHECKBOX 'Use Alt Path'
Move.b CP_Config_CopyIcons(a0),CGT_Check1; État du CheckBox 'Copy Icons'
Move.b CP_Config_Add_pp(a0),CGT_Check2; État du CheckBox 'Add #?.pp'
Move.b CP_Config_Rem_pp(a0),CGT_Check3; État du CheckBox 'Rem #?.pp'
Move.w CP_Config_Priority(a0),CGT_Slid0; Niveau du slider 'Priority'
Move.l CP_Config_AppIconX(a0),CGT_Int0; Integer 'X'
Move.l CP_Config_AppIconY(a0),CGT_Int1; Integer 'Y'
Move.b CP_Config_Efficiency(a0),CGT_Cycle0; Modifier la TagValue 'Efficiency'
Move.b CP_Config_Buffer(a0),CGT_Cycle1; Modifier la TagValue 'Buffer'
Move.b CP_Config_Effect(a0),CGT_Cycle2; Modifier la TagValue 'Effect'
Adda.l #CP_Config_AltPath,a0
Move.l a0,CGT_String0 ; TagValue du Text0 (APTR)
Move.b #3,GUI_ ; Interface du ConfigPanel
Bsr.w SetupScreen_
Tst.b d0
Bne.w CP_NoPanelErr1
Move.w #ConfigLeft,Left ; Dimensions de la fenêtre
Move.w #ConfigTop,Top
Move.w #ConfigWidth,Width
Move.w #ConfigHeight,Height
Bsr.w OpenWindow_ ; Ouverture de la fenêtre
Move.l Wnd,ConfigWnd
Tst.b d0
Bne.w CP_NoPanelErr1
Move.l #InverseBevelbox,Bevelbox_Taglist
Move.w #Config0_Top,BevelTop
Move.w #Config0_Left,BevelLeft
Move.w #Config0_Width,BevelWidth
Move.w #Config0_Height,BevelHeight
Bsr.w Render1 ; Dessin de la BevelBox
Move.l #InverseBevelbox,Bevelbox_Taglist
Move.w #Config1_Top,BevelTop
Move.w #Config1_Left,BevelLeft
Move.w #Config1_Width,BevelWidth
Move.w #Config1_Height,BevelHeight
Bsr.w Render1
Move.l #InverseBevelbox,Bevelbox_Taglist
Move.w #Config2_Top,BevelTop
Move.w #Config2_Left,BevelLeft
Move.w #Config2_Width,BevelWidth
Move.w #Config2_Height,BevelHeight
Bsr.w Render1
CP_WaitGadget:
Move.b #3,GUI_
Move.b #$ff,UserResponse
Move.l ConfigWnd,Wnd
Bsr.w WaitMessages ; Attendre pression d'un gadget
Move.l Gt_IMsg,-(sp) ; Sauver Message de GUI_ 3
Move.w Code,d1
Move.l ConfigBuffer,a0
Move.l IAdress,a1
Move.l ExecBase,a6
Move.b UserResponse,d0 ; Switch (UserResponse) ... Case ..
Cmp.b #1,d0 ; CHECKBOX 'Use Alt Path'
Beq.w CP_Act1
Cmp.b #2,d0 ; CYCLE 'Efficiency'
Beq.w CP_Act2
Cmp.b #3,d0 ; CYCLE 'Buffer'
Beq.w CP_Act3
Cmp.b #4,d0 ; CYCLE 'Effect'
Beq.w CP_Act4
Cmp.b #5,d0 ; BUTTOM 'Save'
Beq.w CP_Act5
Cmp.b #6,d0 ; BUTTON 'Use'
Beq.w CP_Act6
Cmp.b #7,d0 ; BUTTON 'Cancel'
Beq.w CP_Act7
Cmp.b #8,d0 ; BUTTON 'Quit'
Beq.w CP_Act8
Cmp.b #9,d0 ; BUTTON 'Get'
Beq.w CP_Act9
Cmp.b #10,d0 ; BUTTON 'About'
Beq.w CP_Act10
Cmp.b #11,d0 ; CHECKBOX 'Copy Icons'
Beq.w CP_Act11
Cmp.b #12,d0 ; CheckBox 'Add #?.pp'
Beq.w CP_Act12
Cmp.b #13,d0 ; CheckBox 'Rem #?.pp'
Beq.w CP_Act13
Cmp.b #14,d0 ; Slider 'Priority'
Beq.w CP_Act14
Cmp.b #15,d0 ; Integer 'X'
Beq.w CP_Act15
Cmp.b #16,d0 ; Integer 'Y'
Beq.w CP_Act16
Cmp.b #17,d0 ; String 'Alt Path'
Beq.w CP_Act17
Bra.w CP_ActF ; Possibilité non-prévue
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Utilise-t-on le chemin alternatif? Ecrit dans le tampon. * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CP_Act1: ; CHECKBOX 'Use Alt Path'
Eor.b #%1,CP_Config_UseAltPath(a0); Inverser TRUE/FALSE dans Config
Eor.b #%1,CGT_Check0 ; TRUE/FASLE du TagValue du CHECKBOX 'Use Alt Path'
Move.b #0,CP_QuitByte ; Continuer ConfigPanel
Bra.w CP_ActF ; Break;
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Choix de l'efficacité. On écrit le n° au bon endroit dans le buffer *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CP_Act2: ; CYCLE Efficiency
Move.b d1,CP_Config_Efficiency(a0); Code dans ConfigBuffer
Move.b #0,CP_QuitByte ; Continuer ConfigPanel
Bra.w CP_ActF ; Break;
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Choix du tampon. On écrit le n° au bon endroit dans le buffer. * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CP_Act3: ; CYCLE Buffer
Move.b d1,CP_Config_Buffer(a0) ; Code dans ConfigBuffer
Move.b #0,CP_QuitByte ; Continuer ConfigPanel
Bra.w CP_ActF ; Break;
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Choix de l'effet. On écrit le n° au bon endroit dans le buffer * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CP_Act4: ; CYCLE Effect
Move.b d1,CP_Config_Effect(a0) ; Code dans ConfigBuffer
Move.b #0,CP_QuitByte ; Continuer ConfigPanel
Bra.w CP_ActF ; Break;
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Sauve les préférences dans Env et Envarc. * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CP_Act5: ; BUTTON Save
; Copier le 1er tampon dans le 2ème
;!! Move.l ConfigBuffer,a0 ; Source
Move.l ConfigBuffer0,a1 ; Destination
Move.l #ConfigBufferL,d0 ; Longueur à copier
Jsr CopyMem(a6)
Move.l DosBase,a6
Move.l #ConfigFileName0,d1
Move.l #1006,d2
Jsr Open(a6) ; Ouvrir le fichier config dans Env:
Move.l d0,ConfigFileName0_FH ; Ouverture Ok ?
Bne.s CP_Act5_OpenRamConfig_Ok; Oui, on continue
Lea SaveEnvConfigErr_EasyT,a0
Bsr.w EasyRequest_Com
Bra.s CP_Act5_OpenRamConfig_Err; et on ne sauve pas le fichier.
CP_Act5_OpenRamConfig_Ok:
Move.l d0,d1 ;!!
Move.l ConfigBuffer0,d2
Move.l #ConfigBufferL,d3 ; Ecrire le tampon
Jsr Write(a6)
Move.l d0,d4 ; Nb de bytes écrits en d4
Move.l ConfigFileName0_FH,d1
Jsr Close(a6) ; Fermer le fichier
Cmp.l #ConfigBufferL,d4 ; Ecriture Ok ?
Beq.s CP_Act5_WriteRamConfig_Ok; Oui, on continue
Move.l #ConfigFileName0,d1 ; Non, Effacer le fichier
Jsr DeleteFile(a6)
Lea SaveEnvConfigErr_EasyT,a0
Bsr.w EasyRequest_Com
CP_Act5_WriteRamConfig_Ok:
CP_Act5_OpenRamConfig_Err:
Move.l DosBase,a6
Move.l #1006,d2
Move.l #ConfigFileName1,d1 ; Ouvrir le fichier Config dans EnvArc:
Jsr Open(a6)
Move.l d0,ConfigFileName0_FH ; Ouverture Ok ?
Bne.s CP_Act5_OpenDiskConfig_Ok; Oui, on continue
Lea SaveEnvarcConfigErr_EasyT,a0
Bsr.w EasyRequest_Com
Bra.s CP_Act5_OpenDiskConfig_Err
CP_Act5_OpenDiskConfig_Ok:
Move.l d0,d1 ;!!
Move.l ConfigBuffer0,d2
Move.l #ConfigBufferL,d3
Jsr Write(a6) ; Ecrire le tampon dans le fichier
Move.l d0,d4 ; Nb de bytes écrits en d4
Move.l ConfigFileName0_FH,d1 ; Fermer le fichier
Jsr Close(a6)
Cmp.l #ConfigBufferL,d4 ; Ecriture Ok ?
Beq.s CP_Act5_WriteDiskConfig_Ok; Oui, on continue
Move.l #ConfigFileName1,d1 ; Non, effacer le fichier
Jsr DeleteFile(a6)
Lea SaveEnvarcConfigErr_EasyT,a0
Bsr.w EasyRequest_Com
CP_Act5_WriteDiskConfig_Ok:
CP_Act5_OpenDiskConfig_Err:
Move.b #1,CP_QuitByte ; Continuer ConfigPanel
Bra.w CP_ActF ; Break
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Sauve les préferences dans un tampon. (pas dans un fichier) * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CP_Act6: ; BUTTON Use
; Copier le 1er tampon dans le 2ème
;!! Move.l ConfigBuffer,a0 ; Source
Move.l ConfigBuffer0,a1 ; Destination
Move.l #ConfigBufferL,d0 ; Longueur à copier
Jsr CopyMem(a6)
Move.b #1,CP_QuitByte ; Continuer ConfigPanel
Bra.w CP_ActF ; break
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Ferme l'interface Config sans tenir compte des changements. * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CP_Act7: ; BUTTON Cancel
Move.b #1,CP_QuitByte ; Continuer ConfigPanel
Bra.w CP_ActF ; break
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Termine le programme. * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CP_Act8: ; BUTTON Quit
Move.b #2,CP_QuitByte ; Continuer ConfigPanel
Bra.w CP_ActF ; break
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Execute la requête de fichier pour le chemin AltPath. * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CP_Act9: ; BUTTON Get
Lea AslName,a1
Moveq #36,d0
Move.l ExecBase,a6
Jsr OpenLibrary(a6) ; Ouvrir la librairie Asl
Move.l d0,AslBase
Bne.s CP9_AslOk ; Ouverture a réussi
Lea AslLibraryErr_EasyT,a0 ; Erreur, avertir
Bsr.w EasyRequest_Com
Bra.w CP_NoAsl
CP9_Aslok:
Move.l d0,a6 ;!!
Moveq #0,d0 ; Type = File Requester
Lea Config_AslPTags,a1
Jsr AllocAslRequest(a6) ; Alloue la structure File Request
Move.l d0,AslRequestStruct
Beq.w CP_NoRequest ; Structure non-disponible
Move.l d0,a0 ;!! Request en a0
Lea Config_AslPTags,a1
Jsr AslRequest(a6) ; Affiche la requête
Tst.l d0 ; Résultat ( 0L = (Cancel|Fail) )
Beq.s CP_CancelRequester
; Utiliser les résultats
Move.l AslRequestStruct,a0
Move.l rf_Dir(a0),a1 ; adresse du nom du répertoire
Move.l ConfigBuffer,a0
Adda.l #CP_Config_AltPath,a0 ; ConfigBuffer->AltPath
Move.l #255-1,d0
CP_Act9_CopyString:
Subq.l #1,d0 ; Nb de bytes copiés =? 254
Beq.s CP_Act9_CopyStringF ; Oui, limiter à 254
Move.b (a1)+,(a0)+ ; Copier la chaîne du nom de fichier
Tst.b (a1) ; jusqu'à 0
Bne.s CP_Act9_CopyString ; Chaîne pas finie, continer à copier
CP_Act9_CopyStringF:
Move.b #0,(a0) ; Terminer la chaîne
Move.l GadtoolsBase,a6
Move.l #ConfigGadgets+64,a0 ; 17 ème gadget (String)
Move.l (a0),a0
Move.l ConfigWnd,a1
Move.l #0,a2
Lea WriteStringTags,a3 ; Afficher le nouveau String
Move.l a3,a4 ; Pointeur sur les Tags
Addq.l #4,a4 ; Pointeur sur la donnée du tag
Move.l ConfigBuffer,a5 ; Pointeur sur la config
Adda.l #CP_Config_AltPath,a5 ; Pointeur sur le nom du fichier
Move.l a5,(a4) ; Adresse du nom dans la donnée du Tag
Jsr GT_SetGadgetAttrsA(a6)
CP_CancelRequester: ; Cancel ou Fail
Move.l AslBase,a6
Move.l AslRequestStruct,a0 ; Libère la structure
Jsr FreeAslRequest(a6)
CP_NoRequest: ; Pas de structure Request
Move.l ExecBase,a6
Move.l AslBase,a1
Jsr CloseLibrary(a6)
CP_NoAsl: ; Ouverture de Asl a échoué
Move.b #0,CP_QuitByte ; Continuer ConfigPanel
Bra.w CP_ActF ; Break;
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Ouvre l'interface About. * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CP_Act10: ; BUTTON About
Move.b #4,GUI_
Move.w #AboutLeft,Left
Move.w #AboutTop,Top
Move.w #AboutWidth,Width
Move.w #AboutHeight,Height
Bsr.w OpenWindow_
Move.l Wnd,AboutWnd
Tst.b d0
Bne.s CP_Act10_OpenWindowErr
Move.l #NormalBevelbox,Bevelbox_Taglist
Move.w #About0_Top,BevelTop
Move.w #About0_Left,BevelLeft
Move.w #About0_Width,BevelWidth
Move.w #About0_Height,BevelHeight
Bsr.w Render1
Move.b #$ff,UserResponse
; Move.l AboutWnd,Wnd
Bsr.w WaitMessages
; Move.b UserResponse,About_UserResponse
; Move.l AboutWnd,Wnd
Bsr.w GM_RepIMessage
Bsr.w IMessageLoop
CP_Act10_OpenWindowErr:
Bsr.w CloseWindow_
Move.b #0,CP_QuitByte ; Continuer ConfigPanel
Bra.w CP_ActF ; Break;
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copie-t-on l'icône ? * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CP_Act11: ; CheckBox 'Copy Icons'
Eor.b #%1,CP_Config_CopyIcons(a0); Inverser TRUE/FALSE dans Config
Eor.b #%1,CGT_Check1 ; TRUE/FASLE du TagValue du CHECKBOX 'Copy Icons'
Move.b #0,CP_QuitByte ; Continuer ConfigPanel
Bra.w CP_ActF ; Break;
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Ajoute-t-on #?.pp ? * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CP_Act12: ; CheckBox 'Add #?.pp'
Eor.b #%1,CP_Config_Add_pp(a0); Inverser TRUE/FALSE dans Config
Eor.b #%1,CGT_Check2 ; TRUE/FASLE du TagValue du CHECKBOX 'Add #?.pp'
Move.b #0,CP_QuitByte ; Continuer ConfigPanel
Bra.w CP_ActF ; Break;
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Enlève-t-on #?.pp ? * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CP_Act13: ; CheckBox 'Rem #?.pp'
Eor.b #%1,CP_Config_Rem_pp(a0); Inverser TRUE/FALSE dans Config
Eor.b #%1,CGT_Check2 ; TRUE/FASLE du TagValue du CHECKBOX 'Rem #?.pp'
Move.b #0,CP_QuitByte ; Continuer ConfigPanel
Bra.s CP_ActF ; Break;
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Choix de la Priorité. * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CP_Act14: ; Slider 'Priority'
Move.w d1,CP_Config_Priority(a0); Sauver dans ConfigBuffer
Move.w d1,d0 ;!! Nouvelle priorité
Move.l ExecBase,a6
Move.l OwnTask,a1 ; Task
Jsr SetTaskPri(a6) ; Modifier priorité
Move.b #0,CP_QuitByte ; Continuer ConfigPanel
Bra.s CP_ActF ; Break;
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Choix de la position X de l'icône. * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CP_Act15: ; Integer 'X'
Move.l SpecialInfo(a1),a1 ; IAdress->SpecialInfo
Move.l LongInt(a1),d0 ; SpecialInfo->LongInt
Move.l d0,CP_Config_AppIconX(a0); Sauver dans ConfigBuffer
Move.b #0,CP_QuitByte ; Continuer ConfigPanel
Bra.s CP_ActF ; Break;
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Choix de la position Y de l'icône. * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CP_Act16: ; Integer 'Y'
Move.l SpecialInfo(a1),a1 ; IAdress->SpecialInfo
Move.l LongInt(a1),d0 ; SpecialInfo->LongInt
Move.l d0,CP_Config_AppIconY(a0); Sauver dans ConfigBuffer
Move.b #0,CP_QuitByte ; Continuer ConfigPanel
Bra.s CP_ActF ; Break;
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Choix du Alt Path. * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CP_Act17: ; String 'Alt Path'
Move.l SpecialInfo(a1),a1 ; IAdress->SpecialInfo
Move.l Buffer(a1),a1 ; SpecialInfo->Buffer
Adda.l #CP_Config_AltPath,a0 ; ConfigBuffer->AltPath
Move.l #255-1,d0
CP_Act17_CopyString:
Subq.l #1,d0 ; Nb de bytes copiés =? 254
Beq.s CP_Act17_CopyStringF ; Oui, limiter à 254
Move.b (a1)+,(a0)+ ; Copier la chaîne du nom de fichier
Tst.b (a1) ; jusqu'à 0
Bne.s CP_Act17_CopyString ; Chaîne pas finie, continer à copier
CP_Act17_CopyStringF:
Move.b #0,(a0) ; Terminer la chaîne
Move.b #0,CP_QuitByte ; Continuer ConfigPanel
;!! Bra.s CP_ActF ; Break;
CP_ActF:
Move.b #3,GUI_
Move.l (sp)+,Gt_IMsg ; Recharger message de GUI_ 3
Move.l ConfigWnd,Wnd
Bsr.w GM_RepIMessage
Tst.b CP_QuitByte
Bne.s CP_ClosePanel
Bra.w CP_WaitGadget ; Attendre la pression d'un autre gadget
CP_ClosePanel:
Move.l ConfigWnd,Wnd
Bsr.w IMessageLoop
CP_NoPanelErr1:
Move.l ConfigWnd,Wnd
Bsr.w CloseWindow_
Bsr.w CloseDownScreen_
Bsr.s CP_FreeConfigBuffer
CP_NoPanelErr0:
Movem.l (sp)+,d2-d7/a2-a6
Rts
CP_FreeConfigBuffer:
Move.l ExecBase,a6
Move.l ConfigBuffer,a1
Move.l #ConfigBufferL,d0
Jsr FreeMem(a6)
Rts
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* DESCRIPTION: *
* GetWorkingMessage: *
* Vérifie si un gadget de l'interface Working à été *
* appyué. *
* INPUT: *
* OUTPUT: *
* UserResponse = Numéro du gadget appuyé + 1 ou $ff *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
GetWorkingMessage:
Move.l WorkingWnd,Wnd
Move.b #$ff,UserResponse
Bsr.s GetMessage
Move.b UserResponse,Working_UserResponse
Rts
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* DESCRIPTION: *
* WaitMessages: *
* Attend que l'utilisateur appuye un gadget et renvoie *
* le code correspondant. *
* GetMessage: *
* Renvoie le gadget appuyé, mais n'attend pas. *
* Retourne immédiatement. *
* IMessageLoop: *
* Va chercher tous les messages sur le port et renvoie *
* la réponse immédiatement. *
* GM_RepIMessage: *
* Renvoie le message au port de la fenêtre *
* INPUT: *
* WaitMessages: *
* Wnd = WindowPtr *
* UserResponse = $ff *
* GetMessage: *
* Wnd = WindowPtr *
* UserResponse = $ff *
* IMessageLoop: *
* GM_RepIMessage: *
* Gt_IMsg.l = Message reçu avec Gt_GetIMsg *
* OUTPUT: *
* WaitMessages: *
* UserResponse.b = Numéro du gadget + 1 *
* IMsg_Code = IMsg->Code *
* Gt_IMsg.l = Gadtools IMsg *
* GetMessage: *
* UserResponse.b = Numéro du gadget + 1 ou $ff *
* Code = Éventuel IMsg_Code *
* Gt_IMsg.l = Éventuel Gadtools IMsg *
* IMessageLoop: *
* GM_RepIMessage: *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
WaitMessages: ; Attendre la reponse de l'utilisateur
Move.b #0,UserResponse
Move.l Wnd,a0
Move.l 86(a0),a0
Move.l ExecBase,a6
Jsr WaitPort(a6) ; On Attend un message sur le port
Move.b #0,UserResponse ; Wait: UserResponse = 0
GetMessage:
Move.l Wnd,a0
Move.l 86(a0),a0 ; L'attente est finie.
Move.l GadtoolsBase,a6
Jsr GT_GetIMsg(a6) ; On prélève le message
Move.l d0,Gt_IMsg ; Message
Bne.s TestIMessage_F ; Réponse OK ? --> sauver réponse
; Réponse pas OK.
Cmp.b #$ff,UserResponse ; Message attendu ?
Bne.s WaitMessages ; Oui, on retourne attendre.
Beq.s WM_RefreshF ; Non, on sort.
TestIMessage_F: ; Le message est OK.
Move.l d0,a0 ; Structure IMsg
Move.l IMsg_Class(a0),d1 ; IMsg->Class
Move.w IMsg_Code(a0),Code ; IMsg->Code
Move.l IMsg_IAdress(a0),a0 ; IMsg->IAdress
Move.l a0,IAdress
Moveq #0,d0
Move.w GadgetID(a0),d0 ; IMsg->IAdress->GadgetID
Addq.b #1,d0 ; Numéro du gadget + 1
Move.b d0,UserResponse
Btst #2,d1 ; IDCMP_RefreshWindow ?
Beq.s WM_RefreshF ; Non, on continue
Move.l GadToolsBase,a6 ; Oui, rafraîchir la fenêtre
Move.l Wnd,a0
Jsr GT_BeginRefresh(a6)
Move.l Wnd,a0
Moveq #1,d0 ; Complete = TRUE
Jsr GT_EndRefresh(a6)
WM_RefreshF:
Rts
GM_RepIMessage:
Move.l GadToolsBase,a6
Move.l Gt_IMsg,a1
Jsr GT_ReplyIMsg(a6) ; On renvoie le message au port.
Move.l #0,Gt_IMsg
GM_IReturn:
Rts ; On retourne
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Prend les messages en boucle. * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
IMessageLoop: ; L'utilisateur a déjà répondu.
Move.l GadToolsBase,a6 ; On boucle jusqu'à plus de Msg
Move.l Wnd,a0
MOve.l 86(a0),a3 ; Window->UserPort
IML_Loop:
Move.l a3,a0
Jsr Gt_GetIMsg(a6)
Move.l d0,a1 ; Lorsqu'il y plus de message,
Beq.s IML_Return ; on sort de la boucle.
Jsr Gt_ReplyIMsg(a6)
Bra.s IML_Loop
IML_Return:
Rts
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* DESCRIPTION: *
* CloseAll: *
* Ferme tout ce qui est ouvert au démarrage *
* INPUT: *
* OUTPUT: *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CloseAll:
Move.l ConfigBuffer0,a1
Cmp.l #0,a1
Beq.s CA_NoFreeMem
Move.l ExecBase,a6
Move.l #ConfigBufferL,d0
Jsr FreeMem(a6)
CA_NoFreeMem:
Bsr.w EvtlRemoveAppIcon
Move.l AppMsgPort,a0
Cmpa.l #0,a0
Beq.s CA_NoDeletemsgport
Move.l ExecBase,a6
Jsr DeleteMsgPort(a6) ; On ferme le message-port
CA_NoDeletemsgport:
Move.l AppDiskObject,a0 ; Libération de la structure
Cmp.l #0,a0
Beq.s CA_NoAppDiskobject
Move.l IconBase,a6
Jsr FreeDiskObject(a6) ; DiskObject
CA_NoAppDiskobject:
Move.l DiskObject,a0 ; Libération de la structure
Cmp.l #0,a0
Beq.s CA_NoDiskobject
Move.l IconBase,a6
Jsr FreeDiskObject(a6) ; DiskObject
CA_NoDiskobject:
Move.l ExecBase,a6
Move.l GraphicsBase,a1
Cmp.l #0,a1
Beq.s CA_NoGraphicsbase
Jsr CloseLibrary(a6)
Move.l #0,GraphicsBase
CA_NoGraphicsbase:
Move.l ppBase,a1
Cmp.l #0,a1
Beq.s CA_NoPpbase
Jsr CloseLibrary(a6)
Move.l #0,ppBase
CA_NoPpbase:
Move.l IntuitionBase,a1 ; On ferme toutes les
Cmp.l #0,a1
Beq.s CA_NoIntuitionbase
Jsr CloseLibrary(a6) ; libraries.
Move.l #0,IntuitionBase
CA_NoIntuitionbase:
Move.l GadtoolsBase,a1
Cmp.l #0,a1
Beq.s CA_NoGadtoolsbase
Jsr CloseLibrary(a6)
Move.l #0,GadtoolsBase
CA_NoGadtoolsbase:
Move.l DosBase,a1
Cmp.l #0,a1
Beq.s CA_NoDosbase
Jsr CloseLibrary(a6)
Move.l #0,DosBase
CA_NoDosbase:
Move.l WorkbenchBase,a1
Cmp.l #0,a1
Beq.s CA_NoWorkbenchbase
Jsr CloseLibrary(a6)
Move.l #0,WorkbenchBase
CA_NoWorkbenchbase:
Move.l IconBase,a1
Cmp.l #0,a1
Beq.s CA_NoIconbase
Jsr CloseLibrary(a6)
Move.l #0,IconBase
CA_NoIconbase:
Move.l WbMsg,a1 ; Rendre le Startup-Message
Cmp.l #0,a1
Beq.s CA_NoWbmsg
Jsr ReplyMsg(a6)
Move.l #0,WBMsg
CA_NoWbMsg:
Rts ; Fin du programme...
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * *
* * * *
* * * * * * * * * * * * * * * * * * * * * *
* * * CODE GENERE PAR GADTOOLSBOX 2.0 * * *
* * * * * * * * * * * * * * * * * * * * * *
* * * *
* * * *
* * Il a été largement modifé afin de pouvoir supporter * *
* * plusieurs interfaces (question d'optimisation) et pour * *
* * enlever un bug (rien de grave, uniquement de la cosmétique) * *
* * * *
* * Malgré que GadtoolsBox souffre encore de pas mal de défauts * *
* * de jeunesse et que le code source généré souffre de beaucoup * *
* * de manques que j'ai du combler (GadtoolsBox génère * *
* * l'interface au sens pûrement graphique du terme, mais ne * *
* * gère pas les gadgets), il m'a permit de comprendre le * *
* * fonctionnement de la Gadtools.library qui est le seul moyen * *
* * de programmer convenablement une interface graphique, à part * *
* * MUI, qui est vraiment le top (Même sur Macintosh, il n'y a * *
* * rien de comparable!) * *
* * * *
* * De toute façon, un grand Merci à Jan van den Baard, l'auteur * *
* * de GadtoolsBox, pous son immense service rendu à la communauté * *
* * Amiga. Grâce à lui, donner une interface graphique à un * *
* * n'est, sur Amiga, plus un luxe, ni une perte de temps... * *
* * * *
* * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* DESCRIPTION: *
* SetupScreen_: *
* Fait un Intuition.library/LockPubScreen() afin *
* d'ouvrir la fenêtre sans risque et un *
* Gadtools.library/GetVisualInfo() *
* OpenWindow_: *
* Ouvre la fenêtre en fonction des paramètres d'entrée *
* Crée les gadgets et d'une manière Font-Adaptive *
* CloseWindow_: *
* Referme la fenêtre et libère les gadgets *
* CloseDownSreen_: *
* Fait un Intuition.library/UnlockPubscreen() *
* INPUT: *
* SetupScreen_: *
* OpenWindow_: *
* Width.w = Largeur de la fenêtre *
* Height.w = Hauteur de la fenêtre *
* Top.w = Distance du haut *
* Left.w = Distance de gauche *
* GUI_.b = Numéro d'interface *
* OffX.w = Offset de gauche (généralement nul) *
* OffY.w = Offset du haut (généralement nul) *
* CloseWindow_: *
* Wnd.l = Pointeur sur Window *
* GList.l = Pointeur sur la liste de gadget *
* CloseDownScreen_: *
* VisualInfo.l = *
* Scr.l = Pointeur l'écran locké *
* OUTPUT: *
* SetupScreen_: *
* VisualInfo.l = *
* Scr.l = Pointeur sur l'écran locké *
* OpenWindow_: *
* Wnd.l = Pointeur sur Window *
* GList.l = NULL *
* CloseWindow_: *
* Wnd.l = 0 *
* GList.l = 0 *
* CloseDownScreen_: *
* Scr.l = 0 *
* VisualInfo.l = 0 *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ComputeY:
move.l d1,-(sp)
Move.w FontY,d1
mulu d1,d0
addq.w #6,d0
Divu #12,d0
move.l (sp)+,d1
rts
ComputeX:
Move.l d1,-(sp)
Move.w FontX,d1
ComputeItX:
mulu d1,d0
addq.w #4,d0
Divu #8,d0
move.l (sp)+,d1
rts
ComputeFont:
Move.l a2,-(sp)
Move.l GraphicsBase,a1
Move.l DefaultFont(a1),a1
Move.l #Attr,a0
Move.l a0,Font
Move.w tf_XSize(a1),FontX
Move.w tf_YSize(a1),FontY
Move.l tf_Message__ln_Name(a1),ta_Name(a0) ; Remplace LN_NAME ; move.l LN_NAME(a1),ta_Name(a0)
Move.w tf_YSize(a1),ta_YSize(a0)
Move.l GraphicsBase,a1
Move.l DefaultFont(a1),a1
Move.l Scr,a0
move.b sc_WBorLeft(a0),d0
ext.w d0
move.w d0,OffX
Moveq #0,d0
Move.l sc_RastPort+rp_Font(a0),a2 ; Screen->RastPort Font
Move.w tf_YSize(a2),d0
addq.w #1,d0
add.b sc_WBorTop(a0),d0
move.w d0,OffY
tst.w d2
beq.s ComputeFont_F
tst.w d3
beq.s ComputeFont_F
move.w d2,d0
Bsr.w ComputeX
add.w OffX,d0
add.b sc_WBorRight(a0),d0
cmp.w sc_Width(a0),d0
bhi.s ComputeFont_UseTopaz
move.w d3,d0
Bsr.w ComputeY
add.w OffY,d0
add.b sc_WBorBottom(a0),d0
cmp.w sc_Height(a0),d0
bhi.s ComputeFont_UseTopaz
ComputeFont_F:
Move.l (sp)+,a2
rts
ComputeFont_UseTopaz:
move.l Font,a0
move.l #TopazName,ta_Name(a0)
move.w #8,FontY
move.w #8,FontX
move.w #8,ta_YSize(a0)
Bra.s ComputeFont_F
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* LockPubScreen et alloue VisualInfo. * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
SetupScreen_:
movem.l d2/d3/a2/a6,-(sp)
move.l IntuitionBase,a6
move.l PubScreenName,a0
jsr LockPubScreen(a6) ; Empêche la fermeture de l'écran
move.l d0,Scr
tst.l d0
beq.s SError ; Screen Error
moveq #0,d2
moveq #0,d3
Bsr.w ComputeFont
move.l Scr,a0
move.l GadToolsBase,a6
lea.l TD,a1
jsr GetVisualInfoA(a6) ; Sert à remplir NewGadget
move.l d0,VisualInfo
tst.l d0
beq.s VError ; Visual Error
move.b #0,d0 ; 0 = ok, on continue
SetupScreen__Done:
movem.l (sp)+,d2/d3/a2/a6
rts
SError:
VError:
move.b #1,d0 ; Screen Error : 1 en d0
bra.s SetupScreen__Done
; move.b #2,d0 ; Visual Error : 2 en d0
; bra.s SetupScreen__Done
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* UnlockPubScreen et libère la structure VisualInfo * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CloseDownScreen_:
movem.l a6,-(sp)
move.l IntuitionBase,a6
move.l getImage,a0
cmpa.l #0,a0
beq.s NoObj
jsr DisposeObject(a6)
NoObj:
move.l getClass,a0
cmpa.l #0,a0
beq.s NoCls
jsr FreeClass(a6)
NoCls:
move.l GadToolsBase,a6
move.l VisualInfo,a0
cmpa.l #0,a0
beq.s NoVisualInfo
jsr FreeVisualInfo(a6)
move.l #0,VisualInfo
NoVisualInfo:
move.l IntuitionBase,a6
suba.l a0,a0
move.l Scr,a1
cmpa.l #0,a1
beq.s NoScreen
jsr UnlockPubScreen(a6)
move.l #0,Scr
NoScreen:
movem.l (sp)+,a6
rts
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Affiche les textes en boucle. * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Render0:
movem.l d2-d5/a2/a6,-(sp)
move.l Wnd,a0
move.w Width,d2
move.w Height,d3
Bsr.w ComputeFont
moveq #0,d3
; Cmp.b #1,GUI_
; Beq.s Render0GUI_1
; Cmp.b #2,GUI_
; Beq.s Render0GUI_2
; Cmp.b #3,GUI_
; Beq.s Render0GUI_3
; Cmp.b #4,GUI_
; Beq.s Render0GUI_4
; Render0GUI_1:
; Lea.l CrunchText0,a2
; Bra.s Render0GUI_F
; Render0GUI_2:
; Lea.l WorkingText0,a2
; Bra.s Render0GUI_F
; Render0GUI_3:
; Lea.l ConfigText0,a2
; Bra.s Render0GUI_F
; Render0GUI_4:
Lea.l AboutText0,a2
;!! Bra.s Render0GUI_F
; Render0GUI_F:
CrunchTLoop:
move.l ExecBase,a6
lea.l BufIText,a1
move.l a2,a0
move.l d3,d0
mulu #it_SIZEOF,d0
add.l d0,a0
moveq #it_SIZEOF,d0
jsr CopyMem(a6)
lea.l BufIText,a0
move.l IntuitionBase,a6
move.l Font,it_ITextFont(a0)
jsr IntuiTextLength(a6)
asr.l #1,d0
move.l d0,-(sp)
lea.l BufIText,a0
move.w it_LeftEdge(a0),d0
Bsr.w ComputeX
add.w OffX,d0
ext.l d0
sub.l (sp)+,d0
move.w d0,it_LeftEdge(a0)
move.w it_TopEdge(a0),d0
Bsr.w ComputeY
add.w OffY,d0
move.l Font,a1
move.w ta_YSize(a1),d1
asr.w #1,d1
sub.w d1,d0
move.w d0,it_TopEdge(a0)
move.l a0,a1
move.l Wnd,a0
move.l wd_RPort(a0),a0
moveq #0,d0
moveq #0,d1
jsr PrintIText(a6)
addq.l #1,d3
; Cmp.b #1,GUI_
; Beq.s CrunchTLoopGUI_1
; Cmp.b #2,GUI_
; Beq.s CrunchTLoopGUI_2
; Cmp.b #3,GUI_
; Beq.s CrunchTLoopGUI_3
; Cmp.b #4,GUI_
; Beq.s CrunchTLoopGUI_4
; CrunchTLoopGUI_1:
; Cmp.w #Crunch_TNUM,d3
; Bmi CrunchTLoop
; Bra.s CrunchTLoopGUI_F
; CrunchTLoopGUI_2:
; Cmp.w #Working_TNUM,d3
; Bmi CrunchTLoop
; Bra.s CrunchTLoopGUI_F
; CrunchTLoopGUI_3:
; Cmp.w #Config_TNUM,d3
; Bmi CrunchTLoop
; Bra.s CrunchTLoopGUI_F
; CrunchTLoopGUI_4:
Cmp.w #About_TNUM,d3
Bmi CrunchTLoop
;!! Bra.s CrunchTLoopGUI_F
CrunchTLoopGUI_F:
movem.l (sp)+,d2-d5/a2/a6
rts
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* FUNCTION: *
* Render1: *
* Dessine une Bevel Box dans la fenêtre en s'adaptant *
* au fontes à la manière GadtoolsBox *
* INPUT: *
* Render1: *
* Wnd.l = Pointeur sur Window *
* Width.w = Dimension avant calculation *
* Height.w = Dimension avant calculation *
* VisualInfo.l = Pointeur sur stucture VisualInfo *
* Bevelbox_TagList.l=Pointeur sur une TagList *
* BevelTop.w = Bevelbox Top avant calculation *
* BevelLeft.w = Bevelbox Left avant calculation *
* BevelWidth.w = Bevelbox Width avant calculation *
* BevelHeight.w = Bevelbox Height avant calculation *
* OUTPUT: *
* Render1: *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Render1:
Movem.l d2-d3/a6,-(sp)
move.l Wnd,a0
move.w Width,d2
move.w Height,d3
jsr ComputeFont
Move.l VisualInfo,NormalBevelbox+4
Move.l VisualInfo,InverseBevelbox+4
Moveq #0,d0
Move.w BevelTop,d0 ; Top en d0
Bsr.w ComputeY
Add.w OffY,d0 ; Ajouter Offset
Move.l d0,d1 ; Top + Offset en d1
Move.w BevelWidth,d0 ; Width en d0
Bsr.w ComputeX
Move.l d0,d2 ; Top + Offset en d2
Move.w BevelHeight,d0 ; Height en d0
Bsr.w ComputeY
Move.l d0,d3 ; Top + Offset en d3
Move.w BevelLeft,d0 ; Left en d0
Bsr.w ComputeX
Add.w OffX,d0 ; Left + Offset en d0
Move.l GadToolsBase,a6
Move.l Wnd,a0
Move.l wd_RPort(a0),a0 ; RastPort en a0
Move.l Bevelbox_Taglist,a1 ; TagList en a1
Jsr DrawBevelBoxA(a6)
Movem.l (sp)+,d2-d3/a6
Rts
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Ouvre la fenêtre et crée les gadgets. * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
OpenWindow_:
movem.l d2-d4/a2-a4/a6,-(sp)
Move.l #0,Wnd ;
move.l Scr,a0
moveq #0,d3
moveq #0,d2
move.w Width,d2
move.w Height,d3
Bsr.w ComputeFont
move.l Scr,a0
move.l d2,d0
Bsr.w ComputeX
move.l d0,d4
move.w Left,d2
add.w d2,d0
add.w OffX,d0
Add.b sc_WBorRight(a0),d0
cmp.w sc_Width(a0),d0
bls.s CrunchWindowOk
move.w sc_Width(a0),d0
sub.w d4,d0
move.w d0,d2
CrunchWindowOk:
move.l d3,d0
Bsr.w ComputeY
move.l d0,d4
move.w Top,d3
add.w d3,d0
add.w OffY,d0
Add.b sc_WBorBottom(a0),d0
cmp.w sc_Height(a0),d0
bls.s CrunchHeightOk
move.w sc_Height(a0),d0
sub.w d4,d0
move.w d0,d3
CrunchHeightOk:
Move.l GadToolsBase,a6
; Cmp.b #1,GUI_
; Beq.s CrunchHeightOkGUI_1 ; Mettre les bons Tags en a4
; Cmp.b #2,GUI_
; Beq.s CrunchHeightOkGUI_2
Cmp.b #3,GUI_
Beq.s CrunchHeightOkGUI_3
Cmp.b #4,GUI_
Beq.s CrunchHeightOkGUI_4
; CrunchHeightOkGUI_1:
; Lea.l CrunchGTags,a4
; Lea.l CrunchGList,a0
; Jsr CreateContext(a6) ; ContextData en d0
; Move.l d0,a3
; Tst.l d0
; Beq.w CrunchCError ; Erreur de ContextData
; Movem.l d2-d3,-(sp)
; Moveq #0,d3 ; Nb de gadgets crées = 0
; Lea CrunchGTags,a4
; Bra.s CrunchHeightOkGUI_F
CrunchHeightOkGUI_2:
Lea.l WorkingGTags,a4
Lea.l WorkingGList,a0
Jsr CreateContext(a6) ; ContextData en d0
Move.l d0,a3
Tst.l d0
Beq.w CrunchCError ; Erreur de ContextData
Movem.l d2-d3,-(sp)
Moveq #0,d3 ; Nombre de gadgets crées = 0
Lea WorkingGTags,a4
Bra.s CrunchHeightOkGUI_F
CrunchHeightOkGUI_3:
Lea.l ConfigGTags,a4
Lea.l ConfigGList,a0
Jsr CreateContext(a6) ; ContextData en d0
Move.l d0,a3
Tst.l d0
Beq.w CrunchCError ; Erreur de ContextData
Movem.l d2-d3,-(sp)
Moveq #0,d3 ; Nombre de gadgets crées = 0
Lea ConfigGTags,a4
Bra.s CrunchHeightOkGUI_F
CrunchHeightOkGUI_4:
Lea.l AboutGTags,a4
Lea.l AboutGList,a0
Jsr CreateContext(a6) ; ContextData en d0
Move.l d0,a3
Tst.l d0
Beq.w CrunchCError ; Erreur de ContextData
Movem.l d2-d3,-(sp)
Moveq #0,d3 ; Nombre de gadgets crées = 0
Lea AboutGTags,a4
;!! Bra.s CrunchHeightOkGUI_F
CrunchHeightOkGUI_F:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* GadgetLoop: Crée les gadgets en boucle. * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CrunchGL: ; Gadget Loop
move.l ExecBase,a6
; Cmp.b #1,GUI_
; Beq.s CrunchGl0GUI_1
; Cmp.b #2,GUI_
; Beq.s CrunchGl0GUI_2
Cmp.b #3,GUI_
Beq.s CrunchGl0GUI_3
Cmp.b #4,GUI_
Beq.s CrunchGl0GUI_4
; CrunchGl0GUI_1:
; Lea.l CrunchNGads,a0
; Bra.s CrunchGl0GUI_F
CrunchGl0GUI_2:
Lea.l WorkingNGads,a0 ; Structure NewGadget en a0
Bra.s CrunchGl0GUI_F
CrunchGl0GUI_3:
Lea.l ConfigNGads,a0
Bra.s CrunchGl0GUI_F
CrunchGl0GUI_4:
Lea.l AboutNGads,a0
;!! Bra.s CrunchGl0GUI_F
CrunchGl0GUI_F:
move.l d3,d0 ; Nombre de gadget affichés
mulu #gng_SIZEOF,d0 ; à copier = Taille gadget * Size
add.l d0,a0 ; Adresse source en a0
lea.l BufNewGad,a1 ; Adresse dest en a1
moveq #gng_SIZEOF,d0 ; Nombre de bytes à copier
jsr CopyMem(a6) ; Copier le gadget dans le tampon
lea.l BufNewGad,a0
move.l VisualInfo,gng_VisualInfo(a0); VisualInfo doit être initialisé
move.l Font,gng_TextAttr(a0) ; TextAttr doit ête initialisé
move.w gng_LeftEdge(a0),d0
Bsr.w ComputeX
add.w OffX,d0
move.w d0,gng_LeftEdge(a0)
move.w gng_TopEdge(a0),d0
Bsr.w ComputeY
add.w OffY,d0
move.w d0,gng_TopEdge(a0)
move.w gng_Width(a0),d0
Bsr.w ComputeX
move.w d0,gng_Width(a0)
move.w gng_Height(a0),d0
Bsr.w ComputeY
move.w d0,gng_Height(a0)
move.l GadToolsBase,a6
; Cmp.b #1,GUI_
; Beq.s CrunchGl1GUI_1
; Cmp.b #2,GUI_
; Beq.s CrunchGl1GUI_2
Cmp.b #3,GUI_
Beq.s CrunchGl1GUI_3
Cmp.b #4,GUI_
Beq.s CrunchGl1GUI_4
; CrunchGl1GUI_1:
; Lea.l CrunchGTypes,a0
; Bra.s CrunchGl1GUI_F
CrunchGl1GUI_2:
Lea.l WorkingGTypes,a0 ; GadgetType en a0
Bra.s CrunchGl1GUI_F
CrunchGl1GUI_3:
Lea.l ConfigGTypes,a0
Bra.s CrunchGl1GUI_F
CrunchGl1GUI_4:
Lea.l AboutGTypes,a0
;!! Bra.s CrunchGl1GUI_F
CrunchGl1GUI_F:
moveq #0,d0
move.l d3,d1 ; Nombre de gadget crés en d1
asl.l #1,d1 ; Multiplier par 2
add.l d1,a0 ; GadgetType suivant (.w)
move.w (a0),d0 ; Kind en d0
move.l a3,a0 ; Context ou Previous en a0
lea.l BufNewGad,a1 ; Gadget copié en a1 (NewGad)
move.l a4,a2 ; Taglist en a2
jsr CreateGadgetA(a6) ; Créer le gadget
tst.l d0 ; Création ok ?
bne.s CrunchCreateOK ; Oui, continue
movem.l (sp)+,d2-d3
Bra.w CrunchCError ; Non, on se branche à l'erreur
CrunchCreateOK:
move.l d0,a3 ; Gadget crée devient le précédent
move.l d3,d0 ; Nombre de gadget crés en d0
asl.l #2,d0 ; Mulitplier le nb par 4
; Cmp.b #1,GUI_
; Beq.s CrunchCreateOkGUI_1
; Cmp.b #2,GUI_
; Beq.s CrunchCreateOkGUI_2
Cmp.b #3,GUI_
Beq.s CrunchCreateOkGUI_3
Cmp.b #4,GUI_
Beq.s CrunchCreateOkGUI_4
; CrunchCreateOkGUI_1:
; Lea.l CrunchGadgets,a0
; Bra.s CrunchCreateOkGUI_F
CrunchCreateOkGUI_2:
Lea.l WorkingGadgets,a0 ; GadgetType en a0
Bra.s CrunchCreateOkGUI_F
CrunchCreateOkGUI_3:
Lea.l ConfigGadgets,a0
Bra.s CrunchCreateOkGUI_F
CrunchCreateOkGUI_4:
Lea.l AboutGadgets,a0
;!! Bra.s CrunchCreateOkGUI_F
CrunchCreateOkGUI_F:
add.l d0,a0 ; Avancer du nb de gadget * 4
move.l a3,(a0) ; Sauver le gadget à la bonne place
CrunchTagLoop:
tst.l (a4) ; Taglist contient TAG_DONE ?
beq.s CrunchDN ; Oui, on continue
addq.w #8,a4 ; Non, on boucle jusqu'à obtenir
bra.s CrunchTagLoop ; TAG_DONE
CrunchDN:
addq.w #4,a4 ; Taglist = TAG_DONE + 4
addq.w #1,d3 ; Nb de gadget crées + 1
; Cmp.b #1,GUI_
; Beq.s CrunchDn0GUI_1
Cmp.b #2,GUI_
Beq.s CrunchDn0GUI_2
Cmp.b #3,GUI_
Beq.w CrunchDn0GUI_3
Cmp.b #4,GUI_
Beq.w CrunchDn0GUI_4
CrunchDn0GUI_Com0:
Move.l Scr,a0
Move.w Width,d0
Bsr.w ComputeX
Add.w OffX,d0
Add.b sc_WBorRight(a0),d0
Rts
CrunchDn0GUI_Com1:
Move.w Height,d0
Bsr.w ComputeY
Add.w OffY,d0
Add.b sc_WBorBottom(a0),d0
Rts
; CrunchDn0GUI_1:
; Cmp.w #Crunch_CNT,d3 ; Est-ce égal au nombre de gadget total
; Bmi CrunchGL ; Inférieur, on crée le gadget suivant
; Movem.l (sp)+,d2-d3
; Ext.l d2
; Ext.l d3
; Move.l CrunchGList,CrunchWG+4
; Move.l d2,CrunchL+4
; Move.l d3,CrunchT+4
; Bsr.s CrunchDn0GUI_Com0
; Move.l d0,CrunchW+4
; Bsr.s CrunchDn0GUI_Com1
; Move.l d0,CrunchH+4
; Lea.l CrunchWindowTags,a1
; Bra.s CrunchDn0GUI_F2
CrunchDn0GUI_2:
Cmp.w #Working_CNT,d3
Bmi CrunchGL
Movem.l (sp)+,d2-d3
Ext.l d2
Ext.l d3
Move.l WorkingGlist,WorkingWG+4
Move.l d2,WorkingL+4
Move.l d3,WorkingT+4
Bsr.s CrunchDn0GUI_Com0
Move.l d0,WorkingW+4
Bsr.s CrunchDn0GUI_Com1
Move.l d0,WorkingH+4
Lea.l WorkingWindowTags,a1
Bra.w CrunchDn0GUI_F2
CrunchDn0GUI_3:
Cmp.w #Config_CNT,d3
Bmi CrunchGL
Movem.l (sp)+,d2-d3
Ext.l d2
Ext.l d3
Move.l ConfigGlist,ConfigWG+4
Move.l d2,ConfigL+4
Move.l d3,ConfigT+4
Bsr.w CrunchDn0GUI_Com0
Move.l d0,ConfigW+4
Bsr.w CrunchDn0GUI_Com1
Move.l d0,ConfigH+4
Lea.l ConfigWindowTags,a1
Bra.s CrunchDn0GUI_F2
CrunchDn0GUI_4:
Cmp.w #About_CNT,d3
Bmi CrunchGL
Movem.l (sp)+,d2-d3
Ext.l d2
Ext.l d3
Move.l AboutGList,AboutWG+4
Move.l d2,AboutL+4
Move.l d3,AboutT+4
Bsr.w CrunchDn0GUI_Com0
Move.l d0,AboutW+4
Bsr.w CrunchDn0GUI_Com1
Move.l d0,AboutH+4
Lea.l AboutWindowTags,a1
Bra.w CrunchDn0GUI_F2
CrunchDn0GUI_F1:
CrunchDn0GUI_F2:
move.l IntuitionBase,a6
suba.l a0,a0
jsr OpenWindowTagList(a6)
move.l d0,Wnd
tst.l d0
beq.s CrunchWError
move.l GadToolsBase,a6
move.l Wnd,a0
suba.l a1,a1
jsr GT_RefreshWindow(a6)
; Cmp.b #1,GUI_ ; Si pas de texte, se brancher à F2
; Beq.s CrunchDn5GUI_F1
Cmp.b #2,GUI_
Beq.s CrunchDn5GUI_F2
Cmp.b #3,GUI_
Beq.s CrunchDn5GUI_F2
; Cmp.b #4,GUI_
;!! Beq.s CrunchDn5GUI_F1
CrunchDn5GUI_F1:
Bsr.w Render0
CrunchDn5GUI_F2:
move.b #0,d0
CrunchDone:
movem.l (sp)+,d2-d4/a2-a4/a6
rts
CrunchCError:
CrunchGError:
CrunchWError:
move.b #1,d0
bra.s CrunchDone
; move.b #2,d0
; bra.s CrunchDone
;
; move.b #4,d0
; bra.s CrunchDone
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Ferme la fenêtre et libère les gadgets * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CloseWindow_:
movem.l a2/a6,-(sp)
move.l IntuitionBase,a6
move.l Wnd,a0
cmpa.l #0,a0
beq.s CrunchNWnd
jsr CloseWindow(a6)
move.l #0,Wnd
CrunchNWnd:
Move.l GadtoolsBase,a6
; Cmp.b #1,GUI_
; Beq.s CrunchNWndGUI1
; Cmp.b #2,GUI_
; Beq.s CrunchNWndGUI2
Cmp.b #3,GUI_
Beq.s CrunchNWndGUI3
Cmp.b #4,GUI_
Beq.s CrunchNWndGUI4
; CrunchNWndGUI1:
; Move.l CrunchGList,a0
; Cmpa.l #0,a0
; Beq.s CrunchNGads
; Jsr FreeGadgets(a6)
; Move.l #0,CrunchGList
; Bra.s CrunchNWndGUI_F
CrunchNWndGUI2:
Move.l WorkingGList,a0
Cmpa.l #0,a0
Beq.s CrunchNGads
Jsr FreeGadgets(a6)
Move.l #0,WorkingGList
Bra.s CrunchNWndGUI_F
CrunchNWndGUI3:
Move.l ConfigGList,a0
Cmpa.l #0,a0
Beq.s CrunchNGads
Jsr FreeGadgets(a6)
Move.l #0,ConfigGList
Bra.s CrunchNWndGUI_F
CrunchNWndGUI4:
Move.l AboutGList,a0
Cmpa.l #0,a0
Beq.s CrunchNGads
Jsr FreeGadgets(a6)
Move.l #0,AboutGList
;!! Bra.s CrunchNWndGUI_F
CrunchNWndGUI_F:
CrunchNGads:
movem.l (sp)+,a2/a6
rts
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Textes, TagLists, GadgetTypes, etc... * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
IconName: dc.b 'icon.library',0
WorkbenchName: dc.b 'workbench.library',0
DosName: dc.b 'dos.library',0
GadtoolsName: dc.b 'gadtools.library',0
IntuitionName: dc.b 'intuition.library',0
ppName: dc.b 'powerpacker.library',0
GraphicsName: dc.b 'graphics.library',0
AslName: dc.b 'asl.library',0
WorkingWTitle: dc.b ' AppPP Working Window ',0
ConfigWTitle: DC.B ' AppPP Config Window',0
Config_AslPTagsWndText: dc.b ' AppPP File Requester Window',0
AboutWTitle: DC.B ' AppPP About Window',0
Def_EasyStruct_Title: dc.b ' AppPP Request',0
ProgramName:
AppIconText: dc.b 'AppPP',0
ConfigFileName0: dc.b 'Env:AppPP.Prefs',0
ConfigFileName1: dc.b 'Envarc:AppPP.Prefs',0
Working_CrunchText: DC.B 'Crunch',0
Working_DecrunchText: DC.B 'Decrunch',0
Working_NothingText: DC.B 'Do Nothing',0
Working_SkipText: DC.B 'Skip File',0
Working_StopText: DC.B 'Stop All !',0
Working_StatusText: DC.B 'Status',0
Working_NameText: DC.B 'Name ',0
Working_LengthText: DC.B 'Source',0
Working_DestText: DC.B 'Dest ',0
Config_AltPathString: DC.B 'Ram Disk:',0
Config_AltPathText: dc.b 'Alt Path',0
Config_UseAltPathText: DC.B 'Use Alt Path',0
Config_EffText: DC.B 'Efficiency',0
Config_BufText: DC.B 'Buffer Size',0
Config_DecrEffText: DC.B 'Decrunch Eff',0
Config_EffLab0: DC.B 'Fast',0
Config_EffLab1: DC.B 'Mediocre',0
Config_EffLab3: DC.B 'Very '
Config_EffLab2: DC.B 'Good',0
Config_EffLab4: DC.B 'Best',0
Config_BufLab0: DC.B 'Small',0
Config_BufLab1: DC.B 'Medium',0
Config_BufLab2: DC.B 'Large',0
Config_DecrEffLab0: DC.B 'Color 0',0
Config_DecrEffLab1: DC.B 'Color 1',0
Config_DecrEffLab2: DC.B 'Pointer',0
Config_DecrEffLab3: DC.B 'Scroll',0
Config_DecrEffLab4: DC.B '« None »',0
Config_SaveText: DC.B 'Save',0
Config_UseText: DC.B 'Use',0
Config_CancelText: DC.B 'Cancel',0
Config_QuitText: DC.B 'Quit',0
Config_GetText: DC.B 'Get',0
Config_AboutText: DC.B 'About',0
Config_AppIconXText: DC.B 'AppIcon X',0
Config_AppIconYText: DC.B 'Y',0
Config_CopyIconsText: DC.B 'Copy Icons',0
Config_Add_ppText: DC.B 'Add #?.pp',0
Config_Rem_ppText: DC.B 'Rem #?.pp',0
Config_AslPTagsDirText: dc.b 'Ram Disk:',0
Config_PriorityText: DC.B 'Priority',0
Config_PriorityFormat: dc.b '%2ld',0
About_InterText: DC.B 'Interesting !',0
About_IText0: DC.B '- AppPP v1.1 -',0
About_IText1: DC.B 'By BURNAND Patrick',0
About_IText2: DC.B 'A Program to Power(De)Pack',0
About_IText3: DC.B 'for the Great WB 2.04+',0
About_IText4: DC.B 'Please read the doc !',0
About_IText5: DC.B 'Techno is a developement Tool !',0
SaveEnvConfigErr_EasyT: dc.b " Cannot save",10
dc.b "Configuration",10
dc.b " to Env:",0
SaveEnvarcConfigErr_EasyT:dc.b " Cannot save",10
dc.b 'Configuration',10
dc.b ' to Envarc:',0
NF_LockErr_EasyT: dc.b "Can't Lock() file.",0
NF_ExamineErr_EasyT: dc.b "Can't Examine() file.",0
OpenReadErr_EasyT: dc.b "Can't Open()",10
dc.b "source file",0
OpenWriteErr_EasyT: dc.b "Can't Open()",10
dc.b " dest file.",0
DC_EmptyErr_EasyT:
NF_ReadErr_EasyT: dc.b " File is empty or",10
dc.b "smaller than 4 bytes.",10
dc.b ' Not (De)Crunchable.',0
DNC_ReadErr_EasyT: dc.b "Error while Reading",10
dc.b "file. Can't crunch.",0
DC_ReadErr_EasyT: dc.b " Error while Reading",10
dc.b "file. Can't decrunch.",0
DNC_NoMemErr_EasyT: dc.b "Can't AllocMem()",10
dc.b "to crunch File.",0
DC_NoMemErr_EasyT: dc.b "Can't AllocMem()",10
dc.b "to decrunch File.",0
DC_UnknownPPErr_EasyT: dc.b " Unknown Powerpacker",10
dc.b "Format. Can't decrunch.",0
DC_CryptErr_EasyT: dc.b " File is Crypted. Use",10
dc.b "Powerpacker to decrunch",0
DC_PassErr_EasyT: dc.b "Wrong PassWord.",10
dc.b "Can't decrunch.",0
WriteErr_EasyT: dc.b "Write() Error.",10
dc.b " Can't save.",0
Finished_EasyT: dc.b "Work finished.",0
AslLibraryErr_EasyT: dc.b " Can't access",10
dc.b "Asl.library v36+",0
LC_OldVersion_EasyT: dc.b "AppPP v1.0 Config File loaded !",10
dc.b " Please configure now the new",10
dc.b " items of the Config Panel.",0
LC_FutureVersion_EasyT: dc.b "AppPP future version Config File",10
dc.b "loaded ! All the items of AppPP",10
dc.b "v1.1 are recognized. Other items",10
dc.b " will be kept unmodified.",0
Def_EasyStruct_GadText: dc.b 'Ok',0
Working_WaitingT: DC.B 'Waiting',0
Working_ScanningT: dc.b 'Scanning ',0
Working_LoadingT: dc.b "Loading ",0
Working_CrunchingT: dc.b 'Crunching ',0
Working_DC_LoadDecrT: dc.b "Loading & Decrunching",0
Working_SavingT: dc.b 'Saving',0
WBName: dc.b 'Workbench',0
TopazName: dc.b 'topaz.font',0
Working_DirErrT: dc.b "Skipping directory ...",0
Working_SkipT: dc.b '** Skipping File.',0
Working_StopT: dc.b '** Aborting All !',0
Working_NotCrunchedErrT:dc.b "File is not Crunched.",0
Working_CrunchedErrT: dc.b "File is already Crunched.",0
Working_DNC_OverFlowT: dc.b "Buffer Overflow",10,0
Working_DNC_AbortedT: dc.b "Crunching Aborted.",0
FileName_StrLength: dc.b 0
UserResponse: dc.b 0
Working_CrunchUserResponse:dc.b 0
Working_UserResponse: dc.b 0
;Config_UserResponse: dc.b 0
;About_UserResponse: dc.b 0
GUI_: dc.b 0
CP_QuitByte: dc.b 0
OSF_DelIconByte: dc.b 0
Remplissage: dc.b 0 ; Pur obtenir une adresse paire
WorkingGTypes:
DC.W BUTTON_KIND
DC.W BUTTON_KIND
DC.W BUTTON_KIND
DC.W BUTTON_KIND
DC.W BUTTON_KIND
DC.W TEXT_KIND
DC.W TEXT_KIND
DC.W NUMBER_KIND
DC.W NUMBER_KIND
ConfigGTypes:
DC.W CHECKBOX_KIND
DC.W CYCLE_KIND
DC.W CYCLE_KIND
DC.W CYCLE_KIND
DC.W BUTTON_KIND
DC.W BUTTON_KIND
DC.W BUTTON_KIND
DC.W BUTTON_KIND
DC.W BUTTON_KIND
DC.W BUTTON_KIND
DC.W CHECKBOX_KIND
DC.W CHECKBOX_KIND
DC.W CHECKBOX_KIND
DC.W SLIDER_KIND
DC.W INTEGER_KIND
DC.W INTEGER_KIND
DC.W STRING_KIND
AboutGTypes:
DC.W BUTTON_KIND
WorkingNGads:
DC.W 12,9,109,19
DC.L Working_CrunchText,0
DC.W GD_Working_Crunch
DC.L PLACETEXT_IN,0,0
DC.W 124,9,113,19
DC.L Working_DecrunchText,0
DC.W GD_Working_Decrunch
DC.L PLACETEXT_IN,0,0
DC.W 240,9,109,19
DC.L Working_NothingText,0
DC.W GD_Working_Nothing
DC.L PLACETEXT_IN,0,0
DC.W 20,39,157,21
DC.L Working_SkipText,0
DC.W GD_Working_Skip
DC.L PLACETEXT_IN,0,0
DC.W 184,39,157,21
DC.L Working_StopText,0
DC.W GD_Working_Stop
DC.L PLACETEXT_IN,0,0
DC.W 80,93,261,21
DC.L Working_StatusText,0
DC.W GD_Working_Status
DC.L PLACETEXT_LEFT,0,0
DC.W 80,67,261,21
DC.L Working_NameText,0
DC.W GD_Working_Name
DC.L PLACETEXT_LEFT,0,0
DC.W 80,119,97,21
DC.L Working_LengthText,0
DC.W GD_Working_Length
DC.L PLACETEXT_LEFT,0,0
DC.W 244,119,97,21
DC.L Working_DestText,0
DC.W GD_Working_Dest
DC.L PLACETEXT_LEFT,0,0
ConfigNGads:
DC.W 268,33,26,11
DC.L Config_UseAltPathText,0
DC.W GD_Config_UseAltPath
DC.L PLACETEXT_LEFT!NG_HIGHLABEL,0,0
DC.W 125,153,169,19
DC.L Config_EffText,0
DC.W GD_Config_Eff
DC.L PLACETEXT_LEFT,0,0
DC.W 125,178,169,19
DC.L Config_BufText,0
DC.W GD_Config_Buf
DC.L PLACETEXT_LEFT,0,0
DC.W 125,203,169,19
DC.L Config_DecrEffText,0
DC.W GD_Config_DecrEff
DC.L PLACETEXT_LEFT,0,0
DC.W 4,235,57,19
DC.L Config_SaveText,0
DC.W GD_Config_Save
DC.L PLACETEXT_IN,0,0
DC.W 64,235,57,19
DC.L Config_UseText,0
DC.W GD_Config_Use
DC.L PLACETEXT_IN,0,0
DC.W 124,235,57,19
DC.L Config_CancelText,0
DC.W GD_Config_Cancel
DC.L PLACETEXT_IN,0,0
DC.W 184,235,57,19
DC.L Config_QuitText,0
DC.W GD_Config_Quit
DC.L PLACETEXT_IN,0,0
DC.W 261,55,33,18
DC.L Config_GetText,0
DC.W GD_Config_Get
DC.L PLACETEXT_IN,0,0
DC.W 244,235,57,19
DC.L Config_AboutText,0
DC.W GD_Config_About
DC.L PLACETEXT_IN,0,0
DC.W 268,13,26,11
DC.L Config_CopyIconsText,0
DC.W GD_Config_CopyIcons
DC.L PLACETEXT_LEFT,0,0
DC.W 96,13,26,11
DC.L Config_Add_ppText,0
DC.W GD_Config_Add_pp
DC.L PLACETEXT_LEFT,0,0
DC.W 96,33,26,11
DC.L Config_Rem_ppText,0
DC.W GD_Config_Rem_pp
DC.L PLACETEXT_LEFT,0,0
DC.W 125,118,141,15
DC.L Config_PriorityText,0
DC.W GD_Config_Priority
DC.L PLACETEXT_LEFT,0,0
DC.W 125,92,65,18
DC.L Config_AppIconXText,0
DC.W GD_Config_AppIconX
DC.L PLACETEXT_LEFT,0,0
DC.W 229,92,65,18
DC.L Config_AppIconYText,0
DC.W GD_Config_AppIconY
DC.L PLACETEXT_LEFT,0,0
DC.W 96,55,161,18
DC.L Config_AltPathText,0
DC.W GD_Config_AltPath
DC.L PLACETEXT_LEFT,0,0
AboutNGads:
DC.W 85,167,181,23
DC.L About_InterText,0
DC.W GD_About_Inter
DC.L PLACETEXT_IN,0,0
PubScreenName: dc.l WBName
WorkingWindowTags:
WorkingL:
DC.L WA_Left,0
WorkingT:
DC.L WA_Top,0
WorkingW:
DC.L WA_Width,0
WorkingH:
DC.L WA_Height,0
DC.L WA_IDCMP,BUTTONIDCMP!IDCMP_REFRESHWINDOW
DC.L WA_Flags,WFLG_DRAGBAR!WFLG_DEPTHGADGET!WFLG_SMART_REFRESH!Wflg_Activate
WorkingWG:
DC.L WA_Gadgets,0
DC.L WA_Title,WorkingWTitle
DC.L WA_AutoAdjust,1
DC.L TAG_DONE
ConfigWindowTags:
ConfigL:
DC.L WA_Left,0
ConfigT:
DC.L WA_Top,0
ConfigW:
DC.L WA_Width,0
ConfigH:
DC.L WA_Height,0
DC.L WA_IDCMP,CHECKBOXIDCMP!CYCLEIDCMP!BUTTONIDCMP!SLIDERIDCMP!INTEGERIDCMP!STRINGIDCMP!IDCMP_REFRESHWINDOW
DC.L WA_Flags,WFLG_DRAGBAR!WFLG_DEPTHGADGET!WFLG_SMART_REFRESH!Wflg_Activate
ConfigWG:
DC.L WA_Gadgets,0
DC.L WA_Title,ConfigWTitle
DC.L WA_AutoAdjust,1
DC.L TAG_DONE
AboutWindowTags:
AboutL:
DC.L WA_Left,0
AboutT:
DC.L WA_Top,0
AboutW:
DC.L WA_Width,0
AboutH:
DC.L WA_Height,0
DC.L WA_IDCMP,BUTTONIDCMP!IDCMP_REFRESHWINDOW
DC.L WA_Flags,WFLG_DRAGBAR!WFLG_DEPTHGADGET!WFLG_SMART_REFRESH!WFLG_ACTIVATE
AboutWG:
DC.L WA_Gadgets,0
DC.L WA_Title,AboutWTitle
DC.L WA_AutoAdjust,1
DC.L TAG_DONE
WorkingGTags:
DC.L TAG_DONE ; Crunch
DC.L TAG_DONE ; Decrunch
DC.L TAG_DONE ; Do Nothing
DC.L GA_Disabled,1
DC.L TAG_DONE ; Skip File
DC.L GA_Disabled,1
DC.L TAG_DONE ; Stop All !
DC.L GTTX_Text,Working_WaitingT
DC.L GTTX_Border,1
DC.L TAG_DONE ; Status
DC.L GTTX_Border,1
DC.L TAG_DONE ; Name
DC.L GTNM_Number,0
DC.L GTNM_Border,1
DC.L TAG_DONE ; Source
DC.L GTNM_Number,0
DC.L GTNM_Border,1
DC.L TAG_DONE ; Dest
ConfigGTags:
DC.L GTCB_Checked
dc.b 0,0,0
CGT_Check0: ; CheckBox 'Use Alt Path': 1 = Checked
dc.b 1
DC.L TAG_DONE
DC.L GTCY_Labels,Config_EffLabels
DC.L GTCY_Active
dc.b 0,0,0
CGT_Cycle0: ; Cycle 'Efficiency': 0, 1, 2, 3, 4 ; Fast, Mediocre, Good, Very Good, Best
dc.b 4
DC.L TAG_DONE
DC.L GTCY_Labels,Config_BufLabels
DC.L GTCY_Active
dc.b 0,0,0
CGT_Cycle1: ; Cycle 'Buffer': 0, 1, 2 ; Small, Medium, Large
dc.b 2
DC.L TAG_DONE
DC.L GTCY_Labels,Config_DecrEffLabels
DC.L GTCY_Active
dc.b 0,0,0
CGT_Cycle2: ; Cycle 'Effect': 0, 1, 2, 3, 4 ; Color 0, Color 1, Pointer, Scroll, « None »
dc.b 4
DC.L TAG_DONE
DC.L TAG_DONE
DC.L TAG_DONE
DC.L TAG_DONE
DC.L TAG_DONE
DC.L TAG_DONE
DC.L TAG_DONE
DC.L GTCB_Checked
dc.b 0,0,0
CGT_Check1: ; CheckBox 'Copy Icons': 1 = Checked
dc.b 1
DC.L TAG_DONE
dc.l GTCB_Checked
dc.b 0,0,0
CGT_Check2: ; CheckBox 'Add #?.pp': 1 = Checked
dc.b 0
DC.L TAG_DONE
DC.L GTCB_Checked
dc.b 0,0,0
CGT_Check3: ; CheckBox 'Rem #?.pp': 1 = Checked
dc.b 1
DC.L TAG_DONE
DC.L GTSL_Min,-5 ; Slider 'Priority'
DC.L GTSL_Max,1
DC.L GTSL_MaxLevelLen,1
DC.L GTSL_LevelFormat,Config_PriorityFormat
DC.L GTSL_LevelPlace,PLACETEXT_RIGHT
DC.L PGA_Freedom,LORIENT_HORIZ
DC.L GA_Immediate,1
DC.L GA_RelVerify,1
dc.l GTSL_Level
dc.w 0
CGT_Slid0:
dc.w 0
DC.L TAG_DONE
DC.L GTIN_Number ; Integer 'X'
CGT_Int0:
dc.l 0
DC.L GTIN_MaxChars,4
DC.L TAG_DONE
DC.L GTIN_Number ; Integer 'Y'
CGT_Int1:
dc.l 0
DC.L GTIN_MaxChars,4
DC.L TAG_DONE
dc.l GTST_String ; String 'Alt Path'
CGT_String0:
dc.l 0
DC.L GTST_MaxChars,256
DC.L TAG_DONE
AboutGTags:
DC.L TAG_DONE
GAM_WorkingGad0Attrs:
GAM_WorkingGad1Attrs:
GAM_WorkingGad2Attrs:
dc.l Ga_Disabled,1
dc.l Tag_Done
GAM_WorkingGad3Attrs:
GAM_WorkingGad4Attrs:
dc.l Ga_Disabled,0
dc.l Tag_Done
WriteTextTags:
dc.l GTTX_Text
WTT_Text:
dc.l 0
dc.l Tag_Done
WriteStringTags:
dc.l GTST_String
WST_String:
dc.l 0
dc.l Tag_Done
WriteNumberTags:
dc.l GTNM_Number
WNT_Number:
dc.l 0
dc.l Tag_Done
Config_AslPTags:
dc.l ASL_Hail,Config_AslPTagsWndText
dc.l ASL_Dir,Config_AslPTagsDirText
dc.l ASL_ExtFlags1,1
dc.l Tag_Done
Def_EasyStruct:
dc.l 20 ; 0 SizeOf
dc.l 0 ; 4 Flags
dc.l Def_EasyStruct_Title ; 8 WindowTitle (APTR)
dc.l 0 ; 12 Adresse du texte du requester
dc.l Def_EasyStruct_GadText ; 16 Adresse du texte des gadgets
NormalBevelbox: DC.L GT_VisualInfo,0,TAG_DONE
InverseBevelBox:DC.L GT_VisualInfo,0,GTBB_Recessed,1,TAG_DONE
AboutText0: DC.B 2,0
DC.B 0
DC.B 0
DC.W 175,25
DC.L 0
DC.L About_IText0
DC.L 0
AboutText1: DC.B 2,0
DC.B 0
DC.B 0
DC.W 175,41
DC.L 0
DC.L About_IText1
DC.L 0
AboutText2: DC.B 2,0
DC.B 0
DC.B 0
DC.W 175,70
DC.L 0
DC.L About_IText2
DC.L 0
AboutText3: DC.B 2,0
DC.B 0
DC.B 0
DC.W 175,85
DC.L 0
DC.L About_IText3
DC.L 0
AboutText4: DC.B 2,0
DC.B 0
DC.B 0
DC.W 175,113
DC.L 0
DC.L About_IText4
DC.L 0
AboutText5: DC.B 2,0
DC.B 0
DC.B 0
DC.W 175,137
DC.L 0
DC.L About_IText5
DC.L 0
Config_EffLabels:
DC.L Config_EffLab0
DC.L Config_EffLab1
DC.L Config_EffLab2
DC.L Config_EffLab3
DC.L Config_EffLab4
DC.L 0
Config_BufLabels:
DC.L Config_BufLab0
DC.L Config_BufLab1
DC.L Config_BufLab2
DC.L 0
Config_DecrEffLabels:
DC.L Config_DecrEffLab0
DC.L Config_DecrEffLab1
DC.L Config_DecrEffLab2
DC.L Config_DecrEffLab3
DC.L Config_DecrEffLab4
DC.L 0
BufNewGad: dc.w 0,0,0,0
dc.l 0,0
dc.w 0
dc.l 0,0,0
BufIText: dc.b 0,0,0,0
dc.w 0,0
dc.l 0,0,0
Attr: dc.l 0
dc.w 0
dc.b 0,0
Left: dc.w 0
Top: dc.w 0
Width: dc.w 0
Height: dc.w 0
BevelLeft: dc.w 0
BevelTop: dc.w 0
BevelWidth: dc.w 0
BevelHeight: dc.w 0
FontX: dc.w 0
FontY: dc.w 0
OffX: dc.w 0
OffY: dc.w 0
Code: dc.w 0
; Si il y a simultanément 2 interfaces,
WorkingGList: ; prévoir un tampon par interface
ConfigGList: dc.l 0 ; Sinon, le même tampon est utilisé à
AboutGlist: dc.l 0 ; chaque fois
WorkingGadgets: ; Même remarque que si dessus
ConfigGadgets: blk.l GadgetMaxNumber,0
AboutGadgets: blk.l About_CNT,0
TD: dc.l TAG_DONE
IAdress: dc.l 0
Bevelbox_Taglist: dc.l 0
IconBase: dc.l 0
WorkbenchBase: dc.l 0
DosBase: dc.l 0
GadtoolsBase: dc.l 0
IntuitionBase: dc.l 0
ppBase: dc.l 0
GraphicsBase: dc.l 0
AslBase: dc.l 0
DiskObject: dc.l 0
AppIcon: dc.l 0
AppMsgPort: dc.l 0
AppDiskObject: dc.l 0
Msg: dc.l 0
WbMsg: dc.l 0
FileCount: dc.l 0
FileNumber: dc.l 0
CrunchInfo: dc.l 0
DirLock: dc.l 0
FileLock: dc.l 0
FileName: dc.l 0
FileNameBuffer: dc.l 0
OSF_FileNameBuffer: dc.l 0
ConfigBuffer: dc.l 0
ConfigBuffer0: dc.l 0
ConfigFileName0_FH: dc.l 0
ConfigFileName1_FH: dc.l 0
DosObject: dc.l 0
FileLength: dc.l 0
SBuffer: dc.l 0
FileHandle: dc.l 0
FileBuffer: dc.l 0
ppLength: dc.l 0
Buffer_: dc.l 0
Len_: dc.l 0
Message: dc.l 0
Gt_IMsg: dc.l 0
Scr: dc.l 0
VisualInfo: dc.l 0
Wnd: dc.l 0
WorkingWnd:
ConfigWnd: dc.l 0
AboutWnd: dc.l 0
Font: dc.l 0
GetImage: dc.l 0
GetClass: dc.l 0
AslRequestStruct: dc.l 0
OwnTask: dc.l 0
Debug: dc.l 0
Object: dc.b 'Env:Sys/def_tool',0
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Fin du source. * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *