i21edu/Mod/Обслуга.odc

MODULE  i21eduОбслуга; (* 2009-10-19 info21; последние изменения: 2010-10-25 *)
	IMPORT  Log := StdLog,  In := i21sysIn,  Math,  Dialog, 
		TextModels,  TextViews,  Files,  Views,  Cyr := i21sysCyrillic,  i21sysFiles;
	
	VAR  loc: Files.Locator;
		папка: ARRAY 2000 OF CHAR;
		сделано-: BOOLEAN;
		
	
	PROCEDURE Заготовки ( новПапка: ARRAY OF CHAR );
		VAR  res: INTEGER;  l: Files.Locator;
	BEGIN
		l := Files.dir.This( новПапка );
		IF ( l # NIL ) & ( l.res # 0 ) THEN
			Dialog.GetOK( 'папка не найдена!', '','','',{Dialog.ok}, res );
			сделано := FALSE
		ELSE
			loc := l;
			папка := новПапка$;
			сделано := TRUE
		END
	END Заготовки;
	
	PROCEDURE ОткрытьКопию* ( заготовка, подсказки: ARRAY OF CHAR );
		VAR  new, old, hint: TextModels.Model;  v0: Views.View;  обр, новый: TextViews.View;  res: INTEGER;
	BEGIN
		сделано := FALSE;
		v0 := Views.OldView( loc, заготовка$ );
		IF  v0 = NIL  THEN
			Dialog.GetOK('документ не найден!', '','','',{Dialog.ok}, res );
		ELSE
			обр := v0( TextViews.View );
			old := обр.ThisModel();
			new := TextModels.dir.New();
			new.InsertCopy( 0, old, 0, old.Length() );
			
			IF подсказки # '' THEN
				v0 := Views.OldView( loc, подсказки$ );
				IF  v0 # NIL  THEN
					обр := v0( TextViews.View );
					old := обр.ThisModel();
					new.InsertCopy( new.Length(), old, 0, old.Length() );
				END;
			END;
			
			новый := TextViews.dir.New( new );
			сделано := TRUE;
			Views.OpenView( новый );
			Views.SetDirty( новый );
		END;
	END ОткрытьКопию; 
(* "i21eduОбслуга.ОткрытьКопию('0-ru','подсказки')" 
	"i21eduОбслуга.ОткрытьКопию('ыы/ээ','')"
	*)
	
	PROCEDURE СоздатьПодпапки ( п: Files.Locator ); (* создаем подпапки *)
		CONST  tmp = 'strcprstskrzkrk';
		VAR  name: ARRAY 3 OF Files.Name;  t: Files.Locator;  f: Files.File;  i, res: INTEGER;
	BEGIN
		name[ 0 ] := 'Code';
		name[ 1 ] := 'Mod';
		name[ 2 ] := 'Sym';
		FOR  i := 0  TO  LEN( name ) - 1  DO
			t := п.This( name[ i ] );
			(* три следующие инструкции форсируют создание папки t: *)
			f := Files.dir.New( t, Files.dontAsk );
			f.Register( tmp, '', Files.dontAsk, res );  ASSERT( res = 0 );
			Files.dir.Delete( t, tmp );  ASSERT( t.res = 0 );
			Log.String( '      создали подпапку ' + name[ i ] );  Log.Ln;
		END;
	END СоздатьПодпапки;
	
	PROCEDURE СделатьКласс*;
		VAR  BlackBoxHome, класс: Files.Locator;  скрипт, копия: Files.File;
			папкаКласса:  ARRAY 1000 OF CHAR;
			имяСкрипта, имяУченика: ARRAY 50 OF CHAR;
			папкаУченика: Files.Locator;  res: INTEGER;
	BEGIN
		BlackBoxHome := Files.dir.This('');
		In.Open;  ASSERT( In.Done );
		In.String( имяСкрипта );  ASSERT( In.Done );
		Cyr.ToExtendedAscii( имяСкрипта, имяСкрипта );
		
		скрипт := Files.dir.Old( BlackBoxHome, имяСкрипта$, Files.shared );  ASSERT( скрипт # NIL );
		
		In.String( папкаКласса );  ASSERT( In.Done );
		Log.Ln;
		Log.String( 'создаем рабочие папки в ' + папкаКласса$ );
		Log.Ln;
		
		класс := Files.dir.This( папкаКласса );
		
		In.String( имяУченика );  ASSERT( In.Done );
		WHILE  In.Done  DO
			Log.String( '   создаем рабочую папку для ' + имяУченика$ );  Log.Ln;
			папкаУченика := класс.This( имяУченика$ );
			i21sysFiles.Copy( скрипт, папкаУченика, копия, res );  ASSERT( res = 0 );
			копия.Register( имяСкрипта$, '', Files.dontAsk, res );     ASSERT( res = 0 );
			СоздатьПодпапки( папкаУченика );
			In.String( имяУченика )
		END;
		Log.String( '***** создание рабочих папок завершено.' );  Log.Ln;
	END СделатьКласс;

BEGIN
	Заготовки( 'i21edu/Заготовки' ) (* папка, из которой по умолчанию берутся заготовки *)
END  i21eduОбслуга.


"i21eduОбслуга.Заготовки('i21edu/Заготовки2')"
"i21eduОбслуга.ОткрытьКопию('2','2')"