Page 2 of 2 FirstFirst 1 2
Results 16 to 21 of 21

Thread: Code opdelen in classes

  1. #16
    Dat kan. Zal morgen in de codebase kijken.
    Alvast bedankt, Patrick

  2. #17
    Alvast bedankt. En mocht het niet lukken dan Helaas

  3. #18
    Code:
    unit AirLite;
    
    interface
    
    (************************************************************************/
    /* CONFIGURATION FLAGS 			    									*/
    /************************************************************************)
    const
      b_CUE_RESET_ENABLED_BY_LINE			      = $01;
      b_CUE_RESET_ENABLED_BY_MIC_USB_VOIP   = $02;
      b_CUE_RESET_BY_FADER                  = $04;
      b_CUE_RESET_BY_ON                     = $08;
      b_CUE_RESET_BY_FADER_AND_ON           = $10;
    
      b_ON_AIR1_ENABLED_BY_LINE             = $01;
      b_ON_AIR1_ENABLED_BY_MIC_USB_VOIP     = $02;
      b_ON_AIR2_ENABLED_BY_LINE             = $04;
      b_ON_AIR2_ENABLED_BY_MIC_USB_VOIP     = $08;
    
      b_STUDIO_REMOTE_COUGH_ENABLE          = $01;
      b_STUDIO_REMOTE_COMM_ENABLE           = $02;
      b_STUDIO_REMOTE_COMM_PRIVATE          = $04;
    
    
    //***********************************************************************/
    // ENUMERATIONS															*/
    //***********************************************************************/
    type
      Module_t = (
    	MODULE_1,
    	MODULE_2,
    	MODULE_3,
    	MODULE_4,
    	MODULE_5,
    	MODULE_6,
    	MODULE_7,
    	MODULE_8,
    	MODULE_ALL = $FF
      );
    
      Cue_t = (
        CUE_MOD_1,
        CUE_MOD_2,
        CUE_MOD_3,
        CUE_MOD_4,
        CUE_MOD_5,
        CUE_MOD_6,
        CUE_MOD_7,
        CUE_MOD_8,
        CUE_AUX,
        CUE_NON_STOP,
        CUE_AIR,
        CUE_ALL = $FF
      );
    
      Color_t = (
        LED_OFF,
        LED_RED,
        LED_GREEN
      );
    
      Ctrl_blink_t = (
        CTRL_SLOW,
        CTRL_NORMAL,
        CTRL_FAST
      );
    
      Ctrl_id_t = (
          CTRL_1A,
          CTRL_2A,
          CTRL_3A,
          CTRL_4A,
          CTRL_5A,
          CTRL_6A,
          CTRL_7A,
          CTRL_8A,
          CTRL_1B,
          CTRL_2B,
          CTRL_3B,
          CTRL_4B,
          CTRL_5B,
          CTRL_6B,
          CTRL_7B,
          CTRL_8B,
        CTRL_ALL=$FF
      );
    
      Request_t = (
        FIRMWARE_REQ,
        (* Control:	0x20 - 0x3F *)
        CTRL_SWITCH_REQ = $20,
        (* Config: 	$40 - $5F *)
        CONFIG_AUTO_ON_REQ = $40,
        CONFIG_CUE_RESET_REQ,
        CONFIG_ON_AIR_REQ,
        CONFIG_CRM_MUTE_REQ,
        CONFIG_CRM_AUTO_CUE_RESET_REQ,
        CONFIG_STUDIO_REMOTE_REQ,
        CONFIG_CUE_INTERLOCK_REQ,
        CONFIG_GPO_REQ,
        CONFIG_CUE_REQ,
        CONFIG_ON_REQ,
        CONFIG_FADER_RESERVE_REQ,
        CONFIG_SILENCE_DETECTION_REQ,
        CONFIG_PHANTOM_REQ,
        CONFIG_MIC_AT_LINE_REQ,
        CONFIG_AUTO_OFF_REQ,
        (* States: 	$60 - $7F *)
        STATE_ON_REQ = $60,
        STATE_CUE_REQ,
        STATE_FADER_REQ,
        STATE_AUTO_CUE_REQ,
        STATE_SRC_SEL_REQ,
        STATE_NON_STOP_REQ,
        STATE_MIC_ON_REQ,
        STATE_GPO_REQ,
        STATE_ON_AIR_REQ,
        STATE_SILENCE_DETECTION_REQ,
        STATE_MODULE_REQ,
        STATE_CRM_MUTE_REQ,
        STATE_TRACK_REQ,
        STATE_COMM_REQ,
        STATE_COUGH_REQ,
        STATE_VT_REQ
        (* Misc.:  	$80 - $FF *)
      );
    
      Action_t = (
        DEACTIVATE,
        ACTIVATE,
        TOGGLE
      );
    
      Config_t = (
        DISABLE,
        ENABLE
      );
    
      Callback_id_t = (
        FIRMWARE,
        (* Control:	$20 - $3F *)
        CTRL_LED = $20,
        CTRL_LED_BLINK,
        CTRL_SWITCH,
        (* Config: 	$40 - $5F *)
        CONFIG_AUTO_ON = $40,
        CONFIG_CUE_RESET,
        CONFIG_ON_AIR,
        CONFIG_CRM_MUTE,
        CONFIG_CRM_AUTO_CUE_RESET,
        CONFIG_STUDIO_REMOTE,
        CONFIG_CUE_INTERLOCK,
        CONFIG_GPO,
        CONFIG_CUE,
        CONFIG_ON,
        CONFIG_FADER_RESERVE,
        CONFIG_SILENCE_DETECTION,
        CONFIG_PHANTOM,
        CONFIG_MIC_AT_LINE,
        CONFIG_AUTO_OFF,
        (* States: 	$60 - $7F *)
        STATE_ON = $60,
        STATE_CUE,
        STATE_FADER,
        STATE_AUTO_CUE,
        STATE_SRC_SEL,
        STATE_NON_STOP,
        STATE_MIC_ON,
        STATE_GPO,
        STATE_ON_AIR,
        STATE_SILENCE_DETECTION,
        STATE_MODULE,
        STATE_CRM_MUTE,
        STATE_TRACK,
        STATE_COMM,
        STATE_COUGH,
        STATE_VT,
        STATE_PHONE_RINGING,
        (* Misc.:  	$80 - $FF *)
        METERING = $80
      );
    
      Callback_type_t = (
        REPLY,
        EVENT
      );
    
      Gpo_t = (
        GPO_1,
        GPO_2
      );
    
      Gpo_trigger_t = (
        TR_NONE,
        TR_ON_AIR1,
        TR_ON_AIR2,
        TR_TEL_RING,
        TR_MIC_ON,
        TR_NON_STOP,
        TR_MOD1_ACTIVE,
        TR_MOD2_ACTIVE,
        TR_MOD3_ACTIVE,
        TR_MOD4_ACTIVE,
        TR_MOD5_ACTIVE,
        TR_MOD6_ACTIVE,
        TR_MOD7_ACTIVE,
        TR_MOD8_ACTIVE
      );
    
      Gpo_mode_t = (
        NON_INVERTED_OUTPUT,
        INVERTED_OUTPUT
      );
    
      Gpo_type_t = (
        CONTINUES,
        PULSE_BY_ON,
        PULSE_BY_OFF,
        PULSE_BY_ON_OFF
      );
    
      Selected_src_t = (
          SRC_LINE,
          SRC_MIC_USB_VOIP
      );
    
      Time_unit_t = (
        SECONDS,
        MINUTES
      );
    
      Audio_src_t = (
        PROG_LEFT,
        PROG_RIGHT,
        PROG_STEREO
      );
    
      Silence_detection_t = (
        IDLE,
        ALARM
      );
    
      Track_t = (
        TRACK_STOPPED,
        TRACK_PLAYING,
        TRACK_ENDING
      );
    
      State_t = (
        INACTIVE,
        ACTIVE
      );
    
      //***********************************************************************/
      // DATA STRUCTURES														*/
      //***********************************************************************/
      Version_st = packed record
        major: integer;
        minor: integer;
        build: integer;
        revision: integer;
      end;
    
    
      Gpo_st = packed record
        trigger: Gpo_trigger_t;
        mode: Gpo_mode_t;
        _type: Gpo_type_t;
        time: Byte;
      end;
    
      const
        CUE_RESET_ENABLED_BY_LINE           = $01;
        CUE_RESET_ENABLED_BY_MIC_USB_VOIP   = $02;
        CUE_RESET_BY_FADER                  = $04;
        CUE_RESET_BY_ON                     = $08;
        CUE_RESET_BY_FADER_AND_ON           = $10;
    
      type
        Cue_reset_config_st = Byte;
    
      const
        ON_AIR1_ENABLED_BY_LINE             = $01;
        ON_AIR1_ENABLED_BY_MIC_USB_VOIP     = $02;
        ON_AIR2_ENABLED_BY_LINE             = $04;
        ON_AIR2_ENABLED_BY_MIC_USB_VOIP     = $08;
    
      type
        On_air_config_st = byte;
    
      const
        STUDIO_REMOTE_COUGH_ENABLE          = $01;
        STUDIO_REMOTE_COMM_ENABLE           = $02;
        STUDIO_REMOTE_COMM_PRIVATE          = $04;
    
      type
        Studio_remote_config_st = Byte;
    
      Cue_st = packed record
          active: Color_t;
          inactive: Color_t;
      end;
    
    
      On_st = packed record
        on_active: Color_t;
        on_and_fader_active: Color_t;
        inactive: Color_t;
      end;
    
      Firmware_st = packed record
        major: Byte;
        minor: Byte;
        version: array[0..99] of AnsiChar;
      end;
    
      Ctrl_led_st = packed record
        id: Ctrl_id_t;
        color: Color_t;
      end;
    
      Ctrl_led_blink_st = packed record
        id: Ctrl_id_t;
        color_on: Color_t;
        color_off: Color_t;
        speed: Ctrl_blink_t;
      end;
    
      Ctrl_switch_st = packed record
        sw_states: Word;
      end;
    
      Module_1_8_st = packed record
        module1: State_t;
        module2: State_t;
        module3: State_t;
        module4: State_t;
        module5: State_t;
        module6: State_t;
        module7: State_t;
        module8: State_t;
      end;
    
    
      Module_1_3_st = packed record
        module1: State_t;
        module2: State_t;
        module3: State_t;
      end;
    
      State_cue_st = packed record
        module1:   State_t;
        module2:   State_t;
        module3:   State_t;
        module4:   State_t;
        module5:   State_t;
        module6:   State_t;
        module7:   State_t;
        module8:   State_t;
        aux:       State_t;
        nonstop: 	 State_t;
        air: 	     State_t;
      end;
    
      Config_cue_reset_st = packed record
        module1: Cue_reset_config_st;
        module2: Cue_reset_config_st;
        module3: Cue_reset_config_st;
        module4: Cue_reset_config_st;
        module5: Cue_reset_config_st;
        module6: Cue_reset_config_st;
        module7: Cue_reset_config_st;
        module8: Cue_reset_config_st;
      end;
    
      Config_on_air_st = packed record
        module1: On_air_config_st;
        module2: On_air_config_st;
        module3: On_air_config_st;
        module4: On_air_config_st;
        module5: On_air_config_st;
        module6: On_air_config_st;
        module7: On_air_config_st;
        module8: On_air_config_st;
      end;
    
      Config_studio_remote_st = packed record
          module1: Studio_remote_config_st;
          module2: Studio_remote_config_st;
          module3: Studio_remote_config_st;
      end;
    
      Config_gpo_st = packed record
          gpo1: Gpo_st;
          gpo2: Gpo_st;
      end;
    
      Config_cue_st = packed record
        module1:   Cue_st ;
        module2:   Cue_st ;
        module3:   Cue_st ;
        module4:   Cue_st ;
        module5:   Cue_st ;
        module6:   Cue_st ;
        module7:   Cue_st ;
        module8:   Cue_st ;
        aux: Cue_st;
        nonstop: Cue_st;
        air: Cue_st;
      end;
    
      Config_on_st = packed record
        module1: On_st;
        module2: On_st;
        module3: On_st;
        module4: On_st;
        module5: On_st;
        module6: On_st;
        module7: On_st;
        module8: On_st;
      end;
    
      State_auto_cue_st = packed record
        auto_cue_crm: State_t;
        auto_cue_announcer: State_t;
      end;
    
      State_src_sel_st = packed record
          module1: Selected_src_t;
          module2: Selected_src_t;
          module3: Selected_src_t;
          module4: Selected_src_t;
          module5: Selected_src_t;
          module6: Selected_src_t;
          module7: Selected_src_t;
          module8: Selected_src_t;
      end;
    
      State_st = packed record
        state: State_t;
      end;
    
      State_gpo_st = packed record
           gpo1: State_t;
           gpo2: State_t;
      end;
    
      State_on_air_st = packed record
         on_air1:  State_t;
         on_air2:  State_t;
      end;
    
      Config_silence_detection_st = packed record
        threshold: char;
        interval: Byte;
        interval_unit: Time_unit_t;
        source: Audio_src_t;
        config: Config_t;
      end;
    
      State_silence_detection_st = packed record
        state: Silence_detection_t;
      end;
    
      State_track_st = packed record
         module1: Track_t;
         module2: Track_t;
         module3: Track_t;
         module4: Track_t;
         module5: Track_t;
         module6: Track_t;
         module7: Track_t;
         module8: Track_t;
      end;
    
      Metering_st = packed record
        prog_left_db: Single;
        prog_right_db: Single;
        phones_left_db: Single;
        phones_right_db: Single;
        crm_left_db: Single;
        crm_right_db: Single;
      end;
    
      (*************************************************************************/
      /* UNION (used to cast the callback data to the corresponding structure) */
      /*************************************************************************)
      Callback_data_t = packed record
        case integer of
           0: (FIRMWARE:                  ^Firmware_st);
           1: (CTRL_LED:                  ^Ctrl_led_st);
           2: (CTRL_LED_BLINK:            ^Ctrl_led_blink_st);
           3: (CTRL_SWITCH:               ^Ctrl_switch_st);
           4: (CONFIG_AUTO_ON:            ^Module_1_8_st);
           5: (CONFIG_CUE_RESET:          ^Config_cue_reset_st);
           6: (CONFIG_ON_AIR:             ^Config_on_air_st);
           7: (CONFIG_CRM_MUTE:           ^Module_1_3_st);
           8: (CONFIG_CRM_AUTO_CUE_RESET: ^Module_1_3_st);
           9: (CONFIG_STUDIO_REMOTE:      ^Config_studio_remote_st);
          10: (CONFIG_CUE_INTERLOCK:      ^State_st);
          11: (CONFIG_GPO:                ^Config_gpo_st);
          12: (CONFIG_CUE:                ^Config_cue_st);
          13: (CONFIG_ON:                 ^Config_on_st);
          14: (CONFIG_FADER_RESERVE:      ^Module_1_8_st);
          15: (CONFIG_SILENCE_DETECTION:  ^Config_silence_detection_st);
          16: (CONFIG_PHANTOM:            ^Module_1_3_st);
          17: (CONFIG_MIC_AT_LINE:        ^Module_1_3_st);
          18: (CONFIG_AUTO_OFF:           ^Module_1_8_st);
          19: (STATE_ON:                  ^Module_1_8_st);
          20: (STATE_CUE:                 ^State_cue_st);
          21: (STATE_FADER:               ^Module_1_8_st);
          22: (STATE_AUTO_CUE:            ^State_auto_cue_st);
          23: (STATE_SRC_SEL:             ^State_src_sel_st);
          24: (STATE_NON_STOP:            ^State_st);
          25: (STATE_MIC_ON:              ^State_st);
          26: (STATE_GPO:                 ^State_gpo_st);
          27: (STATE_ON_AIR:              ^State_on_air_st);
          28: (STATE_SILENCE_DETECTION:   ^State_silence_detection_st);
          29: (STATE_MODULE:              ^Module_1_8_st);
          30: (STATE_CRM_MUTE:            ^State_st);
          31: (STATE_TRACK:               ^State_track_st);
          32: (STATE_COMM:                ^Module_1_3_st);
          33: (STATE_COUGH:               ^Module_1_3_st);
          34: (STATE_VT:                  ^Module_1_8_st);
          35: (STATE_PHONE_RINGING:       ^State_st);
          36: (METERING:                  ^Metering_st);
      end;
    
    
      Callback_st = packed record
        id: Callback_id_t;
        _type: Callback_type_t;
        data: Callback_data_t;
      end;
    
      //* Airlite callback prototype */
      AIRLITE_CB = procedure(var cb: Callback_st; userdata: pointer);
      //typedef	void(*AIRLITE_CB)( Callback_st *cb, void *userdata );
      //* Airlite HANDLE */
      __AIRLITE_HANDLE = THandle;
      AIRLITE_HANDLE = ^__AIRLITE_HANDLE;
    
    
    
    const
      AIRLITE_API_VERSION_MAJOR		 = 1;
      AIRLITE_API_VERSION_MINOR		 = 1;
      AIRLITE_API_VERSION_BUILD		 = 64;
      AIRLITE_API_VERSION_REVISION = 0;
    
    
      function airlite_library_version(var version: Version_st): PByte; cdecl; external 'airlite.dll';
    
      //**************************************************************************************/
    
      //* SETUP                															  */
      //**************************************************************************************/
      function airlite_open(var remotehost: byte; udp_recv_port: Word;	udp_send_port: Word ): AIRLITE_HANDLE; cdecl; external 'airlite.dll';
      function airlite_close(handle: AIRLITE_HANDLE): Integer; cdecl; external 'airlite.dll';
    
      function airlite_register_callback(handle: AIRLITE_HANDLE; callback: AIRLITE_CB; userdata: Pointer): Integer; cdecl; external 'airlite.dll';
      function airlite_unregister_callback(handle: AIRLITE_HANDLE): Integer; cdecl; external 'airlite.dll';
    
    
      //**************************************************************************************/
    
      //* REQUEST       																	  */
      //**************************************************************************************/
      function airlite_request(handle: AIRLITE_HANDLE; request: Request_t): Integer; cdecl; external 'airlite.dll';
    
    
      //**************************************************************************************/
    
      //* CONTROL SECTION         															  */
      //**************************************************************************************/
      function airlite_ctrl_led(handle: AIRLITE_HANDLE; id: Ctrl_id_t; color: Color_t): Integer; cdecl; external 'airlite.dll';
    
      function airlite_ctrl_led_blink(handle: AIRLITE_HANDLE; id: Ctrl_id_t; color_on, color_off: Color_t; blink_speed: Ctrl_blink_t): Integer; cdecl; external 'airlite.dll';
    
      //**************************************************************************************/
      //* REMOTE CONTROL          															  */
      //**************************************************************************************/
      function airlite_remote_on(handle: AIRLITE_HANDLE; module: Module_t; action: Action_t): Integer; cdecl; external 'airlite.dll';
      function airlite_remote_cue(handle: AIRLITE_HANDLE; cue: Cue_t;action: Action_t): Integer; cdecl; external 'airlite.dll';
      function airlite_remote_cue_reset(handle: AIRLITE_HANDLE): Integer; cdecl; external 'airlite.dll';
      function airlite_remote_auto_cue_announcer(handle: AIRLITE_HANDLE; action: Action_t): Integer; cdecl; external 'airlite.dll';
      function airlite_remote_auto_cue_crm(handle: AIRLITE_HANDLE; action: Action_t): Integer; cdecl; external 'airlite.dll';
      function airlite_remote_non_stop(handle: AIRLITE_HANDLE; action: Action_t): Integer; cdecl; external 'airlite.dll';
      function airlite_remote_comm(handle: AIRLITE_HANDLE; module: Module_t; action: Action_t): Integer; cdecl; external 'airlite.dll';
      function airlite_remote_cough(handle: AIRLITE_HANDLE; module: Module_t; action: Action_t): Integer; cdecl; external 'airlite.dll';
      function airlite_remote_vt(handle: AIRLITE_HANDLE; module: Module_t; action: Action_t): Integer; cdecl; external 'airlite.dll';
    
      //**************************************************************************************/
      //* CONFIGURATION           															  */
      //**************************************************************************************/
      function airlite_config_save(handle: AIRLITE_HANDLE): integer; cdecl; external 'airlite.dll';
      function airlite_config_auto_on(handle: AIRLITE_HANDLE; module: Module_t; config: Config_t): Integer; cdecl; external 'airlite.dll';
      function airlite_config_cue_reset(handle: AIRLITE_HANDLE; module: Module_t; flags: Byte): Integer; cdecl; external 'airlite.dll';
      function airlite_config_on_air(handle: AIRLITE_HANDLE; module: Module_t; flags: Byte): Integer; cdecl; external 'airlite.dll';
      function airlite_config_crm_mute(handle: AIRLITE_HANDLE; module: Module_t; config: Config_t): Integer; cdecl; external 'airlite.dll';
      function airlite_config_crm_auto_cue_reset(handle: AIRLITE_HANDLE; module: Module_t; config: Config_t): Integer; cdecl; external 'airlite.dll';
      function airlite_config_studio_remote(handle: AIRLITE_HANDLE; module:Module_t; flags: Byte): Integer; cdecl; external 'airlite.dll';
      function airlite_config_phantom(handle: AIRLITE_HANDLE; module:Module_t; config: Config_t): Integer; cdecl; external 'airlite.dll';
      function airlite_config_mic_at_line(handle: AIRLITE_HANDLE; module:Module_t; config: Config_t): Integer; cdecl; external 'airlite.dll';
      function airlite_config_auto_off(handle: AIRLITE_HANDLE; module:Module_t; config: Config_t): Integer; cdecl; external 'airlite.dll';
      function airlite_config_cue_interlock(handle: AIRLITE_HANDLE; config: Config_t): Integer; cdecl; external 'airlite.dll';
      function airlite_config_gpo(handle: AIRLITE_HANDLE; gpo: Gpo_t; trigger: Gpo_trigger_t; mode: Gpo_mode_t; _type: Gpo_type_t; time: Byte): Integer; cdecl; external 'airlite.dll';
      function airlite_config_cue(handle: AIRLITE_HANDLE; cue: Cue_t; active: Color_t; inactive: Color_t): Integer; cdecl; external 'airlite.dll';
      function airlite_config_on(handle: AIRLITE_HANDLE; module: Module_t; active, active_and_fader, inactive: Color_t): Integer; cdecl; external 'airlite.dll';
      function airlite_config_fader_reserve(handle: AIRLITE_HANDLE; module: Module_t; config: Config_t): Integer; cdecl; external 'airlite.dll';
      function airlite_config_silence_detection(handle: AIRLITE_HANDLE; threshold: ShortInt; interval: Byte; interval_unit: Time_unit_t; source: Audio_src_t; config: Config_t): Integer; cdecl; external 'airlite.dll';
    
      //**************************************************************************************/
      //* MISCELLANEOUS
      //**************************************************************************************/
      function airlite_authenticate(handle: AIRLITE_HANDLE; key: Integer; data: Pointer; len: Integer): Integer; cdecl; external 'airlite.dll'; // len must be multiple of 16
      function airlite_track_state(handle: AIRLITE_HANDLE; module: Module_t; state: Track_t): Integer; cdecl; external 'airlite.dll';
      function airlite_get_last_error(handle: AIRLITE_HANDLE): PANsiChar; cdecl; external 'airlite.dll';
      procedure airlite_logging(handle: AIRLITE_HANDLE; state: Boolean); cdecl; external 'airlite.dll';
    
    
    implementation
    
    end.
    Alvast bedankt, Patrick

  4. #19
    Bedankt Patrick voor het delen.
    Eens kijken of ik een versie string eruit kan toveren.


    PS: als je nog een klein demo progje hebt dan is dat fijn aangezien ik geen Air mengpaneel hier heb liggen.
    Last edited by DragonFly; 30-Jun-22 at 11:25.

  5. #20
    Quote Originally Posted by DragonFly View Post
    PS: als je nog een klein demo progje hebt dan is dat fijn aangezien ik geen Air mengpaneel hier heb liggen.
    Dan moet ik van het weekend even hobby-en. Zo even uit de automatisering trekken, kom je ook niet verder mee dan.
    Overigens: Wanneer je met C/C++ gecompileerde dll's te maken hebt, gebruik dan liever cdecl i.p.v. stdcall.
    Alvast bedankt, Patrick

  6. #21
    Zag inderdaad cdecl staan en werkt voor zover compileren. Bedankt voor de TIP i.v.m stdcall. Waarschijnlijk liep die daarom vast bij airlite_close :-)
    Ik kan de demo EXE als test sturen naar een kennis die deze AIR heeft. Wat dan verder moet gebeuren is een tweede.
    Denk wat betreft mijn FinalPlayer niemand de AIRLITE gebruikt.

    Als je nog iets uit de FinalPlayer wilt gebruiken dan is dat geen probleem maar aangezien jouw programma weet je het allemaal wel
    Groetjes.

Page 2 of 2 FirstFirst 1 2

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •