head 1.6; branch ; access ; symbols ; locks ; comment @@; 1.6 date 1996.02.15.22.25.21; author Sven_Goethel; state Exp; branches ; next 1.5; 1.5 date 1996.02.13.06.35.43; author Sven_Goethel; state Exp; branches ; next 1.4; 1.4 date 1995.11.29.02.20.10; author Sven_Goethel; state Exp; branches ; next 1.3; 1.3 date 1995.11.29.01.59.33; author Sven_Goethel; state Exp; branches ; next 1.2; 1.2 date 1995.11.28.20.31.45; author Sven_Goethel; state Exp; branches ; next 1.1; 1.1 date 1995.11.28.20.30.31; author Sven_Goethel; state Exp; branches ; next ; desc @original read and write @ 1.6 log @see rcfs.c @ text @ /* * $Log: rcfsmain.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. */ read_entry(1, Buffer); /* init ramcard */ cursor(CURSOR_OFF); /* Cursor aus */ } void ReleaseCom(void) { clrscr(); /* Text- und */ cleardevice(); /* Grafikbildschirm l”schen. */ cursor(CURSOR_OFF); /* Cursor aus */ 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 }; static void PrintUsage(const char *argv) { #ifdef _WITH_KL_806_ printf("Version $Revision: 1.5 $\n"); printf("usage : %s [ ]\n", argv); printf(" com-port-nr := [1..2],\n"); printf(" commands := \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(" -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]; rc_state state; unsigned short blksize; double inodepct; rc_handle *hdle=NULL; size_t f_res, help; bool verbose=false; bool recursiv=false, flong=false; int argcofs=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],"-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],"-checkfs")==0) command=RCCHECK; } for(i=3; i=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)-1; i>=0 && Buffer[i]!='*'; i--) ; Buffer[i]=0; strcpy(prefix,&(Buffer[i+1])); 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=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 \n"); printf(" -rc2dos \n"); printf(" -rcformat \n"); printf(" -rcdir \n"); printf(" -rctestwr [cmp]\n"); printf(" -rctestbf [crcoff]\n"); printf(" -rctestrd \n"); printf(" -rctestdump \n"); printf(" where <*-dosdin-file> must be a valid dos-filename \n"); printf(" and <*-ramcarddin-entry> must be a valid \n"); printf(" number between [1..????] \n"); #else printf("usage : %s \n", argv); d99 1 a99 1 int result, com_port, i, j, k; d101 3 a103 7 unsigned long bcleft; unsigned long ncleft; unsigned long _cleft; unsigned char Buffer[2000]; unsigned char Buffer2[2000]; unsigned char status, fillb; int startblk, endblk, step; d105 6 a110 1 bool cmp, crcoff; a111 4 #ifdef _WITH_TESTS_ HeapFullTest(); #endif d114 3 a116 11 bcleft=bcoreleft(); ncleft=ncoreleft(); printf("netto coreleft avaiable %lu\n", ncleft); printf("brutto coreleft avaiable %lu\n", bcleft); _HeapCheck(__LINE__); #ifdef _WITH_KL_806_ printf("Teste DIN-RAM I/O und KL806-Terminal\n"); #else printf("Teste DIN-RAM I/O\n"); d133 5 a137 12 if(argc==2) command=NONE; else if(strcmp(argv[2],"-dos2rc")==0) command=DOS2RC; else if(strcmp(argv[2],"-rc2dos")==0) command=RC2DOS; else if(strcmp(argv[2],"-rcformat")==0) command=RCFORMAT; else if(strcmp(argv[2],"-rcdir")==0) command=RCDIR; else if(strcmp(argv[2],"-rctestrd")==0) command=RCTESTRD; else if(strcmp(argv[2],"-rctestwr")==0) command=RCTESTWR; else if(strcmp(argv[2],"-rctestdump")==0) command=RCTESTDUMP; else if(strcmp(argv[2],"-rctestbf")==0) command=RCTESTBF; if(((command==DOS2RC||command==RC2DOS) && argc!=5 ) || command==NONE ) d139 7 a145 3 PrintUsage(argv[0]); ReleaseCom(); return 0; d147 19 d168 12 a179 4 transmit('['); status=format_ramcard(); transmit(']'); if(RAMCARD_ERROR) d181 1 a181 1 PutRamcardError(status); d186 4 a189 13 show_directory("dir","press return"); } else if(command==DOS2RC) { } else if(command==RC2DOS) { } else if(command==RCTESTWR || command==RCTESTRD || command==RCTESTBF ) { if(argc<7) d191 6 a196 3 PrintUsage(argv[0]); ReleaseCom(); return 0; d198 3 a200 6 blksize=atoi(argv[3]); startblk=atoi(argv[4]); endblk=atoi(argv[5]); step=atoi(argv[6]); cmp=false; if(blksize!=256) d202 1 a202 3 printf("BLOCKSIZE must be 256 at this moment !\n"); ReleaseCom(); return 0; d204 2 a205 1 if(step<1) d207 1 a207 3 printf("STEP must be greater or equal 1 !\n"); ReleaseCom(); return 0; d209 7 d217 1 a217 1 if(command==RCTESTWR) d219 2 a220 1 if(argc==10 && strcmp(argv[9],"cmp")==0) cmp=true; d222 1 a222 6 for(i=startblk; i<=endblk; i+=step) { fillb=(unsigned char)(atoi(argv[8])); for(j=0; j=8) strcpy(Buffer,argv[7]); set_checksum(Buffer); d224 13 a236 23 status=write_entry(i, Buffer); if(RAMCARD_ERROR) { PutRamcardError(status); break; } if(cmp) { status=read_entry(i, Buffer2); if(RAMCARD_ERROR) { PutRamcardError(status); break; } if(memcmp (Buffer, Buffer2, blksize)) { printf("memcmp failed block %d ....", i); break; } } if(cmp) printf("wr blk no. %d -- cmp ok \n", i); else printf("wr blk no. %d -- without cmp \n", i); } d238 14 a251 1 else if(command==RCTESTRD) d253 1 a253 1 for(i=startblk; i<=endblk; i+=step) d255 2 a256 7 status=read_entry(i, Buffer2); if(RAMCARD_ERROR) { PutRamcardError(status); break; } printf("rd blk no. %d", i); d258 20 d279 2 a280 1 else if(command==RCTESTBF) d282 9 a290 15 fillb=(unsigned char)(atoi(argv[7])); if(argc>8) crcoff=strcmp(argv[8],"crcoff")==0; else crcoff=false; for(i=startblk; i<=endblk; i+=step) { if(i==startblk) j=0; do { if(crcoff) printf("crcoff, "); else printf("crcon, "); printf("fillb = %d, fillsize = %d\n", fillb, j); for(k=0; k [cmp]\n"); printf(" -rctestrd [cmp]\n"); d95 1 a95 1 unsigned char status; d98 1 a98 1 bool cmp; d141 1 d170 3 a172 1 else if(command==RCTESTWR || command==RCTESTRD) a184 1 if(argc==8 && strcmp(argv[7],"cmp")==0) cmp=true; d200 2 d204 3 a206 2 for(j=0; j