$! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_VERIFY"))' $! $! This archive created by VMS_SHARE Version 7.2-007 22-FEB-1990 $! On 6-MAY-1993 23:34:56.91 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 14 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. COMMON.H;1 $! 2. DISPLAY.BAS;1 $! 3. DISPLAY.E;1 $! 4. GAL-HELP.DAT;1 $! 5. GAL-TRADER.H;1 $! 6. GAL_TRADER4.BAS;1 $! 7. MAKEFILE.;3 $! 8. PNAME.BAS;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' Xcommon (dstatus) & X`09long scanner_id, & X`09long text_length, & X`09long new_pid, & X`09long control_id, & X`09string pname=7, & X`09long ring,ray, & X`09long keyboard_id, & X`09long io_id, & X`09long text_id, & X`09long big_id, & X`09long trade_id, & X`09long status_id, & X`09long menu_id, & X`09long row_pos,col_pos, & X`09long manual_id, & X`09long planet_id, & X`09long scanner_displayed, & X`09long scroll_ok, & X`09long error_id, & X`09long pending_error, & X`09long dpos, & X`09long denergy, & X`09long ddir, & X`09long dcredits, & X`09long dfuel, & X`09long dmissiles, & X`09long cloak, & X`09long lsj, & X`09long ecm X $ CALL UNPACK COMMON.H;1 358025503 $ create 'f' X sub display (INTEGER dmode, STRING dtext) X ! --------------------------------------------------------- X ! Subroutine Display X ! Written by: Stephan Meier 10/87 X ! --------------------------------------------------------- X ! X ! dmode is an integer specifying the display operation X ! dtext is a string containing text to be displayed X ! X ! ---------------------- Externals ------------------------ X %include "common.h" X `09%include "display.e" X X`09! ---------------------- Variables ------------------------ X declare long keycode,text_len, prompt_len X`09declare integer constant char_mask = 262144 X ! --------------------------------------------------------- X ! Perform requested operation X ! --------------------------------------------------------- X select dmode X case 1 X ! get input + return in dtext X rs=smg$erase_display(io_id,,,,) X rs=smg$set_cursor_abs(io_id,1,1) X rs=smg$put_line(io_id,dtext,,,,,,) X`09 prompt_len = len(dtext) + 1 X`09 text_len = prompt_len X`09 dtext="" X rs=smg$set_cursor_abs(io_id,1,text_len) X`09 rs=smg$read_keystroke(keyboard_id,keycode,,,io_id,,) X`09 while (keycode<>13 and text_len<40) X`09 call handle_key(keycode,dtext,text_len,prompt_len) X`09 rs=smg$read_keystroke(keyboard_id,keycode,,,io_id,,) X`09 next X dtext=edit$(dtext,152%) ! remove excess spaces, tab X`09 if pending_error = 1 then X`09 rs=smg$erase_display(error_id,,,,) X`09 pending_error = 0 X`09 end if X scroll_ok=0 X case 2 X ! set up smg environment X`09 pending_error = 0 X rs=smg$create_pasteboard(new_pid,,,,) X rs=smg$create_virtual_keyboard(keyboard_id) X rs=smg$create_virtual_display(11,58,scanner_id, & X smg$m_border,smg$m_reverse,) X`09 rs=smg$erase_pasteboard(new_pid) X rs=smg$label_border(scanner_id,"Scanner Display",,, & X smg$m_bold, smg$m_reverse) X rs=smg$create_virtual_display(11,19,control_id, & X smg$m_border,,) X rs=smg$put_line(control_id,"CONDTION:",,,,,,) X rs=smg$put_line(control_id,"LANDING COMP:",,,,,,) X rs=smg$put_line(control_id,"DAMAGE REPORT:",,,,,,) X rs=smg$put_line(control_id,"",,,,,,) X rs=smg$put_line(control_id,"",,,,,,) X rs=smg$put_line(control_id,"PLANET:",,,,,,) X rs=smg$put_line(control_id,"RING:",,,,,,) X rs=smg$put_line(control_id,"RAY:",,,,,,) X`09 rs=smg$put_line(control_id,"CLOAK:",,,,,,) X`09 rs=smg$put_line(control_id,"LSJ:",,,,,,) X`09 rs=smg$put_line(control_id,"ECM:",,,,,,) X rs=smg$label_border(control_id,"Control",,, & X smg$m_bold,) X rs=smg$create_virtual_display(1,80,status_id,,smg$m_reverse,) X rs=smg$create_virtual_display(14,78,trade_id, & X smg$m_border,,) X rs=smg$create_virtual_display(14,32,planet_id,smg$m_border,,) X rs=smg$label_border(planet_id,"Planet Info",,,smg$m_bold,) X rs=smg$create_virtual_display(5,80,text_id,,,) X rs=smg$create_virtual_display(8,80,manual_id,,,) X rs=smg$create_virtual_display(21,80,big_id,,,) X rs=smg$create_virtual_display(2,80,io_id,,,) X rs=smg$create_virtual_display(1,40,error_id,,,) X`09 rs=smg$set_out_of_band_asts(new_pid by ref,char_mask by ref, & X`09`09ast_refresh,0) X`09 rs=smg$set_broadcast_trapping(new_pid, ast_broadcast,0) X case 3 X ! display status line X k=6-len(str$(dpos)) X l=4-len(str$(denergy)) X m=4-len(str$(ddir)) X n=7-len(str$(dcredits)) X p=5-len(str$(dfuel)) X q=5-len(str$(dmissiles)) X b$=" " X if k>0 then c$=left$(b$,k) else c$="" end if X if l>0 then d$=left$(b$,l) else d$="" end if X if m>0 then e$=left$(b$,m) else e$="" end if X if n>0 then f$=left$(b$,n) else f$="" end if X a$="Pos: "+str$(dpos)+ c$+" Dir: "+str$(ddir)+e$+ & X " Energy: "+str$(denergy)+d$+" Missiles: "+str$(dmissiles)+ V & X space$(q)+" Fuel: "+str$(dfuel)+space$(p)+" Credits: "+ & X str$(dcredits)+f$ X rs=smg$set_cursor_abs(status_id,1,1) X rs=smg$put_line(status_id,a$,,,,,,) X`09 if cloak = 1 then a$="ON" else a$= "OFF" end if X rs=smg$set_cursor_abs(control_id,9,12) X rs=smg$put_line(control_id,a$,,,,,,) X`09 if lsj = 1 then a$="ON" else a$="OFF" end if X rs=smg$set_cursor_abs(control_id,10,12) X rs=smg$put_line(control_id,a$,,,,,,) X`09 if ecm = 1 then a$="ON" else a$="OFF" end if X rs=smg$set_cursor_abs(control_id,11,12) X rs=smg$put_line(control_id,a$,,,,,,) X case 4 X ! erase trading window and set cursor to home X rs=smg$erase_display(trade_id,,,,) X case 5 X ! clear menu window X rs=smg$erase_display(menu_id,,,,) X case 6 X ! print menu line X rs=smg$put_line(menu_id,dtext,,,,,,) X case 7 X ! erase big window and set cursor to home X rs=smg$erase_display(big_id,,,,) X case 8 X ! print line in big window X rs=smg$put_line(big_id,dtext,,,,,,) X case 9 X ! clear input window X rs=smg$erase_display(io_id,,,,) X case 10 X ! bring up scanner + control X scanner_displayed=1 X rs=smg$begin_pasteboard_update(new_pid) X rs=smg$erase_display(scanner_id,,,,) X rs=smg$paste_virtual_display(scanner_id,new_pid,3,2) X rs=smg$paste_virtual_display(control_id,new_pid,3,61) X rs=smg$paste_virtual_display(manual_id,new_pid,15,1) X rs=smg$unpaste_virtual_display(trade_id,new_pid) X rs=smg$end_pasteboard_update(new_pid) X case 11 X ! print line to scanner X rs= smg$put_line(scanner_id,dtext,,,,,,) X case 12 X `09 ! remove scanner and control displays X rs=smg$begin_pasteboard_update(new_pid) X rs=smg$paste_virtual_display(trade_id,new_pid,3,2) X rs=smg$unpaste_virtual_display(scanner_id,new_pid) X rs=smg$unpaste_virtual_display(control_id,new_pid) X rs=smg$unpaste_virtual_display(manual_id,new_pid) X rs=smg$erase_display(trade_id,,,,) X rs=smg$end_pasteboard_update(new_pid) X scanner_displayed=0 X case 13 X ! clear scanner X rs=smg$erase_display(scanner_id,,,,) X case 14 X ! display damage report X rs=smg$set_cursor_abs(control_id,4,1) X if dtext="ENERGY FAILING" then X rs=smg$put_line(control_id,dtext,,smg$m_blink,,,,) X else if dtext="ENERGY LOW." then X rs=smg$put_line(control_id,dtext,,smg$m_reverse,,,,) X else X rs=smg$put_line(control_id,dtext,,,,,,) X end if X end if X case 15 X ! display landing computer X rs=smg$set_cursor_abs(control_id,2,15) X rs=smg$put_line(control_id,dtext,,,,,,) X rs=smg$set_cursor_abs(control_id,6,12) X rs=smg$put_line(control_id,pname,,,,,,) X rs=smg$set_cursor_abs(control_id,7,12) X rs=smg$put_line(control_id,str$(ring),,,,,,) X rs=smg$set_cursor_abs(control_id,8,12) X rs=smg$put_line(control_id,str$(ray),,,,,,) X case 16 X ! display condtion X rs=smg$set_cursor_abs(control_id,1,15) X if dtext="RED" then X rs=smg$put_line(control_id,dtext,,smg$m_blink,,,,) X else X rs=smg$put_line(control_id,dtext,,,,,,) X end if X case 17 X ! Hit any key to continue X rs=smg$set_cursor_abs(io_id,2,1) X rs=smg$put_line(io_id,"--More--",,smg$m_reverse,,,,) X rs=smg$read_keystroke(keyboard_id,keycode,,,,,) X rs=smg$erase_display(io_id,,,,) X case 18 X ! set up normal display X rs=smg$paste_virtual_display(text_id,new_pid,18,1) X rs=smg$paste_virtual_display(trade_id,new_pid,3,2) X rs=smg$paste_virtual_display(status_id,new_pid,1,1) X case 19 X ! set up big display X rs=smg$paste_virtual_display(big_id,new_pid,2,1) X case 20 X ! remove big display X rs=smg$unpaste_virtual_display(big_id,new_pid) X case 21 X ! clear text window X rs=smg$erase_display(text_id,,,,) X rs=smg$erase_display(manual_id,,,,) X case 22 X ! set up io + error window X rs=smg$paste_virtual_display(io_id,new_pid,23,1) X rs=smg$paste_virtual_display(error_id,new_pid,23,40) X case 23 X ! print a line in text window X if scanner_displayed=0 then X rs=smg$put_line(text_id,dtext,,,,,,) X else X if scroll_ok=7 then X scroll_ok=-1 X rs=smg$set_cursor_abs(io_id,2,1) X rs=smg$put_line(io_id,"--More--"& X`09`09 ,,smg$m_reverse,,,,) X rs=smg$read_keystroke(keyboard_id,keycode,,,,,) X rs=smg$erase_display(io_id,,,,) X rs=smg$erase_display(manual_id,,,,) X end if X scroll_ok=scroll_ok+1 X rs=smg$put_line(manual_id,dtext,,,,,,) X end if X case 24 X ! print a line in trade window X rs=smg$put_line(trade_id,dtext,,,,,,) X case 25 X ! print a line in io window X rs=smg$put_line(io_id,dtext,,,,,,) X case 26 X ! read a single key X rs=smg$read_keystroke(keyboard_id,keycode,,,,,) X dtext=chr$(keycode) X case 27 X ! print text at specified position in trade window X rs=smg$put_chars(trade_id,dtext,row_pos,col_pos,,,,) X case 28 X ! display flashing title X rs=smg$put_chars(big_id,dtext,5,28,,smg$m_bold,,) X case 29 X ! bring up planet info window X rs=smg$paste_virtual_display(planet_id,new_pid,3,48) X case 30 X ! print info in planet display X rs=smg$put_line(planet_id,dtext,,,,,,) +-+-+-+-+-+-+-+- END OF PART 1 +-+-+-+-+-+-+-+-