home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 5 / FreshFish_July-August1994.bin / bbs / os20 / devicelock-1.2.lha / DeviceLock-1.2 / txt / DLprefs.mod < prev    next >
Text File  |  1994-03-18  |  13KB  |  404 lines

  1. MODULE DLprefs; 
  2.  
  3. IMPORT c  := Conversions,
  4.        d  := Dos,
  5.        DLs:= DLstrings,
  6.        DLr:= DLrequester,
  7.        e  := Exec,
  8.        fs := FileSystem,
  9.        hot:= HotKey,
  10.        I  := Intuition,
  11.        ol := OberonLib,
  12.        s  := Strings,
  13.        sys:= SYSTEM,
  14.        u  := Utility,
  15.        WB := WBReadArgs,
  16.        w  := Workbench;
  17.  
  18.  
  19. (*-------------------------------------------------------------------------*)
  20.  
  21. CONST
  22.   identLength     = 20;  (*  * drivenum * 2 *)
  23.   passkeyLength   = 30;  (*  * drivenum    *)
  24.   pubLength       = 60;  (*  * 1  *)
  25.   lockLength      = 30;  (*  * 2  *)
  26.  
  27.   lckallHot    -= -1;
  28.   opencloseHot -= -2;
  29.   gotofrontHot -= -3;
  30.   normallHot   -= -4;
  31.  
  32.   template = "SETTINGS/K,PS=PUBSCREEN/K,NOWARNINGS/S,TOOLPRI/N/K,"
  33.              "CX_PRIORITY/N/K,CX_POPUP/K,CX_POPKEY/K";
  34.  
  35.   LPkeep   -= 0;
  36.   LPlock   -= 1;
  37.   LPunlock -= -1;
  38.  
  39.  
  40. (*-------------------------------------------------------------------------*)
  41.  
  42. TYPE
  43.   LPOINTER = UNTRACED POINTER TO LONGINT;
  44.  
  45.   ARGV = STRUCT
  46.            settings  : e.LSTRPTR;
  47.            pubscr    : e.LSTRPTR;
  48.            noWarnings: LONGINT;
  49.            toolpri   : LPOINTER;
  50.            pri      -: LPOINTER;
  51.            popup     : e.LSTRPTR;
  52.            popkey    : e.LSTRPTR;
  53.          END;  
  54.  
  55.   driveT * = RECORD
  56.              GadPtr         *: I.GadgetPtr;
  57.              PrintName      *: ARRAY identLength OF CHAR;
  58.              DeviceName     *: ARRAY identLength OF CHAR;          
  59.              PassKey        *: ARRAY passkeyLength OF CHAR;
  60.              disabled       *: BOOLEAN;
  61.              locked         *: BOOLEAN;
  62.              lockprefs      -: SHORTINT; 
  63.              disabledchanged*: BOOLEAN;
  64.            END;
  65.   driveP * = POINTER TO ARRAY OF driveT;
  66.  
  67.   PrefsT = RECORD
  68.              LeftEdge       -: INTEGER;
  69.              TopEdge        -: INTEGER;
  70.              SizeOnlyZoom   -: BOOLEAN;
  71.              LeftEdgeZoomed -: INTEGER;
  72.              TopEdgeZoomed  -: INTEGER;
  73.              OpenWindow     -: BOOLEAN;
  74.              OpenZoomed     -: BOOLEAN;
  75.              CheckTime      -: INTEGER;
  76.  
  77.   (* do not store HotKeyDescriptions, only add them and then forget them
  78.      (for now!)
  79.              KeyLock        -: ARRAY OF CHAR;
  80.              KeyWindow      -: ARRAY OF CHAR;
  81.              KeyFront       -: ARRAY OF CHAR; *)
  82.  
  83.              PubScreen      -: ARRAY pubLength  OF CHAR;
  84.              LockString     -: ARRAY lockLength OF CHAR;
  85.              UnlockString   -: ARRAY lockLength OF CHAR;
  86.              NotifyDL       -: BOOLEAN;   (* not implemented *)
  87.              UnlockBeep     -: BOOLEAN;
  88.              LockAllBeep    -: BOOLEAN;
  89.              NormAllBeep    -: BOOLEAN;
  90.              RemPosition    -: BOOLEAN;   (* not implemented *)
  91.              DriveNum       -: INTEGER;
  92.            END;
  93.  
  94.  
  95. (*-------------------------------------------------------------------------*)
  96.  
  97. VAR
  98.   OSrelease3     -: BOOLEAN;
  99.  
  100.  
  101.   Buffer1      *: ARRAY 256 OF CHAR;
  102.   Buffer2       : ARRAY 256 OF CHAR;
  103.  
  104.   drive        *: driveP;
  105.   Prefs        *: PrefsT;
  106.  
  107.   Argv         -: ARGV;
  108.   Arguments     : d.RDArgsPtr;
  109.   wbargs        : WB.Arguments;
  110.   wbm           : w.WBStartupPtr;
  111.  
  112. (*-------------------------------------------------------------------------*)
  113.  
  114. CONST
  115.   PrefsConst = PrefsT(0,0,FALSE,-10,-10,TRUE,FALSE,5,"",
  116.                       "lock %s on %s","lock %s off %s",FALSE,TRUE,FALSE,FALSE,FALSE,0);
  117.   prgName  = "DeviceLock";
  118.  
  119.  
  120.  
  121. (*------ Read Prefs in DeviceLock.prefs from "", ENV: or PROGDIR: --------*)
  122.  
  123. PROCEDURE ReadPrefs*();
  124. VAR
  125.     wrongCV : BOOLEAN;
  126.     conf    : fs.File;
  127.     opwin   : BOOLEAN;
  128.     length  : INTEGER;
  129.  
  130.   (*---- Tries to Open settings and checks Version and returns TRUE
  131.          if there is a valid settings file                            -----*)
  132.  
  133.   PROCEDURE SearchPrefs(path: ARRAY OF CHAR):BOOLEAN;  (* $CopyArrays- *)
  134.   BEGIN
  135.     COPY(path,Buffer2);
  136.     IF ~ (fs.Open(conf,Buffer2,FALSE) AND fs.ReadString(conf,Buffer1)) THEN RETURN(FALSE) END;
  137.     s.Cut(Buffer1,s.Occurs(Buffer1,"VER")+5,16,Buffer2);
  138.     IF u.Strnicmp("DeviceLock.Prefs",Buffer2,17)#0 THEN
  139.       wrongCV := TRUE;
  140.       IF conf.handle # NIL THEN IF fs.Close(conf) THEN END END;
  141.       RETURN(FALSE);
  142.     ELSE
  143.       RETURN(TRUE)
  144.     END;
  145.   END SearchPrefs;
  146.  
  147.   (*---- Read Line from input, skipping lines beginning with ; ------------*)
  148.  
  149.   PROCEDURE GetNewLine():BOOLEAN;
  150.   VAR i     : INTEGER;
  151.       ret   : BOOLEAN;
  152.       equpos: INTEGER;
  153.   BEGIN
  154.     REPEAT
  155.       ret := fs.ReadString(conf,Buffer1);
  156.     UNTIL ((Buffer1[0]#";") & (Buffer1[0]#" ") & (Buffer1[0]#0X)) OR (ret=FALSE);
  157.     IF ret THEN
  158.        length := SHORT(s.Length(Buffer1));
  159.        i := 0;
  160.        WHILE ((i < length) & (Buffer1[i]#";")) DO
  161.          INC(i);
  162.        END; (* WHILE *)
  163.        IF Buffer1[i]=";" THEN Buffer1[i] := 0X END;
  164.        i := SHORT(s.Length(Buffer1))-1;
  165.        WHILE (i > 0) & ((Buffer1[i]=" ") OR (Buffer1[i]=09X)) DO
  166.          DEC(i);
  167.        END;
  168.        Buffer1[i+1]:=0X;
  169.        length := SHORT(s.Length(Buffer1));
  170.        i := 0;
  171.        WHILE ((i < length) & (Buffer1[i]#"=")) DO
  172.          INC(i);
  173.        END; (* WHILE *)
  174.        IF Buffer1[i]="=" THEN equpos := i ELSE equpos := -1 END;
  175.        IF (equpos = -1) OR (equpos+1 = length) THEN
  176.          Buffer2 := "INVALID";
  177.        ELSE
  178.          s.Cut(Buffer1,equpos+1,length-equpos-1,Buffer2);
  179.          Buffer1[equpos]:="\o";
  180.          length := SHORT(s.Length(Buffer2));
  181.        END;
  182.     END;
  183.     RETURN ret;
  184.   END GetNewLine;
  185.  
  186.   (*---- Convert Number, complain if not possible -------------------------*)
  187.  
  188.   PROCEDURE ConvNumber():INTEGER;
  189.   VAR number  : LONGINT;
  190.   BEGIN
  191.     IF c.StringToInt(Buffer2,number) & (number <= MAX(INTEGER)) THEN
  192.       RETURN(SHORT(number))
  193.     ELSE
  194.       DLr.RequestWarning(DLs.GetString(DLs.WarnCorruptNumber),sys.ADR(Buffer2));
  195.       RETURN (0);
  196.     END;
  197.   END ConvNumber;
  198.  
  199.   (*---- Convert Boolean, complain if not possible ------------------------*)
  200.  
  201.   PROCEDURE ConvBool():BOOLEAN;
  202.   BEGIN
  203.     IF CAP(Buffer2[0]) = "N" THEN RETURN FALSE
  204.     ELSIF CAP(Buffer2[0]) = "Y" THEN RETURN TRUE
  205.     ELSE
  206.       DLr.RequestWarning(DLs.GetString(DLs.WarnCorruptBoolean),sys.ADR(Buffer2));
  207.       RETURN(FALSE);
  208.     END;
  209.   END ConvBool;
  210.  
  211.   (*---- Copy String and check if orginal length --------------------------*)
  212.  
  213.   PROCEDURE CopyTo(VAR str: ARRAY OF CHAR);
  214.   BEGIN
  215.     COPY(Buffer2,str);
  216.     str[LEN(str)-1] := "\o"; (* Our strings end with \o ! *)
  217.     IF (s.Length(str) # s.Length(Buffer2)) THEN
  218.       DLr.RequestWarning(DLs.GetString(DLs.WarnStringTooLong),sys.ADR(str));
  219.     END;
  220.   END CopyTo;
  221.  
  222.   (*---- Tries to add Hotkey and warns on failure -------------------------*)
  223.   PROCEDURE AddKey (ID: INTEGER);
  224.   BEGIN
  225.     IF ~hot.AddKey (Buffer2,ID) THEN
  226.       IF hot.badDescription IN hot.ErrorSet THEN
  227.          DLr.RequestWarning(DLs.GetString(DLs.WarnNotValidKeyCode),sys.ADR(Buffer2));
  228.       ELSE
  229.        DLr.RequestWarning(DLs.GetString(DLs.WarnCannotAddKeyCode),sys.ADR(Buffer2));
  230.       END;
  231.     END;
  232.   END AddKey;
  233.  
  234.   (*---- Tries to determine number of drives ------------------------------*)
  235.   PROCEDURE GetNumberOfDrives():INTEGER;
  236.   VAR num: INTEGER;
  237.       ret: BOOLEAN;
  238.   BEGIN
  239.     num := 0;
  240.     REPEAT
  241.       ret := fs.ReadString(conf,Buffer1);
  242.       IF ret & (Buffer1[0]#";") & (Buffer1[0]#" ") & (Buffer1[0]#0X) THEN
  243.         IF u.Strnicmp("DeviceName=",Buffer1,11)=0 THEN INC(num) END;
  244.       END;
  245.     UNTIL ret=FALSE;
  246.     IF fs.Move(conf,0) THEN END;
  247.     RETURN(num);
  248.   END GetNumberOfDrives;
  249.  
  250.  
  251. BEGIN
  252. wrongCV := FALSE;
  253. opwin := FALSE;
  254. IF Argv.settings # NIL THEN
  255.   IF ~ SearchPrefs(Argv.settings^) THEN
  256.     IF wrongCV THEN
  257.       DLr.BailOut(DLs.GetString(DLs.ErrGivenSettingsNotValid)^);
  258.     ELSE
  259.       DLr.BailOut(DLs.GetString(DLs.ErrCantOpenOrReadGivenSettings)^);
  260.     END;
  261.   END;
  262. ELSE
  263.   IF ~ SearchPrefs("DeviceLock.Prefs") THEN
  264.     IF ~ SearchPrefs("ENV:DeviceLock.Prefs") THEN
  265.       IF ~ SearchPrefs("PROGDIR:DeviceLock.Prefs") THEN
  266.         IF wrongCV THEN
  267.           DLr.BailOut(DLs.GetString(DLs.ErrWrongPrefs)^);
  268.         ELSE
  269.           DLr.BailOut(DLs.GetString(DLs.ErrCantFindAnyPrefs)^);
  270.         END;
  271.       END;
  272.     END;
  273.   END;
  274. END;
  275.  
  276. Prefs.DriveNum := GetNumberOfDrives();
  277. IF Prefs.DriveNum >= MAX(INTEGER) THEN Prefs.DriveNum := MAX(INTEGER)-1 END;