`8p NqNuBootsector protected by Antidotepuke'(*** wq/1 3@5`79;=?A C@E`GIKMOQ S@U`WY[]_a c@e`gkmoq s@uwy{} @` @ ` / @ ` /1 3@5`79;=?A C@E`GIKMOQ S@U`WY[]_a c@e`gkmoq s@uwy{} @` @ ` / @ ` 8000 ̀I ҀI DEMO ڀI-AST_BAS KFABASIC IISOFT BAS ITBASIC IIR TTP{I%UTO &cEADME @cDESKTOP INFk=c. I.. IILOW S ΀IZBUFFER S πI<4AMDISK S рIW1OGGLE S I!HEN S I"$"RINTNUMS 0IhANDLEBWS (4cp* AUTO program to select medium * or low resolution screen mode * By Andrew Richards * (c) Atari St User PEA prompt(PC) Print prompt MOVE.W #9,-(A7) TRAP #1 BDOS 9 ADD.L #6,A7 Tidy stack input MOVE.W #8,-(A7) Wait for key TRAP #1 BDOS 8 ADD.L #2,A7 Tidy stack AND.W #$DF,D0 Force upper case CMP.W #'L',D0 L pressed? BEQ low Yes CMP.W #'M',D0 M pressed? BNE input No - goto input MOVE.W #1,-(A7) Set medium res. BRA exit Skip next bit low MOVE.W #0,-(A7) Set low res. exit MOVE.L #-1,-(A7) Dummy parameter MOVE.L #-1,-(A7) Dummy parameter MOVE.W #5,-(A7) TRAP #14 XBIOS 5 ADD.L #12,A7 Tidy stack MOVE.W #0,-(A7) Return to Desktop TRAP #1 BDOS 1 prompt DC.B "*****************",13,10 DC.B "* *",13,10 DC.B "* Medium or Low *",13,10 DC.B "* resolution? *",13,10 DC.B "* *",13,10 DC.B "* Press M or L *",13,10 DC.B "* *",13,10 DC.B "*****************",13,10 DC.B 0 EVEN END palmode equ $448 vblqueue equ $456 nvbls equ $454 savptr equ $4a2 dumpflg equ $4ee term equ 0 conin equ 7 prntln equ 9 k_proces equ $31 malloc equ $48 setblock equ $4a bconout equ 3 setexec equ 5 bconstat equ 8 kbshift equ 11 getrez equ 4 supexec equ 38 prntout equ 5 prntstat equ $11 trap1 equ 33 buffer move.l 4(sp),a6 pea banner move.w #prntln,-(sp) trap #1 addq.l #6,sp pea init move.w #supexec,-(sp) trap #14 addq.l #6,sp tst.w buf_flg bpl no_err pea err_str move.w #prntln,-(sp) trap #1 addq.l #6,sp bra exit no_err bsr prnt_sz pea success move.w #prntln,-(sp) trap #1 addq.l #6,sp exit pea exit_str move.w #prntln,-(sp) trap #1 addq.l #6,sp move.w #conin,-(sp) trap #1 addq.l #2,sp tst.w buf_flg bmi no_buf clr.w -(sp) move.l #code_end-buffer,-(sp) move.w #k_proces,-(sp) trap #1 no_buf move.w #term,-(sp) trap #1 init bsr rels_mem tst.w buf_flg bmi initexit bsr get_size tst.w buf_flg bmi initexit bsr get_time bsr init_vbl tst.w buf_flg bmi initexit bsr get_mem tst.w buf_flg bmi initexit bsr setvec move.l vbl_adr,a0 move.l #buf_vbl,(a0) initexit rts rels_mem move.l $c(a6),d0 add.l $14(a6),d0 add.l $1c(a6),d0 add.l #$100,d0 move.l d0,-(sp) move.l a6,-(sp) clr.w -(sp) move.w #setblock,-(sp) trap #1 add.l #12,sp tst.l d0 bne rels_err rts rels_err subq.w #1,buf_flg pea blk_str move.w #prntln,-(sp) trap #1 addq.l #6,sp rts get_size lea $81(a6),a0 tst.b (a0)+ beq usage subq.l #1,a0 spc_loop cmp.b #' ',(a0)+ beq spc_loop subq.l #1,a0 cmp.b #' ',(a0) ble cmd_err move.l a0,a1 move.l a0,strt_adr clr.l d0 num_loop cmp.b #' ',(a1) bgt not_end clr.b (a1) bra end_str not_end cmp.b #'0',(a1) blt cmd_err cmp.b #'9',(a1)+ bgt cmd_err addq.l #1,d0 bra num_loop end_str cmp.b #2,d0 blt too_smll cmp.b #4,d0 bgt too_lrge move.l buf_size,d0 get_num mulu #10,d0 move.b (a0)+,d1 sub.b #'0',d1 add.l d1,d0 tst.b (a0) bne get_num move.l #10,d1 asl.l d1,d0 move.l d0,buf_size move.l #-1,-(sp) move.w #malloc,-(sp) trap #1 addq.l #6,sp cmp.l buf_size,d0 blt too_lrge rts usage sub.w #1,buf_flg pea usge_str move.w #prntln,-(sp) trap #1 addq.l #6,sp rts cmd_err sub.w #1,buf_flg pea cmd_str move.w #prntln,-(sp) trap #1 addq.l #6,sp rts too_smll sub.w #1,buf_flg pea smll_str move.w #prntln,-(sp) trap #1 addq.l #6,sp rts too_lrge sub.w #1,buf_flg pea lrge_str move.w #prntln,-(sp) trap #1 addq.l #6,sp rts get_time move.w #getrez,-(sp) trap #14 addq.l #2,sp move.w #70,d1 cmp.w #2,d0 beq got_time move.w #50,d1 cmp.w #0,palmode beq got_time move.w #60,d1 got_time mulu #30,d1 move.w d1,v_blank rts init_vbl move.l vblqueue,a0 move.w nvbls,d0 slt_loop tst.l (a0) beq free_slt addq.l #4,a0 dbra d0,slt_loop subq.w #1,buf_flg pea vbl_err move.w #prntln,-(sp) trap #1 addq.l #6,sp rts free_slt move.l a0,vbl_adr rts get_mem move.l buf_size,-(sp) move.w #malloc,-(sp) trap #1 addq.l #6,sp cmp.l #0,d0 bls mem_err move.l d0,buf_adr rts mem_err subq.w #1,buf_flg pea mem_str move.w #prntln,-(sp) trap #1 addq.l #6,sp rts setvec pea gemdos move.w #trap1,-(sp) move.w #setexec,-(sp) trap #13 addq.l #8,sp move.l d0,old_dos rts prnt_sz move.l strt_adr,-(sp) move.w #prntln,-(sp) trap #1 addq.l #6,sp rts gemdos lea 6(sp),a0 move.w (sp),d0 btst #13,d0 bne in_super move.l usp,a0 in_super cmp.w #prntstat,(a0) beq buf_stat cmp.w #prntout,(a0) beq into_buf move.l old_dos,-(sp) rts buf_stat move.l chr_cnt,d0 cmp.l buf_size,d0 beq buf_full move.l #-1,d0 rte buf_full clr.l d0 rte into_buf move.l chr_cnt,d0 cmp.l buf_size,d0 beq chk_buf move.l buf_adr,a1 add.l head_ptr,a1 move.b 3(a0),(a1) addq.l #1,head_ptr move.l head_ptr,d0 cmp.l buf_size,d0 blt no_wrap clr.l head_ptr no_wrap addq.l #1,chr_cnt move.l #-1,d0 rte chk_buf clr.w time_out chk_time move.l chr_cnt,d0 cmp.l buf_size,d0 bne into_buf move.w time_out,d0 cmp.w v_blank,d0 blt chk_time clr.l d0 rte buf_vbl tst.l chr_cnt beq buf_exit tst.w dumpflg bmi not_dump move.w #-1,dumpflg rts not_dump move.l savptr,old_ptr move.l #new_ptr+46,savptr move.w #-1,-(sp) move.w #kbshift,-(sp) trap #13 addq.l #4,sp move.l old_ptr,savptr btst #2,d0 beq nt_flush btst #3,d0 beq nt_flush clr.l chr_cnt clr.l head_ptr clr.l tail_ptr rts nt_flush addq.w #1,time_out tst.w buf_on bne vbl_exit move.w #-1,buf_on prnt_buf tst.l chr_cnt beq buf_exit move.l savptr,old_ptr move.l #new_ptr+46,savptr clr.w -(sp) move.w #bconstat,-(sp) trap #13 addq.l #4,sp move.l old_ptr,savptr tst.l d0 beq buf_exit move.l #new_ptr+46,savptr move.l buf_adr,a0 add.l tail_ptr,a0 move.b (a0),d0 and.w #$ff,d0 move.w d0,-(sp) clr.w -(sp) move.w #bconout,-(sp) trap #13 addq.l #6,sp move.l old_ptr,savptr tst.l d0 beq buf_exit addq.l #1,tail_ptr move.l tail_ptr,d0 cmp.l buf_size,d0 blt no_alter clr.l tail_ptr no_alter subq.l #1,chr_cnt bra prnt_buf buf_exit clr.w buf_on vbl_exit rts old_dos ds.l 1 old_ptr ds.l 1 new_ptr ds.b 46 buf_adr ds.l 1 head_ptr ds.l 1 tail_ptr ds.l 1 chr_cnt ds.l 1 time_out ds.w 1 buf_on ds.w 1 v_blank ds.w 1 buf_size ds.l 1 vbl_adr ds.l 1 strt_adr ds.l 1 buf_flg ds.w 1 code_end banner dc.b 'Atari ST Printer Buffer.',13,10 dc.b 'By Richard Phillips.',13,10,13,10,0 usge_str dc.b 'Usage : pbuffer.ttp .',10,13,0 cmd_str dc.b 'Error in command line parameter.',10,13,0 smll_str dc.b 'Buffer size too small.',10,13,0 lrge_str dc.b 'Buffer size to big.',10,13,0 blk_str dc.b 'Can',39,'t release memory.',13,10,0 mem_str dc.b 'Error in memory allocation.',13,10,0 vbl_err dc.b 'No free VBL slots.',13,10,0 success dc.b 'K Printer Buffer installed.',13,10,0 err_str dc.b 13,10,'No printer buffer installed.',13,10,0 exit_str dc.b 13,10,'Press any key to exit.',0 the_end end ************************* * Atari ST Safe Ramdisc * * By Richard Phillips * * (c) Atari ST User * ************************* * Equate constants * GEMDOS functions used term equ 0 terminate program conin equ 7 fetch character from keyboard prntln equ 9 print a line of text to the screen k_proces equ $31 terminate and stay resident malloc equ $48 allocate memory setblock equ $4a release unwanted memory * XBIOS routines used protobt equ 18 prototype boot sector supexec equ 38 execute routine in supervisor mode * TOS variables used hdv_bpb equ $472 vector for BPB handler hdv_rw equ $476 vector for R/W handler mediach equ $47e vector for media change handler drvbits equ $4c2 BIOS logical disc status variable * Initialisation routine ramdisk move.l 4(sp),a6 store the base page pointer pea banner push address of string on stack move.w #prntln,-(sp) push number of GEMDOS routine trap #1 to be called, then call GEMDOS addq.l #6,sp adjust the stack pea init move.w #supexec,-(sp) execute initialisation routine trap #14 in supervisor mode addq.l #6,sp tst.w disk_flg any errors occurred? bpl no_err if not indicate so pea err_str print a message to indicate move.w #prntln,-(sp) that an error has occurred trap #1 addq.l #6,sp bra exit quit no_err bsr prnt_sz print size of ramdisc installed pea success move.w #prntln,-(sp) print message to indicate trap #1 successful initialisation addq.l #6,sp exit pea exit_str print a message to encourage move.w #prntln,-(sp) the user to press a key trap #1 addq.l #6,sp move.w #conin,-(sp) get a character from the console trap #1 addq.l #2,sp tst.w disk_flg error occurred in initialisation? bmi no_disk if so then just quit clr.w -(sp) move.l #code_end-ramdisk,-(sp) reserve required memory move.w #k_proces,-(sp) then exit program trap #1 * Routine called when an error occurres during installation no_disk move.w #term,-(sp) quit without installing ramdisc trap #1 * Routine which does the actual installation init bsr rels_mem call routine which releases memory tst.w disk_flg back to GEMDOS bmi initexit if an error occurred then exit bsr get_size call routine which gets ramdisc size tst.w disk_flg if error then exit bmi initexit bsr get_mem call routine which allocates memory tst.w disk_flg for the ramdisc bmi initexit if an error occurred then exit bsr set_disk call routine which inits disc bsr setvec call routine which sets up ramdisc bset #3,drvbits+3 tell TOS about ramdisc initexit rts * Routine which gives all unused memory back to GEMDOS rels_mem move.l $c(a6),d0 get the length of the text section add.l $14(a6),d0 add length of initialised data add.l $1c(a6),d0 add length of uninitialised data add.l #$100,d0 add length of the base page move.l d0,-(sp) push all of that on to the stack move.l a6,-(sp) push start address clr.w -(sp) null word move.w #setblock,-(sp) call GEMDOS routine which releases trap #1 memory add.l #12,sp adjust the stack pointer tst.l d0 has an error occurred? bne rels_err if yes jump to rels_err rts * Routine which is called if GEMDOS signals an error when * memory is being handed back to GEMDOS * This subroutine should never be called - hopefully rels_err subq.w #1,disk_flg make disk_flg reflect that an error pea blk_str has occurred move.w #prntln,-(sp) print a message to indicate that an trap #1 error has occurred addq.l #6,sp rts * Routine which determines the size of ramdisk required get_size lea $81(a6),a0 get address of command line tst.b (a0) test for empty command line beq usage error - print program usage spc_loop cmp.b #' ',(a0)+ skip all space characters beq spc_loop subq.l #1,a0 kludge correct address cmp.b #' ',(a0) if end of string encountered ble cmd_err error out move.l a0,a1 save start address of string for move.l a0,strt_adr use later clr.l d0 clear counter num_loop cmp.b #' ',(a1) if a non-numeric is encountered bgt not_end clr.b (a1) kludge an end of string marker bra end_str and then break out of loop not_end cmp.b #'0',(a1) blt cmd_err if character is not numeric cmp.b #'9',(a1)+ cause an error bgt cmd_err addq.l #1,d0 increament string counter bra num_loop loop again end_str cmp.b #2,d0 if string length < 2 blt too_smll then error cmp.b #4,d0 if string length > 4 bgt too_lrge then error move.l disk_siz,d0 initialise storage register get_num mulu #10,d0 multiply size by ten move.b (a0)+,d1 sub.b #'0',d1 subtract ascii base to get digit add.l d1,d0 add onto ramdisc size tst.b (a0) any more characters? bne get_num yes to loop again add.l #9,d0 add 9K for TOS sectors move.l #10,d1 asl.l d1,d0 shift size to get size in bytes move.l d0,disk_siz store size move.l #-1,-(sp) move.w #malloc,-(sp) see how much free memory there is trap #1 addq.l #6,sp cmp.l disk_siz,d0 ramdisc too large? blt too_lrge yes so error out rts return to caller * Routine which is called if no command line is supplied usage sub.w #1,disk_flg make disk_flg reflect that error pea usge_str has occurred move.w #prntln,-(sp) print the error string trap #1 addq.l #6,sp restore sp rts return to caller * Routine which is called if a dud command line is supplied cmd_err sub.w #1,disk_flg make disk_flg reflect that an pea cmd_str error has occurred move.w #prntln,-(sp) print the error string trap #1 addq.l #6,sp restore sp rts return to caller * Routine called if size of ramdisc requested too small too_smll sub.w #1,disk_flg make disk_flg reflect that an pea smll_str error has occurred move.w #prntln,-(sp) print the error string trap #1 addq.l #6,sp rts * Routine called if size of ramdisc requested is too large too_lrge sub.w #1,disk_flg make disk_flg reflect that an pea lrge_str error has occurred move.w #prntln,-(sp) print the error string trap #1 addq.l #6,sp rts * Routine which attempts to reserve memory for the ramdisc get_mem move.l disk_siz,-(sp) push the amount of memory required move.w #malloc,-(sp) use malloc to reserve the memory trap #1 addq.l #6,sp cmp.l #0,d0 has an error occurred? bls mem_err if so jump to mem_err move.l d0,disk_adr else store start addr of ramdisc rts * Routine called if an error occurres allocating memory mem_err subq.w #1,disk_flg indicate an error pea mem_str move.w #prntln,-(sp) print message to indicate that trap #1 memory could not be allocated addq.l #6,sp for the ramdisc rts * Routine which prints the size of ramdisc prnt_sz move.l strt_adr,-(sp) push address of string move.w #prntln,-(sp) call GEMDOS to print string trap #1 addq.l #6,sp rts * Routine which initialises the ramdisc set_disk clr.w -(sp) use XBIOS to create boot sector move.w #2,-(sp) not executable, single sided, move.l #$1000000,-(sp) random serial number move.l disk_adr,-(sp) address of Ramdisc buffer move.w #protobt,-(sp) call XBIOS trap #14 lea 14(sp),sp quick & dirty way to reset stack move.l disk_adr,a0 get address of ramdisc memory move.l disk_siz,d0 get disc size in bytes move.l #11,d1 convert to sectors asr.l d1,d0 lea 19(a0),a0 set up the number of sectors move.b d0,(a0)+ on the disc in 8086 format lsr.b #8,d0 swap lo and hi bytes of word move.b d0,(a0) store second 8086 byte move.l disk_siz,d0 load size of disk subq.l #1,d1 asr.l d1,d0 get the number of data clusters sub.l #9,d0 move.w d0,numcl store the number of clusters rts * Routine which re-vectors the TOS hard disc bindings setvec move.l hdv_bpb,old_bpb save address of old bpb move.l hdv_rw,old_rw save address of old R/W move.l mediach,old_mdch save address of old mediach move.l #new_bpb,hdv_bpb re-vector bpb handler move.l #new_rw,hdv_rw re-vector R/W handler move.l #new_mdch,mediach re-vector media change rts new_bpb cmp.w #3,4(sp) is drive D required? beq do_bpb yes move.l old_bpb,-(sp) no, so call old BPB handler rts do_bpb move.l #bpb,d0 return to caller with address of rts BPB in D0 new_rw cmp.w #3,14(sp) is drive D required? beq do_rw yes move.l old_rw,-(sp) no, call old handler rts do_rw move.w 12(sp),d0 get the logical sector number move.l #9,d1 asl.l d1,d0 times 512 to get byte offset add.l disk_adr,d0 into ramdisk memory move.l d0,a0 move into address register move.l 6(sp),a1 get the buffer address move.w 10(sp),d1 number of sectors to transfer sub.w #1,d1 alter number for dbcc opcode btst #0,5(sp) Read or write beq transfer its read, don't swap registers exg a0,a1 swap registers as same code used transfer move.l #127,d0 128 longwords per sector l_sec_lp move.l (a0)+,(a1)+ transfer longword dbra d0,l_sec_lp do 128 times (127 for dbcc) dbra d1,transfer do for required sectors clr.l d0 rts new_mdch cmp.w #3,4(sp) is drive D required? beq do_mdch yes move.l old_mdch,-(sp) no, call old handler rts do_mdch clr.l d0 Ramdisc media never changes rts return to caller * Set up the BIOS Parameter Block (bpb) for the ramdisc bpb recsiz dc.w $200 sector size in bytes clsiz dc.w 2 cluster size in sectors clsizb dc.w $400 cluster size in bytes rdlen dc.w 7 directory size in sectors fsiz dc.w 5 FAT size in sectors fatrec dc.w 6 sector number of 2nd FAT datrec dc.w 18 number of first data cluster numcl dc.w 0 number of data clusters (K's) bflags ds.l 4 BIOS flags * Note : numcl is set to zero as it will be setup once size of * disk is known * Variables used old_bpb ds.l 1 address of old BPB handler old_rw ds.l 1 address of old R/W handler old_mdch ds.l 1 address of old Mediach handler disk_flg ds.w 1 initialisation status variable disk_adr ds.l 1 address of Ramdisk buffer disk_siz ds.l 1 size of disk strt_adr ds.l 1 start address of a string code_end * General output strings banner dc.b 'Atari ST Safe Ramdisk.',13,10 dc.b '(c) Copyright 1987 Richard Phillips.',13,10,13,10,0 usge_str dc.b 'usage : ramdisk.ttp .',13,10,0 cmd_str dc.b 'Error in command line parameter.',13,10,0 smll_str dc.b 'Ramdisk size too small.',13,10,0 lrge_str dc.b 'Ramdisk size too big.',13,10,0 blk_str dc.b 'Can',39,'t release memory.',13,10,0 mem_str dc.b 'Error in meory allocation.',13,10,0 success dc.b 'K Ramdisk installed.',13,10,0 err_str dc.b 13,10,'No Ramdisk installed.',13,10,0 exit_str dc.b 13,10,'Press any key to exit.',13,10,0 the_end end . I .. IPROG1 C 'IPROG2 C (IOUSE C րI%ELECTORC ׀I&ANDOM C ـI,EM_2 IIEM_1 8IJPROG3 C *IECOUT1 C !b4ECOUT2 C f!bECOUT3 C "b#LOATINPC (adLOATOUTC Ra* Toggle When * By Jeremy Roussak * (c) Atari ST User GEMDOS equ 1 ;GEMDOS trap CNECIN equ 8 ;Cnecin() code CCONWS equ 9 ;Cconws() code lea msg1(pc),a0 ;opening message bsr outstr trap #3 ;do it tst.w d0 ;what was it? beq enable ;was disabled lea dismsg(pc),a0 ;now disabled bra wrt enable lea enmsg(pc),a0 ;is now enabled wrt bsr outstr lea msg2(pc),a0 ;message bsr outstr move.w #CNECIN,-(sp) ;wait for a key trap #GEMDOS addq #2,sp ;clean up clr.w -(sp) ;Pterm0() trap #GEMDOS * outstr: write string using Cconws() * entry: a0: string address outstr move.l a0,-(sp) ;string move.w #CCONWS,-(sp) ;code trap #GEMDOS addq #6,sp ;tidy up rts msg1 dc.b 10,13,'Encoding is now ',0 enmsg dc.b 'en',0 dismsg dc.b 'dis',0 msg2 dc.b 'abled.',10,13 dc.b 'Hit a key to continue...' dc.b 0 EVEN at(50+x,15* When * By Jeremy Roussak * (c) Atari ST User TCHAR equ $fe ;time trigger char DCHAR equ $ff ;date trigger char GEMDOS equ 1 ;GEMDOS trap TGETDATE equ $2a ;Tgetdate() TGETTIME equ $2c ;Tgettime() PTRES equ $31 ;Ptermres() T3NUM equ 35 ;trap #3 vector BIOS equ 13 ;BIOS trap number BNUM equ 45 ;BIOS trap vector BCONOUT equ $3 ;Bconout() code SETEXC equ $5 ;Setexc() code XBIOS equ 14 ;XBIOS trap number XBVEC equ $b8 ;XBIOS trap vector SETTIME equ $16 ;Settime() code GETTIME equ $17 ;Gettime() code SUPBIT equ 5 ;supervisor state SPACE equ $20 ;ASCII space COLON equ $3a ;ASCII colon * initialisation - first find our own * size for a later Ptermres() call move.l 4(sp),a0 ;base page addr move.l #$100,d6 ;base page len add.l $c(a0),d6 ;+ code length add.l $14(a0),d6 ;+ data length add.l $1c(a0),d6 ;+ bss length * now install our BIOS trap handler lea trap13(pc),a0 ;trap handler move.l a0,-(sp) ;onto stack move.w #BNUM,-(sp) ;vector number move.w #SETEXC,-(sp) ;code trap #BIOS addq #8,sp ;clean up move.l d0,savetrap ;save old vec * and our trap 3 handler lea trap3(pc),a0 ;trap handler move.l a0,-(sp) ;onto stack move.w #T3NUM,-(sp) ;vector number move.w #SETEXC,-(sp) ;code trap #BIOS addq #8,sp ;clean up * get out of here clr.w -(sp) ;return code move.l d6,-(sp) ;amount to keep move.w #PTRES,-(sp) ;func code trap #GEMDOS ;no return * trap3 routine - used to toggle * trap13 on & off. Return the old * state in d0 $0000 -> was off, now on * $FFFF -> was on, now off trap3: lea onoff(pc),a0 ;flag address move.b (a0),d0 ;get old value ext.w d0 ;extend to d0.w eori.b #$ff,(a0) ;toggle it rte * This is the BIOS trap routine * we can mangle a0 here without qualms trap13: tst.b onoff ;are we active? beq boring ;nope lea 6(sp),a0 ;supervisor mode btst #SUPBIT,(sp) ;is it? bne super ;yup move usp,a0 ;user stack ptr super cmpi.w #BCONOUT,(a0) ;Bconout call? bne boring ;no cmpi.b #TCHAR,5(a0) ;time trigger? seq tdflag ;just in case beq gotit cmpi.b #DCHAR,5(a0) ;or date trigg? beq gotit boring movea.l savetrap,a0 ;get trap vec jmp (a0) ;and go to it gotit movem.l d2-d4/a3-a4,-(sp) movea.l a0,a4 ;avoids saving a0 bsr get_td bsr show_td movem.l (sp)+,d2-d4/a3-a4 rte ;back to user * Find and dissect time or date * entry: tdflag ? time: date required * uses: d0-3, a3, calls: none get_td move.w #GETTIME,-(sp) ;func code lea xbret(pc),a3 ;return addr move.l a3,-(sp) ;onto stack move sr,-(sp) ;like trap move.l XBVEC,a3 ;where to go jmp (a3) xbret addq #2,sp ;clean up stack change_mouse() { int form[37] ; /* Lattice C users change 'int' to 'short' */ form[0]=0 ; form[1]=0 ; /* X,Y Action point */ form[2]=1 ; /* Must be 1 */ form[3]=0 ; form[4]=1 ; /* Colours for mask and cursor */ /* 16 word group for mask */ form[5]=0 ; form[6]=8184 ; form[7]=8196 ; form[8]=16386 ; form[9]=33825 ; form[10]=3120 ; form[11]=7224 ; form[12]=15420 ; form[13]=0 ; form[14]=0 ; form[15]=3276 ; form[16]=13104 ; form[17]=0 ; form[18]=12876 ; form[19]=52659 ; form[20]=0 ; /* 16 word group for cursor */ form[21]=0 ; form[22]=0 ; form[23]=8184 ; form[24]=16380 ; form[25]=31710 ; form[26]=62415 ; form[27]=58311 ; form[28]=50115 ; form[29]=65535 ; form[30]=65535 ; form[31]=62259 ; form[32]=52431 ; form[33]=65535 ; form[34]=52659 ; form[35]=0 ; form[36]=0 ; vsc_form(handle,form); graf_mouse(255,form); } /* Accessory Selector */ /* By Martyn Dryden */ /* (c) Atari St User */ #include #include #include #define is == #define not ! #define is_not != #define AND && #define OR || #define TRUE 1 #define FALSE 0 #define NULL '\0' #define ERROR -1 #define NEWLINE '\n' #define HIRES (resolution is 2) #define MEDRES (resolution is 1) #define LORES (resolution is 0) /* Atari VT52 #defines */ #define CLEAR "\033E" #define HOME "\033H" #define CURSOR_HOME printf("%s",HOME) #define CLS printf("%s",CLEAR);CURSOR_HOME #define RVS "\033p" #define R_VID printf("%s",RVS) #define NOR "\033q" #define N_VID printf("%s",NOR) #define BEL "\007" #define DING printf("%s",BEL) #define EOL "\033K" #define CEOL printf("%s",EOL) #define COL4 "\033b\004" #define COL1 "\033b\001" #define BLUE printf("%s",COL4) #define RED printf("%s",COL1) at(row,col) int row,col; { int r,c; r=32+row; c=32+col; printf("\033Y%c%c",r,c); } say(string) char*string; { while (*string != NEWLINE && *string != NULL) putchar(*string++); putchar(NEWLINE); } int resolution,finished=FALSE,escape=FALSE; int acc_s_old[48],acc_s_new[48],acc_c=0,ix=0; char acc_name[48][14],disp_name[48][14]; main() { resolution=Getrez(); printf(" Accessory Selector\n"); if(acc_scan()) { acc_display(); do { handle_input(); } while(not finished); if (not escape) acc_rename(); } else{ printf(" No desk accessories found on this disk.\n"); } bail_out: printf(" Returning to desk.\n"); } acc_scan() { int drive,found=ERROR; long filename; char filespec[14]; drive=Dgetdrv(); filespec[ 0 ]=drive+'A'; strcat(filespec,":\\*.AC?"); printf(" Seeking desk accessory files on drive %c...\n" ,filespec[0]); found=Fsfirst(filespec,0); if(found<0) return(FALSE); filename=Fgetdta()+30L; strcpy(acc_name[acc_c],filename); acc_c++; do{ found=Fsnext(); if(found>ERROR){ strcpy(acc_name[acc_c],filename); acc_c++; } } while (found>ERROR AND acc_c<48); return(TRUE); } acc_display() { int i; for(ix=0;ix>16); lo=(int)(key_in%256); if(((hi is 0x39 AND lo is 0x20) OR (hi is 0x01 AND lo is 0x1B)) AND (not too_many())) { finished=TRUE; if (hi is 0x01 AND lo is 0x1B) escape=TRUE; else escape=FALSE; } else if(lo is 0x0D) acc_s_new[ix]=not(acc_s_new[ix]); else if(lo is 0x00){ show_acc(ix); switch(hi){ case 0x48:{ ix -= 4; if(ix<0){ while(ix <= acc_c - 1) ix += 4; if(ix>acc_c - 1) ix -= 4; } break; } case 0x4B:{ ix--; if(ix<0) while(ix%4<3) ix++; else if(ix%4 is 3){ ix += 4; while(ix >= acc_c) ix--; } break; } case 0x4D:{ ix++; if(ix >= acc_c){ ix--; while(ix%4>0) ix-- ; } else if(ix%4 is 0) ix -= 4; break; } case 0x50:{ ix += 4; if(ix >= acc_c){ while(ix >= 0) ix -= 4; if(ix<0) ix += 4; } break; } default: DING; } } else DING; } too_many() { int i,count=0; for(i=0;i6){ DING; if(HIRES OR MEDRES) at(19,23); else{ at(19,3);BLUE;} say("** Sorry, not more than SIX **"); return(TRUE); } else return(FALSE); } acc_rename() { int success=0; CLS; for(ix=0;ix long seed; main() { int i, j; seed = 11; for ( i=0; i<10; ++i ) { for ( j=0; j<10; j++ ) printf("%d ",rnd(100)); printf("\n"); } getchar(); } rnd(n) int n; { seed = seed * 259 + 3; seed = seed & 32767; return( seed % n ); } . I-.. IDEMO GRAۀI.DEMO MUSIi2THE_BANDPRGIvHEXIGONSPRGIPSYCHO PRGIwGg'" QaSUdsG$ . V???????????????o{GGG''' @@``` 7 x?oxg=  ?ڰ _ U<<< <X???8?@?? x???p?p????}???//////x??߃???? !߃p X???@??????????0xx``x``8?@?????qq8??????????8????? ?? ??8???w? ?????888w8???8?|??????|?___????????????????9??????????? W2??????wn n 6&??;|x_ʩ _ʩ xpE?????S{%./û????&ܟnI@__nI@__d?? pp:??_X_X=B"'>>E ??E??@@dd??U߱1PX?? 1PX??```ggϜb"0"0gg ?????????D`?P@QWP@QWÀ3O/?.O 'GaGAA??? LL?\#wGwGǟC߀LL.?pp?o( LL11w<bMڢMڢY8?@??D߰^^m;x???输@输@o???̙22gg   }&,￀,￀??LL22gg7??7??X'??^^P^^P33???C>>=??}Á}?y_Oy_O+??kÁ  ??(??aaÇÇ????Á| ?@@33 oǃ ?????OO33;TV????ᙇ7??W5??////OO 0??????e"Waa????LL];@{?hO̙__ cp????*f?q__E?9OznS, ??@?Sͬ2_#??}_D 3?{EOXw??|??  >/#X{?öI?]wX???38_p?o_??ug@χII䙎J]=ϓ22yy?0?G?.?aa33||gg_5??/?? |0?w???YXt7??aadždž0p0pʎ}F|G??????>>$ $ dd܇xxMڲ;>>dd'']?t_SaaÆÆffpp?O+9/GoeGaa?B6@@w.TOO?S?jo?aa{?VY_j_J*M[O  ???@_SO???GϿG00?kv_OÆÆ LL$$''̙̙??  00?ooo{{{?``Ç___www?營''??ooo?w?w?w ooo??>>||2?2?``Æ>p>pWWW?p>p@@aq//?~~DDqA>p>pa777?'q@oa ??0110ßs]``<<??O``??ۿۿ???== ????? ?og?ǀ??Swhz{z??ckkk?O@G`99:::_?_~???gg>>ϟ?8<?????~g?????g/??s?cg??s0ǃ????s@Cp?0ßs00ww9!3?OH@@11???AA;;g?8 AA||_g? {{ssB?????9O???9?!?zsz??~px3?????????**7_? ?a g `?'g????O0cxxo0??  pxx9??1!kkk?uuu??00?zsz~~~ ? ?3733???  { @@>>??ߟ?@@@0??AAAA????AA?p?>????????????pppwp??{~~{>??> ??_ޗKޗKLL??_KK22F LFwp??..{\\{<<< ???@@<<<????  sss||||?||>x>HOHxhoj>8(/+?Ϩ/+pp ??????? [X?????>???X]P????  ?@ǿG?go'o@??Xoo??ˀ  ~~n>o~w??~~n>o~~~n>o~|w}~l>nsspp??}~l>n÷0wwpp}~l>nǷ~????wwppzhmϷ$@$ zhm @ ????;8yio{{@?? uak@ϿϿww???7 0 uak݀ ''8??wπ p s߽S_(܀ ?? ?ݧ@ k׽CW(? ii> k!5???? l_ l_;;>>8Ϯ,,WFn?8888||p{=.,,V|Fo?????߀??????0oooPk@joj?{xx@C >x>oho'srr??aaaa882L L;||/ ??cccc0000````???? {/ _?11113OO??? {{;{{????xx㙿ww7ww??>>www>>>z{wӯÏ??:::>>>tvׯ/?Ϝ>>>ln''''???? ~__''''??~_??''''n؎y___,,,,''''.LN߷7?__$$$$####߀?__$$$$    oo$$$$    }|oo$$$$    ||??>>v"v??,,,,    ~~w w??,,,,@@@@>>99((((@@@@>???8888@@@@??0000@@@@?0000@@@@??pW~VV@@@@???pW~VV@@@@???pW~VV@@@@???pW~VV????@@@@??pW~VV??????pW~VV? ? ? ? pW~VV? ? ? ? W~VV~ ~ ~ ~ ?W~VV~ ~ ~ ~ ?W~VV| | | | >þ<ÀW~VV| | | | C??>>"@@@WT````C??~~<{{{ 888zz@````G??}|(;;;000||| aaaaG??}|$;;;<<<aaaa[[[???  kkk???^^nn}|~]~]???nn ???11{xgkk@@@$$$$ppppww>ggg@@@ooooXXXX,,,,=?=###''3???0```(((???????mmmVVH?__?_30@@@{z^^^^^^3v03vH>2CCC^VVf<<|@@@yyyxvyxvH~x<~>~ ```?xxx>>@333x  ppp?cccc`???0|   ܀܀`|`?aCCCa ` ~~~ 30 ` |   ppp؜.>P0 @@ <<<Q. ???`@@@x?8Wh ` ` ` @??@??????? @ @ xxx,?(qXXXOOO @@;;;;```<P ;@?000 ; ?9999000(<000    R,~ Xxxxxqqq000    ~ |||???? (> ߍߍߍߍNNNN8888????888uuu]A]]AwAAwAw]]]]77777777]A]]{{{{]]]]````uuu]A]]wwwaaaatttt0ÎÎÎÎaaaa8888ݏݏݏݏvvvv????ppp; ?/+?|||^oo@@@xxxY_O` `ȃȃ> @ ppp `? 6&;00xEpzr|Et0{ۜ%ۜ[۴%( ?p&\ԃo`o0dugȐ@"? :????po;sss=B"')R{_H~?,???` s@>y;p|?@:(/ >={?ppp [~7? 37@yo ??Ov GgCw  ̿AH ?{CH~c?@ ?o(_o/@(/: ===###wk? mmm?,?,Y6+?"??>?>?,?,"9^9^9^m;+9;r```ֿֿֿom[000_ ! {n`! _ ! _ a`1??o8W1? 0H=||||c## ߀!߀!! ! @@@߁ @ ?? ?! ???????!????????? ???P>ww``pp@?/?GTp }wr]]@@Dٿ1ixCϽWU3nZ"7MVI÷ޕ'j@W8'Gyg~w~???wÞ=Lo?!!????!!/!!???Iw u``@?>y[O???????????ҿ????#=wgڈ?????????3??????-{kz?_pDϻNppp@"`@888#"p@@ \@ p???p???`?????????????????????? ???????????/?????```????????? @@@???????????????iX?3/ %).   xxx  dnd     xdd !!#$"#$"#$"#$"#$"#$"#$"#$"&%%nx2&)'2&*(2&)'2&013+,-3+./3+,-3+64xxn37993855xnn3=::3>;;3?<<;96543211000;96543211000:62000000000;62000000000<:7543211000;96543211000;73000000000;73000000000*&" +&" +'# +'# 900000900000900000900000000000<:8500000000000000000000=;9752000000000000000000=<9200000000><5000*p(p$p p p p p p p p p p*p(p$p p p p p p p p p p*p(p$p p p p p p p p p p*p(p$p p p p p p p p p p*p(p$p p p p p p p p p p*p(p$p p p p p p p p p p*p(p$p p p p p p p p p p*p(p$p p p p p p p p p p000000000000000000000000000000==;:87654321100000000000000000000000=94000000000=<9200000000><5000;97555544444<93322<82111<60000000000=<;:97<:5421<;:988766655555544322221110000000000000000000000ǜ\[ZZZZZZZYXǜŜțȚȚȚȚȚȚȚșȘȗМ̛̙̜̚̚̚țȚȚȚș|yxvsoppppppppppppppppppppppppttttttppppppppppppppppppppppppttttttpppppppppppphhhhhhhhhhhhhhhhhhhhhhhhppppppppppppppppppppppppttttttpppppppppppppppppppppppptttttt||||||ppppppppppppppppppppppppTTTTTTTTTTTTppppppXXXXXXXXXXXXTTTTTTTTTTTTppppppXXXXXXXXXXXXTTTTTTTTTTTT?p>ppppp:pppppp?pppppp:pppppp?Tppppphhhhh?dddddd?TTTTTT?ppppppXXXXXXXXXXXX?T>TTTTT?TTTTTT?p>pppppppppppppppp?||||||tttttttttttt?p>p=ppppppppppppppppp?||||||tttttttttttt?p>p=p?=>?=>?>?><pppqv|||||ztpppqv|||||ztpppqv|||||ztpppqv|||||ztpppqv|||||ztpppqv|||||ztpppqv|||||ztpppqv|||||ztpxxuppppt|~||pxttt|||pppp||zt|}~|xtlljd`dlqrttlhd^X?<?<?<?<<<<<<?>=<UVWXXXmnoppp]^_```mnopppefghhhmnopppefghhhmnopppefghhhmnopppefghhhmnopppefghhhmnoppp]^_```mnoppp<;::<<<<::<WUTTTTSTVSWQWUTTTTSTVSWQOMLLLLKLNKOIOMLLLLKLNKOIGEDDDDCDFCGAGEDDDDCDFCGA;9888878:7;5?=<<<<;<>;?9CA@@@@?@B?C=OMLLLLKLNKOIGEDDDDCDFCGASQPPPPOPROSMKIHHHHGHJGKEWUTTTTSTVSWQca````_`b_c]WUTTTTSTVSWQpppppppppppp````````````hhhhhhhhhhhh````````````hhhhhhhhhhhh````````````hhhhhhhhhhhhXXXXXXXXXXXXĽȼȻțțțțțțțȚș<;:<;<;:<;нȼȻțțțțțțțȚș<;:<;<;:<;CA@@@@?@B?C=OMLLLLKLNKOIGEDDDDCDFCGASQPPPPOPROSMca````_`b_c][YXXXXWXZW[UWUTTTTSTVSWQWYPSXPXLS\UL<:<<<<   <;:<;<;:<;<;<;:::::::::::::96̝ȜțțțțțțțțȚș|{wvrqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqlmlihideda`a\]\YXYTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTU<;::::::::uokgdbbac`a`a`a`a`a`a`a`a`a`a`a`a`a`a`a`a`a`a`a|xuqomjjijhihihihihihihihihihihihihihihihihihi~ywtsoonnlmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlm}vvsrqrpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpq=;:=;:=;:=;:`Z&o#xTAB(HSB$H  g  g  f RSBj` g =g %gJ`Rpr A9nA0m/ПЁRSBk`Jg n <#p`zRpr A9nA0m/ПЁRSBkT`JgN n <#D`8Cx `CxrRSBk$  g  g  gQp`JBkQB"+ҫ p$9Df $`nԀ n$<&ւֹp// Bg?<JNAJg0<`6 .Ap#x@#xD#xHNO/ K,MN9Xp??<LNA` /`p/NXX3Hy|N-XNi$A////NnO3HyHyHyxXN[ O 09H/NgX09U@flHy|p/NkfPBp /NXDP#N./9p /NXDP09HB/NgP09H/N[xXNj`xp/NXX#a(a'a(Ba)Xa(@/<p/NXDPJfa8Jg`09HB/NgP09H/N[xXNja*$NuNV/<'NWXa&p/a)8X09Hr//Ne P09Hr//NelP09Hr//Na`P09Hr//NddP09Hr//NdP09HA////r //NcXO=|#=|=|=|sp/HyyHyy_pZ/a OJgpN^Nup/a"XJgpN^Nu-y#p/p/p/pP//<ph//<a#O#p///9p/NXO09Hr7/r_/rOJgpN^Nua p//9/p/NXOa la!p/pZ//<pF/p`//<BaOp/pF/pp/pq//</</<ahOp//9/p/NXOa BHyyHyypd/aOJgpN^NuHyyp /NXPa |/<a$6Xp/HyyHyyQpP/a>OJgpN^Nuap/p-/p /pD//<p;//<aOa p//9/p/NXOHyyp /NXP/<a#XBHyyHyyp\/aOJgpN^Nuap/p4/p /pk/p`//<"Ba*Op/pK/pP/p\/p/p|//<aOalp/HyyHyy/<a8OJgpN^Nup /HyyHyy_p1/aOJgpN^Nua^p/p/p/p6//<pF//<aOHyyp /NXPp//9/p/NXO/<a"Xp/p/p/p6//<pF//< a&O/<a"LXp/p/p/p6//<pF//<aOaZpd/a"Xp/p/p/p6//<pF//<0aOpd/a!Xa^09Hr//Ne P09Hr//NelP09Hr/r2/r//</N`*Op/p /p/p,//</</<a2O09Hr//rR/Hy}{r//</N`O09Hr//rU/Hy}r#//</N`O09Hr//r2/Hy}r-//</N`Op/p/p/p6//<pF//<0aOp//9/p/NXO/<a Xap//9/p/NXOBp /NXDP#a0N./9p /NXDP yRz dgpN^Nu/<a XapN^NuNV09@H/@r NZJWDHH y|"X49=@-AUBg09>H yRzHHm yRzHH"/m 9RT#R @zRRHHm lN`z``````:`J``` ````2`J`Z`````0`b````````p/p/p//p(/pd//</<a~O`9V V`W`p/p/p?/pH yRzHHfl yRzHHrNZTѹR`H9V V`4p/p/p/p6//<pF//<aOpd/aXp/p/p/p6//<pF//< a`O/<aXap/p/p/p6//<pF//< a(O09Hr/r2/r//</N`*Op/p /p/p(//</</<aO09Hr//re/Hy}r /re//N`Op//9/p/NXO/<aXa2p//9/p/NXOpd/aX`9V V`p/p/p/p6//<pF//< aOpd/aFXap/p/p/p6//<pF//< aO09Hr/r(/r//</N`*Op/p /p/p(//</</<aO09Hr//rP/Hy}r/rw//N`O09Hr//rF/Hy}r%/r|//N`Op//9/p/NXO/<aLXap//9/p/NXO/<a"X`fp/p/p/p6//<pF//< aO/<aXadp/p/p/p6//<pF//< aO09Hr/rP/r//</N`*Op/p /p/p(//</</<aH 4g 8f6p/p /p/pR//</</<a0O\`09@H g $g09@ @Hg @Tf:J9]fdp/p/p/pD/pl//</<aO]`2p/p /p/pN//</</<aO^09>H 0g 8g09> @@f09@HJg]g09@ @ g @f:J9`f2p/p/p/p]//</<6/<aO`09@H g Nf2p/p /p/pR//</</<aO\09@H 6g Zf2p/p /p/pN//</</<aO^9ZgD09@HH@J@f2p/p /p/pR//</</<a0O\9Zgp09@HJg g09@ @0g @Hg @Tf2p/p /p/pR//</</<aO\09@H g $g09@ @6g @Bf:J9`f2p/p/p/p]//</<6/<a`O`09@H *g 6f8J9]f0p/p/p/pD/pl//</<aO]09> @fP09@ @/oD @Zg>HH@J@f2p/p /p/pN//</</<a O^9ZgJy@g09@ @$g @0g @TfrJ9`f2p/p/p/p]//</<6/<a LO`J9]f0p/p/p/pD/pl//</<a O]9Zg>Jy@f8J9]f0p/p/p/pD/pl//</<a O]09@ @Bf2p/p/p/pN//</<'/<a O_09@ @Hf:J9`f2p/p/p/p]//</<6/<a BO`09@ @Tflp/p/p/pN//</<'/<a O_J9`f2p/p/p/p]//</<6/<a O`9ZgJng8J9]f0p/p/p/pD/pl//</<a ~O]Jy@g 09@ @Tf2p/p /p/pN//</</<a 8O^09@ @0f:J9`f2p/p/p/p]//</<6/<a O`9Zg09@HrNZSf09@Hr NZ_f,p/p/p//p@//</<8p /a O`NW|Jf,p/p/p//p@//</<8/<a LO`dNW|Jf,p/p/p//p@//</<8/<a O`(p/p/p//p@//</<8pP/a O9VgJng(p//p//<p?//</<a ONW|/@NW|"/ gd g2 {f|p/p/p/p\/p(//</< a HO`Rp/p/p/p\/p(//</<a O`(p/p/p/p\/p(//</< aO9VgL09@HJg8 g009@ @g$ @$g @*g @6g @Bg @Hg @TfW9VgF09@HJg2 g*09@ @g @*g @0g @Bg @Hg @TfW9VgJngW9WHH gZ g ftp/p/p/pz/p,/p|//<aO9WSW]f:NW| d$N``4`Z`p/p//pt/pP//</<azO`p/p//pt/pP//</<aPO`p/p//pt/pP//</<a&O`p/p//pt/pP//</<aO`fp/p/p/pz/p,//</<aO9WSW`.p/p/p/pz/p,//</<aOB9WJ9Xg0Jng*p/p///</</</<a\O9Xg 09@ @\fNW|R[J9XgBNW|Jf2NW|r/r/r/rw//</<V/aOJ9[gbJng\9[HH29@H/@ rNZJVDHH"/UҀp/p/p/pe//</<e/a|OJ9\g<9\S\Jf*p/p /p/pR//</</<a8OJ9]g:9]S]Jf(p/p/p/pD/pl//</<aOJ9^g<9^S^Jf*p/p /p/pN//</</<aOJ9_g<9_S_Jf*p/p/p/pN//</<'/<anOJ9`g<9`S`Jf*p/p/p/p]//</<6/<a*O . y|c"` . y|bBn nlRn`N^Nup[Z`_^]\XWVBRNuNVpSn =@=@.f3/b0.H/@r(NZT"<e /倒 / /Ar NZTrNZ"/=Ap /NXDX-@Jf09bnl0.H n  gl0.H n  fBn0.H n  fR/.r /=@NXP`.ga`aX0.H n HH29bH4. H///a:O .gHp/pP//pF/p`//</<aLOp/pP//pF/p`//<Ba*Op//9/p/NXO0.H/@R n 09bHHHЁ"/T n 2. HHH҂4.RB&/V n =BHHH3b=A opBn /X=@`^ .N^NuNVBn0.Hl,p/HyyHyyqpZ/aOJgpN^NuRn`pN^NuNV0. @=@ H/@T @xn0. "/RH"@xn0=@4@=B=A H/AT Axn0. "/RH"@xn0=@4@=B=A H/A Axn0.=@02.A=@0. "/RH @xn0R@@33x=A H Axn0.=@04.B=@ Axn0R@33z#09HHyHytHnr//Nf ON^NuNV0.?@S@2/A33x2.?ASA4/33z#4. =B@=B4.=BA=B4.=B@=B4.=BA=B49H6."HHyHytHn//=@=ANf ON^NuNVH 9"9#p///p/NXO*y(y~ G@l (XXRG`L0N^NuNVH 9"9#p///p/NXO y+*H y+(H~ Gl (XXRG`L0N^Nu/<}/9/9NYO NuNVHp=@=@=@=@~ Gl@ "9ҀPp/p/Hn/NY0O Gfp=@=@=@RG`/<}/9/9NYO /<}/9/9NYO LN^NuNV=|Bn0. @l,"9ҀPpH/p/Hn/NY0ORn`N^NuNVBHy}p=/NXDO =@H/9/</r?/NXDO0.H/r>/NXDPN^Nu 9#tp33|p33~p33p333333Nu/<N@X#/<~N@X#/<}N@X#NuNVBn nlD0.H/@ @20."/RHt//t/=A/HNXO o0`Bp//p/NXO 9"9##N^NuNV=|Jnkp /aX0.SnH/aX`N^NuNVBn0. @l yXH/@-H0=@H/@2. HNZT/A rNZ"/p$/ /@ NZTrNZp"/Ҁ //A"NZTrNZ"/Ҁ///p/NXO Rn`BN^Nu09H/"9//t/NXOHy2p/NXPNuNVB .r(NZT".lR`N^NuNVB/.p=/NXDO Hyhr//r?/-@NXDO3l:3n43p609v38J@g 3HB`3`B094HT/N@X#009BH296HT//N@VP#dHyhp$//.p?/NXDO094HR/90//.r?/NXDO096HR29BHNZT yd///.r?/NXDO/.p>/NXDPN^NuNVHap3h3j=|3>pd3<3T3R3Pp3N3L3J=@Jnf09>H y00Hm\ lRN``v``f`0``D`Sn0.H @h0T@f=|Sn0.H @h3>`l09>R@3>H y03J09>R@3>H y03L09>R@3>H y03N09>R@3>`09>R@3>H y03P09>R@3>H y03R09>R@3>H y03T09>R@3>`09>R@3>H y03<09>V@3>`V09>X@3>2.?ARA4/H Bh0?ARA0/H @hBP=A` 09>X@3>2.H/AS AhHW"y002Af /UBn=@Jnk09>H y00R@f=|09>H/@ y00H WDHH^WDHH’0.HЁ"/X3>=@`0.H/@S @h0R@0 /U @h3>`09>R@3>H y00J@j09>V@3>`0.?@R@2/H Ah29>H/AV0?@ R@2/ H Ah0"/ y02SAA3>=@`09>H/@ y00J@ZDHH09>$/R3>H y00H69BH/A"NZTd(/"NZTH/B y02JAZDHH29>(/R3>H y02H=@ NZTd"NZTH/D y02JAZDHH29>(/R3>H y02H=@ NZTd"NZTH/D y02JAZDHH29>(/R3>H y02H=@ NZTd"NZTBy@=@09@29BAl0.RnH ydp0/aHXByH0.RnH ydp0/aX09HR@3H0.RnH ydp0/aX09HR@3H0.RnH ydp0/aXN vp /NXDXJg&p/NXDX g 3d@Rn09@R@3@`aLN^NuNVBn09<29:"<NZ2.HlRn`N^NuNV .? @~H=@. gSn. gRn . f ./aX`09HH @J02.@=AJAjBn n_o=|_0.H/@ @} .r4H/@ NZ"/R A}2H$//@ NZ"/ Ҁ/aX. gaR`a. ga`a* .29HH AP2HNZrdNY/aXN^Nup/Bp/NXO 3D3FBaXNu09DH/</r/NXO NuNV09H@r2. =@H//t/NXO p0. 2.H//t/NXO N^NuNV0. H29HH//t/NXO N^NuNV0. H/</r/NXO N^Nu09HH"<UWDHH’09FH3FH/</r/NXO NuNV09HH/@R WDHHЁ29FH3FH/</p/NXO N^NuNV09HH/@R WDHHЁ"<09FH3FH/</r/NXO N^NuNV09HH/@R WDHHЁ29FH3FH/</p/NXO N^NuByHBabX3HBaRX3HBaBXNuNVBZp#V Vl nHHR"@dgR` nJgZ 9VRV @Z  nHHJgR"@dfR` nrR@JfpNqHyHy~HyxN=*O 9x -@ >g"HyHy~Hyx N=*O -@` HyHy~Hyx!N=*O -@Hy Hy~Hy~N=*O -@Jf p/NO0XJf/.Hy~N;Pp/N gJfV n@`\.gp`p nHH`8.gp`p` nHH` nBp#HpN^Nup n@ nJf-|B . lFr NZT @(R//.NZPJf .r NZT @("nPR` n(Jf.g /.NRbX.gp` . //.NOP n!@JxPg@ . JgB/.NQP n!@JxPgJp#H nBpN^Nu .  f$ n/(NRXp#H nBpN^Nu .N^NuNV . ". ///.a|O N^NuNVJjp#HpN^Nu/.aX-@JfpN^Nu n(HH dN``` ``/./. n/(NRO -@JxPg JfpN^Nu ng .N^Nup-@-@ .lZ n R@HH g f$ .Sr///.aO .N^Nu n R`JfJfB .N^NupN^NuNVJjp#HpN^Nu/.aX-@JfpN^Nu n(HH drN``` ``P ngp/B/.aLO ng0/./. /(NRO -@JxPgpN^Nu .N^NuB.p-@-@-@ .l n R@ f . g | S n .R.-@A m/Hy n/(NRO -@갮gpN^NuJxPgpN^NuB`hJg:/.Hy n/(NRO -@갮gpN^NuJxPgpN^Nu .N^Nu .N^Nup#HpN^NuNV/.a X-@JfpN^Nu n(JgpN^Nu/./. n/(NS$O -@JxPgp#HpN^Nu f`JgZ nfN .S-@Jk4B/./.afO Jgp/Hn/.a\O JfS` .RN^Nu .N^NuNV/.aLX-@JfpN^NuB n/(NRXJxPgp-@ nB .N^NuNV/.NRbXJxPgpN^NupN^NuNV/.aXN^NuNV/. /.NPN^NuNV .xHopN^Nu yxD .ѹxDxH N^NuNV/.aX-@JgN^Nu | N^NuNV 9xDx@ѹxH#x@xD#X#P#\#T N^NuNVa-@JfpN^Nu /./9$azP n-@Jfp-@ . dN```4`L`XJ fDA"n"`(  f*A"n"`  fA"n"`A:"n"`  fA"n"`A"n"`  f. .r/@B///r/r/NWO #xP/.aXJxPWDHHLN^NuNV .r/@///r/rA/NWO#xPJWDHH N^NuNVJfB/./. /.aON^Nu"n QB/./. / NON^NuNVJfp//./. /.a`ON^Nu"n Qp//./. / NON^NuNVH Jf pLN^NuAJ$n"Rg pLN^Nup". /. n/(/. /p/pB/NWOLN^NuNVJgp@`p?r$.". v/A////./ n/(v//-@NWO-@Jj #xPpN^Nu .N^NuNVBp/NWP n pN^NuNVB .l& n HH/r/r/NWO R` .N^NuNVB .l& n HH/r/r/NWO R` .N^NuNVv . lS`p}@A r//r/r /NWOp /p/p/NWO .HHr-Ax-@| .|T".xl>6@w f| w .wf .xUDN^Nu .xU n wRx` .| }l n  .|RN^NuNVB .lP n @HH fp /p/p/NWO .HH/r/r/NWO R` .N^NuNVJg .`pN^NuNVB . l" @>Jf @> N^NuR`pN^NuNV nBN^NuNV. am zn aAN^Nu. N^NuNV. HH/aX.HH/@aX/fp`pN^NuNVp-@p-@p-@-@ n JgR`B . nJg n@JgR =g ,f .S".f .N^Nu .R.HH n HH//-@a2PJfB. ,g =f p-@p-@ .,fRR`^Jg .S".f .N^NupN^NuNVHnBaPP ."<]NZV"<NY-AHnp/a P .N^NuNVHnp/aPN^NuNVJ. f n (` n #(N^NuNVH*OBxPpn@N?.*?.&?."?.?.?.?.?. NA.ML?N^NuC,# O0/@11g"HS@4TBB$0 g/`?S@j?(NA.yNuC# O0/@11g"HS@4TBB$0 g/`?S@j?(NM.yNuC# O0/@11g"HS@4TBB$0 g/`?S@j?(NN.yNu /ob"/ o\ o"of>/f6/ f.f$ Sf"oSf`"$0Sf"oSf`$Sf"oSfNu o"o / oe  SfNuSfNu o /o "/ SfNu//Jg"JgBv㒴eQ"`BB&$NuH<*g2jD(g(jDBv㒴eRQ"jDjD`BBL1o<"/ !A:!o1o81|.!@21| ,No|AoCD!ICD!IHNuAo1oD1oH1o D1o81|.1|21|g,No|HNuAo!o1o81|.Bh21|r,No|AoCD!IHNuAo!o1o81|.Bh21|61| ,No|AoCD!IHNuAo1oF1oD1oP1oF1o D1o81|.1|21|6BhHBhJBhLBhNBhR1| ,No|HNuAo1oF1oD1oP1oF1o D1o81|.1|21|6BhHBhJBhLBhNBhR1| ,No|HNuAo1oL1oF1o D1o81|.Bh21|6BhHBhJBhN1| ,No|HNuAo1oF1oD1oJ1oH1oF1o D1o81|.1|21|61| ,No|HNuAo1oF1oD1oJ1oH1oF1o D1o81|.1|21|61| ,No|HNuAo1oJ1oH1oF1o D1o81|.Bh21|61| ,No|HNuAo!o1o81|.Bh21|61| ,No|AoCD!IHNuAo!o1o81|.Bh21| 61| ,No|AoCD!IHNuAo1oF1oD1oH1oF1o D1o81|.r"oRJf1A2p"o/ EH4Q$_h21| 61| ,No|HNuAo1o D1o8Bh.1|21| ,No|0(DHNuAo1o D1o82<"o C/ EF4Q$_Bh.1|21|,No|HNuAo1o D1o8Bh.1|21|,No|0(DHNuAo1o D1o8Bh.1|21|q,No|HNuAo1o D1o8BhF1|.Bh21|,No|0(DHNuAo1o D1o8Bh.1|21|,No|0(DHNuAo1oF1o D1o8Bh.1|21|l,No|HNuAo1o D1o8Bh.1|21|,No|0(DHNuAo1o F1o81|.Bh21|,No|0(FHNuAo1o D1o8Bh.1|21|,No|0(DHNuAo1o F1o8BhD1|.Bh21| ,No|Ao"o 2D"o2F"o2H"o2JHNuAo1o D1o8Bh.1|21|k,No|Ao"o 2D"o2F"o2H"o2J0(DHNuAo1o D1o8Bh.1|21| ,No|0(DHNuAo1o D1o8Bh.1|21|,No|0(DHNuAo1o D1o8Bh.1|21|,No|0(DHNuAo1o D1o8Bh.1|21|j,No|0(DHNuAo1oF1o D1o8Bh.1|21|',No|Ao"o2D"o2FHNuAo1o D1o8Bh.1|21|,No|0(DHNuAo1o D1o8Bh.1|21|,No|0(DHNuAo1o D1o8Bh.1|21|,No|0(DHNuAo1o D1o8Bh.1|21|h,No|0(DHNuAo /!@2!o1o8Bh.1|p,No|AoCD!IHNuAo!o>!o:!o 1o D1o81|.1|21|m,No|AoCD!IHNuAo2<"oC/ EF4Q$_!o>!o:!o 1o D1o81|.1|21|y,No|AoCD!IHNuAo!o >!o:1o8Bh.Bh21|n,No|HNuAo1oF1o D1o81|.Bh21|i,No|Ao"o2D"o2FHNuAo!o1o8Bh.1|%21|o,No|AoCD!IHNuAo!o:1o8Bh.Bh21|v,No|Ao"o2D"o ">HNuAo1o D1o8Bh.1|21|z,No|HNuAo1o8Bh.Bh21|{,No|HNuAo1o8Bh.Bh21||,No|Ao"o2D"o 2D"o2FHNuAo!o:1o8Bh.Bh21|},No|Ao"o ">HNuAo!o:1o8Bh.Bh21|~,No|Ao"o ">HNuAo!o:1o8Bh.Bh21|,No|Ao"o ">HNuAo1o8Bh.Bh21|,No|Ao"o2DHNuAoBh1|Bh1| NoAo0(0HNuAo!o 01o 21o01|1|1|1| NoAo0(0HNuAo!o 01o 21o01|1|1|1| NoAo0(0HNuAo1o0Bh1|Bh1| NoAo0(0HNuAo1o21o 0!o01|1|1|1|NoAo0(0HNuAo1o 0!o01|1|1|1|NoAo0(0HNuAoBh1|Bh1|NoAo0(0HNuAo1o 0!o01|1|1|1|2NoAo0(0HNuAo1o&@1o">1o<1o:1o81o61o41o 21o01| 1|1|1|3NoAo0(0HNuAo!o01o01|1|1|1|4NoAo0(0HNuAo1o01|1|Bh1|5NoAo0(0HNuAo!o0Bh1|1|1|6NoAo"o22"o 24"o26"o280(0HNuAo1o61o41o 21o01|1|Bh1|FNoAo"o22"o240(0HNuAo1o">1o<1o:1o81o61o41o 21o01|1|Bh1|GNoAo"o$22"o(240(0HNuAo1o:1o81o61o41o 21o01|1|Bh1|HNoAo0(0HNuAo1o">1o<1o:1o81o61o41o 21o01|1|Bh1|INoAo0(0HNuAo1o">1o<1o:1o81o61o41o 21o01|1|Bh1|JNoAo0(0HNuAo1o61o41o 2!o01|1|1|1|KNoAo0(0HNuAo1o41o21o 0!o01|1|1|1|LNoAo0(0HNuAoBh1|Bh1|MNoAo"o22"o24"o 26"o280(0HNuAo!o01o01|1|1|1|NNoAo0(0HNuAoBh1|Bh1|ONoAo"o22"o24"o 26"o280(0HNu"0<sNBNu"0<NBNu1.01ooqsuowosqu/90/9`/9/9;/?0;/?`;/?2///|/J0|/J`|/J:2/                      2F]^ _   2 B N P Z_ $%*0178P Q^NZ_^_ TT  T""T#$^$_&'_)N)Y)[)[*** ******0*2*6*<*B*H*N*P*T*V*Z*[*^*_--$-0-T..$.0.<.=.B.D.H.I.N.P.T.V00$000T11$1%101B1H1T1_ 33=]=_ ??? ? ?????*?+?T?U?V?Z?^?_CCCCC$C0C<CHCTDDDDD$D0DTD_CGGGGG$G0G<GHGTHHHHH$H0H<HHHTH]H^III0IHITIUKKK0KHKTKUMMM0MHMTMUOOO0O<OHOTOUOZO^RR^SSSSSS*S0S6S<SBSHSNSTZVVV0V1WWW0W1XPddemo.mus[1][Diese Grafik und Sound Demo|sollten Sie sich auf einem|Farbmonitor ansehen. Sonst|knnen Sie nur die Musik hren.][ OK ]Grafik und SoundDemovon Eckhard KruseReichenbergweg 733O2 WeddelNa los, Gnurp!Zeig, was dukannst!Hau' rein, Zottl!Zeig's ihnen,Schnatter!Alles klar?!onetwothreefourdemo.gra "$&(*-/258<?CGKPTY_djqw -?Rf{8Z~$T1pGG wa h 0 M  "$%')+,.013578:<=?ACDFHIKMOPRTUWY[\^`rwaaCan't open stdin file Can't open stdout file con:CON:prn:PRN:lst:LST:lpt:LPT:lpt1:LPT1:aux:AUX:com:COM:com1:COM1:rdr:RDR:pun:PUN:nul:NUL:null:NULL:CON:AXI:,AXO:,LST:,NIL:,CON:=* ((((( H ((((( H B H*"       (  &00 $ $   " $ $ $ ,     $ f  P r"H 4  6    .   8  4   h4   z4      6 6 466 6      D 244DD >D42 J4228 48428 4 6 ( ,4(.    &$ N. "  &        T             ( 4          ,N 6F  (&$  * "  .  "  (    P:$  :":V:l&$@T6(,j$&:P(J.z    ,$ , Xd`$  J $2 40 & 0  F H 4 T<@HF B >@@@*<  "" *""J "F0 "(V V @ H H : ((h "< "" &"( """&*".""""(""""&6P& (" "  "   00 0**T*"".4L@LL66.*F` B?< NA\#0<"|@ |0Q |0<?r Q | 0<0Q0<H3@ `##9 9# v#  99`#p#zp`     4< 8<2<6<MB=|;0H=@Bn=A=BHL@A:<g:<EQBQ3?<?<NMX f0<H `##v #p0<"|@ |2Q/9?< NA\NqNqNqBgNAF%NH |B"y 0##@ LNsH |P"y ##  LNsH! 9!f#  # JygP09 |20 yU@j"0<P/±f |# _300 | 1LN?? P  0!@1"PA2#`QB3$paRC4%qbSD5&prcTE6'qsdUF7prteVG'qsufW7prtvgG'qsuwW7prtvgG'qsuwW7prtvgG'qsuwW7prtvgG'qsuwW7prtvgG'qsuwW7rtvgG'suwW7tvgGuwWvgw 0@ P0`@ pP0`@ pP0`@ pP0`@ pP0`@ pP0`@ pP0!`@1"pPA2#`QB3$paRC4%qbSD5&rcTE6'sdUF7teVGufWvgw 0!@1"PA2#`QB3$paRC4%qbSD5&prcTE6'qsdUF7prteVG'qsufW7prtvgG'qsuwW7prtvgG'qsuwW7prtvgG'qsuwW7prtvgG'qsuwW7prtvgG'qsuwW7rtvgG'suwW7tvgGuwWvgw 0@ P0`@ pP0`@ pP0`@ pP0`@ pP0`@ pP0`@ pP0!`@1"pPA2#`QB3$paRC4%qbSD5&rcTE6'sdUF7teVGufWvgw 0!@1"PA2#`QB3$paRC4%qbSD5&prcTE6'qsdUF7prteVG'qsufW7prtvgG'qsuwW7prtvgG'qsuwW7prtvgG'qsuwW7prtvgG'qsuwW7prtvgG'qsuwW7rtvgG'suwW7tvgGuwWvgw 0@ P0`@ pP0`@ pP0`@ pP0`@ pP0`@ pP0`@ pP0!`@1"pPA2#`QB3$paRC4%qbSD5&rcTE6'sdUF7teVGufWvgw"~$2@0 |n`p&4BP^N>.zl^PBRbr (6DR`n|l\L<,xj\N@2$4DTdt8FTbp~zjZJ:hZL>0"&6FVfv *HVdrplane_ctfg_colbg_cold_xmind_yminp_addr*bitblthpalet@hrez`screenvbaselvbasehieraierb ipra iprb israisrbimraimrbtbcrtbdr!tcdcrtcdr#aciacaciadhblkcv hblankvhvblankvptimercvkeybrdvrs232v0startsstackppalsavepsavlp clscree2palt clrpltBierbsierasimrasrezsavkeysavmidihblksavvhblk vblksavvblkzloadcolcoltabrowlpcollpp_blockBnotupNdenablconchinpmainlpddonevpsavlp1exitcurcolhblk1@verifybno2 ordoffcurplanenot_newnowrapvblk1hexgrampalt0torderl1l2l3NPf,|C0v0N`Cf |~720ab`|~50`f<xl<Qg0<%g6<&g0<8g*<9g$<ag<qgfJg`T`alR`ad` 9"9H 9␳#f #X#~#f #ڄNu$hB\FJlNt~ 0$ 2H,r(:z<F`Rpx`VlBP(B  X|H@09hNNRXNXB09hNNR3hNuDSNuRSNuSSNualahadB029HA6Nu0<SNu2jDA6NurJSkgr`B6Nu09`H@0 @BA6Nu09`H@0 @6Nu09`H@B2Ё2Ё @Nu2067Nu2H6Nu0kBfRg` rfSjr6Nu7Nu2S6Nu2DAS6Nu26Nu2HA6Nu42HHg6Nu6Nu02Ё/`/BB0$JT"¼&g g gԁ`B6&Nu %,28>DJPV\bgmsx~2Ҽ@`2|a 26Nug <aD@Nu<@ef0<`D<B@ | l0Nu@BDHIJLNPRSTUVWXZ\]^`bcdefghiijjklmnopqqrrssttuuuvvvwwxxyyyyyzzzzz{{{{||||||}}}}}}}}}}~~~~~~~~~~HB2jDA<0ffjD@ AdA<JAg$@Ht @UHH | B0 ` <dD<gDCC6L8Nu05PUJ@gj`$B0Jgk~`~`>5PUuPNu0J@gBGT;PNu02@f`02@g`24`2BBB<@A@<gf2S6Nu2S6Nu2SNuTNu3`NuBf0A"e g 0H.~rNIL.~rNu09`H@0 @0Nu09`H@0 @0XXNu09`H@B2Ё2Ё @2Nu20Al@Sl6So6NuB20Al@SmSm6Nu?+`;`;`P5Nu?QjNuu`f42u`fNuRr"uhPNuB2|a6NuB2|a6NuB2|y6Nu2|y6NuB2|i6NuBBSNuBBSNuBBSNuB+HX`B@,|,vg"NNu,ylHfX <Nز<wb<?c<EfڴfUN`B@ IU,|-NuY"uHNuB7NuBYY7NuH7Nu$|rB0NuB;PNuUNuHNXL7NuHNL2fHBABBgSBgRBgSAgRA67NuHNL2fH|6NuH?NL7NuH?NL7Nu20gDAH?N:LNujD<@e4|3pJk0NNt7Nu20BBk<e49pN(N20BBk<e49pN~20BBkԴ<e49pNN42BXNH |R| Jf4j DJBjDB<-B2 6HA<04f |JʼRB NJfLNu0f 2IN2|N4Vxcxysxincyincsinccitintbrightcregmousexmeybuttontriggerocol0ocol1ocol2ocol3PTPTPTPTQ@PsPPPPpDDTd@PdPPPQfgE P P TTOE|PqK }Pq}H&}!A PP5 PPr&} PP5PPr&}!A PQ+5 PQ+r&}PPp P!TP!Td@ DDPTdDP Qp @ P9PTdPTdPTdPTdQegQbgQ ag}KEP9PPr+P}EPύH%P1}H%P1}H%Q1}"ET+!!UA WAQ@!!!UAQ@! WA<          "  j      $2b,2 B   2 . L.. LYCLES BSCbEMOLISHBSCe) ESTROY BSChYNAMIC BSCjs ANDELZMBSCmEPLOT BSCpsCRAM BSCsILEPUZLBSCvRIVIA BSCyRIVIA QA |dNSCRAM BSCITCH BSC6\Light-Cycles \By C. Newcombe \(c) Atari ST User \To enable mouse and key repeat \type POKE $484,2:OUT 4,8 \in immediate mode IF SCREENMODE THEN PRINT"Low-res only":END TXTRECT 0,0,320,200:GRAFRECT 0,0,320,192:FILLCOL 3:FILLSTYLE 1,0 RESTORE cols:FOR n=0 TO 15:READ r,g,b:SETCOL n,r,g,b:NEXT RESERVE snds%,64:RESTORE snds:FOR n=0 TO 63:READ ?(snds%+n):NEXT:cr%=snds%:bng%=snds%+28 DIM ex_crds&(15,4) p_1_x&=0:p_1_y&=0:p_2_x&=0:p_2_y&=0:joy_x&=0:joy_y&=0:p_2_dx&=0:p_2_dy&=0 INK 0:CLS:PROCassm:CALL ptch_joy%:OUT 4,$12:OUT 4,$15::CALL set_uppr%:POKE $484,0 HIDEMOUSE:CLS:INK 3:PRINT TAB(13,2)"Light-Cycles" INK 1:PRINT TAB(4,6)"Player ";:INK 2:PRINT;1;:INK 1:PRINT" use keys A, Z, < and >" PRINT TAB(4,8)"Player ";:INK 3:PRINT;2;:INK 1:PRINT" use a joystick" INK 6:PRINT TAB(9,12)"Press ";:INK 1:PRINT "SPACE";:INK 6:PRINT " to play" REPEAT:UNTIL INKEY=32:TXTRECT 0,192,320,8 REPEAT CLS: INK 2:PRINT "Speed? (";:INK 1:PRINT "0-9";:INK 2:PRINT ") (0=Slow, 9=Fast)"; REPEAT:s$=GET$:UNTIL s$>="0" AND s$<="9":d=20*(9-VAL(s$)):PROCscr_off PRINT "Perimeter wall? (";:INK 1:PRINT "S";:INK 2:PRINT "olid/";:INK 1:PRINT "B"; INK 2:PRINT "roken/";:INK 1:PRINT "N";:INK 2:PRINT "one)"; REPEAT:w$=GET$:UNTIL w$="S" OR w$="B" OR w$="N":PROCscr_off PRINT "Obstacles? (";:INK 1:PRINT "0-9";:INK 2:PRINT ") (0=None, 9=lots)"; REPEAT:o$=GET$:UNTIL o$>="0" AND o$<="9":o=5*VAL(o$):PROCscr_off IF o<>0 THEN PRINT "Obstacle size? (";:INK 1:PRINT "1-8"; INK 2:PRINT") (1=Small, 8=Large)"; REPEAT:b$=GET$:UNTIL b$>="1" AND b$<="8":s=2*VAL(b$):s2=s/2:PROCscr_off ENDIF REPEAT CLG 0:IF o<>0 THEN LINETYPE 1:LINECOL 2:GRAFMODE 1 FOR n=1 TO o:REPEAT o_x&=ABS(((RND(11)-1)*32)-1):o_y&=ABS(((RND(7)-1)*32)-1) UNTIL POINT(o_x&,o_y&)=0 IF RND(4)=4 THEN LINE o_x&,o_y&-s TO o_x&+s,o_y&:LINE o_x&+s,o_y& TO o_x&,o_y&+s LINE o_x&,o_y&+s TO o_x&-s,o_y&:LINE o_x&-s,o_y& TO o_x&,o_y&-s ELSE LINE o_x&-s2,o_y&-s2 TO o_x&+s2,o_y&-s2:LINE o_x&+s2,o_y&-s2 TO o_x&+s2,o_y&+s2 LINE o_x&+s2,o_y&+s2 TO o_x&-s2,o_y&+s2:LINE o_x&-s2,o_y&+s2 TO o_x&-s2,o_y&-s2 ENDIF:FILL o_x&,o_y&,-1:NEXT:ENDIF IF w$<>"N" THEN IF w$="B" THEN LINETYPE RND(5)+1 ELSE LINETYPE 1 ENDIF LINECOL 6:GRAFMODE 1 LINE 0,0 TO 319,0:LINE 319,0 TO 319,191 LINE 0,191 TO 319,191:LINE 0,0 TO 0,191 ENDIF p_1_x&=48:p_1_y&=80:p_1_dx&=1:p_1_dy&=0 p_2_x&=319-48:p_2_y&=80:joy_x&=-1:joy_y&=0 PROCdia(p_1_x&,p_1_y&):CALL p_1_plt% PROCdia(p_2_x&,p_2_y&):CALL p_2_plt% OUT 4,$14:REPEAT CALL drw_cycls%:FOR n=0 TO d:NEXT k=INKEY:IF k<>-1 THEN SWITCH k CASE 65:p_1_dx&=0:p_1_dy&=-1 CASE 90:p_1_dx&=0:p_1_dy&=1 CASE 44:p_1_dx&=-1:p_1_dy&=0 CASE 46:p_1_dx&=1:p_1_dy&=0 ENDSWITCH ENDIF p_1_x&=(p_1_x&+p_1_dx&) MOD 320:IF p_1_x&<0 THEN p_1_x&=319 p_1_y&=(p_1_y&+p_1_dy&) MOD 192:IF p_1_y&<0 THEN p_1_y&=191 CALL sntch_joy%:p_2_x&=(p_2_x&+p_2_dx&) MOD 320:IF p_2_x&<0 THEN p_2_x&=319 p_2_y&=(p_2_y&+p_2_dy&) MOD 192:IF p_2_y&<0 THEN p_2_y&=191 UNTIL USR pnt_cycls%<>0 OR (p_1_x&=p_2_x& AND p_1_y&=p_2_y&) OUT 4,$15:IF USR p_1_pnt%=0 AND USR p_2_pnt%<>0 THEN INK 1:PRINT " ----------- ";:PRINT "Player ";:INK 2:PRINT "1";:INK 1:PRINT " wins. -----------";:PROCexp(2) ELSE IF USR p_1_pnt%<>0 AND USR p_2_pnt%=0 THEN INK 1:PRINT " ----------- ";:PRINT "Player ";:INK 3:PRINT "2";:INK 1:PRINT " wins. -----------";:PROCexp(1) ELSE INK 1:PRINT " --------- Both players lose. ---------";:PROCexp(3) ENDIF:ENDIF:PROCscr_off INK 1:PRINT "SPACE";:INK 2:PRINT " to play,"; INK 1:PRINT "RETURN";:INK 2:PRINT " to change game"; REPEAT:k=INKEY:UNTIL k=32 OR k=13:PROCscr_off UNTIL k<>32:UNTIL FALSE DEFPROCassm RESERVE c%,5*1024 FOR p=1 TO 2 [ OPT p,"L-" ORG c% p_1_plt% MOVE.W @p_1_x&,D0 MOVE.W @p_1_y&,D1 MOVE.L #$FFFF0000,D7 BRA do_plt% p_2_plt% MOVE.W @p_2_x&,D0 MOVE.W @p_2_y&,D1 MOVE.L #$FFFF,D7 BRA do_plt% drw_cycls% MOVE.W @p_1_x&,D0 MOVE.W @p_1_y&,D1 MOVE.L #$FFFF0000,D7 BSR do_plt% MOVE.W @p_2_x&,D0 MOVE.W @p_2_y&,D1 MOVE.L #$FFFF,D7 do_plt% BSR calc_addr% MOVE.L #msks%,A1 AND.W #$F,D2 LSL.W #2,D2 MOVE.L 0(A1,D2.W),D0 AND.L D0,D7 NOT.L D0 AND.L D0,(A0) OR.L D7,(A0) RTS p_1_pnt% MOVE.W @p_1_x&,D0 MOVE.W @p_1_y&,D1 BRA do_pnt% p_2_pnt% MOVE.W @p_2_x&,D0 MOVE.W @p_2_y&,D1 BRA do_pnt% pnt_cycls% MOVE.W @p_1_x&,D0 MOVE.W @p_1_y&,D1 BSR do_pnt% BNE pnt_out% MOVE.W @p_2_x&,D0 MOVE.W @p_2_y&,D1 do_pnt% BSR calc_addr% MOVE.L (A0),D0 MOVE.L #msks%,A1 AND.W #$F,D2 LSL.W #2,D2 MOVE.L 0(A1,D2.W),D1 AND.L D1,D0 pnt_out% RTS calc_addr% MOVE.L #PHYSBASE,A0 MOVE.W D1,D2 LSL.W #2,D1 ADD.W D2,D1 LSL.W #5,D1 MOVE.W D0,D2 AND.W #$FFF0,D0 LSR.W #1,D0 ADD.W D1,D0 LEA 0(A0,D0.W),A0 RTS sntch_joy% MOVE.W @joy_x&,@p_2_dx& MOVE.W @joy_y&,@p_2_dy& RTS ptch_joy% MOVE.W #34,-(A7) TRAP #14 ADDQ.L #2,A7 MOVE.L D0,A0 MOVE.L #joy_vec%,24(A0) RTS joy_vec% MOVE.B (A0),D0 AND.W #$1,D0 BEQ joy_ptch_out% MOVE.B 2(A0),D0 AND.W #$F,D0 LSL.W #2,D0 MOVE.L #joy_tab%,A1 MOVE.W 0(A1,D0.W),D1 MOVE.W 2(A1,D0.W),D2 MOVE.W D1,D3 OR.W D2,D3 BEQ joy_ptch_out% MOVE.W D1,@joy_x& MOVE.W D2,@joy_y& joy_ptch_out% RTS set_uppr% MOVE.W #%00010000,-(A7) MOVE.W #11,-(A7) TRAP #13 ADDQ.L #4,A7 RTS joy_tab% DC.W 0,0 DC.W 0,-1 DC.W 0,1 DC.W 0,0 DC.W -1,0 DC.W 0,0 DC.W 0,0 DC.W 0,0 DC.W 1,0 DC.W 0,0 DC.W 0,0 msks% DC.L $80008000 DC.L $40004000 DC.L $20002000 DC.L $10001000 DC.L $8000800 DC.L $4000400 DC.L $2000200 DC.L $1000100 DC.L $800080 DC.L $400040 DC.L $200020 DC.L $100010 DC.L $80008 DC.L $40004 DC.L $20002 DC.L $10001 ] NEXT ENDPROC DEFPROCscr_off FOR n=0 TO 7:TXTSCROLL 0,-1:FOR m=0 TO 200:NEXT:NEXT TXTXPOS=0:TXTYPOS=0 ENDPROC DEFPROCdia(x&,y&) LINETYPE 1:GRAFMODE 3:LINECOL 1:DOSOUND cr% FOR n=90 TO 0 STEP -5:FOR m=0 TO 1 LINE x&,y&-n TO x&+n,y&:LINE x&+n,y& TO x&,y&+n LINE x&,y&+n TO x&-n,y&:LINE x&-n,y& TO x&,y&-n NEXT:NEXT ENDPROC DEFPROCexp(pl) DOSOUND bng%:IF pl=1 THEN x&=p_1_x&:y&=p_1_y&:dx&=p_1_dx&:dy&=p_1_dy& ELSE IF pl=2 THEN x&=p_2_x&:y&=p_2_y&:dx&=p_2_dx&:dy&=p_2_dy& ENDIF FOR n=0 TO 15:IF pl=3 THEN IF n/2=INT (n/2) THEN x&=p_1_x&:y&=p_1_y&:dx&=p_1_dx&:dy&=p_1_dy& ELSE x&=p_2_x&:y&=p_2_y&:dx&=p_2_dx&:dy&=p_2_dy& ENDIF:ENDIF:ex_crds&(n,0)=x&:ex_crds&(n,1)=y& IF dx&<>0 THEN ex_crds&(n,2)=-RND(2)*dx&:ex_crds&(n,3)=(RND(20)-10) ELSE ex_crds&(n,2)=(RND(20)-10):ex_crds&(n,3)=-RND(2)*dy& ENDIF:ex_crds&(n,4)=15:NEXT GRAFMODE 1:FOR n=0 TO 30:FOR m=0 TO 15 IF ex_crds&(m,4)>8 THEN MARKCOL 0:PLOT ex_crds&(m,0),ex_crds&(m,1) ex_crds&(m,0)=ex_crds&(m,0)+ex_crds&(m,2) ex_crds&(m,1)=ex_crds&(m,1)+ex_crds&(m,3) IF POINT(ex_crds&(m,0),ex_crds&(m,1))=0 THEN MARKCOL ex_crds&(m,4):PLOT ex_crds&(m,0),ex_crds&(m,1) ex_crds&(m,4)=ex_crds&(m,4)-(RND(2)-1) ELSE ex_crds&(m,4)=0 ENDIF:ENDIF:NEXT:NEXT ENDPROC cols: DATA 0,0,0,7,0,0,0,0,7,7,0,0,0,0,0,0,0,0 DATA 0,0,0,0,0,0,1,1,0,2,2,0,3,3,0,6,6,0 DATA 4,4,0,7,7,0,5,5,0,7,7,7 snds: DATA 0,223, 1,7, 2,132, 3,2, 4,194, 5,1, 7,248, 8,16 DATA 9,16, 10,16, 11,204, 12,16, 13,4, 255,0 DATA 0,25, 1,0, 2,72, 3,0, 4,115, 5,0, 6,1, 7,199 DATA 8,16, 9,16, 10,16, 11,56, 12,74, 13,0, 128,31, 129,6, 156,0, 255,0 REM DEMOLITION REM By Robert Davidson REM For Fast Basic IF SCREENMODE>0 THEN PRINT"Low res only":END PROCinitialise REPEAT PROCset_up count=0 REPEAT row=1 WHILE row<8 AND NOT dead bombs=max% DIV2+RND(4)-1 IF bombs<3 THEN bombs=3 FOR go=1 TO bombs T%=TIME:REPEAT:UNTIL TIME>=T%+100 start=RND(2) dropped=FALSE WHILE INKEY$<>"" WEND INK 9 REPEAT IF start=1 THEN PROCleft ELSE PROCright UNTIL dropped=TRUE PROCdrop NEXT WAIT TXTSCROLL 0,-8 INK wall_colour IF count MOD2=1 THEN PRINT TAB(0,23)row$; INK 1:PRINT TAB(4,0)"High Score ";hiscore% INK 7:PRINT TAB(26,0)"Score ";score% FOR y=1 TO 22 FOR x=2 TO 37 A%(x,y)=A%(x,y+1) NEXT NEXT FOR x=2 TO 37 IF count MOD2=1 THEN A%(x,23)=1 ELSE A%(x,23)=0 NEXT FOR x=2 TO 37 IF A%(x,1)=1 THEN dead=TRUE x2=x x=37 ENDIF NEXT row=row+1 WEND count=count+1 IF count MOD2=1 THEN max%=max%-1 old_colour=wall_colour REPEAT wall_colour=RND(10)+1 UNTIL wall_colour<>old_colour ENDIF UNTIL dead INK 5 FOR x=0 TO x2-1 PRINT TAB(x,1)">"; NEXT PROCdelay(500) IF score%>hiscore% THEN hiscore%=score% INK 9 PRINT TAB(5,24)"Press Spacebar to play again"; WHILE INKEY$<>"" WEND g=GET UNTIL FALSE END DEF PROCinitialise DIM A%(39,24) FOR i=0 TO 11 READ R%,G%,B% PALETTE i,R%*1000/7,G%*1000/7,B%*1000/7 NEXT TXTRECT 0,0,320,200 hiscore%=0 brick$=CHR$174+CHR$175 row$=" "+STRING$(18,brick$) rand=RND(-TIME) HIDEMOUSE TXTSIZE 6 ENDPROC DEF PROCset_up score%=0:max%=13:dead=FALSE CLS INK 1:PRINT TAB(4,0)"High Score ";hiscore% INK 7:PRINT TAB(26,0)"Score ";score% FOR y=0 TO 16 FOR x=2 TO 37 A%(x,y)=0 NEXT NEXT wall_colour=RND(10)+1:INK wall_colour FOR y=17 TO 23 PRINT TAB(0,y)row$; FOR x=2 TO 37 A%(x,y)=1 NEXT NEXT ENDPROC DEF PROCleft FOR x2=37 TO 1 STEP -1:x=x2 WAIT PRINT TAB(x,1)"O "; IF INKEY=32 THEN dropped=TRUE:x2=1 NEXT BEEP start=start+1 ENDPROC DEF PROCright FOR x2=2 TO 38:x=x2 WAIT PRINT TAB(x-1,1)" O"; IF INKEY=32 THEN dropped=TRUE:x2=38 NEXT BEEP start=start-1 ENDPROC DEF PROCdrop FOR y=2 TO 24 PROCdelay(2) PRINT TAB(x,y-1)" "; IF A%(x,y)=1 THEN PROChit ELSE PRINT TAB(x,y)"O"; NEXT PRINT TAB(x,24)" "; ENDPROC DEF PROChit A%(x,y)=0 PRINT TAB(x,y)" "; PROCscore xleft=x:xright=x yleft=y:yright=y hitleft=TRUE:hitright=TRUE REPEAT PROCdem_left PROCdem_right UNTIL hitleft=FALSE AND hitright=FALSE y=24 ENDPROC DEF PROCdem_left IF hitleft=FALSE THEN ENDPROC xleft=xleft-1:yleft=yleft-1 IF A%(xleft,yleft)=0 THEN hitleft=FALSE:ENDPROC A%(xleft,yleft)=0 PRINT TAB(xleft,yleft)" "; PROCscore ENDPROC DEF PROCdem_right IF hitright=FALSE THEN ENDPROC xright=xright+1:yright=yright-1 IF A%(xright,yright)=0 THEN hitright=FALSE:ENDPROC A%(xright,yright)=0 PRINT TAB(xright,yright)" "; PROCscore ENDPROC DEF PROCscore score%=score%+1 INK 7:PRINT TAB(32,0);score% BEEP PROCdelay(20) ENDPROC DEF PROCdelay(n) T%=TIME REPEAT UNTIL TIME>=T%+n ENDPROC DATA 0,0,0 DATA 7,0,0 DATA 7,3,0 DATA 7,7,0 DATA 7,0,4 DATA 7,0,7 DATA 3,7,0 DATA 0,7,0 DATA 0,7,4 DATA 0,7,7 DATA 0,4,7 DATA 0,0,7 % THEN hiscore%=score% INK 9 PRINT TAB(5,24)"Press Spacebar to play again"; WHILE INKEY$<>"" WEND g=GET UNTIL FALSE END DEF PROCinitialise DIM A%(39,24) FOR i=0 TO 11 READ R%,G%,B% PALETTE i,R%*1000/7,G%*1000/7,B%*1000/7 NEXT TXTRECT 0,0,320,200 hiscore%=0 brick$=CHR$174+CHR$175 row$=" "+STRING$(18,brick$) rand=RND(-TIME) HIDEMOUSE TXTSIZE 6 ENDPROC DEF PROCset_up score%=0:max%=13:dead=FALSE CLS INK 1:PRINT TAB(4,0)"High Score ";hiscore% INK 7:PRINT TAB(26,0)"Score ";score% FOR y=0 TO 16 FOR x=2 TO 37 A%(x,y)=0 NEXT NEXT wall_colour=RND(10)+1:INK wall_colour FOR y=17 TO 23 PRINT TAB(0,y)row$; FOR x=2 TO 37 A%(x,y)=1 NEXT NEXT ENDPROC DEF PROCleft FOR x2=37 TO 1 STEP -1:x=x2 WAIT PRINT TAB(x,1)"O "; IF INKEY=32 THEN dropped=TRUE:x2=1 NEXT BEEP start=start+1 ENDPROC DEF PROCright FOR x2=2 TO 38:x=x2 WAIT PRINT TAB(x-1,1)" O"; IF INKEY=32 THEN dropped=TRUE:x2=38 NEXT BEEP start=start-1 ENDPROC DEF PROCdrREM File Destroyer REM By Julie Boswell REM (c) Atari ST User TXTRECT 0,0,SCREENWIDTH,SCREENHEIGHT CLS PATH$="A:\" file$=PATH$+"*.*" name$="" button=0 FSELECT file$,name$,button IF button=0 OR name$="" THEN END WHILE RIGHT$(file$,1)<>"\" file$=LEFT$(file$,LEN(file$)-1) WEND PATH$=file$ CLS PRINT"Destroying file..." file=OPENOUT name$ FOR i=0 TO EXT#file BPUT#file,32 NEXT CLOSE#file DELFILE name$ END eft-1 IF A%(xleft,yleft)=0 THEN hitleft=FALSE:ENDPROC A%(xleft,yleft)=0 PRINT TAB(xleft,yleft)" "; PROCscore ENDPROC DEF PROCdem_right IF hitright=FALSE THEN ENDPROC xright=xright+1:yright=yright-1 IF A%(xright,yright)=0 THEN hitright=FALSE:ENDPROC A%(xright,yright)=0 PRINT TAB(xright,yright)" "; PROCscore ENDPROC DEF PROCscore score%=score%+1 INK 7:PRINT TAB(32,0);score% BEEP PROCdelay(20) ENDPROC DEF PROCdelay(n) T%=TIME REPEAT UNTIL TIME>=T%+n ENDPROC DATA 0,0,0 DATA 7,0,0 DATA 7,3,0 DATA 7,7,0 DATA 7,0,4 DATA 7,0,7 DATA 3,7,0 DATA 0,7,0 DATA 0,7\Dynamic Relaxation. \By Charlie Dancey \(c) Atari ST User \Written in Fast Basic \Works in all Screen modes PROCsetscreen PROCcreatevariables REPEAT PROCrotate PROCdraw PROCrelax count=count+1 u=u+0.2 UNTIL FALSE END \---------------------------------- \Procedure and Function Definitions \---------------------------------- DEF PROCrelax FOR i%=1 TO 19 FOR j%=1 TO 19 IF i%=10 AND j%=10 THEN \Do nothing this is mast top. ELSE \Average coordinates of four neighbours x(i%,j%)=(x(i%+1,j%)+x(i%-1,j%)+x(i%,j%+1)+x(i%,j%-1))/4 y(i%,j%)=(y(i%+1,j%)+y(i%-1,j%)+y(i%,j%+1)+y(i%,j%-1))/4 z(i%,j%)=(z(i%+1,j%)+z(i%-1,j%)+z(i%,j%+1)+z(i%,j%-1))/4 ENDIF NEXT j% NEXT i% \Now relax edges FOR i%=1 TO 19 x(i%,0)=FNedgecalc(x(i%,1),x(i%-1,0),x(i%+1,0)) x(i%,20)=FNedgecalc(x(i%,19),x(i%-1,20),x(i%+1,20)) y(i%,0)=FNedgecalc(y(i%,1),y(i%-1,0),y(i%+1,0)) y(i%,20)=FNedgecalc(y(i%,19),y(i%-1,20),y(i%+1,20)) z(i%,0)=FNedgecalc(z(i%,1),z(i%-1,0),z(i%+1,0)) z(i%,20)=FNedgecalc(z(i%,19),z(i%-1,20),z(i%+1,20)) NEXT i% FOR j%= 1 TO 19 x(0,j%)=FNedgecalc(x(1,j%),x(0,j%-1),x(0,j%+1)) x(20,j%)=FNedgecalc(x(19,j%),x(20,j%-1),x(20,j%+1)) y(0,j%)=FNedgecalc(y(1,j%),y(0,j%-1),y(0,j%+1)) y(20,j%)=FNedgecalc(y(19,j%),y(20,j%-1),y(20,j%+1)) z(0,j%)=FNedgecalc(z(1,j%),z(0,j%-1),z(0,j%+1)) z(20,j%)=FNedgecalc(z(19,j%),z(20,j%-1),z(20,j%+1)) NEXT j% ENDPROC DEF FNedgecalc(a,b,c) =(a+cable*b+cable*c)/(2*cable+1) DEF PROCdraw CLG 0 HOME PRINT count;" Sweeps" FOR i% = 0 TO 20 FOR j% = 0 TO 19 LINE a(i%,j%),b(i%,j%) TO a(i%,j%+1),b(i%,j%+1) NEXT j% NEXT i% FOR j%= 0 TO 20 FOR i% = 0 TO 19 LINE a(i%,j%),b(i%,j%) TO a(i%+1,j%),b(i%+1,j%) NEXT i% NEXT j% ENDPROC DEF PROCcreatevariables DIM x(20,20),y(20,20),z(20,20),a(20,20),b(20,20) FOR i%=0 TO 20 FOR j%= 0 TO 20 x(i%,j%)=i%*20-200 z(i%,j%)=j%*20-200 y(i%,j%)=0 NEXT j% NEXT i% \set mast top. y(10,10)=-200:x(10,10)=100 \miscellaneous variables. DATA PI/6,0,0,150,400,3,0 READ t,u,v,viewdepth,viewdist,cable,count ENDPROC DEF PROCsetscreen HIDEMOUSE GRAFRECT 0,0,SCREENWIDTH,SCREENHEIGHT TXTRECT 0,0,SCREENWIDTH,SCREENHEIGHT CLG 0 HOME PRINT "Dynamic relaxation - initialising" \Set scaling factors according to screen resolution SWITCH SCREENMODE CASE 0: ascale=0.5:bscale=0.5 CASE 1: ascale=1:bscale=0.5 CASE 2: ascale=1:bscale=1 ENDSWITCH ENDPROC DEF PROCrotate st=SIN t:ct=COS t su=SIN u:cu=COS u sv=SIN v:cv=COS v FOR i%=0 TO 20 FOR j%=0 TO 20 x=x(i%,j%) y=y(i%,j%) z=z(i%,j%) PROCrotcalc a(i%,j%)=a*ascale+GRAFWIDTH/2 b(i%,j%)=b*bscale+GRAFHEIGHT/2 NEXT j% NEXT i% ENDPROC DEF PROCrotcalc \rotate on y axis temp=x*cu-z*su z=z*cu+x*su x=temp \rotate on x axis temp=y*ct+z*st z=z*ct-y*st y=temp \rotate on z axis temp=x*cv-y*sv y=y*cv+x*sv x=temp \perspective a=(viewdist*x)/(viewdist+viewdepth-z) b=(viewdist*y)/(viewdist+viewdepth-z) ENDPROC ast top. y(10,10)=-200:x(10,10)=100 \miscellaneous variables. DATA PI/6,0,0,150,400,3,0 READ t,u,v,viewdepth,viewdist,cable,count ENDPROREM Mandelbrot zoom REM By R Davidson REM (c) Atari ST User REM Requires 100k workspace REM Do not enter line numbers IF SCREENMODE THEN PRINT"Low res only":END ON ERROR GOTO here PROCinitialise REPEAT PROCmandel PROCzoom UNTIL FALSE END DEF PROCmandel CLS:PRINT"I'll save the screen when finished" PRINT'"Type in a new name" PROCfile WHILE DISCFREE(-1)<100000 PRINT ALERT("[1][Not enough disc space|Insert a new disc][OK]",1) WEND PROCset_colours CLS I%=0 FOR i=Lx TO Rx STEP (Rx-Lx)/321 J%=0 FOR j=By TO Ty STEP (Ty-By)/201 N%=-1:x=0:y=0 REPEAT y2=y*y:x2=x*x y=2*x*y+j:x=x2-y2+i N%=N%+1 UNTIL N%=limit% OR x2+y2>=4 a|(I%,J%)=N% N%=N%-min_it%+1 IF N%<9 THEN MARKCOL N% IF N%>8 THEN MARKCOL 9 IF N%>10 THEN MARKCOL 10 IF N%>13 THEN MARKCOL 11 IF N%>17 THEN MARKCOL 12 IF N%>23 THEN MARKCOL 13 IF N%>33 THEN MARKCOL 14 IF N%>49 THEN MARKCOL 15 PLOT I%,J% J%=J%+1:IF J%>200 THEN J%=200 NEXT I%=I%+1:IF I%>320 THEN I%=320 NEXT BSAVE pic$,PHYSBASE,32000 handle%=OPENOUT data$ PRINT# handle%,Lx,By,hside,min_it%,limit% CLOSE# handle% BSAVE array$,@a|(0,0),64521 PROCprint_info ENDPROC DEF PROCinitialise DIM a|(320,200) RESTORE FOR i=0 TO 15 READ A%,B%,C% PALETTE i,A%*1000/7,B%*1000/7,C%*1000/7 NEXT TXTRECT 0,0,SCREENWIDTH,SCREENHEIGHT GRAFRECT 0,0,SCREENWIDTH,SCREENHEIGHT MARKTYPE 1 INK 14:CLS choice=ALERT("[2][Do you wish to start|from an existing picture][YES|NO]",1) HIDEMOUSE IF choice=1 THEN PROCpicture ELSE PROCcoord ENDPROC DEF PROCcoord CLS:PRINT'"Enter X and Y values (top left corner)" INPUT'TAB(15)"X: "Lx INPUT TAB(15)"Y: "By INPUT TAB(4)"side (horiz): "hside vside=hside*24/28 Rx=Lx+hside:Ty=By+vside PROCmandel PROCzoom ENDPROC DEF PROCpicture CLS:PRINT'"Select a picture" PROCfile BLOAD pic$,PHYSBASE handle%=OPENIN data$ INPUT# handle%,Lx,By,hside,min_it%,limit% CLOSE# handle% vside=hside*24/28 Rx=Lx+hside:Ty=By+vside PROCprint_info PROCzoom ENDPROC DEF PROCprint_info GRAB 0,0,320,200 CLS:PRINT'TAB(4)"PICTURE INFORMATION : ";pic$ PRINT'' PRINT'TAB(16)"X: ";Lx PRINT'TAB(16)"Y: ";By PRINT'TAB(12)"hside: ";hside PRINT'TAB(3)"min iterations: ";min_it% PRINT'TAB(2)"iteration limit: ";limit% PRINT''' PRINTTAB(2)"Press the right button to continue" PROCwait PUT 0,0,3 ENDPROC DEF PROCzoom SETMOUSE 5,0 LINECOL 14 dx%=20 REPEAT SHOWMOUSE PROCclear_buttons REPEAT MOUSE mX%,mY%,mB%,mK% UNTIL mB%=1 HIDEMOUSE GRAB 0,0,320,200 PROCbox PROCclear_buttons WHILE INKEY$<>"":WEND REPEAT MOUSE X2%,Y2%,B2%,K2% key$=INKEY$ IF key$="+" THEN dx%=dx%+1:BEEP:PROCbox IF key$="-" THEN dx%=dx%-1:BEEP:PROCbox UNTIL B2%=1 OR B2%=2 PUT 0,0,3 UNTIL B2%=1 hside=hside*(2*dx%/320) vside=hside*24/28 mX%=mX%-dx% xinc=(Rx-Lx)*mX%/320 Lx=Lx+xinc Rx=Lx+hside mY%=mY%-(dx%*200/320) yinc=(Ty-By)*mY%/200 By=By+yinc Ty=By+vside ENDPROC DEF PROCset_colours CLS MARKCOL 15 M%=255 I%=0 FOR i=Lx TO Rx STEP Rx-Lx J%=0 FOR j=By TO Ty STEP (Ty-By)/201 N%=-1:x=0:y=0 REPEAT y2=y*y:x2=x*x y=2*x*y+j:x=x2-y2+i N%=N%+1 UNTIL N%>M% OR x2+y2>=4 IF N%M% OR x2+y2>=4 IF N%255 THEN min=255 PRINT''TAB(2)"Enter value (";min" - 255) : "; REPEAT INPUT limit% UNTIL limit%>= min AND limit%<256 ENDPROC DEF PROCbox PUT 0,0,3 IF dx%<1 THEN dx%=1 IF dx%>159 THEN dx%=159 xlo=mX%-dx%:xhi=mX%+dx% ylo=mY%-(dx%*200/320):yhi=mY%+(dx%*200/320) LINE xlo,ylo TO xhi,ylo LINE xhi,ylo TO xhi,yhi LINE xhi,yhi TO xlo,yhi LINE xlo,yhi TO xlo,ylo ENDPROC DEF PROCfile SHOWMOUSE path$=PATH$+"*.PIC" name$="" FSELECT path$,name$,status IF status=0 THEN END count=0:temp$="" REPEAT count=count+1 temp$=temp$+MID$(name$,count,1) UNTIL RIGHT$(temp$,1)="." OR temp$=name$ IF RIGHT$(temp$,1)<>"." THEN temp$=temp$+"." pic$=temp$+"PIC" data$=temp$+"DAT" array$=temp$+"ARR" HIDEMOUSE ENDPROC DEF PROCclear_buttons REPEAT MOUSE X%,Y%,B%,K% UNTIL B%=0 ENDPROC DEF PROCwait PROCclear_buttons REPEAT MOUSE X%,Y%,B%,K% UNTIL B%=2 ENDPROC here: PALETTE 0,1000,1000,1000 PALETTE 1,0,0,0 SETMOUSE 0,0 IF ERR=4 THEN END LASTERROR DATA 0,0,7 DATA 2,0,5 DATA 4,0,3 DATA 5,0,2 DATA 7,0,0 DATA 7,3,1 DATA 7,4,0 DATA 7,5,0 DATA 7,7,0 DATA 7,5,2 DATA 7,3,5 DATA 7,0,7 DATA 7,4,7 DATA 3,4,7 DATA 7,7,7 DATA 0,0,0 0,3 IF dx%<1 THEN dx%=1 IF dx%>159 THEN dx%=159 xlo=mX%-dx%:xhi=mX%+dx% ylo=mY%-(dx%*200/320):yhi=mY%+(dx%*200/320) LINE xlo,ylo TO xhi,ylo LINE xhi,ylo TO xhi,yhi LINE xhi,yhi TO xlo,yhi LINE xlo,yhi TO xlo,ylo ENDPROC DEF PROCfile SHOWMOUSE path$=PATH$+"*.PIC" name$="" FSELECT patREM Replot REM By Robert Davidson REM (c) Atari St User REM Requires 100k workspace IF SCREENMODE THEN PRINT "Low res only":END ON ERROR GOTO here DIM c(15) DIM a|(320,200) RESTORE FOR i=0 TO 15 READ A%,B%,C% PALETTE i,A%*1000/7,B%*1000/7,C%*1000/7 NEXT TXTRECT 0,0,SCREENWIDTH,SCREENHEIGHT GRAFRECT 0,0,SCREENWIDTH,SCREENHEIGHT MARKTYPE 1 INK 14 CLS:PRINT'"Select a file" path$=PATH$+"*.ARR" name$="" FSELECT path$,name$,status IF status=0 THEN END HIDEMOUSE BLOAD name$,@a|(0,0) REPEAT REPEAT CLS PRINT'"Set max iterations for each colour" PRINT"(in ascending order)" PRINT' FOR colour=1 TO 14 PRINTTAB(5)"Colour ";colour; IF colour <10 THEN PRINT " "; ELSE PRINT " "; INPUT c(colour) NEXT PRINT''TAB(10)"Is this OK?" REPEAT K%=GET AND 223 UNTIL K%=78 OR K%=89 UNTIL CHR$(K%)="Y" CLS FOR X%=0 TO 319 FOR Y%=0 TO 199 N%=a|(X%,Y%) MARKCOL 1 FOR G%=1 TO 14 IF N%>c(G%) THEN MARKCOL G%+1 NEXT PLOT X%,Y% NEXT NEXT GRAB 0,0,320,200 WHILE INKEY$<>"":WEND BEEP key=GET CLS:PRINT "Save the picture (Y/N) ?" REPEAT K%=GET AND 223 UNTIL K%=78 OR K%=89 UNTIL CHR$(K%)="Y" CLS:PRINT"Type a new name" SHOWMOUSE path$=PATH$+"*.PIC" name$="" FSELECT path$,name$,status IF status=0 THEN END HIDEMOUSE PUT 0,0,3 BSAVE name$,PHYSBASE,32000 PALETTE 0,1000,1000,1000 PALETTE 1,0,0,0 SETMOUSE 0,0 END here: PALETTE 0,1000,1000,1000 PALETTE 1,0,0,0 SETMOUSE 0,0 IF ERR=4 THEN END LASTERROR DATA 0,0,7 DATA 2,0,5 DATA 4,0,3 DATA 5,0,2 DATA 7,0,0 DATA 7,3,1 DATA 7,4,0 DATA 7,5,0 DATA 7,7,0 DATA 7,5,2 DATA 7,3,5 DATA 7,0,7 DATA 7,4,7 DATA 3,4,7 DATA 7,7,7 DATA 0,0,0 PRINTTAB(5)"Colour ";colour; IF colour <10 THEN PRINT " "; ELSE PRINT " "; INPUT c(colour) NEXT PRINT''TAB(10)"Is this OK?" REPEAT K%=GET AND 223 UNTIL K%=78 OR K%=89 UNTIL CHR$(K%)="Y" CLS FOR X%=0 TO 319 FOR Y%=0 TO 199 N%=a|(X%,Y%) MARKCOL 1 FOR G%=1 TO 14 IF N%>c(G%) THEN MARKCOL G%+1 NEXT PLOT X%,Y% NEXT NEXT GRAB 0,0,320,200 WHILE INKEY$<>"":WEND BEEP key=GET REM Scrambler REM By Andrew Richards REM (c) Atari ST User REM Fast Basic REM Don't enter line numbers! TXTRECT 0,0,SCREENWIDTH,SCREENHEIGHT CLS PRINT"Select file to scramble..." filein$=FNselect_file CLS PRINT"Input new filename..." fileout$=FNselect_file CLS INPUT"Enter a number:"N% PRINT PRINT"Scrambling..." N%=RND(-N%) filein=OPENIN filein$ fileout=OPENOUT fileout$ REPEAT byte%=BGET#filein BPUT#fileout,byte% EOR RND(255) UNTIL EOF#filein CLOSE#filein CLOSE#fileout END DEF FNselect_file REPEAT PATH$="A:\" file$=PATH$+"*.*" name$="" button=0 FSELECT file$,name$,button UNTIL button=0 OR name$>"" WHILE RIGHT$(file$,1)<>"\" file$=LEFT$(file$,LEN(file$)-1) WEND PATH$=file$ =name$ REM Advanced Sliding Tiles REM By Marcus Adams REM (c) Atari ST User REM Fast Basic REM Do not enter line numbers REM Requires 128K workspace PROCinit HELP ON ON HELP PROChlp REPEAT quit=0:moves=1 PROCselect PROChole PROCdrawgrid PROCmix_it_up SETMOUSE 3,0 REPEAT PROCprocess_mouse UNTIL quit finished=ALERT("[2][| |Another game][Yes|No]",1)-1 TXTRECT 0,0,320,200 CLS UNTIL finished SETMOUSE 0,0 END DEF PROCprocess_mouse MOUSE X,Y,button,kys X=INT(X/width) Y=INT(Y/height) IF INPSTAT(2) THEN IF INP(2)>>8=97 THEN PROCun_mix IF (button AND 2) THEN quit=ALERT("[3][| |About to quit!|Are you sure?][Yes|No]",2)-2 DEF PROCoveride_mouse IF (button AND 1) AND (hole_x<>X AND hole_y<>Y) OR (hole_x=X AND hole_y=Y) THEN ELSE IF (button AND 1) THEN PROCscroll ENDPROC DEFPROChlp WAIT PHYSBASE=screen TIME=0 REPEAT UNTIL TIME>200 WAIT PHYSBASE=old_screen HELP ON ENDPROC DEF PROCmix_it_up scram=ALERT("[1][| |Select level of scramble][Simple|Ho-hum|Arrrgh!]",0) FOR n=1 TO 10*scram*(level*5) X=INT(RND(320-width)/width) Y=INT(RND(200-height)/height) PROCoveride_mouse NEXT ENDPROC DEF PROCun_mix IF moves=max*2 THEN but=ALERT("[1][| |Too much to|unscramble!][Sorry!]",1) but=ALERT("[1][|WARNING|About to unscramble!][Go!|Oops]",2) IF but=2 THEN ENDPROC FOR n=moves TO 0 STEP-1 X=X(n):Y=Y(n) PROCscroll NEXT moves=1:quit=1 ENDPROC DEF PROCscroll IF Xhole_x THEN XE%=(X-hole_x)*width:YE%=height:XS%=hole_x*width+width:YS%=hole_y*height IF Yhole_y THEN YE%=(Y-hole_y)*height:XE%=width:YS%=hole_y*height+height:XS%=hole_x*width IF XE%<0 THEN XS%=XS%+XE%:XE%=ABS(XE%) IF YE%<0 THEN YS%=YS%+YE%:YE%=ABS(YE%) TXTRECT XS%+1,YS%+1,XE%-1,YE%-1 GRAB XS%+1,YS%+1,XE%-1,YE%-1 trx=X*width:try=Y*height IF Xhole_x THEN PUT hole_x*width+1,try+1,3 IF Yhole_y THEN PUT trx+1,hole_y*height+1,3 IF moves"\" file$=LEFT$(file$,LEN(file$)-1) WEND PATH$=file$ CLS ENDPROC DEF PROCheading(m$) GRAFMODE 1 GTXTSIZE 16 GTXTCOL 16 x=160-((LEN(m$)*8)/2) GTXT x,16,m$ ENDPROC DEF PROCload_pic REPEAT REPEAT PROCheading("Select Picture") type=ALERT("[3][| |Select picture format][NEO|DEGAS]",2) IF type=1 THEN type$="NEO" ELSE type$="PI1" PROCselect_file IF name$="" THEN CLS:but=ALERT("[3][|You must select| a picture!][Sorry!]",1) UNTIL name$<>"" ok=TRUE X=OPENIN(name$) IF INSTR(name$,type$)=0 THEN CLS:ok=(ALERT("[1][| |Not a picture file!][Oops]",1)-1):END UNTIL ok HIDEMOUSE IF type=1 THEN PTR#X=6 ELSE PTR#X=4 FOR N=2 TO 31 N?(colours+code)=BGET#X NEXT CALL code IF type=1 THEN PTR#X=128 ELSE PTR#X=34 GETBYTES#X,32000,PHYSBASE CLOSE#X CALL (transfer+code) SHOWMOUSE ENDPROC DEF PROCinit GRAFRECT 0,0,320,400 TXTRECT 0,0,320,400 CLS IF SCREENMODE THEN but=ALERT("[3][|Sliding Blocks uses 16|glorious Atari colours.|Switch to low resolution][Wow!]",1):END RESERVE screen,32512 screen=(screen AND $FFFFFE00)+256 old_screen=PHYSBASE but=ALERT("[1][ Sliding Blocks| Brought to you| by Marcus Adams|of Atari ST User][Thankyou]",1) PROCassemble max=5000 DIM width(3),hgt(3),X(max),Y(max) width(1)=320/4:hgt(1)=200/4 width(2)=320/6:hgt(2)=200/8 width(3)=320/10:hgt(3)=200/10 hole_x=0:hole_y=0:finished=0 ENDPROC DEF PROCassemble REM set palette. It's easier in m/c! RESERVE code,200 FOR pass=0 TO 2 STEP 2 [ OPT pass,"L-W+" ORG 0,code start PEA colours(PC) MOVE #6,-(SP) TRAP #14 ADDQ.L #6,SP RTS transfer MOVE.L #PHYSBASE,A0 MOVE.L #screen,A1 MOVE #32000,D0 loop MOVE.B (A0)+,(A1)+ DBRA D0,loop RTS colours DS.W 16,0 ] NEXT ENDPROC LL code IF type=1 THEN PTR#X=128 ELSE PTR#X=34 GETBYTES#X,32000,PHYSBASE CLOSE#X CALL (transfer+code) SHOWMOUSE ENDPROC DEF PROCinit GRAFRECT 0,0,320,400 TXTRECT 0,0,320,400 CLS IF SCREENMODE THEN but=ALERT("[3][|Sliding Blocks uses 16|glorious Atari colours.|Switch to low resolution][Wow!]",1):END RESERVE screen,32512 screen=(screen AND $FFFFFE00)+25\ T.R.I.V.I.A T.E.S.T \ Written by Michael A.Baxter \ ATARI ST USER 1988 \ ST Fast Basic \ Monochrome Monitor Only. Requires 100k to run ESCAPE OFF IF SCREENMODE<>2 THEN i=ALERT("[1][ |Hi Res Only][ Sorry ]",1):END CLEAR 65535:DIM qa$(300,5),list(4),store(300),mess&(7) l$=STRING$(26,"-") m$="[ About Trivia Test ]" m$=m$+"[ File | Load New Questions \"+l$+"\ Quit ]" m$=m$+"[ Game | Play Game \"+l$+"\ 10 Questions \" m$=m$+" 20 Questions \ 30 Questions \"+l$+"\ All Questions]" game=10:exit=FALSE CLOSEWIND OUTHANDLE:DELETEWIND OUTHANDLE CLOSEWIND IMMHANDLE:DELETEWIND IMMHANDLE FOR i=1 TO 10:CLOSEWIND SEGHANDLE(i):DELETEWIND SEGHANDLE(i):NEXT PROCsetup_screen PROCcontrol_loop END \ Main program control loop DEFPROCcontrol_loop RELEASEMOUSE:BEGINUPDATE MENU m$:ENDUPDATE GTXTSIZE 13:GTXTEFFECTS 16 GTXT 600,14,CHR$(14)+CHR$(15) GTXTSIZE 6 GTXT 485,12,"TRIVIA TEST" ENABLEITEM 23,0:ENABLEITEM 40,0:ENABLEITEM 44,0 REPEAT PROCselector UNTIL button% PROCload_file PROCcheck_ammount PROCq_box PRINTTAB(6,2)"TRIVIA TEST ... Please select an option" REPEAT REPEAT:WAITMESSAGE @mess&(0):UNTIL mess&(0)=10 SWITCH mess&(4) CASE 13 a$="[0][ "+CHR$(14)+CHR$(15)+" TRIVIA TEST|" a$=a$+" | Written By Michael A.Baxter |" a$=a$+" Atari ST User "+CHR$(189)+" MCMLXXXVIII| ][ Continue ]" dummy=ALERT(a$,1) CASE 22 PROCselector IF button%<>FALSE THEN PROCload_file PROCcheck_ammount ENDIF CASE 24 exit=TRUE CASE 39 PROCdo_game a$="[0][ G A M E O V E R| |" a$=a$+"Out of "+STR$(game)+" Questions:|" a$=a$+STR$(score)+" Correct|" a$=a$+STR$(game-score)+" Wrong][ " a$=a$+STR$((score/game)*100)+"% ]" dummy=ALERT(a$,1) PROCq_box PRINTTAB(6,2)"TRIVIA TEST ... Please select an option" score=0:PRINTTAB(6,22)SPC(48) CASE 41 CHECKITEM 41,1:game=10 CHECKITEM 42,0:CHECKITEM 43,0:CHECKITEM 45,0 CASE 42 CHECKITEM 42,1:game=20 CHECKITEM 41,0:CHECKITEM 43,0:CHECKITEM 45,0 CASE 43 CHECKITEM 43,1:game=30 CHECKITEM 41,0:CHECKITEM 42,0;CHECKITEM 45,0 CASE 45 FOR i=41 TO 43:CHECKITEM i,0:NEXT CHECKITEM 45,1:game=questions ENDSWITCH INVERTTITLE mess&(3),1 UNTIL exit=TRUE ENDPROC DEFPROCload_file loop=1:file=OPENIN file$ REPEAT PROCgetrecord(file) qa$(loop,1)=a$ FOR g=2 TO 5:PROCgetrecord(file):qa$(loop,g)=a$ NEXT loop=loop+1 UNTIL EOF#file OR loop>300 CLOSE#file:questions=loop-1 ENDPROC \ INPUT procedure to strip extra CR byte from file DEFPROCgetrecord(handle) LOCAL dummy| INPUT#handle,a$ dummy|=BGET#handle ENDPROC DEFPROCdo_game FOR g=1 TO 300:store(g)=FALSE:NEXT score=0:HIDEMOUSE FOR loop=1 TO game dummy=RND(-SYSTIME) REPEAT choice=RND(questions) UNTIL FNrnd_check store(loop)=choice FOR g=1 TO 4 REPEAT rep%=FALSE a=RND(4) FOR i=1 TO g:IF list(i)=a THEN rep%=TRUE NEXT UNTIL rep%=FALSE list(g)=a NEXT GTXTEFFECTS 1:GTXTSIZE 13:FILLCOL 0:FILLSTYLE 2,8 PROCq_box FILLCOL 0:BAR 520,330,612,390 LINECOL 1:PROCbox(520,330,612,390) LINEWIDTH 5:LINE 524,392 TO 614,392 LINEWIDTH 3:LINE 614,392 TO 614,334 LINEWIDTH 1 PRINT TAB(6,2)qa$(choice,1) TXTEFFECTS 4 PRINTTAB(5,22)" QUESTION ";STR$(loop);" OF ";STR$(game) FOR g=1 TO 4 a$=qa$(choice,1+list(g)) BAR 50,46+(g*60),598,68+(g*60) GTXT 320-((8*LEN(a$))/2),65+(g*60),a$ NEXT REPEAT:k=GET AND 223:UNTIL k>64 AND k<69 k=k-64:IF qa$(choice,1+list(k))=qa$(choice,2) THEN PROCcorrect:BEEP:score=score+1 ELSE PROCwrong ENDIF LINEWIDTH 1:PROCflash_answer PRINTTAB(27,22)STR$(score);" correct, ";STR$(loop-score);" wrong" TXTEFFECTS 0 FOR g=1 TO 4:list(g)=FALSE:NEXT NEXT loop:SHOWMOUSE ENDPROC DEFPROCsetup_screen TXTRECT 0,16,SCREENWIDTH,SCREENHEIGHT GRAFRECT 0,0,SCREENWIDTH,SCREENHEIGHT TXTSIZE 13:CLG 0 GTXTEFFECTS 16:GTXTSIZE 21:GTXTCOL 1 FILLSTYLE 2,4 LINECOL 1:BAR 0,0,640,400 FILLSTYLE 2,8 LINECOL 0 FOR g=1 TO 4 BAR 28,38+(g*60),612,82+(g*60) PROCbox(30,40+(g*60),610,80+(g*60)) PROCbox(32,42+(g*60),608,78+(g*60)) GTXT 36,68+(g*60),CHR$(64+g) NEXT FILLCOL 0:BAR 520,330,612,390 LINECOL 1:PROCbox(520,330,612,390) LINEWIDTH 5:LINE 524,392 TO 614,392 LINEWIDTH 3:LINE 614,392 TO 614,334 LINEWIDTH 1 TXTEFFECTS 4:PRINTTAB(4,22)SPC(51):TXTEFFECTS 0 LINE 31,367 TO 440,367 LINE 24,384 TO 432,384 LINE 31,367 TO 24,384 LINE 440,367 TO 432,384 ENDPROC DEFPROCbox(x1,y1,x2,y2) LINE x1,y1 TO x2,y1 LINE x2,y1 TO x2,y2 LINE x1,y1 TO x1,y2 LINE x2,y2 TO x1,y2 ENDPROC \ Draw a cross DEFPROCwrong LINEWIDTH 4 LINE 540,340 TO 592,370:LINE 540,370 TO 592,340 ENDPROC \ Draw a tick DEFPROCcorrect LINEWIDTH 4 LINE 540,360 TO 550,370:LINE 550,370 TO 592,340 ENDPROC \ Highlight correct answer on screen DEFPROCflash_answer LOCAL delay FOR g=1 TO 4 IF qa$(choice,1+list(g))=qa$(choice,2) THEN GRAFMODE 3 FOR i=1 TO 8 BAR 50,46+(g*60),598,68+(g*60) delay=TIME:REPEAT:UNTIL TIME=delay+100 NEXT GRAFMODE 1 ENDIF NEXT ENDPROC \ The following checks that the next chosen question has \ not already been used in this particular game DEFFNrnd_check result=TRUE FOR a=1 TO loop IF store(a)=choice THEN result=FALSE NEXT =result \ Display GEM File Selector and clear up afterwards \ Check for valid filename selection DEFPROCselector pth$="A:\*.QA":file$="" REPEAT GRAB 0,0,SCREENWIDTH,SCREENHEIGHT FSELECT pth$,file$,button% PUT 0,0,3 UNTIL (button% AND LEN(file$)) OR button%=FALSE ENDPROC \ Draw the question box DEFPROCq_box FILLSTYLE 2,8 BAR 28,40,500,72 : LINECOL 1 PROCbox(28,40,500,72): LINEWIDTH 5 LINE 32,74 TO 502,74: LINEWIDTH 3 LINE 502,74 TO 502,44: LINEWIDTH 1 ENDPROC \ Check how many questions have been loaded off the disk \ and alter menu items accordingly DEFPROCcheck_ammount ENABLEITEM 41,(questions>9 AND questions<20) ENABLEITEM 42,(questions>19 AND questions<30) ENABLEITEM 43,(questions>29 AND questions>29) IF questions<10 THEN CHECKITEM 45,1:game=questions ELSE CHECKITEM 41,1:game=10 ENDIF CHANGEITEM 45," All "+STR$(questions)+" questions" ENDPROC 5523,65532,0,0 DC.W 52224,15360,1023,0,51,60,65472,0 DC.W 52224,15360,1023,0,51,60,65472,0 DWho first sang "Always on my mind"? Elvis Presley The Pet Shop Boys Chicago Rod Stuart What does "LDA" stand for in 6502 assembly language? Load Accumulator Load Address Last Direct Address Load Decimal Argument What is the name of Thor's hammer? Mjollnir Heimdall Baldur Freyja Who designed the nave of Canterbury Cathederal? Henry Yevele Christopher Wren James Gibbs Henry Filtcroft Which is the fastest travelling planet? Mercury Mars Pluto Venus Subliminal? Subconscious Biased Under Control Biased What is a palindromic word? Reads the same forwards as backwards A newly concieved word that has been generally accepted Dramatic or poetic effect It has several different meanings What officially, is an 'Icon'? A painting on a wood panel of Christ A small picture representing a solid object A flag A chess piece Who made the first cross chanel flight in an areoplane? Bleriot Garnerin Blanchard and Jefferies Esnault-Pelterie Yabusame is a Japanese version of which sport? Archery Judo Polo Boxing Juxtapose? Set side by side To prove beyond doubt Display conspicuously Manipulate Which country put it's flag on the moon first? Russia America China France Who is the Greek God of the winds? Aeolus Perseus Hermes Persephone Which major planet was discovered in 1846? Neptune Venus Jupiter Saturn How many times was F.D.Roosevelt elected president? Four times Twice Three times Five times Which element has the chemical symbol "K"? Potassium Sodium Phosphorus Krypton Which of the following is spelt wrongly? Quandry Parallel Livelihood Guarantee -Cycles" INK 1:PRINT TAB(4,6)"Player ";:INK 2:PRINT;1;:INK 1:PRINT" use keys A, Z, < and >" PRINT TAB(4,8)"Player ";:INK 3:PRINT;2;:INK 1:PRINT" use a joystick" INK 6:PRINT TAB(9,12)"Press ";:INK 1:PRINT "SPACE";:INK 6:PRINT " to play" REPEAT:UNTIL INKEY=32:TXTRECT 0,192,320,8 REPEAT CLS: INK 2:PRINT "Speed? (";:INK 1:PRINT "0-9";:INK 2:PRINT ") (0=Slow, 9=Fast)"; REPEAT:s$=GET$:UNTIL s$>="0" AND s$<="REM Unscrambler REM By Andrew Richards REM (c) Atari ST User REM Fast Basic REM Don't enter line numbers! TXTRECT 0,0,SCREENWIDTH,SCREENHEIGHT CLS PRINT"Select file to unscramble..." filein$=FNselect_file CLS PRINT"Input new filename..." fileout$=FNselect_file CLS INPUT"Enter a number:"N% PRINT PRINT"Unscrambling..." N%=RND(-N%) filein=OPENIN filein$ fileout=OPENOUT fileout$ REPEAT byte%=BGET#filein EOR RND(255) BPUT#fileout,byte% UNTIL EOF#filein CLOSE#filein CLOSE#fileout END DEF FNselect_file REPEAT PATH$="A:\" file$=PATH$+"*.*" name$="" button=0 FSELECT file$,name$,button UNTIL button=0 OR name$>"" WHILE RIGHT$(file$,1)<>"\" file$=LEFT$(file$,LEN(file$)-1) WEND PATH$=file$ =name$ LINE o_x&,o_y&-s TO o_x&+s,o_y&:LINE o_x&+s,o_y& TO o_x&,o_y&+s LINE o_x&,o_y&+s TO o_x&-s,o_y&:LINE o_x&-s,o_y& TO o_x&,o_y&-s ELSE LINE o_x&-s2,o_y&-s2 TO o_x&+s2,o_y&-s2:LINE o_x&+s2,o_y&-s2 TO o_x&+s2,o_y&+s2 LINE o_x&+s2,o_y&+s2 TO o_x&-s2,o_y&+s2:LINE o_x&-s2,o_y&+s2 TO o_x&REM Puzzlemania REM By Denise Isherwood REM (c) Atari ST User REM Fast Basic REM Don't enter line numbers! PROCassemble PROCinitialise PROCscreen puzzle=0 box%=16 T%=13000 REPEAT PROCstart REPEAT PROCkey UNTIL box%=target% OR TIME>T% OR box%=511 BEEP FOR delay=1 TO 20000:NEXT IF box%=511 OR TIME>T% THEN A%=ALERT("[1][ You have | failed][Oops!]",1) box%=511 ELSE A%=ALERT("[1][ Well done! ][Ok]",1) ENDIF UNTIL puzzle=8 OR box%=511 A%=ALERT("[1][ Try again? ][Yes|No]",1) REPEAT:UNTIL INKEY$="" IF A%>1 THEN END RUN DEF PROCkey PROCtext(31,20,STR$((T%-TIME)DIV 100)+" ",7,8) I%=0 REPEAT B%=0:MOUSE X%,Y%,B%,K% I%=I%+1 UNTIL (B% AND 1>0) OR I%=100 IF (B% AND 1)=0 THEN ENDPROC X%=(X%-27)/33 Y%=(Y%-45)/27 IF X%<0 OR X%>2 OR Y%<0 OR Y%>2 THEN ENDPROC K%=X%+Y%*3 IF (box% AND 2^(8-K%))>0 THEN ENDPROC box%=box% EOR rule%(K%) BEEP HIDEMOUSE PROCdisplay(box%,16,50) SHOWMOUSE ENDPROC DEF PROCstart RESTORE L350 FOR I%=0 TO puzzle READ target% NEXT L350: DATA 495,186,341,186,381,471,146,325 puzzle=puzzle+1 T%=T%-1000 HIDEMOUSE PROCdisplay(box%,16,50) PROCdisplay(target%,96,50) SHOWMOUSE PROCtext(21,22,STRING$(16," "),8,8) t$="[1][Puzzle |"+" "+STR$(puzzle)+"][Ok]" A%=ALERT(t$,1) TIME=0 ENDPROC DEF PROCinitialise DIM rule%(8) RESTORE L800 FOR i=0 TO 8:READ rule%(i):NEXT L800: DATA 432,448,216,292,186,73,54,7,27 ENDPROC DEF PROCscreen HIDEMOUSE CALL setpal TXTRECT 0,0,320,200 GRAFRECT 0,0,320,200 CLS FILLCOL 8 FILLSTYLE 2,2 RECT 0,0,319,199 LINECOL 15 LINE 0,0 TO 0,199 LINE 0,199 TO 319,199 LINE 319,199 TO 319,0 LINE 319,0 TO 0,0 PROCwindow(75,6,160,20) PROCtext(14,2,"PUZZLEMANIA",15,8) PROCwindow(6,35,300,152) PROCwindow(27,45,97,71) PROCwindow(187,45,97,71) PROCtext(6,16," PUZZLE ",0,15) PROCtext(26,16," TARGET ",0,15) PROCwindow(194,151,84,18) PROCtext(26,20,"Time:",7,8) SHOWMOUSE ENDPROC DEF PROCtext(X%,Y%,t$,F%,B%) FILLSTYLE 1,0 FILLCOL B% RECT X%*8,Y%*8,X%*8+LEN(t$)*8,Y%*8+8 GRAFMODE 2 GTXTCOL F% GTXT X%*8,Y%*8+7,t$ GRAFMODE 1 ENDPROC DEF PROCwindow(X%,Y%,W%,H%) FILLCOL 8 FILLSTYLE 0,0 RECT X%,Y%,X%+W%,Y%+H% FILLSTYLE 1,0 FILLCOL 14 RECT X%+4,Y%+4,X%+W%+4,Y%+H%+4 FILLCOL 8 RECT X%+5,Y%+5,X%+W%+3,Y%+H%+3 ENDPROC DEF PROCdisplay(B%,I%,J%) FOR X%=0 TO 2 FOR Y%=0 TO 2 A0=PHYSBASE+I%+X%*16+160*(J%+Y%*24) D0=(B%/2^(8-X%-Y%*3))AND 1 CALL code NEXT NEXT ENDPROC DEF PROCassemble RESERVE code,2000 FOR pass=1 TO 2 [ OPT pass,"L-W-" ORG code LEA table,A1 LSL.L #2,D0 MOVEA.L 0(A1,D0),A1 MOVE #21,D0 loop MOVE.L (A1)+,(A0) MOVE.L (A1)+,4(A0) MOVE.L (A1)+,8(A0) MOVE.L (A1)+,12(A0) ADDA.L #160,A0 DBRA D0,loop RTS setpal MOVE.L #pal,-(A7) MOVE #6,-(A7) TRAP #14 ADDQ.L #6,A7 RTS table DC.L sprite0,sprite1 pal DC.W 0,1792,1824,1840,1858,1874,3,5 DC.W 23,311,583,855,1383,1655,1910,$777 sprite0 DC.W 0,65535,65535,0,0,65535,65535,0 DC.W 0,49152,49152,0,0,3,3,0 DC.W 16383,49151,49151,0,65532,65533,65533,0 DC.W 12288,45056,45056,0,12,13,13,0 DC.W 8192,40960,40960,4095,4,5,5,65520 DC.W 8192,40960,40960,3072,4,5,5,48 DC.W 9215,40960,40960,3071,65476,5,5,65488 DC.W 8960,40960,40960,2816,196,5,5,208 DC.W 8704,41215,40960,2815,68,65285,5,65360 DC.W 8704,41152,40960,2752,68,773,5,848 DC.W 8767,41151,40960,2751,64580,64773,5,64848 DC.W 8767,41151,40960,2751,64580,64773,5,64848 DC.W 8704,41152,40960,2752,68,773,5,848 DC.W 8704,41215,40960,2815,68,65285,5,65360 DC.W 8960,40960,40960,2816,196,5,5,208 DC.W 9215,40960,40960,3071,65476,5,5,65488 DC.W 8192,40960,40960,3072,4,5,5,48 DC.W 8192,40960,40960,4095,4,5,5,65520 DC.W 12288,45056,45056,0,12,13,13,0 DC.W 16383,49151,49151,0,65532,65533,65533,0 DC.W 0,49152,49152,0,0,3,3,0 DC.W 0,65535,65535,0,0,65535,65535,0 sprite1 DC.W 65535,0,0,0,65535,0,0,0 DC.W 65535,0,0,0,65535,0,0,0 DC.W 49152,16383,0,0,3,65532,0,0 DC.W 49152,16383,0,0,3,65532,0,0 DC.W 53247,16383,0,0,65523,65532,0,0 DC.W 53247,16383,0,0,65523,65532,0,0 DC.W 52224,15360,1023,0,51,60,65472,0 DC.W 52224,15360,1023,0,51,60,65472,0 DC.W 52479,15360,1023,0,65331,60,65472,0 DC.W 52479,15360,1023,0,65331,60,65472,0 DC.W 52416,15423,1023,63,819,64572,65472,64512 DC.W 52416,15423,1023,63,819,64572,65472,64512 DC.W 52479,15360,1023,0,65331,60,65472,0 DC.W 52479,15360,1023,0,65331,60,65472,0 DC.W 52224,15360,1023,0,51,60,65472,0 DC.W 52224,15360,1023,0,51,60,65472,0 DC.W 53247,16383,0,0,65523,65532,0,0 DC.W 53247,16383,0,0,65523,65532,0,0 DC.W 49152,16383,0,0,3,65532,0,0 DC.W 49152,16383,0,0,3,65532,0,0 DC.W 65535,0,0,0,65535,0,0,0 DC.W 65535,0,0,0,65535,0,0,0 ] NEXT ENDPROC ex_crds&(m,4)=ex_crds&(m,4)-(RND(2)-1) ELSE ex_crds&(m,4)=0 ENDIF:ENDIF:NEXT:NEXT ENDPROC cols: DATA 0,0,0,7,0,0,0,0,7,7,0,0,0,0,0,0,0,0 DATA 0,0,0,0,0,0,1,1,0,2,2,0,3,3,0,6,6,0 DATA 4,4,0,7,7,0,5,5,0,7,7,7 snds: DATA 0,223, 1,7, 2,132, 3,2, 4,194, 5,1, 7,248, 8,16 DATA 9,16, 10,16, 11,204, 12,16, 13,4, 255,0 DATA 0,25, 1,0, 2,72, 3,0, 4,115, 5,0, 6,1, 7,199 DATA 8,16, 9,16, 10,16, 11,56, 12,74, 13,0, 128,31, 129,6, 156,0, 255,0 |g10 REM Create TOGGLE.TOS 20 REM By J.Roussak 30 REM (c) Atari ST User 40 REM ST Basic (Old+New) 50 FULLW 2:CLEARW 2 60 code$="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-" 70 GOTOXY 1,1:name$="TOGGLE.TOS" 80 OPEN "R",#1,name$,1 90 FIELD #1,1 AS buffer$ 100 newdata$="" 110 loop: 120 READ data$ 130 IF data$="*" THEN CLOSE #1:END 140 FOR i%=1 TO LEN(data$) 150 nybble%=INSTR(code$,MID$(data$,i%,1))-1 160 FOR j%=0 TO INT(nybble%/16) 170 newdata$=newdata$+HEX$(nybble% MOD 16) 180 NEXT 190 WHILE LEN(newdata$)>1 200 byte%=VAL("&H"+LEFT$(newdata$,2)) 210 LSET buffer$=CHR$(byte%):PUT #1 220 newdata$=MID$(newdata$,3) 230 WEND 240 NEXT 250 GOTO loop 260 DATA GABKwQHMwwwwwwwwwwwEBPKQDOGBw 270 DATA COEOEDEKEAGHwAKEBPKQUGwQGEBPK 280 DATA QDJGBwBGEBPKQDIGBwAODPDMgIEOE 290 DATA BFUPECGHEOEBCPAIDPDMgJEOEBFME 300 DATA PEOHFAKANEFGOGDGPGEGJGOGHCAGJ 310 DATA HDCAGOGPXCgGFGOQGEGJHDQGBGCGM 320 DATA GFGECOAKANEIGJHECAGBCAGLGFHJC 330 DATA AHEGPCAGDGPGOHEGJGOHFGFCOCOCO 340 DATA www 350 DATA * pp p0p@pPp`ppp}T ,(<22 2 F m@ d z    $x  $<Z< n00P<%P< D @10 REM Create WHEN.PRG 20 REM By J.Roussak 30 REM (c) Atari ST User 40 REM ST Basic (Old+New) 50 FULLW 2:CLEARW 2 60 code$="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-" 70 GOTOXY 1,1:name$="WHEN.TOS" 80 OPEN "R",#1,name$,1 90 FIELD #1,1 AS buffer$ 100 newdata$="" 110 loop: 120 READ data$ 130 IF data$="*" THEN CLOSE #1:END 140 FOR i%=1 TO LEN(data$) 150 nybble%=INSTR(code$,MID$(data$,i%,1))-1 160 FOR j%=0 TO INT(nybble%/16) 170 newdata$=newdata$+HEX$(nybble% MOD 16) 180 NEXT 190 WHILE LEN(newdata$)>1 200 byte%=VAL("&H"+LEFT$(newdata$,2)) 210 LSET buffer$=CHR$(byte%):PUT #1 220 newdata$=MID$(newdata$,3) 230 WEND 240 NEXT 250 GOTO loop 260 DATA GABKwADFCwwwwwwwwwwwCAGPgECMD 270 DATA MwABQNMKIgMNMKIQBENMKIQBMEBPK 280 DATA QEACPAIDPDMQCNDPDMgFEOENFAEPC 290 DATA DMwQCJAEBPKQBKCPAIDPDMQCTPDMg 300 DATA FEOENFAEPECGHCPAGDPDMQDBEOEBE 310 DATA BPKADAFBABAEYQKBgfEOHDEKDJwAD 320 DATA FBGHwDCEBOPgGAIBHgFWwAUOGIAMF 330 DATA wDWwBMAMCIQPOgVHPJwACJEGHwBEA 340 DATA MCIQfgFGHwAKCAHJwACJAEONAEIOH 350 DATA DIBICIEIGBwAMGBgBAUMNPBIBMEOH 360 DATA TPDMQBHEHPKgOCPALEAOHCGHJwQLI 370 DATA EONDFUPSQEKDJwACJEGHwDEOKEJDQ 380 DATA BACEgDPTMwQCJGOMEJAMEBgMFMPJw 390 DATA ACJKGNwAGAUBgMEKEBWwAEHCAMTMB 400 DATA wACJIEOHFEIEBDQBCEDMwQBHACEgB 410 DATA PTMwQCKANUADQBOAEIOCEIAGEgFAT 420 DATA MwQCKGOKEJACEBgPDGABAMEDgCGCw 430 DATA AMFDEQGEDgKGwQEVEDNUAOUINUAMH 440 DATA PMQBKVEDIHPMgKNUDFDEBODEJEHPJ 450 DATA wACOBNGPLBADACDMLwACKCIFPMgHE 460 DATA IECODEKEHPJwACKINGPLCQKCDMLwA 470 DATA CJMEOHFwgJQBgBHQBPQCJQDCwgIQR 480 DATA QBHQBNQCBQCGQCLQDCQDMQUQENEKD 490 DATA JwACJEGHwDADGDKQOCHCABGBwHOHG 500 DATA DKGBwLCDGDKQNAHCQGBwGOEHPKABG 510 DATA HEKDJwACJKGHwAEFGELGwAIECGHKQ 520 DATA LIGBwHMHGCAGBwIGHCABDGDKQKMGB 530 DATA wECEHPKABEBAMUgBGHwBGEIkKUGHw 540 DATA AOAMUgEGMwAGOFEMNGMEGBwEICGHJ 550 DATA wACKCGBwDOEHPKABCDGBwDGDGDKQH 560 DATA EHCQGwQCACIDw-IHPMgKCIADEKEBG 570 DATA HwAIEKEDGHwAKAGADQDAGBwBMEIED 580 DATA AGADQDAGwABCBGBLGHwAKGBwAIGgv 590 DATA UOHFDPATPCMgCDPDMgDEBPKgMCPAI 600 DATA EAOHCAHKgIEONAFMEPEOHFwwwwwww 610 DATA wwwwwFDGBHEHFHCGEGBHJQFDHFGOG 620 DATA EGBHJQENGPGOGEGBHJQFEHFGFHDGE 630 DATA GBHJQFHGFGEGOGFHDGEGBHJQFEGIH 640 DATA FHCHDGEGBHJQEGHCGJGEGBHJQEKGB 650 DATA GOHFGBHCHJQEWFGCHCHFGBHCHJQEN 660 DATA GBHCGDGIQEBHAHCGJGMQENGBHJQEK 670 DATA HFGOGFQEKHFGMHJQEBHFGXFHDHEQF 680 DATA DGFHAHEGFGNGCGFHCQEPGDHEGPGCG 690 DATA FHCQEOGPHWFGNGCGFHCQUGFGDGFGN 700 DATA GCGFHCQGBGNQHAGNQHEGICgHDHECg 710 DATA GOGECgHCGECgCADBDJQfwQCKDACGB 720 DATA EDEBCAMBGBGBCDIAKAOAKCOCIEMQ 730 DATA * < A0@kH=@ kH=@ A "0<sNBLNu  %A -H A -H A -H A-H A-H NuN/pMN1=@=| =| =| =| =| =| =| =| =| "=| $=| &p(N.r=n  10 REM Print any number in any base 20 REM By Janice Murray 30 REM (c) Atari ST User 40 ' 50 CLEARW 2 60 INPUT "Number";n% 70 INPUT "Base";b% 80 GOSUB nprint 90 END 100 ' 110 nprint: 120 n$="" 130 r%=n% MOD b% 140 IF r%>9 THEN r%=r%+7 150 n$=CHR$(r%+48)+n$ 160 n%=INT(n%/b%) 170 IF n% THEN 130 180 PRINT n$ 190 RETURN -|-|-|-|-|A-HA-HA-HA-HA-HA-HNu=@HAH=@H=@H=@BnA" <NB0.Nu J.g<ae <zb $LB.<Gf"C$g>(|ff6<UT`<If,C$g|<(xaf6SCUT``\<.f"C$gF<(xahf86UT`<Af P6 #define MAXLEN 100 main() { char string[MAXLEN]; input(string,MAXLEN); lower(string); printf("\n%s",string); getchar(); } input(s,m) char s[]; int m; { int c,i; for (i=0;(c=getchar())!='\n' && i='A' && s[i]<='Z') s[i] += 32; } g R` B.4B B@f 4B|Pjv|(kB(F(|k 8D| fr-ar(aJ.jrSarPa`|j rDa`rAa0a`FCrAB@)@kz)@kXR<[f`f)6CJgJjSBfaZj4JB Bg<.a>; Ja6.gr)a(F|fr+a`~ApNuDodgy assembler token!BWLSRD--SCYf<` TQDNuDNuhWfd~VBCDDDADDIDDQDDXDDNDINDSLSRTSTTSRHILSCCCSNEEQVCVSPLMIGELTGTLELOHSRACHGCLRSETHKLRMPA /* Convert decimal to hexadecimal */ /* Written in GST C */ #include #define MAXLEN 10 main() { char string[MAXLEN]; int number; input(string,MAXLEN); number = val(string); printf("\nHex = %x ",number); getchar(); } input(s,m) char s[]; int m; { int c,i; for (i=0;(c=getchar())!='\n' && i #define MAXLEN 100 main() { char string[MAXLEN]; int words; printf("Enter some text: "); input(string,MAXLEN); words = count(string); printf("\nThere are %d words",words); getchar(); } input(s,m) char s[]; int m; { int c,i; for (i=0;(c=getchar())!='\n' && i='A' && s[i]<='Z') || (s[i]>='a' && s[i]<='z')) { ++words; while (s[i]!=32 && s[i]!=0) ++i; } else ++i; return(words); } :f0<6aB@aR` fp(aB@A@av`* <fnp&a`RB@A@aP`* <fHp$a:RB@A@a*`* <f"p"aRB@Aa`fUg0NuXpANuDodgy token-K -H *H b-H <k|:o2|Fo`pANur |lr FFaVQ`C`NLbZrpnl************************************* * Print out any number in any base * *By Janice Murray * * (c) Atari ST User * * Written using HiSoft Devpac * ************************************* base EQU 10 Number base num EQU 12345 Test number MOVE.L #num,D0 D0=number MOVE.L #base,D1 D1=base BSR printn Print it MOVE #7,-(A7) c_rawcin (pause) TRAP #1 GEMDOS 7 CLR -(A7) p_term_o TRAP #1 GEMDOS 0 ************************************* * Print a number * D0.L=number / D1.L=base * Uses D0,D1,A0 ************************************* printn LEA buffer(PC),A0 A0->buffer start CLR.L (A0)+ Zero buffer CLR.L (A0)+ CLR.L (A0)+ CLR.L (A0)+ CLR.L (A0)+ A0->buffer end loop1 DIVU D1,D0 D0 DIV D1 SWAP D0 D0.low=remainder ADDI #'0',D0 Make into digit CMPI #'9',D0 Digit or letter? BLE ok ADDQ #7,D0 Make into letter ok MOVE.B D0,-(A0) Store character CLR D0 SWAP D0 D0.low=quotient BNE loop1 Another one? loop2 MOVE.L A0,-(A7) c_conws MOVE #9,-(A7) Print string TRAP #1 GEMDOS 9 ADDQ.L #6,A7 Tidy stack RTS buffer DS.L 5 Number$ - 20 digits DC.B 0 Buffer end marker EVEN END    $ . 7 : G N U h r { 7>   X   # ( - 2 7 < B G L P T Y ] c h m r x %   $ ) 3 : B I@gNuXB@ANu@THENBELSEDGOTOFGOSUBHREMJ\LDATANRESTOREPWHILERSWITCHTCASEVPROCXFNINKEY$INKEY`!b#d(f)hSNDREGjLOGBASEl,nPHYSBASEpHELPr:t;vERRORxERR$zERR|SETMOUSE~RECTSCREENWIDTH?@[]SCREENHEIGHT>ENDUPDATEENDIFENDSWITCH{~CALLCHAINCLEARGRAFRECTCLOSE#DIMENDPROCDEFAULTDEF|ABSENDRUNTXTRECTPRINT#INPUT#PRINTVDU(TIM`$DN6NN \?</.?<NN,P-@`,,H|fHl/.NP?<ONT-@ .gN^NuNVBnBnHl?<N\/.NXBg/.?<NNP-@ .f/.HlN P`?< HlHnNx 0,ghHnHlNP0.Rn @oFA HSh0( @m< A H"R AH|`Hl?< N\Bn`/,HnHlNr ?,N$TA HSh0( @m< A H"R AH|`Hl?< Np\A HSh0( @m< A H"R AH|`Hl?< N0\?,N T0,| @f HlNXA HSh0( @m< A H"R AH|`Hl?< N\Rn?<ON T-@ .gd0.g?.HlNR\0.lN^NuNV0.=@ @ on |p`|a.H?0.|?0. |???.HlN N^NuNV0<2.¼|A?0. |A/0.|?HlN N^NuNVBn`4 n g n R  nR` nR Rn0.nm nBN^NuNVBnBn` nH|\f=nRn nf0.f nH|\fl0.R@?/.HlN n(g$?< nA/HlN~ `HlHlNRPABB,(`,HlHlN2P/.HlN$PHlHlNPN^NuNVHl?<N\?</.?<NNP-@ .fHlHlNPN^NuNV?.N(T nn0<`?.?<>NjX9@Rg0<`0<N^NuNVHl@/.N>PJ@g`HlF/.N,PJ@gNHlL/.NPJ@g n(g nf. n-P n(f HnNX` HnN>XA-H/./. 0.AX PNPLN^/W D~NuN^NuNVH nB fB`м8 LN^NuNVH n$fBCB`nD6< f႖|NzN^NuNVH0&n$n Bn-J @)Pt)hx-lt-lxBEG>O|g|JGn|m` REHl/ NRPO`SEHl/ NPO`&0+H@JGgDG0<0dR@0.BAQ,>QQֆG|0QB`Rn0.g$nB`0R 2.HmB`b .6.HЃR$@ nH|0fRZ"` R"H|9n nH|0f$n R&@fSE .6.HЃ @B n0L N^NuNVH0&n BnH|bf=| RH|rgH|wgH|ag <`F ,T$@ f*A$H`0* |f` A"Ҽm A"Ҽm <`BTBj Bn+H|+f =|j H|wf?./.NZ\>j `hH|afB0<n?/.N\> @f?./.N\>?<B?NrPj `0.n?/.NN\>j Gf Bj <`05G Bj <$%@?<B?* NP%@5l L N^NuNV)nT/.NX/. /.NLPN^NuNV`H0BnBnBB9| nRH|=@ .&@$@BG`TH| g(H| gH| gH| g H| f0.f0.gBnB` `H|"f< nfBn`*0.f 0.f=|0,RlA` `"`H|'f: nfBn`*0.f 0.f=|0,RlA` `'`r0.fj0.fd=|H|f. R @H|>f T-@=|` R-@Bn`0,RlA`  R0RG0nmB .g,A H1| A H1|HlHlf/.N .g2A H1| Hl0.gAh `Aj //.N 0,R@H/?<HN\)@><`0A` 2 l RG0lm l 0, lBL N^NuNVH$.f BB`J". BnJlVnDJlRnDvd`Bbd nmDdD-@-A LN^NuNV nl <`?.?./. ?<BN -@ m .`?<?.B?<BN -@?<?.B?<BN -@ nf .Ю -@ `$ nf .Ю -@ `0.g <`b . oHn . /?.?<@N Bg?./. ?<BN ]|9@Rg <` `BlR . N^NuNV/.?<HN\N^NuNV/.?<IN\N^NuNVBn`60.A"0f"0.A"00.A$0 ` Rn nLmN^NuNVBn`&0.A"0nf0.A"BPRn nLmN^NuNV?>.=|0A""HPgXHf0(>N^NuNVHll/.NPJ@f =|`Hlr/.NPJ@f =|`Hlx/.NPJ@f=|`f0. |g0/.NJXJ@g0<``Bg/.?<NhX0. |?/.?<=NPP=@9@R @l0<`0. | ??.N~X0.N^Nu)I)J)_NM"l$l/,Nu)I)J)_NA"l$l/,NuNVH&n Bn0.|dg`>< `.`|ug`>< ``|og`><``|xg`>< l* ndf SR- .D-@`0. f Gf .`& Gf .` ./0H/NX 2.RnA0 Gf .`( Gf .` ./0H/N X-@ .fp`FSn0.A P m0.A0| |A`0.A0|0 SR0.fLN^NuNVH&n n f=| )nt)nxHl~Hlt?<NF]|@0. R@?HnHnHnNF.g SR-.H|0f.f SR`J nff>.n RG0lo0,`0> Gl0<`0?HnHnHnNBF`0RFA SRSGSn0g nl` SR0Sn nl0. g SR.` SR0RnSn 0. g nm`" Go0RFAH`0<0 SRSG0. Sn J@f`` SR0. g SR.><`0RGA SR0. Sn J@f SRE?.Hl/N: /NBXHѓLN^NuNVBn`"0. n PHC|0=@ nR n PH|0m n PH|9o0.N^NuNVH0&n -n @$PX`R` nRg H|%fH|%f,RBn=|Bn| H|-f=|RH|0f|0R-JHnN$X=@$nH|.fR-JHnNX=@$nH|lf=|RgH-n Gdg Gog Gxg GufB0.g @ ` @0H/Hn?.?NV 0.g0<`0<H` Gcf R @ nRT` Gsf4 @-PX<.` nR nRSF0g nf`J Geg Gfg Ggf, @)Pt)hx/,x/,tHn?.?NP` 0 nR .nl0.g$<.".A` nRSF0f`b .2.SAHЁ-@-@,.` .2SAHЁ @ nSSF0f` nR .o .R-@f nB .L N^NuNV/. HnNhP=@/.HnN8P0.N^NuNVHnHlNPN^NuNVHn /.N&PN^NuNV`/. nRH?NB\ nfN^NuNVH0&n$n -K`fS`f .`L N^NuNVH0&n$n `RRgHHAgHHC`L N^NuNV n "n fN^NuNVH0&n$n >.-K`0SGJ@g f .`L N^NuNVH0&n$K`Rf `L N^NuNV/.?<AN6\9@Rg0<``0<N^NuNV`4 nH| f?< ?<NX nRH??<NX0. Sn J@fN^NuNV` nRH??<NX0. Sn J@fN^NuNV` nRH??<NX0. Sn J@fN^NuNVH0&n $KA-H nf?./ N4\=n`L nf?./ N`\=n`. nf?./ Np\=n`-KBn?.NTJ@f`H| f |o@ H-@/./.?.?<@N 9@RHg0<`0,Rn/./<?.?<@N~ 9@R @g0<`tRnR -@`R ned` 6.ƼЃ$@ H-@/./.?.?<@N 9@RHg0<`0,RnBlR0.L N^NuCA"A"A"A "A"A"A"A"A "A$"A("A,"9|9|9|C"2"2 2"2"2"22"2"2"22"2x9|)lR)lV)lZ)l^)lb9|CXA"A"A"A$"A*"A"A ")|TNuJanFebMarAprMayJunJulAugSepOctNovDec pDIR Util v1.00 (C) FJL Nov '86q \*.**.* Total folders %4d Total files %4d \*.*Too may subdirectories Directory for %s %s %s %8ld (FJL's Birthday) %d files found %02d:%02d:%02d %cm%2d %s %4d*.**.*\ Volume: '%s' ---------------------- CON:AUX:PRT:@$??rawCON:AUX:PRT:%d  F;j*J xfP -L xP ad~ . pacz`pI`bJ xf-L x FJgNu`p@f(fa rNu<kR. ra main() { int n = 12340; printd(n); printf("\n"); } printd(n) int n; { char string[10]; int i; i = 0; while ( n > 0 ) { string[i++] = (n % 10) + '0'; n /= 10; } while ( i >= 0 ) putchar( string[i--] ); } |rg|fԼ.W=_!T(_Nu<k|g|g|8fԚ`<k|g|g|8g|:fx`pq`a?/?< NN\NuBga??a2a??@?<#NN\Nua?/a1a? _a Pa fNua? @a >pa RBGNu?<?<NAXJkT`X<kaPHa1<kaPLGf?FE`N$"4`002`  "`L !iH`gg`f`f`(n 0. `p>0.!Nup>0.!Nu<k|pfa>=@!Nupa(`pa(Z?<`Bg:.!BD<k|rg|g|Bg|g|lg|tg| g޼|"g|$gUH a?2L0|ga:6@kg?0< SCa'Q02p n "`a'Q<.!T`l=F!T0< a'J_g pa'pa'Nux`DJn!g6r2.!g,!HADAg n!0< `a'bQ` <k|rg|g|BgBDBE`=F!T`0< /* Print a decimal number */ #include main() { int n = 12340; printd(n); printf("\n"); } printd(n) int n; { if ( n > 9 ) printd( n/10 ); putchar( (n % 10) +'0' ); } Bn#aR.ga*@< gJ<g*<cְ<g2.#|ga&A!Rn#`Jn#g0<a%Sn#`a%2.#A!B0a*h0@$WNu<kzx|f<k|*g| g|"g6|$g|lg|tgؼ|rg^|gV|BgNH aM0L0f|fg0<?a%VHaLpxp"n "E!g Rf`N| g<"gRg <,g`x`,( E!`"Rg<"g` "ggز<,f`~H |b Ha L@aK0L0`pga$`0 @x`0< a$`a:20< `a$~Q`a:ּ|lg$|ff2n!gd?0< a$N2`?a:|ff20a*$`=F!TNu<k|FbA`NNм|Gg$|Gg&|Ge*|Gb$FNA!V 0`BGNu . ^BGNup0.!BGNup8`6p`0(.4`xLdRj6t,r,<~|0`tr0\nhjhfdb`^\/* Print a decimal number */ #include main() { int n = 12340; printd(n); printf("\n"); } printd(n) int n; { char string[10]; int i; for ( i = 0; n > 0; n /= 10 ) string[i++] = (n % 10) + '0'; while ( i >= 0 ) putchar( string[i--] ); } 86<:862fr|(&$" n^j  ,X|6d@*45  NPNNaK`FPaI`FHzaH`F>aKv`F6aI`F.zaH`F$aK<`FaK`FaI`F zaH`FaJ`EaI`EzaH`EaK@`EaI`EzaH`EaI`EzaH`EaK^`E n "p0. .g S@fp`2 gRn .D@~NuT ~NuTp>0Nu ap~NuLapj~Nua6|ffNup`a5F~Nua6JGg|g|f5ANuBNuDNu`a& 9/* Floating point input */ /* Written in Mark Williams C */ #include main() { char string[20]; double number , getfloat(); input(string); number = getfloat(string); printf("Number = %f\n",number); } input(s) char s[]; { int i,c; for ( i=0; (c=getchar())!='\n'; ) s[i++] = c; s[i] = '\0'; } double getfloat(s) char s[]; { int i; double n,fact; n = 0.0; for ( i=0; s[i]!='.'; ++i ) n = n*10.0 + (s[i]-'0'); fact=0.1; ++i; while ( s[i]!='\0' ) { n = n + fact*(s[i++]-'0'); fact = fact/10.0; } return(n); } a%\a3|a3"a%\$a3c ~Nua3*~Jg 0 n "NupNua3a% a3@a2a% $a3b.c., n ""H`Q ~Nup~Nua2a$a2a2JgS@|fg<|lf/a2a$&$a3eb , n ""H`Q~Nu$a2ܐe`pA`Ha2f/ (n " =| N9J@kr2$O͵eƔ&OUA?0JAf(O/ a2.W(_Nu?<NNTHBGNua1aBGNupBGNup>NuaNJGg"|g|f1N~NuN<~NuNGNua1N<~Nua1N /* Floating point output */ #include #include main() { float r, n; printf("Number...Root\n"); for ( n=1; n<11; n+=1 ) { r = sqrt(n); printf(" %2.0f = %4.2f\n",n,r); } }  ~Nua0N ~Nua0N 2~Nua0N :~Nua|g|gJGf0Nua}~Nua}@~NuaȾ|g|gJGf0ZJjDNuNuNua|g2|gJGf00Jgjp~Nup~Nup>Nufg`fg`aT|ga/ n "ap  "~Nu n "alJ  "~Nua// (n "B4< g<+gD<-g4a(_Nu< g<.g <9b<0e anlGNu~pNua(_`a(_Nua/D?a!pa/`|ff`2gtJ@gn4HBJBf;HBn .b;SAgSA n ""H$n "ڳfQ  "~Nua.4 | bFr Bg `a./|lgXt fSBf|ff n "`g1`0Q  "f n "0p~Nua.a.a a.~|lfa.a.Z.gSa.ּ|ffvJf.Wp~NuA"d."H&n "d$n "f/ggg _`X.Wp>Nu _S AR~.WNua-Ha a-|ff$& .0ag @"Aao$& .0agaoH#Lao$& .0ag.BSC - This is a game based on the Disney film Tron. Two players race round the screen trying to make each other crash. Low res colour only. --------------------------------------- Directory for a:\GFABASIC\*.* You'll need GFA Basic to run these. They are stored in ASCII form and so must be merged rather than loaded. They can also be loaded into a text editor eg. 1st Word. KBGEM.LST - Load a previously defined keyboard layout. KBTOS.LST - Load a previously defined keyboard layout. KEYS.LST - Put any ASCII code on any key. --------------------------------------- Directory for a:\HISOFT.BAS\*.* You'll need HiSoft Basic for these. Many ST Basic programs can also be compiled and run. README.BAS - This program. FILECOP3.BAS - Simple file copier. PALINDRM.BAS - Finds palindromic numbers. --------------------------------------- Directory for a:\STBASREM Palindromic numbers REM By Julie Boswell REM (c) Atari ST User REM HiSoft/Power Basic DEFLNG a-z n$=STRING$(101,CHR$(0)) s$=STRING$(101,CHR$(0)) num=SADD(n$) sqre=SADD(s$) POKEB num+99,9:POKEB num+100,13 POKEB sqre+100,13 PRINT "*** Palindromic Numbers ***" DO IF FNtest(num) THEN CALL square IF FNtest(sqre) THEN CALL pal END IF increment dummy$=INKEY$ LOOP END SUB pal shared num,sqre PRINT "Number = "; prnt(num) PRINT " : "; prnt(sqre) PRINT " = Square" END SUB SUB increment shared p,num p=num+99 c=0 DO POKEB p,PEEKB(p)+1 IF PEEKB(p)>9 THEN POKEB p,0 c=1 ELSE c=0 END IF DECR p LOOP UNTIL c=0 END SUB SUB prnt(n) p=n WHILE PEEKB(p)=0 INCR p WEND DO PRINT CHR$(48+PEEKB(p)); INCR p LOOP UNTIL PEEKB(p)=13 END SUB SUB square shared num,sqre FOR p=sqre TO sqre+99 POKEB p,0 NEXT p=num WHILE PEEKB(p)=0 INCR p WEND s=p FOR p=s TO num+99 n=sqre+(p-num) q=num+99 c=0 DO POKEB n,(PEEKB(n)+PEEKB(p)*PEEKB(q)+c) c=PEEKB(n)\10 IF c THEN POKEB n,(PEEKB(n) MOD 10) DECR q DECR n LOOP UNTIL qq OR flag=0 FNtest=flag END DEF |pg|vgUa$"Jgdb|Dg||Ffp LI?a0S@g<k|lfA`0g /(I`z/ UA<k|rg|Bg|g|lfa`UE0DP / (@`8 LI?a0S@g<k|lfA`(I=|r!TNupt`\<k|fBn 4`U-L 6=| 4`-L 0Nq<k|g |`la`=F!TNu|bG` JSNu<Nua`./ /a"Rg<4<|NNXYYN+|4*N8A:README-~=~=><N2*Bm *~H-~N.N2< NP*NA .N.*A .-~ NN|NJGf` NqRm Nv* m g`DNqBm NNN8Press RETURN? NA .-NNVNNN* A .-N8#NJGf`,Nq* ~N* NNN8Press RETURN? NA .-NNVN* NZ*~N` O/0C0<HЈ",Іd⒆ Ь `H`// Bg?<JNAO JfLA@,A0,Hp!!!.HA 0D"MBQ;@+F +LTSE;ED;D CaHfa&Hz+_>d`8<ae <{dNuafgSetHB Vfd`z`z GaF ^.`>aJfgSetHB Vf֘d`ac`ad`a e`ab`aSe Se gNuJNu G&$P(<Ƅ VȐ"hNuxa.Nu H@g(Jg$HAJ@gJAfHA`JAgH@HAJAf ށeNu~NuDNu$JnDJnDai JkJjDNu H@GA.a G@VGa GUU|vGa`(*`A"aJXg mXNJga`A a"aJUgAar2aNuSe<dAatAJgjJfS`LIBRARYSTARTUPOPENPEEK/POKEBLOAD/SAVESOUNDLOCATEINKEY$GEMDOSDIMARRAYBLITREDIMCVsMID$==MID$RIGHT$ASCINSTRPALETTEMALLOCMENUSCREENSQRTWINDOWJOYSTICKTIMEDATEMOUSELOG Y8 Runtime error at line in module on #A+HXNuA g<PdJfSfNuRETURN without GOSUBOut of DATAIllegal function callArithmetic overflowOut of memorySubscript out of rangeRedimensioned arrayDivision by zeroType mismatchString formula too complexRESUME without errorLine buffer overflowWrong number of dimensionsFIELD overflowInternal errorBad channel numberFile not foundBad file modeDevice I/O errorDisk fullInput past endBad record numberBad file nameToo many filesDevice unavailableDisk write protectedPath/file access errorPath not foundBREAK pressedFatal bus errorFatal address errorApa+@TApa+@LApa+@P?<NNT@ZHm`?<NA"o\B\A<+HA+HA.+H )$i(eЩJiNesg AV NuaA a`a `&eb/c pAJg"hH瀀NLQ mTpa mLpa mPp/??<NMPNuA/HNsA`A`<dLJgH|bBCH瀀HAJgHpa(IaLH?8(H o(aLLf0ApNupDNu8<0DaQNuH@af Hp0aL LJNuH/2apf0@"<g< g4H0 lNL LJNur,HA,t,HB,"Lp`JgB<fp@`JfrAp`H@b0HCAag (IpLNuLp4Nu lNCB g|9|rPJ-Zfr(A|a>ra&rwa Q"B,#`H Lpa#L (IL)HNu l p`V&_|dA` &Fn0kN0SN0kNp*JgHP0SNL fS`NuzpgH P0SNL f < gR`"NupJgH P0kNL fS``<dXaTa@pNupDNu`aHz<d̰<ga"Pa`-Yf -YfNuH?<?<NMXJ@gN/<NMX-Yg<g,-Yg*<f$/<NMX<g-Yg<fadM+@LNuJ,"gHraxrfarLNuHrabrf,"aXLJNu<dXA`HL.6H>HHHHd Q"aapNuP"pNuQ"pNur,#pNupDNuB,B,#rarE`pNu|dp,@dAB#A B H`rarYaL8a`/ Jikrarba"W2)a0A at"WJikrafrca`"_2)a A `PpNuAAJ-Zg -ZgA0Nu    H @rareaLx*&I/ at&_< gT< gN<g <g< eںgHR/ a|&_`JgSJ,gS,/ rar ara&_`r ar a"p@Nu?,?<NMX<f lf -YfrpNu?r aFr ax2< gp< g4R,,g,e lf< d<g<d<dp`0,<f< f ,#dR,#A???<NM\Jlg pNuB,`Rgp9Nu0,??<NMXrJfrpNuSgSgUg>SgpDNu&fvRBg/?<=NAJkb8>N?|NAJfPP0(<(؃Aa<)mz)C)C$)C |||9@p)@@)@NuPH`t9+@\lAgf LNuF5LCKKBg/?<NAXapNu`8,<d$ gA @N.T@(e|dA``tp<gJf",gaBf atrpNur)ApNuHl(/, ??<?NAO Jk)@gB$Nup>Nua ,$e agp>)@NuA(r0R<gR$pNua",g$S)AS$dBg?/?<BNAO JkavpNua|pDNuat?(,$gA($e(٬a8)l$Jg$/ /??<?NA"/O JkbѬfLpNua$< g4< g2R,,g(,d"B O | ApB,aXNuB,I? OpaTNuJg&//??<@NA$/O "Jkpgp=Nup"Nua  IJ,f6,Sev H x ggRQdAL0`r`Jg, I,< g< gReSf C`Zv`SH @vapAaBLgNu fXp6Nufp6XNuaB$BSt QdBg?/?<BNA"/O f Hl(/,??<?NAO JkҰgr)ApNuaB$Bg?/?<BNA"/O Jl |fZ/?<?B?<BNAO "Jk@g(*HEJEgpH@ @ajf(SE`HE  |aVf ,B$A(aDfNu`> f$Jj", R $,Ga"GA( ,NuXp6Nu?<?B?<BNAO /?<?B?<BNAO "&Bg?/?<BNAff$, `$/`$,"O pNua Tp6Nu< g,< gR,,g,e&,$d 8(R$pNuB,`?r ar a2`p2Nu",pNuPRT:AUX:MID:KBD:LST: -f ?a6 Va>"0 I0af ^`v` naSfXv<Igv<Ogv<Rgv<Af2HCt4>.ab6 Va"0HC Ia f ^aT ^`a6v`2a.pa|fZ fRprah`F0|aSH0fNuJGo |d0GNu0Gp4`;mHFNua;GFNu;|FNu GaN$0mFpa G`p0mFaHA86HBrBDHAJAgHAJCgAcVB8SDpr aQNuJGo8SD0mF`JGkg.p0mFagJBgHGJGgHBRBBdBSGHzCt0mFp`v m ,gx m`ha;GFNu+W+G m;mHFatJg 0mFp$a0C $<0mFpaA, +HNu"m , If(xR<,g< fS+HJg fSfNuafa 8iJf>0BfNuafa iJf.Nuafai.JfNuaxfaz`x"m ,fv< g8<"g< gAR<,g< f` I<"g < gR`RJg 0 HfSf/S+Ia. _`C&t p0mFaC!tp0mFa.`?Overflow ?Redo from start C / xR  fa. _af m`(ar.p0mF$`g./ m fAN _`??<?<NM\Nu/<NMXNuC`/ aB _`J\g6J-`f0|g*|Mg$|Ng|OgX;Db;md/-\B\P`NuafNuX`l~`&~|f~`AaTax<f~aN??<LNAq Y8 Program terminated - press a key to exitA$a _aJUgA&ar2a`x pFATAL ERROR:  at line HF~Jg*]lDvUt QCt壌JgGNuF"&g.pC2DC|m|4n Q,JlDk.Nu~DNu~Nup"DjDG@AB|Ab DSGkUĆQ(k(j2xc 0D@`fc 0D@`D@@`D@@ԆӅdf UĆR@(fJk0<NuJkJkxAS@J[NuJkV`a8 g0HGOGG,H@O@@HGBG p̀Nu|Nuއg HGNua.iHG i Zi Nud<~f<Nu~Nu gB "HGOGG~|dHG牎NuDNu~Nut"g pJk S@ҁ`0<vNuMC68341 FLOATING POINT FIRMWARE (C) COPYRIGHT 1981 BY MOTOROLA INC.rtvx2(4(6(8( |o864BA@`J@gHCv6BBHANuH0)hlH0)h|?ovx`J@ga`LL*jfcCD@` ԄӃdR@HLNuJfJgJk S@jHNu0<5@NuJfJg JfJfBBB|XONua/ 04R0(iR@5@&Oz////zL81P֣7CBCSHCԃ6BBHB҂ң7ABAQHAЁ'@\KUEjLJkSjjH&_NuaL/04R0(i5@LL xzJk SjjJk Rjj|?Eg҃тQJk SjjH0,Nu/ I<`/ I/ /afa(RX(_Nu~ o0 /,Se/H0/@,Nu o0 /,~Se< gd޾< g< g< g`HI`HI/ /a(f$(RXLNuaht(XLDNu$|>?F?F"/FN<+g <-fPN<.g<0e <:dBo?|Bo <:d<0eaG0ajNRo`Jf /k WeR<.f6Bo N<:d<0eanG0a$RoSo ` ooR߰<Dg <EfZ`N<+g <-f?|N<:d"<0e2/A0AA@GA0?AN` g oo8/o gadAC$Ia`ھ<&fN߰<HfBN<:d <0e2G0`"<Gd <Ae G7`<gd<aeGWaa&``H<BfN<2d:<0e4G0aaN`<OfN<8d<0eG0azaN`Jf0 /k eRdS|"` |"Ag ggfN/"g,Sf f" /H/@` e /a~HPz./gLJ/gv?a:p`J/"f Jj a<`J/gDJ$Nu%&!#HJf߯eNua aAC$IHa` / aH PNuJf /Ѐe"ЀeЀe Ёe/@NuaAC$I`Jf /ЀeЀeЀe Ѐe/@NuaXoNuJf /ЀeЀe Ѐe/@Nua|VoNuJf /Ѐe/@Nua`RoNuJfaR HGJD[jDD<AB!zVB.T/zTBNd A"O$HadJFg O"O$OaV` JgCA$IaHGPNu/-BHa a`lG^pv.<"m AF"A$m $ QN m*g $ N E P`A"+Iz U+@~NuNuSBeg"‡gf"`f$P(*SJg "‡g"`Qd`Nu$m X&mzQd,m$(/ / / K R,I` (*X"Tb"eee$*ICʹd o( o- Y- XE` o oX- Y- E`d&^$^`*_& _"X$"X dG(H$S) $ce) $dNu m X.-~S,-"F*<& $X,ReV(*gȅe2؎e,$`8ȅ e^&ր*gR"&F܄ge@$SQdQd+FL+_/ح d(NuaیajMemory exhaustedH/Gpvaar _a`SBe g"`Nu*<(I m ٭ ٭$$-~gRňX$`,RdNua`aa,<kaL|bJ|f O.X"$ԀHBJBfhHBn .b^4"n "$I`!Q4"n "`QЁNuaV`aa<ka|b|fTaJVHH~Nua$`axa<ka|b|f"aSHH~Nua`aFab<ka|b|faUHH~Nua`aa0<kaP|b|faWHH~Nua* (c) Atari ST User ystart equ -$1199 xstart equ -$1b33 yinc equ $16 xinc equ $e move #2,-(sp) trap #14 addq #2,sp movea.l d0,a4 lea (a4),a0 move #$2000,d0 q0 clr.l (a0)+ dbf d0,q0 lea (a4),a0 move #400,d2 movea #ystart,a3 q1 movea #xstart,a2 move #39,d1 q2 move #15,d4 q3 clr d5 clr d6 lea.l $0,a5 lea.l $0,a6 move #30,d3 q4 sub.l a5,a6 move.l a6,d7 asl.l #4,d7 swap d7 add a2,d7 muls d5,d6 asl.l #5,d6 swap d6 add a3,d6 move d7,d5 muls d7,d7 move.l d7,a6 move d6,d0 muls d0,d0 move.l d0,a5 add.l d0,d7 cmpi.l #$4000000,d7 bhi q5 dbf d3,q4 q5 andi #1,d3 asl (a0) add d3,(a0) adda #xinc,a2 dbf d4,q3 addq #2,a0 dbf d1,q2 adda #yinc,a3 dbf d2,q1 move #7,-(sp) trap #1 addq #2,sp rts Q`rpNSra|0k|`g:|gVULNuaҁ|0k|`g|g4ULNua|0k|`g|gULNua`|0k|`g԰|gULNua>|0k|`g|gULNua|0k|`g|gULNu gh @0@f4|g=@ T?<?B?<BNA Jk /?<?. TB?<BNA Jk?. T?<?NA `VBBBga/ aaԢal.a/G aԐaZ/@?<NAXJkNua??<ENAXJkrNuBgaa.?a?@?<FNA\JkNNuaBga.Hoaa.BgaBBHzFHo/aa?aaH@?<KNAREM Display README file OPEN "A:README" FOR INPUT AS #1 count%=0 DO char$=INPUT$(1,1) PRINT char$; IF char$=CHR$(10) THEN INCR count% IF count%=20 THEN count%=0:PRINT:INPUT"Press RETURN";key$:PRINT LOOP UNTIL char$="#" CLOSE #1 PRINT:INPUT"Press RETURN";key$ SYSTEM / n "a( a a,  " ~Nu@a/NuH@a/NuX@@BGaa HNu?<,NATBGNu<k|pfa??<-NAXJkBNu?<*NATBGNu<k|pfaߺ??<+NAXJkNuaߤ?aafa0@/aX,C>N nl!Tg0Nu8@//<`//<`//<??<@NA JkNu//<`?an .g"n "B1 n!TfaU>-@ THn V/<??<@NAJkR /. "/. T`/Jf/`a?aaH>/E T0@CNL@aad|lg0Nu2Vx/ /<??<?NA Jkp. TBGNu/ /<??<?NA Jkp0. TBGNu/ /<??<?NA Jk . TBGNu/ /<??<?NA Jk^ . Ta~Nu/ /<??<?NA Jk6 . T". XaF~NuHn T/<??<?NAJk p0. Tn .d#a000000 #b000000 #c7770007000600070055200505552220770557075055507703111103 #d #E 98 11 #W 00 00 0A 01 17 17 08 A:\*.*@ #W 00 00 0D 08 15 0B 00 @ #W 00 00 0E 09 15 0B 00 @ #W 00 00 0F 0A 15 0B 00 @ #M 00 00 00 FF A FLOPPY DISK@ @ #M 00 01 00 FF B FLOPPY DISK@ @ #T 00 03 02 FF TRASH@ @ #F FF 04 @ *.*@ #D FF 01 @ *.*@ #G 03 FF *.APP@ @ #G 03 FF *.PRG@ @ #F 03 04 *.TOS@ @ #P 03 04 *.TTP@ @ @`JH @ THn T/<??<@NA JkL0Nup NSrat?a͠aH>/|aL@|lBH (n "Bn T<-fFn T`<.g <0m<9na&L0~Jn TgaRL@aaм|lgTNuBn4=|4NuJn4j=|pkN1Jn4k BnpkN1=|4Bn4NuaF INJ@g|gNUNUNuRn4fp`Sn4 n4fp=@pkN1`|lf?a2-@0` aH-n@=@=_p!N1Nua?a2a"|lfaHa-@al` a-n n "H@B@H@B0-H=_p"N1Nua׶?aa׬-@=_=|piN1Nuaא?aɼa׆-@=_=|piN1Nuaj?aɖaHaɆaHazaHanaH=o =|phN10.H~L@a 0.H~L@a0.H~L@a0.H~L@aTNy@a?aa$HaaHaa HaaH=o =|phN10.H~L@a0.H~L@a~0.H~L@an0.H~L@a^TNy@aF?araa?a4a|ff$=@=_=_=_=_pdN1p>0.Nua?aa?aaѸ?aaѮ?aaѤ=@=_=_=_=_peN1NuHaa~L@NupNSraaH炀aÊaaH炀azaaH炀ajaaH炀aZa(/aTa/aJa/a@a / /4"/($/&/(/ */,/.NH~L@8a~ /L@,a~ /L@ a~ / L@a@NuaИ/aaЎ?aºaЄ?a°az?a¦ap?aœaf?a’a\=@=_=_=_=_=_-_p*N1NupNSra*/aVa ?aLa?aBa ?a8a|ff=@=_=_=_-_p+N1~0.HNu .~Nuaaaaϼ|ff=@a2 n "B0-Hp4N1Nu~?aώ>?aQa~=@=_=_=_=_=_=_=_=|p3N1Nu~?aF>?apQa6=@=_=_=_=_=_=_=_=|p3N1Nu a/a(a?|lgBoBn oLHp3N1JogLH=|p3N1-oBn=|dB=n$x=n$zp*N1-o=Wp2N1 oLHJogLH=|p3N1=|p3N1Nu?|a?@aHa?@ aa`H炀a a.aPH炀=o=o / =@ =@pFN1L@~0.HaܨL@~0.HaܖNy@az?aap|ff4=@=_pjN1~0.HNu?<`BgaB?anaݎaH炀aZa~aH炀aJanaH炀a:a^aH炀 =@ / =@ /=@ /$=@=o0=o2plN1L@~0.HaL@~0.Ha۶L@~0.HaۤL@(~0.Haے4Ny@aaH炀aaܼaH炀aaV?aaL?axaB?ana8?a2?a,?=@=o=o=o=o=o  / =@ /=@pGN1L@0.H~aL@0.H~a$Nua?aaʶ?aaʬ?aaʢ?aaʘ?aaʎ=@=_=_=_=_=_pHN1Nuah/aa^?aaT?aaJ|ff=@=_=_-_pKN1~0.HNua/aHa?a>a?a4a|ff=@=_=_-_pLN1~0.HNua=@H@=@pN1Nuaɸ-@pN1Nuaɦ?aaɜ?aaɒ?aaɈ?aa~?aaHaaھHaaڲHaaڦH=o =o"=o$=o&=o(pN1L@0.H~a"L@0.H~aL@0.H~aL@0.H~a*Ny@a-@=|pN1Nu<k|pfaȬ=@=|pN1NuBnpN10.H~Nua~?aat?aaj-@=_=_p N1NuaP?a|aF?ara<-@=_=_p N1NuaB"n "-I|l  R`B1p N10.HBGNua/a|dԼE "n ""SkQBA NHNuaǸ/aذ|dԊE "n ""SkQBA NH"n "$I .Sgg` " S~NuafJ@kP|bH@A N BGNu>@FJPV\bhntzpNSr NNuANuA$\NuANNuAnNuANuA@NuAy@NuAxNuADNuANuANuApNuANuANuANu nNu0nNuANuA Nu MNuAxNuASrNuANuA'NuANuANupNSrpNSrpNSrpNSrp=NSrpNSrpNSrpNSrpNSrJjzdRAHAfB NuJAkRj"g HBNuJj.dRdRB>GGBfABB ABBNurpNuJBk`p$g$4 BBANu&jDRBkRAk2gA lDAJjRJjD2aJk2NuE @"A$< LevaaaGNu&<ԚxK(<z`&<;)(<\za| mJjprtNua?aJk4NuG 4 @"A$Baa a aaa_NuaL8`aL8aL8`Jj4dRAB$RAk"gA lDAJjDJgJjSNupJjpNuJjdRdRBA&(RBk,g :SE؄׃QB lJDBJjDgJjSNupJjpNua$<[ةvUC`f.kJjTeRGH?a*,$<vaaEaJjRA4g @"ArpjD@H@aa`a&<[ة(<7(qzUE`t.k|JjvTeRGH?axH&<xzaxL8aG ~a0JjRB6g @"A$Btpr0jD@H@aa`2H?a @"A$BaHadRAB$RAk,gA lDA⨴fgJjRJjDNupNuJjdRdRBA&(RBkg :SE؄׃QB ljDBJffgJjRJjDNu|n$$<ڢv`j| n&NuafE~*,ada^ @"A`Aa`fafG8~H?ava @"A$B`Ba`aBRG`a:gaANug Ea @"A~ "aaQNu*,ETa$&`aRG`agaBNug&Ga @"A$B?<Laa0SWfTNuHGaL8`$k*j.BUH$B,$/7i+Z*SFe4K`+>Zu! sǵk}1ۏt=.p{?2 k( ` h&4^TmԳ1ne}I<" 6FŏŏLG`g0VGf͖tЮbⰏs=%mecV,57SF€f/-Z\*x*n{PIЋ e|! sLK:Nװ:i2)2}*)Қ ?N󈈈L?Ӿzp e%7Xx}  XÀp T%0 FF X)}/Հ ` ` vH;`[FF$;`Nu@P$ k(C@ԥ* _2ɿ/ k:#x !$'+.158;?BBBaJAfNuJAgfSANua< g<@f J@gRS@Nu<Xf `@<Nf `4<|fa`(<gθ<|faa`<CfJ@gBS@RBn .b Nu<{fFJ@g(H@@ }gaz`J@gL`RSANuH }gaR`LRSANu<1eҸ<9bD 0e 9bSAE E` *f"RSABc8:g@DEDa^SDPQNu $fRSA`@ LfRSABcDa0SD QNu Rf,RSA:BcDaSDkPQSE PQNuH@@?aSWgL` Nu<(f )ga\`<Af J@gS@<ae<zb`<af J@gS@<Ae<Zbx `p<*f JBg``<BfVJBgSSBNuH"`H 2E4BBBa|JAfBaLHBBBHBJk4EFgFA4 SBf`8Hav(<<g&<xza"aRF>LxaaL0A4BBaJAfNuaH< g<Dg(<Eg <.g<dg <Zg<zf<DRB|(bNu<^fPNu<|g<g"<|fa`<+fJj H a|LNu<-fJjNu<1eH<9b@D 0e 9bSAE E`H@@?a0SWgL` Nu<(f )ga `aN< g<Xgj<Ngn<|gr<BgB<Zg<.g<JFf>Ek$aQg 5eR 9c0`>A4E5' 0gSRGNuJFfT0gJGkGg k S@fJEg0jD@Ec00S@f0GkgS@f0g"H !0f S@fNu0gS@f0gS@f"H0 !0f S@fD0jD@H|e0B@H@d|e0B@H@ |e0H@0DF 00`f  `RFfNu,PROG1.BSCPROG2.BSCPROG3.BSCPROG4.BSCPROG5.BSCPROG6.BSCPROG7.BSCPROG8.BSCPROG9.BSCPROG10.BSC<<<<<<<<<<A:\*.BSCab Hz/:NuH z0(2(@g4"P&1::g*g2g:ftgl`2g\`NgL`g<`.E\@f#`@Y@j0(Y@1@`,E0Y@j0(Y@XBhmBBhf1@LNu,X.6H*2( 6^VjTzVb&$N Hf($*  n| 60X2 `\V"8"&Z,NNN  $ L& " J, 2^nP ZV 4n  $ rT* l 0D>L  " >: RR8N".$B.d Dbn^jX2 8*  v2`ll|:D.D&|"(8BBBP&&LHJHNLHJH$., THJH*&.ZR PFHH@ (0\HxT0&TDL R$6.* $. I.. IBGEM LSTIBTOS LSTI-EYS LSTIPrint "PRESS RETURN FOR OLD KEYBOARD" Print "ANY OTHER KEY FOR NEW KEYBOARD" Normn=Xbios(3)+32128 Shiftn=Xbios(3)+32256 Capsn=Xbios(3)+32384 Repeat A$=Inkey$ Until A$<>"" If A$=Chr$(13) End Else B$="SELECT DRIVE" Alert 1,B$,0,"A|B",D Chdrive D Fileselect "\*.*","",Kb$ Open "I",#1,Kb$ Bget #1,Normn,384 Close #1 K=Xbios(16,L:Normn,L:Shiftn,L:Capsn) End Endif On Error Gosub Fnf Print "PRESS RETURN FOR OLD KEYBOARD" Print "ANY OTHER KEY FOR NEW KEYBOARD" Normn=Xbios(3)+32128 Shiftn=Xbios(3)+32256 Capsn=Xbios(3)+32384 Repeat A$=Inkey$ Until A$<>"" If A$=Chr$(13) End Else Gosub Inkb Endif Procedure Inkb Input "SELECT DRIVE:A=1 B=2 ",D Chdrive D Input "KEYBOARD FILENAME ",Kb$ Open "I",#1,Kb$ Bget #1,Normn,384 Close #1 K=Xbios(16,L:Normn,L:Shiftn,L:Capsn) End Return Procedure Fnf If Err=-33 Print "FILE NOT PRESENT ON DISC" Gosub Inkb Endif Return Gosub Setup Gosub Chkeys Gosub Options Procedure Setup K=Xbios(24) Kt=Xbios(16,-1,-1,-1) Norm=Lpeek(Kt) Shift=Norm+128 Caps=Norm+256 Normn=Xbios(3)+32128 Shiftn=Xbios(3)+32256 Capsn=Xbios(3)+32384 Bmove Norm,Normn,128 Bmove Shift,Shiftn,128 Bmove Caps,Capsn,128 Return Procedure Chkeys Print "PRESS KEY TO BE CHANGED" Key=Gemdos(1) Kscan=Int(Key/65536) Input "ENTER NEW ASCII VALUE OF KEY ",Asc Input "POSITION:N=NORMAL S=SHIFT C=CAPSLOCK ",A$ If A$="n" Or A$="N" Poke Normn+Kscan,Asc Endif If A$="s" Or A$="S" Poke Shiftn+Kscan,Asc Endif If A$="c" Or A$="C" Poke Capsn+Kscan,Asc Endif Return Procedure Options B$="CHANGE MORE KEYS?" Alert 2,B$,1,"YES|NO",B If B=1 Gosub Chkeys Gosub Options Else B$="SAVE KEYBOARD?" Alert 2,B$,1,"YES|NO",B If B=1 Fileselect "\*.*","",Kb$ Open "O",#1,Kb$ Bput #1,Normn,384 Close #1 Gosub Mokbd Else Gosub Mokbd Endif B$="KEEP KEYBOARD?" Alert 2,B$,1,"YES|NO",B If B=1 K=Xbios(16,L:Normn,L:Shiftn,L:Capsn) End Else B$=" EXIT? " Alert 1,B$,1,"OKAY",B End Endif Endif Return Procedure Mokbd B$="MORE KEYBOARDS?" Alert 2,B$,1,"YES|NO",B If B=1 Gosub Setup Gosub Chkeys Gosub Options Else Goto Ret Endif Ret: Return .  I..  IILECOP3BAS I ALINDRMBAS(cYEADME BAS1 220 char$="&H"+LEFT$(newdata$,2) 230 byte%=VAL(char$) 240 char$=CHR$(byte%) 250 LSET buffer$=char$ 260 PUT #1,record%:record%=record%+1 270 newdata$=MID$(newdata$,3) 280 WEND 290 NEXT 300 GOTO loop 310 DATA GABKwADOIwwwwwwwwwwwEBPKABDC 320 DATA GBgRGEBPKABDMGBgBAOEBPKABFMG 330 DATA BgBAWBgBAOGBwaEKEAGLwJICAHMg 340 DATA CMEJODADMQfSDMwwNCFIFBMIvMAM 350 DATA ERCDEWwEIEBPKABEAGBwNCEBPKAB 360 DATA FAGBwMKGBwNCAMwFJGHwAKAMwHJW 370 DATA wCMCAHMgCMEJONBPMwQCIDADMQOL 380 DATA DAPMwFBMIvKGBwHAEKEAGLwDUBPK 390 DATA ABFAGBwIMEBPKARKGBwIEGBwIMAM 400 DATA wFJGHQfGEAMwHJGHQfFMEBPKABSG 410 DATA BwGIECGHEOEBEOHFEBPKABAWBwFK 420 DATA GgfcDPDMgBDPDMwDPDMwDPDMgBDP 430 DATA DMwECKHCPDMgCMEJODPDMgIEOEON 440 DATA fMwQBUOHFDPDMgBDPDMwDPDMwDPD 450 DATA MgBDPDMwECKHCPDMgCMEJODPDMgJ 460 DATA EOEONfMwQBUOHFCPAIDPDMgJEOEB 470 DATA FMIPEOHFECEADPDMgHEOEBFEIPEO 480 DATA HFBLEVGEJFClDCAELEJEMEMEVCAN 490 DATA AKwFAlECAEBCAkJFDEDCAFUPCAEC 500 DATA EFCAFUVDFUFUCAEJEOFUPCAUFCEJ 510 DATA FGEFCAEBANAKwEIEJFECAEBCAELE 520 DATA VJCAFUPCAEDEPEOFUJEOVEFANAKQ 530 DATA ECEPEPFECAFAFCEPEHFCEBENCAkV 540 DATA UFEDFUFUANAKQFCEFENEPFGEFCAF 550 DATA LFJCPEOFNANAKwEBEOEPFUIEVSAk 560 DATA JFDEDCAFLFJCPEOFNANAKwkJFDED 570 DATA CAEVCFCEPFCANAKwEHEPEPkCFJEF 580 DATA ANAKQkJFDEDCAFDEBEGEFANAKwww 590 DATA wwwwwwwwwwwwwwwwwwwwwwwwwwww 600 DATA wwwwwwwwwwwwwwwwwwwwwwwwwwww 610 DATA wwwwwwwwwwwwwwwwwwwwwwwwwwww 620 DATA wwwwwwwwwwwwwwwwwwwwwwwwwwww 630 DATA wwwwwwwwwwwwwwwwwwwwwwwwwwww 640 DATA wwwwwwwwwwwwwwwwwwwwwwwwwwww 650 DATA wwwwwwwwwwwwwwwwwwwwwwwwwwww 660 DATA wwwwwwwwwwwwwwwwwwwwwwwwwwww 670 DATA wwwwwwwwwwwwwwwwwwwwwwwwwwww 680 DATA wwww 690 DATA * 10 REM Binary to decimal converter 20 FOR i%=1 TO 16 30 READ a$ 40 bin%=32768 50 byte%=0 60 FOR j%=1 TO 16 70 IF MID$(a$,j%,1)="1" THEN byte%=byte%+bin% 80 bin%=bin%/2 90 NEXT 100 IF i% MOD 4 THEN PRINT byte%;","; ELSE PRINT byte% 110 NEXT 120 DATA 1000000000000001 130 DATA 0100000000000010 140 DATA 0010000000000100 150 DATA 0001000000001000 160 DATA 0000100000010000 170 DATA 0000010000100000 180 DATA 0000001001000000 190 DATA 0000000110000000 200 DATA 0000000110000000 210 DATA 0000001001000000 220 DATA 0000010000100000 230 DATA 0000100000010000 240 DATA 0001000000001000 250 DATA 0010000000000100 260 DATA 0100000000000010 270 DATA 1000000000000001 10 REM File Destroyer 20 REM By Julie Boswell 30 REM (c) Atari ST User 40 FULLW 2:CLEARW 2 50 GOTOXY 0,1 60 DIR :' New ST Basic only! 70 PRINT 80 INPUT "File to destroy:";file$ 90 OPEN "R",#1,file$,1 100 FIELD #1,1 AS buffer$ 110 PRINT "Destroying file..." 120 FOR i=1 TO LOF(1) 130 LSET buffer$="*" 140 PUT #1,i 150 NEXT 160 CLOSE #1 170 kill file$ 180 END . I!.. IOMPLETEBASI"f EMO BASI&UMB BASI(f NIT BASI,10 REM Multi-colour demonstration program 20 REM By Russell Payne 30 REM (c) Atari ST User 40 REM 50 DEF FNc(x)=(PEEK(1212)*4+x) AND &H777 60 DEFSEG=0:DEFINT i,j:CLEAR:POKE 1212,0 70 DIM palette%(50,15):FULLW 2:CLEARW 2:GOSUB initialize 80 REM 90 DATA &H777,&H700,&H070,&H000 100 DATA &H777,&H007,&H707,&H000 110 RESTORE 90 120 REM 130 READ palette%(0,0),palette%(0,1),palette%(0,2),palette%(0,3) 140 READ palette%(1,0),palette%(1,1),palette%(1,2),palette%(1,3) 150 FOR i=0 TO 3:palette%(2,i)=palette%(1,i):NEXT:REM fix bottom palette 160 REM 170 CALL colourmap(100,VARPTR(palette%(0,0))):REM 200/100=2 180 REM 190 FOR i=0 TO 3 200 FOR j=30 TO 130 step 100 210 COLOR 1,1,1,1,1:circle i*100+50,j,40,40 220 COLOR 1,I,1,7,2:fill i*100+50,j 230 NEXT 240 NEXT 250 COLOR 1,1,1,1,1 260 GOTOXY 10,7:?" Six colours in medium resolution" 270 GOTOXY 10,8:?" we could use eight but the" 280 GOTOXY 10,9:?" change would be obvious." 290 REM 300 FOR i=1 TO 90000:NEXT:CLEARW 2:call unmap 310 REM 320 FOR i=0 TO 50 330 palette%(i,0)=&H777:REM white 340 palette%(i,1)=FNc(i) 350 palette%(i,2)=&H700:REM red 360 palette%(i,3)=&H000:REM black 370 NEXT 380 REM 390 CALL colourmap(4,VARPTR(palette%(0,0))):REM 200/4=50 400 REM 410 COLOR 1,3,1,8,2:fill 10,10 420 FOR i=0 TO 15 430 COLOR 1,1,1,1,1:GOTOXY 2+i,i:?" Lots of " 440 COLOR 2,1,1,1,1:GOTOXY 10+i,i:?" different text " 450 COLOR 1,1,1,1,1:GOTOXY 25+i,i:?" colours!! " 460 NEXT 470 COLOR 1,2,1,1:PCIRCLE 60,120,40,40 480 COLOR 1,2,1,1:PCIRCLE 400,30,40,40 490 REM 500 i=1:j=24:k=0 510 palette%(i,1)=palette%(i+1,1) 520 palette%(49-j,2)=palette%(50-j,2):palette%(j,2)=palette%(j-1,2) 530 i=i+1:if i=49 THEN palette%(49,1)=FNc(k):i=1 540 j=j-1:if j=0 THEN palette%(1,2)=FNc(k):palette%(49,2)=FNc(k):j=24 550 k=k+1:if k<1200 THEN 510 560 REM 570 CLEARW 2:call unmap 580 END 10000 REM Colour pallette routine intialize machine code 10010 initialize: 10020 DEFSEG=0:colourmap=PEEK(1102#)+&H7D12:mc=colourmap 10030 UNMAP=colourmap+&H7A:chksum=0:RESTORE 10100:READ a$ 10040 WHILE a$<>"*" 10050 x=VAL("&H"+a$):POKE mc,x:mc=mc+2:chksum=chksum XOR x:READ a$ 10060 WEND 10070 IF chksum<>9574 THEN ?"Checksum failed":STOP 10080 RETURN 10090 REM 10100 DATA 206F,0006,43FA,00FA,32E8,0002,2068,0004,22C8,41E8,0020,22C8 10110 DATA 487A,000C,3F3C,0026,4E4E,5C8F,4E75,46FC,2700,2038,0070,41FA 10120 DATA 00CA,2140,0002,41FA,00B6,21C8,0070,41FA,005A,21C8,0120,4238 10130 DATA FA1B,303A,00B4,11C0,FA21,B038,FA21,66F6,08F8,0000,FA07,08F8 10140 DATA 0000,FA13,46FC,2300,2038,0466,B0B8,0466,67FA,11FC,0008,FA1B 10150 DATA 4E75,487A,000C,3F3C,0026,4E4E,5C8F,4E75,4238,FA1B,41FA,006C 10160 DATA 2068,0002,21C8,0070,4E75,2F08,2078,0300,31D8,8240,31D8,8242 10170 DATA 31D8,8244,31D8,8246,31D8,8248,31D8,824A,31D8,824C,31D8,824E 10180 DATA 31D8,8250,31D8,8252,31D8,8254,31D8,8256,31D8,8258,31D8,825A 10190 DATA 31D8,825C,31D8,825E,21C8,0300,205F,08B8,0000,FA0F,4E73,21FA 10200 DATA 0012,045A,21FA,0010,0300,4EF9,0000,0000,0000,0000,0000,0000 10210 DATA 0000,* 10 rem Multi-colour demonstration program 20 rem By Russell Payne 30 rem Low or medium resolution only 40 rem 50 def fnc(x)=(peek(1212) * 4 + x) and &H777 60 defseg=0:defint i,j:clear:poke 1212,0 70 dim palette%(50,15):fullw 2:clearw 2:gosub INITIALIZE 80 rem 90 data &H777,&H700,&H070,&H000 100 data &H777,&H007,&H707,&H000 110 restore 90 120 rem 130 read palette%(0,0),palette%(0,1),palette%(0,2),palette%(0,3) 140 read palette%(1,0),palette%(1,1),palette%(1,2),palette%(1,3) 150 for i=0 to 3:palette%(2,i)=palette%(1,i):next:rem fix bottom palette 160 rem 170 call COLORMAP(100,varptr(palette%(0,0))):rem 200/100=2 180 rem 190 for i=0 to 3 200 for j=30 to 130 step 100 210 color 1,1,1,1,1:circle i*100+50,j,40,40 220 color 1,I,1,7,2:fill i*100+50,j 230 next 240 next 250 color 1,1,1,1,1 260 gotoxy 10,7:?"6 colours in medium resolution" 270 gotoxy 10,8:?" could have used 8 but the change" 280 gotoxy 10,9:?" would then have been obvious." 290 rem 300 for i=1 to 90000:next:clearw 2:call unmap 310 rem 320 for i=0 to 50 330 palette%(i,0)=&H777:rem white 340 palette%(i,1)=fnc(i) 350 palette%(i,2)=&H700:rem red 360 palette%(i,3)=&H000:rem black 370 next 380 rem 390 call COLORMAP(4,varptr(palette%(0,0))):rem 200/4=50! understand? 400 rem 410 color 1,3,1,8,2:fill 10,10 420 for i=0 to 15 430 color 1,1,1,1,1:gotoxy 2+i,i:?" Lots of " 440 color 2,1,1,1,1:gotoxy 10+i,i:?" different text " 450 color 1,1,1,1,1:gotoxy 25+i,i:?" colours!! " 460 next 470 color 1,2,1,1:pcircle 60,120,40,40 480 color 1,2,1,1:pcircle 400,30,40,40 490 rem 500 i=1:j=24:k=0 510 palette%(i,1)=palette%(i+1,1) 520 palette%(49-j,2)=palette%(50-j,2):palette%(j,2)=palette%(j-1,2) 530 i=i+1:if i=49 then palette%(49,1)=fnc(k):i=1 540 j=j-1:if j=0 then palette%(1,2)=fnc(k):palette%(49,2)=fnc(k):j=24 550 k=k+1:if k<1200 then 510 560 rem 570 clearw 2:call unmap 580 end 10 REM Multi-colour demonstration program 20 REM By Russell Payne 30 REM (c) Atari ST User 40 REM 50 DEF FNc(x)=(PEEK(1212)*4+x) AND &H777 60 DEFSEG=0:DEFINT i,j:CLEAR:POKE 1212,0 70 DIM palette%(50,15):FULLW 2:CLEARW 2:GOSUB initialize 80 REM 90 DATA &H777,&H700,&H070,&H000 100 DATA &H777,&H007,&H707,&H000 110 RESTORE 90 120 REM 130 READ palette%(0,0),palette%(0,1),palette%(0,2),palette%(0,3) 140 READ palette%(1,0),palette%(1,1),palette%(1,2),palette%(1,3) 150 FOR i=0 TO 3:palette%(2,i)=palette%(1,i):NEXT:REM fix bottom palette 160 REM 170 rem colourmap(100,VARPTR(palette%(0,0))):REM 200/100=2 180 REM 190 FOR i=0 TO 3 200 FOR j=30 TO 130 step 100 210 COLOR 1,1,1,1,1:circle i*100+50,j,40,40 220 COLOR 1,I,1,7,2:fill i*100+50,j 230 NEXT 240 NEXT 250 COLOR 1,1,1,1,1 260 GOTOXY 10,7:?" Six colours in medium resolution" 270 GOTOXY 10,8:?" we could use eight but the" 280 GOTOXY 10,9:?" change would be obvious." 290 REM 300 FOR i=1 TO 90000:NEXT:CLEARW 2:rem unmap 310 REM 320 FOR i=0 TO 50 330 palette%(i,0)=&H777:REM white 340 palette%(i,1)=FNc(i) 350 palette%(i,2)=&H700:REM red 360 palette%(i,3)=&H000:REM black 370 NEXT 380 REM 390 rem colourmap(4,VARPTR(palette%(0,0))):REM 200/4=50 400 REM 410 COLOR 1,3,1,8,2:fill 10,10 420 FOR i=0 TO 15 430 COLOR 1,1,1,1,1:GOTOXY 2+i,i:?" Lots of " 440 COLOR 2,1,1,1,1:GOTOXY 10+i,i:?" different text " 450 COLOR 1,1,1,1,1:GOTOXY 25+i,i:?" colours!! " 460 NEXT 470 COLOR 1,2,1,1:PCIRCLE 60,120,40,40 480 COLOR 1,2,1,1:PCIRCLE 400,30,40,40 490 REM 500 i=1:j=24:k=0 510 palette%(i,1)=palette%(i+1,1) 520 palette%(49-j,2)=palette%(50-j,2):palette%(j,2)=palette%(j-1,2) 530 i=i+1:if i=49 THEN palette%(49,1)=FNc(k):i=1 540 j=j-1:if j=0 THEN palette%(1,2)=FNc(k):palette%(49,2)=FNc(k):j=24 550 k=k+1:if k<1200 THEN 510 560 REM 570 CLEARW 2:rem unmap 580 END 10000 REM Colour pallette routine intialize machine code 10010 initialize: 10020 DEFSEG=0:colourmap=PEEK(1102#)+&H7D12:mc=colourmap 10030 UNMAP=colourmap+&H7A:chksum=0:RESTORE 10100:READ a$ 10040 WHILE a$<>"*" 10050 x=VAL("&H"+a$):POKE mc,x:mc=mc+2:chksum=chksum XOR x:READ a$ 10060 WEND 10070 IF chksum<>9574 THEN ?"Checksum failed":STOP 10080 RETURN 10090 REM 10100 DATA 206F,0006,43FA,00FA,32E8,0002,2068,0004,22C8,41E8,0020,22C8 10110 DATA 487A,000C,3F3C,0026,4E4E,5C8F,4E75,46FC,2700,2038,0070,41FA 10120 DATA 00CA,2140,0002,41FA,00B6,21C8,0070,41FA,005A,21C8,0120,4238 10130 DATA FA1B,303A,00B4,11C0,FA21,B038,FA21,66F6,08F8,0000,FA07,08F8 10140 DATA 0000,FA13,46FC,2300,2038,0466,B0B8,0466,67FA,11FC,0008,FA1B 10150 DATA 4E75,487A,000C,3F3C,0026,4E4E,5C8F,4E75,4238,FA1B,41FA,006C 10160 DATA 2068,0002,21C8,0070,4E75,2F08,2078,0300,31D8,8240,31D8,8242 10170 DATA 31D8,8244,31D8,8246,31D8,8248,31D8,824A,31D8,824C,31D8,824E 10180 DATA 31D8,8250,31D8,8252,31D8,8254,31D8,8256,31D8,8258,31D8,825A 10190 DATA 31D8,825C,31D8,825E,21C8,0300,205F,08B8,0000,FA0F,4E73,21FA 10200 DATA 0012,045A,21FA,0010,0300,4EF9,0000,0000,0000,0000,0000,0000 10210 DATA 0000,* 10000 REM Colour pallette routine intialize machine code 10010 initialize: 10020 DEFSEG=0:colourmap=PEEK(1102#)+&H7D12:mc=colourmap 10030 UNMAP=colourmap+&H7A:chksum=0:RESTORE 10100:READ a$ 10040 WHILE a$<>"*" 10050 x=VAL("&H"+a$):POKE mc,x:mc=mc+2:chksum=chksum XOR x:READ a$ 10060 WEND 10070 IF chksum<>9574 THEN ?"Checksum failed":STOP 10080 RETURN 10090 REM 10100 DATA 206F,0006,43FA,00FA,32E8,0002,2068,0004,22C8,41E8,0020,22C8 10110 DATA 487A,000C,3F3C,0026,4E4E,5C8F,4E75,46FC,2700,2038,0070,41FA 10120 DATA 00CA,2140,0002,41FA,00B6,21C8,0070,41FA,005A,21C8,0120,4238 10130 DATA FA1B,303A,00B4,11C0,FA21,B038,FA21,66F6,08F8,0000,FA07,08F8 10140 DATA 0000,FA13,46FC,2300,2038,0466,B0B8,0466,67FA,11FC,0008,FA1B 10150 DATA 4E75,487A,000C,3F3C,0026,4E4E,5C8F,4E75,4238,FA1B,41FA,006C 10160 DATA 2068,0002,21C8,0070,4E75,2F08,2078,0300,31D8,8240,31D8,8242 10170 DATA 31D8,8244,31D8,8246,31D8,8248,31D8,824A,31D8,824C,31D8,824E 10180 DATA 31D8,8250,31D8,8252,31D8,8254,31D8,8256,31D8,8258,31D8,825A 10190 DATA 31D8,825C,31D8,825E,21C8,0300,205F,08B8,0000,FA0F,4E73,21FA 10200 DATA 0012,045A,21FA,0010,0300,4EF9,0000,0000,0000,0000,0000,0000 10210 DATA 0000,* 10 REM Word Counter 20 REM By Julie Boswell 30 REM (c) Atari ST User 40 REM ST Basic & HiSoft Basic 50 REM Medium/High resolution 60 FULLW 2:CLEARW 2 70 GOTOXY 0,1 80 DIR :' New ST Basic only! 90 FILES :' HiSoft Basic only! 100 PRINT 110 INPUT "File to count:";file$ 120 OPEN "R",#1,file$,1 130 FIELD #1,1 AS buffer$ 140 ptr%=1 150 inword%=0 160 count%=0 170 ? "File is";LOF(1);"bytes long." 180 ? "Counting..." 190 GET #1,ptr% 200 b%=ASC(buffer$) 210 IF b%>32 AND b%<127 THEN GOSUB 280 ELSE inword%=0 220 ptr%=ptr%+1 230 IF ptr%<=LOF(1) THEN 190 240 CLOSE #1 250 ?"Words =";count% 260 INPUT "Hit Return",dummy$ 270 END 280 IF NOT inword% THEN count%=count%+1 290 inword%=-1 300 RETURN  10 REM File Editor 20 REM By Julie Boswell 30 REM (c) Atari ST User 40 REM ST Basic (old & new) 50 GOSUB filename 60 GOSUB dump 70 GOSUB options 80 IF INSTR("NnBbAa",opt$) THEN 60 90 END 100 ' 110 filename: 120 FULLW 2:CLEARW 2 130 GOTOXY 0,1 140 DIR :' New ST Basic only! 150 PRINT 160 INPUT "File to edit:";file$ 170 OPEN "R",#1,file$,1 180 FIELD #1,1 AS buffer$ 190 ptr%=1 200 RETURN 210 ' 220 dump: 230 CLEARW 2 240 GOTOXY 2,1 250 PRINT "File: ";file$;" Length:";LOF(1);"bytes" 260 PRINT 270 PRINT " - Dec ------------- Hex ------------- Ascii -" 280 FOR j%=1 TO 8 290 a$="" 300 GOTOXY 1,3+j% 310 PRINT ptr%-1;TAB(7);": "; 320 FOR i%=1 TO 8 330 IF ptr%31 AND b%<127 THEN a$=a$+CHR$(b%) ELSE a$=a$+"." 350 PRINT RIGHT$("0"+HEX$(b%),2);" "; 360 ptr%=ptr%+1 370 NEXT 380 PRINT " ";a$ 390 NEXT 400 RETURN 410 ' 420 options: 430 GOTOXY 1,13 440 INPUT "Next, Back, Alter or Quit (N/B/A/Q)";opt$ 450 IF INSTR("Bb",opt$) THEN ptr%=ptr%-64+64*(ptr%>127) 460 IF INSTR("NnBbQq",opt$) THEN RETURN 470 INPUT " Alter which byte";n% 480 INPUT " New value";a$ 490 b%=VAL(a$) 500 LSET buffer$=CHR$(b%) 510 PUT #1,n%+1 520 ptr%=ptr%-64 530 RETURN 10 ' *************************** 20 ' ** Atari ST Mouse Editor ** 25 ' ** By Michael A.Baxter ** 30 ' *************************** 35 If Peek(Systab)<>2 then ?"Medium Resolution only.":End 40 Option Base 0: Dim Y.Grid(15),X.Grid(15),Cursor(15),Bit(15),Mask(15) 50 Gosub Title.in:Gosub Init: FullW 2: ClearW 2 60 Def FNx.pos=int((Peek(Ptsout))/15.9375) 70 Def FNy.pos=int(((Peek(Ptsout+2))-30)/8) 80 Gosub Grid 90 Gosub Form.Menu 100 Main.Loop: Gosub Mouse.Status 110 If but=1 then Gosub P.fill 120 If but=1 and x>299 and x<436 goto select 130 If but=1 and x>450 and x<581 goto Create.Data 140 If but=2 and x>299 and x<456 and y>128 and y<141 then Gosub Reset.Mouse 150 Goto Main.Loop 160 Select: y=peek(ptsout+2):gosub mse.off 170 If y>38 and y<51 then col=1:s=0:Gosub Mcol:s=2:Gosub Bcol:Gosub Back 180 If y>56 and y<69 then col=2:s=0:Gosub Bcol:s=2:Gosub Mcol:Gosub Back 190 If y>74 and y<87 then col=0:s=0:Gosub back:s=2:Gosub Mcol:Gosub Bcol 200 If y>100 and y<115 then Gosub Grid.Fill 210 If y>164 and y<177 then Goto Prog.End 220 if y>128 and y<141 then Gosub Change.Mouse 230 if y>145 and y<159 then Gosub Action.Pnt 240 s=0 : Gosub Style: Gosub Mse.On: Goto 140 250 Mcol: Gosub Style: Gotoxy 35,2:? "CURSOR COLOUR":Return 260 Bcol: Gosub Style: Gotoxy 35,4:? "MASK COLOUR":Return 270 Back: Gosub Style: Gotoxy 35,6:? "BACKGROUND":Return 280 Create.Data:y=peek(ptsout+2) 290 if y>38 and y<51 then Gosub Basic.Data 300 if y>56 and y<69 then Gosub Create.C 310 Gosub Reset.Mouse:goto 140 320 P.fill: 330 If Fy<0 or Fy>15 or Fx>=16 then Return 340 Color 1,col: Gosub Mse.Off:Fill X.Grid(fx),Y.Grid(Fy) 350 If col=1 and fx=0 and Cursor(fy)>32767 Goto 430 360 If col=1 then If(Cursor(fy) and Bit(fx))<>Bit(fx) Goto Scbit 370 If col=2 and fx=0 and Mask(fy)>32767 Goto 430 380 If col=2 then If(Mask(fy) and Bit(fx))<>Bit(fx) Goto Smbit 390 If col=0 then If(Cursor(fy) and Bit(fx))=Bit(fx) Goto Clcbit 400 If col=0 then If(Mask(fy) and Bit(fx))=Bit(fx) Goto Clmbit 410 If col=0 and fx=0 and Cursor(fy)>32767 Goto Clcbit 420 If col=0 and fx=0 and Mask(fy)>32767 Goto Clmbit 430 Gosub Mse.On: Return 440 Scbit: 450 Cursor(fy)=Cursor(fy)+Bit(fx) 460 If fx=0 and Mask(fy)>32767 Goto 550 470 If (Mask(fy) and Bit(fx))=Bit(fx) Goto 550 Else 430 480 Smbit: 490 Mask(fy)=Mask(fy)+Bit(fx) 500 If fx=0 and Cursor(fy)>32767 Goto 520 510 If (Cursor(fy) and Bit(fx))=Bit(fx) Goto 520 Else 430 520 Clcbit: 530 Cursor(fy)=Cursor(fy)-Bit(fx): Goto 400 540 Clmbit: 550 Mask(fy)=Mask(fy)-Bit(fx): Goto 430 560 Action.Pnt:Gosub Mse.On:Poke Gintin,7:GEMsys(78):for g=1 to 100:next 570 gosub Mouse.Status:if but<>1 Goto 570 580 if Fy<0 or Fy>=16 or Fx>15 then out 2,7:goto 570 590 Act.X=Fx:Act.Y=Fy:for g=1 to 100:next:poke Gintin,0:GEMsys(78):return 600 Mouse.Status: 610 Poke Contrl,124:Poke Contrl+2,0:Poke Contrl+6,0:VDIsys 620 But=Peek(Intout):x=Peek(Ptsout):fy=FNy.pos:fx=FNx.pos:return 630 Mse.On:Poke Contrl,122:Poke Contrl+2,0 640 Poke Contrl+6,1:Poke Intin,0: VDIsys 650 Return 660 Mse.Off:Poke Contrl,123 670 Poke Contrl+2,0:Poke Contrl+6,0:VDIsys 680 Return 690 Draw.Box: 700 Linef x,y,x+135,y:Linef x+135,y,x+135,y+14 710 Linef x+135,y+14,x,y+14:Linef x,y+14,x,y: Return 720 Form.Menu: 730 h=6: Gosub Text.Size 740 x=300:y=16: Gosub Draw.Box:GotoXY 35,2:? "CURSOR COLOUR" 750 s=02: Gosub Style:Y=34:Gosub Draw.Box:GotoXY 35,4:?"MASK COLOUR" 760 y=52: Gosub Draw.Box:GotoXY 35,6:?"BACKGROUND" 770 s=00: Gosub Style:y=79:Gosub Draw.Box:GotoXY 35,9:?"FILL GRID" 780 y=106:Gosub Draw.Box:GotoXY 35,12:?"DISPLAY MOUSE" 790 y=124:Gosub Draw.Box:GotoXY 35,14:?"ACTION POINT" 800 y=142:Gosub Draw.Box:GotoXY 35,16:?"EXIT PROGRAM" 810 y=16:x=450:Gosub Draw.Box:GotoXY 52,2:?"BASIC DATA" 820 y=34:Gosub Draw.Box:GotoXY 52,4:?"'C' DATA" 830 s=17: Gosub Style:Color 1,3,1,4,2: Fill 1,1:col=1:Color 1,1,1,8,2 840 GotoXY 5,16:?" "chr$(189)" 1987 Atari ST User ":s=0: Gosub Style 850 Return 860 Text.Size: Poke Contrl,12:Poke Contrl+2,1 870 Poke Contrl+6,0:Poke Ptsin,0:Poke Ptsin+2,h 880 VDIsys(1):Return 890 Style: Poke Contrl,106:Poke Contrl+2,0 900 Poke Contrl+6,1:Poke Intin,s:VDIsys(1): Return 910 Grid.Fill: Color 1,col 920 Poke Contrl,11:Poke Contrl+2,2:Poke Contrl+6,0:Poke Contrl+10,1 930 Poke Ptsin,0:Poke Ptsin+2,31:Poke Ptsin+4,256: Poke Ptsin+6,158 940 VDIsys(1): Gosub Grid 950 If col=1 then for i=0 to 15:Cursor(i)=65535:Mask(i)=0:next 960 If col=2 then for i=0 to 15:Cursor(i)=0:Mask(i)=65535:next 970 If col=0 then for i=0 to 15:Cursor(i)=0:Mask(i)=0:next 980 Return 990 Title.In: 1000 t$=" "+chr$(14)+chr$(15)+" Atari ST Mouse Pixel Editor "+chr$(14)+chr$(15) 1010 t$=t$+" "+chr$(0):a#=gb: Gintin=Peek(a#+8):handle=Peek(Systab+8) 1020 x#=Gintin+4:Poke Gintin,handle:Poke Gintin+2,2 1030 Poke x#,Varptr(t$):GEMsys(105): Return 1040 Init: Restore 1080 1050 for i=0 to 15: read a%: Y.Grid(I)=a%: next 1060 for i=0 to 15: read a%: X.Grid(i)=a%: next 1070 for i=0 to 15: read a: Bit(i)=a:Cursor(i)=0:Mask(i)=0: next: Return 1080 Data 11,19,28,36,44,52,60,66,76,83,91,99,107,115,122,131 1090 Data 8,23,40,56,72,88,105,120,137,152,169,184,199,216,230,249 1100 data 32768,16384,8192,4096,2048,1024,512,256,128,64,32,16,8,4,2,1 1110 Grid: Color 1,0,3:for i=1 to 16:Linef i*16,08,i*16,137 1120 Linef 0,i*8,256,i*8: next:Linef 0,137,256,137 1130 Linef 0,8,0,137:Color 1,0,1: Return 1140 Basic.Data:poke Gintin,2:GEMsys(78) 1150 Open "O",#1,"MOUSE.BAS" 1160 ?#1,"1000 Data ";Act.X;",";Act.Y 1170 ?#1,"1010 Data "; 1180 for i=0 to 6:Print #1,Mask(i);",";:next:Print #1,Mask(7) 1190 ?#1,"1020 Data "; 1200 for i=8 to 14:Print #1,Mask(i);",";:next:Print #1,Mask(15) 1210 ?#1,"1030 Data "; 1220 for i=0 to 6:Print #1,Cursor(i);",";:next:Print #1,Cursor(7) 1230 ?#1,"1040 Data "; 1240 for i=8 to 14:Print #1,Cursor(i);",";:next:Print #1,Cursor(15) 1250 Close #1:Return 1260 Prog.End: 1270 h=6:Gosub Text.Size: CloseW 2:Gosub Mse.On:color 1: End 1280 Reset.Mouse: 1290 Poke Gintin,0:GEMsys(78): Return 1300 Change.Mouse: 1310 Poke Contrl+0,111:Poke Contrl+2,0:Poke Contrl+6,37 1320 Poke Intin,Act.X 1330 Poke Intin+2,Act.Y 1340 Poke Intin+4,1:Poke Intin+6,0:Poke Intin+8,1 1350 n=0:for i=10 to 40 step 2:Poke Intin+i,Mask(n):n=n+1:next 1360 n=0:for i=42 to 72 step 2:Poke Intin+i,Cursor(n):n=n+1:next 1370 VDIsys(1): Return 1380 Create.C:poke Gintin,2:GEMsys(78) 1390 Open "O",#1,"MOUSE.C":?#1,"change_mouse()":?#1,"{" 1400 ?#1," int form[37] ; /* Lattice C users change 'int' to 'short' */ 1410 ?#1," ":?#1," form[0]=";Act.X;"; form[1]=";Act.Y;"; /* X,Y Action point */ 1420 ?#1," form[2]= 1 ; /* Must be 1 */ 1430 ?#1," form[3]= 0 ; form[4]=1 ; /* Colours for mask and cursor */ 1440 ?#1," ":?#1," /* 16 word group for mask */" 1450 for i=0 to 3:?#1,"form[";5+i;"]=";Mask(i);"; ";:next:?#1," " 1460 for i=4 to 7:?#1,"form[";5+i;"]=";Mask(i);"; ";:next:?#1," " 1470 for i=8 to 11:?#1,"form[";5+i;"]=";Mask(i);"; ";:next:?#1," " 1480 for i=12 to 15:?#1,"form[";5+i;"]=";Mask(i);"; ";:next:?#1," " 1490 ?#1," ":?#1," /* 16 word group for cursor */" 1500 for i=0 to 3:?#1,"form[";21+i;"]=";Cursor(i);"; ";:next:?#1," " 1510 for i=4 to 7:?#1,"form[";21+i;"]=";Cursor(i);"; ";:next:?#1," " 1520 for i=8 to 11:?#1,"form[";21+i;"]=";Cursor(i);"; ";:next:?#1," " 1530 for i=12 to 15:?#1,"form[";21+i;"]=";Cursor(i);"; ";:next:?#1," " 1540 ?#1," ": ?#1," vsc_form(handle,form);" 1550 ?#1," graf_mouse(255,form);":?#1,"}":close #1:return 10 rem Printer Buffer Program Creator 20 rem By Richard Phillips 30 rem (c) Atari ST User 40 counter=1 50 open "R",1,"pbuffer.ttp",1 60 field #1,1 AS filedata$ 70 read data$ 80 byte=val(data$) 90 if byte=-1 then goto 150 100 file$=chr$(byte) 110 lset filedata$=file$ 120 put 1,counter 130 counter=counter+1 140 goto 70 150 close 1 160 end 1000 data 96,26,0,0,6,48,0,0,0,0 1010 data 0,0,0,0,0,0,0,0,0,0 1020 data 0,0,0,0,0,0,0,0,44,111 1030 data 0,4,72,121,0,0,4,232,63,60 1040 data 0,9,78,65,92,143,72,121,0,0 1050 data 0,130,63,60,0,38,78,78,92,143 1060 data 74,121,0,0,4,230,106,0,0,20 1070 data 72,121,0,0,5,244,63,60,0,9 1080 data 78,65,92,143,96,0,0,20,97,0 1090 data 2,126,72,121,0,0,5,214,63,60 1100 data 0,9,78,65,92,143,72,121,0,0 1110 data 6,21,63,60,0,9,78,65,92,143 1120 data 63,60,0,7,78,65,84,143,74,121 1130 data 0,0,4,230,107,0,0,16,66,103 1140 data 47,60,0,0,4,232,63,60,0,49 1150 data 78,65,63,60,0,0,78,65,97,0 1160 data 0,76,74,121,0,0,4,230,107,0 1170 data 0,64,97,0,0,128,74,121,0,0 1180 data 4,230,107,0,0,50,97,0,1,104 1190 data 97,0,1,150,74,121,0,0,4,230 1200 data 107,0,0,32,97,0,1,186,74,121 1210 data 0,0,4,230,107,0,0,18,97,0 1220 data 1,226,32,121,0,0,4,222,32,188 1230 data 0,0,3,128,78,117,32,46,0,12 1240 data 208,174,0,20,208,174,0,28,6,128 1250 data 0,0,1,0,47,0,47,14,66,103 1260 data 63,60,0,74,78,65,223,252,0,0 1270 data 0,12,74,128,102,0,0,4,78,117 1280 data 83,121,0,0,4,230,72,121,0,0 1290 data 5,139,63,60,0,9,78,65,92,143 1300 data 78,117,65,238,0,129,74,24,103,0 1310 data 0,142,83,136,12,24,0,32,103,250 1320 data 83,136,12,16,0,32,111,0,0,148 1330 data 34,72,35,200,0,0,4,226,66,128 1340 data 12,17,0,32,110,0,0,8,66,17 1350 data 96,0,0,22,12,17,0,48,109,0 1360 data 0,116,12,25,0,57,110,0,0,108 1370 data 82,128,96,222,12,0,0,2,109,0 1380 data 0,120,12,0,0,4,110,0,0,136 1390 data 32,57,0,0,4,218,192,252,0,10 1400 data 18,24,4,1,0,48,208,129,74,16 1410 data 102,240,34,60,0,0,0,10,227,160 1420 data 35,192,0,0,4,218,47,60,255,255 1430 data 255,255,63,60,0,72,78,65,92,143 1440 data 176,185,0,0,4,218,109,0,0,76 1450 data 78,117,4,121,0,1,0,0,4,230 1460 data 72,121,0,0,5,27,63,60,0,9 1470 data 78,65,92,143,78,117,4,121,0,1 1480 data 0,0,4,230,72,121,0,0,5,57 1490 data 63,60,0,9,78,65,92,143,78,117 1500 data 4,121,0,1,0,0,4,230,72,121 1510 data 0,0,5,92,63,60,0,9,78,65 1520 data 92,143,78,117,4,121,0,1,0,0 1530 data 4,230,72,121,0,0,5,117,63,60 1540 data 0,9,78,65,92,143,78,117,63,60 1550 data 0,4,78,78,84,143,50,60,0,70 1560 data 12,64,0,2,103,0,0,20,50,60 1570 data 0,50,12,120,0,0,4,72,103,0 1580 data 0,6,50,60,0,60,194,252,0,30 1590 data 51,193,0,0,4,216,78,117,32,120 1600 data 4,86,48,56,4,84,74,144,103,0 1610 data 0,30,88,136,81,200,255,246,83,121 1620 data 0,0,4,230,72,121,0,0,5,193 1630 data 63,60,0,9,78,65,92,143,78,117 1640 data 35,200,0,0,4,222,78,117,47,57 1650 data 0,0,4,218,63,60,0,72,78,65 1660 data 92,143,12,128,0,0,0,0,99,0 1670 data 0,10,35,192,0,0,4,196,78,117 1680 data 83,121,0,0,4,230,72,121,0,0 1690 data 5,163,63,60,0,9,78,65,92,143 1700 data 78,117,72,121,0,0,2,204,63,60 1710 data 0,33,63,60,0,5,78,77,80,143 1720 data 35,192,0,0,4,142,78,117,47,57 1730 data 0,0,4,226,63,60,0,9,78,65 1740 data 92,143,78,117,65,239,0,6,48,23 1750 data 8,0,0,13,102,0,0,4,78,104 1760 data 12,80,0,17,103,0,0,18,12,80 1770 data 0,5,103,0,0,38,47,57,0,0 1780 data 4,142,78,117,32,57,0,0,4,208 1790 data 176,185,0,0,4,218,103,0,0,10 1800 data 32,60,255,255,255,255,78,115,66,128 1810 data 78,115,32,57,0,0,4,208,176,185 1820 data 0,0,4,218,103,0,0,60,34,121 1830 data 0,0,4,196,211,249,0,0,4,200 1840 data 18,168,0,3,82,185,0,0,4,200 1850 data 32,57,0,0,4,200,176,185,0,0 1860 data 4,218,109,0,0,8,66,185,0,0 1870 data 4,200,82,185,0,0,4,208,32,60 1880 data 255,255,255,255,78,115,66,121,0,0 1890 data 4,212,32,57,0,0,4,208,176,185 1900 data 0,0,4,218,102,162,48,57,0,0 1910 data 4,212,176,121,0,0,4,216,109,228 1920 data 66,128,78,115,74,185,0,0,4,208 1930 data 103,0,0,254,74,120,4,238,107,0 1940 data 0,10,49,252,255,255,4,238,78,117 1950 data 35,248,4,162,0,0,4,146,33,252 1960 data 0,0,4,196,4,162,63,60,255,255 1970 data 63,60,0,11,78,77,88,143,33,249 1980 data 0,0,4,146,4,162,8,0,0,2 1990 data 103,0,0,30,8,0,0,3,103,0 2000 data 0,22,66,185,0,0,4,208,66,185 2010 data 0,0,4,200,66,185,0,0,4,204 2020 data 78,117,82,121,0,0,4,212,74,121 2030 data 0,0,4,214,102,0,0,156,51,252 2040 data 255,255,0,0,4,214,74,185,0,0 2050 data 4,208,103,0,0,132,35,248,4,162 2060 data 0,0,4,146,33,252,0,0,4,196 2070 data 4,162,66,103,63,60,0,8,78,77 2080 data 88,143,33,249,0,0,4,146,4,162 2090 data 74,128,103,0,0,92,33,252,0,0 2100 data 4,196,4,162,32,121,0,0,4,196 2110 data 209,249,0,0,4,204,16,16,2,64 2120 data 0,255,63,0,66,103,63,60,0,3 2130 data 78,77,92,143,33,249,0,0,4,146 2140 data 4,162,74,128,103,0,0,40,82,185 2150 data 0,0,4,204,32,57,0,0,4,204 2160 data 176,185,0,0,4,218,109,0,0,8 2170 data 66,185,0,0,4,204,83,185,0,0 2180 data 4,208,96,0,255,118,66,121,0,0 2190 data 4,214,78,117,0,0,0,0,0,0 2200 data 0,0,0,0,0,0,0,0,0,0 2210 data 0,0,0,0,0,0,0,0,0,0 2220 data 0,0,0,0,0,0,0,0,0,0 2230 data 0,0,0,0,0,0,0,0,0,0 2240 data 0,0,0,0,0,0,0,0,0,0 2250 data 0,0,0,0,0,0,0,0,0,0 2260 data 0,0,0,0,0,0,0,0,0,0 2270 data 0,0,0,0,0,0,0,0,0,0 2280 data 0,0,0,0,65,116,97,114,105,32 2290 data 83,84,32,80,114,105,110,116,101,114 2300 data 32,66,117,102,102,101,114,46,13,10 2310 data 66,121,32,82,105,99,104,97,114,100 2320 data 32,80,104,105,108,108,105,112,115,46 2330 data 13,10,13,10,0,85,115,97,103,101 2340 data 32,58,32,112,98,117,102,102,101,114 2350 data 46,116,116,112,32,60,115,105,122,101 2360 data 62,46,10,13,0,69,114,114,111,114 2370 data 32,105,110,32,99,111,109,109,97,110 2380 data 100,32,108,105,110,101,32,112,97,114 2390 data 97,109,101,116,101,114,46,10,13,0 2400 data 66,117,102,102,101,114,32,115,105,122 2410 data 101,32,116,111,111,32,115,109,97,108 2420 data 108,46,10,13,0,66,117,102,102,101 2430 data 114,32,115,105,122,101,32,116,111,32 2440 data 98,105,103,46,10,13,0,67,97,110 2450 data 39,116,32,114,101,108,101,97,115,101 2460 data 32,109,101,109,111,114,121,46,13,10 2470 data 0,69,114,114,111,114,32,105,110,32 2480 data 109,101,109,111,114,121,32,97,108,108 2490 data 111,99,97,116,105,111,110,46,13,10 2500 data 0,78,111,32,102,114,101,101,32,86 2510 data 66,76,32,115,108,111,116,115,46,13 2520 data 10,0,75,32,80,114,105,110,116,101 2530 data 114,32,66,117,102,102,101,114,32,105 2540 data 110,115,116,97,108,108,101,100,46,13 2550 data 10,0,13,10,78,111,32,112,114,105 2560 data 110,116,101,114,32,98,117,102,102,101 2570 data 114,32,105,110,115,116,97,108,108,101 2580 data 100,46,13,10,0,13,10,80,114,101 2590 data 115,115,32,97,110,121,32,107,101,121 2600 data 32,116,111,32,101,120,105,116,46,0 2610 data 0,0,0,0,0,6,14,14,10,22 2620 data 14,22,34,14,18,14,14,6,52,6 2630 data 46,58,30,20,14,6,18,6,18,6 2640 data 18,6,58,28,6,16,8,24,8,6 2650 data 16,18,8,48,8,6,22,6,10,6 2660 data 10,6,6,10,6,14,6,6,8,6 2670 data 12,28,6,20,24,6,6,8,6,12 2680 data 6,12,6,18,14,8,6,24,14,6 2690 data 6,10,6,10,0,-1 10 a#=gb:Gintin=peek(a#+8) 20 Gintout=peek(a#+12):?"Press left button" 30 for shape=0 to 7 40 poke Gintin,shape:GEMsys(78)' Display new shape 50 GEMsys(79) 'Get Mouse Status 60 if peek(Gintout+6)<>1 goto 50 ' Left Button? 70 for g=1 to 100:next ' Short Delay 80 out 2,7:next:end ' Sound bell & continue 10 Change.Mouse: 15 Poke Contrl,111:Poke Contrl+2,0:Poke Contrl+6,37 20 Restore 1000:Read Act.X,Act.Y 25 Poke Intin,Act.X ' Action point X 30 Poke Intin+2,Act.Y' Action point Y 35 Poke Intin+4,1 ' Must be 1 40 Poke Intin+6,0 ' Mask Colour 45 Poke Intin+8,1 ' Cursor Colour 50 for i%=10 to 40 step 2:Read A%:Poke Intin+i%,A%:next 55 for i%=42 to 72 step 2:Read A%:Poke Intin+i%,A%:next 60 VDIsys(1): End 65 'Lines 1000-1040 were created 70 'Using the pixel editor 1000 Data 9 , 8 1010 Data 960 , 3120 , 4104 , 8196 , 17160 , 17168 , 32800 , 32832 1020 Data 32832 , 32800 , 16400 , 16392 , 8196 , 4104 , 3120 , 960 1030 Data 0 , 960 , 4080 , 8184 , 15600 , 15584 , 32704 , 32640 1040 Data 32640 , 32704 , 16352 , 16368 , 8184 , 4080 , 960 , 0  10 rem ************************** 20 rem * * 30 rem *Ram Disc Program Creator* 40 rem * By Richard Phillips * 50 rem * (c) Atari ST User * 60 rem * * 70 rem ************************** 80 rem 90 counter = 1 100 open "R",1,"ramdisc.ttp",1 110 field #1,1 AS filedata$ 120 read data$ 130 byte = val ( data$ ) 140 if byte = -1 then goto 200 150 file$ = chr$ ( byte ) 160 lset filedata$ = file$ 170 put 1,counter 180 counter = counter + 1 190 goto 120 200 close 1 210 end 220 print "Finished" 230 rem * Program Data * 1000 data 96,26,0,0,4,180,0,0,0,0 1010 data 0,0,0,0,0,0,0,0,0,0 1020 data 0,0,0,0,0,0,0,0,44,111 1030 data 0,4,72,121,0,0,3,126,63,60 1040 data 0,9,78,65,92,143,72,121,0,0 1050 data 0,130,63,60,0,38,78,78,92,143 1060 data 74,121,0,0,3,112,106,0,0,20 1070 data 72,121,0,0,4,126,63,60,0,9 1080 data 78,65,92,143,96,0,0,20,97,0 1090 data 1,240,72,121,0,0,4,103,63,60 1100 data 0,9,78,65,92,143,72,121,0,0 1110 data 4,152,63,60,0,9,78,65,92,143 1120 data 63,60,0,7,78,65,84,143,74,121 1130 data 0,0,3,112,107,0,0,16,66,103 1140 data 47,60,0,0,3,126,63,60,0,49 1150 data 78,65,63,60,0,0,78,65,97,0 1160 data 0,56,74,121,0,0,3,112,107,0 1170 data 0,44,97,0,0,108,74,121,0,0 1180 data 3,112,107,0,0,30,97,0,1,88 1190 data 74,121,0,0,3,112,107,0,0,16 1200 data 97,0,1,144,97,0,1,222,8,248 1210 data 0,3,4,197,78,117,32,46,0,12 1220 data 208,174,0,20,208,174,0,28,6,128 1230 data 0,0,1,0,47,0,47,14,66,103 1240 data 63,60,0,74,78,65,223,252,0,0 1250 data 0,12,74,128,102,0,0,4,78,117 1260 data 83,121,0,0,3,112,72,121,0,0 1270 data 4,50,63,60,0,9,78,65,92,143 1280 data 78,117,65,238,0,129,74,16,103,0 1290 data 0,146,12,24,0,32,103,250,83,136 1300 data 12,16,0,32,111,0,0,154,34,72 1310 data 35,200,0,0,3,122,66,128,12,17 1320 data 0,32,110,0,0,8,66,17,96,0 1330 data 0,22,12,17,0,48,109,0,0,122 1340 data 12,25,0,57,110,0,0,114,82,128 1350 data 96,222,12,0,0,2,109,0,0,126 1360 data 12,0,0,4,110,0,0,142,32,57 1370 data 0,0,3,118,192,252,0,10,18,24 1380 data 4,1,0,48,208,129,74,16,102,240 1390 data 6,128,0,0,0,9,34,60,0,0 1400 data 0,10,227,160,35,192,0,0,3,118 1410 data 47,60,255,255,255,255,63,60,0,72 1420 data 78,65,92,143,176,185,0,0,3,118 1430 data 109,0,0,76,78,117,4,121,0,1 1440 data 0,0,3,112,72,121,0,0,3,191 1450 data 63,60,0,9,78,65,92,143,78,117 1460 data 4,121,0,1,0,0,3,112,72,121 1470 data 0,0,3,221,63,60,0,9,78,65 1480 data 92,143,78,117,4,121,0,1,0,0 1490 data 3,112,72,121,0,0,4,0,63,60 1500 data 0,9,78,65,92,143,78,117,4,121 1510 data 0,1,0,0,3,112,72,121,0,0 1520 data 4,26,63,60,0,9,78,65,92,143 1530 data 78,117,47,57,0,0,3,118,63,60 1540 data 0,72,78,65,92,143,12,128,0,0 1550 data 0,0,99,0,0,10,35,192,0,0 1560 data 3,114,78,117,83,121,0,0,3,112 1570 data 72,121,0,0,4,74,63,60,0,9 1580 data 78,65,92,143,78,117,47,57,0,0 1590 data 3,122,63,60,0,9,78,65,92,143 1600 data 78,117,66,103,63,60,0,2,47,60 1610 data 1,0,0,0,47,57,0,0,3,114 1620 data 63,60,0,18,78,78,79,239,0,14 1630 data 32,121,0,0,3,114,32,57,0,0 1640 data 3,118,34,60,0,0,0,11,226,160 1650 data 65,232,0,19,16,192,224,8,16,128 1660 data 32,57,0,0,3,118,83,129,226,160 1670 data 4,128,0,0,0,9,51,192,0,0 1680 data 3,82,78,117,35,248,4,114,0,0 1690 data 3,100,35,248,4,118,0,0,3,104 1700 data 35,248,4,126,0,0,3,108,33,252 1710 data 0,0,2,194,4,114,33,252,0,0 1720 data 2,220,4,118,33,252,0,0,3,46 1730 data 4,126,78,117,12,111,0,3,0,4 1740 data 103,0,0,10,47,57,0,0,3,100 1750 data 78,117,32,60,0,0,3,68,78,117 1760 data 12,111,0,3,0,14,103,0,0,10 1770 data 47,57,0,0,3,104,78,117,48,47 1780 data 0,12,34,60,0,0,0,9,227,160 1790 data 208,185,0,0,3,114,32,64,34,111 1800 data 0,6,50,47,0,10,4,65,0,1 1810 data 8,47,0,0,0,5,103,0,0,4 1820 data 193,73,32,60,0,0,0,127,34,216 1830 data 81,200,255,252,81,201,255,242,66,128 1840 data 78,117,12,111,0,3,0,4,103,0 1850 data 0,10,47,57,0,0,3,108,78,117 1860 data 66,128,78,117,2,0,0,2,4,0 1870 data 0,7,0,5,0,6,0,18,0,0 1880 data 0,0,0,0,0,0,0,0,0,0 1890 data 0,0,0,0,0,0,0,0,0,0 1900 data 0,0,0,0,0,0,0,0,0,0 1910 data 0,0,0,0,0,0,0,0,0,0 1920 data 0,0,65,116,97,114,105,32,83,84 1930 data 32,83,97,102,101,32,82,97,109,100 1940 data 105,115,107,46,13,10,40,99,41,32 1950 data 67,111,112,121,114,105,103,104,116,32 1960 data 49,57,56,55,32,82,105,99,104,97 1970 data 114,100,32,80,104,105,108,108,105,112 1980 data 115,46,13,10,13,10,0,117,115,97 1990 data 103,101,32,58,32,114,97,109,100,105 2000 data 115,107,46,116,116,112,32,60,115,105 2010 data 122,101,62,46,13,10,0,69,114,114 2020 data 111,114,32,105,110,32,99,111,109,109 2030 data 97,110,100,32,108,105,110,101,32,112 2040 data 97,114,97,109,101,116,101,114,46,13 2050 data 10,0,82,97,109,100,105,115,107,32 2060 data 115,105,122,101,32,116,111,111,32,115 2070 data 109,97,108,108,46,13,10,0,82,97 2080 data 109,100,105,115,107,32,115,105,122,101 2090 data 32,116,111,111,32,98,105,103,46,13 2100 data 10,0,67,97,110,39,116,32,114,101 2110 data 108,101,97,115,101,32,109,101,109,111 2120 data 114,121,46,13,10,0,69,114,114,111 2130 data 114,32,105,110,32,109,101,111,114,121 2140 data 32,97,108,108,111,99,97,116,105,111 2150 data 110,46,13,10,0,75,32,82,97,109 2160 data 100,105,115,107,32,105,110,115,116,97 2170 data 108,108,101,100,46,13,10,0,13,10 2180 data 78,111,32,82,97,109,100,105,115,107 2190 data 32,105,110,115,116,97,108,108,101,100 2200 data 46,13,10,0,13,10,80,114,101,115 2210 data 115,32,97,110,121,32,107,101,121,32 2220 data 116,111,32,101,120,105,116,46,13,10 2230 data 0,0,0,0,0,6,14,14,10,22 2240 data 14,22,34,14,14,70,6,44,58,36 2250 data 20,14,6,18,6,18,6,18,6,16 2260 data 24,8,6,16,28,16,6,24,16,10 2270 data 8,8,6,8,8,20,8,18,20,62 2280 data 0,-1 . II.. I EM H =IKEM1 C AIMEM2 C CIO. 9IJ.. 9I EM H KIQ0EMPROG C NIR/* GEM Include file version 1.3 written in MEGAMAX C */ /* Defines */ #define NAME 0x001 #define WORKAREA 1 #define TOTALAREA 0 /* Define for Lattice C */ /* #define int short */ /* #define ADDR(a) ((long)a)>>16,((long)a)&0xffff */ /* GEM Arrays */ int contrl[12]; int intin[128]; int ptsin[128]; int intout[128]; int ptsout[128]; /* Working Storage */ int handle,char_height,char_width,cell_height,cell_width; int work_in[11],work_out[57]; gem_on() { /* Define loop counter I */ int I; /* Tell GEM we wish to install another application */ appl_init(); /* Get Device Number for screen */ handle=graf_handle(&char_height,&char_width,&cell_height,&cell_width); /* Load work_in array with appropriate values */ for(I=0;I<10;I++) work_in[I]=1; work_in[10]=2; /* Find out screen resolution and return the screen identifier to be */ /* used in this application */ v_opnvwk(work_in,&handle,work_out); } gem_off() { /* Inform GEM that we don't need the screen identifier any more */ v_clsvwk(handle); /* Tell GEM we are exiting from our program */ appl_exit(); } at(x,y,string) /* define x,y coordinates */ int x,y; /* string is a pointer to a string of characters */ char *string; { /* Call VDI */ v_gtext(handle,x,y,string); } int click() { int button,x,y; button=0; while (button==0) vq_mouse(handle,&button,&x,&y); return(button); } /* Figure 1a */ /* Include Files */ #include #include #define INFO 0x010 /* Global Arrays */ int windo[8],wx[8],wy[8],ww[8],wh[8],dummy[4]; int x,y,h,w; int s; char inf[]="Information Line"; main() { gem_on(); s=wind_get(0,4,&x,&y,&w,&h); wx[1]=x;wy[1]=y; ww[1]=w;wh[1]=h; windo[1]=windopen(1,"Title"); redraw(1); s=click(); windclose(1); gem_off(); } windopen(n,title) int n; char *title; { int wr,whandle; int xs,ys,ws,hs; /* Calculate exterior size of the window */ wr=wind_calc(WORKAREA,0xfff,wx[n],wy[n],ww[n],wh[n],&xs,&ys,&ws,&hs); /* Create a window */ whandle=wind_create(0xfff,wx[n],wy[n],ww[n],wh[n]); /* Test for success */ if (whandle<0) return (0); /* Set title */ wr=wind_set(whandle,2,title,0,0); wr=wind_set(whandle,3,inf,0,0); /* Open window */ wr=wind_open(whandle,wx[n],wy[n],ww[n],wh[n]); /* Save size of working area */ wx[n]=xs;wy[n]=ys;ww[n]=ws;wh[n]=hs; /* Return window handle */ return (whandle); } windclose(w) int w; { int wr,h; /* Get handle from global array */ h=windo[w]; /* Close window */ wr=wind_close(h); /* Delete window from memory */ wr=wind_delete(h); } clearw(n) int n; { int coord[4]; coord[0]=wx[n];coord[1]=wy[n]; coord[2]=wx[n]+ww[n]-1;coord[3]=wy[n]+wh[n]-1; vsf_color(handle,0); vr_recfl(handle,coord); } wclip(w) int w; { int coord[4]; coord[0]=wx[w];coord[1]=wy[w]; coord[2]=wx[w]+ww[w]-1;coord[3]=wy[w]+wh[w]-1; vs_clip(handle,1,coord); } redraw(w) int w; { clearw(w); /* Clear window */ /* Draw circle */ vsf_color(handle,1); v_circle(handle,wx[w]+ww[w]/2,wy[w]+wh[w]/2,work_out[1]/2); } /* Figure 1b */ /* Include Files */ #include #include #define INFO 0x010 /* Global Arrays */ int windo[8],wx[8],wy[8],ww[8],wh[8],dummy[4]; int x,y,h,w; int s; char inf[]="Information Line"; main() { gem_on(); s=wind_get(0,4,&x,&y,&w,&h); wx[1]=x;wy[1]=y; ww[1]=w;wh[1]=h; windo[1]=windopen(1,"Title"); wclip(1); redraw(1); s=click(); vs_clip(handle,0,dummy); windclose(1); gem_off(); } windopen(n,title) int n; char *title; { int wr,whandle; int xs,ys,ws,hs; /* Calculate exterior size of the window */ wr=wind_calc(WORKAREA,0xfff,wx[n],wy[n],ww[n],wh[n],&xs,&ys,&ws,&hs); /* Create a window */ whandle=wind_create(0xfff,wx[n],wy[n],ww[n],wh[n]); /* Test for success */ if (whandle<0) return (0); /* Set title */ wr=wind_set(whandle,2,title,0,0); wr=wind_set(whandle,3,inf,0,0); /* Open window */ wr=wind_open(whandle,wx[n],wy[n],ww[n],wh[n]); /* Save size of working area */ wx[n]=xs;wy[n]=ys;ww[n]=ws;wh[n]=hs; /* Return window handle */ return (whandle); } windclose(w) int w; { int wr,h; /* Get handle from global array */ h=windo[w]; /* Close window */ wr=wind_close(h); /* Delete window from memory */ wr=wind_delete(h); } clearw(n) int n; { int coord[4]; coord[0]=wx[n];coord[1]=wy[n]; coord[2]=wx[n]+ww[n]-1;coord[3]=wy[n]+wh[n]-1; vsf_color(handle,0); vr_recfl(handle,coord); } wclip(w) int w; { int coord[4]; coord[0]=wx[w];coord[1]=wy[w]; coord[2]=wx[w]+ww[w]-1;coord[3]=wy[w]+wh[w]-1; vs_clip(handle,1,coord); } redraw(w) int w; { clearw(w); /* Clear window */ /* Draw circle */ vsf_color(handle,1); v_circle(handle,wx[w]+ww[w]/2,wy[w]+wh[w]/2,work_out[1]/2); } /* Gem Include file */ #define cls v_clrwk(handle) #define mypattern vsf_udpat #define solid 1 #define dotted 2 #define lined 3 #define user 4 /* Define for Lattice C */ /* #define int short */ int contrl[12],intin[128],ptsin[128]; int intout[128],ptsout[128]; int handle,ch,cw,bh,bw; int work_in[11],work_out[57]; gem_on() { int I; appl_init(); handle=graf_handle(&ch,&cw,&bh,&bw); for(I=0;I<10;I++) work_in[I]=1; work_in[10]=2; v_opnvwk(work_in,&handle,work_out); } gem_off() { v_clsvwk(handle); appl_exit(); } at(x,y,string) int x,y; char string[]; { v_gtext(handle,x,y,string); } fill_style(type,index,col) int type,index,col; { int s; s=vsf_interior(handle,type); s=vsf_style(handle,index); s=vsf_color(handle,col); } /* Gem polyline functions */ #include #include int coord[16]; int maxx,maxy,minx,miny; int x,y; /* Fill patterns */ int stuser_pattern[]={0,7998,4104,4104, 7944,264,264,7944,0,22391,21573,21621, 22342,20805,30581,0}; int st_pattern[]={0,0,32510,16400, 16400,16400,16400,32272,528,528,528,528, 32272,0,0,65535}; int square_pattern[]={65535,65535,32769,32769, 32769,32769,32769,32769,32769,32769, 32769,32769,32769,32769,65535,65535}; int pattern[]={32769,16386,8196,4104, 2064,1056,576,384,384,576,1056,2064, 4104,8196,16386,32769}; main() { gem_on(); cls; /* Get size difference between low res & current screen */ minx=319;miny=199; maxx=work_out[0];maxy=work_out[1]; x=(maxx-minx)/2; y=(maxy-miny)/2; /* Get x and y */ at(50+x,15,"Example of the POLYLINE function"); triangle(160,50,310,150,10,150); key(); cls; at(50+x,15,"Example of a filled POLYGON"); quad(160,50,310,100,160,150,10,100); key(); at(50+x,15,"User Defined Fill Patterns "); fill_style(user,0,1); mypattern(handle,square_pattern,1); quad(160,50,310,100,160,150,10,100); key(); mypattern(handle,st_pattern,1); quad(160,50,310,100,160,150,10,100); key(); mypattern(handle,stuser_pattern,1); quad(160,50,310,100,160,150,10,100); gem_off(); key(); } triangle(x1,y1,x2,y2,x3,y3) /* Draws an unfilled triangle */ int x1,y1,x2,y2,x3,y3; { /* Set coord array to corner points */ coord[0]=x1+x;coord[1]=y1+y; coord[2]=x2+x;coord[3]=y2+y; coord[4]=x3+x;coord[5]=y3+y; /* Set last coordinate to start of triangle */ coord[6]=x1+x;coord[7]=y1+y; /* Call the VDI polyline function */ v_pline(handle,4,coord); } quad(x1,y1,x2,y2,x3,y3,x4,y4) /* Draws a filled four sided object eg. diamond */ int x1,y1,x2,y2,x3,y3,x4,y4; { /* Load coord array */ coord[0]=x1+x;coord[1]=y1+y; coord[2]=x2+x;coord[3]=y2+y; coord[4]=x3+x;coord[5]=y3+y; coord[6]=x4+x;coord[7]=y4+y; /* Close polygon */ coord[8]=x1+x;coord[9]=y1+y; /* Call v_fillarea with 5 pairs of coordinates */ v_fillarea(handle,5,coord)+y; } key() { int c; /* Input a key press and return */ at(100+x,192+y,"Press "); c=getchar(); } move.l d0,d1 ;save time & date tst.b tdflag ;which do we want? beq get_d ;only the date lsr.w #5,d1 ;shift secs off end move.w d1,d0 ;into work register andi.w #$3f,d0 ;only the minutes move.w d0,mins lsr.w #6,d1 ;shift the mins away cmpi.w #12,d1 ;see if afternoon sge ampm ;set am/pm blt savehrs subi.w #12,d1 ;12 hour clock savehrs tst.w d1 ;zero hours? bne save1 ;no... moveq #12,d1 ;yes, so make 12 save1 move.w d1,hours rts ;go home * This part dissects the date get_d swap d1 ;date to low word move.w d1,d0 ;date to d0 move.l #23,d2 ;d of w calc andi.w #$1f,d0 ;only day of month move.w d0,day add.w d0,d2 ;d of w calc move.w d1,d0 ;restore date lsr.w #8,d0 ;get year in d0 lsr.w #1,d0 add.w #80,d0 ;real year move.w d0,year lsr.w #5,d1 ;shift day in month andi.w #$0f,d1 ;only the month move.w d1,d3 ;for d of w calc cmpi.w #2,d3 ;is it Jan or Feb? bhi notjf ;no subq #1,d0 ;fiddle year add.w #10,d3 ;and month bra jf ;continue notjf subq #2,d3 ;adjust month jf add.w d0,d2 ;add year to d of w lsr.w #2,d0 ;get year/4 add.w d0,d2 ;and add to d of w muls #26,d3 ;int(month*2.6-0.2) subq #2,d3 divs #10,d3 add.w d3,d2 ;add to d of w calc * we want month offset to add to base * of month name offset table subq #1,d1 ;0-11 lsl.w #1,d1 ;x2 lea montab,a3 ;base adda.w monoff(pc,d1.w),a3 ;pointer move.l a3,month * get pointer for the day of week divs #7,d2 ;mod 7 swap d2 ;remainder lsl.w #1,d2 ;offset lea dofwtab,a3 ;base adda.w dofwoff(pc,d2.w),a3 ;pointer move.l a3,dofw rts * offsets into day+ month name tables dofwoff: dc.w 0,9,16,23,31,41,50 monoff: dc.w 0,8,17,23,29,33,38 dc.w 43,50,60,68,77 * Write date/time * uses: d1, d3, d4, a3 * calls: outchar, outdec, outstr show_td tst.b tdflag ;which do we do? beq show_d ;the date move.w hours(pc),d3 ;hours first moveq #1,d1 ;no leading zero bsr outdec ;write hours moveq #COLON,d3 bsr outchar ;delimiter move.w mins(pc),d3 moveq #0,d1 ;leading zero bsr outdec ;write minutes lea amstr(pc),a3 ;assume morning tst.b ampm ;is it? beq morning ;yup addq #3,a3 morning bra outstr ;write it show_d movea.l dofw(pc),a3 ;pointer to day bsr outstr moveq #SPACE,d3 ;delimiter bsr outchar moveq #1,d1 ;no leading zero move.w day(pc),d3 bsr outdec ;show date lea thstr(pc),a3 ;assume "th" cmpi.w #1,d4 ;date 10..19? beq use_th ;yes swap d4 ;get date mod 10 tst.w d4 ;zero? beq use_th ;yes cmpi.w #4,d4 ;or >=4? bge use_th ;yup lsl.w #2,d4 ;offset adda.w d4,a3 ;appropriate suffix use_th bsr outstr movea.l month,a3 ;month name bsr outstr ;show it lea centstr(pc),a3 ;assume 20th bsr outstr move.w year(pc),d3 ;get year moveq #0,d1 ;leading 0 bra outdec ;returns * outdec - output 2-digit decimal num * entry:d1.w: if 0, write leading 0 * d3.w: number * uses: d3, d4, calls: outchar * exit: d4: num div 10 in bottom word * num mod 10 in top word outdec: andi.l #$FFFF,d3 ;clear upper .W divs #10,d3 ;separate digits move.l d3,d4 ;save for return tst.w d1 ;test the flag beq firstdig ;leading 0 tst.w d3 ;is it 0? beq outdec1 ;only 2nd digit firstdig addi.b #'0',d3 ;convrt to ASCII bsr outchar ;out 1st digit outdec1 swap d3 ;remainder addi.b #'0',d3 ;cvrt to ASCII bra outchar ;return * output a string * entry: a3: string address * uses: d3, calls: outchar outstr: move.b (a3)+,d3 ;next character beq outback ;done bsr outchar ;write it bra outstr ;carry on outback rts * Output a character * entry: d3.b: the character * a4: argument list * uses: none, calls: none outchar move.w d3,-(sp) ;the char move.w 2(a4),-(sp) ;device move.w #BCONOUT,-(sp) ;func code lea chret(pc),a0 ;return addr move.l a0,-(sp) ;onto stack move sr,-(sp) ;like trap move.l savetrap(pc),a0 ;where to go jmp (a0) chret addq #6,sp ;tidy stack rts * data areas: first the bss, then * the various tables and strings savetrap: ds.l 1 ;save trap13 vec tdflag: ds.b 1 ;time or date? mins: ds.w 1 ;time values hours: ds.w 1 ampm: ds.w 1 dofw: ds.l 1 ;date values day: ds.w 1 month: ds.l 1 year: ds.w 1 dofwtab: dc.b 'Saturday',0,'Sunday',0 dc.b 'Monday',0,'Tuesday',0 dc.b 'Wednesday',0 dc.b 'Thursday',0,'Friday',0 montab: dc.b 'January',0,'February',0 dc.b 'March',0,'April',0 dc.b 'May',0,'June',0 dc.b 'July',0,'August',0 dc.b 'September',0 dc.b 'October',0,'November',0 dc.b 'December',0 amstr: dc.b 'am',0,'pm',0 thstr: dc.b 'th ',0,'st ',0,'nd ',0 dc.b 'rd ',0 centstr: dc.b ' 19',0 onoff: dc.b $FF EVEN \Light-Cycles \By C. Newcombe \(c) Atari ST User \To enable mouse and key repeat \type POKE $484,2:OUT 4,8 \in immediate mode IF SCREENMODE THEN PRINT"Low-res only":END TXTRECT 0,0,320,200:GRAFRECT 0,0,320,192:FILLCOL 3:FILLSTYLE 1,0 RESTORE cols:FOR n=0 TO 15:READ r,g,b:SETCOL n,r,g,b:NEXT RESERVE snds%,64:RESTORE snds:FOR n=0 TO 63:READ ?(snds%+n):NEXT:cr%=snds%:bng%=snds%+28 DIM ex_crds&(15,4) p_1_x&=0:p_1_y&=0:p_2_x&=0:p_2_y&=0:joy_x&=0:joy_y&=0:p_2_dx&=0:p_2_dy&=0 INK 0:CLS:PROCassm:CALL ptch_joy%:OUT 4,$12:OUT 4,$15::CALL set_uppr%:POKE $484,0 HIDEMOUSE:CLS:INK 3:PRINT TAB(13,2)"Light-Cycles" INK 1:PRINT TAB(4,6)"Player ";:INK 2:PRINT;1;:INK 1:PRINT" use keys A, Z, < and >" PRINT TAB(4,8)"Player ";:INK 3:PRINT;2;:INK 1:PRINT" use a joystick" INK 6:PRINT TAB(9,12)"Press ";:INK 1:PRINT "SPACE";:INK 6:PRINT " to play" REPEAT:UNTIL INKEY=32:TXTRECT 0,192,320,8 REPEAT CLS: INK 2:PRINT "Speed? (";:INK 1:PRINT "0-9";:INK 2:PRINT ") (0=Slow, 9=Fast)"; REPEAT:s$=GET$:UNTIL s$>="0" AND s$<="9":d=20*(9-VAL(s$)):PROCscr_off PRINT "Perimeter wall? (";:INK 1:PRINT "S";:INK 2:PRINT "olid/";:INK 1:PRINT "B"; INK 2:PRINT "roken/";:INK 1:PRINT "N";:INK 2:PRINT "one)"; REPEAT:w$=GET$:UNTIL w$="S" OR w$="B" OR w$="N":PROCscr_off PRINT "Obstacles? (";:INK 1:PRINT "0-9";:INK 2:PRINT ") (0=None, 9=lots)"; REPEAT:o$=GET$:UNTIL o$>="0" AND o$<="9":o=5*VAL(o$):PROCscr_off IF o<>0 THEN PRINT "Obstacle size? (";:INK 1:PRINT "1-8"; INK 2:PRINT") (1=Small, 8=Large)"; REPEAT:b$=GET$:UNTIL b$>="1" AND b$<="8":s=2*VAL(b$):s2=s/2:PROCscr_off ENDIF REPEAT CLG 0:IF o<>0 THEN LINETYPE 1:LINECOL 2:GRAFMODE 1 FOR n=1 TO o:REPEAT o_x&=ABS(((RND(11)-1)*32)-1):o_y&=ABS(((RND(7)-1)*32)-1) UNTIL POINT(o_x&,o_y&)=0 IF RND(4)=4 THEN LINE o_x&,o_y&-s TO o_x&+s,o_y&:LINE o_x&+s,o_y& TO o_x&,o_y&+s LINE o_x&,o_y&+s TO o_x&-s,o_y&:LINE o_x&-s,o_y& TO o_x&,o_y&-s ELSE LINE o_x&-s2,o_y&-s2 TO o_x&+s2,o_y&-s2:LINE o_x&+s2,o_y&-s2 TO o_x&+s2,o_y&+s2 LINE o_x&+s2,o_y&+s2 TO o_x&-s2,o_y&+s2:LINE o_x&-s2,o_y&+s2 TO o_x&-s2,o_y&-s2 ENDIF:FILL o_x&,o_y&,-1:NEXT:ENDIF IF w$<>"N" THEN IF w$="B" THEN LINETYPE RND(5)+1 ELSE LINETYPE 1 ENDIF LINECOL 6:GRAFMODE 1 LINE 0,0 TO 319,0:LINE 319,0 TO 319,191 LINE 0,191 TO 319,191:LINE 0,0 TO 0,191 ENDIF p_1_x&=48:p_1_y&=80:p_1_dx&=1:p_1_dy&=0 p_2_x&=319-48:p_2_y&=80:joy_x&=-1:joy_y&=0 PROCdia(p_1_x&,p_1_y&):CALL p_1_plt% PROCdia(p_2_x&,p_2_y&):CALL p_2_plt% OUT 4,$14:REPEAT CALL drw_cycls%:FOR n=0 TO d:NEXT k=INKEY:IF k<>-1 THEN SWITCH k CASE 65:p_1_dx&=0:p_1_dy&=-1 CASE 90:p_1_dx&=0:p_1_dy&=1 CASE 44:p_1_dx&=-1:p_1_dy&=0 CASE 46:p_1_dx&=1:p_1_dy&=0 ENDSWITCH ENDIF p_1_x&=(p_1_x&+p_1_dx&) MOD 320:IF p_1_x&<0 THEN p_1_x&=319 p_1_y&=(p_1_y&+p_1_dy&) MOD 192:IF p_1_y&<0 THEN p_1_y&=191 CALL sntch_joy%:p_2_x&=(p_2_x&+p_2_dx&) MOD 320:IF p_2_x&<0 THEN p_2_x&=319 p_2_y&=(p_2_y&+p_2_dy&) MOD 192:IF p_2_y&<0 THEN p_2_y&=191 UNTIL USR pnt_cycls%<>0 OR (p_1_x&=p_2_x& AND p_1_y&=p_2_y&) OUT 4,$15:IF USR p_1_pnt%=0 AND USR p_2_pnt%<>0 THEN INK 1:PRINT " ----------- ";:PRINT "Player ";:INK 2:PRINT "1";:INK 1:PRINT " wins. -----------";:PROCexp(2) ELSE IF USR p_1_pnt%<>0 AND USR p_2_pnt%=0 THEN INK 1:PRINT " ----------- ";:PRINT "Player ";:INK 3:PRINT "2";:INK 1:PRINT " wins. -----------";:PROCexp(1) ELSE INK 1:PRINT " --------- Both players lose. ---------";:PROCexp(3) ENDIF:ENDIF:PROCscr_off INK 1:PRINT "SPACE";:INK 2:PRINT " to play,"; INK 1:PRINT "RETURN";:INK 2:PRINT " to change game"; REPEAT:k=INKEY:UNTIL k=32 OR k=13:PROCscr_off UNTIL k<>32:UNTIL FALSE DEFPROCassm RESERVE c%,5*1024 FOR p=1 TO 2 [ OPT p,"L-" ORG c% p_1_plt% MOVE.W @p_1_x&,D0 MOVE.W @p_1_y&,D1 MOVE.L #$FFFF0000,D7 BRA do_plt% p_2_plt% MOVE.W @p_2_x&,D0 MOVE.W @p_2_y&,D1 MOVE.L #$FFFF,D7 BRA do_plt% drw_cycls% MOVE.W @p_1_x&,D0 MOVE.W @p_1_y&,D1 MOVE.L #$FFFF0000,D7 BSR do_plt% MOVE.W @p_2_x&,D0 MOVE.W @p_2_y&,D1 MOVE.L #$FFFF,D7 do_plt% BSR calc_addr% MOVE.L #msks%,A1 AND.W #$F,D2 LSL.W #2,D2 MOVE.L 0(A1,D2.W),D0 AND.L D0,D7 NOT.L D0 AND.L D0,(A0)