/* * $Log: rcfsmain.c $ * Revision 1.8 1996/03/05 14:39:35 Sven_Goethel * *** empty log message *** * Revision 1.7 1996/03/05 14:15:24 Sven_Goethel * *** empty log message *** * Revision 1.6 1996/02/15 22:25:21 Sven_Goethel * see rcfs.c * Revision 1.5 1996/02/13 06:35:43 Sven_Goethel * it works * Revision 1.4 1995/11/29 02:20:10 Sven_Goethel * checking out varius block sizes, with own block r/w functions * Revision 1.3 1995/11/29 01:59:33 Sven_Goethel * plus rctest parts * found that the first 17 bytes of a block (256) must be * non zero, and that the last byte (255) is implizit set with the * checksum !!!!!! * Revision 1.2 1995/11/28 20:31:45 Sven_Goethel * *** empty log message *** * Revision 1.1 1995/11/28 20:30:31 Sven_Goethel * Initial revision */ #ifndef _C166_ #include #include #include #endif #include "bool.h" # include "rcfs.h" # include "mainterm.h" # include "interror.h" # include # include #ifdef _WITH_KL_806_ #include "mainterm.h" #endif static FILE *fTestFile=NULL; #ifndef _C166_ void InitCom(int com_port) { unsigned char Buffer[256]; if(com_port!=1&&com_port!=2) INT_ERR(__LINE__); com0_status = XON; com_nr = com_port; install_uart(); /* IRPT-Routine installieren */ clrscr(); /* Text- und */ cleardevice(); /* Grafikbildschirm l”schen. */ } void ReleaseCom(void) { clrscr(); /* Text- und */ cleardevice(); /* Grafikbildschirm l”schen. */ cputs(" ... thanx and goodbye :-) "); remove_uart(); /* IRPT-Routine entfernen */ } extern unsigned _stklen = 543210U; #endif static void _HeapCheck(int line) { if(heapcheck()<0) { ErrorOut("HeapError before line %d", line); INT_ERR(line); } } enum cmd { NONE, DOS2RC, RC2DOS, RCFORMAT, RCMKDIR, RCRM, RCCHECK, RCDIR, RCCHMOD, DOS2KL806 }; static void PrintUsage(const char *argv) { #ifdef _WITH_KL_806_ printf("Version $Revision: 1.8 $\n"); printf("usage : %s [ ]\n", argv); printf(" com-port-nr := [1..2],\n"); printf(" commands := \n"); printf(" ( rc=RAMCARD, dos=dos-fat, ls=directory, chmod=change mode,\n"); printf(" rm=remove, checkfs=check filesystem, format=format ramcard,\n"); printf(" cp2kl806=dos->ramcard with kl806-bediener-organisation,\n"); printf(" code=code of the kl806-transfer-device\n"); printf(" )\n"); printf(" -cp2kl806 [-v] \n"); printf(" -cp2rc [-v] [ [..]] \n"); printf(" -cp2dos [-v] [ [..]] \n"); printf(" -format [-v] [] \n"); printf(" -mkdir [-v] \n"); printf(" -ls [-v] [-l] [-r] []\n"); printf(" -rm [-v] [-r] \n"); printf(" -chmod [-v] [-r] [u][g][o]+=[r][w][x] \n"); printf(" -checkfs [-v]\n"); printf(" where all values in '<...>' those brackets are parameters\n"); printf(" and all values not in those brackets are keywords\n"); printf(" and must be a valid dos-filename \n"); printf(" or a valid ramcard-filename \n"); printf(" depending if using dos2rc or rc2dos\n"); printf(" and [<...>] or [...] is an optional parameter/keyword\n"); #endif } int main (int argc, char *argv[]) { int result, com_port, i, k; enum cmd command; unsigned long FileSize, j; char Buffer[10000], prefix[FNAMESZ]; char BufferA[4]; char BufferG[4]; char BufferO[4]; char BufferT[4]; rc_state state; unsigned short blksize; double inodepct; rc_handle *hdle=NULL; size_t f_res, help; bool verbose=false, ch4own, ch4all, ch4grp; bool recursiv=false, flong=false; bool Exists; int argcofs=0; char *strptr=0; _HeapCheck(__LINE__); #ifndef _WITH_KL_806_ printf("KL806-Terminal needed\n"); exit(1); #endif if(argc<2) { PrintUsage(argv[0]); return 0; } com_port=atoi(argv[1]); if(com_port!=1 && com_port!=2) { PrintUsage(argv[0]); return 0; } InitCom(com_port); clrscr(); cleardevice(); (void) rc_blk_close(); command=NONE; if(argc>=3+argcofs) { if(strcmp(argv[2+argcofs],"-cp2rc")==0) command=DOS2RC; else if(strcmp(argv[2+argcofs],"-cp2kl806")==0) command=DOS2KL806; else if(strcmp(argv[2+argcofs],"-cp2dos")==0) command=RC2DOS; else if(strcmp(argv[2+argcofs],"-format")==0) command=RCFORMAT; else if(strcmp(argv[2+argcofs],"-ls")==0) command=RCDIR; else if(strcmp(argv[2+argcofs],"-mkdir")==0) command=RCMKDIR; else if(strcmp(argv[2+argcofs],"-rm")==0) command=RCRM; else if(strcmp(argv[2+argcofs],"-chmod")==0) command=RCCHMOD; else if(strcmp(argv[2+argcofs],"-checkfs")==0) command=RCCHECK; } for(i=3; i=4+argcofs) { strptr=argv[3+argcofs]; ch4own=0; ch4grp=0; ch4all=0; for(i=0; i=5+argcofs) { if(verbose) printf("chmod %s %s\n", Buffer, argv[4+argcofs]); state = rc_mount(true /* write back */); if(state==RCFS_OK) state = rc_chmod( rc_getuid(Buffer), argv[4+argcofs], ch4own, ch4grp, ch4all, recursiv); if(state!=RCFS_OK) rc_put_err(state); rc_umount(); } } } else if(command==RCCHECK) { if(verbose) printf("checkfs\n"); state = rc_checkfs(verbose); if(state!=RCFS_OK) rc_put_err(state); } else if(command==RCFORMAT) { blksize=256; inodepct=1.0; if(argc>=4+argcofs) blksize=atoi(argv[3+argcofs]); if(argc>=5+argcofs) inodepct=atof(argv[4+argcofs]); if(verbose) printf("format blocksize=%d, inode-percentage=%lf\n", blksize, inodepct); state = rc_format(blksize, inodepct, RC_OWN_RD | RC_OWN_WR | RC_OWN_RDWR | RC_OWN_EX | RC_GRP_RD | RC_GRP_WR | RC_GRP_RDWR | RC_GRP_EX | RC_ALL_RD | RC_ALL_WR | RC_ALL_RDWR | RC_ALL_EX ); if(state!=RCFS_OK) { rc_put_err(state); } } else if(command==RCDIR) { state = rc_mount(true /* write back */); prefix[0]=0; if(state==RCFS_OK && argc>=4+argcofs ) { if(verbose) printf("ls %s\n", argv[argc-1]); strcpy(Buffer, argv[argc-1]); for(i=strlen(Buffer); i>0 && Buffer[i-1]!='*'; i--) ; if(i>0) { Buffer[i-1]=0; strcpy(prefix,&(Buffer[i])); } state = rc_cd(Buffer); } else if(verbose) printf("ls /.\n"); if(state==RCFS_OK) { state = rc_dir(Buffer, 10000, prefix, recursiv, flong); } if(state!=RCFS_OK) rc_put_err(state); else { printf("\n%s\n", Buffer); } state = rc_umount(); if(state!=RCFS_OK) rc_put_err(state); } else if(command==RCMKDIR) { if(verbose) printf("mkdir %s\n", argv[argc-1]); state = rc_mount(true /* write back */); if(state==RCFS_OK) { state = rc_mkdir(argv[argc-1]); } if(state!=RCFS_OK) rc_put_err(state); state = rc_umount(); if(state!=RCFS_OK) rc_put_err(state); } else if(command==RCRM) { if(verbose) printf("rm %s %s\n", (recursiv==true)?"recursiv":"normal",argv[argc-1]); state = rc_mount(true /* write back */); if(state==RCFS_OK) { state = rc_rm(argv[argc-1], recursiv); } if(state!=RCFS_OK) rc_put_err(state); state = rc_umount(); if(state!=RCFS_OK) rc_put_err(state); } else if(command==DOS2RC && argc>=5+argcofs) { state = rc_mount(true /* write back */); if(state==RCFS_OK) hdle = rc_open(argv[argc-1], RC_CREATE|RC_WRITE); if(!hdle) state=rc_geterr(); for(i=3+argcofs; i> %s (1 dot all 2kByte)\n", argv[i], argv[argc-1]); } if( fseek(fTestFile, 0, SEEK_END) ) INT_ERR(__LINE__); FileSize=ftell(fTestFile); if( fseek(fTestFile, 0, SEEK_SET) ) INT_ERR(__LINE__); for(j=0; j> %s (1 dot all 2kByte)\n", argv[argc-1], Buffer); } if(fTestFile&&state==RCFS_OK) { if( fseek(fTestFile, 0, SEEK_END) ) INT_ERR(__LINE__); FileSize=ftell(fTestFile); if( fseek(fTestFile, 0, SEEK_SET) ) INT_ERR(__LINE__); for(j=0; j=4+argcofs) { state = rc_mount(true /* write back */); if(state==RCFS_OK) { if((fTestFile=fopen(argv[argc-1],"wb"))==NULL) { fprintf(stderr,"can't open dos file %s ! abborted !\n", argv[i]); } } for(i=3+argcofs; fTestFile && i> %s (1 dot all 2kByte)\n", argv[i], argv[argc-1]); if( rc_fseek(hdle, 0, SEEK_END) ) INT_ERR(__LINE__); FileSize=rc_ftell(hdle); if( rc_fseek(hdle, 0, SEEK_SET) ) INT_ERR(__LINE__); for(j=0; j