/*
 *
 * AFM: AreaFix Manager © 1993 PSR Software
 *          Makes AreaFix calls much simpler!
 * Freeware.  May not be altered or modified without permission!
 *
 * $VER: AreaFixMan.spot 3.1
 *
 */

DETACH_SUBJECT = "So long..."

PREF = 'AreaFixMan.prefs'
FILE = 'ENV:' || PREF
FILESAVE = 'ENVARC:' || PREF
TEMP = 'T:Spot.AreaFixMan.temp'
TEMP2 = 'T:Spot.AreaFixMan.temp2'
DETACH_TEMP = 'Rexx:Spot/AreaFixMan.announce'
EDITOR = 'Ed'
LF = '0d'x

/* lines between this comment line and the next may be
   altered to taste */
EDITOR = 'Ed'
CHAR = '~'
CHARNAME = 'tilde'
/* marks end of changable program */

COUNT=0

Address SPOT
Options Results

'IsIconified'
If RC=0 Then 'UnIconify'

'IsAreaList'
If RC=0 Then Do
   'RequestNotify PROMPT "Do not use from Area List"'
   Exit
End

'GetAreaName'
REAL_NAME=Result
If ~(Left(REAL_NAME,3)='NET') Then Do
   Do Forever
      'RequestResponse PROMPT "This is not a matrix area.'LF'Do you wish to proceed?" GADGETS "_Continue|_Help|_Abort"'
      If RC=0 Then Exit
      If RC=1 Then Leave
      If RC=2 Then 'RequestNotify PROMPT "Messages to AreaFix should be in your Matrix areas.'LF'If you send it in any other area, other people may see'LF'your password and assume your identity."'
   End
End

If Open('Prefs',FILE,'r') Then Do
   FORMAT=ReadLn('Prefs')
   If ~(FORMAT='FORMAT 2.6') Then Do
      'RequestNotify TITLE "Sorry!" PROMPT "Prefs file is not compatible with this version of AFM.'LF'Delete the prefs files and set up again...Sorry!"'
      'RequestResponse TITLE "Delete?" PROMPT "Auto delete prefs files?" GADGETS "Delete|Cancel"'
      If RC=1 Then Do
         Call Close('Prefs')
         Address Command
         Delete "ENV:AreaFixMan.prefs"
         Delete "ENVARC:AreaFixMan.prefs"
         Address SPOT
         'RequestNotify PROMPT "Call AFM again now."'
         Exit
      End
      If RC=0 Then Exit
   End
   Do Until Eof('Prefs')
      DUMMY='dummy'
      AREA=Strip(ReadLn('Prefs'),'L')
      ADDRESS=Strip(ReadLn('Prefs'),'L')
      PASS=Strip(ReadLn('Prefs'),'L')
      AREAFIX=Strip(ReadLn('Prefs'),'L')

      COMMENT=Strip(ReadLn('Prefs'),'L')
      If Length(COMMENT)=0 Then Do
         COMMENT='Options'
      End
      Else Do
         ANNOUNCE=Strip(ReadLn('Prefs'),'L')
         If Length(ANNOUNCE)=0 Then Do
            ANNOUNCE='No Announce'
            DUMMY=''
         End
         Else Do
            /* Any new prefs will be inserted here */
            Do Until Length(DUMMY)=0
               DUMMY=ReadLn('Prefs')
            End
         End
      End
      If AREA=REAL_NAME Then Do
         Call Close('Prefs')
         Signal DOAF
      End
   End
   Call Close('Prefs')
   If ~Open('Prefs',FILE,'a') Then Do
      'RequestNotify PROMPT "Cannot open prefs file: 'FILE'."'
      Exit
   End
End
Else If ~Open('Prefs',FILE,'w') Then Do
   'RequestNotify PROMPT "Cannot create prefs file: 'FILE'."'
   Exit
End
Else Do
   'RequestNotify PROMPT "New prefs file has been created"'
   Call Writeln('Prefs','FORMAT 2.6')
End

'RequestString TITLE "Boss" PROMPT "Enter the address of the boss'LF'for this area.  i.e 2:253/516"'
If RC>0 Then Exit
ADDRESS=Result

'RequestString TITLE "Password" PROMPT "Enter your password for this boss."'
If RC>0 Then Exit
PASS=Result

'RequestString TITLE "AreaFix" PROMPT "Enter name of the AreaFix handler'LF'for this boss or leave unaltered." DEFAULT "Areafix"'
If RC>0 Then Exit
AREAFIX=Result

'RequestString TITLE "Comment" PROMPT "Enter optional comment or reminder for this area"'
COMMENT=Result
If Length(COMMENT)=0 Then COMMENT="Options"

'RequestResponse TITLE "Announce" PROMPT "Do you want a message sent'LF'to areas you detach from?" GADGETS "_Yes|_No"'
ANNOUNCE=RC
If ANNOUNCE=0 Then Do
   ANNOUNCE='No Announce'
End
Else Do
   ANNOUNCE='Announce'
End

/* Further prefs will be added here as they are thought of */

'RequestResponse PROMPT "You have changed the prefs." GADGETS "_Save|_Use|_Cancel"'

If ~(RC=0) Then Do
   Call WriteLn('Prefs',REAL_NAME)
   Call WriteLn('Prefs',ADDRESS)
   Call WriteLn('Prefs',PASS)
   Call WriteLn('Prefs',AREAFIX)
   Call WriteLn('Prefs',COMMENT)
   Call WriteLn('Prefs',ANNOUNCE)
   Call WriteLn('Prefs','')
   Call Close('Prefs')
   If RC=1 Then Address Command 'Copy 'FILE FILESAVE
End

DOAF:

