MODULE TRASHY;

(*----------------------------------------------------------------------------
 * System-Version: MOS 3.5
 *----------------------------------------------------------------------------
 * Version       : 1.0
 *----------------------------------------------------------------------------
 * Text-Version  : V#00055
 *----------------------------------------------------------------------------
 * Modul-Holder  : Meinolf Schneider
 *----------------------------------------------------------------------------
 * Copyright July 1990 by Digital Art Meinolf Schneider
 * Written for the TOS-Magazin.
 *----------------------------------------------------------------------------
 * MS  : Meinolf Schneider
 *----------------------------------------------------------------------------
 * Datum    Autor Version Bemerkung (Arbeitsbericht)
 *----------------------------------------------------------------------------
 * 23.07.90 MS    1.0     Grundversion
 *----------------------------------------------------------------------------
 * MODUL-BESCHREIBUNG:
 * -------------------
 * Accessory, bei dem das Icon fr den Papierkorb gendert wird und der
 * Papierkorb auch sonst seht merkwrdige Dinge tut.
 *----------------------------------------------------------------------------
 *) (*$C-,M-,R-,S-,N+,L-*)


FROM    System          IMPORT  BYTE, ADDRESS;

FROM    MSSystems       IMPORT  EnterSuperVisorMode, MinMaxRandom;

FROM    MSSounds        IMPORT  SetSampleFrequency, StartSound;



CONST   (* Zugriffoffsets fr LineA-Variablen *)
        V_REZ_HZ           =       -$C;
        V_REZ_VT           =       -$4;
        BytesOfOneLine     =         2;

        (* Offsets fr die Icons *)
        icTrashNormal      =         0;
        icTrashKnock1      =       256;
        icTrashKnock2      =     2*256;
        icTrashLook1       =     3*256;
        icTrashLook2       =     4*256;
        icTrashLook3       =     6*256;
        icTrashLook4       =     5*256;
        icTrashJump1       =     7*256;
        icTrashJump2       =     8*256;
        icTrashLanding     =     9*256;
        
        
TYPE    Bool            =       BYTE; (* $00 = FALSE oder $FF = TRUE *)

        Handle          =       POINTER TO ADDRESS;

        ObjectFlags     =       ( selectable, default, isexit, editable,
                                  rbutton, lastob, touchexit, hidetree,
                                  indirect );
        ObjectStates    =       ( selected, crossed, checked, disabled,
                                  outlined, shadowed, draw3d, whitebak,
                                  fe1, fe2 );

        ObjectRec       =       RECORD
                                  next          : CARDINAL;
                                  head          : CARDINAL;
                                  tail          : CARDINAL;
                                  typ           : CARDINAL;
                                  flags         : SET OF ObjectFlags;
                                  state         : SET OF ObjectStates;
                                  spec          : ADDRESS;
                                  x             : INTEGER;
                                  y             : INTEGER;
                                  width         : CARDINAL;
                                  height        : CARDINAL;
                                END;

        IconBlk         =       RECORD
                                  pmask         : ADDRESS;
                                  pdata         : ADDRESS;
                                  ptext         : ADDRESS;
                                  chr           : CARDINAL;
                                  xchr          : INTEGER;
                                  ychr          : INTEGER;
                                  xicon         : INTEGER;
                                  yicon         : INTEGER;
                                  wicon         : INTEGER;
                                  hicon         : INTEGER;
                                  xtext         : INTEGER;
                                  ytext         : INTEGER;
                                  wtext         : INTEGER;
                                  htext         : INTEGER;
                                  reserved      : INTEGER;
                                END;

        TrashBehaviorType       =       ( tbDoWait,
                                          tbDoKnock,
                                          tbDoLook,
                                          tbDoJump );


VAR     (* Felder fr AES-Aufrufe *)
        control                         : ARRAY[1..5] OF INTEGER;
        global                          : ARRAY[1..15] OF INTEGER;
        intin                           : ARRAY[1..16] OF INTEGER;
        intout                          : ARRAY[1..7] OF INTEGER;
        addrin                          : ARRAY[1..3] OF ADDRESS;
        addrout                         : ADDRESS;
        AESPB                           : ARRAY[1..6] OF ADDRESS;


        DesktopObjectTreeHdl            : Handle;
        (* Zeiger auf Variable mit Zeiger auf Desktopobjektbaum *)
        
        DesktopObjectTree               : ADDRESS;
        (* Zeiger auf Desktop-Objektbaum *)
        
        TrashObjectPtr                  : ADDRESS;
        (* Zeiger auf das Papierkorbobjekt *)
        
        TrashIconMask, TrashIconData    : ADDRESS;
        (* Zeiger auf die entsprechenden Bilddaten des Papierkorbs *)
        
        MustDrawTrash                   : Bool;
        (* Wird auf TRUE gesetzt, wenn ein FORM_DIAL durchgefhrt werden mu *)
        
        BytesOfLine                     : CARDINAL;
        IsSM124                         : Bool;
        (* TRUE = ist monochrome Modus => Zeilensynchronisation mglich! *)
        
        HoleAniPhase                    : CARDINAL;
        (* Animationszhler *)

        TrashBehavior                   : TrashBehaviorType;
        BehaviorCycle                   : CARDINAL;
        TrashWaitEnd, TrashPhase        : CARDINAL;
        NoOfTrashJumps                  : CARDINAL;
        NoOfTrashKnocks                 : CARDINAL;
        TrashXMove                      : INTEGER;
        JumpAni                         : ARRAY[0..11] OF CARDINAL;
        LookAni                         : ARRAY[0..8] OF CARDINAL;
        KnockAni                        : ARRAY[0..4] OF CARDINAL;
        
        LaugherSound                    : ADDRESS;
        DongSound                       : ADDRESS;



TABLE.L TabDongSound:
         $84FFD08C, $C0461738, $6F205F2D, $9BFFFFFF, $7A65DB7D, $CC016758,
         $3B012367, $8B630198, $783FE87F, $FFFFCAFF, $745C0139, $4FB79CB7,
         $FFF5B478, $0160763F, $706583AC, $94018D5B, $AA648FFC, $B2D85C67,
         $7301976F, $C7E2CEF7, $D2C0870A, $605F4A64, $506F4D8E, $778065B4,
         $748F8C7F, $C0BF95A0, $6C405084, $89DAA7D5, $E0978C60, $61593224,
         $80776481, $885C4FBF, $9FE0A0A6, $6C5FA154, $625F8669, $8398DDFF,
         $CDB05280, $37382007, $8A589FA0, $77C3849F, $7E7FBB73, $917C687B,
         $7B6B8382, $86AAC4EF, $7F9AB02D, $240C1F47, $60BFB591, $EA90C15F,
         $807E739D, $5880909C, $607B9580, $C59DD37F, $9388624A, $2A1C293B,
         $638DE0F8, $C1B06F6F, $67778867, $7C79819B, $9BBB7F9F, $B67A9D8F,
         $8A705054, $4D526542, $5BA2C7CF, $D2AA7570, $5C5A4680, $979DAA7E,
         $BFA192B1, $688B7C67, $7C476053, $87725F74, $87A6A8B7, $8EAEAA7F,
         $4833604E, $95BEBCD3, $BBAC7A6A, $6B628060, $58675E9B, $78767D74,
         $7E94AF94, $9FA3967C, $71606B8E, $76879FD6, $CAA78F64, $535A5472,
         $5A8B7276, $8D92A795, $7E7B618D, $A7889794, $926F6D79, $7B9A99AC,
         $B2B97F6D, $50444856, $8F95909C, $A08E867E, $7F66858B, $877F9796,
         $A19C824C, $6B89868D, $9FA39674, $5A5B705C, $63708EA3, $95AC9077,
         $5F7B8B8A, $8DA09086, $949B8C87, $7F5E7280, $868EBF88, $78515D67,
         $63737B9D, $A1A8989C, $7F786272, $878999A5, $A38B9290, $75646B7A,
         $7A989091, $A58B6055, $61627B86, $A9B0978E, $8B737180, $75858791,
         $98A0A179, $76736C62, $848C7B94, $9B918E71, $62657063, $7BB3C0B5,
         $977B7270, $787A8386, $8FA1919C, $88696668, $6973849C, $8D86947A,
         $6D765672, $888DAAB2, $B78A8C78, $62626C8B, $97979890, $8F887074,
         $685E7078, $99A39091, $886A6569, $7D859DAA, $9EA69870, $726C6761,
         $87A09EA9, $9E7D725E, $6C6B7B7E, $81859898, $9D857869, $5B808B9A,
         $A8A9A487, $7A625C6A, $717D97A5, $999E9079, $5A5B6C75, $8D9895A1,
         $918E7C7E, $766D7885, $A29FA4A9, $7C686863, $6B728893, $A4A18E7C,
         $6F615D6E, $798997A9, $A48E816E, $6F757F7C, $8B9A9C9F, $A291725C,
         $56677687, $A5A59E92, $7F686366, $69829397, $A1A1987F, $6D6A6E7B,
         $8A919D94, $8E8A7E77, $6F6B6E77, $8597A49E, $8C786D6B, $707B858B,
         $979D958C, $7D757978, $7B818B95, $958D7E7A, $7A787A7E, $84878B8E,
         $8C89837C, $797B7C85, $8B8C8E88, $867F817E, $80818487, $88878483,
         $817F7F7F, $82868585, $85858383, $81808281, $84848685, $85838484,
         $83828000;

        TabLaugherSound:
         $82818180, $7C7C7D84, $8C87857B, $7E7C8081, $8690958C, $817C747C,
         $808B8D7E, $845F7685, $BCAC856E, $6B899890, $7B6C515A, $85A8C585,
         $766781AD, $9C866B2E, $678FD3BD, $7B595E99, $C39B7441, $28879FE6,
         $92694E6C, $A5B28F71, $086580D5, $C472515C, $9ECC9274, $3A338087,
         $E68A7361, $7DCCA486, $4E555483, $C8B8736A, $52ACC59A, $67514478,
         $AFCA9D71, $6A5ED9A0, $893E7161, $818BAF83, $7E6B81C3, $906F3078,
         $43BC66AF, $7E995A8D, $AE896A3E, $8B56B447, $BD83B45A, $93B39460,
         $45A853B5, $3EC488BA, $3C7FB3A3, $732CB765, $B33FC79D, $BA5050B2,
         $A18915A2, $6E9D4591, $BBA08322, $A2B5AB1C, $5A93BA6C, $575DF0AF,
         $6F2F95BE, $803354C8, $865C3BBA, $EBA53B4C, $BBA2A41D, $50ABCF21,
         $5B5DF3B3, $6E148BE1, $A8183A95, $E9463548, $C0F06726, $4EF3B763,
         $0C6AB0E9, $8E2A8097, $F2514B31, $F2A8590F, $74A9BB8F, $75358D96,
         $EB845E2A, $B7AC9F2B, $515DCDAD, $EB0E4E8F, $F1B83121, $86D38032,
         $3D7E8E8B, $6687D859, $6F6CEDC1, $831B688F, $9C5E5750, $8BB9AD81,
         $5E89A7C6, $4A5A6FC2, $92634F67, $91968160, $778BA19E, $84698A97,
         $9390826A, $4EA5BD8B, $3B4590BB, $8F646184, $AA9D7076, $83A48C7F,
         $899A7A7A, $70898B79, $616F8497, $716071A0, $A082547D, $B4B0736B,
         $8790857F, $748C6987, $859A6C77, $879F807C, $738A889D, $7F6B7096,
         $A28F7177, $A4A58761, $7A84A684, $69678D8A, $8C5D7D89, $967B7C8E,
         $88887B81, $80897884, $84876F75, $7B998782, $787F8E93, $8375788D,
         $83816782, $8091797D, $7A948587, $869A8886, $79838489, $7B7A7A89,
         $83807681, $92868A80, $89867E74, $908C7C6C, $80959172, $70789990,
         $7A6B878E, $8379778B, $858C767B, $8B908A7C, $827E9380, $7D7D8888,
         $7C807D96, $7D868191, $8B807784, $8B877B7D, $8386867E, $81828B83,
         $847D7E82, $80828382, $7782848A, $84787E83, $8B827F7B, $81848581,
         $777C8787, $807A7E87, $8A7D7D84, $8B837C81, $828E7E7B, $86859578,
         $7C818C8F, $7A807F94, $83867582, $8B848777, $877F8B7D, $81847E88,
         $81867F7A, $85887F7E, $77838A7E, $7F798A81, $89808087, $85828084,
         $8681807E, $81848080, $81858780, $807E8780, $8E7F8280, $83838482,
         $888D8783, $7C7F808D, $92837C79, $8E848270, $7D848A83, $7D77888A,
         $877B7380, $80837C7A, $80818381, $82868285, $827F8485, $80817E86,
         $82818080, $867D8086, $86898282, $8B85897C, $86828285, $7D858083,
         $82818383, $82818583, $85828083, $85818580, $7B83857E, $807F8683,
         $7E807F84, $817E837F, $84828280, $80817F88, $7A867E82, $84838680,
         $84848C87, $80857F8A, $85808082, $8585807D, $82868380, $7F808881,
         $80838286, $81838282, $7F818181, $837E8182, $80887A82, $81848481,
         $7E828482, $80828183, $84828182, $81828383, $81868184, $84868582,
         $7D858387, $81808480, $85818187, $7F858283, $86828082, $8686827F,
         $84897E84, $78837F80, $7D7E8581, $857C8381, $83827E85, $80888082,
         $82808381, $80838183, $81838284, $85828485, $84838285, $82848383,
         $84848180, $8382827F, $83808481, $80838288, $7C828187, $7E7C8185,
         $827B7C78, $7D88928C, $7B7F8389, $6987818A, $7F756A7C, $91968B75,
         $84907689, $74888188, $747D9FA6, $80738886, $967B7880, $856F7894,
         $A7837281, $86A37B79, $75676A83, $999F7670, $75949C7D, $817E5F6B,
         $8FA38A70, $8177A377, $7D6F8373, $759B9D74, $716EA899, $7877706A,
         $808C9E8E, $787985B1, $777B6F58, $69969B9B, $706B74B0, $93756D83,
         $47808CA5, $906A689A, $A4785C70, $786C8588, $AC6B657E, $AA8A6E60,
         $9E71676F, $B292616D, $9EA97056, $729C5099, $84B96F5A, $8CB98B52,
         $73A6524D, $8EA7C14C, $659DC069, $4B87BC55, $4F97BDA9, $3A77A5B7,
         $45559DB7, $5A449BD1, $814095AF, $933A7490, $B74A62B6, $C27348A4,
         $A08B3896, $8EB04670, $AA97A443, $A97CA048, $777B9F80, $36A898C1,
         $3B8380C7, $6C547F8B, $C84B5D94, $C8944691, $9F9D3E59, $9B9A9749,
         $739DA695, $56AE7690, $6C807E71, $85B63E91, $78D3685B, $92A29C4F,
         $5E909B8A, $844EAB8C, $C9409189, $A753737E, $707C7DAD, $6E55A6AD,
         $9842AF93, $854CA77D, $715199A1, $982E9BAB, $CD5268A9, $A65C5994,
         $8C877280, $71A87156, $93B2BD50, $757B9961, $70838A7A, $789D9383,
         $7CA6617F, $9695935B, $96649558, $808F7F7F, $86977B79, $8C868B6E,
         $8D87905B, $6CAA975B, $5C948177, $7E8C817F, $977C9A77, $847E938C,
         $78728785, $757E7D89, $7E80718E, $88787C8C, $98717A96, $91896E90,
         $857A7991, $7F70828E, $856B878A, $887D7892, $817E8794, $7F698498,
         $797B7E8F, $8E7D816E, $937A9177, $7086788C, $72779381, $7E7C987F,
         $80808A7B, $828B7A84, $828C7879, $89858076, $8B868782, $7A7B8687,
         $82787B80, $818D7D80, $7E90857B, $8C848280, $80827D86, $797F7D88,
         $7880808B, $807E8888, $887A788B, $8F7A7380, $89857A84, $8087838E,
         $75878584, $867A8285, $88827C82, $86887E7E, $8384867B, $7D8A847C,
         $7B848C7A, $7C85897F, $807C8186, $7B877A82, $857A887D, $8883827F,
         $887E8281, $7C897C85, $76878283, $7F808486, $897E8082, $89818784,
         $7D858682, $78838585, $7E7C8982, $817F8585, $7C838283, $7F87837F,
         $7F7F8179, $8678887F, $867F7E8C, $7F7F7D85, $7D807F83, $84847884,
         $83857880, $88867E7F, $85838580, $84888482, $80838485, $7F818284,
         $81818282, $81868080, $82848280, $80868285, $7C817F85, $7A807E7F,
         $837E8280, $857C8581, $83818083, $7D828480, $807D887F, $847F8386,
         $7F808284, $83808481, $86808083, $827D8280, $81818082, $82848085,
         $7F828480, $857D8281, $83808282, $83807F81, $80837F82, $7F828181,
         $81828282, $82828083, $827F8082, $82807D83, $7F808280, $81878083,
         $80858582, $8480827F, $83847E82, $81848080, $81828281, $7F848182,
         $81828181, $837E8081, $817E8082, $80807F81, $8380807E, $8481817E,
         $85828481, $7F818180, $81818482, $80828286, $85838184, $82817F83,
         $81838180, $83808180, $83818580, $82838081, $80818081, $80817E82,
         $80808080, $8080817F, $83817E80, $80818182, $80808180, $81808180,
         $80818080, $81808280, $85828383, $81818380, $84808280, $80838181,
         $81828185, $83818283, $847F8180, $8181817F, $817E807D, $807F8180,
         $80808080, $847F8181, $83818382, $84818381, $81808081, $80808080,
         $80808181, $83818281, $83828180, $81808180, $81838281, $81828580,
         $81818381, $80808280, $80807F81, $807E7D80, $84827F80, $80828180,
         $81818683, $837F7F80, $807F7584, $80847E81, $86817B88, $898A7E84,
         $84857580, $8580837C, $8B738087, $90817A87, $88787B84, $83807C89,
         $7688848F, $7983897F, $7C808280, $7F82738A, $878D7386, $86847F80,
         $897A8F77, $80858E7C, $828A8281, $7B8A8090, $5A7B8A82, $88768D7D,
         $877F9777, $855E7C8A, $7F8F718D, $748B7B91, $7E90557F, $867D856D,
         $916D8F6D, $956F9757, $83888189, $679C75A0, $65A0699B, $5288818C,
         $8D738E7C, $916D9070, $A45A8088, $89817195, $9082708A, $779A6288,
         $848D8273, $99847E7F, $897A8D4E, $9876956C, $8A848574, $7B897092,
         $4F9B7696, $7189868C, $70818772, $96509E6F, $99719181, $94757789,
         $73954E90, $7B987392, $73987275, $877B985C, $887D9D71, $84828184,
         $6B8A7786, $7F559C83, $8F679D74, $8F767A7D, $8484805E, $A7739D6A,
         $9D6E8C7D, $82778282, $A2607F89, $9E738687, $778C7383, $797E8C7F,
         $5992849C, $64927A86, $7B787E76, $8079A653, $7F8FA278, $719F7B75,
         $6D9E6988, $70829877, $5C8F929F, $6B827D8C, $7285708E, $748F7C7C,
         $8B806D8A, $969C7A7B, $7F8E6F80, $7F7E7F84, $848B8083, $808E8079,
         $8D838085, $71807588, $847E7E84, $8A878083, $87847986, $80827580,
         $8D876C80, $85807B7F, $837A7F8B, $7F877C80, $8A828280, $78867C80,
         $837E8484, $817F8488, $7B7E8585, $817E8684, $86808280, $7B83847A,
         $7A83897A, $7B828183, $7F7D867D, $7D89877A, $7885887D, $877D8783,
         $867F7B81, $8A847C7F, $7986807D, $7C8D817E, $7E89827D, $88847F81,
         $857E8380, $81807F82, $81818282, $81838680, $7C828280, $7C827B82,
         $827F817F, $84817D85, $837D8180, $837E8680, $8380847E, $7F808584,
         $80818380, $807C8481, $7D808080, $81808583, $80848281, $84808481,
         $80817D84, $837F8081, $85818080, $82837F7E, $80837E7E, $82827F80,
         $80837F84, $7E828180, $837E8380, $84808083, $80818381, $7E808180,
         $81827F80, $82838180, $81838480, $8380827F, $80827E81, $8183807F,
         $8282837F, $83818281, $7F838080, $8180807E, $817E7E81, $80808080,
         $80808181, $80808281, $81808081, $8081817F, $82808180, $837F8180,
         $83808382, $82817F82, $81808080, $80818180, $80808081, $80808180,
         $84808181, $82818080, $81808180, $7F808180, $7F808083, $80808080,
         $80808180, $80808080, $80818080, $80818180, $82828282, $80818081,
         $81808181, $80828080, $80828080, $80828180, $81808180, $80828081,
         $80818080, $80808180, $80808081, $80818180, $80808080, $81818080,
         $80808080, $80808082, $7F808081, $81828182, $81808182, $80818081,
         $81808080, $80818081, $81808080, $80808180, $81808080, $80808081,
         $80808080, $80808081, $82808181, $80808180, $81808080, $80808080,
         $80808081, $80818081, $81818181, $80818080, $80808081, $80818080,
         $80818082, $80818081, $80808080, $80808080, $80808080, $80808180,
         $80808080, $80808081, $80808282, $80808080, $807F8083, $83808081,
         $82808081, $80818181, $80808180, $7E818484, $807E8183, $807F7D83,
         $81818081, $817C7F83, $87817D80, $81817D7D, $8380807F, $837F7C81,
         $85877D7E, $81837E7B, $8481817D, $84807C81, $85877F80, $8286797F,
         $82827F7F, $8679817F, $89807F80, $85827D83, $7F837C88, $7C817F89,
         $807C8381, $827B8280, $827C867B, $7D7E8B82, $7B818282, $7B818084,
         $7D837683, $7D8A847E, $8281837F, $81808480, $8373867F, $87807F85,
         $80807E82, $81808082, $77848385, $7E80827F, $807E8080, $7F828276,
         $8281877D, $81828081, $7E817F80, $83887A7A, $818A7F80, $817E847C,
         $817F8082, $867E7681, $87887984, $80857E7D, $82807F80, $8E747C80,
         $90807D81, $817F7D80, $807E7F84, $86777984, $8B857880, $81817C81,
         $7E807F82, $8086767E, $858D8278, $8083847A, $807F8180, $8180818C,
         $75807E91, $817E7A87, $807C7D81, $7F818285, $7B8B727E, $8090867B,
         $7B84827B, $77838480, $7C828080, $7F828578, $8282887C, $7D7D857F,
         $7E798083, $82818381, $80848184, $8080807E, $8480837C, $8181807E,
         $80808082, $82808082, $82808281, $837C8080, $807F8080, $807F7E80,
         $81808000;


