$! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_VERIFY"))' $! $! This archive created by VMS_SHARE Version 7.2-007 22-FEB-1990 $! On 17-JUN-1993 22:04:20.03 By user MASMUMMY $! $! This VMS_SHARE Written by: $! Andy Harper, Kings College London UK $! $! Acknowledgements to: $! James Gray - Original VMS_SHARE $! Michael Bednarek - Original Concept and implementation $! $!+ THIS PACKAGE DISTRIBUTED IN 8 PARTS, TO KEEP EACH PART $! BELOW 30 BLOCKS $! $! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER $! AND EXECUTE AS A COMMAND PROCEDURE ( @name ) $! $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING: $! 1. AAAREADME.TXT;1 $! 2. BATTLE.FOR;1 $! 3. BATTLE.INC;1 $! 4. BATTLESHIP_MAINT.FOR;1 $! 5. BATTLESHIP_TIMES.DAT;1 $! 6. BATTLE_ARRAY.INC;1 $! 7. BUILD.COM;1 $! 8. COMLINK.FOR;1 $! 9. LOGGER.FOR;1 $! 10. SCREEN1.FOR;1 $! 11. SCREEN2.FOR;1 $! 12. SYSTEM.FOR;1 $! 13. TIME.FOR;1 $! $set="set" $set symbol/scope=(nolocal,noglobal) $f=f$parse("SHARE_TEMP","SYS$SCRATCH:.TMP_"+f$getjpi("","PID")) $e="write sys$error ""%UNPACK"", " $w="write sys$output ""%UNPACK"", " $ if f$trnlnm("SHARE_LOG") then $ w = "!" $ ve=f$getsyi("version") $ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto START $ e "-E-OLDVER, Must run at least VMS 4.4" $ v=f$verify(v) $ exit 44 $UNPACK: SUBROUTINE ! P1=filename, P2=checksum $ if f$search(P1) .eqs. "" then $ goto file_absent $ e "-W-EXISTS, File ''P1' exists. Skipped." $ delete 'f'* $ exit $file_absent: $ if f$parse(P1) .nes. "" then $ goto dirok $ dn=f$parse(P1,,,"DIRECTORY") $ w "-I-CREDIR, Creating directory ''dn'." $ create/dir 'dn' $ if $status then $ goto dirok $ e "-E-CREDIRFAIL, Unable to create ''dn'. File skipped." $ delete 'f'* $ exit $dirok: $ w "-I-PROCESS, Processing file ''P1'." $ if .not. f$verify() then $ define/user sys$output nl: $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT 'f'/OUT='P1' PROCEDURE Unpacker ON_ERROR ENDON_ERROR;SET(FACILITY_NAME,"UNPACK");SET( SUCCESS,OFF);SET(INFORMATIONAL,OFF);f:=GET_INFO(COMMAND_LINE,"file_name");b:= CREATE_BUFFER(f,f);p:=SPAN(" ")@r&LINE_END;POSITION(BEGINNING_OF(b)); LOOP EXITIF SEARCH(p,FORWARD)=0;POSITION(r);ERASE(r);ENDLOOP;POSITION( BEGINNING_OF(b));g:=0;LOOP EXITIF MARK(NONE)=END_OF(b);x:=ERASE_CHARACTER(1); IF g=0 THEN IF x="X" THEN MOVE_VERTICAL(1);ENDIF;IF x="V" THEN APPEND_LINE; MOVE_HORIZONTAL(-CURRENT_OFFSET);MOVE_VERTICAL(1);ENDIF;IF x="+" THEN g:=1; ERASE_LINE;ENDIF;ELSE IF x="-" THEN IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+")= 1 THEN g:=0;ENDIF;ENDIF;ERASE_LINE;ENDIF;ENDLOOP;t:="0123456789ABCDEF"; POSITION(BEGINNING_OF(b));LOOP r:=SEARCH("`",FORWARD);EXITIF r=0;POSITION(r); ERASE(r);x1:=INDEX(t,ERASE_CHARACTER(1))-1;x2:=INDEX(t,ERASE_CHARACTER(1))-1; COPY_TEXT(ASCII(16*x1+x2));ENDLOOP;WRITE_FILE(b,GET_INFO(COMMAND_LINE, "output_file"));ENDPROCEDURE;Unpacker;QUIT; $ delete/nolog 'f'* $ CHECKSUM 'P1' $ IF CHECKSUM$CHECKSUM .eqs. P2 THEN $ EXIT $ e "-E-CHKSMFAIL, Checksum of ''P1' failed." $ ENDSUBROUTINE $START: $ create 'f' X VMS BATTLESHIP V1.0 X =================== X Written by Ray Renteria X RR02026@SWTEXAS X or X ACM_CSA@SWTEXAS X Southwest Texas State University X August 30, 1989 X Copyright(C) 1989 IRONLOGIC(tm) X all rights reserved X X X Included in this ZOO file: X ========================== X X AAAREADME.TXT - this file X X Executables ------------------------------ X X BATTLE.EXE - the game itself X BATTLESHIP_MAINT.EXE - maintenance program to view/control X users who have played the game. X X Source ------------------------------ X (See headers within the files for descriptions) X X BATTLE.FOR `20 X BATTLE.INC `20 X BATTLESHIP_MAINT.FOR X BATTLE_ARRAY.INC X COMLINK.FOR X LOGGER.FOR X SCREEN1.FOR X SCREEN2.FOR X SYSTEM.FOR X TIME.FOR X X Data files ------------------------------ X X BATTLESHIP_NYSSA.DAT - Sample mailbox exchange file`20 X BATTLESHIP_TEGAN.DAT - Sample mailbox exchange file X BATTLESHIP_TIMES.DAT - Scheduled times of allowed playing X BATTLESHIP_UAF.DAT - Battleship User Authorization File X X BATTLESHIP_MAINT: X ================= X To set it up: X X $ RUN BATTLESHIP_MAINT X BATTLESHIP-MAINT> INITIALIZE X Enter the name of the node you wish to install X and press `5Breturn`5D. Press `5Breturn`5D on an empty X prompt when you have finished all nodes. X`20 X Node: UHVAX1 X Node: ANOTHER_NODE X Node: AS_MANY_NODES_AS_YOU_WANT X Node: X `20 X For help within BATTLESHIP_MAINT, type HElp, MEnu, or ?. I have X incorporated most of the options except for scheduled times and X default flags. X X The flags are your way of controlling who gets to play the game. X They are a four character bit pattern with each bit being significant X for it's purpose.`20 X `20 X '1111' X `5E`5E`5E`5E X `7C`7C++---- these two are reserved for later use. X `7C+--- When this is one, the user is allowed to play. X +---- When this is one, the user can override the scheduled time X X Note: X Please keep in mind that I just threw in LOGGER at the last minute of X distribution and wrote BATTLESHIP_MAINT with little effort. Please feel X free to FINISH the maint routines. (just send me the updates :) ) X X After you have INITialized the database, the protection settings will X need to be as follows: X X BATTLESHIP_MAINT.EXE (none) X BATTLE.EXE W:E X BATTLESHIP_UAF.DAT W:RW X BATTLESHIP_UHVAX1.DAT W:RW X BATTLESHIP_TIMES.DAT W:RW X X BATTLE.EXE X ========== X X BATTLE is a multi-user strategy game. It uses a lot of ASTs and requires V`20 X the TMPMBX priv. It exchanges mailbox names with the opponent via the`20 X BATTLESHIP_node.DAT file - and the rest is done in system memory. X X An operator may decide the times users can play the game and even restric Vt X problem users via BATTLESHIP_MAINT.EXE. X X X Object: X ====== X To destroy the opponent's ships before he destroys yours. `20 X `20 X Waiting for opponent: X ==================== X Upon execution of BATTLE, your process will be hibernated until an X opponent on the same node RUNs BATTLE. If you press `5EC during this X time, you will be gracefully escorted to DCL. X X X Setting up: X ========== X Initially, you will set up your ships by: X X 1. Pressing the first character of the ship you wish to X place then X 2. move your arrows left, right, up or down to place that X particular ship. You will not be allowed to make any 'L' X shaped ships. X X Before you have finished placing the ship, if you wish to relocate X it, press `5EZ and it will erase the portion of the ship you have X placed and`20 X X X Commands X ======== X `5EW refreshes the screen X `5EE sends a message to the opponent X `5EA aborts game X `5EH provides very brief help X `5EP spawn to DCL X arrows aim X `5Bspace`5D fires a torpedo X fires a torpedo X X X ---------------------------------------------------------------------- X If you find this program fun to use, or the code somewhat useful, X please send a bag of cheetos and a Dr. Pepper via eMail to: X X BITNET%"ACM_CSA@SWTEXAS" X or BITNET%"RR02026@SWTEXAS" X X Have fun! X X Ray Renteria X the MAD MEXICAN $ CALL UNPACK AAAREADME.TXT;1 1059718713 $ create 'f' X PROGRAM BATTLE XC XC BATTLESHIP XC`20 XC Written by Ray Renteria `20 XC IRONLOGIC(tm) 1989 XC ACM_CSA@SWTEXAS, RR02026@SWTEXAS XC Southwest Texas State University XC XC Comment: XC`20 XC If you get this program, please send me a brief mail message XC so that I can know who to send updates to. XC XC Disclaimer: XC XC If it crashes your system or environment, DONT BLAME ME! XC XC ShareWare note: XC XC If you find this program entertaining, or helpful with finding XC certain system service or smg routines, please send a bag of cheetos XC and a coke to ACM_CSA@SWTEXAS or RR02026@SWTEXAS. Thank you XC for your support. XC XC Known bugs: XC `20 XC * Cursor placement: During a Msg> read, if no text is on the XC command line, and the opponent moves the cursor on the screen, XC the cursor will move to and remain at the position the opponent just XC moved to. Result: Message text is entered from the middle of XC the screen. Note: 7 and 8 are reserved by SMG$ and can not XC be used (in this particular instance). XC XC `20 XC Modifications: XC XC Please send me an updated version when modification is made to this XC program. Thanks. XC XC Initials Date Description XC ---------+----------+----------------------------------------------- XC RR `7C08/30/89 `7C Corrected a problem of `5EC during a wait-for-o Vpponent XC CM `7C09/14/89 `7C Added a time flag to eliminate off hours of pla Vying XC X X LOGICAL THEY_WON X INCLUDE 'BATTLE.INC' X X CALL INIT X CALL GET_JOB_PROCESS_INFORMATION X CALL LOGUSER X X CALL DRAW_BOARD X CALL SETUP_COMLINK X X CALL DISPLAY_WHAT_WERE_DOING ( 'setting up' , 2, 4 ) X CALL DISPLAY_WHAT_THEYRE_DOING( 'setting up' , 2, 4 ) X CALL SETUP_SHIPS X X IM_FINISHED = .TRUE. X PLAYING = .TRUE. X IF ( THEYRE_FINISHED ) THEN ! They finished first V. X X CALL WRITE_TO_MAILBOX( '-' ) X CALL MESSAGE( 'Its their first move, sir.' ) X THEIR_TURN = .TRUE. X X ELSE X CALL WRITE_TO_MAILBOX( '-' ) X CALL MESSAGE( 'You get to go first, sir. They''re still'// X _ ' setting up.' ) X CALL DISPLAY_WHAT_WERE_DOING ( 'waiting... ',2,39) X GETTING_INKEY = .TRUE. ! GETTING_INKEY is for X ! AST purposes X CALL SYS$HIBER() X THEIR_TURN = .FALSE. X CALL MESSAGE( 'They''re finished setting up!' ) X X ENDIF X X X!--------------------------------------------------------------------------- V---- X! AND NOW FOR THE GAME X!--------------------------------------------------------------------------- V---- XC These are fairly self-explanatory, so I'll spare you the comments. XC X CALL SET_CURSOR( 2, 4 ) X X THEIR.SHIPS_DESTROYED = 0 X OUR.SHIPS_DESTROYED = 0 X X DO WHILE( PLAYING ) X X IF ( THEIR_TURN ) THEN X X CALL DISPLAY_WHAT_THEYRE_DOING( 'aiming to fire. ', X _ ITHEIR_ROW, ITHEIR_COL ) X CALL DISPLAY_WHAT_WERE_DOING ( 'watching their target', X _ ITHEIR_ROW, ITHEIR_COL ) X X CALL WAIT(II) X THEIR_TURN = .FALSE. X X ELSE X X CALL PURGE_TYPE_AHEAD X CALL SET_CURSOR( IOUR_ROW, IOUR_COL ) X CALL AIM_AND_FIRE(II) X THEIR_TURN = .TRUE. X X ENDIF X X END DO X X END X X INCLUDE 'SCREEN1.FOR' ! Smg stuff X INCLUDE 'SCREEN2.FOR' ! Smg stuff X INCLUDE 'SYSTEM.FOR' ! System Service stuff X INCLUDE 'COMLINK.FOR' ! Initialization stuff X INCLUDE 'LOGGER.FOR' ! Event logging stuff X INCLUDE 'TIME.FOR' ! Access times routine stuff $ CALL UNPACK BATTLE.FOR;1 373653850 $ create 'f' X! X! BATTLE.INC X! X! Contains necessary common blocks for job process (uic, process name), X! system services (mailbox, channel, etc.), and SMG$ information. X! X! Ray Renteria X! RR62C22B@SWTEXAS ACM_CSA@SWTEXAS X! Southwest Texas State University X! (512) 396 - 7216 X! X! X PARAMETER PT_STRENGTH = 2 X PARAMETER SUB_STRENGTH= 3 X PARAMETER CAR_STRENGTH= 4 X PARAMETER BAT_STRENGTH= 5 X PARAMETER CRU_STRENGTH= 3 X PARAMETER DES_STRENGTH= 4 X X COMMON /PLS/ M_GRID , X + OUR , X _ THEIR , X + WERE_FIRST , X + THEYRE_FINISHED ,`20 X _ PLAYING ,`20 X _ IM_FINISHED , X _ WE_CANCELLED_THE_GAME, X _ GETTING_INKEY , X _ WAITING_FOR_COMLINK, X _ IN_HELP `20 X COMMON /JPI/ CURRENT_IMAGE_NAME,`20 X _ IMAGE_DEFAULT_DIR , X + CURR_NODE X COMMON /SMG/ DISPID ,`20 X _ DISPID2 ,`20 X _ PASTEID ,`20 X _ KEYBID ,`20 X _ INSERT_CR , X _ ITHEIR_ROW ,`20 X _ ITHEIR_COL , `20 X _ THEIR_TURN ,`20 X _ AT_COMMAND_LINE ,`20 X _ IOUR_ROW ,`20 X _ IOUR_COL X X STRUCTURE /INFO/ X INTEGER BATTLESHIP ,`20 X _ SUBMARINE ,`20 X _ PT_BOAT , X _ DESTROYER ,`20 X _ CRUISER ,`20 X _ CARRIER , X _ MBX_CHAN ,`20 +-+-+-+-+-+-+-+- END OF PART 1 +-+-+-+-+-+-+-+-