REM >BoxConst REM Hard-coded constants, global variables and "takeover" for particular boxes REM Note - all boxes numbered from 1, not zero. REM REM sucrose - original boxes with dippers/traylights/IR REM pellet - original boxes with pellet dispensers/centrelight REM intermediate - pellet boxes, plus dippers/IR REM combined - all boxes (dippers/pellet/traylight/centrelight/IR/clicker) REM yiaping - *UNTESTED* YPL's boxes REM five_hole_boxes - (added 29 May 99) Filippo/Anastasia's 5-choice boxes REM five_hole_boxes_yogi - 1 July 99 - Yogita, six boxes REM ======================================================================== DEF PROCcombined_boxes REM ======================================================================== nboxes% = 4 nlines% = 13 houselight_line% = 0 traylight_line% = 1 leftlight_line% = 2 centrelight_line% = 3 rightlight_line% = 4 clicker_line% = 5 pellet_line% = 6 dipper_line% = 7 leftlevercontrol_line% = 8 rightlevercontrol_line% = 9 leftlever_line% = 10 rightlever_line% = 11 nosepoke_line% = 12 REM Global variables defined. DIM nosepoke%(nboxes%), leftlever%(nboxes%), rightlever%(nboxes%) DIM houselight%(nboxes%), centrelight%(nboxes%) DIM leftlight%(nboxes%), rightlight%(nboxes%) DIM traylight%(nboxes%), clicker%(nboxes%) DIM pellet%(nboxes%), dipper%(nboxes%) DIM leftlevercontrol%(nboxes%), rightlevercontrol%(nboxes%) LOCAL box% FOR box% = 1 TO nboxes% REM Assign switch lines to arrays nosepoke%(box%) = FNswitch_number(box%,nosepoke_line%,nboxes%) leftlever%(box%) = FNswitch_number(box%,leftlever_line%,nboxes%) rightlever%(box%) = FNswitch_number(box%,rightlever_line%,nboxes%) houselight%(box%) = FNswitch_number(box%,houselight_line%,nboxes%) centrelight%(box%) = FNswitch_number(box%,centrelight_line%,nboxes%) leftlight%(box%) = FNswitch_number(box%,leftlight_line%,nboxes%) rightlight%(box%) = FNswitch_number(box%,rightlight_line%,nboxes%) traylight%(box%) = FNswitch_number(box%,traylight_line%,nboxes%) clicker%(box%) = FNswitch_number(box%,clicker_line%,nboxes%) pellet%(box%) = FNswitch_number(box%,pellet_line%,nboxes%) dipper%(box%) = FNswitch_number(box%,dipper_line%,nboxes%) leftlevercontrol%(box%) = FNswitch_number(box%,leftlevercontrol_line%,nboxes%) rightlevercontrol%(box%) = FNswitch_number(box%,rightlevercontrol_line%,nboxes%) REM Take control of output lines; watch input lines PROCfree_switch(nosepoke%(box%),E%) PROCfree_switch(leftlever%(box%),E%) PROCfree_switch(rightlever%(box%),E%) PROCgovn_switch(houselight%(box%),E%) PROCgovn_switch(centrelight%(box%),E%) PROCgovn_switch(traylight%(box%),E%) PROCgovn_switch(clicker%(box%),E%) PROCgovn_switch(dipper%(box%),E%) PROCgovn_switch(pellet%(box%),E%) PROCgovn_switch(leftlevercontrol%(box%),E%) PROCgovn_switch(rightlevercontrol%(box%),E%) PROCgovn_switch(leftlight%(box%),E%) PROCgovn_switch(rightlight%(box%),E%) NEXT ENDPROC REM ======================================================================== DEF PROCintermediate_boxes REM ======================================================================== nboxes% = 4 nlines% = 11 :REM not counting ?traylight, clicker leftlever_line% = 0 rightlever_line% = 1 nosepoke_line% = 2 :REM magazine entry photodiode leftlevercontrol_line% = 3 rightlevercontrol_line% = 4 pellet_line% = 5 dipper_line% = 6 leftlight_line% = 7 rightlight_line% = 8 centrelight_line% = 9 houselight_line% = 10 REM Global variables defined. DIM nosepoke%(nboxes%), leftlever%(nboxes%), rightlever%(nboxes%) DIM houselight%(nboxes%), centrelight%(nboxes%) DIM leftlight%(nboxes%), rightlight%(nboxes%) DIM pellet%(nboxes%), dipper%(nboxes%) DIM leftlevercontrol%(nboxes%), rightlevercontrol%(nboxes%) LOCAL box% FOR box% = 1 TO nboxes% REM Assign switch lines to arrays nosepoke%(box%) = FNswitch_number(box%,nosepoke_line%,nboxes%) leftlever%(box%) = FNswitch_number(box%,leftlever_line%,nboxes%) rightlever%(box%) = FNswitch_number(box%,rightlever_line%,nboxes%) houselight%(box%) = FNswitch_number(box%,houselight_line%,nboxes%) centrelight%(box%) = FNswitch_number(box%,centrelight_line%,nboxes%) leftlight%(box%) = FNswitch_number(box%,leftlight_line%,nboxes%) rightlight%(box%) = FNswitch_number(box%,rightlight_line%,nboxes%) pellet%(box%) = FNswitch_number(box%,pellet_line%,nboxes%) dipper%(box%) = FNswitch_number(box%,dipper_line%,nboxes%) leftlevercontrol%(box%) = FNswitch_number(box%,leftlevercontrol_line%,nboxes%) rightlevercontrol%(box%) = FNswitch_number(box%,rightlevercontrol_line%,nboxes%) REM Take control of output lines; watch input lines PROCfree_switch(nosepoke%(box%),E%) PROCfree_switch(leftlever%(box%),E%) PROCfree_switch(rightlever%(box%),E%) PROCgovn_switch(houselight%(box%),E%) PROCgovn_switch(centrelight%(box%),E%) PROCgovn_switch(dipper%(box%),E%) PROCgovn_switch(pellet%(box%),E%) PROCgovn_switch(leftlevercontrol%(box%),E%) PROCgovn_switch(rightlevercontrol%(box%),E%) PROCgovn_switch(leftlight%(box%),E%) PROCgovn_switch(rightlight%(box%),E%) NEXT ENDPROC REM ======================================================================== DEF PROCsucrose_boxes REM ======================================================================== nboxes% = 4 :REM boxes nlines% = 10 :REM switches per box houselight_line% = 0 :REM switch assignments traylight_line% = 1 dipper_line% = 2 nosepoke_line% = 3 :REM magazine entry photodiode leftlevercontrol_line% = 4 :REM spare1=left lever control rightlevercontrol_line% = 5 :REM spare3=right lever control leftlever_line% = 6 rightlever_line% = 7 leftlight_line% = 8 rightlight_line% = 9 REM Global variables defined. DIM nosepoke%(nboxes%), leftlever%(nboxes%), rightlever%(nboxes%) DIM houselight%(nboxes%), traylight%(nboxes%) DIM leftlight%(nboxes%), rightlight%(nboxes%) DIM pellet%(nboxes%), dipper%(nboxes%) DIM leftlevercontrol%(nboxes%), rightlevercontrol%(nboxes%) LOCAL box% FOR box% = 1 TO nboxes% REM Assign switch lines to arrays nosepoke%(box%) = FNswitch_number(box%,nosepoke_line%,nboxes%) leftlever%(box%) = FNswitch_number(box%,leftlever_line%,nboxes%) rightlever%(box%) = FNswitch_number(box%,rightlever_line%,nboxes%) houselight%(box%) = FNswitch_number(box%,houselight_line%,nboxes%) traylight%(box%) = FNswitch_number(box%,traylight_line%,nboxes%) leftlight%(box%) = FNswitch_number(box%,leftlight_line%,nboxes%) rightlight%(box%) = FNswitch_number(box%,rightlight_line%,nboxes%) dipper%(box%) = FNswitch_number(box%,dipper_line%,nboxes%) leftlevercontrol%(box%) = FNswitch_number(box%,leftlevercontrol_line%,nboxes%) rightlevercontrol%(box%) = FNswitch_number(box%,rightlevercontrol_line%,nboxes%) REM Take control of output lines; watch input lines PROCfree_switch(nosepoke%(box%),E%) PROCfree_switch(leftlever%(box%),E%) PROCfree_switch(rightlever%(box%),E%) PROCgovn_switch(houselight%(box%),E%) PROCgovn_switch(traylight%(box%),E%) PROCgovn_switch(dipper%(box%),E%) PROCgovn_switch(leftlevercontrol%(box%),E%) PROCgovn_switch(rightlevercontrol%(box%),E%) PROCgovn_switch(leftlight%(box%),E%) PROCgovn_switch(rightlight%(box%),E%) NEXT ENDPROC REM ======================================================================== DEF PROCpellet_boxes REM ======================================================================== nboxes% = 4 :REM boxes nlines% = 9 :REM switches per box REM output lines houselight_line% = 0 centrelight_line% = 1 pellet_line% = 2 :REM now, it's the pellet dispenser leftlevercontrol_line% = 3 rightlevercontrol_line% = 4 leftlight_line% = 5 rightlight_line% = 6 REM input lines leftlever_line% = 7 rightlever_line% = 8 REM Global variables defined. DIM leftlever%(nboxes%), rightlever%(nboxes%) DIM houselight%(nboxes%), centrelight%(nboxes%) DIM leftlight%(nboxes%), rightlight%(nboxes%) DIM pellet%(nboxes%), dipper%(nboxes%) DIM leftlevercontrol%(nboxes%), rightlevercontrol%(nboxes%) LOCAL box% FOR box% = 1 TO nboxes% REM Assign switch lines to arrays leftlever%(box%) = FNswitch_number(box%,leftlever_line%,nboxes%) rightlever%(box%) = FNswitch_number(box%,rightlever_line%,nboxes%) houselight%(box%) = FNswitch_number(box%,houselight_line%,nboxes%) centrelight%(box%) = FNswitch_number(box%,centrelight_line%,nboxes%) leftlight%(box%) = FNswitch_number(box%,leftlight_line%,nboxes%) rightlight%(box%) = FNswitch_number(box%,rightlight_line%,nboxes%) pellet%(box%) = FNswitch_number(box%,pellet_line%,nboxes%) leftlevercontrol%(box%) = FNswitch_number(box%,leftlevercontrol_line%,nboxes%) rightlevercontrol%(box%) = FNswitch_number(box%,rightlevercontrol_line%,nboxes%) REM Take control of output lines; watch input lines PROCfree_switch(leftlever%(box%),E%) PROCfree_switch(rightlever%(box%),E%) PROCgovn_switch(houselight%(box%),E%) PROCgovn_switch(centrelight%(box%),E%) PROCgovn_switch(pellet%(box%),E%) PROCgovn_switch(leftlevercontrol%(box%),E%) PROCgovn_switch(rightlevercontrol%(box%),E%) PROCgovn_switch(leftlight%(box%),E%) PROCgovn_switch(rightlight%(box%),E%) NEXT ENDPROC REM ======================================================================== DEF PROCyiaping_boxes REM ======================================================================== REM Yia-Ping's boxes, detail from e-mail 16 Dec 98. REM Three boxes, wired as REM 0=box1_nosepoke, 1=box1_lever... with 11 lines and then a gap REM until line 16 (16=box2_nosepoke, 17=box2_lever...) nboxes% = 3 nlines% = 16 nosepoke_line% = 0 leftlever_line% = 1 rightlever_line% = 2 leftlight_line% = 3 centrelight_line% = 4 rightlight_line% = 5 leftlevercontrol_line% = 6 rightlevercontrol_line% = 7 pellet_line% = 8 houselight_line% = 9 traylight_line% = 10 REM line numbers 11-15 unused. REM Global variables defined. DIM nosepoke%(nboxes%), leftlever%(nboxes%), rightlever%(nboxes%) DIM houselight%(nboxes%), centrelight%(nboxes%) DIM leftlight%(nboxes%), rightlight%(nboxes%) DIM traylight%(nboxes%) DIM pellet%(nboxes%) DIM leftlevercontrol%(nboxes%), rightlevercontrol%(nboxes%) LOCAL box% FOR box% = 1 TO nboxes% REM Assign switch lines to arrays nosepoke%(box%) = FNswitch_number_2(box%,nosepoke_line%,nlines%) leftlever%(box%) = FNswitch_number_2(box%,leftlever_line%,nlines%) rightlever%(box%) = FNswitch_number_2(box%,rightlever_line%,nlines%) houselight%(box%) = FNswitch_number_2(box%,houselight_line%,nlines%) centrelight%(box%) = FNswitch_number_2(box%,centrelight_line%,nlines%) leftlight%(box%) = FNswitch_number_2(box%,leftlight_line%,nlines%) rightlight%(box%) = FNswitch_number_2(box%,rightlight_line%,nlines%) traylight%(box%) = FNswitch_number_2(box%,traylight_line%,nlines%) pellet%(box%) = FNswitch_number_2(box%,pellet_line%,nlines%) leftlevercontrol%(box%) = FNswitch_number_2(box%,leftlevercontrol_line%,nlines%) rightlevercontrol%(box%) = FNswitch_number_2(box%,rightlevercontrol_line%,nlines%) REM Take control of output lines; watch input lines PROCfree_switch(nosepoke%(box%),E%) PROCfree_switch(leftlever%(box%),E%) PROCfree_switch(rightlever%(box%),E%) PROCgovn_switch(houselight%(box%),E%) PROCgovn_switch(centrelight%(box%),E%) PROCgovn_switch(traylight%(box%),E%) PROCgovn_switch(pellet%(box%),E%) PROCgovn_switch(leftlevercontrol%(box%),E%) PROCgovn_switch(rightlevercontrol%(box%),E%) PROCgovn_switch(leftlight%(box%),E%) PROCgovn_switch(rightlight%(box%),E%) NEXT ENDPROC REM ======================================================================== DEF PROCfive_hole_boxes REM ======================================================================== REM Filippo/Anastasia - five-hole boxes nboxes% = 4 nlines% = 16 nholes% = 5 first_aperturelight_line% = 0 : REM second-fifth are consecutive panelpush_line% = 5 traylight_line% = 6 tone_line% = 7 first_nosepoke_line% = 8 : REM second-fifth are consecutive houselight_line% = 13 pellet_line% = 14 DIM houselight%(nboxes%) DIM traylight%(nboxes%) DIM aperturelight%(nboxes%,nholes%) DIM pellet_dispenser%(nboxes%) DIM tone%(nboxes%) DIM nosepoke%(nboxes%,nholes%) DIM panelpush%(nboxes%) FOR box% = 1 TO nboxes% houselight%(box%) = FNswitch_number_2(box%, houselight_line%,nlines%) traylight%(box%) = FNswitch_number_2(box%, traylight_line%, nlines%) FOR hole% = 1 TO nholes% aperturelight%(box%, hole%) = FNswitch_number_2(box%, first_aperturelight_line% + hole% - 1, nlines%) nosepoke%(box%, hole%) = FNswitch_number_2(box%, first_nosepoke_line% + hole% - 1, nlines%) NEXT pellet_dispenser%(box%) = FNswitch_number_2(box%, pellet_line%,nlines%) tone%(box%) = FNswitch_number_2(box%, tone_line%,nlines%) panelpush%(box%) = FNswitch_number_2(box%, panelpush_line%,nlines%) PROCgovn_switch(houselight%(box%),E%) PROCgovn_switch(traylight%(box%),E%) FOR hole% = 1 TO nholes% PROCgovn_switch(aperturelight%(box%, hole%),E%) PROCfree_switch(nosepoke%(box%, hole%),E%) NEXT PROCgovn_switch(pellet_dispenser%(box%),E%) PROCgovn_switch(tone%(box%),E%) PROCfree_switch(panelpush%(box%),E%) NEXT ENDPROC REM ======================================================================== DEF PROCfive_hole_boxes_yogi REM ======================================================================== nboxes% = 6 nlines% = 16 nholes% = 5 first_aperturelight_line% = 0 : REM second-fifth are consecutive panelpush_line% = 5 traylight_line% = 6 tone_line% = 7 first_nosepoke_line% = 8 : REM second-fifth are consecutive houselight_line% = 13 pellet_line% = 14 DIM houselight%(nboxes%) DIM traylight%(nboxes%) DIM aperturelight%(nboxes%,nholes%) DIM pellet_dispenser%(nboxes%) DIM tone%(nboxes%) DIM nosepoke%(nboxes%,nholes%) DIM panelpush%(nboxes%) FOR box% = 1 TO nboxes% houselight%(box%) = FNswitch_number_2(box%, houselight_line%,nlines%) traylight%(box%) = FNswitch_number_2(box%, traylight_line%, nlines%) FOR hole% = 1 TO nholes% aperturelight%(box%, hole%) = FNswitch_number_2(box%, first_aperturelight_line% + hole% - 1, nlines%) nosepoke%(box%, hole%) = FNswitch_number_2(box%, first_nosepoke_line% + hole% - 1, nlines%) NEXT pellet_dispenser%(box%) = FNswitch_number_2(box%, pellet_line%,nlines%) tone%(box%) = FNswitch_number_2(box%, tone_line%,nlines%) panelpush%(box%) = FNswitch_number_2(box%, panelpush_line%,nlines%) PROCgovn_switch(houselight%(box%),E%) PROCgovn_switch(traylight%(box%),E%) FOR hole% = 1 TO nholes% PROCgovn_switch(aperturelight%(box%, hole%),E%) PROCfree_switch(nosepoke%(box%, hole%),E%) NEXT PROCgovn_switch(pellet_dispenser%(box%),E%) PROCgovn_switch(tone%(box%),E%) PROCfree_switch(panelpush%(box%),E%) NEXT ENDPROC REM ======================================================================== DEF PROCrhq_boxes REM ======================================================================== nboxes% = 6 nlines% = 13 houselight_line% = 0 traylight_line% = 1 dipper_line% = 2 nosepoke_line% = 3 leftlevercontrol_line% = 4 rightlevercontrol_line% = 5 leftlever_line% = 6 rightlever_line% = 7 leftlight_line% = 8 rightlight_line% = 9 pump_line% = 10 clicker_line% = 11 centrelight_line% = 12 REM Global variables defined. DIM nosepoke%(nboxes%), leftlever%(nboxes%), rightlever%(nboxes%) DIM houselight%(nboxes%), centrelight%(nboxes%) DIM leftlight%(nboxes%), rightlight%(nboxes%) DIM traylight%(nboxes%), clicker%(nboxes%) DIM pump%(nboxes%), dipper%(nboxes%) DIM leftlevercontrol%(nboxes%), rightlevercontrol%(nboxes%) LOCAL box% FOR box% = 1 TO nboxes% REM Assign switch lines to arrays nosepoke%(box%) = FNswitch_number(box%,nosepoke_line%,nboxes%) leftlever%(box%) = FNswitch_number(box%,leftlever_line%,nboxes%) rightlever%(box%) = FNswitch_number(box%,rightlever_line%,nboxes%) houselight%(box%) = FNswitch_number(box%,houselight_line%,nboxes%) centrelight%(box%) = FNswitch_number(box%,centrelight_line%,nboxes%) leftlight%(box%) = FNswitch_number(box%,leftlight_line%,nboxes%) rightlight%(box%) = FNswitch_number(box%,rightlight_line%,nboxes%) traylight%(box%) = FNswitch_number(box%,traylight_line%,nboxes%) clicker%(box%) = FNswitch_number(box%,clicker_line%,nboxes%) pump%(box%) = FNswitch_number(box%,pump_line%,nboxes%) dipper%(box%) = FNswitch_number(box%,dipper_line%,nboxes%) leftlevercontrol%(box%) = FNswitch_number(box%,leftlevercontrol_line%,nboxes%) rightlevercontrol%(box%) = FNswitch_number(box%,rightlevercontrol_line%,nboxes%) REM Take control of output lines; watch input lines PROCfree_switch(nosepoke%(box%),E%) PROCfree_switch(leftlever%(box%),E%) PROCfree_switch(rightlever%(box%),E%) PROCgovn_switch(houselight%(box%),E%) PROCgovn_switch(centrelight%(box%),E%) PROCgovn_switch(traylight%(box%),E%) PROCgovn_switch(clicker%(box%),E%) PROCgovn_switch(dipper%(box%),E%) PROCgovn_switch(pump%(box%),E%) PROCgovn_switch(leftlevercontrol%(box%),E%) PROCgovn_switch(rightlevercontrol%(box%),E%) PROCgovn_switch(leftlight%(box%),E%) PROCgovn_switch(rightlight%(box%),E%) NEXT ENDPROC REM ======================================================================== DEF PROCjeff_five_hole_boxes_for_yoking REM ======================================================================== REM Jeff - five-hole boxes nboxes% = 4 nlines% = 16 nholes% = 5 first_aperturelight_line% = 0 : REM second-fifth are consecutive panelpush_line% = 5 traylight_line% = 6 tone_line% = 7 first_nosepoke_line% = 8 : REM second-fifth are consecutive houselight_line% = 13 pellet_line% = 14 DIM houselight%(nboxes%) DIM traylight%(nboxes%) DIM aperturelight%(nboxes%,nholes%) DIM pellet_dispenser%(nboxes%) DIM tone%(nboxes%) DIM nosepoke%(nboxes%,nholes%) DIM panelpush%(nboxes%) FOR box% = 1 TO nboxes% houselight%(box%) = FNswitch_number_2(box%, houselight_line%,nlines%) traylight%(box%) = FNswitch_number_2(box%, traylight_line%, nlines%) FOR hole% = 1 TO nholes% aperturelight%(box%, hole%) = FNswitch_number_2(box%, first_aperturelight_line% + hole% - 1, nlines%) nosepoke%(box%, hole%) = FNswitch_number_2(box%, first_nosepoke_line% + hole% - 1, nlines%) NEXT pellet_dispenser%(box%) = FNswitch_number_2(box%, pellet_line%,nlines%) tone%(box%) = FNswitch_number_2(box%, tone_line%,nlines%) panelpush%(box%) = FNswitch_number_2(box%, panelpush_line%,nlines%) PROCgovn_switch(houselight%(box%),E%) PROCgovn_switch(traylight%(box%),E%) FOR hole% = 1 TO nholes% PROCgovn_switch(aperturelight%(box%, hole%),E%) PROCfree_switch(nosepoke%(box%, hole%),E%) NEXT PROCgovn_switch(pellet_dispenser%(box%),E%) PROCgovn_switch(tone%(box%),E%) PROCfree_switch(panelpush%(box%),E%) NEXT REM Also extra constants for defining groups of outputs (master + slaves). REM Inputs do not need this. REM Constants are defined so they do not overlap normal line numbers (for error-checking) houselight_group% = 991 traylight_group% = 992 aperturelight_group% = 993 tone_group% = 994 ENDPROC REM ======================================================================== DEF FNjeff_five_hole_get_line(linegroup%, box%, holenum%) REM ======================================================================== REM holenum% is ignored unless linegroup% = aperturelight_group% CASE linegroup% OF WHEN houselight_group%: =houselight%(box%) WHEN traylight_group%: =traylight%(box%) WHEN aperturelight_group%: =aperturelight%(box%, holenum%) WHEN tone_group%: =tone%(box%) OTHERWISE: VDU7:PRINTTAB(0,0);"*** Invalid input to FNjeff_five_hole_get_line() ***":END ENDCASE =0