TABLE.L icons:  (* NEUE ICONS FR DEN PAPIERKORB *)
                $00000000, $00000000, $00000000, $00000000,
                $00000000, $0007C000, $03FD7F80, $070C61C0,
                $08000020, $078003C0, $02FFFE80, $02000080,
                $02884480, $02884480, $02884480, $02884480,
                $02891480, $0289B480, $0288E480, $02884480,
                $02884480, $02884480, $02884480, $02884480,
                $02884480, $02884480, $02884480, $02C84C80,
                $030CC180, $01C00700, $007FFC00, $00000000,
                $00000000, $00000000, $00000000, $00000000,
                $00000000, $0007C000, $03FFFF80, $07FFFFC0,
                $0FFFFFE0, $07FFFFC0, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $01FFFF00, $007FFC00, $00000000,
                $00000000, $00000000, $00000000, $00000000,
                $00000000, $0007C000, $03FD7F80, $070C61C0,
                $08000020, $078003C0, $02FFFE80, $02000080,
                $02884480, $02884480, $02884480, $02884480,
                $02891480, $0291B480, $0290E480, $02904480,
                $02904480, $02904480, $02884480, $02884480,
                $02884480, $02884480, $02884480, $02C84C80,
                $030CC180, $01C00700, $007FFC00, $00000000,
                $00000000, $00000000, $00000000, $00000000,
                $00000000, $0007C000, $03FFFF80, $07FFFFC0,
                $0FFFFFE0, $07FFFFC0, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $01FFFF00, $007FFC00, $00000000,
                $00000000, $00000000, $00000000, $00000000,
                $00000000, $0007C000, $03FD7F80, $070C61C0,
                $08000020, $078003C0, $02FFFE80, $02000080,
                $02884480, $02884480, $02884480, $02904480,
                $02901480, $0291B480, $02A0E480, $02A06480,
                $02A02480, $02902480, $02902480, $02904480,
                $02884480, $02884480, $02884480, $02C84C80,
                $030CC180, $01C00700, $007FFC00, $00000000,
                $00000000, $00000000, $00000000, $00000000,
                $00000000, $0007C000, $03FFFF80, $07FFFFC0,
                $0FFFFFE0, $07FFFFC0, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $01FFFF00, $007FFC00, $00000000,
                $00000000, $00000000, $00000000, $00000000,
                $0007C000, $03FD7F80, $070C61C0, $08000020,
                $078003C0, $07FFFFC0, $02FFFE80, $02000080,
                $02884480, $02884480, $02884480, $02884480,
                $02891480, $0289B480, $0288E480, $02884480,
                $02884480, $02884480, $02884480, $02884480,
                $02884480, $02884480, $02884480, $02C84C80,
                $030CC180, $01C00700, $007FFC00, $00000000,
                $00000000, $00000000, $00000000, $00000000,
                $0007C000, $03FFFF80, $07FFFFC0, $0FFFFFE0,
                $07FFFFC0, $07FFFFC0, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $01FFFF00, $007FFC00, $00000000,
                $00000000, $00000000, $0007C000, $03FD7F80,
                $070C61C0, $08000020, $078003C0, $07FFFFC0,
                $0FF1C7E0, $07E69BC0, $02FFFE80, $02000080,
                $02884480, $02884480, $02884480, $02884480,
                $02891480, $0289B480, $0288E480, $02884480,
                $02884480, $02884480, $02884480, $02884480,
                $02884480, $02884480, $02884480, $02C84C80,
                $030CC180, $01C00700, $007FFC00, $00000000,
                $00000000, $00000000, $0007C000, $03FFFF80,
                $07FFFFC0, $0FFFFFE0, $07FFFFC0, $07FFFFC0,
                $0FFFFFE0, $07FFFFC0, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $01FFFF00, $007FFC00, $00000000,
                $0007C000, $03FD7F80, $070C61C0, $08000020,
                $078003C0, $00FFFE00, $00E38E00, $07D967C0,
                $0FD967E0, $07E38FC0, $02FFFE80, $02000080,
                $02884480, $02884480, $02884480, $02884480,
                $02891480, $0289B480, $0288E480, $02884480,
                $02884480, $02884480, $02884480, $02884480,
                $02884480, $02884480, $02884480, $02C84C80,
                $030CC180, $01C00700, $007FFC00, $00000000,
                $0007C000, $03FFFF80, $07FFFFC0, $0FFFFFE0,
                $07FFFFC0, $00FFFE00, $00FFFE00, $07FFFFC0,
                $0FFFFFE0, $07FFFFC0, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $01FFFF00, $007FFC00, $00000000,
                $0007C000, $03FD7F80, $070C61C0, $08000020,
                $078003C0, $00FFFE00, $00E38E00, $07CD37C0,
                $0FCD37E0, $07E38FC0, $02FFFE80, $02000080,
                $02884480, $02884480, $02884480, $02884480,
                $02891480, $0289B480, $0288E480, $02884480,
                $02884480, $02884480, $02884480, $02884480,
                $02884480, $02884480, $02884480, $02C84C80,
                $030CC180, $01C00700, $007FFC00, $00000000,
                $0007C000, $03FFFF80, $07FFFFC0, $0FFFFFE0,
                $07FFFFC0, $00FFFE00, $00FFFE00, $07FFFFC0,
                $0FFFFFE0, $07FFFFC0, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $01FFFF00, $007FFC00, $00000000,
                $0007C000, $03FD7F80, $070C61C0, $08000020,
                $078003C0, $07FFFFC0, $0FF1C7E0, $07E69BC0,
                $02FFFE80, $02000080, $02884480, $02884480,
                $02884480, $02884480, $02891480, $0289B480,
                $0288E480, $02884480, $02884480, $02884480,
                $02884480, $02884480, $02884480, $02884480,
                $02884480, $02C84C80, $030CC180, $01C00700,
                $007FFC00, $00000000, $00000000, $00000000,
                $0007C000, $03FFFF80, $07FFFFC0, $0FFFFFE0,
                $07FFFFC0, $07FFFFC0, $0FFFFFE0, $07FFFFC0,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $01FFFF00,
                $007FFC00, $00000000, $00000000, $00000000,
                $0007C000, $03FD7F80, $070C61C0, $08000020,
                $078003C0, $07FFFFC0, $02FFFE80, $02000080,
                $02884480, $02884480, $02884480, $02884480,
                $02891480, $0289B480, $0288E480, $02884480,
                $02884480, $02884480, $02884480, $02884480,
                $02884480, $02884480, $02884480, $02C84C80,
                $030CC180, $01C00700, $007FFC00, $00000000,
                $00000000, $00000000, $00000000, $00000000,
                $0007C000, $03FFFF80, $07FFFFC0, $0FFFFFE0,
                $07FFFFC0, $07FFFFC0, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $01FFFF00, $007FFC00, $00000000,
                $00000000, $00000000, $00000000, $00000000,
                $0007C000, $03FD7F80, $070C61C0, $08000020,
                $078003C0, $00FFFE00, $00E38E00, $07CD37C0,
                $0FCD37E0, $07E38FC0, $02FFFE80, $02000080,
                $02884480, $02884480, $02884480, $02884480,
                $02891480, $0289B480, $0288E480, $02884480,
                $02884480, $02884480, $02884480, $22884490,
                $328844A0, $12884480, $02884488, $02C84C98,
                $330CC1A0, $19C00700, $027FFC70, $00000000,
                $0007C000, $03FFFF80, $07FFFFC0, $0FFFFFE0,
                $07FFFFC0, $00FFFE00, $00FFFE00, $07FFFFC0,
                $0FFFFFE0, $07FFFFC0, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $03FFFF80,
                $03FFFF80, $03FFFF80, $03FFFF80, $23FFFF90,
                $33FFFFA0, $13FFFF80, $03FFFF88, $03FFFF98,
                $33FFFFA0, $19FFFF00, $027FFC70, $00000000;
                      
       




PROCEDURE LineSync ( BottomLineNo       : CARDINAL );
BEGIN
  ASSEMBLER
  tst.b         IsSM124
  beq.w         ED
  
  jsr           EnterSuperVisorMode
  move.w        -(A3),D1
  mulu          BytesOfLine,D1
  move.l        #$FF8201,A0
  clr.l         D0
  movep.w       0(A0),D0
  lsl.l         #8,D0
  move.b        $C(A0),D0       ; Video Base
  add.l         D1,D0
  move.l        $466,D2
 
 !WaitTopOfLine
  move.l        $466,D1
  sub.l         D2,D1
  cmpi.w        #3,D1
  bhi           WaitEnd
  clr.l         D1
  movep.w       4(A0),D1
  lsl.l         #8,D1
  move.b        $8(A0),D1       ; Video Address Counter
  cmp.l         D0,D1
  bhi           WaitTopOfLine
  
  move.l        $466,D2
 
 !WaitBottomOfLine
  move.l        $466,D1
  sub.l         D2,D1
  cmpi.w        #3,D1
  bhi           WaitEnd
  clr.l         D1
  movep.w       4(A0),D1
  lsl.l         #8,D1
  move.b        $8(A0),D1       ; Video Address Counter
  cmp.l         D0,D1
  bcs           WaitBottomOfLine
 
 !WaitEnd
  andi.w        #$DFFF,SR
 !ED
  END;
