REM >TestCBox REM ----------------------------- REM by Rudolf Cardinal, 21 Oct 97 REM Tests in/out lines on "combined" boxes REM REM 15 Jun 98 - modified for pellet boxes REM 16 Sep 98 - modified for modular/library system (wiring system #2) REM 24 Sep 98 - this version for combined, standardised boxes REM 17 Oct 98 - more modularisation REM ================================== REM Libraries REM ================================== PROCinit :REM Arachnid init PROCkill_all :REM Arachnid init LIBRARY ".ProgLibs.Arachnid" LIBRARY ".ProgLibs.BoxConst" PROCrhq_boxes DIM left_count%(nboxes%), right_count%(nboxes%), nosepoke_count%(nboxes%) REM ================================= REM Initialize screen REM ================================= MODE 8:CLS PRINT "TestBoxes; by Rudolf Cardinal, 21 Oct 97." PRINT "RHQ BOXES, 4 Nov 99." PRINT "Press Q to quit." PRINT PRINT PRINT "OUTPUT STATUS:" PRINT " A. Houselight" PRINT " B. Traylight" PRINT " C. Left stim. light" PRINT " D. Centre stim. light" PRINT " E. Right stim. light" PRINT " F. Clicker" PRINT " G. Pump" PRINT " H. Sucrose dipper" PRINT " I. Left lever control" PRINT " J. Right lever control" PRINT PRINT "INPUT COUNT:" PRINT " Nosepoke" PRINT " Left lever" PRINT " Right lever" PRINT PRINT "To operate, press 1-";nboxes%;" to control a box and A-G to switch an output." PRINT "Currently controlling box ." FOR box%=1 TO nboxes% PRINT TAB(29+7*(box%-1),4) "Box-";box% NEXT REM ========================================== REM Init hardware, assign events and run REM ========================================== PROCpipe_keybd(0,0,0,"FNkeyboard_handler(",0,E%) FOR box%=1 TO nboxes% PROCpipe_switch(leftlever%(box%),On,1,"FNleftlever(",box%,E%) PROCpipe_switch(rightlever%(box%),On,1,"FNrightlever(",box%,E%) PROCpipe_switch(nosepoke%(box%),On,1,"FNnosepoke(",box%,E%) NEXT dummy%=FNcurrent_box(1) REM --- PROCdebug_fnswitch:IFGET PROCwait(E%): *AE REM --- PROCdebug_fnswitch:IFGET PRINT TAB(0,23) END REM ============================================ REM ******************************************** REM ============================================ DEF FNkeyboard_handler(P%,R%) IF R%=0 =0 key% = GET IF key%>=ASC("a") AND key%<=ASC("z") THEN key%-=32 IF key%>=ASC("1") AND key%<=ASC("9") =FNcurrent_box(key%-ASC("0")) IF key% = ASC("A") =FNhouselight(current_box%) IF key% = ASC("B") =FNtraylight(current_box%) IF key% = ASC("C") =FNleftlight(current_box%) IF key% = ASC("D") =FNcentrelight(current_box%) IF key% = ASC("E") =FNrightlight(current_box%) IF key% = ASC("F") =FNclicker(current_box%) IF key% = ASC("G") =FNpump(current_box%) IF key% = ASC("H") =FNdipper(current_box%) IF key% = ASC("I") =FNleftlevercontrol(current_box%) IF key% = ASC("J") =FNrightlevercontrol(current_box%) IF key% = ASC("Q") =FNend(P%,R%) =0 DEF FNcurrent_box(box%) IF box%<1 OR box%>nboxes% =0 current_box%=box% PRINT TAB(26,23);current_box% =0 REM -------------------------------------- OUTPUTS DEF FNhouselight(box%) LOCAL i$ PROCswitch_over(houselight%(box%),E%) IF FNswitch(houselight%(box%),E%)=On THEN i$="X" ELSE i$=" " PRINT TAB(29+7*(box%-1),6); i$ =0 DEF FNtraylight(box%) LOCAL i$ PROCswitch_over(traylight%(box%),E%) IF FNswitch(traylight%(box%),E%)=On THEN i$="X" ELSE i$=" " PRINT TAB(29+7*(box%-1),7); i$ =0 DEF FNleftlight(box%) LOCAL i$ PROCswitch_over(leftlight%(box%),E%) IF FNswitch(leftlight%(box%),E%)=On THEN i$="X" ELSE i$=" " PRINT TAB(29+7*(box%-1),8); i$ =0 DEF FNcentrelight(box%) LOCAL i$ PROCswitch_over(centrelight%(box%),E%) IF FNswitch(centrelight%(box%),E%)=On THEN i$="X" ELSE i$=" " PRINT TAB(29+7*(box%-1),9); i$ =0 DEF FNrightlight(box%) LOCAL i$ PROCswitch_over(rightlight%(box%),E%) IF FNswitch(rightlight%(box%),E%)=On THEN i$="X" ELSE i$=" " PRINT TAB(29+7*(box%-1),10); i$ =0 DEF FNclicker(box%) LOCAL i$ PROCswitch_over(clicker%(box%),E%) IF FNswitch(clicker%(box%),E%)=On THEN i$="X" ELSE i$=" " PRINT TAB(29+7*(box%-1),11); i$ =0 DEF FNpump(box%) LOCAL i$ PROCswitch_over(pump%(box%),E%) IF FNswitch(pump%(box%),E%)=On THEN i$="X" ELSE i$=" " PRINT TAB(29+7*(box%-1),12); i$ =0 DEF FNdipper(box%) LOCAL i$ PROCswitch_over(dipper%(box%),E%) IF FNswitch(dipper%(box%),E%)=On THEN i$="X" ELSE i$=" " PRINT TAB(29+7*(box%-1),13); i$ =0 DEF FNleftlevercontrol(box%) LOCAL i$ PROCswitch_over(leftlevercontrol%(box%),E%) IF FNswitch(leftlevercontrol%(box%),E%)=On THEN i$="X" ELSE i$=" " PRINT TAB(29+7*(box%-1),14); i$ =0 DEF FNrightlevercontrol(box%) LOCAL i$ PROCswitch_over(rightlevercontrol%(box%),E%) IF FNswitch(rightlevercontrol%(box%),E%)=On THEN i$="X" ELSE i$=" " PRINT TAB(29+7*(box%-1),15); i$ =0 REM -------------------------------------- INPUTS DEF FNnosepoke(box%,R%) IF R%=0 =0 nosepoke_count%(box%)+=1 PRINT TAB(29+7*(box%-1),18); nosepoke_count%(box%) =0 DEF FNleftlever(box%,R%) IF R%=0 =0 left_count%(box%)+=1 PRINT TAB(29+7*(box%-1),19); left_count%(box%) =0 DEF FNrightlever(box%,R%) IF R%=0 =0 right_count%(box%)+=1 PRINT TAB(29+7*(box%-1),20); right_count%(box%) =0 REM -------------------------------------- DEF FNend(N%,R%) IF R%=0 =0 PROCkill_all =0 DEF PROCdebug_fnswitch FOR i%=0 TO 20 PROCswitch_on(i%,E%) A%=FNswitch(i%,E%) PRINT "FNswitch on line ";i%;" is ";A%;" with error ";E%;" ." NEXT ENDPROC