/* * ST Stepper Motor * (c) 1986 Antic Publishing * Version 073086 Wednesday * Written by Patrick Bass * * The purpose of this program is to explore creating * and manipulating a form while performing a job. * *---- Alcyon Include File -----------------*/ #include "stepper.h" #include "osbind.h" #define TRUE (1) #define FALSE (0) #define begin { #define end } #define wend } #define repeat } #define next } #define endif } #define not ! #define equals == #define does_not_equal != #define then #define CONSOL 2 #define PRINTER 0 #define DELAY for( i=0; i<1000; i++ ); #define LWGET(x) ( (int) *((int *)(x)) ) #define OB_W(x) ( box_address+(x)*sizeof(OBJECT)+20 ) #define OB_H(x) ( box_address+(x)*sizeof(OBJECT)+22 ) typedef struct object begin int ob_next; int ob_head; int ob_tail; unsigned int ob_type; unsigned int ob_flags; unsigned int ob_state; long ob_spec; int ob_x; int ob_y; int ob_width; int ob_heigth; end OBJECT; typedef struct text_edinfo begin long te_ptext; long te_ptmplt; long te_pvalid; int te_font; int te_junk1; int te_just; int te_color; int te_junk2; int te_thickness; int te_txtlen; int te_tmplen; end TEDINFO; /*---------------- Alcyon Declarations/Equates --------*/ int contrl[ 12 ], intin[ 256 ], ptsin[ 256 ], intout[ 256 ], ptsout[ 256 ], workin[]={ 1,1,1,1,1,1,1,1,1,1,2 }, workout[ 57 ], i, j, k, l, x, y, w, h, mtopx, mtopy, mbotx, mboty, t_x, t_y, t_w, t_h, b_x, b_y, b_w, b_h, c_x, c_y, c_w, c_h, s_x, s_y, s_w, s_h, top, bottom, current, speed, delay, drive, dum, gem_handle, button, pressed, finished, xdial, ydial, wdial, hdial; char topstring[ 20 ], botstring[ 20 ], currstring[ 20 ], speedstring[ 20 ], a, b, c, d; long box_address; /*-------------------------------------------------------------------*/ main() begin initialize(); do begin move_the_stepper_motor(); repeat while( not finished ); terminate(); end /*--------------------------------*/ initialize() begin appl_init(); gem_handle=graf_handle( &i, &i, &i, &i ); v_opnvwk( workin, &gem_handle, workout ); rsrc_load( "\STEPPER.RSC" ); rsrc_gaddr( 0, TREE1, &box_address ); a=5; b=6; c=10; d=9; graf_mouse( 0, 0L ); finished=FALSE; end /*--------------------------------*/ move_the_stepper_motor() begin x=0; y=0, w=10, h=10; form_center( box_address, &xdial, &ydial, &wdial, &hdial ); find_box_sizes(); form_dial ( 0, x, y, w, h, xdial, ydial, wdial, hdial ); form_dial ( 1, x, y, w, h, xdial, ydial, wdial, hdial ); objc_draw( box_address, TREE1, 2, xdial, ydial, wdial, hdial ); do begin button=form_do( box_address, 0 ); if( button equals MOVETOP )then move_top(); if( button equals MOVEBOT )then move_bottom(); if( button equals TOPUP )then d_topup(); if( button equals TOPDN )then d_topdn(); if( button equals BOTUP )then d_botup(); if( button equals BOTDN )then d_botdn(); if( button equals CURRUP )then d_curup(); if( button equals CURRDN )then d_curdn(); if( button equals SPEEDUP )then d_speup(); if( button equals SPEEDDN )then d_spedn(); repeat while( button does_not_equal QUIT ); form_dial( 2, x, y, w, h, xdial, ydial, wdial, hdial ); form_dial( 3, x, y, w, h, xdial, ydial, wdial, hdial ); finished=TRUE; end /*----------------------------------*/ find_box_sizes() begin objc_offset( box_address, TOPNUM, &t_x, &t_y ); t_w=( LWGET( OB_W( TOPNUM )))-1; t_h=( LWGET( OB_H( TOPNUM )))-1; objc_offset( box_address, BOTNUM, &b_x, &b_y ); b_w=( LWGET( OB_W( BOTNUM )))-1; b_h=( LWGET( OB_H( BOTNUM )))-1; objc_offset( box_address, CURRNUM, &c_x, &c_y ); c_w=( LWGET( OB_W( CURRNUM )))-1; c_h=( LWGET( OB_H( CURRNUM )))-1; objc_offset( box_address, SPEEDNUM, &s_x, &s_y ); s_w=( LWGET( OB_W( SPEEDNUM )))-1; s_h=( LWGET( OB_H( SPEEDNUM )))-1; end /*----------------------------------*/ d_topup() begin top=top+1; adjust( TOPNUM, top, &topstring, t_x, t_y, t_w, t_h ); end /*----------------------------------*/ d_topdn() begin if( top>bottom )then begin top=top-1; adjust( TOPNUM, top, &topstring, t_x, t_y, t_w, t_h ); if( top<=current )then begin current=top; d_curdn(); endif endif end /*----------------------------------*/ d_botup() begin if( bottom<top )then begin bottom=bottom+1; adjust( BOTNUM, bottom, &botstring, b_x, b_y, b_w, b_h ); if( bottom>=current )then begin current=bottom; d_curup(); endif endif end /*----------------------------------*/ d_botdn() begin bottom=bottom-1; adjust( BOTNUM, bottom, &botstring, b_x, b_y, b_w, b_h ); end /*----------------------------------*/ d_curup() begin int i; current=current+1; adjust( CURRNUM, current, &currstring, c_x, c_y, c_w, c_h ); Bconout( PRINTER, d ); DELAY Bconout( PRINTER, c ); DELAY Bconout( PRINTER, b ); DELAY Bconout( PRINTER, a ); DELAY end /*----------------------------------*/ d_curdn() begin int i; current=current-1; adjust( CURRNUM, current, &currstring, c_x, c_y, c_w, c_h ); Bconout( PRINTER, a ); DELAY Bconout( PRINTER, b ); DELAY Bconout( PRINTER, c ); DELAY Bconout( PRINTER, d ); DELAY end /*----------------------------------*/ d_speup() begin speed=speed+1; adjust( SPEEDNUM, speed, &speedstring, s_x, s_y, s_w, s_h ); end /*----------------------------------*/ d_spedn() begin if( speed>0 )then begin speed=speed-1; adjust( SPEEDNUM, speed, &speedstring, s_x, s_y, s_w, s_h ); endif end /*--------------------------------*/ adjust( object, variable, string, x, y, w, h ) int object, variable, x, y, w, h; char *string; begin ftoa( (float)variable, string, 0 ); set_text( box_address, object, string ); objc_draw( box_address, object, 1, x, y, w, h ); beep( 0, 1, 50 ); end /*--------------------------------*/ set_text( tree_address, obj_number, string_address ) OBJECT *tree_address; int obj_number; char *string_address; begin TEDINFO *obj_specification; obj_specification=(TEDINFO *)(tree_address+obj_number)->ob_spec; obj_specification->te_ptext=( string_address ); obj_specification->te_txtlen=( 4 ); end /*--------------------------------*/ move_top() begin int i, j, k, mx, my, pressed, key; for( i=current; i<top; i++ )begin graf_mkstate( &mx, &my, &pressed, &key ); if( pressed )then i=top; if( not pressed )then begin d_curup(); for( j=0; j<speed; j++ )begin for( k=0; k<500; k++ ); next endif next beep( 0, 2, 15000 ); beep( 0, 1, 15000 ); beep( 0, 2, 15000 ); end /*--------------------------------*/ move_bottom() begin int i, j, k, mx, my, pressed, key; for( i=current; i>bottom; i-- )begin graf_mkstate( &mx, &my, &pressed, &key ); if( pressed )then i=bottom; if( not pressed )then begin d_curdn(); for( j=0; j<speed; j++ )begin for( k=0; k<500; k++ ); next endif next beep( 0, 2, 15000 ); beep( 0, 1, 15000 ); beep( 0, 2, 15000 ); end /*--------------------------------*/ beep( notelo, notehi, delay ) char notehi; int notelo, delay; begin int portstate; Giaccess( 15, 8+128 ); Giaccess( 0, 128 ); portstate=Giaccess( portstate, 7 ); Giaccess( 60, 7+128 ); Giaccess( notelo, 0+128 ); Giaccess( notehi, 1+128 ); for( i=0; i<delay; i++ ); Giaccess( 0, 0+128 ); Giaccess( 0, 1+128 ); Giaccess( portstate, 7+128 ); Giaccess( 0, 8+128 ); end /*--------------------------------*/ terminate() begin rsrc_free(); v_clsvwk( gem_handle ); appl_exit(); end
Back to previous page