END LineSync;



PROCEDURE CopyRight;
BEGIN
  ASSEMBLER
  ; FORM_ALERT
  lea           control,A0
  move.w        #52,(A0)
  move.w        #1,2(A0)
  move.w        #1,4(A0)
  move.w        #1,6(A0)
  clr.w         8(A0)

  move.w        #1,intin
  pea           astring(PC)
  move.l        (A7)+,addrin
  move.l        #AESPB,D1
  move.w        #200,D0
  trap          #2              ; AES-Aufruf
  rts
  
 !astring
  acz           '[3][          TRASHY| |July 1990 by Meinolf Schneider | Written with Megamax-Modula-2|     for the TOS-Magazin][OK]'
  sync
  END;
END CopyRight;


PROCEDURE SetTrashIcon ( WhichIcon      : CARDINAL );
BEGIN
  ASSEMBLER
  st            MustDrawTrash
  lea           icons,A2
  move.w        -(A3),D0
  adda.w        D0,A2
  move.l        TrashIconMask,A0
  move.l        TrashIconData,A1
  move.w        #31,D0
 !CopyIcon
  move.l        128(A2),(A0)+
  move.l        (A2)+,(A1)+
  dbf           D0,CopyIcon
  END;
END SetTrashIcon;


PROCEDURE SetNextTrashBehavior;
BEGIN
  INC ( BehaviorCycle );
  CASE BehaviorCycle OF
  1..3: TrashBehavior := tbDoKnock|
  4..5: TrashBehavior := tbDoLook|
  30: TrashBehavior := tbDoKnock;
      CopyRight|
  ELSE
    TrashBehavior := TrashBehaviorType ( MinMaxRandom ( 1, 3 ) );
  END;
  CASE TrashBehavior OF
  tbDoJump:
    NoOfTrashJumps := MinMaxRandom ( 1, 10 )|
  tbDoKnock:
    NoOfTrashKnocks := MinMaxRandom ( 1, 4 )|
  END;
  TrashWaitEnd := MinMaxRandom ( 5, 20 );
  TrashPhase := 0;
