{ Setup varibles } CONST true=-1& CONST false=0& CONST null=0& CONST CHIP=0, MAXCHIP=2 DEFINT a-z SINGLE filler,fill DIM key(20) FOR i = 0 to 20 key(i)=0 NEXT i test$="" font_height=screen(6) win_top=75 win_left=180 win_width=win_left+300 win_height=(win_top+(font_height*6)+2) gad_top=(font_height*2)+4 gad_left=34 gad_width=gad_left+232 gad_height=gad_top+4+font_height line_top=gad_top-1 line_left=gad_left-1 line_width=gad_width-12 line_height=line_top+font_height bevel_top=(font_height*2)+1 bevel_left=gad_left-6 bevel_width=gad_width-6 bevel_height=gad_height-3 { Functions } DECLARE FUNCTION _Read& LIBRARY DECLARE FUNCTION _Write LIBRARY { Includes } #INCLUDE "WBarg.h" { Quit if not called from workbench } IF NOT WBlaunched THEN GOSUB Set_Key GOTO EndIt END IF { Get icon info } theArg$ = WBargpath$(1)+WBarg$(1) call_prog$ = ToolTypeVal$(theArg$,"PROG") key_set$ = UCASE$(ToolTypeVal$(theArg$,"KEY")) quiet$ = UCASE$(ToolTypeVal$(theArg$,"QUIET")) request$ = UCASE$(ToolTypeVal$(theArg$,"REQUEST")) IF request$ = "YES" OR key_set$ = "YES" THEN quiet$ = "NO" { Open window? } IF quiet$ <> "YES" THEN WINDOW 1,"Cypher",(win_left,win_top)-(win_width,win_height),22 END IF { Is key code provided? } IF key_set$ <> "YES" THEN OPEN "I",1,"ENV:KCS" IF HANDLE(1)=null THEN GOTO EndIt INPUT #1,key_code$ CLOSE 1 ELSE LOCATE 2,12 PRINT "Enter key code."; GADGET 1,ON,"",(gad_left,gad_top)-(gad_width,gad_height),2 WHILE NOT GADGET(0) SLEEP WEND GOSUB Handle_Gadgets IF key_code$ = "" THEN GOTO EndIt IF quiet$ = "YES" THEN WINDOW CLOSE 1 END IF { Put key into array } key_length=LEN(key_code$) FOR t = 1 TO key_length key(t-1)=ASC(MID$(key_code$,t,1)) NEXT t { Is file requester needed? } IF request$ <> "YES" THEN f$ = theArg$ ELSE GOSUB Request_It IF f$ = "" THEN GOTO EndIt END IF { Main } Main: GOSUB CodeIt IF quiet$ <> "YES" THEN LINE (line_left,line_top)-(line_width,line_height),0,bf IF request$ = "YES" THEN GOSUB Request_It IF f$<>"" THEN GOTO Main ELSE GOTO EndIt END IF SYSTEM call_prog$+" "+theArg$ GOSUB CodeIt { End program } EndIt: CLOSE #1 CLS WINDOW CLOSE 1 END { Open file and read file } CodeIt: filler=0 CLEAR ALLOC IF quiet$ <> "YES" THEN BEVELBOX (bevel_left,bevel_top)-(bevel_width,bevel_height),3 END IF OPEN "I",1,f$ fh&=HANDLE(1) SIZE&=LOF(1) fill=(line_width-line_left)/SIZE& buffer&=ALLOC(SIZE&,7) IF buffer& = null OR fh& = 0 THEN GOTO EndIt bytes_in&=_Read(fh&,buffer&,SIZE&) CLOSE 1 { Is file coded? } FOR t& = buffer& TO buffer&+5 test$=test$+CHR$(PEEK(t&)) NEXT t& IF test$="Cypher" THEN coded=true start&=buffer&+6 IF quiet$ <> "YES" THEN LOCATE 2,12 PRINT "Decoding file."; END IF ELSE coded=false start&=buffer& IF quiet$ <> "YES" THEN LOCATE 2,12 PRINT "Encoding file."; END IF END IF { Code file } FOR t& = start& TO (buffer&+SIZE&) STEP key_length FOR r = 0 TO key_length IF (t&+r)<=(buffer&+SIZE&) THEN POKE t&+r,(key(r) XOR PEEK(t&+r)) END IF NEXT r IF quiet$ <> "YES" THEN LINE (line_left,line_top)-(line_left+filler,line_height),3,bf filler=filler+(fill*key_length) END IF NEXT t& { Write file } OPEN "O",1,f$ IF coded=true THEN _Write(HANDLE(1),buffer&+6,SIZE&-6) END IF IF coded=false THEN PRINT #1,"Cypher"; _Write(HANDLE(1),buffer&,SIZE&) END IF CLOSE 1 IF request$ = "YES" THEN f$="" RETURN { Call for file requester } Request_It: f$ = FILEBOX$("Select file to process.") RETURN { Set ENV: key code sequence } Set_Key: WINDOW 1,"Cypher",(win_left,win_top)-(win_width,win_height),22 LOCATE 2,12 PRINT "Enter key code."; GADGET 1,ON,"",(gad_left,gad_top)-(gad_width,gad_height),2 WHILE NOT GADGET(0) SLEEP WEND GOSUB Handle_Gadgets IF key_code$ = "" THEN GOTO EndIt OPEN "O",1,"ENV:KCS" PRINT #1,key_code$ GADGET CLOSE 1 RETURN { Gadget handler } Handle_Gadgets: id=GADGET(1) IF id=1 THEN key_code$=CSTR(GADGET(2)) GADGET CLOSE 1 RETURN