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