END SetNextTrashBehavior;


PROCEDURE SetWaitBehavior;
BEGIN
  TrashBehavior := tbDoWait;
  TrashWaitEnd := MinMaxRandom ( 10, 200 ); (* 1 bis 20 sec *)
  TrashPhase := 0;
END SetWaitBehavior;


PROCEDURE DoWait;
BEGIN
  INC ( TrashPhase );
  IF TrashPhase > TrashWaitEnd
  THEN
    SetNextTrashBehavior;
  END;
END DoWait;


PROCEDURE DoKnock;
BEGIN
  SetTrashIcon ( KnockAni[TrashPhase] );
  CASE TrashPhase OF
  2: EnterSuperVisorMode;
     StartSound ( DongSound, 1 );
     ASSEMBLER
     andi.w        #$DFFF,SR
     END|
  3: DEC ( NoOfTrashKnocks );
     IF NoOfTrashKnocks # 0
     THEN
       TrashPhase := 0; (* ...nochmal klopfen! *)
     END;
  END;
  INC ( TrashPhase );
  IF TrashPhase = 5
  THEN
    SetWaitBehavior;
  END;
END DoKnock;


PROCEDURE DoLook;
BEGIN
  SetTrashIcon ( LookAni[TrashPhase] );
  IF TrashPhase = 5
  THEN
    EnterSuperVisorMode;
    StartSound ( LaugherSound, 1 );
    ASSEMBLER
    andi.w        #$DFFF,SR
    END;
  END;
  INC ( TrashPhase );
  IF TrashPhase = 9
  THEN
    SetWaitBehavior;
  END;