Address Command 'Delete >NIL: "Ram:T/Spot.AreaFixMan.temp"'

If ~Open('File','RAM:T/Spot.AreaFixMan.temp','w') Then Do
   'RequestNotify PROMPT "Cannot open temporary file!"'
   Exit
End
DONOTREMOVE = Translate('ISAYABiGPaulWozHerE!.',' GNRO""IearAiFanMx--','iYBSIG.AulaPzoE!rHWe')
Do Forever

   TEXT=''
   If COUNT>0 Then Do c=1 To COUNT
      TEXT=TEXT || ENTRY.c || LF
      End

   If COUNT<15 Then Do
      If COUNT>1 Then 'RequestResponse TITLE "'COMMENT || count'" PROMPT "'TEXT'" GADGETS "_Attach|_Detach|_Erase|_Rotate|_OKAY|_CANCEL"'
      Else If COUNT=1 Then 'RequestResponse TITLE "'COMMENT'" PROMPT "'TEXT'" GADGETS "_Attach|_Detach|_Erase|_OKAY|_CANCEL"'
      Else 'RequestResponse TITLE "'COMMENT'" PROMPT "'TEXT'" GADGETS "_Attach|_Detach|_OKAY|_CANCEL"'
      End
   Else 'RequestResponse TITLE "'COMMENT'" PROMPT "'TEXT'" GADGETS "_Erase|_Rotate|_OKAY|_CANCEL"'
     
   ARC=RC
   If ARC=0 Then Exit

   If (ARC=1) & (COUNT<15)  Then Do
      arc=-1
      'RequestResponse TITLE "Attach Method" PROMPT "You may select areas via'LF'a message containing an area'LF'listing or manually." GADGETS "Manual|_Message"'
      If RC=0 Then Do
         'SaveAscii TO "'TEMP2'" OVERWRITE NOHEADER NOTEARLINE NOORIGIN NOKLUDGES NOREFLOW'
         'RequestNotify TITLE "Attach" PROMPT "Select areas by placing'LF'a 'CHARNAME' before the name'LF'of the area."'
         'WB2Front'
         Address Command '"'EDITOR'"' '"'TEMP2'"'
         'Spot2Front'
         If Open('AtFile',TEMP2,'r') Then Do
            Do While ~Eof('AtFile') & (COUNT<14)
               LINE=ReadLn('AtFile')
               P=Pos(CHAR,LINE)                                       
               If P>0 Then Do
                  LINE=Right(LINE,Length(LINE)-P)
                  COUNT=COUNT+1
                  ENTRY.COUNT='+' || Word(LINE,1)
               End
            End
            Call Close('AtFile')
         End
         Else Do
            'RequestNotify PROMPT "Could not open file!"'
         End
      End
      Else Do Forever
         If COUNT>14 Then Break
         'RequestString TITLE "Attach" PROMPT "Enter area to attach to.'LF'Select CANCEL for menu."'
         If RC>0 Then Break

         ATTATCH=Result
         If Length(ATTATCH)=0 Then Break

         COUNT=COUNT+1
         ENTRY.COUNT='+' || Upper(ATTATCH)
      End
   End

   If (ARC=2) & (COUNT<15) Then Do Forever
      arc=-1
      If COUNT>14 Then break
      'RequestArea TITLE "Detach" ALL'
      DETATCH=Result
      If RC>0 Then Break
      If Length(DETATCH)=0 Then Break

      COUNT=COUNT+1
      ENTRY.COUNT='-' || Upper(DETATCH)
      If ANNOUNCE='Announce' Then Do
         If Exists(DETACH_TEMP) Then Do
            'GotoArea NAME "'DETATCH'"'
            'Write TO "All" SUBJECT "'DETACH_SUBJECT'" 'DONOTREMOVE' FILE "'DETACH_TEMP'" NOEDIT NOGUI'
            'GotoArea NAME "'REAL_NAME'"'
         End
      End
      If COUNT>14 Then Break
   End

   If ((ARC=3) & (COUNT>0) & (COUNT<15)) | ((ARC=1) & (COUNT>14)) Then Do
     arc=-1
     If COUNT=0 Then Do
       ARC=4
     End
     Else COUNT=COUNT-1
   End

   If ((ARC=4) & (COUNT>1) & (COUNT<15)) | (ARC=2) & (COUNT>14) Then Do
     arc=-1
     Do C=(COUNT+1) To 1 By -1
       D=C-1
       ENTRY.C=ENTRY.D
     End
     D=COUNT+1
     ENTRY.1=ENTRY.D
   End

   If ((ARC=3) & ((COUNT=0) | (COUNT>14))) | ((ARC=4) & (COUNT=1)) | ((ARC=5) & (COUNT>1) & (COUNT<15)) Then Do
      arc=-1
      If COUNT>0 Then Do c=1 TO COUNT
         Call WriteLn('File',ENTRY.c)
      End
      Call WriteLn('File','--- AFM')
      Call Close('File')

      'RequestResponse TITLE "Arealist etc." PROMPT "Request Arealist?" GADGETS "_Yes|_Other|_No"'
      If RC=1 Then PASS=PASS || ' -L'
      If RC=2 Then Do
         TEMPPASS=PASS
         Do Forever
            'RequestString TITLE "Other options" PROMPT "Enter options eg. -L -H" DEFAULT "'PASS'"'
            If RC>0 Then Exit
            PASS=Result
            Break
            End
         End
      'Write TO "'AREAFIX'" TOADDR "'ADDRESS'" SUBJECT "'PASS'" FILE "'TEMP'" REFLOW=OFF NOSIG NOEDIT NOGUI'
      'LastMessage'
      Exit
      End

   End