END DoLook;


PROCEDURE DoJump;
BEGIN
  SetTrashIcon ( JumpAni[TrashPhase] );
  IF TrashPhase = 7
  THEN
    EnterSuperVisorMode;
    StartSound ( DongSound, 1 );
    ASSEMBLER
    andi.w        #$DFFF,SR
    END;
    DEC ( NoOfTrashJumps );
    IF NoOfTrashJumps # 0
    THEN
      TrashPhase := 3; (* ...nochmal springen! *)
    END;
  END;
  IF (TrashPhase > 3) & (TrashPhase < 8)
  THEN
    TrashXMove := 2;
  ELSE
    TrashXMove := 0;
  END;
  INC ( TrashPhase );
  IF TrashPhase = 12
  THEN
    SetWaitBehavior;
  END;
END DoJump;


               
BEGIN
  ASSEMBLER
  ; APPL_INIT
  lea           control,A0
  move.w        #10,(A0)
  clr.w         2(A0)
  move.w        #1,4(A0)
  clr.w         6(A0)
  clr.w         8(A0)
  
  lea           AESPB,A0
  move.l        #control,(A0)+
  move.l        #global,(A0)+
  move.l        #intin,(A0)+
  move.l        #intout,(A0)+
  move.l        #addrin,(A0)+
  move.l        #addrout,(A0)+
  
  move.l        #AESPB,D1
  move.w        #200,D0
  trap          #2              ; AES-Aufruf
  
  
  
  ; TOS-Version ermitteln, wodurch sich die Variable mit dem Zeiger
  ; auf die aktuelle Desktop-Objektliste ergibt.
  jsr           EnterSuperVisorMode
  move.l        $4F2,A0
  move.w        $2(A0),D1       ; D1 = TOSVersion
  move.l        24(A0),D2       ; D2 = Erstellungsdatum
  clr.l         DesktopObjectTreeHdl
  cmpi.w        #$0100,D1
  bne           NoTOS10
  move.l        #$A0C4,DesktopObjectTreeHdl
  bra           TOSOk
 !NoTOS10
  cmpi.w        #$0102,D1
  bne           NoTOS12
  move.l        #$C942,DesktopObjectTreeHdl
  bra           TOSOk
 !NoTOS12
  cmpi.w        #$0104,D1
  bne           NoTOS14
  cmpi.l        #$08081988,D2
  bne           IsNewTOS14
  move.l        #$71E2,DesktopObjectTreeHdl     ; TOS 1.4 vom 8.8.88
  bra           TOSOk
 !IsNewTOS14
  move.l        #$6E38,DesktopObjectTreeHdl     ; TOS 1.4 > 8.8.88 z.B. 6.4.89
  bra           TOSOk
 !NoTOS14
  cmpi.w        #$0106,D1
  bne           NoTOS16
  cmpi.l        #$06191989,D2
  bne           IsNewTOS16
  move.l        #$6E3C,DesktopObjectTreeHdl     ; altes TOS 1.6
  bra           TOSOk
 !IsNewTOS16
  move.l        #$6E7C,DesktopObjectTreeHdl     ; neues TOS 1.6 v. 29.7.90
 !NoTOS16
 !TOSOk
  andi.w        #$DFFF,SR       ; SuperMode verlassen
  
  dc.w          $A000
  move.w        BytesOfOneLine(A0),BytesOfLine
  sf            IsSM124
  cmpi.w        #400,V_REZ_VT(A0)
  bne           IsNoSM124
  cmpi.w        #640,V_REZ_HZ(A0)
  bne           IsNoSM124
  st            IsSM124
 !IsNoSM124
  
  move.l        #TabDongSound,DongSound
  move.l        #TabLaugherSound,LaugherSound
  END;
  
  SetSampleFrequency ( 6269 );
  
  
  KnockAni[0] := icTrashNormal;
  KnockAni[1] := icTrashKnock1;
  KnockAni[2] := icTrashKnock2;
  KnockAni[3] := icTrashKnock1;
  KnockAni[4] := icTrashNormal;
  
  LookAni[0] := icTrashNormal;
  LookAni[1] := icTrashLook1;
  LookAni[2] := icTrashLook2;
  LookAni[3] := icTrashLook3;
  LookAni[4] := icTrashLook4;
  LookAni[5] := icTrashLook3;
  LookAni[6] := icTrashLook2;
  LookAni[7] := icTrashLook1;
  LookAni[8] := icTrashNormal;
  
  JumpAni[0] := icTrashNormal;
  JumpAni[1] := icTrashLook1;
  JumpAni[2] := icTrashLook2;
  JumpAni[3] := icTrashLook3;
  JumpAni[4] := icTrashJump1;
  JumpAni[5] := icTrashJump2;
  JumpAni[6] := icTrashJump1;
  JumpAni[7] := icTrashLanding;
  JumpAni[8] := icTrashLook3;
  JumpAni[9] := icTrashLook2;
  JumpAni[10] := icTrashLook1;
  JumpAni[11] := icTrashNormal;
  
  TrashWaitEnd := MinMaxRandom ( 600, 1200 );
  
  REPEAT
    ASSEMBLER
    ; EVNT_TIMER
    lea           control,A0
    move.w        #24,(A0)
    move.w        #2,2(A0)
    move.w        #1,4(A0)
    clr.w         6(A0)
    clr.w         8(A0)
    
    lea           intin,A0
    move.w        #100,(A0)       ; 100 Millisekunden fr andere Prozesse...
    move.w        #0,2(A0)
    
    move.l        #AESPB,D1
    move.w        #200,D0
    trap          #2              ; AES-Aufruf
    
    
    tst.l         TrashObjectPtr
    bne           IHaveTheTrashObject
    
    tst.l         DesktopObjectTreeHdl
    beq.w         UnknownTOS
    move.l        DesktopObjectTreeHdl,A0
    tst.l         (A0)
    beq.w         ThatsNotTheDesktopObjectTree
    
   !SearchTrash
    ; Suchen des Papierkorbobjekts, es ist das erste Icon-Objekt in der Liste
    move.l        DesktopObjectTreeHdl,A0
    move.l        (A0),A0
    move.l        A0,DesktopObjectTree
    
   !NoTrashFound
    lea           2(A0),A0
    cmpi.l        #$FFFF001F,(A0)
    bne           NoTrashFound
    subq.l        #4,A0
    move.l        A0,TrashObjectPtr
    move.l        ObjectRec.spec(A0),A0
    move.l        IconBlk.pmask(A0),TrashIconMask
    move.l        IconBlk.pdata(A0),TrashIconData
    
    ; ... und gleich mal das Icon ndern:
    move.w        #icTrashNormal,(A3)+
    jsr           SetTrashIcon
    
   !IHaveTheTrashObject
    move.l        DesktopObjectTreeHdl,A1
    tst.l         (A1)
    beq.w         ThatsNotTheDesktopObjectTree
    move.l        DesktopObjectTree,A0
    cmpa.l        (A1),A0
    bne.w         SearchTrash                  ; Objektbaum wurde neu erstellt!
    
    move.w        TrashBehavior,D0
    add.w         D0,D0
    add.w         D0,D0
    pea           AfterBehavior(PC)
    move.l        BehaviorProcs(PC,D0.W),-(A7)
    rts
   !BehaviorProcs
    dc.l          DoWait, DoKnock, DoLook, DoJump
   !AfterBehavior
   
   !DrawTrash
    tst.b         MustDrawTrash
    beq.w         NoTrashDraw
    sf            MustDrawTrash
    
    ; WIND_UPDATE (BEGIN)
    lea           control,A0
    move.w        #107,(A0)
    move.w        #1,2(A0)
    move.w        #1,4(A0)
    clr.w         6(A0)
    clr.w         8(A0)
    lea           intin,A0
    move.w        #1,(A0)
    move.l        #AESPB,D1
    move.w        #200,D0
    trap          #2              ; AES-Aufruf
    
    
    ; FORM_DIAL
    lea           control,A0
    move.w        #51,(A0)
    move.w        #9,2(A0)
    move.w        #1,4(A0)
    clr.w         6(A0)
    clr.w         8(A0)
    
    lea           intin,A0
    move.w        #3,(A0)
    move.w        #0,2(A0)
    move.w        #0,4(A0)
    move.w        #0,6(A0)
    move.w        #0,8(A0)
    move.l        TrashObjectPtr,A1
    move.w        ObjectRec.x(A1),D0
    move.w        D0,10(A0)
    add.w         TrashXMove,D0
    move.w        D0,ObjectRec.x(A1)
    move.w        ObjectRec.y(A1),12(A0)
    move.w        ObjectRec.width(A1),D0
    add.w         TrashXMove,D0
    move.w        D0,14(A0)
    move.w        ObjectRec.height(A1),16(A0)
    
    move.w        ObjectRec.y(A1),(A3)+
    jsr           LineSync
    
    move.l        #AESPB,D1
    move.w        #200,D0
    trap          #2              ; AES-Aufruf
    
    ; WIND_UPDATE (END)
    lea           control,A0
    move.w        #107,(A0)
    move.w        #1,2(A0)
    move.w        #1,4(A0)
    clr.w         6(A0)
    clr.w         8(A0)
    lea           intin,A0
    move.w        #0,(A0)
    move.l        #AESPB,D1
    move.w        #200,D0
    trap          #2              ; AES-Aufruf
   
   
   !UnknownTOS
   !NoTrashDraw
   !ThatsNotTheDesktopObjectTree
    END;
  UNTIL FALSE;

END TRASHY.
